xfrm: add new device offload acquire flag
authorRaed Salem <raeds@nvidia.com>
Tue, 14 Mar 2023 08:58:39 +0000 (10:58 +0200)
committerLeon Romanovsky <leon@kernel.org>
Mon, 20 Mar 2023 09:29:33 +0000 (11:29 +0200)
During XFRM acquire flow, a default SA is created to be updated later,
once acquire netlink message is handled in user space. When the relevant
policy is offloaded this default SA is also offloaded to IPsec offload
supporting driver, however this SA does not have context suitable for
offloading in HW, nor is interesting to offload to HW, consequently needs
a special driver handling apart from other offloaded SA(s).
Add a special flag that marks such SA so driver can handle it correctly.

Signed-off-by: Raed Salem <raeds@nvidia.com>
Link: https://lore.kernel.org/r/f5da0834d8c6b82ab9ba38bd4a0c55e71f0e3dab.1678714336.git.leon@kernel.org
Acked-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
include/net/xfrm.h
net/xfrm/xfrm_state.c

index 3e1f70e8e42479c9babadb97967d0dd43e9c6a90..33ee3f5936e6959ba8e27c08a5134428d96f3a01 100644 (file)
@@ -138,6 +138,10 @@ enum {
        XFRM_DEV_OFFLOAD_PACKET,
 };
 
+enum {
+       XFRM_DEV_OFFLOAD_FLAG_ACQ = 1,
+};
+
 struct xfrm_dev_offload {
        struct net_device       *dev;
        netdevice_tracker       dev_tracker;
@@ -145,6 +149,7 @@ struct xfrm_dev_offload {
        unsigned long           offload_handle;
        u8                      dir : 2;
        u8                      type : 2;
+       u8                      flags : 2;
 };
 
 struct xfrm_mode {
index 2ab3e09e2227126f5e5eba7d4f1ea172de090c58..7cca0a1fa5ff2875f496c29af5ff5af0d9143e9c 100644 (file)
@@ -1272,6 +1272,7 @@ found:
                        xso->dir = xdo->dir;
                        xso->dev = xdo->dev;
                        xso->real_dev = xdo->real_dev;
+                       xso->flags = XFRM_DEV_OFFLOAD_FLAG_ACQ;
                        netdev_tracker_alloc(xso->dev, &xso->dev_tracker,
                                             GFP_ATOMIC);
                        error = xso->dev->xfrmdev_ops->xdo_dev_state_add(x, NULL);