version 1.193.2.6, 2018/11/26 01:52:51 |
version 1.209, 2019/09/15 21:00:15 |
Line 342 ip6_input(struct mbuf *m, struct ifnet * |
|
Line 342 ip6_input(struct mbuf *m, struct ifnet * |
|
* IPsec (encapsulated, tunnel mode). |
* IPsec (encapsulated, tunnel mode). |
*/ |
*/ |
#if defined(IPSEC) |
#if defined(IPSEC) |
if (!ipsec_used || !ipsec_indone(m)) |
if (!ipsec_used || !ipsec_skip_pfil(m)) |
#else |
#else |
if (1) |
if (1) |
#endif |
#endif |
{ |
{ |
struct in6_addr odst; |
struct in6_addr odst; |
|
int error; |
|
|
odst = ip6->ip6_dst; |
odst = ip6->ip6_dst; |
if (pfil_run_hooks(inet6_pfil_hook, &m, rcvif, PFIL_IN) != 0) |
error = pfil_run_hooks(inet6_pfil_hook, &m, rcvif, PFIL_IN); |
|
if (error != 0 || m == NULL) { |
|
IP6_STATINC(IP6_STAT_PFILDROP_IN); |
return; |
return; |
if (m == NULL) |
} |
return; |
if (m->m_len < sizeof(struct ip6_hdr)) { |
KASSERT(m->m_len >= sizeof(struct ip6_hdr)); |
if ((m = m_pullup(m, sizeof(struct ip6_hdr))) == NULL) { |
|
IP6_STATINC(IP6_STAT_TOOSMALL); |
|
in6_ifstat_inc(rcvif, ifs6_in_hdrerr); |
|
return; |
|
} |
|
} |
ip6 = mtod(m, struct ip6_hdr *); |
ip6 = mtod(m, struct ip6_hdr *); |
srcrt = !IN6_ARE_ADDR_EQUAL(&odst, &ip6->ip6_dst); |
srcrt = !IN6_ARE_ADDR_EQUAL(&odst, &ip6->ip6_dst); |
} |
} |
|
|
* header. Note that we do not visit this with |
* header. Note that we do not visit this with |
* protocols with pcb layer code - like udp/tcp/raw ip. |
* protocols with pcb layer code - like udp/tcp/raw ip. |
*/ |
*/ |
if ((inet6sw[ip_protox[nxt]].pr_flags |
if ((inet6sw[ip6_protox[nxt]].pr_flags |
& PR_LASTHDR) != 0) { |
& PR_LASTHDR) != 0) { |
int error; |
int error; |
|
|