* [dpdk-dev] [PATCH v1] mbuf: support eCPRI hardware packet type Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE. @ 2021-04-17 9:04 Lingyu Liu 2021-04-17 9:25 ` [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type Lingyu Liu 0 siblings, 1 reply; 12+ messages in thread From: Lingyu Liu @ 2021-04-17 9:04 UTC (permalink / raw) To: dev, qi.z.zhang, olivier.matz, thomas, david.marchand Cc: Lingyu Liu, Hemant Agrawal Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> --- app/test-pmd/util.c | 25 ++++++++++++++++--------- lib/librte_mbuf/rte_mbuf_ptype.c | 2 ++ lib/librte_mbuf/rte_mbuf_ptype.h | 22 ++++++++++++++++++++++ 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c index a9e431a8b2..494ebbf909 100644 --- a/app/test-pmd/util.c +++ b/app/test-pmd/util.c @@ -258,16 +258,23 @@ dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[], udp_hdr = rte_pktmbuf_mtod_offset(mb, struct rte_udp_hdr *, l2_len + l3_len); - l4_len = sizeof(struct rte_udp_hdr); - vxlan_hdr = rte_pktmbuf_mtod_offset(mb, - struct rte_vxlan_hdr *, - l2_len + l3_len + l4_len); udp_port = RTE_BE_TO_CPU_16(udp_hdr->dst_port); - vx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni); - MKDUMPSTR(print_buf, buf_size, cur_len, - " - VXLAN packet: packet type =%d, " - "Destination UDP port =%d, VNI = %d", - packet_type, udp_port, vx_vni >> 8); + l4_len = sizeof(struct rte_udp_hdr); + if (RTE_ETH_IS_ECPRI_HDR(packet_type)) { + MKDUMPSTR(print_buf, buf_size, cur_len, + " - eCPRI packet: packet type =%d, " + "Destination UDP port =%d", + packet_type, udp_port); + } else { + vxlan_hdr = rte_pktmbuf_mtod_offset(mb, + struct rte_vxlan_hdr *, + l2_len + l3_len + l4_len); + vx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni); + MKDUMPSTR(print_buf, buf_size, cur_len, + " - VXLAN packet: packet type =%d, " + "Destination UDP port =%d, VNI = %d", + packet_type, udp_port, vx_vni >> 8); + } } } MKDUMPSTR(print_buf, buf_size, cur_len, diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/librte_mbuf/rte_mbuf_ptype.c index d6f906b06c..2bf97c89c6 100644 --- a/lib/librte_mbuf/rte_mbuf_ptype.c +++ b/lib/librte_mbuf/rte_mbuf_ptype.c @@ -21,6 +21,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype) case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE"; case RTE_PTYPE_L2_ETHER_FCOE: return "L2_ETHER_FCOE"; case RTE_PTYPE_L2_ETHER_MPLS: return "L2_ETHER_MPLS"; + case RTE_PTYPE_L2_ETHER_ECPRI: return "L2_ETHER_ECPRI"; default: return "L2_UNKNOWN"; } } @@ -71,6 +72,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t ptype) case RTE_PTYPE_TUNNEL_VXLAN_GPE: return "TUNNEL_VXLAN_GPE"; case RTE_PTYPE_TUNNEL_MPLS_IN_UDP: return "TUNNEL_MPLS_IN_UDP"; case RTE_PTYPE_TUNNEL_MPLS_IN_GRE: return "TUNNEL_MPLS_IN_GRE"; + case RTE_PTYPE_TUNNEL_ECPRI: return "TUNNEL_ECPRI"; default: return "TUNNEL_UNKNOWN"; } } diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h index 17a2dd3576..5fdf369ac0 100644 --- a/lib/librte_mbuf/rte_mbuf_ptype.h +++ b/lib/librte_mbuf/rte_mbuf_ptype.h @@ -144,6 +144,13 @@ extern "C" { * <'ether type'=[0x8847|0x8848]> */ #define RTE_PTYPE_L2_ETHER_MPLS 0x0000000a +/** + * eCPRI (extend Common Public Radio Interface) packet type. + * + * Packet format: + * <'ether type'=[0xAEFE]> + */ +#define RTE_PTYPE_L2_ETHER_ECPRI 0x0000000b /** * Mask of layer 2 packet types. * It is used for outer packet for tunneling cases. @@ -491,6 +498,19 @@ extern "C" { * | 'destination port'=6635> */ #define RTE_PTYPE_TUNNEL_MPLS_IN_UDP 0x0000d000 +/** + * ECPRI packet type. + * + * Packet format: + * <'ether type'=0x0800 + * | 'version'=4, 'protocol'=17, + * | 'destination port'=5123> + * or, + * <'ether type'=0x86DD + * | 'version'=6, 'protocol'=17, + * | 'destination port'=5123> + */ +#define RTE_PTYPE_TUNNEL_ECPRI 0x0000e000 /** * Mask of tunneling packet types. */ @@ -688,6 +708,8 @@ extern "C" { RTE_PTYPE_INNER_L3_MASK | \ RTE_PTYPE_INNER_L4_MASK)) +/* Check if it is a ECPRI packet */ +#define RTE_ETH_IS_ECPRI_HDR(ptype) ((ptype) & RTE_PTYPE_TUNNEL_ECPRI) /** * Get the name of the l2 packet type * -- 2.25.1 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type 2021-04-17 9:04 [dpdk-dev] [PATCH v1] mbuf: support eCPRI hardware packet type Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE Lingyu Liu @ 2021-04-17 9:25 ` Lingyu Liu 2021-04-19 14:24 ` Olivier Matz 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 0/2] mbuf:add eCPRI hardware packet type mapping Lingyu Liu 0 siblings, 2 replies; 12+ messages in thread From: Lingyu Liu @ 2021-04-17 9:25 UTC (permalink / raw) To: dev, qi.z.zhang, olivier.matz, thomas, david.marchand Cc: Lingyu Liu, Hemant Agrawal Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE. Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> --- V2 change: - refine commit log app/test-pmd/util.c | 25 ++++++++++++++++--------- lib/librte_mbuf/rte_mbuf_ptype.c | 2 ++ lib/librte_mbuf/rte_mbuf_ptype.h | 22 ++++++++++++++++++++++ 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c index a9e431a8b2..494ebbf909 100644 --- a/app/test-pmd/util.c +++ b/app/test-pmd/util.c @@ -258,16 +258,23 @@ dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[], udp_hdr = rte_pktmbuf_mtod_offset(mb, struct rte_udp_hdr *, l2_len + l3_len); - l4_len = sizeof(struct rte_udp_hdr); - vxlan_hdr = rte_pktmbuf_mtod_offset(mb, - struct rte_vxlan_hdr *, - l2_len + l3_len + l4_len); udp_port = RTE_BE_TO_CPU_16(udp_hdr->dst_port); - vx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni); - MKDUMPSTR(print_buf, buf_size, cur_len, - " - VXLAN packet: packet type =%d, " - "Destination UDP port =%d, VNI = %d", - packet_type, udp_port, vx_vni >> 8); + l4_len = sizeof(struct rte_udp_hdr); + if (RTE_ETH_IS_ECPRI_HDR(packet_type)) { + MKDUMPSTR(print_buf, buf_size, cur_len, + " - eCPRI packet: packet type =%d, " + "Destination UDP port =%d", + packet_type, udp_port); + } else { + vxlan_hdr = rte_pktmbuf_mtod_offset(mb, + struct rte_vxlan_hdr *, + l2_len + l3_len + l4_len); + vx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni); + MKDUMPSTR(print_buf, buf_size, cur_len, + " - VXLAN packet: packet type =%d, " + "Destination UDP port =%d, VNI = %d", + packet_type, udp_port, vx_vni >> 8); + } } } MKDUMPSTR(print_buf, buf_size, cur_len, diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/librte_mbuf/rte_mbuf_ptype.c index d6f906b06c..2bf97c89c6 100644 --- a/lib/librte_mbuf/rte_mbuf_ptype.c +++ b/lib/librte_mbuf/rte_mbuf_ptype.c @@ -21,6 +21,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype) case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE"; case RTE_PTYPE_L2_ETHER_FCOE: return "L2_ETHER_FCOE"; case RTE_PTYPE_L2_ETHER_MPLS: return "L2_ETHER_MPLS"; + case RTE_PTYPE_L2_ETHER_ECPRI: return "L2_ETHER_ECPRI"; default: return "L2_UNKNOWN"; } } @@ -71,6 +72,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t ptype) case RTE_PTYPE_TUNNEL_VXLAN_GPE: return "TUNNEL_VXLAN_GPE"; case RTE_PTYPE_TUNNEL_MPLS_IN_UDP: return "TUNNEL_MPLS_IN_UDP"; case RTE_PTYPE_TUNNEL_MPLS_IN_GRE: return "TUNNEL_MPLS_IN_GRE"; + case RTE_PTYPE_TUNNEL_ECPRI: return "TUNNEL_ECPRI"; default: return "TUNNEL_UNKNOWN"; } } diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h index 17a2dd3576..5fdf369ac0 100644 --- a/lib/librte_mbuf/rte_mbuf_ptype.h +++ b/lib/librte_mbuf/rte_mbuf_ptype.h @@ -144,6 +144,13 @@ extern "C" { * <'ether type'=[0x8847|0x8848]> */ #define RTE_PTYPE_L2_ETHER_MPLS 0x0000000a +/** + * eCPRI (extend Common Public Radio Interface) packet type. + * + * Packet format: + * <'ether type'=[0xAEFE]> + */ +#define RTE_PTYPE_L2_ETHER_ECPRI 0x0000000b /** * Mask of layer 2 packet types. * It is used for outer packet for tunneling cases. @@ -491,6 +498,19 @@ extern "C" { * | 'destination port'=6635> */ #define RTE_PTYPE_TUNNEL_MPLS_IN_UDP 0x0000d000 +/** + * ECPRI packet type. + * + * Packet format: + * <'ether type'=0x0800 + * | 'version'=4, 'protocol'=17, + * | 'destination port'=5123> + * or, + * <'ether type'=0x86DD + * | 'version'=6, 'protocol'=17, + * | 'destination port'=5123> + */ +#define RTE_PTYPE_TUNNEL_ECPRI 0x0000e000 /** * Mask of tunneling packet types. */ @@ -688,6 +708,8 @@ extern "C" { RTE_PTYPE_INNER_L3_MASK | \ RTE_PTYPE_INNER_L4_MASK)) +/* Check if it is a ECPRI packet */ +#define RTE_ETH_IS_ECPRI_HDR(ptype) ((ptype) & RTE_PTYPE_TUNNEL_ECPRI) /** * Get the name of the l2 packet type * -- 2.25.1 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type 2021-04-17 9:25 ` [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type Lingyu Liu @ 2021-04-19 14:24 ` Olivier Matz 2021-04-20 2:17 ` Liu, Lingyu 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 0/2] mbuf:add eCPRI hardware packet type mapping Lingyu Liu 1 sibling, 1 reply; 12+ messages in thread From: Olivier Matz @ 2021-04-19 14:24 UTC (permalink / raw) To: Lingyu Liu; +Cc: dev, qi.z.zhang, thomas, david.marchand, Hemant Agrawal Hi Lingyu, On Sat, Apr 17, 2021 at 09:25:31AM +0000, Lingyu Liu wrote: > Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE. > > Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> > Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> The number of available packet types for tunnels is quite low (already mentionned in this thread [1]). [1] https://patches.dpdk.org/project/dpdk/patch/20210408081720.23314-3-ktejasree@marvell.com Can you give some details about how it will be used? For instance, which driver will set it, which kind of application will use it. Thanks, Olivier > --- > V2 change: > - refine commit log > > app/test-pmd/util.c | 25 ++++++++++++++++--------- > lib/librte_mbuf/rte_mbuf_ptype.c | 2 ++ > lib/librte_mbuf/rte_mbuf_ptype.h | 22 ++++++++++++++++++++++ > 3 files changed, 40 insertions(+), 9 deletions(-) > > diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c > index a9e431a8b2..494ebbf909 100644 > --- a/app/test-pmd/util.c > +++ b/app/test-pmd/util.c > @@ -258,16 +258,23 @@ dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[], > udp_hdr = rte_pktmbuf_mtod_offset(mb, > struct rte_udp_hdr *, > l2_len + l3_len); > - l4_len = sizeof(struct rte_udp_hdr); > - vxlan_hdr = rte_pktmbuf_mtod_offset(mb, > - struct rte_vxlan_hdr *, > - l2_len + l3_len + l4_len); > udp_port = RTE_BE_TO_CPU_16(udp_hdr->dst_port); > - vx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni); > - MKDUMPSTR(print_buf, buf_size, cur_len, > - " - VXLAN packet: packet type =%d, " > - "Destination UDP port =%d, VNI = %d", > - packet_type, udp_port, vx_vni >> 8); > + l4_len = sizeof(struct rte_udp_hdr); > + if (RTE_ETH_IS_ECPRI_HDR(packet_type)) { > + MKDUMPSTR(print_buf, buf_size, cur_len, > + " - eCPRI packet: packet type =%d, " > + "Destination UDP port =%d", > + packet_type, udp_port); > + } else { > + vxlan_hdr = rte_pktmbuf_mtod_offset(mb, > + struct rte_vxlan_hdr *, > + l2_len + l3_len + l4_len); > + vx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni); > + MKDUMPSTR(print_buf, buf_size, cur_len, > + " - VXLAN packet: packet type =%d, " > + "Destination UDP port =%d, VNI = %d", > + packet_type, udp_port, vx_vni >> 8); > + } > } > } > MKDUMPSTR(print_buf, buf_size, cur_len, > diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/librte_mbuf/rte_mbuf_ptype.c > index d6f906b06c..2bf97c89c6 100644 > --- a/lib/librte_mbuf/rte_mbuf_ptype.c > +++ b/lib/librte_mbuf/rte_mbuf_ptype.c > @@ -21,6 +21,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype) > case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE"; > case RTE_PTYPE_L2_ETHER_FCOE: return "L2_ETHER_FCOE"; > case RTE_PTYPE_L2_ETHER_MPLS: return "L2_ETHER_MPLS"; > + case RTE_PTYPE_L2_ETHER_ECPRI: return "L2_ETHER_ECPRI"; > default: return "L2_UNKNOWN"; > } > } > @@ -71,6 +72,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t ptype) > case RTE_PTYPE_TUNNEL_VXLAN_GPE: return "TUNNEL_VXLAN_GPE"; > case RTE_PTYPE_TUNNEL_MPLS_IN_UDP: return "TUNNEL_MPLS_IN_UDP"; > case RTE_PTYPE_TUNNEL_MPLS_IN_GRE: return "TUNNEL_MPLS_IN_GRE"; > + case RTE_PTYPE_TUNNEL_ECPRI: return "TUNNEL_ECPRI"; > default: return "TUNNEL_UNKNOWN"; > } > } > diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h > index 17a2dd3576..5fdf369ac0 100644 > --- a/lib/librte_mbuf/rte_mbuf_ptype.h > +++ b/lib/librte_mbuf/rte_mbuf_ptype.h > @@ -144,6 +144,13 @@ extern "C" { > * <'ether type'=[0x8847|0x8848]> > */ > #define RTE_PTYPE_L2_ETHER_MPLS 0x0000000a > +/** > + * eCPRI (extend Common Public Radio Interface) packet type. > + * > + * Packet format: > + * <'ether type'=[0xAEFE]> > + */ > +#define RTE_PTYPE_L2_ETHER_ECPRI 0x0000000b > /** > * Mask of layer 2 packet types. > * It is used for outer packet for tunneling cases. > @@ -491,6 +498,19 @@ extern "C" { > * | 'destination port'=6635> > */ > #define RTE_PTYPE_TUNNEL_MPLS_IN_UDP 0x0000d000 > +/** > + * ECPRI packet type. > + * > + * Packet format: > + * <'ether type'=0x0800 > + * | 'version'=4, 'protocol'=17, > + * | 'destination port'=5123> > + * or, > + * <'ether type'=0x86DD > + * | 'version'=6, 'protocol'=17, > + * | 'destination port'=5123> > + */ > +#define RTE_PTYPE_TUNNEL_ECPRI 0x0000e000 > /** > * Mask of tunneling packet types. > */ > @@ -688,6 +708,8 @@ extern "C" { > RTE_PTYPE_INNER_L3_MASK | \ > RTE_PTYPE_INNER_L4_MASK)) > > +/* Check if it is a ECPRI packet */ > +#define RTE_ETH_IS_ECPRI_HDR(ptype) ((ptype) & RTE_PTYPE_TUNNEL_ECPRI) > /** > * Get the name of the l2 packet type > * > -- > 2.25.1 > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type 2021-04-19 14:24 ` Olivier Matz @ 2021-04-20 2:17 ` Liu, Lingyu 2021-04-20 7:51 ` Thomas Monjalon 2021-04-20 13:01 ` Bing Zhao 0 siblings, 2 replies; 12+ messages in thread From: Liu, Lingyu @ 2021-04-20 2:17 UTC (permalink / raw) To: Olivier Matz; +Cc: dev, Zhang, Qi Z, thomas, david.marchand, Hemant Agrawal Hi Olivier, This new packet type will be used by iavf driver to map ECPRI hardware packet. This is the patch which will use this new hardware packet type. http://patchwork.dpdk.org/project/dpdk/patch/20210420083817.10741-3-lingyu.liu@intel.com/ Best Regards, Lingyu Liu > -----Original Message----- > From: Olivier Matz <olivier.matz@6wind.com> > Sent: Monday, April 19, 2021 10:25 PM > To: Liu, Lingyu <lingyu.liu@intel.com> > Cc: dev@dpdk.org; Zhang, Qi Z <qi.z.zhang@intel.com>; > thomas@monjalon.net; david.marchand@redhat.com; Hemant Agrawal > <hemant.agrawal@nxp.com> > Subject: Re: [PATCH v2] mbuf: support eCPRI hardware packet type > > Hi Lingyu, > > On Sat, Apr 17, 2021 at 09:25:31AM +0000, Lingyu Liu wrote: > > Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE. > > > > Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> > > Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> > > The number of available packet types for tunnels is quite low (already > mentionned in this thread [1]). > > [1] https://patches.dpdk.org/project/dpdk/patch/20210408081720.23314-3- > ktejasree@marvell.com > > Can you give some details about how it will be used? For instance, which > driver will set it, which kind of application will use it. > > Thanks, > Olivier > > > --- > > V2 change: > > - refine commit log > > > > app/test-pmd/util.c | 25 ++++++++++++++++--------- > > lib/librte_mbuf/rte_mbuf_ptype.c | 2 ++ > > lib/librte_mbuf/rte_mbuf_ptype.h | 22 ++++++++++++++++++++++ > > 3 files changed, 40 insertions(+), 9 deletions(-) > > > > diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c index > > a9e431a8b2..494ebbf909 100644 > > --- a/app/test-pmd/util.c > > +++ b/app/test-pmd/util.c > > @@ -258,16 +258,23 @@ dump_pkt_burst(uint16_t port_id, uint16_t > queue, struct rte_mbuf *pkts[], > > udp_hdr = rte_pktmbuf_mtod_offset(mb, > > struct rte_udp_hdr *, > > l2_len + l3_len); > > - l4_len = sizeof(struct rte_udp_hdr); > > - vxlan_hdr = rte_pktmbuf_mtod_offset(mb, > > - struct rte_vxlan_hdr *, > > - l2_len + l3_len + l4_len); > > udp_port = RTE_BE_TO_CPU_16(udp_hdr- > >dst_port); > > - vx_vni = rte_be_to_cpu_32(vxlan_hdr- > >vx_vni); > > - MKDUMPSTR(print_buf, buf_size, cur_len, > > - " - VXLAN packet: packet type =%d, " > > - "Destination UDP port =%d, VNI > = %d", > > - packet_type, udp_port, vx_vni >> 8); > > + l4_len = sizeof(struct rte_udp_hdr); > > + if (RTE_ETH_IS_ECPRI_HDR(packet_type)) { > > + MKDUMPSTR(print_buf, buf_size, > cur_len, > > + " - eCPRI packet: packet type > =%d, " > > + "Destination UDP port =%d", > > + packet_type, udp_port); > > + } else { > > + vxlan_hdr = > rte_pktmbuf_mtod_offset(mb, > > + struct rte_vxlan_hdr *, > > + l2_len + l3_len + l4_len); > > + vx_vni = > rte_be_to_cpu_32(vxlan_hdr->vx_vni); > > + MKDUMPSTR(print_buf, buf_size, > cur_len, > > + " - VXLAN packet: packet > type =%d, " > > + "Destination UDP port =%d, > VNI = %d", > > + packet_type, udp_port, > vx_vni >> 8); > > + } > > } > > } > > MKDUMPSTR(print_buf, buf_size, cur_len, diff --git > > a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/librte_mbuf/rte_mbuf_ptype.c > > index d6f906b06c..2bf97c89c6 100644 > > --- a/lib/librte_mbuf/rte_mbuf_ptype.c > > +++ b/lib/librte_mbuf/rte_mbuf_ptype.c > > @@ -21,6 +21,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype) > > case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE"; > > case RTE_PTYPE_L2_ETHER_FCOE: return "L2_ETHER_FCOE"; > > case RTE_PTYPE_L2_ETHER_MPLS: return "L2_ETHER_MPLS"; > > + case RTE_PTYPE_L2_ETHER_ECPRI: return "L2_ETHER_ECPRI"; > > default: return "L2_UNKNOWN"; > > } > > } > > @@ -71,6 +72,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t > ptype) > > case RTE_PTYPE_TUNNEL_VXLAN_GPE: return "TUNNEL_VXLAN_GPE"; > > case RTE_PTYPE_TUNNEL_MPLS_IN_UDP: return > "TUNNEL_MPLS_IN_UDP"; > > case RTE_PTYPE_TUNNEL_MPLS_IN_GRE: return > "TUNNEL_MPLS_IN_GRE"; > > + case RTE_PTYPE_TUNNEL_ECPRI: return "TUNNEL_ECPRI"; > > default: return "TUNNEL_UNKNOWN"; > > } > > } > > diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h > > b/lib/librte_mbuf/rte_mbuf_ptype.h > > index 17a2dd3576..5fdf369ac0 100644 > > --- a/lib/librte_mbuf/rte_mbuf_ptype.h > > +++ b/lib/librte_mbuf/rte_mbuf_ptype.h > > @@ -144,6 +144,13 @@ extern "C" { > > * <'ether type'=[0x8847|0x8848]> > > */ > > #define RTE_PTYPE_L2_ETHER_MPLS 0x0000000a > > +/** > > + * eCPRI (extend Common Public Radio Interface) packet type. > > + * > > + * Packet format: > > + * <'ether type'=[0xAEFE]> > > + */ > > +#define RTE_PTYPE_L2_ETHER_ECPRI 0x0000000b > > /** > > * Mask of layer 2 packet types. > > * It is used for outer packet for tunneling cases. > > @@ -491,6 +498,19 @@ extern "C" { > > * | 'destination port'=6635> > > */ > > #define RTE_PTYPE_TUNNEL_MPLS_IN_UDP 0x0000d000 > > +/** > > + * ECPRI packet type. > > + * > > + * Packet format: > > + * <'ether type'=0x0800 > > + * | 'version'=4, 'protocol'=17, > > + * | 'destination port'=5123> > > + * or, > > + * <'ether type'=0x86DD > > + * | 'version'=6, 'protocol'=17, > > + * | 'destination port'=5123> > > + */ > > +#define RTE_PTYPE_TUNNEL_ECPRI 0x0000e000 > > /** > > * Mask of tunneling packet types. > > */ > > @@ -688,6 +708,8 @@ extern "C" { > > RTE_PTYPE_INNER_L3_MASK | \ > > RTE_PTYPE_INNER_L4_MASK)) > > > > +/* Check if it is a ECPRI packet */ > > +#define RTE_ETH_IS_ECPRI_HDR(ptype) ((ptype) & > > +RTE_PTYPE_TUNNEL_ECPRI) > > /** > > * Get the name of the l2 packet type > > * > > -- > > 2.25.1 > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type 2021-04-20 2:17 ` Liu, Lingyu @ 2021-04-20 7:51 ` Thomas Monjalon 2021-04-20 10:06 ` Andrew Rybchenko 2021-04-22 11:09 ` Liu, Lingyu 2021-04-20 13:01 ` Bing Zhao 1 sibling, 2 replies; 12+ messages in thread From: Thomas Monjalon @ 2021-04-20 7:51 UTC (permalink / raw) To: Liu, Lingyu Cc: Olivier Matz, dev, Zhang, Qi Z, david.marchand, Hemant Agrawal 20/04/2021 04:17, Liu, Lingyu: > Hi Olivier, > > This new packet type will be used by iavf driver to map ECPRI hardware packet. > This is the patch which will use this new hardware packet type. > http://patchwork.dpdk.org/project/dpdk/patch/20210420083817.10741-3-lingyu.liu@intel.com/ I think it does not reply Olivier's question about how it will be used. Why is it important to report this packet type in mbuf? PS: please do not top-post > > From: Olivier Matz <olivier.matz@6wind.com> > > > > Hi Lingyu, > > > > On Sat, Apr 17, 2021 at 09:25:31AM +0000, Lingyu Liu wrote: > > > Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE. > > > > > > Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> > > > Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> > > > > The number of available packet types for tunnels is quite low (already > > mentionned in this thread [1]). > > > > [1] https://patches.dpdk.org/project/dpdk/patch/20210408081720.23314-3- > > ktejasree@marvell.com > > > > Can you give some details about how it will be used? For instance, which > > driver will set it, which kind of application will use it. > > > > Thanks, > > Olivier ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type 2021-04-20 7:51 ` Thomas Monjalon @ 2021-04-20 10:06 ` Andrew Rybchenko 2021-04-22 11:09 ` Liu, Lingyu 1 sibling, 0 replies; 12+ messages in thread From: Andrew Rybchenko @ 2021-04-20 10:06 UTC (permalink / raw) To: Thomas Monjalon, Liu, Lingyu Cc: Olivier Matz, dev, Zhang, Qi Z, david.marchand, Hemant Agrawal On 4/20/21 10:51 AM, Thomas Monjalon wrote: > 20/04/2021 04:17, Liu, Lingyu: >> Hi Olivier, >> >> This new packet type will be used by iavf driver to map ECPRI hardware packet. >> This is the patch which will use this new hardware packet type. >> http://patchwork.dpdk.org/project/dpdk/patch/20210420083817.10741-3-lingyu.liu@intel.com/ > > I think it does not reply Olivier's question about how it will be used. > Why is it important to report this packet type in mbuf? +1 > PS: please do not top-post > > >>> From: Olivier Matz <olivier.matz@6wind.com> >>> >>> Hi Lingyu, >>> >>> On Sat, Apr 17, 2021 at 09:25:31AM +0000, Lingyu Liu wrote: >>>> Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE. >>>> >>>> Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> >>>> Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> >>> >>> The number of available packet types for tunnels is quite low (already >>> mentionned in this thread [1]). >>> >>> [1] https://patches.dpdk.org/project/dpdk/patch/20210408081720.23314-3- >>> ktejasree@marvell.com >>> >>> Can you give some details about how it will be used? For instance, which >>> driver will set it, which kind of application will use it. >>> >>> Thanks, >>> Olivier > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type 2021-04-20 7:51 ` Thomas Monjalon 2021-04-20 10:06 ` Andrew Rybchenko @ 2021-04-22 11:09 ` Liu, Lingyu 1 sibling, 0 replies; 12+ messages in thread From: Liu, Lingyu @ 2021-04-22 11:09 UTC (permalink / raw) To: Thomas Monjalon Cc: Olivier Matz, dev, Zhang, Qi Z, david.marchand, Hemant Agrawal > 20/04/2021 04:17, Liu, Lingyu: > > Hi Olivier, > > > > This new packet type will be used by iavf driver to map ECPRI hardware > packet. > > This is the patch which will use this new hardware packet type. > > http://patchwork.dpdk.org/project/dpdk/patch/20210420083817.10741-3- > li > > ngyu.liu@intel.com/ > > I think it does not reply Olivier's question about how it will be used. > Why is it important to report this packet type in mbuf? > > PS: please do not top-post > In current implementation(w/o this patch), when receiving a eCPRI packet, testpmd prints like this: "port 2/queue 0: received 1 packets src=00:00:00:00:00:00 - dst=00:11:22:33:44:77 - type=0x0800 - length=60 - nb_segs=1 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_UDP - sw ptype: L2_ETHER L3_IPV4 L4_UDP - l2_len=14 - l3_len=20 - l4_len=8 - Receive queue=0x0 ol_flags: PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN" We can't know the hw ptype. After adding this patch, when receiving an eCPRI packet, testpmd can print like this: " port 1/queue 0: received 1 packets src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x0800 - length=60 - nb_segs=1 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_UDP TUNNEL_ECPRI - sw ptype: L2_ETHER L3_IPV4 L4_UDP - l2_len=14 - l3_len=20 - l4_len=8 - ECPRI packet: packet type =58001, Destination UDP port =20771 - Receive queue=0x0 ol_flags: PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN " Then apps can recognize the packet type using hw ptype. This supports more complete packet types and protocols. > > > > From: Olivier Matz <olivier.matz@6wind.com> > > > > > > Hi Lingyu, > > > > > > On Sat, Apr 17, 2021 at 09:25:31AM +0000, Lingyu Liu wrote: > > > > Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE. > > > > > > > > Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> > > > > Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> > > > > > > The number of available packet types for tunnels is quite low > > > (already mentionned in this thread [1]). > > > > > > [1] > > > https://patches.dpdk.org/project/dpdk/patch/20210408081720.23314-3- > > > ktejasree@marvell.com > > > > > > Can you give some details about how it will be used? For instance, > > > which driver will set it, which kind of application will use it. > > > > > > Thanks, > > > Olivier > > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type 2021-04-20 2:17 ` Liu, Lingyu 2021-04-20 7:51 ` Thomas Monjalon @ 2021-04-20 13:01 ` Bing Zhao 1 sibling, 0 replies; 12+ messages in thread From: Bing Zhao @ 2021-04-20 13:01 UTC (permalink / raw) To: Liu, Lingyu, Olivier Matz Cc: dev, Zhang, Qi Z, NBU-Contact-Thomas Monjalon, david.marchand, Hemant Agrawal Hi Lingyu, > -----Original Message----- > From: dev <dev-bounces@dpdk.org> On Behalf Of Liu, Lingyu > Sent: Tuesday, April 20, 2021 10:17 AM > To: Olivier Matz <olivier.matz@6wind.com> > Cc: dev@dpdk.org; Zhang, Qi Z <qi.z.zhang@intel.com>; NBU-Contact- > Thomas Monjalon <thomas@monjalon.net>; david.marchand@redhat.com; > Hemant Agrawal <hemant.agrawal@nxp.com> > Subject: Re: [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware > packet type > > External email: Use caution opening links or attachments > > > Hi Olivier, > > This new packet type will be used by iavf driver to map ECPRI > hardware packet. > This is the patch which will use this new hardware packet type. > http://patchwork.dpdk.org/project/dpdk/patch/20210420083817.10741-3- > lingyu.liu@intel.com/ > > > > Best Regards, > > Lingyu Liu > > > -----Original Message----- > > From: Olivier Matz <olivier.matz@6wind.com> > > Sent: Monday, April 19, 2021 10:25 PM > > To: Liu, Lingyu <lingyu.liu@intel.com> > > Cc: dev@dpdk.org; Zhang, Qi Z <qi.z.zhang@intel.com>; > > thomas@monjalon.net; david.marchand@redhat.com; Hemant Agrawal > > <hemant.agrawal@nxp.com> > > Subject: Re: [PATCH v2] mbuf: support eCPRI hardware packet type > > > > Hi Lingyu, > > > > On Sat, Apr 17, 2021 at 09:25:31AM +0000, Lingyu Liu wrote: > > > Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE. > > > > > > Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> > > > Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> > > > > The number of available packet types for tunnels is quite low > (already > > mentionned in this thread [1]). > > > > [1] > > https://patches.dpdk.org/project/dpdk/patch/20210408081720.23314- > 3- > > ktejasree@marvell.com > > > > Can you give some details about how it will be used? For instance, > > which driver will set it, which kind of application will use it. > > > > Thanks, > > Olivier > > > > > --- > > > V2 change: > > > - refine commit log > > > > > > app/test-pmd/util.c | 25 ++++++++++++++++--------- > > > lib/librte_mbuf/rte_mbuf_ptype.c | 2 ++ > > > lib/librte_mbuf/rte_mbuf_ptype.h | 22 ++++++++++++++++++++++ > > > 3 files changed, 40 insertions(+), 9 deletions(-) > > > > > > diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c index > > > a9e431a8b2..494ebbf909 100644 > > > --- a/app/test-pmd/util.c > > > +++ b/app/test-pmd/util.c > > > @@ -258,16 +258,23 @@ dump_pkt_burst(uint16_t port_id, uint16_t > > queue, struct rte_mbuf *pkts[], > > > udp_hdr = rte_pktmbuf_mtod_offset(mb, > > > struct rte_udp_hdr *, > > > l2_len + l3_len); > > > - l4_len = sizeof(struct rte_udp_hdr); > > > - vxlan_hdr = > rte_pktmbuf_mtod_offset(mb, > > > - struct rte_vxlan_hdr *, > > > - l2_len + l3_len + l4_len); > > > udp_port = RTE_BE_TO_CPU_16(udp_hdr- > > >dst_port); > > > - vx_vni = rte_be_to_cpu_32(vxlan_hdr- > > >vx_vni); > > > - MKDUMPSTR(print_buf, buf_size, > cur_len, > > > - " - VXLAN packet: packet > type =%d, " > > > - "Destination UDP port =%d, > VNI > > = %d", > > > - packet_type, udp_port, > vx_vni >> 8); > > > + l4_len = sizeof(struct rte_udp_hdr); > > > + if > (RTE_ETH_IS_ECPRI_HDR(packet_type)) { > > > + MKDUMPSTR(print_buf, > buf_size, > > cur_len, > > > + " - eCPRI packet: > > > + packet type > > =%d, " > > > + "Destination UDP > port =%d", > > > + packet_type, > udp_port); > > > + } else { > > > + vxlan_hdr = > > rte_pktmbuf_mtod_offset(mb, > > > + struct rte_vxlan_hdr *, > > > + l2_len + l3_len + l4_len); > > > + vx_vni = > > rte_be_to_cpu_32(vxlan_hdr->vx_vni); > > > + MKDUMPSTR(print_buf, > buf_size, > > cur_len, > > > + " - VXLAN packet: > > > + packet > > type =%d, " > > > + "Destination UDP > port > > > + =%d, > > VNI = %d", > > > + packet_type, > udp_port, > > vx_vni >> 8); > > > + } > > > } > > > } > > > MKDUMPSTR(print_buf, buf_size, cur_len, diff --git > > > a/lib/librte_mbuf/rte_mbuf_ptype.c > > > b/lib/librte_mbuf/rte_mbuf_ptype.c > > > index d6f906b06c..2bf97c89c6 100644 > > > --- a/lib/librte_mbuf/rte_mbuf_ptype.c > > > +++ b/lib/librte_mbuf/rte_mbuf_ptype.c > > > @@ -21,6 +21,7 @@ const char *rte_get_ptype_l2_name(uint32_t > ptype) > > > case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE"; > > > case RTE_PTYPE_L2_ETHER_FCOE: return "L2_ETHER_FCOE"; > > > case RTE_PTYPE_L2_ETHER_MPLS: return "L2_ETHER_MPLS"; > > > + case RTE_PTYPE_L2_ETHER_ECPRI: return "L2_ETHER_ECPRI"; > > > default: return "L2_UNKNOWN"; > > > } > > > } > > > @@ -71,6 +72,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t > > ptype) > > > case RTE_PTYPE_TUNNEL_VXLAN_GPE: return "TUNNEL_VXLAN_GPE"; > > > case RTE_PTYPE_TUNNEL_MPLS_IN_UDP: return > > "TUNNEL_MPLS_IN_UDP"; > > > case RTE_PTYPE_TUNNEL_MPLS_IN_GRE: return > > "TUNNEL_MPLS_IN_GRE"; > > > + case RTE_PTYPE_TUNNEL_ECPRI: return "TUNNEL_ECPRI"; > > > default: return "TUNNEL_UNKNOWN"; > > > } > > > } > > > diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h > > > b/lib/librte_mbuf/rte_mbuf_ptype.h > > > index 17a2dd3576..5fdf369ac0 100644 > > > --- a/lib/librte_mbuf/rte_mbuf_ptype.h > > > +++ b/lib/librte_mbuf/rte_mbuf_ptype.h > > > @@ -144,6 +144,13 @@ extern "C" { > > > * <'ether type'=[0x8847|0x8848]> > > > */ > > > #define RTE_PTYPE_L2_ETHER_MPLS 0x0000000a > > > +/** > > > + * eCPRI (extend Common Public Radio Interface) packet type. > > > + * > > > + * Packet format: > > > + * <'ether type'=[0xAEFE]> > > > + */ > > > +#define RTE_PTYPE_L2_ETHER_ECPRI 0x0000000b > > > /** > > > * Mask of layer 2 packet types. > > > * It is used for outer packet for tunneling cases. > > > @@ -491,6 +498,19 @@ extern "C" { > > > * | 'destination port'=6635> > > > */ > > > #define RTE_PTYPE_TUNNEL_MPLS_IN_UDP 0x0000d000 > > > +/** > > > + * ECPRI packet type. > > > + * > > > + * Packet format: > > > + * <'ether type'=0x0800 > > > + * | 'version'=4, 'protocol'=17, > > > + * | 'destination port'=5123> > > > + * or, > > > + * <'ether type'=0x86DD > > > + * | 'version'=6, 'protocol'=17, > > > + * | 'destination port'=5123> > > > + */ > > > +#define RTE_PTYPE_TUNNEL_ECPRI 0x0000e000 Could you help to point out in which specification or other documentation that the destination port is specified? I couldn't find it. eCPRI over UDP is supported in O-RAN standards, marked as "optional" in the specs. Are the destination ports are specified during initialization but not a fixed value with 5123? > > > /** > > > * Mask of tunneling packet types. > > > */ > > > @@ -688,6 +708,8 @@ extern "C" { > > > RTE_PTYPE_INNER_L3_MASK | > \ > > > RTE_PTYPE_INNER_L4_MASK)) > > > > > > +/* Check if it is a ECPRI packet */ #define > > > +RTE_ETH_IS_ECPRI_HDR(ptype) ((ptype) & > > > +RTE_PTYPE_TUNNEL_ECPRI) It is a bit wired. To my understanding, eCPRI is not a tunnel type like VxLAN / GTP-U, etc. Did I miss something? Why it is considered a tunnel? > > > /** > > > * Get the name of the l2 packet type > > > * > > > -- > > > 2.25.1 > > > BR. Bing ^ permalink raw reply [flat|nested] 12+ messages in thread
* [dpdk-dev] [PATCH V3 0/2] mbuf:add eCPRI hardware packet type mapping 2021-04-17 9:25 ` [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type Lingyu Liu 2021-04-19 14:24 ` Olivier Matz @ 2021-04-20 8:38 ` Lingyu Liu 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 1/2] mbuf: support eCPRI hardware packet type Lingyu Liu 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 2/2] net/iavf: update PTYPE mapping for eCPRI Lingyu Liu 1 sibling, 2 replies; 12+ messages in thread From: Lingyu Liu @ 2021-04-20 8:38 UTC (permalink / raw) To: dev, qi.z.zhang, olivier.matz, thomas, david.marchand; +Cc: Lingyu Liu Create eCPRI hardward packet in mbuf and add mapping in iavf. Lingyu Liu (2): mbuf: support eCPRI hardware packet type net/iavf: update PTYPE mapping for eCPRI --- V3 change: - create patch set and add the second patch app/test-pmd/util.c | 25 +++++++++------ drivers/net/iavf/iavf_rxtx.c | 52 ++++++++++++++++++++------------ lib/librte_mbuf/rte_mbuf_ptype.c | 2 ++ lib/librte_mbuf/rte_mbuf_ptype.h | 22 ++++++++++++++ 4 files changed, 72 insertions(+), 29 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [dpdk-dev] [PATCH V3 1/2] mbuf: support eCPRI hardware packet type 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 0/2] mbuf:add eCPRI hardware packet type mapping Lingyu Liu @ 2021-04-20 8:38 ` Lingyu Liu 2021-04-20 9:57 ` Andrew Rybchenko 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 2/2] net/iavf: update PTYPE mapping for eCPRI Lingyu Liu 1 sibling, 1 reply; 12+ messages in thread From: Lingyu Liu @ 2021-04-20 8:38 UTC (permalink / raw) To: dev, qi.z.zhang, olivier.matz, thomas, david.marchand Cc: Lingyu Liu, Hemant Agrawal Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE. Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> --- app/test-pmd/util.c | 25 ++++++++++++++++--------- lib/librte_mbuf/rte_mbuf_ptype.c | 2 ++ lib/librte_mbuf/rte_mbuf_ptype.h | 22 ++++++++++++++++++++++ 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c index a9e431a8b2..494ebbf909 100644 --- a/app/test-pmd/util.c +++ b/app/test-pmd/util.c @@ -258,16 +258,23 @@ dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[], udp_hdr = rte_pktmbuf_mtod_offset(mb, struct rte_udp_hdr *, l2_len + l3_len); - l4_len = sizeof(struct rte_udp_hdr); - vxlan_hdr = rte_pktmbuf_mtod_offset(mb, - struct rte_vxlan_hdr *, - l2_len + l3_len + l4_len); udp_port = RTE_BE_TO_CPU_16(udp_hdr->dst_port); - vx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni); - MKDUMPSTR(print_buf, buf_size, cur_len, - " - VXLAN packet: packet type =%d, " - "Destination UDP port =%d, VNI = %d", - packet_type, udp_port, vx_vni >> 8); + l4_len = sizeof(struct rte_udp_hdr); + if (RTE_ETH_IS_ECPRI_HDR(packet_type)) { + MKDUMPSTR(print_buf, buf_size, cur_len, + " - eCPRI packet: packet type =%d, " + "Destination UDP port =%d", + packet_type, udp_port); + } else { + vxlan_hdr = rte_pktmbuf_mtod_offset(mb, + struct rte_vxlan_hdr *, + l2_len + l3_len + l4_len); + vx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni); + MKDUMPSTR(print_buf, buf_size, cur_len, + " - VXLAN packet: packet type =%d, " + "Destination UDP port =%d, VNI = %d", + packet_type, udp_port, vx_vni >> 8); + } } } MKDUMPSTR(print_buf, buf_size, cur_len, diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/librte_mbuf/rte_mbuf_ptype.c index d6f906b06c..2bf97c89c6 100644 --- a/lib/librte_mbuf/rte_mbuf_ptype.c +++ b/lib/librte_mbuf/rte_mbuf_ptype.c @@ -21,6 +21,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype) case RTE_PTYPE_L2_ETHER_PPPOE: return "L2_ETHER_PPPOE"; case RTE_PTYPE_L2_ETHER_FCOE: return "L2_ETHER_FCOE"; case RTE_PTYPE_L2_ETHER_MPLS: return "L2_ETHER_MPLS"; + case RTE_PTYPE_L2_ETHER_ECPRI: return "L2_ETHER_ECPRI"; default: return "L2_UNKNOWN"; } } @@ -71,6 +72,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t ptype) case RTE_PTYPE_TUNNEL_VXLAN_GPE: return "TUNNEL_VXLAN_GPE"; case RTE_PTYPE_TUNNEL_MPLS_IN_UDP: return "TUNNEL_MPLS_IN_UDP"; case RTE_PTYPE_TUNNEL_MPLS_IN_GRE: return "TUNNEL_MPLS_IN_GRE"; + case RTE_PTYPE_TUNNEL_ECPRI: return "TUNNEL_ECPRI"; default: return "TUNNEL_UNKNOWN"; } } diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h index 17a2dd3576..5fdf369ac0 100644 --- a/lib/librte_mbuf/rte_mbuf_ptype.h +++ b/lib/librte_mbuf/rte_mbuf_ptype.h @@ -144,6 +144,13 @@ extern "C" { * <'ether type'=[0x8847|0x8848]> */ #define RTE_PTYPE_L2_ETHER_MPLS 0x0000000a +/** + * eCPRI (extend Common Public Radio Interface) packet type. + * + * Packet format: + * <'ether type'=[0xAEFE]> + */ +#define RTE_PTYPE_L2_ETHER_ECPRI 0x0000000b /** * Mask of layer 2 packet types. * It is used for outer packet for tunneling cases. @@ -491,6 +498,19 @@ extern "C" { * | 'destination port'=6635> */ #define RTE_PTYPE_TUNNEL_MPLS_IN_UDP 0x0000d000 +/** + * ECPRI packet type. + * + * Packet format: + * <'ether type'=0x0800 + * | 'version'=4, 'protocol'=17, + * | 'destination port'=5123> + * or, + * <'ether type'=0x86DD + * | 'version'=6, 'protocol'=17, + * | 'destination port'=5123> + */ +#define RTE_PTYPE_TUNNEL_ECPRI 0x0000e000 /** * Mask of tunneling packet types. */ @@ -688,6 +708,8 @@ extern "C" { RTE_PTYPE_INNER_L3_MASK | \ RTE_PTYPE_INNER_L4_MASK)) +/* Check if it is a ECPRI packet */ +#define RTE_ETH_IS_ECPRI_HDR(ptype) ((ptype) & RTE_PTYPE_TUNNEL_ECPRI) /** * Get the name of the l2 packet type * -- 2.25.1 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [dpdk-dev] [PATCH V3 1/2] mbuf: support eCPRI hardware packet type 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 1/2] mbuf: support eCPRI hardware packet type Lingyu Liu @ 2021-04-20 9:57 ` Andrew Rybchenko 0 siblings, 0 replies; 12+ messages in thread From: Andrew Rybchenko @ 2021-04-20 9:57 UTC (permalink / raw) To: Lingyu Liu, dev, qi.z.zhang, olivier.matz, thomas, david.marchand Cc: Hemant Agrawal On 4/20/21 11:38 AM, Lingyu Liu wrote: > Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE. > > Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> > Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com> > --- > app/test-pmd/util.c | 25 ++++++++++++++++--------- > lib/librte_mbuf/rte_mbuf_ptype.c | 2 ++ > lib/librte_mbuf/rte_mbuf_ptype.h | 22 ++++++++++++++++++++++ > 3 files changed, 40 insertions(+), 9 deletions(-) > > diff --git a/app/test-pmd/util.c b/app/test-pmd/util.c > index a9e431a8b2..494ebbf909 100644 > --- a/app/test-pmd/util.c > +++ b/app/test-pmd/util.c > @@ -258,16 +258,23 @@ dump_pkt_burst(uint16_t port_id, uint16_t queue, struct rte_mbuf *pkts[], > udp_hdr = rte_pktmbuf_mtod_offset(mb, > struct rte_udp_hdr *, > l2_len + l3_len); > - l4_len = sizeof(struct rte_udp_hdr); > - vxlan_hdr = rte_pktmbuf_mtod_offset(mb, > - struct rte_vxlan_hdr *, > - l2_len + l3_len + l4_len); > udp_port = RTE_BE_TO_CPU_16(udp_hdr->dst_port); > - vx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni); > - MKDUMPSTR(print_buf, buf_size, cur_len, > - " - VXLAN packet: packet type =%d, " > - "Destination UDP port =%d, VNI = %d", > - packet_type, udp_port, vx_vni >> 8); > + l4_len = sizeof(struct rte_udp_hdr); > + if (RTE_ETH_IS_ECPRI_HDR(packet_type)) { > + MKDUMPSTR(print_buf, buf_size, cur_len, > + " - eCPRI packet: packet type =%d, " > + "Destination UDP port =%d", > + packet_type, udp_port); > + } else { > + vxlan_hdr = rte_pktmbuf_mtod_offset(mb, > + struct rte_vxlan_hdr *, > + l2_len + l3_len + l4_len); > + vx_vni = rte_be_to_cpu_32(vxlan_hdr->vx_vni); > + MKDUMPSTR(print_buf, buf_size, cur_len, > + " - VXLAN packet: packet type =%d, " > + "Destination UDP port =%d, VNI = %d", > + packet_type, udp_port, vx_vni >> 8); > + } It definitely requires a pre-patch to avoid assumption that any UDP tunnel is a VXLAN. > } > } > MKDUMPSTR(print_buf, buf_size, cur_len, [snip] > diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/librte_mbuf/rte_mbuf_ptype.h > index 17a2dd3576..5fdf369ac0 100644 > --- a/lib/librte_mbuf/rte_mbuf_ptype.h > +++ b/lib/librte_mbuf/rte_mbuf_ptype.h [snip] > @@ -688,6 +708,8 @@ extern "C" { > RTE_PTYPE_INNER_L3_MASK | \ > RTE_PTYPE_INNER_L4_MASK)) > > +/* Check if it is a ECPRI packet */ > +#define RTE_ETH_IS_ECPRI_HDR(ptype) ((ptype) & RTE_PTYPE_TUNNEL_ECPRI) It looks wrong. You should apply tunnel mask RTE_PTYPE_TUNNEL_MASK and compare result with RTE_PTYPE_TUNNEL_ECPRI. ^ permalink raw reply [flat|nested] 12+ messages in thread
* [dpdk-dev] [PATCH V3 2/2] net/iavf: update PTYPE mapping for eCPRI 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 0/2] mbuf:add eCPRI hardware packet type mapping Lingyu Liu 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 1/2] mbuf: support eCPRI hardware packet type Lingyu Liu @ 2021-04-20 8:38 ` Lingyu Liu 1 sibling, 0 replies; 12+ messages in thread From: Lingyu Liu @ 2021-04-20 8:38 UTC (permalink / raw) To: dev, qi.z.zhang, olivier.matz, thomas, david.marchand; +Cc: Lingyu Liu 1.Map IPV4/IPV6 UDP eCPRI to L4_UDP_TUNNEL_ECPRI ptype. 2.Add L2_ETHER_ECPRI ptype and map ETHER eCPRI to L2_ETHER_ECPRI ptype. Signed-off-by: Lingyu Liu <lingyu.liu@intel.com> --- drivers/net/iavf/iavf_rxtx.c | 52 ++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c index 3f3cf6306c..30a8497c45 100644 --- a/drivers/net/iavf/iavf_rxtx.c +++ b/drivers/net/iavf/iavf_rxtx.c @@ -3349,49 +3349,61 @@ iavf_get_default_ptype_table(void) RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_INNER_L4_ICMP, + /* Ether --> ECPRI */ + [362] = RTE_PTYPE_L2_ETHER_ECPRI, + [363] = RTE_PTYPE_L2_ETHER_ECPRI, + [364] = RTE_PTYPE_L2_ETHER_ECPRI, + [365] = RTE_PTYPE_L2_ETHER_ECPRI, + [366] = RTE_PTYPE_L2_ETHER_ECPRI, + [367] = RTE_PTYPE_L2_ETHER_ECPRI, + [368] = RTE_PTYPE_L2_ETHER_ECPRI, + [369] = RTE_PTYPE_L2_ETHER_ECPRI, + [370] = RTE_PTYPE_L2_ETHER_ECPRI, + [371] = RTE_PTYPE_L2_ETHER_ECPRI, + /* IPv4 --> UDP ECPRI */ [372] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [373] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [374] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [375] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [376] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [377] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [378] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [379] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [380] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [381] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, /* IPV6 --> UDP ECPRI */ [382] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [383] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [384] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [385] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [386] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [387] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [388] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [389] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [390] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, [391] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | - RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_ECPRI | RTE_PTYPE_L4_UDP, /* All others reserved */ }; -- 2.25.1 ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-04-22 11:10 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-04-17 9:04 [dpdk-dev] [PATCH v1] mbuf: support eCPRI hardware packet type Add L2_ETHER_ECPRI and L4_UDP_TUNNEL_ECPRI in RTE_PTYPE Lingyu Liu 2021-04-17 9:25 ` [dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type Lingyu Liu 2021-04-19 14:24 ` Olivier Matz 2021-04-20 2:17 ` Liu, Lingyu 2021-04-20 7:51 ` Thomas Monjalon 2021-04-20 10:06 ` Andrew Rybchenko 2021-04-22 11:09 ` Liu, Lingyu 2021-04-20 13:01 ` Bing Zhao 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 0/2] mbuf:add eCPRI hardware packet type mapping Lingyu Liu 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 1/2] mbuf: support eCPRI hardware packet type Lingyu Liu 2021-04-20 9:57 ` Andrew Rybchenko 2021-04-20 8:38 ` [dpdk-dev] [PATCH V3 2/2] net/iavf: update PTYPE mapping for eCPRI Lingyu Liu
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).