DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 0/2] support PPPoE and L2TP in SW ptype parser
@ 2017-11-28 10:12 Beilei Xing
  2017-11-28 10:12 ` [dpdk-dev] [PATCH 1/2] mbuf: support PPPoE and L2TP in software packet type parser Beilei Xing
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Beilei Xing @ 2017-11-28 10:12 UTC (permalink / raw)
  To: jingjing.wu, olivier.matz; +Cc: dev, andrey.chilikin

Beilei Xing (2):
  mbuf: support PPPoE and L2TP in software packet type parser
  net/i40e: support PPPoE and L2TP in SW ptype parser function

 drivers/net/i40e/i40e_ethdev.c   | 72 ++++++++++++++++++++++++++++------------
 lib/librte_mbuf/rte_mbuf_ptype.c |  2 ++
 lib/librte_mbuf/rte_mbuf_ptype.h | 26 +++++++++++++++
 3 files changed, 78 insertions(+), 22 deletions(-)

-- 
2.5.5

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-dev] [PATCH 1/2] mbuf: support PPPoE and L2TP in software packet type parser
  2017-11-28 10:12 [dpdk-dev] [PATCH 0/2] support PPPoE and L2TP in SW ptype parser Beilei Xing
@ 2017-11-28 10:12 ` Beilei Xing
  2017-12-19 10:11   ` Olivier MATZ
  2017-11-28 10:12 ` [dpdk-dev] [PATCH 2/2] net/i40e: support PPPoE and L2TP in SW ptype parser function Beilei Xing
  2017-12-20  8:22 ` [dpdk-dev] [PATCH v2 0/2] support PPPoE and L2TP packet types Beilei Xing
  2 siblings, 1 reply; 15+ messages in thread
From: Beilei Xing @ 2017-11-28 10:12 UTC (permalink / raw)
  To: jingjing.wu, olivier.matz; +Cc: dev, andrey.chilikin

Add support of PPPoE and L2TP in rte_net_get_ptype().

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
---
 lib/librte_mbuf/rte_mbuf_ptype.c |  2 ++
 lib/librte_mbuf/rte_mbuf_ptype.h | 26 ++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/librte_mbuf/rte_mbuf_ptype.c
index a623226..e0f2a92 100644
--- a/lib/librte_mbuf/rte_mbuf_ptype.c
+++ b/lib/librte_mbuf/rte_mbuf_ptype.c
@@ -47,6 +47,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype)
 	case RTE_PTYPE_L2_ETHER_NSH: return "L2_ETHER_NSH";
 	case RTE_PTYPE_L2_ETHER_VLAN: return "L2_ETHER_VLAN";
 	case RTE_PTYPE_L2_ETHER_QINQ: return "L2_ETHER_QINQ";
+	case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE";
 	default: return "L2_UNKNOWN";
 	}
 }
@@ -92,6 +93,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t ptype)
 	case RTE_PTYPE_TUNNEL_GTPC: return "TUNNEL_GTPC";
 	case RTE_PTYPE_TUNNEL_GTPU: return "TUNNEL_GTPU";
 	case RTE_PTYPE_TUNNEL_ESP: return "TUNNEL_ESP";
+	case RTE_PTYPE_TUNNEL_L2TP: return "TUNNEL_L2TP";
 	default: return "TUNNEL_UNKNOWN";
 	}
 }
diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h
index 5c62435..256f024 100644
--- a/lib/librte_mbuf/rte_mbuf_ptype.h
+++ b/lib/librte_mbuf/rte_mbuf_ptype.h
@@ -153,6 +153,13 @@ extern "C" {
  */
 #define RTE_PTYPE_L2_ETHER_QINQ             0x00000007
 /**
+ * PPPOE packet type.
+ *
+ * Packet format:
+ * <'ether type'=[0x8863|0x8864]>
+ */
+#define RTE_PTYPE_L2_ETHER_PPPOE            0x00000008
+/**
  * Mask of layer 2 packet types.
  * It is used for outer packet for tunneling cases.
  */
@@ -426,6 +433,25 @@ extern "C" {
  */
 #define RTE_PTYPE_TUNNEL_ESP                0x00009000
 /**
+ * L2TP (Layer 2 Tunneling Protocol) tunnleing packet type.
+ *
+ * Packet format:
+ * <'ether type'=0x0800
+ * | 'version'=4, 'protocol'=17>
+ * | 'destination port'=1701>
+ * or,
+ * <'ether type'=0x86DD
+ * | 'version'=6, 'next header'=17
+ * | 'destination port'=1701>
+ * or,
+ * <'ether type'=0x0800
+ * | 'version'=4, 'protocol'=115>
+ * or,
+ * <'ether type'=0x86DD
+ * | 'version'=6, 'protocol'=115>
+ */
+#define RTE_PTYPE_TUNNEL_L2TP               0x0000a000
+/**
  * Mask of tunneling packet types.
  */
 #define RTE_PTYPE_TUNNEL_MASK               0x0000f000
-- 
2.5.5

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-dev] [PATCH 2/2] net/i40e: support PPPoE and L2TP in SW ptype parser function
  2017-11-28 10:12 [dpdk-dev] [PATCH 0/2] support PPPoE and L2TP in SW ptype parser Beilei Xing
  2017-11-28 10:12 ` [dpdk-dev] [PATCH 1/2] mbuf: support PPPoE and L2TP in software packet type parser Beilei Xing
@ 2017-11-28 10:12 ` Beilei Xing
  2017-12-20  8:22 ` [dpdk-dev] [PATCH v2 0/2] support PPPoE and L2TP packet types Beilei Xing
  2 siblings, 0 replies; 15+ messages in thread
From: Beilei Xing @ 2017-11-28 10:12 UTC (permalink / raw)
  To: jingjing.wu, olivier.matz; +Cc: dev, andrey.chilikin

This patch adds support for PPPoE and L2TP in software packet
type parser function.

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 72 +++++++++++++++++++++++++++++-------------
 1 file changed, 50 insertions(+), 22 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 811cc9f..b1028a2 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -11078,7 +11078,7 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
 	uint8_t proto_id;
 	char name[RTE_PMD_I40E_DDP_NAME_SIZE];
 	uint32_t i, j, n;
-	bool inner_ip;
+	bool in_tunnel;
 	int ret;
 
 	/* get information about new ptype num */
@@ -11123,7 +11123,7 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
 	for (i = 0; i < ptype_num; i++) {
 		ptype_mapping[i].hw_ptype = ptype[i].ptype_id;
 		ptype_mapping[i].sw_ptype = 0;
-		inner_ip = false;
+		in_tunnel = false;
 		for (j = 0; j < RTE_PMD_I40E_PROTO_NUM; j++) {
 			proto_id = ptype[i].protocols[j];
 			if (proto_id == RTE_PMD_I40E_PROTO_UNUSED)
@@ -11133,54 +11133,82 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
 					continue;
 				memset(name, 0, sizeof(name));
 				strcpy(name, proto[n].name);
-				if (!strncmp(name, "IPV4", 4) && !inner_ip) {
+				if (!strncmp(name, "PPPOE", 5))
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L2_ETHER_PPPOE;
+				if (!strncmp(name, "IPV4", 4) && !in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
-					inner_ip = true;
-				} else if (!strncmp(name, "IPV4FRAG", 8) &&
-					   inner_ip) {
+				else if (!strncmp(name, "IPV4FRAG", 8) &&
+					   in_tunnel) {
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_FRAG;
 				} else if (!strncmp(name, "IPV4", 4) &&
-					   inner_ip)
+					   in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
 				else if (!strncmp(name, "IPV6", 4) &&
-					 !inner_ip) {
+					 !in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
-					inner_ip = true;
-				} else if (!strncmp(name, "IPV6FRAG", 8) &&
-					   inner_ip) {
+				else if (!strncmp(name, "IPV6FRAG", 8) &&
+					   in_tunnel) {
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_FRAG;
 				} else if (!strncmp(name, "IPV6", 4) &&
-					   inner_ip)
+					   in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
-				else if (!strncmp(name, "GTPC", 4))
-					ptype_mapping[i].sw_ptype |=
-						RTE_PTYPE_TUNNEL_GTPC;
-				else if (!strncmp(name, "GTPU", 4))
+				else if (!strncmp(name, "UDP", 3) && !in_tunnel)
 					ptype_mapping[i].sw_ptype |=
-						RTE_PTYPE_TUNNEL_GTPU;
-				else if (!strncmp(name, "UDP", 3))
+						RTE_PTYPE_L4_UDP;
+				else if (!strncmp(name, "UDP", 3) && in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_UDP;
-				else if (!strncmp(name, "TCP", 3))
+				else if (!strncmp(name, "TCP", 3) && !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L4_TCP;
+				else if (!strncmp(name, "TCP", 3) && in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_TCP;
-				else if (!strncmp(name, "SCTP", 4))
+				else if (!strncmp(name, "SCTP", 4) &&
+					 !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L4_SCTP;
+				else if (!strncmp(name, "SCTP", 4) && in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_SCTP;
-				else if (!strncmp(name, "ICMP", 4) ||
-					 !strncmp(name, "ICMPV6", 6))
+				else if ((!strncmp(name, "ICMP", 4) ||
+					  !strncmp(name, "ICMPV6", 6)) &&
+					 !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L4_ICMP;
+				else if ((!strncmp(name, "ICMP", 4) ||
+					 !strncmp(name, "ICMPV6", 6)) &&
+					in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_ICMP;
+				else if (!strncmp(name, "GTPC", 4)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_GTPC;
+					in_tunnel = true;
+				} else if (!strncmp(name, "GTPU", 4)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_GTPU;
+					in_tunnel = true;
+				} else if (!strncmp(name, "GRENAT", 6)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_GRENAT;
+					in_tunnel = true;
+				} else if (!strncmp(name, "L2TPv2CTL", 9)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_L2TP;
+					in_tunnel = true;
+				}
 
 				break;
 			}
-- 
2.5.5

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH 1/2] mbuf: support PPPoE and L2TP in software packet type parser
  2017-11-28 10:12 ` [dpdk-dev] [PATCH 1/2] mbuf: support PPPoE and L2TP in software packet type parser Beilei Xing
@ 2017-12-19 10:11   ` Olivier MATZ
  2017-12-20  3:13     ` Xing, Beilei
  0 siblings, 1 reply; 15+ messages in thread
From: Olivier MATZ @ 2017-12-19 10:11 UTC (permalink / raw)
  To: Beilei Xing; +Cc: jingjing.wu, dev, andrey.chilikin

Hi Beilei,

On Tue, Nov 28, 2017 at 06:12:55PM +0800, Beilei Xing wrote:
> Add support of PPPoE and L2TP in rte_net_get_ptype().
> 
> Signed-off-by: Beilei Xing <beilei.xing@intel.com>
> ---
>  lib/librte_mbuf/rte_mbuf_ptype.c |  2 ++
>  lib/librte_mbuf/rte_mbuf_ptype.h | 26 ++++++++++++++++++++++++++
>  2 files changed, 28 insertions(+)
> 
> diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/librte_mbuf/rte_mbuf_ptype.c
> index a623226..e0f2a92 100644
> --- a/lib/librte_mbuf/rte_mbuf_ptype.c
> +++ b/lib/librte_mbuf/rte_mbuf_ptype.c
> @@ -47,6 +47,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype)
>  	case RTE_PTYPE_L2_ETHER_NSH: return "L2_ETHER_NSH";
>  	case RTE_PTYPE_L2_ETHER_VLAN: return "L2_ETHER_VLAN";
>  	case RTE_PTYPE_L2_ETHER_QINQ: return "L2_ETHER_QINQ";
> +	case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE";
>  	default: return "L2_UNKNOWN";
>  	}
>  }
> @@ -92,6 +93,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t ptype)
>  	case RTE_PTYPE_TUNNEL_GTPC: return "TUNNEL_GTPC";
>  	case RTE_PTYPE_TUNNEL_GTPU: return "TUNNEL_GTPU";
>  	case RTE_PTYPE_TUNNEL_ESP: return "TUNNEL_ESP";
> +	case RTE_PTYPE_TUNNEL_L2TP: return "TUNNEL_L2TP";
>  	default: return "TUNNEL_UNKNOWN";
>  	}
>  }
> diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h
> index 5c62435..256f024 100644
> --- a/lib/librte_mbuf/rte_mbuf_ptype.h
> +++ b/lib/librte_mbuf/rte_mbuf_ptype.h
> @@ -153,6 +153,13 @@ extern "C" {
>   */
>  #define RTE_PTYPE_L2_ETHER_QINQ             0x00000007
>  /**
> + * PPPOE packet type.
> + *
> + * Packet format:
> + * <'ether type'=[0x8863|0x8864]>
> + */
> +#define RTE_PTYPE_L2_ETHER_PPPOE            0x00000008
> +/**
>   * Mask of layer 2 packet types.
>   * It is used for outer packet for tunneling cases.
>   */
> @@ -426,6 +433,25 @@ extern "C" {
>   */
>  #define RTE_PTYPE_TUNNEL_ESP                0x00009000
>  /**
> + * L2TP (Layer 2 Tunneling Protocol) tunnleing packet type.
> + *
> + * Packet format:
> + * <'ether type'=0x0800
> + * | 'version'=4, 'protocol'=17>
> + * | 'destination port'=1701>
> + * or,
> + * <'ether type'=0x86DD
> + * | 'version'=6, 'next header'=17
> + * | 'destination port'=1701>
> + * or,
> + * <'ether type'=0x0800
> + * | 'version'=4, 'protocol'=115>
> + * or,
> + * <'ether type'=0x86DD
> + * | 'version'=6, 'protocol'=115>
> + */
> +#define RTE_PTYPE_TUNNEL_L2TP               0x0000a000
> +/**
>   * Mask of tunneling packet types.
>   */
>  #define RTE_PTYPE_TUNNEL_MASK               0x0000f000

The patch looks good, but it should be renamed:

> mbuf: support PPPoE and L2TP in software packet type parser

The patch just adds the definition of the packet types, it does
not add the support of these packet types in the software parser,
which is located in rte_net_get_ptype().

So, I suggest this title instead:

  mbuf: add PPPoE and L2TP packet types


Thanks
Olivier

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH 1/2] mbuf: support PPPoE and L2TP in software packet type parser
  2017-12-19 10:11   ` Olivier MATZ
@ 2017-12-20  3:13     ` Xing, Beilei
  0 siblings, 0 replies; 15+ messages in thread
From: Xing, Beilei @ 2017-12-20  3:13 UTC (permalink / raw)
  To: Olivier MATZ; +Cc: Wu, Jingjing, dev, Chilikin, Andrey



> -----Original Message-----
> From: Olivier MATZ [mailto:olivier.matz@6wind.com]
> Sent: Tuesday, December 19, 2017 6:11 PM
> To: Xing, Beilei <beilei.xing@intel.com>
> Cc: Wu, Jingjing <jingjing.wu@intel.com>; dev@dpdk.org; Chilikin, Andrey
> <andrey.chilikin@intel.com>
> Subject: Re: [PATCH 1/2] mbuf: support PPPoE and L2TP in software packet
> type parser
> 
> Hi Beilei,
> 
> On Tue, Nov 28, 2017 at 06:12:55PM +0800, Beilei Xing wrote:
> > Add support of PPPoE and L2TP in rte_net_get_ptype().
> >
> > Signed-off-by: Beilei Xing <beilei.xing@intel.com>
> > ---
> >  lib/librte_mbuf/rte_mbuf_ptype.c |  2 ++
> > lib/librte_mbuf/rte_mbuf_ptype.h | 26 ++++++++++++++++++++++++++
> >  2 files changed, 28 insertions(+)
> >
> > diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c
> > b/lib/librte_mbuf/rte_mbuf_ptype.c
> > index a623226..e0f2a92 100644
> > --- a/lib/librte_mbuf/rte_mbuf_ptype.c
> > +++ b/lib/librte_mbuf/rte_mbuf_ptype.c
> > @@ -47,6 +47,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype)
> >  	case RTE_PTYPE_L2_ETHER_NSH: return "L2_ETHER_NSH";
> >  	case RTE_PTYPE_L2_ETHER_VLAN: return "L2_ETHER_VLAN";
> >  	case RTE_PTYPE_L2_ETHER_QINQ: return "L2_ETHER_QINQ";
> > +	case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE";
> >  	default: return "L2_UNKNOWN";
> >  	}
> >  }
> > @@ -92,6 +93,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t
> ptype)
> >  	case RTE_PTYPE_TUNNEL_GTPC: return "TUNNEL_GTPC";
> >  	case RTE_PTYPE_TUNNEL_GTPU: return "TUNNEL_GTPU";
> >  	case RTE_PTYPE_TUNNEL_ESP: return "TUNNEL_ESP";
> > +	case RTE_PTYPE_TUNNEL_L2TP: return "TUNNEL_L2TP";
> >  	default: return "TUNNEL_UNKNOWN";
> >  	}
> >  }
> > diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h
> > b/lib/librte_mbuf/rte_mbuf_ptype.h
> > index 5c62435..256f024 100644
> > --- a/lib/librte_mbuf/rte_mbuf_ptype.h
> > +++ b/lib/librte_mbuf/rte_mbuf_ptype.h
> > @@ -153,6 +153,13 @@ extern "C" {
> >   */
> >  #define RTE_PTYPE_L2_ETHER_QINQ             0x00000007
> >  /**
> > + * PPPOE packet type.
> > + *
> > + * Packet format:
> > + * <'ether type'=[0x8863|0x8864]>
> > + */
> > +#define RTE_PTYPE_L2_ETHER_PPPOE            0x00000008
> > +/**
> >   * Mask of layer 2 packet types.
> >   * It is used for outer packet for tunneling cases.
> >   */
> > @@ -426,6 +433,25 @@ extern "C" {
> >   */
> >  #define RTE_PTYPE_TUNNEL_ESP                0x00009000
> >  /**
> > + * L2TP (Layer 2 Tunneling Protocol) tunnleing packet type.
> > + *
> > + * Packet format:
> > + * <'ether type'=0x0800
> > + * | 'version'=4, 'protocol'=17>
> > + * | 'destination port'=1701>
> > + * or,
> > + * <'ether type'=0x86DD
> > + * | 'version'=6, 'next header'=17
> > + * | 'destination port'=1701>
> > + * or,
> > + * <'ether type'=0x0800
> > + * | 'version'=4, 'protocol'=115>
> > + * or,
> > + * <'ether type'=0x86DD
> > + * | 'version'=6, 'protocol'=115>
> > + */
> > +#define RTE_PTYPE_TUNNEL_L2TP               0x0000a000
> > +/**
> >   * Mask of tunneling packet types.
> >   */
> >  #define RTE_PTYPE_TUNNEL_MASK               0x0000f000
> 
> The patch looks good, but it should be renamed:
> 
> > mbuf: support PPPoE and L2TP in software packet type parser
> 
> The patch just adds the definition of the packet types, it does not add the
> support of these packet types in the software parser, which is located in
> rte_net_get_ptype().
> 
> So, I suggest this title instead:
> 
>   mbuf: add PPPoE and L2TP packet types

Yes, thanks for the comments. Will update in the next version.

> 
> 
> Thanks
> Olivier

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-dev] [PATCH v2 0/2] support PPPoE and L2TP packet types
  2017-11-28 10:12 [dpdk-dev] [PATCH 0/2] support PPPoE and L2TP in SW ptype parser Beilei Xing
  2017-11-28 10:12 ` [dpdk-dev] [PATCH 1/2] mbuf: support PPPoE and L2TP in software packet type parser Beilei Xing
  2017-11-28 10:12 ` [dpdk-dev] [PATCH 2/2] net/i40e: support PPPoE and L2TP in SW ptype parser function Beilei Xing
@ 2017-12-20  8:22 ` Beilei Xing
  2017-12-20  8:22   ` [dpdk-dev] [PATCH v2 1/2] mbuf: add " Beilei Xing
                     ` (2 more replies)
  2 siblings, 3 replies; 15+ messages in thread
From: Beilei Xing @ 2017-12-20  8:22 UTC (permalink / raw)
  To: qi.z.zhang; +Cc: dev, jingjing.wu, andrey.chilikin

v2 changes:
 - change patch title
 - rework ptype parser according to new profile meta data

Beilei Xing (2):
  mbuf: add PPPoE and L2TP packet types
  net/i40e: support PPPoE and L2TP ptype parser

 drivers/net/i40e/i40e_ethdev.c   | 83 +++++++++++++++++++++++++++++-----------
 lib/librte_mbuf/rte_mbuf_ptype.c |  2 +
 lib/librte_mbuf/rte_mbuf_ptype.h | 26 +++++++++++++
 3 files changed, 88 insertions(+), 23 deletions(-)

-- 
2.5.5

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-dev] [PATCH v2 1/2] mbuf: add PPPoE and L2TP packet types
  2017-12-20  8:22 ` [dpdk-dev] [PATCH v2 0/2] support PPPoE and L2TP packet types Beilei Xing
@ 2017-12-20  8:22   ` Beilei Xing
  2018-01-03 10:36     ` Olivier Matz
  2017-12-20  8:22   ` [dpdk-dev] [PATCH v2 2/2] net/i40e: support PPPoE and L2TP ptype parser Beilei Xing
  2018-01-04 10:46   ` [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types Beilei Xing
  2 siblings, 1 reply; 15+ messages in thread
From: Beilei Xing @ 2017-12-20  8:22 UTC (permalink / raw)
  To: qi.z.zhang; +Cc: dev, jingjing.wu, andrey.chilikin

Add support of PPPoE and L2TP packet types.

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
---
 lib/librte_mbuf/rte_mbuf_ptype.c |  2 ++
 lib/librte_mbuf/rte_mbuf_ptype.h | 26 ++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/librte_mbuf/rte_mbuf_ptype.c
index a623226..e0f2a92 100644
--- a/lib/librte_mbuf/rte_mbuf_ptype.c
+++ b/lib/librte_mbuf/rte_mbuf_ptype.c
@@ -47,6 +47,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype)
 	case RTE_PTYPE_L2_ETHER_NSH: return "L2_ETHER_NSH";
 	case RTE_PTYPE_L2_ETHER_VLAN: return "L2_ETHER_VLAN";
 	case RTE_PTYPE_L2_ETHER_QINQ: return "L2_ETHER_QINQ";
+	case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE";
 	default: return "L2_UNKNOWN";
 	}
 }
@@ -92,6 +93,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t ptype)
 	case RTE_PTYPE_TUNNEL_GTPC: return "TUNNEL_GTPC";
 	case RTE_PTYPE_TUNNEL_GTPU: return "TUNNEL_GTPU";
 	case RTE_PTYPE_TUNNEL_ESP: return "TUNNEL_ESP";
+	case RTE_PTYPE_TUNNEL_L2TP: return "TUNNEL_L2TP";
 	default: return "TUNNEL_UNKNOWN";
 	}
 }
diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h
index 5c62435..256f024 100644
--- a/lib/librte_mbuf/rte_mbuf_ptype.h
+++ b/lib/librte_mbuf/rte_mbuf_ptype.h
@@ -153,6 +153,13 @@ extern "C" {
  */
 #define RTE_PTYPE_L2_ETHER_QINQ             0x00000007
 /**
+ * PPPOE packet type.
+ *
+ * Packet format:
+ * <'ether type'=[0x8863|0x8864]>
+ */
+#define RTE_PTYPE_L2_ETHER_PPPOE            0x00000008
+/**
  * Mask of layer 2 packet types.
  * It is used for outer packet for tunneling cases.
  */
@@ -426,6 +433,25 @@ extern "C" {
  */
 #define RTE_PTYPE_TUNNEL_ESP                0x00009000
 /**
+ * L2TP (Layer 2 Tunneling Protocol) tunnleing packet type.
+ *
+ * Packet format:
+ * <'ether type'=0x0800
+ * | 'version'=4, 'protocol'=17>
+ * | 'destination port'=1701>
+ * or,
+ * <'ether type'=0x86DD
+ * | 'version'=6, 'next header'=17
+ * | 'destination port'=1701>
+ * or,
+ * <'ether type'=0x0800
+ * | 'version'=4, 'protocol'=115>
+ * or,
+ * <'ether type'=0x86DD
+ * | 'version'=6, 'protocol'=115>
+ */
+#define RTE_PTYPE_TUNNEL_L2TP               0x0000a000
+/**
  * Mask of tunneling packet types.
  */
 #define RTE_PTYPE_TUNNEL_MASK               0x0000f000
-- 
2.5.5

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-dev] [PATCH v2 2/2] net/i40e: support PPPoE and L2TP ptype parser
  2017-12-20  8:22 ` [dpdk-dev] [PATCH v2 0/2] support PPPoE and L2TP packet types Beilei Xing
  2017-12-20  8:22   ` [dpdk-dev] [PATCH v2 1/2] mbuf: add " Beilei Xing
@ 2017-12-20  8:22   ` Beilei Xing
  2018-01-04  8:43     ` Zhang, Qi Z
  2018-01-04 10:46   ` [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types Beilei Xing
  2 siblings, 1 reply; 15+ messages in thread
From: Beilei Xing @ 2017-12-20  8:22 UTC (permalink / raw)
  To: qi.z.zhang; +Cc: dev, jingjing.wu, andrey.chilikin

This patch adds support for PPPoE and L2TP packet
types parser.

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 83 ++++++++++++++++++++++++++++++------------
 1 file changed, 60 insertions(+), 23 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 811cc9f..c6f7ce7 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -11078,7 +11078,7 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
 	uint8_t proto_id;
 	char name[RTE_PMD_I40E_DDP_NAME_SIZE];
 	uint32_t i, j, n;
-	bool inner_ip;
+	bool in_tunnel;
 	int ret;
 
 	/* get information about new ptype num */
@@ -11123,7 +11123,7 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
 	for (i = 0; i < ptype_num; i++) {
 		ptype_mapping[i].hw_ptype = ptype[i].ptype_id;
 		ptype_mapping[i].sw_ptype = 0;
-		inner_ip = false;
+		in_tunnel = false;
 		for (j = 0; j < RTE_PMD_I40E_PROTO_NUM; j++) {
 			proto_id = ptype[i].protocols[j];
 			if (proto_id == RTE_PMD_I40E_PROTO_UNUSED)
@@ -11133,54 +11133,91 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
 					continue;
 				memset(name, 0, sizeof(name));
 				strcpy(name, proto[n].name);
-				if (!strncmp(name, "IPV4", 4) && !inner_ip) {
+				if (!strncmp(name, "PPPOE", 5))
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L2_ETHER_PPPOE;
+				else if (!strncmp(name, "OIPV4", 5)) {
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
-					inner_ip = true;
-				} else if (!strncmp(name, "IPV4FRAG", 8) &&
-					   inner_ip) {
+					in_tunnel = true;
+				} else if (!strncmp(name, "IPV4", 4) &&
+					   !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
+				else if (!strncmp(name, "IPV4FRAG", 8) &&
+					 in_tunnel) {
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_FRAG;
 				} else if (!strncmp(name, "IPV4", 4) &&
-					   inner_ip)
+					   in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
-				else if (!strncmp(name, "IPV6", 4) &&
-					 !inner_ip) {
+				else if (!strncmp(name, "OIPV6", 5)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
+					in_tunnel = true;
+				} else if (!strncmp(name, "IPV6", 4) &&
+					   !in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
-					inner_ip = true;
-				} else if (!strncmp(name, "IPV6FRAG", 8) &&
-					   inner_ip) {
+				else if (!strncmp(name, "IPV6FRAG", 8) &&
+					 in_tunnel) {
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_FRAG;
 				} else if (!strncmp(name, "IPV6", 4) &&
-					   inner_ip)
+					   in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
-				else if (!strncmp(name, "GTPC", 4))
+				else if (!strncmp(name, "UDP", 3) && !in_tunnel)
 					ptype_mapping[i].sw_ptype |=
-						RTE_PTYPE_TUNNEL_GTPC;
-				else if (!strncmp(name, "GTPU", 4))
-					ptype_mapping[i].sw_ptype |=
-						RTE_PTYPE_TUNNEL_GTPU;
-				else if (!strncmp(name, "UDP", 3))
+						RTE_PTYPE_L4_UDP;
+				else if (!strncmp(name, "UDP", 3) && in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_UDP;
-				else if (!strncmp(name, "TCP", 3))
+				else if (!strncmp(name, "TCP", 3) && !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L4_TCP;
+				else if (!strncmp(name, "TCP", 3) && in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_TCP;
-				else if (!strncmp(name, "SCTP", 4))
+				else if (!strncmp(name, "SCTP", 4) &&
+					 !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L4_SCTP;
+				else if (!strncmp(name, "SCTP", 4) && in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_SCTP;
-				else if (!strncmp(name, "ICMP", 4) ||
-					 !strncmp(name, "ICMPV6", 6))
+				else if ((!strncmp(name, "ICMP", 4) ||
+					  !strncmp(name, "ICMPV6", 6)) &&
+					 !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L4_ICMP;
+				else if ((!strncmp(name, "ICMP", 4) ||
+					  !strncmp(name, "ICMPV6", 6)) &&
+					 in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_ICMP;
+				else if (!strncmp(name, "GTPC", 4)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_GTPC;
+					in_tunnel = true;
+				} else if (!strncmp(name, "GTPU", 4)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_GTPU;
+					in_tunnel = true;
+				} else if (!strncmp(name, "GRENAT", 6)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_GRENAT;
+					in_tunnel = true;
+				} else if (!strncmp(name, "L2TPv2CTL", 9)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_L2TP;
+					in_tunnel = true;
+				}
 
 				break;
 			}
-- 
2.5.5

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH v2 1/2] mbuf: add PPPoE and L2TP packet types
  2017-12-20  8:22   ` [dpdk-dev] [PATCH v2 1/2] mbuf: add " Beilei Xing
@ 2018-01-03 10:36     ` Olivier Matz
  0 siblings, 0 replies; 15+ messages in thread
From: Olivier Matz @ 2018-01-03 10:36 UTC (permalink / raw)
  To: Beilei Xing; +Cc: qi.z.zhang, dev, jingjing.wu, andrey.chilikin

On Wed, Dec 20, 2017 at 04:22:43PM +0800, Beilei Xing wrote:
> Add support of PPPoE and L2TP packet types.
> 
> Signed-off-by: Beilei Xing <beilei.xing@intel.com>

Acked-by: Olivier Matz <olivier.matz@6wind.com>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH v2 2/2] net/i40e: support PPPoE and L2TP ptype parser
  2017-12-20  8:22   ` [dpdk-dev] [PATCH v2 2/2] net/i40e: support PPPoE and L2TP ptype parser Beilei Xing
@ 2018-01-04  8:43     ` Zhang, Qi Z
  0 siblings, 0 replies; 15+ messages in thread
From: Zhang, Qi Z @ 2018-01-04  8:43 UTC (permalink / raw)
  To: Xing, Beilei; +Cc: dev, Wu, Jingjing, Chilikin, Andrey


> -----Original Message-----
> From: Xing, Beilei
> Sent: Wednesday, December 20, 2017 4:23 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>
> Cc: dev@dpdk.org; Wu, Jingjing <jingjing.wu@intel.com>; Chilikin, Andrey
> <andrey.chilikin@intel.com>
> Subject: [PATCH v2 2/2] net/i40e: support PPPoE and L2TP ptype parser
> 
> This patch adds support for PPPoE and L2TP packet types parser.

The code is ok for me. 
It's better to add more explanation that the naming rule for protocol type has also been changed
For example:  O|IPV4 = IPV4 + !inner_ip

Regards
Qi
> 
> Signed-off-by: Beilei Xing <beilei.xing@intel.com>
> ---
>  drivers/net/i40e/i40e_ethdev.c | 83
> ++++++++++++++++++++++++++++++------------
>  1 file changed, 60 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 811cc9f..c6f7ce7 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -11078,7 +11078,7 @@ i40e_update_customized_ptype(struct
> rte_eth_dev *dev, uint8_t *pkg,
>  	uint8_t proto_id;
>  	char name[RTE_PMD_I40E_DDP_NAME_SIZE];
>  	uint32_t i, j, n;
> -	bool inner_ip;
> +	bool in_tunnel;
>  	int ret;
> 
>  	/* get information about new ptype num */ @@ -11123,7 +11123,7 @@
> i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
>  	for (i = 0; i < ptype_num; i++) {
>  		ptype_mapping[i].hw_ptype = ptype[i].ptype_id;
>  		ptype_mapping[i].sw_ptype = 0;
> -		inner_ip = false;
> +		in_tunnel = false;
>  		for (j = 0; j < RTE_PMD_I40E_PROTO_NUM; j++) {
>  			proto_id = ptype[i].protocols[j];
>  			if (proto_id == RTE_PMD_I40E_PROTO_UNUSED) @@ -11133,54
> +11133,91 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev,
> uint8_t *pkg,
>  					continue;
>  				memset(name, 0, sizeof(name));
>  				strcpy(name, proto[n].name);
> -				if (!strncmp(name, "IPV4", 4) && !inner_ip) {
> +				if (!strncmp(name, "PPPOE", 5))
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L2_ETHER_PPPOE;
> +				else if (!strncmp(name, "OIPV4", 5)) {
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
> -					inner_ip = true;
> -				} else if (!strncmp(name, "IPV4FRAG", 8) &&
> -					   inner_ip) {
> +					in_tunnel = true;
> +				} else if (!strncmp(name, "IPV4", 4) &&
> +					   !in_tunnel)
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
> +				else if (!strncmp(name, "IPV4FRAG", 8) &&
> +					 in_tunnel) {
>  					ptype_mapping[i].sw_ptype |=
>  					    RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_FRAG;
>  				} else if (!strncmp(name, "IPV4", 4) &&
> -					   inner_ip)
> +					   in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  					    RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
> -				else if (!strncmp(name, "IPV6", 4) &&
> -					 !inner_ip) {
> +				else if (!strncmp(name, "OIPV6", 5)) {
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
> +					in_tunnel = true;
> +				} else if (!strncmp(name, "IPV6", 4) &&
> +					   !in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
> -					inner_ip = true;
> -				} else if (!strncmp(name, "IPV6FRAG", 8) &&
> -					   inner_ip) {
> +				else if (!strncmp(name, "IPV6FRAG", 8) &&
> +					 in_tunnel) {
>  					ptype_mapping[i].sw_ptype |=
>  					    RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_FRAG;
>  				} else if (!strncmp(name, "IPV6", 4) &&
> -					   inner_ip)
> +					   in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  					    RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
> -				else if (!strncmp(name, "GTPC", 4))
> +				else if (!strncmp(name, "UDP", 3) && !in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
> -						RTE_PTYPE_TUNNEL_GTPC;
> -				else if (!strncmp(name, "GTPU", 4))
> -					ptype_mapping[i].sw_ptype |=
> -						RTE_PTYPE_TUNNEL_GTPU;
> -				else if (!strncmp(name, "UDP", 3))
> +						RTE_PTYPE_L4_UDP;
> +				else if (!strncmp(name, "UDP", 3) && in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_UDP;
> -				else if (!strncmp(name, "TCP", 3))
> +				else if (!strncmp(name, "TCP", 3) && !in_tunnel)
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L4_TCP;
> +				else if (!strncmp(name, "TCP", 3) && in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_TCP;
> -				else if (!strncmp(name, "SCTP", 4))
> +				else if (!strncmp(name, "SCTP", 4) &&
> +					 !in_tunnel)
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L4_SCTP;
> +				else if (!strncmp(name, "SCTP", 4) && in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_SCTP;
> -				else if (!strncmp(name, "ICMP", 4) ||
> -					 !strncmp(name, "ICMPV6", 6))
> +				else if ((!strncmp(name, "ICMP", 4) ||
> +					  !strncmp(name, "ICMPV6", 6)) &&
> +					 !in_tunnel)
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L4_ICMP;
> +				else if ((!strncmp(name, "ICMP", 4) ||
> +					  !strncmp(name, "ICMPV6", 6)) &&
> +					 in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_ICMP;
> +				else if (!strncmp(name, "GTPC", 4)) {
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_TUNNEL_GTPC;
> +					in_tunnel = true;
> +				} else if (!strncmp(name, "GTPU", 4)) {
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_TUNNEL_GTPU;
> +					in_tunnel = true;
> +				} else if (!strncmp(name, "GRENAT", 6)) {
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_TUNNEL_GRENAT;
> +					in_tunnel = true;
> +				} else if (!strncmp(name, "L2TPv2CTL", 9)) {
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_TUNNEL_L2TP;
> +					in_tunnel = true;
> +				}
> 
>  				break;
>  			}
> --
> 2.5.5

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types
  2017-12-20  8:22 ` [dpdk-dev] [PATCH v2 0/2] support PPPoE and L2TP packet types Beilei Xing
  2017-12-20  8:22   ` [dpdk-dev] [PATCH v2 1/2] mbuf: add " Beilei Xing
  2017-12-20  8:22   ` [dpdk-dev] [PATCH v2 2/2] net/i40e: support PPPoE and L2TP ptype parser Beilei Xing
@ 2018-01-04 10:46   ` Beilei Xing
  2018-01-04 10:46     ` [dpdk-dev] [PATCH v3 1/2] mbuf: add " Beilei Xing
                       ` (2 more replies)
  2 siblings, 3 replies; 15+ messages in thread
From: Beilei Xing @ 2018-01-04 10:46 UTC (permalink / raw)
  To: qi.z.zhang; +Cc: dev, jingjing.wu, andrey.chilikin

v3 changes:
 - reword commit log

v2 changes:
 - change patch title
 - rework ptype parser according to new profile meta data

Beilei Xing (2):
  mbuf: add PPPoE and L2TP packet types
  net/i40e: improve packet type parser

 drivers/net/i40e/i40e_ethdev.c   | 83 +++++++++++++++++++++++++++++-----------
 lib/librte_mbuf/rte_mbuf_ptype.c |  2 +
 lib/librte_mbuf/rte_mbuf_ptype.h | 26 +++++++++++++
 3 files changed, 88 insertions(+), 23 deletions(-)

-- 
2.5.5

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-dev] [PATCH v3 1/2] mbuf: add PPPoE and L2TP packet types
  2018-01-04 10:46   ` [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types Beilei Xing
@ 2018-01-04 10:46     ` Beilei Xing
  2018-01-04 10:46     ` [dpdk-dev] [PATCH v3 2/2] net/i40e: improve packet type parser Beilei Xing
  2018-01-07  9:16     ` [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types Zhang, Helin
  2 siblings, 0 replies; 15+ messages in thread
From: Beilei Xing @ 2018-01-04 10:46 UTC (permalink / raw)
  To: qi.z.zhang; +Cc: dev, jingjing.wu, andrey.chilikin

Add support of PPPoE and L2TP packet types.

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
---
 lib/librte_mbuf/rte_mbuf_ptype.c |  2 ++
 lib/librte_mbuf/rte_mbuf_ptype.h | 26 ++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/librte_mbuf/rte_mbuf_ptype.c
index a623226..e0f2a92 100644
--- a/lib/librte_mbuf/rte_mbuf_ptype.c
+++ b/lib/librte_mbuf/rte_mbuf_ptype.c
@@ -47,6 +47,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype)
 	case RTE_PTYPE_L2_ETHER_NSH: return "L2_ETHER_NSH";
 	case RTE_PTYPE_L2_ETHER_VLAN: return "L2_ETHER_VLAN";
 	case RTE_PTYPE_L2_ETHER_QINQ: return "L2_ETHER_QINQ";
+	case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE";
 	default: return "L2_UNKNOWN";
 	}
 }
@@ -92,6 +93,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t ptype)
 	case RTE_PTYPE_TUNNEL_GTPC: return "TUNNEL_GTPC";
 	case RTE_PTYPE_TUNNEL_GTPU: return "TUNNEL_GTPU";
 	case RTE_PTYPE_TUNNEL_ESP: return "TUNNEL_ESP";
+	case RTE_PTYPE_TUNNEL_L2TP: return "TUNNEL_L2TP";
 	default: return "TUNNEL_UNKNOWN";
 	}
 }
diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h
index 5c62435..256f024 100644
--- a/lib/librte_mbuf/rte_mbuf_ptype.h
+++ b/lib/librte_mbuf/rte_mbuf_ptype.h
@@ -153,6 +153,13 @@ extern "C" {
  */
 #define RTE_PTYPE_L2_ETHER_QINQ             0x00000007
 /**
+ * PPPOE packet type.
+ *
+ * Packet format:
+ * <'ether type'=[0x8863|0x8864]>
+ */
+#define RTE_PTYPE_L2_ETHER_PPPOE            0x00000008
+/**
  * Mask of layer 2 packet types.
  * It is used for outer packet for tunneling cases.
  */
@@ -426,6 +433,25 @@ extern "C" {
  */
 #define RTE_PTYPE_TUNNEL_ESP                0x00009000
 /**
+ * L2TP (Layer 2 Tunneling Protocol) tunnleing packet type.
+ *
+ * Packet format:
+ * <'ether type'=0x0800
+ * | 'version'=4, 'protocol'=17>
+ * | 'destination port'=1701>
+ * or,
+ * <'ether type'=0x86DD
+ * | 'version'=6, 'next header'=17
+ * | 'destination port'=1701>
+ * or,
+ * <'ether type'=0x0800
+ * | 'version'=4, 'protocol'=115>
+ * or,
+ * <'ether type'=0x86DD
+ * | 'version'=6, 'protocol'=115>
+ */
+#define RTE_PTYPE_TUNNEL_L2TP               0x0000a000
+/**
  * Mask of tunneling packet types.
  */
 #define RTE_PTYPE_TUNNEL_MASK               0x0000f000
-- 
2.5.5

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [dpdk-dev] [PATCH v3 2/2] net/i40e: improve packet type parser
  2018-01-04 10:46   ` [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types Beilei Xing
  2018-01-04 10:46     ` [dpdk-dev] [PATCH v3 1/2] mbuf: add " Beilei Xing
@ 2018-01-04 10:46     ` Beilei Xing
  2018-01-04 11:54       ` Zhang, Qi Z
  2018-01-07  9:16     ` [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types Zhang, Helin
  2 siblings, 1 reply; 15+ messages in thread
From: Beilei Xing @ 2018-01-04 10:46 UTC (permalink / raw)
  To: qi.z.zhang; +Cc: dev, jingjing.wu, andrey.chilikin

Add support for PPPoE and L2TP packet types parser.
Change parser as new metadata 'OIPV4' and 'OIPV6'
added in profile to distinguish outer IP and inner
IP.

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 83 ++++++++++++++++++++++++++++++------------
 1 file changed, 60 insertions(+), 23 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 811cc9f..c6f7ce7 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -11078,7 +11078,7 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
 	uint8_t proto_id;
 	char name[RTE_PMD_I40E_DDP_NAME_SIZE];
 	uint32_t i, j, n;
-	bool inner_ip;
+	bool in_tunnel;
 	int ret;
 
 	/* get information about new ptype num */
@@ -11123,7 +11123,7 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
 	for (i = 0; i < ptype_num; i++) {
 		ptype_mapping[i].hw_ptype = ptype[i].ptype_id;
 		ptype_mapping[i].sw_ptype = 0;
-		inner_ip = false;
+		in_tunnel = false;
 		for (j = 0; j < RTE_PMD_I40E_PROTO_NUM; j++) {
 			proto_id = ptype[i].protocols[j];
 			if (proto_id == RTE_PMD_I40E_PROTO_UNUSED)
@@ -11133,54 +11133,91 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
 					continue;
 				memset(name, 0, sizeof(name));
 				strcpy(name, proto[n].name);
-				if (!strncmp(name, "IPV4", 4) && !inner_ip) {
+				if (!strncmp(name, "PPPOE", 5))
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L2_ETHER_PPPOE;
+				else if (!strncmp(name, "OIPV4", 5)) {
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
-					inner_ip = true;
-				} else if (!strncmp(name, "IPV4FRAG", 8) &&
-					   inner_ip) {
+					in_tunnel = true;
+				} else if (!strncmp(name, "IPV4", 4) &&
+					   !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
+				else if (!strncmp(name, "IPV4FRAG", 8) &&
+					 in_tunnel) {
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_FRAG;
 				} else if (!strncmp(name, "IPV4", 4) &&
-					   inner_ip)
+					   in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
-				else if (!strncmp(name, "IPV6", 4) &&
-					 !inner_ip) {
+				else if (!strncmp(name, "OIPV6", 5)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
+					in_tunnel = true;
+				} else if (!strncmp(name, "IPV6", 4) &&
+					   !in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
-					inner_ip = true;
-				} else if (!strncmp(name, "IPV6FRAG", 8) &&
-					   inner_ip) {
+				else if (!strncmp(name, "IPV6FRAG", 8) &&
+					 in_tunnel) {
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_FRAG;
 				} else if (!strncmp(name, "IPV6", 4) &&
-					   inner_ip)
+					   in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 					    RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
-				else if (!strncmp(name, "GTPC", 4))
+				else if (!strncmp(name, "UDP", 3) && !in_tunnel)
 					ptype_mapping[i].sw_ptype |=
-						RTE_PTYPE_TUNNEL_GTPC;
-				else if (!strncmp(name, "GTPU", 4))
-					ptype_mapping[i].sw_ptype |=
-						RTE_PTYPE_TUNNEL_GTPU;
-				else if (!strncmp(name, "UDP", 3))
+						RTE_PTYPE_L4_UDP;
+				else if (!strncmp(name, "UDP", 3) && in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_UDP;
-				else if (!strncmp(name, "TCP", 3))
+				else if (!strncmp(name, "TCP", 3) && !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L4_TCP;
+				else if (!strncmp(name, "TCP", 3) && in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_TCP;
-				else if (!strncmp(name, "SCTP", 4))
+				else if (!strncmp(name, "SCTP", 4) &&
+					 !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L4_SCTP;
+				else if (!strncmp(name, "SCTP", 4) && in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_SCTP;
-				else if (!strncmp(name, "ICMP", 4) ||
-					 !strncmp(name, "ICMPV6", 6))
+				else if ((!strncmp(name, "ICMP", 4) ||
+					  !strncmp(name, "ICMPV6", 6)) &&
+					 !in_tunnel)
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_L4_ICMP;
+				else if ((!strncmp(name, "ICMP", 4) ||
+					  !strncmp(name, "ICMPV6", 6)) &&
+					 in_tunnel)
 					ptype_mapping[i].sw_ptype |=
 						RTE_PTYPE_INNER_L4_ICMP;
+				else if (!strncmp(name, "GTPC", 4)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_GTPC;
+					in_tunnel = true;
+				} else if (!strncmp(name, "GTPU", 4)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_GTPU;
+					in_tunnel = true;
+				} else if (!strncmp(name, "GRENAT", 6)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_GRENAT;
+					in_tunnel = true;
+				} else if (!strncmp(name, "L2TPv2CTL", 9)) {
+					ptype_mapping[i].sw_ptype |=
+						RTE_PTYPE_TUNNEL_L2TP;
+					in_tunnel = true;
+				}
 
 				break;
 			}
-- 
2.5.5

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH v3 2/2] net/i40e: improve packet type parser
  2018-01-04 10:46     ` [dpdk-dev] [PATCH v3 2/2] net/i40e: improve packet type parser Beilei Xing
@ 2018-01-04 11:54       ` Zhang, Qi Z
  0 siblings, 0 replies; 15+ messages in thread
From: Zhang, Qi Z @ 2018-01-04 11:54 UTC (permalink / raw)
  To: Xing, Beilei; +Cc: dev, Wu, Jingjing, Chilikin, Andrey



> -----Original Message-----
> From: Xing, Beilei
> Sent: Thursday, January 4, 2018 6:46 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>
> Cc: dev@dpdk.org; Wu, Jingjing <jingjing.wu@intel.com>; Chilikin, Andrey
> <andrey.chilikin@intel.com>
> Subject: [PATCH v3 2/2] net/i40e: improve packet type parser
> 
> Add support for PPPoE and L2TP packet types parser.
> Change parser as new metadata 'OIPV4' and 'OIPV6'
> added in profile to distinguish outer IP and inner IP.
> 
> Signed-off-by: Beilei Xing <beilei.xing@intel.com>
> ---
>  drivers/net/i40e/i40e_ethdev.c | 83
> ++++++++++++++++++++++++++++++------------
>  1 file changed, 60 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 811cc9f..c6f7ce7 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -11078,7 +11078,7 @@ i40e_update_customized_ptype(struct
> rte_eth_dev *dev, uint8_t *pkg,
>  	uint8_t proto_id;
>  	char name[RTE_PMD_I40E_DDP_NAME_SIZE];
>  	uint32_t i, j, n;
> -	bool inner_ip;
> +	bool in_tunnel;
>  	int ret;
> 
>  	/* get information about new ptype num */ @@ -11123,7 +11123,7 @@
> i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg,
>  	for (i = 0; i < ptype_num; i++) {
>  		ptype_mapping[i].hw_ptype = ptype[i].ptype_id;
>  		ptype_mapping[i].sw_ptype = 0;
> -		inner_ip = false;
> +		in_tunnel = false;
>  		for (j = 0; j < RTE_PMD_I40E_PROTO_NUM; j++) {
>  			proto_id = ptype[i].protocols[j];
>  			if (proto_id == RTE_PMD_I40E_PROTO_UNUSED) @@ -11133,54
> +11133,91 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev,
> uint8_t *pkg,
>  					continue;
>  				memset(name, 0, sizeof(name));
>  				strcpy(name, proto[n].name);
> -				if (!strncmp(name, "IPV4", 4) && !inner_ip) {
> +				if (!strncmp(name, "PPPOE", 5))
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L2_ETHER_PPPOE;
> +				else if (!strncmp(name, "OIPV4", 5)) {
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
> -					inner_ip = true;
> -				} else if (!strncmp(name, "IPV4FRAG", 8) &&
> -					   inner_ip) {
> +					in_tunnel = true;
> +				} else if (!strncmp(name, "IPV4", 4) &&
> +					   !in_tunnel)
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;
> +				else if (!strncmp(name, "IPV4FRAG", 8) &&
> +					 in_tunnel) {
>  					ptype_mapping[i].sw_ptype |=
>  					    RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_FRAG;
>  				} else if (!strncmp(name, "IPV4", 4) &&
> -					   inner_ip)
> +					   in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  					    RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;
> -				else if (!strncmp(name, "IPV6", 4) &&
> -					 !inner_ip) {
> +				else if (!strncmp(name, "OIPV6", 5)) {
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
> +					in_tunnel = true;
> +				} else if (!strncmp(name, "IPV6", 4) &&
> +					   !in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;
> -					inner_ip = true;
> -				} else if (!strncmp(name, "IPV6FRAG", 8) &&
> -					   inner_ip) {
> +				else if (!strncmp(name, "IPV6FRAG", 8) &&
> +					 in_tunnel) {
>  					ptype_mapping[i].sw_ptype |=
>  					    RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_FRAG;
>  				} else if (!strncmp(name, "IPV6", 4) &&
> -					   inner_ip)
> +					   in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  					    RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;
> -				else if (!strncmp(name, "GTPC", 4))
> +				else if (!strncmp(name, "UDP", 3) && !in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
> -						RTE_PTYPE_TUNNEL_GTPC;
> -				else if (!strncmp(name, "GTPU", 4))
> -					ptype_mapping[i].sw_ptype |=
> -						RTE_PTYPE_TUNNEL_GTPU;
> -				else if (!strncmp(name, "UDP", 3))
> +						RTE_PTYPE_L4_UDP;
> +				else if (!strncmp(name, "UDP", 3) && in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_UDP;
> -				else if (!strncmp(name, "TCP", 3))
> +				else if (!strncmp(name, "TCP", 3) && !in_tunnel)
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L4_TCP;
> +				else if (!strncmp(name, "TCP", 3) && in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_TCP;
> -				else if (!strncmp(name, "SCTP", 4))
> +				else if (!strncmp(name, "SCTP", 4) &&
> +					 !in_tunnel)
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L4_SCTP;
> +				else if (!strncmp(name, "SCTP", 4) && in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_SCTP;
> -				else if (!strncmp(name, "ICMP", 4) ||
> -					 !strncmp(name, "ICMPV6", 6))
> +				else if ((!strncmp(name, "ICMP", 4) ||
> +					  !strncmp(name, "ICMPV6", 6)) &&
> +					 !in_tunnel)
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_L4_ICMP;
> +				else if ((!strncmp(name, "ICMP", 4) ||
> +					  !strncmp(name, "ICMPV6", 6)) &&
> +					 in_tunnel)
>  					ptype_mapping[i].sw_ptype |=
>  						RTE_PTYPE_INNER_L4_ICMP;
> +				else if (!strncmp(name, "GTPC", 4)) {
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_TUNNEL_GTPC;
> +					in_tunnel = true;
> +				} else if (!strncmp(name, "GTPU", 4)) {
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_TUNNEL_GTPU;
> +					in_tunnel = true;
> +				} else if (!strncmp(name, "GRENAT", 6)) {
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_TUNNEL_GRENAT;
> +					in_tunnel = true;
> +				} else if (!strncmp(name, "L2TPv2CTL", 9)) {
> +					ptype_mapping[i].sw_ptype |=
> +						RTE_PTYPE_TUNNEL_L2TP;
> +					in_tunnel = true;
> +				}
> 
>  				break;
>  			}
> --
> 2.5.5


Acked-by: Qi Zhang <qi.z.zhang@intel.com>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types
  2018-01-04 10:46   ` [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types Beilei Xing
  2018-01-04 10:46     ` [dpdk-dev] [PATCH v3 1/2] mbuf: add " Beilei Xing
  2018-01-04 10:46     ` [dpdk-dev] [PATCH v3 2/2] net/i40e: improve packet type parser Beilei Xing
@ 2018-01-07  9:16     ` Zhang, Helin
  2 siblings, 0 replies; 15+ messages in thread
From: Zhang, Helin @ 2018-01-07  9:16 UTC (permalink / raw)
  To: Xing, Beilei, Zhang, Qi Z, Olivier Matz (olivier.matz@6wind.com); +Cc: dev



> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Beilei Xing
> Sent: Thursday, January 4, 2018 6:46 PM
> To: Zhang, Qi Z
> Cc: dev@dpdk.org; Wu, Jingjing; Chilikin, Andrey
> Subject: [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types
> 
> v3 changes:
>  - reword commit log
> 
> v2 changes:
>  - change patch title
>  - rework ptype parser according to new profile meta data
> 
> Beilei Xing (2):
>   mbuf: add PPPoE and L2TP packet types
>   net/i40e: improve packet type parser
> 
>  drivers/net/i40e/i40e_ethdev.c   | 83 +++++++++++++++++++++++++++++-----
> ------
>  lib/librte_mbuf/rte_mbuf_ptype.c |  2 +  lib/librte_mbuf/rte_mbuf_ptype.h
> | 26 +++++++++++++
>  3 files changed, 88 insertions(+), 23 deletions(-)
> 
> --
> 2.5.5
Applied into dpdk-next-net-intel. Thanks!

/Helin

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2018-01-07  9:16 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-28 10:12 [dpdk-dev] [PATCH 0/2] support PPPoE and L2TP in SW ptype parser Beilei Xing
2017-11-28 10:12 ` [dpdk-dev] [PATCH 1/2] mbuf: support PPPoE and L2TP in software packet type parser Beilei Xing
2017-12-19 10:11   ` Olivier MATZ
2017-12-20  3:13     ` Xing, Beilei
2017-11-28 10:12 ` [dpdk-dev] [PATCH 2/2] net/i40e: support PPPoE and L2TP in SW ptype parser function Beilei Xing
2017-12-20  8:22 ` [dpdk-dev] [PATCH v2 0/2] support PPPoE and L2TP packet types Beilei Xing
2017-12-20  8:22   ` [dpdk-dev] [PATCH v2 1/2] mbuf: add " Beilei Xing
2018-01-03 10:36     ` Olivier Matz
2017-12-20  8:22   ` [dpdk-dev] [PATCH v2 2/2] net/i40e: support PPPoE and L2TP ptype parser Beilei Xing
2018-01-04  8:43     ` Zhang, Qi Z
2018-01-04 10:46   ` [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types Beilei Xing
2018-01-04 10:46     ` [dpdk-dev] [PATCH v3 1/2] mbuf: add " Beilei Xing
2018-01-04 10:46     ` [dpdk-dev] [PATCH v3 2/2] net/i40e: improve packet type parser Beilei Xing
2018-01-04 11:54       ` Zhang, Qi Z
2018-01-07  9:16     ` [dpdk-dev] [PATCH v3 0/2] support PPPoE and L2TP packet types Zhang, Helin

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