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") Cc: ndabilpu...@marvell.com Signed-off-by: Radu Nicolau <radu.nico...@intel.com> Acked-by: Fan Zhang <roy.fan.zh...@intel.com> Acked-by: Akhil Goyal <gak...@marvell.com> --- v2: when supported the checksum offload flag needs to also be set for ports that don't have SAs programmed examples/ipsec-secgw/sa.c | 44 ++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/examples/ipsec-secgw/sa.c b/examples/ipsec-secgw/sa.c index 5d9cec97db..b364ac5881 100644 --- a/examples/ipsec-secgw/sa.c +++ b/examples/ipsec-secgw/sa.c @@ -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; -- 2.25.1