From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id ED966A034F; Tue, 23 Feb 2021 08:18:32 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7357D4067A; Tue, 23 Feb 2021 08:18:32 +0100 (CET) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id DE6C140041 for ; Tue, 23 Feb 2021 08:18:29 +0100 (CET) IronPort-SDR: l2hi2Uz6uO3/26NXX+YBvyVNKZ0tBXQFClFbHKT+nq9KvFlKTAwRjEsKIZrMQL7gMMZW3LkWca RFpYDY98a00g== X-IronPort-AV: E=McAfee;i="6000,8403,9903"; a="172369731" X-IronPort-AV: E=Sophos;i="5.81,199,1610438400"; d="scan'208";a="172369731" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Feb 2021 23:18:28 -0800 IronPort-SDR: oW0BWja/0RH2pnyPkwWnBIhoCl8imw9tv1T9EVTdAPSsgTZjcSNXuOp3Y8Lj7vlQaZYIMvdfzZ xR3mjmWyFqdQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,199,1610438400"; d="scan'208";a="403036460" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga008.jf.intel.com with ESMTP; 22 Feb 2021 23:18:27 -0800 Received: from shsmsx601.ccr.corp.intel.com (10.109.6.141) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 22 Feb 2021 23:18:26 -0800 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by SHSMSX601.ccr.corp.intel.com (10.109.6.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Tue, 23 Feb 2021 15:18:24 +0800 Received: from shsmsx606.ccr.corp.intel.com ([10.109.6.216]) by SHSMSX606.ccr.corp.intel.com ([10.109.6.216]) with mapi id 15.01.2106.002; Tue, 23 Feb 2021 15:18:24 +0800 From: "Xie, WeiX" To: "Rong, Leyi" , "Zhang, Qi Z" , "Lu, Wenzhuo" , "Xing, Beilei" CC: "dev@dpdk.org" , "Wang, Haiyue" , "Rong, Leyi" Thread-Topic: [dpdk-dev] [PATCH] net/iavf: fix the VLAN tag extraction handling Thread-Index: AQHXCZTTvsP6uDtypEW/dGHuKn+tsaplVM7A Date: Tue, 23 Feb 2021 07:18:24 +0000 Message-ID: <1328340d618349e5950859ceea9110a0@intel.com> References: <20210223031058.89669-1-leyi.rong@intel.com> In-Reply-To: <20210223031058.89669-1-leyi.rong@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH] net/iavf: fix the VLAN tag extraction handling X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Tested-by: Xie,WeiX < weix.xie@intel.com> Regards, Xie Wei > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Leyi Rong > Sent: Tuesday, February 23, 2021 11:11 AM > To: Zhang, Qi Z ; Lu, Wenzhuo > ; Xing, Beilei > Cc: dev@dpdk.org; Wang, Haiyue ; Rong, Leyi > > Subject: [dpdk-dev] [PATCH] net/iavf: fix the VLAN tag extraction handlin= g >=20 > From: Haiyue Wang >=20 > The new VIRTCHNL_VF_OFFLOAD_VLAN_V2 capability added support that > allows the PF to set the location of the RX VLAN tag for stripping offloa= ds. >=20 > So the VF needs to extract the VLAN tag according to the location flags. >=20 > Fixes: 1c301e8c3cff ("net/iavf: support new VLAN capabilities") >=20 > Signed-off-by: Haiyue Wang > Signed-off-by: Leyi Rong > --- > drivers/net/iavf/iavf_rxtx.c | 62 +++++---- > drivers/net/iavf/iavf_rxtx.h | 3 + > drivers/net/iavf/iavf_rxtx_vec_avx2.c | 179 ++++++++++++++++++++------ > 3 files changed, 182 insertions(+), 62 deletions(-) >=20 > diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c = index > af5a28d84d..41409e1525 100644 > --- a/drivers/net/iavf/iavf_rxtx.c > +++ b/drivers/net/iavf/iavf_rxtx.c > @@ -543,6 +543,24 @@ iavf_dev_rx_queue_setup(struct rte_eth_dev *dev, > uint16_t queue_idx, > rxq->proto_xtr =3D IAVF_PROTO_XTR_NONE; > } >=20 > + if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_VLAN_V2) { > + struct virtchnl_vlan_supported_caps *stripping_support =3D > + &vf- > >vlan_v2_caps.offloads.stripping_support; > + uint32_t stripping_cap; > + > + if (stripping_support->outer) > + stripping_cap =3D stripping_support->outer; > + else > + stripping_cap =3D stripping_support->inner; > + > + if (stripping_cap & > VIRTCHNL_VLAN_TAG_LOCATION_L2TAG1) > + rxq->rx_flags =3D > IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG1; > + else if (stripping_cap & > VIRTCHNL_VLAN_TAG_LOCATION_L2TAG2_2) > + rxq->rx_flags =3D > IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG2_2; > + } else { > + rxq->rx_flags =3D IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG1; > + } > + > iavf_select_rxd_to_pkt_fields_handler(rxq, rxq->rxdid); >=20 > rxq->mp =3D mp; > @@ -972,31 +990,27 @@ iavf_rxd_to_vlan_tci(struct rte_mbuf *mb, volatile > union iavf_rx_desc *rxdp) >=20 > static inline void > iavf_flex_rxd_to_vlan_tci(struct rte_mbuf *mb, > - volatile union iavf_rx_flex_desc *rxdp) > + volatile union iavf_rx_flex_desc *rxdp, > + uint8_t rx_flags) > { > - if (rte_le_to_cpu_64(rxdp->wb.status_error0) & > - (1 << IAVF_RX_FLEX_DESC_STATUS0_L2TAG1P_S)) { > - mb->ol_flags |=3D PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED; > - mb->vlan_tci =3D > - rte_le_to_cpu_16(rxdp->wb.l2tag1); > - } else { > - mb->vlan_tci =3D 0; > - } > + uint16_t vlan_tci =3D 0; > + > + if (rx_flags & IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG1 && > + rte_le_to_cpu_64(rxdp->wb.status_error0) & > + (1 << IAVF_RX_FLEX_DESC_STATUS0_L2TAG1P_S)) > + vlan_tci =3D rte_le_to_cpu_16(rxdp->wb.l2tag1); >=20 > #ifndef RTE_LIBRTE_IAVF_16BYTE_RX_DESC > - if (rte_le_to_cpu_16(rxdp->wb.status_error1) & > - (1 << IAVF_RX_FLEX_DESC_STATUS1_L2TAG2P_S)) { > - mb->ol_flags |=3D PKT_RX_QINQ_STRIPPED | PKT_RX_QINQ | > - PKT_RX_VLAN_STRIPPED | PKT_RX_VLAN; > - mb->vlan_tci_outer =3D mb->vlan_tci; > - mb->vlan_tci =3D rte_le_to_cpu_16(rxdp->wb.l2tag2_2nd); > - PMD_RX_LOG(DEBUG, "Descriptor l2tag2_1: %u, > l2tag2_2: %u", > - rte_le_to_cpu_16(rxdp->wb.l2tag2_1st), > - rte_le_to_cpu_16(rxdp->wb.l2tag2_2nd)); > - } else { > - mb->vlan_tci_outer =3D 0; > - } > + if (rx_flags & IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG2_2 && > + rte_le_to_cpu_16(rxdp->wb.status_error1) & > + (1 << IAVF_RX_FLEX_DESC_STATUS1_L2TAG2P_S)) > + vlan_tci =3D rte_le_to_cpu_16(rxdp->wb.l2tag2_2nd); > #endif > + > + if (vlan_tci) { > + mb->ol_flags |=3D PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED; > + mb->vlan_tci =3D vlan_tci; > + } > } >=20 > /* Translate the rx descriptor status and error fields to pkt flags */ @= @ - > 1314,7 +1328,7 @@ iavf_recv_pkts_flex_rxd(void *rx_queue, > rxm->ol_flags =3D 0; > rxm->packet_type =3D > ptype_tbl[IAVF_RX_FLEX_DESC_PTYPE_M & > rte_le_to_cpu_16(rxd.wb.ptype_flex_flags0)]; > - iavf_flex_rxd_to_vlan_tci(rxm, &rxd); > + iavf_flex_rxd_to_vlan_tci(rxm, &rxd, rxq->rx_flags); > rxq->rxd_to_pkt_fields(rxq, rxm, &rxd); > pkt_flags =3D iavf_flex_rxd_error_to_pkt_flags(rx_stat_err0); > rxm->ol_flags |=3D pkt_flags; > @@ -1455,7 +1469,7 @@ iavf_recv_scattered_pkts_flex_rxd(void > *rx_queue, struct rte_mbuf **rx_pkts, > first_seg->ol_flags =3D 0; > first_seg->packet_type =3D > ptype_tbl[IAVF_RX_FLEX_DESC_PTYPE_M & > rte_le_to_cpu_16(rxd.wb.ptype_flex_flags0)]; > - iavf_flex_rxd_to_vlan_tci(first_seg, &rxd); > + iavf_flex_rxd_to_vlan_tci(first_seg, &rxd, rxq->rx_flags); > rxq->rxd_to_pkt_fields(rxq, first_seg, &rxd); > pkt_flags =3D iavf_flex_rxd_error_to_pkt_flags(rx_stat_err0); >=20 > @@ -1692,7 +1706,7 @@ iavf_rx_scan_hw_ring_flex_rxd(struct > iavf_rx_queue *rxq) >=20 > mb->packet_type =3D > ptype_tbl[IAVF_RX_FLEX_DESC_PTYPE_M & >=20 > rte_le_to_cpu_16(rxdp[j].wb.ptype_flex_flags0)]; > - iavf_flex_rxd_to_vlan_tci(mb, &rxdp[j]); > + iavf_flex_rxd_to_vlan_tci(mb, &rxdp[j], rxq- > >rx_flags); > rxq->rxd_to_pkt_fields(rxq, mb, &rxdp[j]); > stat_err0 =3D > rte_le_to_cpu_16(rxdp[j].wb.status_error0); > pkt_flags =3D > iavf_flex_rxd_error_to_pkt_flags(stat_err0); > diff --git a/drivers/net/iavf/iavf_rxtx.h b/drivers/net/iavf/iavf_rxtx.h = index > d583badd98..922ddadad1 100644 > --- a/drivers/net/iavf/iavf_rxtx.h > +++ b/drivers/net/iavf/iavf_rxtx.h > @@ -190,6 +190,9 @@ struct iavf_rx_queue { > bool q_set; /* if rx queue has been configured */ > bool rx_deferred_start; /* don't start this queue in dev start */ > const struct iavf_rxq_ops *ops; > + uint8_t rx_flags; > +#define IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG1 BIT(0) > +#define IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG2_2 BIT(1) > uint8_t proto_xtr; /* protocol extraction type */ > uint64_t xtr_ol_flag; > /* flexible descriptor metadata extraction offload flag */ diff > --git a/drivers/net/iavf/iavf_rxtx_vec_avx2.c > b/drivers/net/iavf/iavf_rxtx_vec_avx2.c > index 8f28afc8c5..f443300f54 100644 > --- a/drivers/net/iavf/iavf_rxtx_vec_avx2.c > +++ b/drivers/net/iavf/iavf_rxtx_vec_avx2.c > @@ -777,20 +777,32 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct > iavf_rx_queue *rxq, > * If RSS(bit12)/VLAN(bit13) are set, > * shuffle moves appropriate flags in place. > */ > - const __m256i rss_vlan_flags_shuf =3D _mm256_set_epi8(0, 0, 0, 0, > + const __m256i rss_flags_shuf =3D _mm256_set_epi8(0, 0, 0, 0, > 0, 0, 0, 0, > 0, 0, 0, 0, > - PKT_RX_RSS_HASH | PKT_RX_VLAN | > PKT_RX_VLAN_STRIPPED, > - PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED, > + PKT_RX_RSS_HASH, 0, > PKT_RX_RSS_HASH, 0, > /* end up 128-bits */ > 0, 0, 0, 0, > 0, 0, 0, 0, > 0, 0, 0, 0, > - PKT_RX_RSS_HASH | PKT_RX_VLAN | > PKT_RX_VLAN_STRIPPED, > - PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED, > + PKT_RX_RSS_HASH, 0, > PKT_RX_RSS_HASH, 0); >=20 > + const __m256i vlan_flags_shuf =3D _mm256_set_epi8(0, 0, 0, 0, > + 0, 0, 0, 0, > + 0, 0, 0, 0, > + PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED, > + PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED, > + 0, 0, > + /* end up 128-bits */ > + 0, 0, 0, 0, > + 0, 0, 0, 0, > + 0, 0, 0, 0, > + PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED, > + PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED, > + 0, 0); > + > uint16_t i, received; >=20 > for (i =3D 0, received =3D 0; i < nb_pkts; @@ -938,13 +950,24 @@ > _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq, > _mm256_srli_epi32(flag_bits, 4)); > l3_l4_flags =3D _mm256_slli_epi32(l3_l4_flags, 1); > l3_l4_flags =3D _mm256_and_si256(l3_l4_flags, cksum_mask); > + > /* set rss and vlan flags */ > const __m256i rss_vlan_flag_bits =3D > _mm256_srli_epi32(flag_bits, 12); > - const __m256i rss_vlan_flags =3D > - _mm256_shuffle_epi8(rss_vlan_flags_shuf, > + const __m256i rss_flags =3D > + _mm256_shuffle_epi8(rss_flags_shuf, > rss_vlan_flag_bits); >=20 > + __m256i vlan_flags =3D _mm256_setzero_si256(); > + > + if (rxq->rx_flags =3D=3D > IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG1) > + vlan_flags =3D > + _mm256_shuffle_epi8(vlan_flags_shuf, > + rss_vlan_flag_bits); > + > + const __m256i rss_vlan_flags =3D > + _mm256_or_si256(rss_flags, vlan_flags); > + > /* merge flags */ > __m256i mbuf_flags =3D _mm256_or_si256(l3_l4_flags, > rss_vlan_flags); > @@ -997,7 +1020,8 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct > iavf_rx_queue *rxq, > * will cause performance drop to get into this context. > */ > if (rxq->vsi->adapter->eth_dev->data- > >dev_conf.rxmode.offloads & > - DEV_RX_OFFLOAD_RSS_HASH) { > + DEV_RX_OFFLOAD_RSS_HASH || > + rxq->rx_flags & > IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG2_2) { > /* load bottom half of every 32B desc */ > const __m128i raw_desc_bh7 =3D > _mm_load_si128 > @@ -1048,36 +1072,115 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct > iavf_rx_queue *rxq, >=20 > (_mm256_castsi128_si256(raw_desc_bh0), > raw_desc_bh1, 1); >=20 > - /** > - * to shift the 32b RSS hash value to the > - * highest 32b of each 128b before mask > - */ > - __m256i rss_hash6_7 =3D > - _mm256_slli_epi64(raw_desc_bh6_7, 32); > - __m256i rss_hash4_5 =3D > - _mm256_slli_epi64(raw_desc_bh4_5, 32); > - __m256i rss_hash2_3 =3D > - _mm256_slli_epi64(raw_desc_bh2_3, 32); > - __m256i rss_hash0_1 =3D > - _mm256_slli_epi64(raw_desc_bh0_1, 32); > - > - __m256i rss_hash_msk =3D > - _mm256_set_epi32(0xFFFFFFFF, 0, 0, 0, > - 0xFFFFFFFF, 0, 0, 0); > - > - rss_hash6_7 =3D _mm256_and_si256 > - (rss_hash6_7, rss_hash_msk); > - rss_hash4_5 =3D _mm256_and_si256 > - (rss_hash4_5, rss_hash_msk); > - rss_hash2_3 =3D _mm256_and_si256 > - (rss_hash2_3, rss_hash_msk); > - rss_hash0_1 =3D _mm256_and_si256 > - (rss_hash0_1, rss_hash_msk); > - > - mb6_7 =3D _mm256_or_si256(mb6_7, rss_hash6_7); > - mb4_5 =3D _mm256_or_si256(mb4_5, rss_hash4_5); > - mb2_3 =3D _mm256_or_si256(mb2_3, rss_hash2_3); > - mb0_1 =3D _mm256_or_si256(mb0_1, rss_hash0_1); > + if (rxq->vsi->adapter->eth_dev->data- > >dev_conf.rxmode.offloads & > + DEV_RX_OFFLOAD_RSS_HASH) { > + /** > + * to shift the 32b RSS hash value to the > + * highest 32b of each 128b before mask > + */ > + __m256i rss_hash6_7 =3D > + _mm256_slli_epi64(raw_desc_bh6_7, > 32); > + __m256i rss_hash4_5 =3D > + _mm256_slli_epi64(raw_desc_bh4_5, > 32); > + __m256i rss_hash2_3 =3D > + _mm256_slli_epi64(raw_desc_bh2_3, > 32); > + __m256i rss_hash0_1 =3D > + _mm256_slli_epi64(raw_desc_bh0_1, > 32); > + > + const __m256i rss_hash_msk =3D > + _mm256_set_epi32(0xFFFFFFFF, 0, 0, > 0, > + 0xFFFFFFFF, 0, 0, 0); > + > + rss_hash6_7 =3D _mm256_and_si256 > + (rss_hash6_7, rss_hash_msk); > + rss_hash4_5 =3D _mm256_and_si256 > + (rss_hash4_5, rss_hash_msk); > + rss_hash2_3 =3D _mm256_and_si256 > + (rss_hash2_3, rss_hash_msk); > + rss_hash0_1 =3D _mm256_and_si256 > + (rss_hash0_1, rss_hash_msk); > + > + mb6_7 =3D _mm256_or_si256(mb6_7, > rss_hash6_7); > + mb4_5 =3D _mm256_or_si256(mb4_5, > rss_hash4_5); > + mb2_3 =3D _mm256_or_si256(mb2_3, > rss_hash2_3); > + mb0_1 =3D _mm256_or_si256(mb0_1, > rss_hash0_1); > + } > + > + if (rxq->rx_flags & > IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG2_2) { > + /* merge the status/error-1 bits into one > register */ > + const __m256i status1_4_7 =3D > + > _mm256_unpacklo_epi32(raw_desc_bh6_7, > + raw_desc_bh4_5); > + const __m256i status1_0_3 =3D > + > _mm256_unpacklo_epi32(raw_desc_bh2_3, > + raw_desc_bh0_1); > + > + const __m256i status1_0_7 =3D > + > _mm256_unpacklo_epi64(status1_4_7, > + status1_0_3); > + > + const __m256i l2tag2p_flag_mask =3D > + _mm256_set1_epi32 > + (1 << > IAVF_RX_FLEX_DESC_STATUS1_L2TAG2P_S); > + > + __m256i l2tag2p_flag_bits =3D > + _mm256_and_si256 > + (status1_0_7, l2tag2p_flag_mask); > + > + l2tag2p_flag_bits =3D > + _mm256_srli_epi32(l2tag2p_flag_bits, > + > IAVF_RX_FLEX_DESC_STATUS1_L2TAG2P_S); > + > + const __m256i l2tag2_flags_shuf =3D > + _mm256_set_epi8(0, 0, 0, 0, > + 0, 0, 0, 0, > + 0, 0, 0, 0, > + 0, 0, 0, 0, > + /* end up 128-bits */ > + 0, 0, 0, 0, > + 0, 0, 0, 0, > + 0, 0, 0, 0, > + 0, 0, > + PKT_RX_VLAN | > + > PKT_RX_VLAN_STRIPPED, > + 0); > + > + vlan_flags =3D > + > _mm256_shuffle_epi8(l2tag2_flags_shuf, > + l2tag2p_flag_bits); > + > + /* merge with vlan_flags */ > + mbuf_flags =3D _mm256_or_si256 > + (mbuf_flags, vlan_flags); > + > + /* L2TAG2_2 */ > + __m256i vlan_tci6_7 =3D > + _mm256_slli_si256(raw_desc_bh6_7, > 4); > + __m256i vlan_tci4_5 =3D > + _mm256_slli_si256(raw_desc_bh4_5, > 4); > + __m256i vlan_tci2_3 =3D > + _mm256_slli_si256(raw_desc_bh2_3, > 4); > + __m256i vlan_tci0_1 =3D > + _mm256_slli_si256(raw_desc_bh0_1, > 4); > + > + const __m256i vlan_tci_msk =3D > + _mm256_set_epi32(0, 0xFFFF0000, 0, > 0, > + 0, 0xFFFF0000, 0, 0); > + > + vlan_tci6_7 =3D _mm256_and_si256 > + (vlan_tci6_7, vlan_tci_msk); > + vlan_tci4_5 =3D _mm256_and_si256 > + (vlan_tci4_5, vlan_tci_msk); > + vlan_tci2_3 =3D _mm256_and_si256 > + (vlan_tci2_3, vlan_tci_msk); > + vlan_tci0_1 =3D _mm256_and_si256 > + (vlan_tci0_1, vlan_tci_msk); > + > + mb6_7 =3D _mm256_or_si256(mb6_7, > vlan_tci6_7); > + mb4_5 =3D _mm256_or_si256(mb4_5, > vlan_tci4_5); > + mb2_3 =3D _mm256_or_si256(mb2_3, > vlan_tci2_3); > + mb0_1 =3D _mm256_or_si256(mb0_1, > vlan_tci0_1); > + } > } /* if() on RSS hash parsing */ > #endif >=20 > -- > 2.17.1