svn commit: r294189 - stable/10/sys/netinet
Michael Tuexen
tuexen at FreeBSD.org
Sat Jan 16 18:59:12 UTC 2016
Author: tuexen
Date: Sat Jan 16 18:59:10 2016
New Revision: 294189
URL: https://svnweb.freebsd.org/changeset/base/294189
Log:
MFC r291364:
When receiving an SCTP/UDP packet and the interface performed
the UDP checksum computation and signals that it was OK,
clear this bit when passing the packet to SCTP. Since the
bits indicating a valid UDP checksum and a valid SCTP
checksum are the same, the SCTP stack would assume
that also an SCTP checksum check has been performed.
Modified:
stable/10/sys/netinet/sctputil.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/netinet/sctputil.c
==============================================================================
--- stable/10/sys/netinet/sctputil.c Sat Jan 16 18:39:54 2016 (r294188)
+++ stable/10/sys/netinet/sctputil.c Sat Jan 16 18:59:10 2016 (r294189)
@@ -6957,6 +6957,18 @@ sctp_recv_udp_tunneled_packet(struct mbu
for (last = m; last->m_next; last = last->m_next);
last->m_next = sp;
m->m_pkthdr.len += sp->m_pkthdr.len;
+ /*
+ * The CSUM_DATA_VALID flags indicates that the HW checked the UDP
+ * checksum and it was valid. Since CSUM_DATA_VALID ==
+ * CSUM_SCTP_VALID this would imply that the HW also verified the
+ * SCTP checksum. Therefore, clear the bit.
+ */
+ SCTPDBG(SCTP_DEBUG_CRCOFFLOAD,
+ "sctp_recv_udp_tunneled_packet(): Packet of length %d received on %s with csum_flags 0x%b.\n",
+ m->m_pkthdr.len,
+ if_name(m->m_pkthdr.rcvif),
+ (int)m->m_pkthdr.csum_flags, CSUM_BITS);
+ m->m_pkthdr.csum_flags &= ~CSUM_DATA_VALID;
iph = mtod(m, struct ip *);
switch (iph->ip_v) {
#ifdef INET
More information about the svn-src-stable
mailing list