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