diff options
author | Bruce M Simpson <bms@FreeBSD.org> | 2003-08-20 14:46:40 +0000 |
---|---|---|
committer | Bruce M Simpson <bms@FreeBSD.org> | 2003-08-20 14:46:40 +0000 |
commit | 8afa23047014b6c73e856501c7dc4deb6caf899f (patch) | |
tree | b0740a95462efb0df015bc34d5d05f5d96cd2f3b /sys/netinet/ip_output.c | |
parent | 2d81cd746bc13dfd4f42652bf1060ab0b44908e8 (diff) | |
download | src-8afa23047014b6c73e856501c7dc4deb6caf899f.tar.gz src-8afa23047014b6c73e856501c7dc4deb6caf899f.zip |
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)
Notes
Notes:
svn path=/head/; revision=119178
Diffstat (limited to 'sys/netinet/ip_output.c')
-rw-r--r-- | sys/netinet/ip_output.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index 60d5b1ddaf8d..4a507cf8224b 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -477,6 +477,8 @@ ip_output(struct mbuf *m0, struct mbuf *opt, struct route *ro, error = EMSGSIZE; goto bad; } + if (flags & IP_SENDONES) + ip->ip_dst.s_addr = INADDR_BROADCAST; m->m_flags |= M_BCAST; } else { m->m_flags &= ~M_BCAST; @@ -1473,6 +1475,7 @@ ip_ctloutput(so, sopt) case IP_RECVTTL: case IP_RECVIF: case IP_FAITH: + case IP_ONESBCAST: error = sooptcopyin(sopt, &optval, sizeof optval, sizeof optval); if (error) @@ -1515,6 +1518,10 @@ ip_ctloutput(so, sopt) case IP_FAITH: OPTSET(INP_FAITH); break; + + case IP_ONESBCAST: + OPTSET(INP_ONESBCAST); + break; } break; #undef OPTSET @@ -1608,6 +1615,7 @@ ip_ctloutput(so, sopt) case IP_RECVIF: case IP_PORTRANGE: case IP_FAITH: + case IP_ONESBCAST: switch (sopt->sopt_name) { case IP_TOS: @@ -1652,6 +1660,10 @@ ip_ctloutput(so, sopt) case IP_FAITH: optval = OPTBIT(INP_FAITH); break; + + case IP_ONESBCAST: + optval = OPTBIT(INP_ONESBCAST); + break; } error = sooptcopyout(sopt, &optval, sizeof optval); break; |