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
This commit is contained in:
Randall Stewart 2019-10-06 22:29:02 +00:00
parent e35cd9e38f
commit 5b63b22075
2 changed files with 15 additions and 13 deletions

View File

@ -875,7 +875,14 @@ tcp_lro_flush(struct lro_ctrl *lc, struct lro_entry *le)
/* 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) {

View File

@ -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