xfrm: Support UDP encapsulation in packet offload mode
authorLeon Romanovsky <leonro@nvidia.com>
Wed, 19 Jul 2023 09:26:56 +0000 (12:26 +0300)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 25 Jul 2023 13:08:57 +0000 (15:08 +0200)
Since mlx5 supports UDP encapsulation in packet offload, change the XFRM
core to allow users to configure it.

Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Acked-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/xfrm/xfrm_device.c

index 533697e..3784534 100644 (file)
@@ -247,12 +247,6 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x,
                return -EINVAL;
        }
 
-       /* We don't yet support UDP encapsulation and TFC padding. */
-       if (x->encap || x->tfcpad) {
-               NL_SET_ERR_MSG(extack, "Encapsulation and TFC padding can't be offloaded");
-               return -EINVAL;
-       }
-
        if (xuo->flags &
            ~(XFRM_OFFLOAD_IPV6 | XFRM_OFFLOAD_INBOUND | XFRM_OFFLOAD_PACKET)) {
                NL_SET_ERR_MSG(extack, "Unrecognized flags in offload request");
@@ -260,6 +254,13 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x,
        }
 
        is_packet_offload = xuo->flags & XFRM_OFFLOAD_PACKET;
+
+       /* We don't yet support UDP encapsulation and TFC padding. */
+       if ((!is_packet_offload && x->encap) || x->tfcpad) {
+               NL_SET_ERR_MSG(extack, "Encapsulation and TFC padding can't be offloaded");
+               return -EINVAL;
+       }
+
        dev = dev_get_by_index(net, xuo->ifindex);
        if (!dev) {
                if (!(xuo->flags & XFRM_OFFLOAD_INBOUND)) {