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....@intel.com/
Best Regards, Lingyu Liu > -----Original Message----- > From: Olivier Matz <olivier.m...@6wind.com> > Sent: Monday, April 19, 2021 10:25 PM > To: Liu, Lingyu <lingyu....@intel.com> > Cc: dev@dpdk.org; Zhang, Qi Z <qi.z.zh...@intel.com>; > tho...@monjalon.net; david.march...@redhat.com; Hemant Agrawal > <hemant.agra...@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....@intel.com> > > Acked-by: Hemant Agrawal <hemant.agra...@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- > ktejas...@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 > >