diff mbox series

[1/3,v4] ethdev: add Rx offload to drop error packets

Message ID 20201015132343.4050-1-nipun.gupta@nxp.com
State New
Headers show
Series [1/3,v4] ethdev: add Rx offload to drop error packets | expand

Commit Message

Nipun Gupta Oct. 15, 2020, 1:23 p.m. UTC
From: Nipun Gupta <nipun.gupta@nxp.com>


This change adds a Rx offload capability and configuration to
enable hardware to drop the packets in case of any error in the
packets such as L3 checksum error or L4 checksum.

Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>

Signed-off-by: Rohit Raj <rohit.raj@nxp.com>

Reviewed-by: Asaf Penso <asafp@nvidia.com>

---

v4:
 - renamed 'rte_rx_err_pkt_drop_conf' to
   'rte_eth_rx_err_pkt_drop_conf'
 - updated function 'port_offload_cap_display' to display newly
   added offloads
 - added placeholder for L1 FCS, L3 Checksum, L4 Checksum error
   packet drops
 - updated doc/guides/nics/features.rst
 - updated new added 'DEV_RX_OFFLOAD_*' to 'RTE_DEV_RX_OFFLOAD*'
 - updated RX to Rx

v3:
 - Add additional rx_err_drop_offload_capa, which is specific
   capability flag for RX packets error drop offload. Currently
   only 'all' error packet drops are enabled, but can be extended
   to provide capability to drop any specific errors like L1 FCS,
   L3 Checksum etc.
 - Added separate config structure to enable the drop configuration.
 - Updated doc with the new updated option in testbbdev (patch 3/3)

v2:
 - Add support in DPAA1 driver (patch 2/3)
 - Add support and config parameter in testpmd (patch 3/3)

 lib/librte_ethdev/rte_ethdev.c |  1 +
 lib/librte_ethdev/rte_ethdev.h | 39 +++++++++++++++++++++++++++++++++-
 2 files changed, 39 insertions(+), 1 deletion(-)

-- 
2.17.1

Comments

Ajit Khaparde Oct. 19, 2020, 3:30 a.m. UTC | #1
On Thu, Oct 15, 2020 at 6:24 AM <nipun.gupta@nxp.com> wrote:
>

> From: Nipun Gupta <nipun.gupta@nxp.com>

>

> This change adds a Rx offload capability and configuration to

> enable hardware to drop the packets in case of any error in the

> packets such as L3 checksum error or L4 checksum.

>

> Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>

> Signed-off-by: Rohit Raj <rohit.raj@nxp.com>

> Reviewed-by: Asaf Penso <asafp@nvidia.com>

> ---

>

> v4:

>  - renamed 'rte_rx_err_pkt_drop_conf' to

>    'rte_eth_rx_err_pkt_drop_conf'

>  - updated function 'port_offload_cap_display' to display newly

>    added offloads

>  - added placeholder for L1 FCS, L3 Checksum, L4 Checksum error

>    packet drops

>  - updated doc/guides/nics/features.rst

>  - updated new added 'DEV_RX_OFFLOAD_*' to 'RTE_DEV_RX_OFFLOAD*'

>  - updated RX to Rx

>

> v3:

>  - Add additional rx_err_drop_offload_capa, which is specific

>    capability flag for RX packets error drop offload. Currently

>    only 'all' error packet drops are enabled, but can be extended

>    to provide capability to drop any specific errors like L1 FCS,

>    L3 Checksum etc.

>  - Added separate config structure to enable the drop configuration.

>  - Updated doc with the new updated option in testbbdev (patch 3/3)

>

> v2:

>  - Add support in DPAA1 driver (patch 2/3)

>  - Add support and config parameter in testpmd (patch 3/3)

>

>  lib/librte_ethdev/rte_ethdev.c |  1 +

>  lib/librte_ethdev/rte_ethdev.h | 39 +++++++++++++++++++++++++++++++++-

>  2 files changed, 39 insertions(+), 1 deletion(-)

>

> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c

> index 48d1333b1..be25e947e 100644

> --- a/lib/librte_ethdev/rte_ethdev.c

> +++ b/lib/librte_ethdev/rte_ethdev.c

> @@ -128,6 +128,7 @@ static const struct {

>         RTE_RX_OFFLOAD_BIT2STR(SCTP_CKSUM),

>         RTE_RX_OFFLOAD_BIT2STR(OUTER_UDP_CKSUM),

>         RTE_RX_OFFLOAD_BIT2STR(RSS_HASH),

> +       RTE_RX_OFFLOAD_BIT2STR(ERR_PKT_DROP),

>  };

>

>  #undef RTE_RX_OFFLOAD_BIT2STR

> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h

> index d2bf74f12..0db4b4021 100644

> --- a/lib/librte_ethdev/rte_ethdev.h

> +++ b/lib/librte_ethdev/rte_ethdev.h

> @@ -1194,6 +1194,28 @@ struct rte_intr_conf {

>         uint32_t rmv:1;

>  };

>

> +/**

> + * A structure used to enable/disable error packet drop on Rx.

> + */

> +struct rte_eth_rx_err_pkt_drop_conf {

> +       /** enable/disable L1 FSC error packet drop on Rx.

s/FSC/FCS
Its L2 FCS. FCS is a part of Ethernet frame.

> +        * 0 (default) - disable, 1 enable

> +        */

> +       uint32_t l1_fcs:1;

l2_fcs;

> +       /** enable/disable L3 Checksum error packet drop on Rx.

> +        * 0 (default) - disable, 1 enable

> +        */

> +       uint32_t l3_csum:1;

> +       /** enable/disable L4 Checksum error packet drop on Rx.

> +        * 0 (default) - disable, 1 enable

> +        */

> +       uint32_t l4_csum:1;

> +       /** enable/disable all Rx error packet drop.

> +        * 0 (default) - disable, 1 enable

> +        */

> +       uint32_t all:1;

> +};

> +

>  /**

>   * A structure used to configure an Ethernet port.

>   * Depending upon the RX multi-queue mode, extra advanced

> @@ -1236,10 +1258,12 @@ struct rte_eth_conf {

>         uint32_t dcb_capability_en;

>         struct rte_fdir_conf fdir_conf; /**< FDIR configuration. DEPRECATED */

>         struct rte_intr_conf intr_conf; /**< Interrupt mode configuration. */

> +       struct rte_eth_rx_err_pkt_drop_conf err_pkt_drop_conf;

> +       /**< Rx error packet drop configuration. */

>  };

>

>  /**

> - * RX offload capabilities of a device.

> + * Rx offload capabilities of a device.

>   */

>  #define DEV_RX_OFFLOAD_VLAN_STRIP  0x00000001

>  #define DEV_RX_OFFLOAD_IPV4_CKSUM  0x00000002

> @@ -1260,6 +1284,7 @@ struct rte_eth_conf {

>  #define DEV_RX_OFFLOAD_SCTP_CKSUM      0x00020000

>  #define DEV_RX_OFFLOAD_OUTER_UDP_CKSUM  0x00040000

>  #define DEV_RX_OFFLOAD_RSS_HASH                0x00080000

> +#define DEV_RX_OFFLOAD_ERR_PKT_DROP    0x00100000

>

>  #define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM | \

>                                  DEV_RX_OFFLOAD_UDP_CKSUM | \

> @@ -1274,6 +1299,16 @@ struct rte_eth_conf {

>   * mentioned in rte_rx_offload_names in rte_ethdev.c file.

>   */

>

> +/**

> + * Rx Error Drop offload config/capabilities of a device. These

> + * are valid only when Rx capability RTE_DEV_RX_OFFLOAD_ERR_PKT_DROP

> + * is supported by the device.

> + */

> +#define RTE_DEV_RX_ERR_PKT_DROP_OFFLOAD_L1_FCS         0x00000001

RTE_DEV_RX_ERR_PKT_DROP_OFFLOAD_L2_FCS



> +#define RTE_DEV_RX_ERR_PKT_DROP_OFFLOAD_L3_CSUM                0x00000002

> +#define RTE_DEV_RX_ERR_PKT_DROP_OFFLOAD_L4_CSUM                0x00000004

> +#define RTE_DEV_RX_ERR_PKT_DROP_OFFLOAD_ALL            0x80000000

> +

>  /**

>   * TX offload capabilities of a device.

>   */

> @@ -1411,6 +1446,8 @@ struct rte_eth_dev_info {

>         /**< Device per-queue RX offload capabilities. */

>         uint64_t tx_queue_offload_capa;

>         /**< Device per-queue TX offload capabilities. */

> +       uint64_t rx_err_drop_offload_capa;

> +       /**< RX error packet drop offload capabilities. */

>         uint16_t reta_size;

>         /**< Device redirection table size, the total number of entries. */

>         uint8_t hash_key_size; /**< Hash key size in bytes */

> --

> 2.17.1

>
Ferruh Yigit Feb. 18, 2021, 8:32 p.m. UTC | #2
On 10/15/2020 2:23 PM, nipun.gupta@nxp.com wrote:
> From: Nipun Gupta <nipun.gupta@nxp.com>

> 

> This change adds a Rx offload capability and configuration to

> enable hardware to drop the packets in case of any error in the

> packets such as L3 checksum error or L4 checksum.

> 

> Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>

> Signed-off-by: Rohit Raj <rohit.raj@nxp.com>

> Reviewed-by: Asaf Penso <asafp@nvidia.com>

> ---

> 

> v4:

>   - renamed 'rte_rx_err_pkt_drop_conf' to

>     'rte_eth_rx_err_pkt_drop_conf'

>   - updated function 'port_offload_cap_display' to display newly

>     added offloads

>   - added placeholder for L1 FCS, L3 Checksum, L4 Checksum error

>     packet drops

>   - updated doc/guides/nics/features.rst

>   - updated new added 'DEV_RX_OFFLOAD_*' to 'RTE_DEV_RX_OFFLOAD*'

>   - updated RX to Rx

> 

> v3:

>   - Add additional rx_err_drop_offload_capa, which is specific

>     capability flag for RX packets error drop offload. Currently

>     only 'all' error packet drops are enabled, but can be extended

>     to provide capability to drop any specific errors like L1 FCS,

>     L3 Checksum etc.

>   - Added separate config structure to enable the drop configuration.

>   - Updated doc with the new updated option in testbbdev (patch 3/3)

> 

> v2:

>   - Add support in DPAA1 driver (patch 2/3)

>   - Add support and config parameter in testpmd (patch 3/3)

> 

>   lib/librte_ethdev/rte_ethdev.c |  1 +

>   lib/librte_ethdev/rte_ethdev.h | 39 +++++++++++++++++++++++++++++++++-

>   2 files changed, 39 insertions(+), 1 deletion(-)

> 

> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c



This feature touches many main parts,
- new config item for 'rte_eth_dev_configure()'
- a new offload flag
- new capability reporting for 'rte_eth_dev_info_get()'

The feature doesn't look very mainstream to touch all these main parts and add 
complexity to them, which will affect almost all users.

And has some inconsistencies, like configuration is done via config struct, but 
capability is returned as bit-wise.
Or I think config option taken into account only if offload is requested has a 
chance to confuse people in both app and driver end.

What do you think having two specific APIs to get_capabilities and set drop config?
The responsibility of those APIs will be clear and narrowed down, which makes it 
harder to make it wrong.


Also it is an ABI break as it is and needs to wait 21.11, and even after that it 
has a potential to cause more ABI breaks, like trying to add a new error type to 
drop will need to wait 22.11 ..., but if we can have them as separate APIs we 
can have them as experimental without waiting next LTS.
Thomas Monjalon Feb. 18, 2021, 8:37 p.m. UTC | #3
18/02/2021 21:32, Ferruh Yigit:
> On 10/15/2020 2:23 PM, nipun.gupta@nxp.com wrote:

> > From: Nipun Gupta <nipun.gupta@nxp.com>

> > 

> > This change adds a Rx offload capability and configuration to

> > enable hardware to drop the packets in case of any error in the

> > packets such as L3 checksum error or L4 checksum.

> > 

> > Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>

> > Signed-off-by: Rohit Raj <rohit.raj@nxp.com>

> > Reviewed-by: Asaf Penso <asafp@nvidia.com>

> > ---

> 

> This feature touches many main parts,

> - new config item for 'rte_eth_dev_configure()'

> - a new offload flag

> - new capability reporting for 'rte_eth_dev_info_get()'

> 

> The feature doesn't look very mainstream to touch all these main parts and add 

> complexity to them, which will affect almost all users.

> 

> And has some inconsistencies, like configuration is done via config struct, but 

> capability is returned as bit-wise.

> Or I think config option taken into account only if offload is requested has a 

> chance to confuse people in both app and driver end.

> 

> What do you think having two specific APIs to get_capabilities and set drop config?

> The responsibility of those APIs will be clear and narrowed down, which makes it 

> harder to make it wrong.


I agree. In general, it is better adding new functions
instead of adding everything in rte_eth_dev_configure().
Ferruh Yigit April 20, 2021, 1:11 a.m. UTC | #4
On 2/18/2021 8:37 PM, Thomas Monjalon wrote:
> 18/02/2021 21:32, Ferruh Yigit:

>> On 10/15/2020 2:23 PM, nipun.gupta@nxp.com wrote:

>>> From: Nipun Gupta <nipun.gupta@nxp.com>

>>>

>>> This change adds a Rx offload capability and configuration to

>>> enable hardware to drop the packets in case of any error in the

>>> packets such as L3 checksum error or L4 checksum.

>>>

>>> Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>

>>> Signed-off-by: Rohit Raj <rohit.raj@nxp.com>

>>> Reviewed-by: Asaf Penso <asafp@nvidia.com>

>>> ---

>>

>> This feature touches many main parts,

>> - new config item for 'rte_eth_dev_configure()'

>> - a new offload flag

>> - new capability reporting for 'rte_eth_dev_info_get()'

>>

>> The feature doesn't look very mainstream to touch all these main parts and add

>> complexity to them, which will affect almost all users.

>>

>> And has some inconsistencies, like configuration is done via config struct, but

>> capability is returned as bit-wise.

>> Or I think config option taken into account only if offload is requested has a

>> chance to confuse people in both app and driver end.

>>

>> What do you think having two specific APIs to get_capabilities and set drop config?

>> The responsibility of those APIs will be clear and narrowed down, which makes it

>> harder to make it wrong.

> 

> I agree. In general, it is better adding new functions

> instead of adding everything in rte_eth_dev_configure().

> 


The set is stale, rejecting it, please send a new version if required.
diff mbox series

Patch

diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 48d1333b1..be25e947e 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -128,6 +128,7 @@  static const struct {
 	RTE_RX_OFFLOAD_BIT2STR(SCTP_CKSUM),
 	RTE_RX_OFFLOAD_BIT2STR(OUTER_UDP_CKSUM),
 	RTE_RX_OFFLOAD_BIT2STR(RSS_HASH),
+	RTE_RX_OFFLOAD_BIT2STR(ERR_PKT_DROP),
 };
 
 #undef RTE_RX_OFFLOAD_BIT2STR
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index d2bf74f12..0db4b4021 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -1194,6 +1194,28 @@  struct rte_intr_conf {
 	uint32_t rmv:1;
 };
 
+/**
+ * A structure used to enable/disable error packet drop on Rx.
+ */
+struct rte_eth_rx_err_pkt_drop_conf {
+	/** enable/disable L1 FSC error packet drop on Rx.
+	 * 0 (default) - disable, 1 enable
+	 */
+	uint32_t l1_fcs:1;
+	/** enable/disable L3 Checksum error packet drop on Rx.
+	 * 0 (default) - disable, 1 enable
+	 */
+	uint32_t l3_csum:1;
+	/** enable/disable L4 Checksum error packet drop on Rx.
+	 * 0 (default) - disable, 1 enable
+	 */
+	uint32_t l4_csum:1;
+	/** enable/disable all Rx error packet drop.
+	 * 0 (default) - disable, 1 enable
+	 */
+	uint32_t all:1;
+};
+
 /**
  * A structure used to configure an Ethernet port.
  * Depending upon the RX multi-queue mode, extra advanced
@@ -1236,10 +1258,12 @@  struct rte_eth_conf {
 	uint32_t dcb_capability_en;
 	struct rte_fdir_conf fdir_conf; /**< FDIR configuration. DEPRECATED */
 	struct rte_intr_conf intr_conf; /**< Interrupt mode configuration. */
+	struct rte_eth_rx_err_pkt_drop_conf err_pkt_drop_conf;
+	/**< Rx error packet drop configuration. */
 };
 
 /**
- * RX offload capabilities of a device.
+ * Rx offload capabilities of a device.
  */
 #define DEV_RX_OFFLOAD_VLAN_STRIP  0x00000001
 #define DEV_RX_OFFLOAD_IPV4_CKSUM  0x00000002
@@ -1260,6 +1284,7 @@  struct rte_eth_conf {
 #define DEV_RX_OFFLOAD_SCTP_CKSUM	0x00020000
 #define DEV_RX_OFFLOAD_OUTER_UDP_CKSUM  0x00040000
 #define DEV_RX_OFFLOAD_RSS_HASH		0x00080000
+#define DEV_RX_OFFLOAD_ERR_PKT_DROP	0x00100000
 
 #define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM | \
 				 DEV_RX_OFFLOAD_UDP_CKSUM | \
@@ -1274,6 +1299,16 @@  struct rte_eth_conf {
  * mentioned in rte_rx_offload_names in rte_ethdev.c file.
  */
 
+/**
+ * Rx Error Drop offload config/capabilities of a device. These
+ * are valid only when Rx capability RTE_DEV_RX_OFFLOAD_ERR_PKT_DROP
+ * is supported by the device.
+ */
+#define RTE_DEV_RX_ERR_PKT_DROP_OFFLOAD_L1_FCS		0x00000001
+#define RTE_DEV_RX_ERR_PKT_DROP_OFFLOAD_L3_CSUM		0x00000002
+#define RTE_DEV_RX_ERR_PKT_DROP_OFFLOAD_L4_CSUM		0x00000004
+#define RTE_DEV_RX_ERR_PKT_DROP_OFFLOAD_ALL		0x80000000
+
 /**
  * TX offload capabilities of a device.
  */
@@ -1411,6 +1446,8 @@  struct rte_eth_dev_info {
 	/**< Device per-queue RX offload capabilities. */
 	uint64_t tx_queue_offload_capa;
 	/**< Device per-queue TX offload capabilities. */
+	uint64_t rx_err_drop_offload_capa;
+	/**< RX error packet drop offload capabilities. */
 	uint16_t reta_size;
 	/**< Device redirection table size, the total number of entries. */
 	uint8_t hash_key_size; /**< Hash key size in bytes */