diff options
author | Mark Brown <broonie@kernel.org> | 2023-03-13 13:21:01 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-03-13 13:21:01 +0000 |
commit | c938bb0cf644a61cc6222cc6d0f106bb5c4b4ff5 (patch) | |
tree | 22e62a91a4674df9043d298994a27acc11830044 /drivers/net/ethernet/netronome/nfp/nfd3/ipsec.c | |
parent | 7d4ae72edba715d8e2dbfb3851879d354d13a7b9 (diff) | |
parent | eeac8ede17557680855031c6f305ece2378af326 (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.c | 25 |
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; + } } } |