summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_output.c
diff options
context:
space:
mode:
authorfenner <fenner@FreeBSD.org>1996-11-11 04:56:32 +0000
committerfenner <fenner@FreeBSD.org>1996-11-11 04:56:32 +0000
commit51fa6f0e6c383037d81db2731606bf56378e1128 (patch)
treea1e9ea181d1b4cfcc3feaf4440cf48d359494bea /sys/netinet/ip_output.c
parent3b0a2952693ec15704f4dc217c9363c79260c647 (diff)
downloadFreeBSD-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.c12
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;
OpenPOWER on IntegriCloud