Thread (42 messages) 42 messages, 9 authors, 2015-07-07

Re: [PATCH 2/5] mbuf: use the reserved 16 bits for double vlan

From: Zhang, Helin <hidden>
Date: 2015-06-02 02:37:50

-----Original Message-----
From: Olivier MATZ [mailto:olivier.matz@6wind.com]
Sent: Monday, June 1, 2015 4:50 PM
To: Zhang, Helin; dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH 2/5] mbuf: use the reserved 16 bits for double
vlan

Hi Helin,

On 05/26/2015 10:36 AM, Helin Zhang wrote:
quoted
Use the reserved 16 bits in rte_mbuf structure for the outer vlan,
also add QinQ offloading flags for both RX and TX sides.

Signed-off-by: Helin Zhang <redacted>
---
 lib/librte_mbuf/rte_mbuf.h | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
index ab6de67..4551df9 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. */
quoted
 #define PKT_RX_FDIR_ID       (1ULL << 13) /**< FD id reported if FDIR
match. */
quoted
 #define PKT_RX_FDIR_FLX      (1ULL << 14) /**< Flexible bytes reported if
FDIR match. */
quoted
+#define PKT_RX_QINQ_PKT     (1ULL << 15)  /**< RX packet with double
VLAN stripped. */
quoted
 /* add new RX flags here */
There's a small indent typo here: (1ULL << 15) is not aligned with the lines above
Will fix it.
quoted
 /* add new TX flags here */

 /**
+ * Second VLAN insertion (QinQ) flag.
+ */
+#define PKT_TX_QINQ_PKT    (1ULL << 49)   /**< TX packet with double
VLAN inserted. */
quoted
+
+/**
  * 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 @@ -279,7 +285,7 @@ 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;
+	uint16_t vlan_tci_outer;  /**< Outer VLAN Tag Control Identifier
+(CPU order) */
 	union {
 		uint32_t rss;     /**< RSS hash result if RSS enabled */
 		struct {
@@ -777,6 +783,7 @@ static inline void rte_pktmbuf_reset(struct rte_mbuf
*m)
quoted
 	m->pkt_len = 0;
 	m->tx_offload = 0;
 	m->vlan_tci = 0;
+	m->vlan_tci_outer = 0;
 	m->nb_segs = 1;
 	m->port = 0xff;
@@ -849,6 +856,7 @@ static inline void rte_pktmbuf_attach(struct rte_mbuf
*mi, struct rte_mbuf *m)
quoted
 	mi->data_len = m->data_len;
 	mi->port = m->port;
 	mi->vlan_tci = m->vlan_tci;
+	mi->vlan_tci_outer = m->vlan_tci_outer;
 	mi->tx_offload = m->tx_offload;
 	mi->hash = m->hash;
Maybe some more affectations are missing. For instance in
examples/ipv4_multicast/main.c or in examples/vhost/main.c.
You can grep "->vlan_tci =" to find them all.
Will add vlan_tci_outer in ipv4_multicast/main.c.
After talking with vhost developers, it does not need to support double vlan at
this moment, so I will keep it as is.
Do we need to update rte_vlan_insert() and rte_vlan_strip() to support QinQ?
They are the software version of vlan stripping and insertion. It was mainly for virtio.
I'd like to keep it as is, and let who want it to develop the double vlan stripping/insertion
version in the future.

Thank you very much!
- Helin
Regards,
Olivier
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help