Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Mar 2017 09:18:52 +0000 (UTC)
From:      =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= <royger@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r314842 - head/sys/dev/xen/netfront
Message-ID:  <201703070918.v279Iq8Y061870@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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@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 &&



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201703070918.v279Iq8Y061870>