DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Zhang, Helin" <helin.zhang@intel.com>
To: "Ananyev, Konstantin" <konstantin.ananyev@intel.com>,
	"dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH RFC 1/6] mbuf: update mbuf structure for QinQ	support
Date: Wed, 6 May 2015 04:06:17 +0000	[thread overview]
Message-ID: <F35DEAC7BCE34641BA9FAC6BCA4A12E70A859453@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <2601191342CEEE43887BDE71AB97725821424AF9@irsmsx105.ger.corp.intel.com>



> -----Original Message-----
> From: Ananyev, Konstantin
> Sent: Tuesday, May 5, 2015 7:05 PM
> To: Zhang, Helin; dev@dpdk.org
> Subject: RE: [dpdk-dev] [PATCH RFC 1/6] mbuf: update mbuf structure for
> QinQ support
> 
> Hi Helin,
> 
> > -----Original Message-----
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Helin Zhang
> > Sent: Tuesday, May 05, 2015 3:32 AM
> > To: dev@dpdk.org
> > Subject: [dpdk-dev] [PATCH RFC 1/6] mbuf: update mbuf structure for
> > QinQ support
> >
> > 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 <helin.zhang@intel.com>
> > ---
> >  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;
> 
> Now here is an implicit 2-bytes whole between 'reserved' and 'rss'.
> Probably better to make it explicit - make 'reserved' uint32_t.
Yes, the layout will be changed according to the demands of Vector PMD.
The vlan structure will be kept the same, but the mbuf structure layout will
be re-organized a bit.

> 
> Another thing - it looks like your change will break  ixgbe vector RX.
Yes, in the cover-letter, I noted that the vector PMD will be updated soon
together with the code changes.

> 
> >  	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;
> 
> Do you really need to change vlan_tci to vlan_tci0?
> Can't you keep 'vlan_tci' for first vlan tag, and add something like
> 'vlan_tci_ext', or 'vlan_tci_next' for second one?
> Would save you a lot of changes, again users who use single vlan wouldn't
> need to update their code for 2.1.
Yes, good point! The names came from the original mbuf definition done by
Bruce long long ago. If more guys suggest keeping th old one, and just add a new
one, I will do like that in the next version of patch set.
Thank you all!

> 
> > +		};
> > +	};
> > +
> >  	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;
> 
> Why just not:
> m-> vlan_tags = 0;
> ?
Accepted. Good point!

> 
> >  	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;
> 
> Same thing, why not:
> mi-> vlan_tags = m-> vlan_tags;
> ?
Accepted. Good point!

Regards,
Helin

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

  parent reply	other threads:[~2015-05-06  4:07 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-05  2:32 [dpdk-dev] [PATCH RFC 0/6] support of QinQ stripping and insertion of i40e Helin Zhang
2015-05-05  2:32 ` [dpdk-dev] [PATCH RFC 1/6] mbuf: update mbuf structure for QinQ support Helin Zhang
2015-05-05 11:04   ` Ananyev, Konstantin
2015-05-05 15:42     ` Chilikin, Andrey
2015-05-05 22:37       ` Ananyev, Konstantin
2015-05-06  4:07         ` Zhang, Helin
2015-05-06  4:06     ` Zhang, Helin [this message]
2015-05-06  8:39       ` Bruce Richardson
2015-05-06  8:48         ` Zhang, Helin
2015-05-05  2:32 ` [dpdk-dev] [PATCH RFC 2/6] i40e: reconfigure the hardware to support QinQ stripping/insertion Helin Zhang
2015-05-05  2:32 ` [dpdk-dev] [PATCH RFC 3/6] i40e: support of QinQ stripping/insertion in RX/TX Helin Zhang
2015-05-05  2:32 ` [dpdk-dev] [PATCH RFC 4/6] ethdev: add QinQ offload capability flags Helin Zhang
2015-05-05  2:32 ` [dpdk-dev] [PATCH RFC 5/6] i40e: update of " Helin Zhang
2015-05-05  2:32 ` [dpdk-dev] [PATCH RFC 6/6] app/testpmd: support of QinQ stripping and insertion Helin Zhang
2015-05-26  8:36 ` [dpdk-dev] [PATCH 0/5] support i40e " Helin Zhang
2015-05-26  8:36   ` [dpdk-dev] [PATCH 1/5] ixgbe: remove a discarded source line Helin Zhang
2015-06-01  8:50     ` Olivier MATZ
2015-06-02  1:45       ` Zhang, Helin
2015-05-26  8:36   ` [dpdk-dev] [PATCH 2/5] mbuf: use the reserved 16 bits for double vlan Helin Zhang
2015-05-26 14:55     ` Stephen Hemminger
2015-05-26 15:00       ` Zhang, Helin
2015-05-26 15:02       ` Ananyev, Konstantin
2015-05-26 15:35         ` Stephen Hemminger
2015-05-26 15:46           ` Ananyev, Konstantin
2015-05-27  1:07             ` Zhang, Helin
2015-06-01  8:50     ` Olivier MATZ
2015-06-02  2:37       ` Zhang, Helin
2015-05-26  8:36   ` [dpdk-dev] [PATCH 3/5] i40e: support double vlan stripping and insertion Helin Zhang
2015-06-01  8:50     ` Olivier MATZ
2015-06-02  2:45       ` Zhang, Helin
2015-05-26  8:36   ` [dpdk-dev] [PATCH 4/5] i40evf: add supported offload capability flags Helin Zhang
2015-05-26  8:36   ` [dpdk-dev] [PATCH 5/5] app/testpmd: add test cases for qinq stripping and insertion Helin Zhang
2015-06-02  3:16   ` [dpdk-dev] [PATCH v2 0/6] support i40e QinQ " Helin Zhang
2015-06-02  3:16     ` [dpdk-dev] [PATCH v2 1/6] ixgbe: remove a discarded source line Helin Zhang
2015-06-02  3:16     ` [dpdk-dev] [PATCH v2 2/6] mbuf: use the reserved 16 bits for double vlan Helin Zhang
2015-06-02  3:16     ` [dpdk-dev] [PATCH v2 3/6] i40e: support double vlan stripping and insertion Helin Zhang
2015-06-02  3:16     ` [dpdk-dev] [PATCH v2 4/6] i40evf: add supported offload capability flags Helin Zhang
2015-06-02  3:16     ` [dpdk-dev] [PATCH v2 5/6] app/testpmd: add test cases for qinq stripping and insertion Helin Zhang
2015-06-02  3:16     ` [dpdk-dev] [PATCH v2 6/6] examples/ipv4_multicast: support double vlan " Helin Zhang
2015-06-02  7:37     ` [dpdk-dev] [PATCH v2 0/6] support i40e QinQ " Liu, Jijiang
2015-06-08  7:32       ` Cao, Min
2015-06-08  7:40     ` Olivier MATZ
2015-06-11  7:03     ` [dpdk-dev] [PATCH v3 0/7] " Helin Zhang
2015-06-11  7:03       ` [dpdk-dev] [PATCH v3 1/7] ixgbe: remove a discarded source line Helin Zhang
2015-06-11  7:03       ` [dpdk-dev] [PATCH v3 2/7] mbuf: use the reserved 16 bits for double vlan Helin Zhang
2015-06-25  8:31         ` Zhang, Helin
2015-06-28 20:36           ` Thomas Monjalon
2015-06-30  7:33             ` Olivier MATZ
2015-06-11  7:03       ` [dpdk-dev] [PATCH v3 3/7] i40e: support double vlan stripping and insertion Helin Zhang
2015-06-11  7:03       ` [dpdk-dev] [PATCH v3 4/7] i40evf: add supported offload capability flags Helin Zhang
2015-06-11  7:03       ` [dpdk-dev] [PATCH v3 5/7] app/testpmd: add test cases for qinq stripping and insertion Helin Zhang
2015-06-11  7:03       ` [dpdk-dev] [PATCH v3 6/7] examples/ipv4_multicast: support double vlan " Helin Zhang
2015-06-11  7:04       ` [dpdk-dev] [PATCH v3 7/7] doc: update testpmd command Helin Zhang
2015-06-11  7:25       ` [dpdk-dev] [PATCH v3 0/7] support i40e QinQ stripping and insertion Wu, Jingjing
2015-07-07 14:43         ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=F35DEAC7BCE34641BA9FAC6BCA4A12E70A859453@SHSMSX104.ccr.corp.intel.com \
    --to=helin.zhang@intel.com \
    --cc=dev@dpdk.org \
    --cc=konstantin.ananyev@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).