| version 1.8.2.5, 2001/03/12 13:31:55 |
version 1.8.2.6, 2001/03/27 15:32:37 |
|
|
| * Note that filters must _never_ set this flag, as another filter |
* Note that filters must _never_ set this flag, as another filter |
| * in the list may have previously cleared it. |
* in the list may have previously cleared it. |
| */ |
*/ |
| if (pfil_run_hooks(&inet6_pfil_hook, &m, m->m_pkthdr.rcvif, |
/* |
| PFIL_IN) != 0) |
* let ipfilter look at packet on the wire, |
| return; |
* not the decapsulated packet. |
| if (m == NULL) |
*/ |
| return; |
#ifdef IPSEC |
| ip6 = mtod(m, struct ip6_hdr *); |
if (!ipsec_gethist(m, NULL)) |
| |
#else |
| |
if (1) |
| |
#endif |
| |
{ |
| |
if (pfil_run_hooks(&inet6_pfil_hook, &m, m->m_pkthdr.rcvif, |
| |
PFIL_IN) != 0) |
| |
return; |
| |
if (m == NULL) |
| |
return; |
| |
ip6 = mtod(m, struct ip6_hdr *); |
| |
} |
| #endif /* PFIL_HOOKS */ |
#endif /* PFIL_HOOKS */ |
| |
|
| |
|
|
|
| } |
} |
| } |
} |
| |
|
| |
/* drop packets if interface ID portion is already filled */ |
| |
if ((m->m_pkthdr.rcvif->if_flags & IFF_LOOPBACK) == 0) { |
| |
if (IN6_IS_SCOPE_LINKLOCAL(&ip6->ip6_src) && |
| |
ip6->ip6_src.s6_addr16[1]) { |
| |
ip6stat.ip6s_badscope++; |
| |
goto bad; |
| |
} |
| |
if (IN6_IS_SCOPE_LINKLOCAL(&ip6->ip6_dst) && |
| |
ip6->ip6_dst.s6_addr16[1]) { |
| |
ip6stat.ip6s_badscope++; |
| |
goto bad; |
| |
} |
| |
} |
| |
|
| #ifndef FAKE_LOOPBACK_IF |
#ifndef FAKE_LOOPBACK_IF |
| if ((m->m_pkthdr.rcvif->if_flags & IFF_LOOPBACK) == 0) |
if ((m->m_pkthdr.rcvif->if_flags & IFF_LOOPBACK) == 0) |
| #else |
#else |