diff options
author | andre <andre@FreeBSD.org> | 2004-08-27 15:39:34 +0000 |
---|---|---|
committer | andre <andre@FreeBSD.org> | 2004-08-27 15:39:34 +0000 |
commit | c3936067e71ee013d32925e2163b04a12afa920c (patch) | |
tree | 684edea031f959cd312534971bb8f0671c66714d | |
parent | b32a1f9e40e79af6b2b9e610f98cf1440115968a (diff) | |
download | FreeBSD-src-c3936067e71ee013d32925e2163b04a12afa920c.zip FreeBSD-src-c3936067e71ee013d32925e2163b04a12afa920c.tar.gz |
In the case the destination of a packet was changed by the packet filter
to point to a local IP address; and the packet was sourced from this host
we fill in the m_pkthdr.rcvif with a pointer to the loopback interface.
Before the function ifunit("lo0") was used to obtain the ifp. However
this is sub-optimal from a performance point of view and might be dangerous
if the loopback interface has been renamed. Use the global variable 'loif'
instead which always points to the loopback interface.
Submitted by: brooks
-rw-r--r-- | sys/netinet/ip_output.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index b392b99..abc2055 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -676,7 +676,7 @@ spd_done: if (in_localip(ip->ip_dst)) { m->m_flags |= M_FASTFWD_OURS; if (m->m_pkthdr.rcvif == NULL) - m->m_pkthdr.rcvif = ifunit("lo0"); + m->m_pkthdr.rcvif = loif; if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA) { m->m_pkthdr.csum_flags |= CSUM_DATA_VALID | CSUM_PSEUDO_HDR; @@ -695,7 +695,7 @@ spd_done: /* See if local, if yes, send it to netisr with IP_FASTFWD_OURS. */ if (m->m_flags & M_FASTFWD_OURS) { if (m->m_pkthdr.rcvif == NULL) - m->m_pkthdr.rcvif = ifunit("lo0"); + m->m_pkthdr.rcvif = loif; if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA) { m->m_pkthdr.csum_flags |= CSUM_DATA_VALID | CSUM_PSEUDO_HDR; |