]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cn10k-ipsec: Allow ipsec crypto offload for skb with SA
authorBharat Bhushan <bbhushan2@marvell.com>
Wed, 4 Dec 2024 05:56:58 +0000 (11:26 +0530)
committerDavid S. Miller <davem@davemloft.net>
Mon, 9 Dec 2024 12:15:31 +0000 (12:15 +0000)
Allow to use hardware offload for outbound ipsec crypto
mode if security association (SA) is set for a given skb.

Signed-off-by: Bharat Bhushan <bbhushan2@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/octeontx2/nic/cn10k_ipsec.c

index 9a9b06f4c2cc387d7aae1336e0ffec38a8f23a2b..e9bf4632695e07b422f56dcd144aa46692c7e770 100644 (file)
@@ -746,9 +746,24 @@ static void cn10k_ipsec_del_state(struct xfrm_state *x)
                queue_work(pf->ipsec.sa_workq, &pf->ipsec.sa_work);
 }
 
+static bool cn10k_ipsec_offload_ok(struct sk_buff *skb, struct xfrm_state *x)
+{
+       if (x->props.family == AF_INET) {
+               /* Offload with IPv4 options is not supported yet */
+               if (ip_hdr(skb)->ihl > 5)
+                       return false;
+       } else {
+               /* Offload with IPv6 extension headers is not support yet */
+               if (ipv6_ext_hdr(ipv6_hdr(skb)->nexthdr))
+                       return false;
+       }
+       return true;
+}
+
 static const struct xfrmdev_ops cn10k_ipsec_xfrmdev_ops = {
        .xdo_dev_state_add      = cn10k_ipsec_add_state,
        .xdo_dev_state_delete   = cn10k_ipsec_del_state,
+       .xdo_dev_offload_ok     = cn10k_ipsec_offload_ok,
 };
 
 static void cn10k_ipsec_sa_wq_handler(struct work_struct *work)