aboutsummaryrefslogtreecommitdiffstats
path: root/code/unix/LinuxSupport/udp_wide_broadcast.patch
blob: 2f1092e51cf5cc86002fbb67a7e627bfbe4d6da1 (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
--- linux/include/linux/sysctl.h.orig	2002-08-17 19:52:27.000000000 -0500
+++ linux/include/linux/sysctl.h	2002-08-17 19:53:00.000000000 -0500
@@ -291,7 +291,8 @@
 	NET_IPV4_NONLOCAL_BIND=88,
 	NET_IPV4_ICMP_RATELIMIT=89,
 	NET_IPV4_ICMP_RATEMASK=90,
-	NET_TCP_TW_REUSE=91
+	NET_TCP_TW_REUSE=91,
+	NET_UDP_WIDE_BROADCAST=92
 };
 
 enum {
--- linux-modified/net/ipv4/sysctl_net_ipv4.c.orig	2002-08-17 19:48:19.000000000 -0500
+++ linux-modified/net/ipv4/sysctl_net_ipv4.c	2002-08-17 19:52:03.000000000 -0500
@@ -45,6 +45,9 @@
 extern int inet_peer_gc_mintime;
 extern int inet_peer_gc_maxtime;
 
+/* From udp.c */
+extern int sysctl_udp_wide_broadcast;
+
 #ifdef CONFIG_SYSCTL
 static int tcp_retr1_max = 255; 
 static int ip_local_port_range_min[] = { 1, 1 };
@@ -221,6 +224,8 @@
 	 &sysctl_icmp_ratemask, sizeof(int), 0644, NULL, &proc_dointvec},
 	{NET_TCP_TW_REUSE, "tcp_tw_reuse",
 	 &sysctl_tcp_tw_reuse, sizeof(int), 0644, NULL, &proc_dointvec},
+	{NET_UDP_WIDE_BROADCAST, "udp_wide_broadcast",
+	 &sysctl_udp_wide_broadcast, sizeof(int), 0644, NULL, &proc_dointvec},
 	{0}
 };
 
--- linux-modified/net/ipv4/udp.c.orig	2002-08-17 19:40:59.000000000 -0500
+++ linux-modified/net/ipv4/udp.c	2002-08-17 23:37:47.000000000 -0500
@@ -94,6 +94,8 @@
 #include <net/inet_common.h>
 #include <net/checksum.h>
 
+int sysctl_udp_wide_broadcast = 0;
+
 /*
  *	Snmp MIB for the UDP layer
  */
@@ -272,9 +274,10 @@
 		if ((s->num != hnum)					||
 		    (s->daddr && s->daddr!=rmt_addr)			||
 		    (s->dport != rmt_port && s->dport != 0)			||
-		    (s->rcv_saddr  && s->rcv_saddr != loc_addr)		||
-		    (s->bound_dev_if && s->bound_dev_if != dif))
+		    !(sysctl_udp_wide_broadcast || !(s->rcv_saddr  && s->rcv_saddr != loc_addr))	||
+		    (s->bound_dev_if && s->bound_dev_if != dif)) {
 			continue;
+		}
 		break;
   	}
   	return s;