Message ID | 20220120162627.4155695-2-gakhil@marvell.com (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Ferruh Yigit |
Headers | show |
Series | ethdev: introduce IP reassembly offload | expand |
Context | Check | Description |
---|---|---|
ci/checkpatch | success | coding style OK |
On Thu, 20 Jan 2022 21:56:24 +0530 Akhil Goyal <gakhil@marvell.com> wrote: > +/** > + * @warning > + * @b EXPERIMENTAL: this structure may change without prior notice. > + * > + * A structure used to set IP reassembly configuration. > + * > + * If RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY flag is set in offloads field, > + * the PMD will attempt IP reassembly for the received packets as per > + * properties defined in this structure: > + * > + */ > +struct rte_eth_ip_reass_params { > + /** Maximum time in ms which PMD can wait for other fragments. */ > + uint32_t reass_timeout; > + /** Maximum number of fragments that can be reassembled. */ > + uint16_t max_frags; > + /** > + * Flags to enable reassembly of packet types - > + * RTE_ETH_DEV_REASSEMBLY_F_xxx. > + */ > + uint16_t flags; > +}; > + Actually, this is not experimental. You are embedding this in dev_info and dev_info is not experimental; therefore the reassembly parameters can never change without breaking ABI of dev_info.
> On Thu, 20 Jan 2022 21:56:24 +0530 > Akhil Goyal <gakhil@marvell.com> wrote: > > > +/** > > + * @warning > > + * @b EXPERIMENTAL: this structure may change without prior notice. > > + * > > + * A structure used to set IP reassembly configuration. > > + * > > + * If RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY flag is set in offloads field, > > + * the PMD will attempt IP reassembly for the received packets as per > > + * properties defined in this structure: > > + * > > + */ > > +struct rte_eth_ip_reass_params { > > + /** Maximum time in ms which PMD can wait for other fragments. */ > > + uint32_t reass_timeout; > > + /** Maximum number of fragments that can be reassembled. */ > > + uint16_t max_frags; > > + /** > > + * Flags to enable reassembly of packet types - > > + * RTE_ETH_DEV_REASSEMBLY_F_xxx. > > + */ > > + uint16_t flags; > > +}; > > + > > Actually, this is not experimental. You are embedding this in dev_info > and dev_info is not experimental; therefore the reassembly parameters > can never change without breaking ABI of dev_info. Agreed, will remove the experimental tag from this struct.
diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore index 4b676f317d..90f449c43a 100644 --- a/devtools/libabigail.abignore +++ b/devtools/libabigail.abignore @@ -11,3 +11,8 @@ ; Ignore generated PMD information strings [suppress_variable] name_regexp = _pmd_info$ + +; Ignore fields inserted in place of reserved_64s of rte_eth_dev_info +[suppress_type] + name = rte_eth_dev_info + has_data_member_inserted_between = {offset_of(reserved_64s), end} diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst index 27be2d2576..b45bce4a78 100644 --- a/doc/guides/nics/features.rst +++ b/doc/guides/nics/features.rst @@ -602,6 +602,17 @@ Supports inner packet L4 checksum. ``tx_offload_capa,tx_queue_offload_capa:RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM``. +.. _nic_features_ip_reassembly: + +IP reassembly +------------- + +Supports IP reassembly in hardware. + +* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY``. +* **[provides] rte_eth_dev_info**: ``reass_capa``. + + .. _nic_features_shared_rx_queue: Shared Rx queue diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index a1d475a292..d9a03f12f9 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -126,6 +126,7 @@ static const struct { RTE_RX_OFFLOAD_BIT2STR(OUTER_UDP_CKSUM), RTE_RX_OFFLOAD_BIT2STR(RSS_HASH), RTE_RX_OFFLOAD_BIT2STR(BUFFER_SPLIT), + RTE_RX_OFFLOAD_BIT2STR(IP_REASSEMBLY), }; #undef RTE_RX_OFFLOAD_BIT2STR diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h index fa299c8ad7..11427b2e4d 100644 --- a/lib/ethdev/rte_ethdev.h +++ b/lib/ethdev/rte_ethdev.h @@ -1586,6 +1586,7 @@ struct rte_eth_conf { #define RTE_ETH_RX_OFFLOAD_RSS_HASH RTE_BIT64(19) #define DEV_RX_OFFLOAD_RSS_HASH RTE_ETH_RX_OFFLOAD_RSS_HASH #define RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT RTE_BIT64(20) +#define RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY RTE_BIT64(21) #define RTE_ETH_RX_OFFLOAD_CHECKSUM (RTE_ETH_RX_OFFLOAD_IPV4_CKSUM | \ RTE_ETH_RX_OFFLOAD_UDP_CKSUM | \ @@ -1781,6 +1782,33 @@ enum rte_eth_representor_type { RTE_ETH_REPRESENTOR_PF, /**< representor of Physical Function. */ }; +/* Flag to offload IP reassembly for IPv4 packets. */ +#define RTE_ETH_DEV_REASSEMBLY_F_IPV4 (RTE_BIT32(0)) +/* Flag to offload IP reassembly for IPv6 packets. */ +#define RTE_ETH_DEV_REASSEMBLY_F_IPV6 (RTE_BIT32(1)) +/** + * @warning + * @b EXPERIMENTAL: this structure may change without prior notice. + * + * A structure used to set IP reassembly configuration. + * + * If RTE_ETH_RX_OFFLOAD_IP_REASSEMBLY flag is set in offloads field, + * the PMD will attempt IP reassembly for the received packets as per + * properties defined in this structure: + * + */ +struct rte_eth_ip_reass_params { + /** Maximum time in ms which PMD can wait for other fragments. */ + uint32_t reass_timeout; + /** Maximum number of fragments that can be reassembled. */ + uint16_t max_frags; + /** + * Flags to enable reassembly of packet types - + * RTE_ETH_DEV_REASSEMBLY_F_xxx. + */ + uint16_t flags; +}; + /** * A structure used to retrieve the contextual information of * an Ethernet device, such as the controlling driver of the @@ -1841,8 +1869,10 @@ struct rte_eth_dev_info { * embedded managed interconnect/switch. */ struct rte_eth_switch_info switch_info; + /** IP reassembly offload capabilities that a device can support. */ + struct rte_eth_ip_reass_params reass_capa; - uint64_t reserved_64s[2]; /**< Reserved for future fields */ + uint64_t reserved_64s[1]; /**< Reserved for future fields */ void *reserved_ptrs[2]; /**< Reserved for future fields */ };