net/sched: act_tunnel_key: add support for "don't fragment"
authorDavide Caratti <dcaratti@redhat.com>
Wed, 29 Mar 2023 09:54:52 +0000 (11:54 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 31 Mar 2023 06:24:24 +0000 (23:24 -0700)
extend "act_tunnel_key" to allow specifying TUNNEL_DONT_FRAGMENT.

Suggested-by: Ilya Maximets <i.maximets@ovn.org>
Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Davide Caratti <dcaratti@redhat.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/uapi/linux/tc_act/tc_tunnel_key.h
net/sched/act_tunnel_key.c

index 49ad403..37c6f61 100644 (file)
@@ -34,6 +34,7 @@ enum {
                                         */
        TCA_TUNNEL_KEY_ENC_TOS,         /* u8 */
        TCA_TUNNEL_KEY_ENC_TTL,         /* u8 */
+       TCA_TUNNEL_KEY_NO_FRAG,         /* flag */
        __TCA_TUNNEL_KEY_MAX,
 };
 
index 2d12d26..0c8aa7e 100644 (file)
@@ -420,6 +420,9 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla,
                    nla_get_u8(tb[TCA_TUNNEL_KEY_NO_CSUM]))
                        flags &= ~TUNNEL_CSUM;
 
+               if (nla_get_flag(tb[TCA_TUNNEL_KEY_NO_FRAG]))
+                       flags |= TUNNEL_DONT_FRAGMENT;
+
                if (tb[TCA_TUNNEL_KEY_ENC_DST_PORT])
                        dst_port = nla_get_be16(tb[TCA_TUNNEL_KEY_ENC_DST_PORT]);
 
@@ -747,6 +750,8 @@ static int tunnel_key_dump(struct sk_buff *skb, struct tc_action *a,
                                   key->tp_dst)) ||
                    nla_put_u8(skb, TCA_TUNNEL_KEY_NO_CSUM,
                               !(key->tun_flags & TUNNEL_CSUM)) ||
+                   ((key->tun_flags & TUNNEL_DONT_FRAGMENT) &&
+                    nla_put_flag(skb, TCA_TUNNEL_KEY_NO_FRAG)) ||
                    tunnel_key_opts_dump(skb, info))
                        goto nla_put_failure;