> -----Original Message-----
> From: Ding, Xuan <xuan.d...@intel.com>
> Sent: Tuesday, March 29, 2022 2:50 PM
> To: tho...@monjalon.net; Yigit, Ferruh <ferruh.yi...@intel.com>;
> andrew.rybche...@oktetlabs.ru
> Cc: dev@dpdk.org; step...@networkplumber.org;
> m...@smartsharesystems.com; viachesl...@nvidia.com; Zhang, Qi Z
> <qi.z.zh...@intel.com>; Yu, Ping <ping...@intel.com>; Wu, WenxuanX
> <wenxuanx...@intel.com>; Ding, Xuan <xuan.d...@intel.com>; Wang,
> YuanX <yuanx.w...@intel.com>
> Subject: [RFC,v3 1/3] ethdev: introduce protocol type based header split
> 
> From: Xuan Ding <xuan.d...@intel.com>
> 
> Header split consists of splitting a received packet into two separate regions
> based on the packet content. The split happens after the packet header and
> before the packet payload. Splitting is usually between the packet header
> that can be posted to a dedicated buffer and the packet payload that can be
> posted to a different buffer.
> 
> Currently, Rx buffer split supports length and offset based packet split.
> Although header split is a subset of buffer split, configuring buffer split 
> based
> on length is not suitable for NICs that do split based on header protocol 
> types.
> Because tunneling makes the conversion from length to protocol type
> impossible.
> 
> This patch extends the current buffer split to support protocol type and
> offset based header split. A new proto field is introduced in the
> rte_eth_rxseg_split structure reserved field to specify header protocol type.
> With Rx offload flag RTE_ETH_RX_OFFLOAD_HEADER_SPLIT enabled and
> protocol type configured, PMD will split the ingress packets into two separate
> regions. Currently, both inner and outer L2/L3/L4 level header split can be
> supported.
> 
> For example, let's suppose we configured the Rx queue with the following
> segments:
>     seg0 - pool0, off0=2B
>     seg1 - pool1, off1=128B
> 
> With header split type configured with RTE_ETH_RX_HEADER_SPLIT_UDP,
> the packet consists of MAC_IP_UDP_PAYLOAD will be split like following:
>     seg0 - udp header @ RTE_PKTMBUF_HEADROOM + 2 in mbuf from pool0
>     seg1 - payload @ 128 in mbuf from pool1
> 
> The memory attributes for the split parts may differ either - for example the
> mempool0 and mempool1 belong to dpdk memory and external memory,
> respectively.
> 
> Signed-off-by: Xuan Ding <xuan.d...@intel.com>
> Signed-off-by: Yuan Wang <yuanx.w...@intel.com>
> ---
>  lib/ethdev/rte_ethdev.c | 34 ++++++++++++++++++++++-------
> lib/ethdev/rte_ethdev.h | 48
> +++++++++++++++++++++++++++++++++++++++--
>  2 files changed, 72 insertions(+), 10 deletions(-)
> 
> diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index
> 29a3d80466..144a43588c 100644
> --- a/lib/ethdev/rte_ethdev.c
> +++ b/lib/ethdev/rte_ethdev.c
> @@ -1661,6 +1661,7 @@ rte_eth_rx_queue_check_split(const struct
> rte_eth_rxseg_split *rx_seg,
>               struct rte_mempool *mpl = rx_seg[seg_idx].mp;
>               uint32_t length = rx_seg[seg_idx].length;
>               uint32_t offset = rx_seg[seg_idx].offset;
> +             uint16_t proto = rx_seg[seg_idx].proto;
> 
>               if (mpl == NULL) {
>                       RTE_ETHDEV_LOG(ERR, "null mempool pointer\n");
> @@ -1694,13 +1695,29 @@ rte_eth_rx_queue_check_split(const struct
> rte_eth_rxseg_split *rx_seg,
>               }
>               offset += seg_idx != 0 ? 0 : RTE_PKTMBUF_HEADROOM;
>               *mbp_buf_size = rte_pktmbuf_data_room_size(mpl);
> -             length = length != 0 ? length : *mbp_buf_size;
> -             if (*mbp_buf_size < length + offset) {
> -                     RTE_ETHDEV_LOG(ERR,
> -                                    "%s mbuf_data_room_size %u < %u
> (segment length=%u + segment offset=%u)\n",
> -                                    mpl->name, *mbp_buf_size,
> -                                    length + offset, length, offset);
> -                     return -EINVAL;
> +             if (proto == 0) {

 use RTE_ETH_RX_HEADER_SPLIT_NONE looks better?

Reviewed-by: Qi Zhang <qi.z.zh...@intel.com>



Reply via email to