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 <[email protected]>
  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 &&
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to