summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorae <ae@FreeBSD.org>2015-05-14 11:47:18 +0000
committerae <ae@FreeBSD.org>2015-05-14 11:47:18 +0000
commitd29714b5d57c648f5a7449efbcb5a66079799577 (patch)
tree976e447dd0faba779d0e550a5abb770d7c40506c /sys
parentc595c29b97d1612345ea0c0d3454e779ece9d23e (diff)
downloadFreeBSD-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.c14
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);
}
OpenPOWER on IntegriCloud