[dpdk-dev] [PATCH v2] mbuf: support eCPRI hardware packet type
Liu, Lingyu
lingyu.liu at intel.com
Tue Apr 20 04:17:29 CEST 2021
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 at 6wind.com>
> Sent: Monday, April 19, 2021 10:25 PM
> To: Liu, Lingyu <lingyu.liu at intel.com>
> Cc: dev at dpdk.org; Zhang, Qi Z <qi.z.zhang at intel.com>;
> thomas at monjalon.net; david.marchand at redhat.com; Hemant Agrawal
> <hemant.agrawal at 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 at intel.com>
> > Acked-by: Hemant Agrawal <hemant.agrawal at 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 at 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
> >
More information about the dev
mailing list