summaryrefslogtreecommitdiff
path: root/package/busybox/patches/300-netmsg.patch
blob: d9d2f14a874d7e4e2b502986ad1d0118202669df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
diff --git a/include/applets.src.h b/include/applets.src.h
index f4fab53..f97f2d8 100644
--- a/include/applets.src.h
+++ b/include/applets.src.h
@@ -256,6 +256,7 @@ IF_MT(APPLET(mt, _BB_DIR_BIN, _BB_SUID_DROP))
 IF_MV(APPLET(mv, _BB_DIR_BIN, _BB_SUID_DROP))
 IF_NAMEIF(APPLET(nameif, _BB_DIR_SBIN, _BB_SUID_DROP))
 IF_NC(APPLET(nc, _BB_DIR_USR_BIN, _BB_SUID_DROP))
+IF_NETMSG(APPLET(netmsg, _BB_DIR_BIN, _BB_SUID_REQUIRE))
 IF_NETSTAT(APPLET(netstat, _BB_DIR_BIN, _BB_SUID_DROP))
 IF_NICE(APPLET(nice, _BB_DIR_BIN, _BB_SUID_DROP))
 IF_NMETER(APPLET(nmeter, _BB_DIR_USR_BIN, _BB_SUID_DROP))
diff --git a/include/usage.src.h b/include/usage.src.h
index 30fef24..ac78992 100644
--- a/include/usage.src.h
+++ b/include/usage.src.h
@@ -1,3 +1,4 @@
+
 /* vi: set sw=8 ts=8: */
 /*
  * This file suffers from chronically incorrect tabification
@@ -2706,6 +2707,9 @@ INSERT
        " or\n" \
        "$ nameif -c /etc/my_mactab_file\n" \
 
+#define netmsg_trivial_usage NOUSAGE_STR
+#define netmsg_full_usage ""
+
 #define nmeter_trivial_usage \
        "format_string"
 #define nmeter_full_usage "\n\n" \
diff --git a/networking/Config.src b/networking/Config.src
index 6dd7df7..4682dd3 100644
--- a/networking/Config.src
+++ b/networking/Config.src
@@ -640,6 +640,12 @@ config FEATURE_NAMEIF_EXTENDED
 	    new_interface_name  mac=00:80:C8:38:91:B5
 	    new_interface_name  00:80:C8:38:91:B5
 
+config NETMSG
+	bool "netmsg"
+	default n
+	help
+	  simple program for sending udp broadcast messages
+
 config NETSTAT
 	bool "netstat"
 	default y
diff --git a/networking/Kbuild.src b/networking/Kbuild.src
index f41a2df..6070a40 100644
--- a/networking/Kbuild.src
+++ b/networking/Kbuild.src
@@ -27,6 +27,7 @@ lib-$(CONFIG_IP)           += ip.o
 lib-$(CONFIG_IPCALC)       += ipcalc.o
 lib-$(CONFIG_NAMEIF)       += nameif.o
 lib-$(CONFIG_NC)           += nc.o
+lib-$(CONFIG_NETMSG)       += netmsg.o
 lib-$(CONFIG_NETSTAT)      += netstat.o
 lib-$(CONFIG_NSLOOKUP)     += nslookup.o
 lib-$(CONFIG_NTPD)         += ntpd.o
diff --git a/networking/netmsg.c b/networking/netmsg.c
new file mode 100644
index 0000000..43aba0d
--- /dev/null
+++ b/networking/netmsg.c
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
+ *
+ * This is free software, licensed under the GNU General Public License v2.
+ */
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "busybox.h"
+
+
+#ifndef CONFIG_NETMSG
+int main(int argc, char **argv)
+#else
+int netmsg_main(int argc, char **argv)
+#endif
+{
+	int s;
+	struct sockaddr_in addr;
+	int optval = 1;
+	unsigned char buf[1001];
+
+	if (argc != 3) {
+		fprintf(stderr, "usage: %s <ip> \"<message>\"\n", argv[0]);
+		exit(1);
+	}
+
+	if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+		perror("Opening socket");
+		exit(1);
+	}
+
+	memset(&addr, 0, sizeof(addr));
+	addr.sin_family = AF_INET;
+	addr.sin_addr.s_addr = inet_addr(argv[1]);
+	addr.sin_port = htons(0x1337);
+
+	memset(buf, 0, 1001);
+	buf[0] = 0xde;
+	buf[1] = 0xad;
+
+	strncpy(buf + 2, argv[2], 998);
+
+	if (setsockopt (s, SOL_SOCKET, SO_BROADCAST, (caddr_t) &optval, sizeof (optval)) < 0) {
+		perror("setsockopt()");
+		goto fail;
+	}
+
+	if (sendto(s, buf, 1001, 0, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
+		perror("sendto()");
+		goto fail;
+	}
+
+	return 0;
+	
+fail:
+	close(s);
+	exit(1);
+}