svn commit: r314842 - head/sys/dev/xen/netfront
Roger Pau Monné
royger at FreeBSD.org
Tue Mar 7 09:18:54 UTC 2017
Author: royger
Date: Tue Mar 7 09:18:52 2017
New Revision: 314842
URL: https://svnweb.freebsd.org/changeset/base/314842
Log:
xen/netfront: fix inbound packet flags for checksum offload
Currently netfront is setting the flags of inbound packets with the checksum
not present (offloaded) to (CSUM_IP_CHECKED | CSUM_IP_VALID | CSUM_DATA_VALID |
CSUM_PSEUDO_HDR). According to the mbuf(9) man page this is not the correct
combination of flags, it should instead be (CSUM_DATA_VALID |
CSUM_PSEUDO_HDR).
Reviewed by: Wei Liu <wei.liu2 at citrix.com>
MFC after: 2 weeks
Sponsored by: Citrix Systems R&D
Differential revision: https://reviews.freebsd.org/D9831
Modified:
head/sys/dev/xen/netfront/netfront.c
Modified: head/sys/dev/xen/netfront/netfront.c
==============================================================================
--- head/sys/dev/xen/netfront/netfront.c Tue Mar 7 09:17:48 2017 (r314841)
+++ head/sys/dev/xen/netfront/netfront.c Tue Mar 7 09:18:52 2017 (r314842)
@@ -1192,15 +1192,17 @@ xn_rxeof(struct netfront_rxq *rxq)
m->m_pkthdr.rcvif = ifp;
if ( rx->flags & NETRXF_data_validated ) {
- /* Tell the stack the checksums are okay */
/*
- * XXX this isn't necessarily the case - need to add
- * check
+ * According to mbuf(9) the correct way to tell
+ * the stack that the checksum of an inbound
+ * packet is correct, without it actually being
+ * present (because the underlying interface
+ * doesn't provide it), is to set the
+ * CSUM_DATA_VALID and CSUM_PSEUDO_HDR flags,
+ * and the csum_data field to 0xffff.
*/
-
- m->m_pkthdr.csum_flags |=
- (CSUM_IP_CHECKED | CSUM_IP_VALID | CSUM_DATA_VALID
- | CSUM_PSEUDO_HDR);
+ m->m_pkthdr.csum_flags |= (CSUM_DATA_VALID
+ | CSUM_PSEUDO_HDR);
m->m_pkthdr.csum_data = 0xffff;
}
if ((rx->flags & NETRXF_extra_info) != 0 &&
More information about the svn-src-all
mailing list