summaryrefslogtreecommitdiffstats
path: root/tests/sys/netinet/udp_dontroute.c
diff options
context:
space:
mode:
authorasomers <asomers@FreeBSD.org>2014-05-07 18:49:25 +0000
committerasomers <asomers@FreeBSD.org>2014-05-07 18:49:25 +0000
commitb9bac26480d30c76e6ba2c15dba46074285a30fd (patch)
tree2994928958c58c1c6f6f66b4c01ed0ffc99e2338 /tests/sys/netinet/udp_dontroute.c
parente6ff98d4361d5f9057e3b87fa8bc17b67589cb2a (diff)
downloadFreeBSD-src-b9bac26480d30c76e6ba2c15dba46074285a30fd.zip
FreeBSD-src-b9bac26480d30c76e6ba2c15dba46074285a30fd.tar.gz
MFC r263445 and r265385. Note that the change to ObsoleteFiles.inc in
r265385 does not need to be MFCed, because the obsolete files in question were never MFCed to any stable branch. r265385 Remove the ifconfig test added in rev 263445. After discussion with melifaro, we agreed that ifconfig's behavior was not a bug. The main motivation for bin/187551 was to partially resolve kern/187549, but we resolved kern/187549 in a different way instead. ObsoleteFiles.inc etc/mtree/BSD.tests.dist sbin/ifconfig/tests/fibs_test.sh sbin/ifconfig/tests/Makefile sbin/ifconfig/Makefile Remove /usr/tests/sbin/ifconfig r263445 Add several ATF tests that deal with multiple fibs. They're described in several different PRs, but the tests share some common code, so I'm committing them together. sbin/ifconfig/tests sbin/ifconfig/tests/fibs_test.sh sbin/ifconfig/tests/Makefile sbin/ifconfig/Makefile Add fibs_test.sh, which regresses bin/187551 tests/sys/netinet tests/sys/netinet/fibs_test.sh tests/sys/netinet/udp_dontroute.c tests/sys/netinet/Makefile tests/sys/Makefile Add fibs_test.sh, which regresses kern/167947, kern/187552 kern/187549, kern/187550, and kern/187553 etc/mtree/BSD.tests.dist Add newly created directories
Diffstat (limited to 'tests/sys/netinet/udp_dontroute.c')
-rw-r--r--tests/sys/netinet/udp_dontroute.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/sys/netinet/udp_dontroute.c b/tests/sys/netinet/udp_dontroute.c
new file mode 100644
index 0000000..1e162a1
--- /dev/null
+++ b/tests/sys/netinet/udp_dontroute.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2014 Spectra Logic Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * substantially similar to the "NO WARRANTY" disclaimer below
+ * ("Disclaimer") and any redistribution must be conditioned upon
+ * including a substantially similar Disclaimer requirement for further
+ * binary redistribution.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ *
+ * Authors: Alan Somers (Spectra Logic Corporation)
+ *
+ * $FreeBSD$
+ */
+
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <err.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/*
+ * Sends a single UDP packet to the provided address, with SO_DONTROUTE set
+ * I couldn't find a way to do this with builtin utilities like nc(1)
+ */
+int
+main(int argc, char **argv)
+{
+ struct sockaddr_in dst;
+ int s;
+ int opt;
+ int ret;
+ const char* buf = "Hello, World!";
+
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s ip_address\n", argv[0]);
+ exit(2);
+ }
+ s = socket(PF_INET, SOCK_DGRAM, 0);
+ if (s < 0)
+ err(errno, "socket");
+ opt = 1;
+
+ ret = setsockopt(s, SOL_SOCKET, SO_DONTROUTE, &opt, sizeof(opt));
+ if (ret == -1)
+ err(errno, "setsockopt(SO_DONTROUTE)");
+
+ dst.sin_len = sizeof(dst);
+ dst.sin_family = AF_INET;
+ dst.sin_port = htons(46120);
+ dst.sin_addr.s_addr = inet_addr(argv[1]);
+ if (dst.sin_addr.s_addr == htonl(INADDR_NONE)) {
+ fprintf(stderr, "Invalid address: %s\n", argv[1]);
+ exit(2);
+ }
+ ret = sendto(s, buf, strlen(buf), 0, (struct sockaddr*)&dst,
+ dst.sin_len);
+ if (ret == -1)
+ err(errno, "sendto");
+
+ return (0);
+}
OpenPOWER on IntegriCloud