diff options
author | Bill Fenner <fenner@FreeBSD.org> | 1996-11-11 04:56:32 +0000 |
---|---|---|
committer | Bill Fenner <fenner@FreeBSD.org> | 1996-11-11 04:56:32 +0000 |
commit | 82c23eba89cf4963f60f4fb2b1f416904145edeb (patch) | |
tree | a1e9ea181d1b4cfcc3feaf4440cf48d359494bea /sys/netinet/ip_output.c | |
parent | d22671dcceb7387f1ddee5c88986a42e9f75cb7c (diff) | |
download | src-82c23eba89cf4963f60f4fb2b1f416904145edeb.tar.gz src-82c23eba89cf4963f60f4fb2b1f416904145edeb.zip |
Add the IP_RECVIF socket option, which supplies a packet's incoming interface
using a sockaddr_dl.
Fix the other packet-information socket options (SO_TIMESTAMP, IP_RECVDSTADDR)
to work for multicast UDP and raw sockets as well. (They previously only
worked for unicast UDP).
Notes
Notes:
svn path=/head/; revision=19622
Diffstat (limited to 'sys/netinet/ip_output.c')
-rw-r--r-- | sys/netinet/ip_output.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index 85cd563c9f7a..8addbe65984c 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)ip_output.c 8.3 (Berkeley) 1/21/94 - * $Id: ip_output.c,v 1.43 1996/10/07 19:21:46 wollman Exp $ + * $Id: ip_output.c,v 1.44 1996/10/22 22:26:02 sos Exp $ */ #define _IP_VHL @@ -628,6 +628,7 @@ ip_ctloutput(op, so, level, optname, mp) case IP_RECVOPTS: case IP_RECVRETOPTS: case IP_RECVDSTADDR: + case IP_RECVIF: if (m == 0 || m->m_len != sizeof(int)) error = EINVAL; else { @@ -658,6 +659,10 @@ ip_ctloutput(op, so, level, optname, mp) case IP_RECVDSTADDR: OPTSET(INP_RECVDSTADDR); break; + + case IP_RECVIF: + OPTSET(INP_RECVIF); + break; } } break; @@ -728,6 +733,7 @@ ip_ctloutput(op, so, level, optname, mp) case IP_RECVOPTS: case IP_RECVRETOPTS: case IP_RECVDSTADDR: + case IP_RECVIF: *mp = m = m_get(M_WAIT, MT_SOOPTS); m->m_len = sizeof(int); switch (optname) { @@ -753,6 +759,10 @@ ip_ctloutput(op, so, level, optname, mp) case IP_RECVDSTADDR: optval = OPTBIT(INP_RECVDSTADDR); break; + + case IP_RECVIF: + optval = OPTBIT(INP_RECVIF); + break; } *mtod(m, int *) = optval; break; |