summaryrefslogtreecommitdiffstats
path: root/sys/netinet/udp_usrreq.c
diff options
context:
space:
mode:
authorbms <bms@FreeBSD.org>2003-08-20 14:46:40 +0000
committerbms <bms@FreeBSD.org>2003-08-20 14:46:40 +0000
commit3af3c5ae44ef98b9f2da135dcb64cfc12acd0f39 (patch)
treeb0740a95462efb0df015bc34d5d05f5d96cd2f3b /sys/netinet/udp_usrreq.c
parent5546ba50272e71097a2f7c6b9fbec902cf58c4ea (diff)
downloadFreeBSD-src-3af3c5ae44ef98b9f2da135dcb64cfc12acd0f39.zip
FreeBSD-src-3af3c5ae44ef98b9f2da135dcb64cfc12acd0f39.tar.gz
Add the IP_ONESBCAST option, to enable undirected IP broadcasts to be sent on
specific interfaces. This is required by aodvd, and may in future help us in getting rid of the requirement for BPF from our import of isc-dhcp. Suggested by: fenestro Obtained from: BSD/OS Reviewed by: mini, sam Approved by: jake (mentor)
Diffstat (limited to 'sys/netinet/udp_usrreq.c')
-rw-r--r--sys/netinet/udp_usrreq.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index 794461e..6b8b87e 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -693,6 +693,7 @@ udp_output(inp, m, addr, control, td)
struct cmsghdr *cm;
struct sockaddr_in *sin, src;
int error = 0;
+ int ipflags;
u_short fport, lport;
#ifdef MAC
@@ -821,6 +822,10 @@ udp_output(inp, m, addr, control, td)
ui->ui_dport = fport;
ui->ui_ulen = htons((u_short)len + sizeof(struct udphdr));
+ ipflags = inp->inp_socket->so_options & (SO_DONTROUTE | SO_BROADCAST);
+ if (inp->inp_flags & INP_ONESBCAST)
+ ipflags |= IP_SENDONES;
+
/*
* Set up checksum and output datagram.
*/
@@ -837,8 +842,7 @@ udp_output(inp, m, addr, control, td)
((struct ip *)ui)->ip_tos = inp->inp_ip_tos; /* XXX */
udpstat.udps_opackets++;
- error = ip_output(m, inp->inp_options, &inp->inp_route,
- (inp->inp_socket->so_options & (SO_DONTROUTE | SO_BROADCAST)),
+ error = ip_output(m, inp->inp_options, &inp->inp_route, ipflags,
inp->inp_moptions, inp);
return (error);
OpenPOWER on IntegriCloud