From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id D363AC5A6 for ; Tue, 5 May 2015 04:32:35 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP; 04 May 2015 19:32:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,369,1427785200"; d="scan'208";a="723703355" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by orsmga002.jf.intel.com with ESMTP; 04 May 2015 19:32:34 -0700 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id t452WUZl001993; Tue, 5 May 2015 10:32:30 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id t452WRUK003651; Tue, 5 May 2015 10:32:29 +0800 Received: (from hzhan75@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t452WQGJ003647; Tue, 5 May 2015 10:32:26 +0800 From: Helin Zhang To: dev@dpdk.org Date: Tue, 5 May 2015 10:32:18 +0800 Message-Id: <1430793143-3610-2-git-send-email-helin.zhang@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1430793143-3610-1-git-send-email-helin.zhang@intel.com> References: <1430793143-3610-1-git-send-email-helin.zhang@intel.com> Subject: [dpdk-dev] [PATCH RFC 1/6] mbuf: update mbuf structure for QinQ support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 May 2015 02:32:36 -0000 To support QinQ, 'vlan_tci' should be replaced by 'vlan_tci0' and 'vlan_tci1'. Also new offload flags of 'PKT_RX_QINQ_PKT' and 'PKT_TX_QINQ_PKT' should be added. Signed-off-by: Helin Zhang --- app/test-pmd/flowgen.c | 2 +- app/test-pmd/macfwd.c | 2 +- app/test-pmd/macswap.c | 2 +- app/test-pmd/rxonly.c | 2 +- app/test-pmd/txonly.c | 2 +- app/test/packet_burst_generator.c | 4 ++-- lib/librte_ether/rte_ether.h | 4 ++-- lib/librte_mbuf/rte_mbuf.h | 22 +++++++++++++++++++--- lib/librte_pmd_e1000/em_rxtx.c | 8 ++++---- lib/librte_pmd_e1000/igb_rxtx.c | 8 ++++---- lib/librte_pmd_enic/enic_ethdev.c | 2 +- lib/librte_pmd_enic/enic_main.c | 2 +- lib/librte_pmd_fm10k/fm10k_rxtx.c | 2 +- lib/librte_pmd_i40e/i40e_rxtx.c | 8 ++++---- lib/librte_pmd_ixgbe/ixgbe_rxtx.c | 11 +++++------ lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c | 6 +++--- 16 files changed, 51 insertions(+), 36 deletions(-) diff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c index 72016c9..f24b00c 100644 --- a/app/test-pmd/flowgen.c +++ b/app/test-pmd/flowgen.c @@ -207,7 +207,7 @@ pkt_burst_flow_gen(struct fwd_stream *fs) pkt->nb_segs = 1; pkt->pkt_len = pkt_size; pkt->ol_flags = ol_flags; - pkt->vlan_tci = vlan_tci; + pkt->vlan_tci0 = vlan_tci; pkt->l2_len = sizeof(struct ether_hdr); pkt->l3_len = sizeof(struct ipv4_hdr); pkts_burst[nb_pkt] = pkt; diff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c index 035e5eb..590b613 100644 --- a/app/test-pmd/macfwd.c +++ b/app/test-pmd/macfwd.c @@ -120,7 +120,7 @@ pkt_burst_mac_forward(struct fwd_stream *fs) mb->ol_flags = ol_flags; mb->l2_len = sizeof(struct ether_hdr); mb->l3_len = sizeof(struct ipv4_hdr); - mb->vlan_tci = txp->tx_vlan_id; + mb->vlan_tci0 = txp->tx_vlan_id; } nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_rx); fs->tx_packets += nb_tx; diff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c index 6729849..c355399 100644 --- a/app/test-pmd/macswap.c +++ b/app/test-pmd/macswap.c @@ -122,7 +122,7 @@ pkt_burst_mac_swap(struct fwd_stream *fs) mb->ol_flags = ol_flags; mb->l2_len = sizeof(struct ether_hdr); mb->l3_len = sizeof(struct ipv4_hdr); - mb->vlan_tci = txp->tx_vlan_id; + mb->vlan_tci0 = txp->tx_vlan_id; } nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_rx); fs->tx_packets += nb_tx; diff --git a/app/test-pmd/rxonly.c b/app/test-pmd/rxonly.c index ac56090..aa2cf7f 100644 --- a/app/test-pmd/rxonly.c +++ b/app/test-pmd/rxonly.c @@ -159,7 +159,7 @@ pkt_burst_receive(struct fwd_stream *fs) mb->hash.fdir.hash, mb->hash.fdir.id); } if (ol_flags & PKT_RX_VLAN_PKT) - printf(" - VLAN tci=0x%x", mb->vlan_tci); + printf(" - VLAN tci=0x%x", mb->vlan_tci0); if (is_encapsulation) { struct ipv4_hdr *ipv4_hdr; struct ipv6_hdr *ipv6_hdr; diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c index ca32c85..4a2827f 100644 --- a/app/test-pmd/txonly.c +++ b/app/test-pmd/txonly.c @@ -266,7 +266,7 @@ pkt_burst_transmit(struct fwd_stream *fs) pkt->nb_segs = tx_pkt_nb_segs; pkt->pkt_len = tx_pkt_length; pkt->ol_flags = ol_flags; - pkt->vlan_tci = vlan_tci; + pkt->vlan_tci0 = vlan_tci; pkt->l2_len = sizeof(struct ether_hdr); pkt->l3_len = sizeof(struct ipv4_hdr); pkts_burst[nb_pkt] = pkt; diff --git a/app/test/packet_burst_generator.c b/app/test/packet_burst_generator.c index b46eed7..959644c 100644 --- a/app/test/packet_burst_generator.c +++ b/app/test/packet_burst_generator.c @@ -270,7 +270,7 @@ nomore_mbuf: pkt->l2_len = eth_hdr_size; if (ipv4) { - pkt->vlan_tci = ETHER_TYPE_IPv4; + pkt->vlan_tci0 = ETHER_TYPE_IPv4; pkt->l3_len = sizeof(struct ipv4_hdr); if (vlan_enabled) @@ -278,7 +278,7 @@ nomore_mbuf: else pkt->ol_flags = PKT_RX_IPV4_HDR; } else { - pkt->vlan_tci = ETHER_TYPE_IPv6; + pkt->vlan_tci0 = ETHER_TYPE_IPv6; pkt->l3_len = sizeof(struct ipv6_hdr); if (vlan_enabled) diff --git a/lib/librte_ether/rte_ether.h b/lib/librte_ether/rte_ether.h index 49f4576..6d682a2 100644 --- a/lib/librte_ether/rte_ether.h +++ b/lib/librte_ether/rte_ether.h @@ -357,7 +357,7 @@ static inline int rte_vlan_strip(struct rte_mbuf *m) struct vlan_hdr *vh = (struct vlan_hdr *)(eh + 1); m->ol_flags |= PKT_RX_VLAN_PKT; - m->vlan_tci = rte_be_to_cpu_16(vh->vlan_tci); + m->vlan_tci0 = rte_be_to_cpu_16(vh->vlan_tci); /* Copy ether header over rather than moving whole packet */ memmove(rte_pktmbuf_adj(m, sizeof(struct vlan_hdr)), @@ -404,7 +404,7 @@ static inline int rte_vlan_insert(struct rte_mbuf **m) nh->ether_type = rte_cpu_to_be_16(ETHER_TYPE_VLAN); vh = (struct vlan_hdr *) (nh + 1); - vh->vlan_tci = rte_cpu_to_be_16((*m)->vlan_tci); + vh->vlan_tci = rte_cpu_to_be_16((*m)->vlan_tci0); return 0; } diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h index 70b0987..6eed54f 100644 --- a/lib/librte_mbuf/rte_mbuf.h +++ b/lib/librte_mbuf/rte_mbuf.h @@ -101,11 +101,17 @@ extern "C" { #define PKT_RX_TUNNEL_IPV6_HDR (1ULL << 12) /**< RX tunnel packet with IPv6 header. */ #define PKT_RX_FDIR_ID (1ULL << 13) /**< FD id reported if FDIR match. */ #define PKT_RX_FDIR_FLX (1ULL << 14) /**< Flexible bytes reported if FDIR match. */ +#define PKT_RX_QINQ_PKT (1ULL << 15) /**< RX packet with double VLAN stripped. */ /* add new RX flags here */ /* add new TX flags here */ /** + * Second VLAN insertion (QinQ) flag. + */ +#define PKT_TX_QINQ_PKT (1ULL << 49) + +/** * TCP segmentation offload. To enable this offload feature for a * packet to be transmitted on hardware supporting TSO: * - set the PKT_TX_TCP_SEG flag in mbuf->ol_flags (this flag implies @@ -268,7 +274,6 @@ struct rte_mbuf { uint16_t data_len; /**< Amount of data in segment buffer. */ uint32_t pkt_len; /**< Total pkt len: sum of all segments. */ - uint16_t vlan_tci; /**< VLAN Tag Control Identifier (CPU order) */ uint16_t reserved; union { uint32_t rss; /**< RSS hash result if RSS enabled */ @@ -289,6 +294,15 @@ struct rte_mbuf { uint32_t usr; /**< User defined tags. See rte_distributor_process() */ } hash; /**< hash information */ + /* VLAN tags */ + union { + uint32_t vlan_tags; + struct { + uint16_t vlan_tci0; + uint16_t vlan_tci1; + }; + }; + uint32_t seqn; /**< Sequence number. See also rte_reorder_insert() */ /* second cache line - fields only used in slow path or on TX */ @@ -766,7 +780,8 @@ static inline void rte_pktmbuf_reset(struct rte_mbuf *m) m->next = NULL; m->pkt_len = 0; m->tx_offload = 0; - m->vlan_tci = 0; + m->vlan_tci0 = 0; + m->vlan_tci1 = 0; m->nb_segs = 1; m->port = 0xff; @@ -838,7 +853,8 @@ static inline void rte_pktmbuf_attach(struct rte_mbuf *mi, struct rte_mbuf *m) mi->data_off = m->data_off; mi->data_len = m->data_len; mi->port = m->port; - mi->vlan_tci = m->vlan_tci; + mi->vlan_tci0 = m->vlan_tci0; + mi->vlan_tci1 = m->vlan_tci1; mi->tx_offload = m->tx_offload; mi->hash = m->hash; diff --git a/lib/librte_pmd_e1000/em_rxtx.c b/lib/librte_pmd_e1000/em_rxtx.c index 64d067c..422f4ed 100644 --- a/lib/librte_pmd_e1000/em_rxtx.c +++ b/lib/librte_pmd_e1000/em_rxtx.c @@ -438,7 +438,7 @@ eth_em_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, /* If hardware offload required */ tx_ol_req = (ol_flags & (PKT_TX_IP_CKSUM | PKT_TX_L4_MASK)); if (tx_ol_req) { - hdrlen.f.vlan_tci = tx_pkt->vlan_tci; + hdrlen.f.vlan_tci = tx_pkt->vlan_tci0; hdrlen.f.l2_len = tx_pkt->l2_len; hdrlen.f.l3_len = tx_pkt->l3_len; /* If new context to be built or reuse the exist ctx. */ @@ -534,7 +534,7 @@ eth_em_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, /* Set VLAN Tag offload fields. */ if (ol_flags & PKT_TX_VLAN_PKT) { cmd_type_len |= E1000_TXD_CMD_VLE; - popts_spec = tx_pkt->vlan_tci << E1000_TXD_VLAN_SHIFT; + popts_spec = tx_pkt->vlan_tci0 << E1000_TXD_VLAN_SHIFT; } if (tx_ol_req) { @@ -800,7 +800,7 @@ eth_em_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, rx_desc_error_to_pkt_flags(rxd.errors); /* Only valid if PKT_RX_VLAN_PKT set in pkt_flags */ - rxm->vlan_tci = rte_le_to_cpu_16(rxd.special); + rxm->vlan_tci0 = rte_le_to_cpu_16(rxd.special); /* * Store the mbuf address into the next entry of the array @@ -1026,7 +1026,7 @@ eth_em_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, rx_desc_error_to_pkt_flags(rxd.errors); /* Only valid if PKT_RX_VLAN_PKT set in pkt_flags */ - rxm->vlan_tci = rte_le_to_cpu_16(rxd.special); + rxm->vlan_tci0 = rte_le_to_cpu_16(rxd.special); /* Prefetch data of first segment, if configured to do so. */ rte_packet_prefetch((char *)first_seg->buf_addr + diff --git a/lib/librte_pmd_e1000/igb_rxtx.c b/lib/librte_pmd_e1000/igb_rxtx.c index 80d05c0..fda273f 100644 --- a/lib/librte_pmd_e1000/igb_rxtx.c +++ b/lib/librte_pmd_e1000/igb_rxtx.c @@ -401,7 +401,7 @@ eth_igb_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, ol_flags = tx_pkt->ol_flags; l2_l3_len.l2_len = tx_pkt->l2_len; l2_l3_len.l3_len = tx_pkt->l3_len; - vlan_macip_lens.f.vlan_tci = tx_pkt->vlan_tci; + vlan_macip_lens.f.vlan_tci = tx_pkt->vlan_tci0; vlan_macip_lens.f.l2_l3_len = l2_l3_len.u16; tx_ol_req = ol_flags & IGB_TX_OFFLOAD_MASK; @@ -784,7 +784,7 @@ eth_igb_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, rxm->hash.rss = rxd.wb.lower.hi_dword.rss; hlen_type_rss = rte_le_to_cpu_32(rxd.wb.lower.lo_dword.data); /* Only valid if PKT_RX_VLAN_PKT set in pkt_flags */ - rxm->vlan_tci = rte_le_to_cpu_16(rxd.wb.upper.vlan); + rxm->vlan_tci0 = rte_le_to_cpu_16(rxd.wb.upper.vlan); pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss); pkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr); @@ -1015,10 +1015,10 @@ eth_igb_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, first_seg->hash.rss = rxd.wb.lower.hi_dword.rss; /* - * The vlan_tci field is only valid when PKT_RX_VLAN_PKT is + * The vlan_tci0 field is only valid when PKT_RX_VLAN_PKT is * set in the pkt_flags field. */ - first_seg->vlan_tci = rte_le_to_cpu_16(rxd.wb.upper.vlan); + first_seg->vlan_tci0 = rte_le_to_cpu_16(rxd.wb.upper.vlan); hlen_type_rss = rte_le_to_cpu_32(rxd.wb.lower.lo_dword.data); pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss); pkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr); diff --git a/lib/librte_pmd_enic/enic_ethdev.c b/lib/librte_pmd_enic/enic_ethdev.c index 69ad01b..45c0e14 100644 --- a/lib/librte_pmd_enic/enic_ethdev.c +++ b/lib/librte_pmd_enic/enic_ethdev.c @@ -506,7 +506,7 @@ static uint16_t enicpmd_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, return index; } pkt_len = tx_pkt->pkt_len; - vlan_id = tx_pkt->vlan_tci; + vlan_id = tx_pkt->vlan_tci0; ol_flags = tx_pkt->ol_flags; for (frags = 0; inc_len < pkt_len; frags++) { if (!tx_pkt) diff --git a/lib/librte_pmd_enic/enic_main.c b/lib/librte_pmd_enic/enic_main.c index 15313c2..d1660a1 100644 --- a/lib/librte_pmd_enic/enic_main.c +++ b/lib/librte_pmd_enic/enic_main.c @@ -490,7 +490,7 @@ static int enic_rq_indicate_buf(struct vnic_rq *rq, if (vlan_tci) { rx_pkt->ol_flags |= PKT_RX_VLAN_PKT; - rx_pkt->vlan_tci = vlan_tci; + rx_pkt->vlan_tci0 = vlan_tci; } return eop; diff --git a/lib/librte_pmd_fm10k/fm10k_rxtx.c b/lib/librte_pmd_fm10k/fm10k_rxtx.c index 83bddfc..ba3b8aa 100644 --- a/lib/librte_pmd_fm10k/fm10k_rxtx.c +++ b/lib/librte_pmd_fm10k/fm10k_rxtx.c @@ -410,7 +410,7 @@ static inline void tx_xmit_pkt(struct fm10k_tx_queue *q, struct rte_mbuf *mb) /* set vlan if requested */ if (mb->ol_flags & PKT_TX_VLAN_PKT) - q->hw_ring[q->next_free].vlan = mb->vlan_tci; + q->hw_ring[q->next_free].vlan = mb->vlan_tci0; /* fill up the rings */ for (; mb != NULL; mb = mb->next) { diff --git a/lib/librte_pmd_i40e/i40e_rxtx.c b/lib/librte_pmd_i40e/i40e_rxtx.c index 493cfa3..1fe377c 100644 --- a/lib/librte_pmd_i40e/i40e_rxtx.c +++ b/lib/librte_pmd_i40e/i40e_rxtx.c @@ -703,7 +703,7 @@ i40e_rx_scan_hw_ring(struct i40e_rx_queue *rxq) I40E_RXD_QW1_LENGTH_PBUF_SHIFT) - rxq->crc_len; mb->data_len = pkt_len; mb->pkt_len = pkt_len; - mb->vlan_tci = rx_status & + mb->vlan_tci0 = rx_status & (1 << I40E_RX_DESC_STATUS_L2TAG1P_SHIFT) ? rte_le_to_cpu_16(\ rxdp[j].wb.qword0.lo_dword.l2tag1) : 0; @@ -947,7 +947,7 @@ i40e_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) rxm->data_len = rx_packet_len; rxm->port = rxq->port_id; - rxm->vlan_tci = rx_status & + rxm->vlan_tci0 = rx_status & (1 << I40E_RX_DESC_STATUS_L2TAG1P_SHIFT) ? rte_le_to_cpu_16(rxd.wb.qword0.lo_dword.l2tag1) : 0; pkt_flags = i40e_rxd_status_to_pkt_flags(qword1); @@ -1106,7 +1106,7 @@ i40e_recv_scattered_pkts(void *rx_queue, } first_seg->port = rxq->port_id; - first_seg->vlan_tci = (rx_status & + first_seg->vlan_tci0 = (rx_status & (1 << I40E_RX_DESC_STATUS_L2TAG1P_SHIFT)) ? rte_le_to_cpu_16(rxd.wb.qword0.lo_dword.l2tag1) : 0; pkt_flags = i40e_rxd_status_to_pkt_flags(qword1); @@ -1291,7 +1291,7 @@ i40e_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) /* Descriptor based VLAN insertion */ if (ol_flags & PKT_TX_VLAN_PKT) { - tx_flags |= tx_pkt->vlan_tci << + tx_flags |= tx_pkt->vlan_tci0 << I40E_TX_FLAG_L2TAG1_SHIFT; tx_flags |= I40E_TX_FLAG_INSERT_VLAN; td_cmd |= I40E_TX_DESC_CMD_IL2TAG1; diff --git a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c index 7f15f15..fd664da 100644 --- a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c +++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c @@ -612,7 +612,7 @@ ixgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, tx_offload.l2_len = tx_pkt->l2_len; tx_offload.l3_len = tx_pkt->l3_len; tx_offload.l4_len = tx_pkt->l4_len; - tx_offload.vlan_tci = tx_pkt->vlan_tci; + tx_offload.vlan_tci = tx_pkt->vlan_tci0; tx_offload.tso_segsz = tx_pkt->tso_segsz; /* If new context need be built or reuse the exist ctx. */ @@ -981,8 +981,7 @@ ixgbe_rx_scan_hw_ring(struct ixgbe_rx_queue *rxq) pkt_len = (uint16_t)(rxdp[j].wb.upper.length - rxq->crc_len); mb->data_len = pkt_len; mb->pkt_len = pkt_len; - mb->vlan_tci = rxdp[j].wb.upper.vlan; - mb->vlan_tci = rte_le_to_cpu_16(rxdp[j].wb.upper.vlan); + mb->vlan_tci0 = rte_le_to_cpu_16(rxdp[j].wb.upper.vlan); /* convert descriptor fields to rte mbuf flags */ pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags( @@ -1327,7 +1326,7 @@ ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, hlen_type_rss = rte_le_to_cpu_32(rxd.wb.lower.lo_dword.data); /* Only valid if PKT_RX_VLAN_PKT set in pkt_flags */ - rxm->vlan_tci = rte_le_to_cpu_16(rxd.wb.upper.vlan); + rxm->vlan_tci0 = rte_le_to_cpu_16(rxd.wb.upper.vlan); pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss); pkt_flags = pkt_flags | rx_desc_status_to_pkt_flags(staterr); @@ -1412,10 +1411,10 @@ ixgbe_fill_cluster_head_buf( head->port = port_id; /* - * The vlan_tci field is only valid when PKT_RX_VLAN_PKT is + * The vlan_tci0 field is only valid when PKT_RX_VLAN_PKT is * set in the pkt_flags field. */ - head->vlan_tci = rte_le_to_cpu_16(desc->wb.upper.vlan); + head->vlan_tci0 = rte_le_to_cpu_16(desc->wb.upper.vlan); hlen_type_rss = rte_le_to_cpu_32(desc->wb.lower.lo_dword.data); pkt_flags = rx_desc_hlen_type_rss_to_pkt_flags(hlen_type_rss); pkt_flags |= rx_desc_status_to_pkt_flags(staterr); diff --git a/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c b/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c index d8019f5..57a33c9 100644 --- a/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c +++ b/lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c @@ -405,7 +405,7 @@ vmxnet3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, /* Add VLAN tag if requested */ if (txm->ol_flags & PKT_TX_VLAN_PKT) { txd->ti = 1; - txd->tci = rte_cpu_to_le_16(txm->vlan_tci); + txd->tci = rte_cpu_to_le_16(txm->vlan_tci0); } /* Record current mbuf for freeing it later in tx complete */ @@ -629,10 +629,10 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) rcd->tci); rxm->ol_flags = PKT_RX_VLAN_PKT; /* Copy vlan tag in packet buffer */ - rxm->vlan_tci = rte_le_to_cpu_16((uint16_t)rcd->tci); + rxm->vlan_tci0 = rte_le_to_cpu_16((uint16_t)rcd->tci); } else { rxm->ol_flags = 0; - rxm->vlan_tci = 0; + rxm->vlan_tci0 = 0; } /* Initialize newly received packet buffer */ -- 1.9.3