]> git.droids-corp.org - dpdk.git/commitdiff
examples/ipsec-secgw: fix Tx checksum offload flag
authorRadu Nicolau <radu.nicolau@intel.com>
Wed, 29 Jun 2022 16:46:07 +0000 (17:46 +0100)
committerAkhil Goyal <gakhil@marvell.com>
Thu, 30 Jun 2022 04:42:46 +0000 (06:42 +0200)
For the inline crypto path set the Tx checksum offload flag
only if the device supports it.

Fixes: d24471e5786b ("examples/ipsec-secgw: disable Tx checksum for inline")
Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Acked-by: Fan Zhang <roy.fan.zhang@intel.com>
Acked-by: Akhil Goyal <gakhil@marvell.com>
examples/ipsec-secgw/sa.c

index 5d9cec97db282629fe82b981a1a07056a365efce..b364ac5881e68ec96dab69948204d8803fd3a432 100644 (file)
@@ -1828,37 +1828,43 @@ sa_check_offloads(uint16_t port_id, uint64_t *rx_offloads,
        for (idx_sa = 0; idx_sa < nb_sa_out; idx_sa++) {
                rule = &sa_out[idx_sa];
                rule_type = ipsec_get_action_type(rule);
-               switch (rule_type) {
-               case RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL:
-                       /* Checksum offload is not needed for inline protocol as
-                        * all processing for Outbound IPSec packets will be
-                        * implicitly taken care and for non-IPSec packets,
-                        * there is no need of IPv4 Checksum offload.
-                        */
-                       if (rule->portid == port_id) {
+               if (rule->portid == port_id) {
+                       switch (rule_type) {
+                       case RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL:
+                               /* Checksum offload is not needed for inline
+                                * protocol as all processing for Outbound IPSec
+                                * packets will be implicitly taken care and for
+                                * non-IPSec packets, there is no need of
+                                * IPv4 Checksum offload.
+                                */
                                *tx_offloads |= RTE_ETH_TX_OFFLOAD_SECURITY;
                                if (rule->mss)
                                        *tx_offloads |= (RTE_ETH_TX_OFFLOAD_TCP_TSO |
                                                         RTE_ETH_TX_OFFLOAD_IPV4_CKSUM);
-                       }
-                       break;
-               case RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO:
-                       if (rule->portid == port_id) {
+                               break;
+                       case RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO:
                                *tx_offloads |= RTE_ETH_TX_OFFLOAD_SECURITY;
                                if (rule->mss)
                                        *tx_offloads |=
                                                RTE_ETH_TX_OFFLOAD_TCP_TSO;
-                               *tx_offloads |= RTE_ETH_TX_OFFLOAD_IPV4_CKSUM;
+                               if (dev_info.tx_offload_capa &
+                                               RTE_ETH_TX_OFFLOAD_IPV4_CKSUM)
+                                       *tx_offloads |=
+                                               RTE_ETH_TX_OFFLOAD_IPV4_CKSUM;
+                               break;
+                       default:
+                               /* Enable IPv4 checksum offload even if
+                                * one of lookaside SA's are present.
+                                */
+                               if (dev_info.tx_offload_capa &
+                                   RTE_ETH_TX_OFFLOAD_IPV4_CKSUM)
+                                       *tx_offloads |= RTE_ETH_TX_OFFLOAD_IPV4_CKSUM;
+                               break;
                        }
-                       break;
-               default:
-                       /* Enable IPv4 checksum offload even if one of lookaside
-                        * SA's are present.
-                        */
+               } else {
                        if (dev_info.tx_offload_capa &
                            RTE_ETH_TX_OFFLOAD_IPV4_CKSUM)
                                *tx_offloads |= RTE_ETH_TX_OFFLOAD_IPV4_CKSUM;
-                       break;
                }
        }
        return 0;