DPDK patches and discussions
 help / color / mirror / Atom feed
* [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

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

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

* 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

* 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  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

* 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

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

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git