Author: rrs
Date: Sun Oct  6 22:29:02 2019
New Revision: 353156
URL: https://svnweb.freebsd.org/changeset/base/353156

Log:
  Brad Davis identified a problem with the new LRO code, VLAN's
  no longer worked. The problem was that the defines used the
  same space as the VLAN id. This commit does three things.
  1) Move the LRO used fields to the PH_per fields. This is
     safe since the entire PH_per is used for IP reassembly
     which LRO code will not hit.
  2) Remove old unused pace fields that are not used in mbuf.h
  3) The VLAN processing is not in the mbuf queueing code. Consequently
     if a VLAN submits to Rack or BBR we need to bypass the mbuf queueing
     for now until rack_bbr_common is updated to handle the VLAN properly.
  
  Reported by:  Brad Davis

Modified:
  head/sys/netinet/tcp_lro.c
  head/sys/sys/mbuf.h

Modified: head/sys/netinet/tcp_lro.c
==============================================================================
--- head/sys/netinet/tcp_lro.c  Sun Oct  6 22:18:03 2019        (r353155)
+++ head/sys/netinet/tcp_lro.c  Sun Oct  6 22:29:02 2019        (r353156)
@@ -875,7 +875,14 @@ tcp_lro_flush(struct lro_ctrl *lc, struct lro_entry *l
 
        /* Now lets lookup the inp first */
        CURVNET_SET(lc->ifp->if_vnet);
-       if (tcplro_stacks_wanting_mbufq == 0)
+       /*
+        * XXXRRS Currently the common input handler for
+        * mbuf queuing cannot handle VLAN Tagged. This needs
+        * to be fixed and the or condition removed (i.e. the 
+        * common code should do the right lookup for the vlan
+        * tag and anything else that the vlan_input() does).
+        */
+       if ((tcplro_stacks_wanting_mbufq == 0) || (le->m_head->m_flags & 
M_VLANTAG))
                goto skip_lookup;
        INP_INFO_RLOCK_ET(&V_tcbinfo, et);
        switch (le->eh_type) {

Modified: head/sys/sys/mbuf.h
==============================================================================
--- head/sys/sys/mbuf.h Sun Oct  6 22:18:03 2019        (r353155)
+++ head/sys/sys/mbuf.h Sun Oct  6 22:29:02 2019        (r353156)
@@ -194,18 +194,13 @@ struct pkthdr {
 };
 #define        ether_vtag      PH_per.sixteen[0]
 #define        PH_vt           PH_per
-#define        vt_nrecs        sixteen[0]
-#define        tso_segsz       PH_per.sixteen[1]
-#define        lro_nsegs       tso_segsz
-#define        csum_phsum      PH_per.sixteen[2]
-#define        csum_data       PH_per.thirtytwo[1]
-#define lro_len                PH_per.sixteen[0] /* inbound during LRO */
-#define lro_csum       PH_per.sixteen[1] /* inbound during LRO */
-#define pace_thoff     PH_loc.sixteen[0]
-#define pace_tlen      PH_loc.sixteen[1]
-#define pace_drphdrlen PH_loc.sixteen[2]
-#define pace_tos       PH_loc.eight[6]
-#define pace_lock      PH_loc.eight[7]
+#define        vt_nrecs        sixteen[0]        /* mld and v6-ND */
+#define        tso_segsz       PH_per.sixteen[1] /* inbound after LRO */
+#define        lro_nsegs       tso_segsz         /* inbound after LRO */
+#define        csum_data       PH_per.thirtytwo[1] /* inbound from hardware up 
*/
+#define lro_len                PH_loc.sixteen[0] /* inbound during LRO (no 
reassembly) */
+#define lro_csum       PH_loc.sixteen[1] /* inbound during LRO (no reassembly) 
*/
+/* Note PH_loc is used during IP reassembly (all 8 bytes as a ptr) */
 
 /*
  * Description of external storage mapped into mbuf; valid only if M_EXT is
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to