summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/netronome/nfp/nfd3/ipsec.c
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2023-03-13 13:21:01 +0000
committerMark Brown <broonie@kernel.org>2023-03-13 13:21:01 +0000
commitc938bb0cf644a61cc6222cc6d0f106bb5c4b4ff5 (patch)
tree22e62a91a4674df9043d298994a27acc11830044 /drivers/net/ethernet/netronome/nfp/nfd3/ipsec.c
parent7d4ae72edba715d8e2dbfb3851879d354d13a7b9 (diff)
parenteeac8ede17557680855031c6f305ece2378af326 (diff)
Merge tag 'v6.3-rc2' into spi-6.4 to fix clock related boot issues
Linux 6.3-rc2
Diffstat (limited to 'drivers/net/ethernet/netronome/nfp/nfd3/ipsec.c')
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfd3/ipsec.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/nfd3/ipsec.c b/drivers/net/ethernet/netronome/nfp/nfd3/ipsec.c
index e90f8c975903..51087693072c 100644
--- a/drivers/net/ethernet/netronome/nfp/nfd3/ipsec.c
+++ b/drivers/net/ethernet/netronome/nfp/nfd3/ipsec.c
@@ -10,9 +10,30 @@
void nfp_nfd3_ipsec_tx(struct nfp_nfd3_tx_desc *txd, struct sk_buff *skb)
{
struct xfrm_state *x = xfrm_input_state(skb);
+ struct xfrm_offload *xo = xfrm_offload(skb);
+ struct iphdr *iph = ip_hdr(skb);
+ int l4_proto;
if (x->xso.dev && (x->xso.dev->features & NETIF_F_HW_ESP_TX_CSUM)) {
- txd->flags |= NFD3_DESC_TX_CSUM | NFD3_DESC_TX_IP4_CSUM |
- NFD3_DESC_TX_TCP_CSUM | NFD3_DESC_TX_UDP_CSUM;
+ txd->flags |= NFD3_DESC_TX_CSUM;
+
+ if (iph->version == 4)
+ txd->flags |= NFD3_DESC_TX_IP4_CSUM;
+
+ if (x->props.mode == XFRM_MODE_TRANSPORT)
+ l4_proto = xo->proto;
+ else if (x->props.mode == XFRM_MODE_TUNNEL)
+ l4_proto = xo->inner_ipproto;
+ else
+ return;
+
+ switch (l4_proto) {
+ case IPPROTO_UDP:
+ txd->flags |= NFD3_DESC_TX_UDP_CSUM;
+ return;
+ case IPPROTO_TCP:
+ txd->flags |= NFD3_DESC_TX_TCP_CSUM;
+ return;
+ }
}
}