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 >