diff options
author | ae <ae@FreeBSD.org> | 2015-05-14 11:47:18 +0000 |
---|---|---|
committer | ae <ae@FreeBSD.org> | 2015-05-14 11:47:18 +0000 |
commit | d29714b5d57c648f5a7449efbcb5a66079799577 (patch) | |
tree | 976e447dd0faba779d0e550a5abb770d7c40506c /sys | |
parent | c595c29b97d1612345ea0c0d3454e779ece9d23e (diff) | |
download | FreeBSD-src-d29714b5d57c648f5a7449efbcb5a66079799577.zip FreeBSD-src-d29714b5d57c648f5a7449efbcb5a66079799577.tar.gz |
MFC r282578:
Mark data checksum as valid for multicast packets, that we send back
to myself via simloop.
Also remove duplicate check under #ifdef DIAGNOSTIC.
PR: 180065
Diffstat (limited to 'sys')
-rw-r--r-- | sys/netinet6/ip6_output.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c index 06eabcf..a319112 100644 --- a/sys/netinet6/ip6_output.c +++ b/sys/netinet6/ip6_output.c @@ -2816,14 +2816,6 @@ ip6_mloopback(struct ifnet *ifp, struct mbuf *m, struct sockaddr_in6 *dst) if (copym == NULL) return; } - -#ifdef DIAGNOSTIC - if (copym->m_len < sizeof(*ip6)) { - m_freem(copym); - return; - } -#endif - ip6 = mtod(copym, struct ip6_hdr *); /* * clear embedded scope identifiers if necessary. @@ -2831,7 +2823,11 @@ ip6_mloopback(struct ifnet *ifp, struct mbuf *m, struct sockaddr_in6 *dst) */ in6_clearscope(&ip6->ip6_src); in6_clearscope(&ip6->ip6_dst); - + if (copym->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) { + copym->m_pkthdr.csum_flags |= CSUM_DATA_VALID_IPV6 | + CSUM_PSEUDO_HDR; + copym->m_pkthdr.csum_data = 0xffff; + } (void)if_simloop(ifp, copym, dst->sin6_family, 0); } |