diff options
author | fenner <fenner@FreeBSD.org> | 1996-11-11 04:56:32 +0000 |
---|---|---|
committer | fenner <fenner@FreeBSD.org> | 1996-11-11 04:56:32 +0000 |
commit | 51fa6f0e6c383037d81db2731606bf56378e1128 (patch) | |
tree | a1e9ea181d1b4cfcc3feaf4440cf48d359494bea /sys/netinet/ip_output.c | |
parent | 3b0a2952693ec15704f4dc217c9363c79260c647 (diff) | |
download | FreeBSD-src-51fa6f0e6c383037d81db2731606bf56378e1128.zip FreeBSD-src-51fa6f0e6c383037d81db2731606bf56378e1128.tar.gz |
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).
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 85cd563..8addbe6 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; |