* [PATCH net-next 0/2] net: allow dissecting/matching tunnel control flags @ 2024-01-31 16:13 Davide Caratti 2024-01-31 16:13 ` [PATCH net-next 1/2] flow_dissector: add support for " Davide Caratti 2024-01-31 16:13 ` [PATCH net-next 2/2] net/sched: cls_flower: add support for matching " Davide Caratti 0 siblings, 2 replies; 6+ messages in thread From: Davide Caratti @ 2024-01-31 16:13 UTC (permalink / raw) To: Jamal Hadi Salim, Cong Wang, Jiri Pirko, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, netdev Cc: Marcelo Ricardo Leitner, Xin Long, Ilya Maximets Ilya says: "for correct matching on decapsulated packets, we should match on not only tunnel id and headers, but also on tunnel configuration flags like TUNNEL_NO_CSUM and TUNNEL_DONT_FRAGMENT. This is done to distinguish similar tunnels with slightly different configs. And it is important since tunnel configuration is flow based, i.e. can be different for every packet, even though the main tunnel port is the same." - patch 1 extends the kernel's flow dissector to extract these flags from the packet's tunnel metadata. - patch 2 extends TC flower tomatch on any combination of TUNNEL_NO_CSUM, TUNNEL_OAM and TUNNEL_DONT_FRAGMENT. Davide Caratti (2): flow_dissector: add support for tunnel control flags net/sched: cls_flower: add support for matching tunnel control flags include/net/flow_dissector.h | 11 +++++++++ include/uapi/linux/pkt_cls.h | 3 +++ net/core/flow_dissector.c | 13 ++++++++++- net/sched/cls_flower.c | 45 ++++++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) -- 2.43.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH net-next 1/2] flow_dissector: add support for tunnel control flags 2024-01-31 16:13 [PATCH net-next 0/2] net: allow dissecting/matching tunnel control flags Davide Caratti @ 2024-01-31 16:13 ` Davide Caratti 2024-01-31 16:13 ` [PATCH net-next 2/2] net/sched: cls_flower: add support for matching " Davide Caratti 1 sibling, 0 replies; 6+ messages in thread From: Davide Caratti @ 2024-01-31 16:13 UTC (permalink / raw) To: Jamal Hadi Salim, Cong Wang, Jiri Pirko, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, netdev Cc: Marcelo Ricardo Leitner, Xin Long, Ilya Maximets dissect [no]csum, [no]dontfrag, [no]oam flags on 'external' tunnels. This is a prerequisite for matching these control flags using TC flower. Suggested-by: Ilya Maximets <i.maximets@ovn.org> Signed-off-by: Davide Caratti <dcaratti@redhat.com> --- include/net/flow_dissector.h | 11 +++++++++++ net/core/flow_dissector.c | 13 ++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/net/flow_dissector.h b/include/net/flow_dissector.h index 1a7131d6cb0e..98a0050d5cc3 100644 --- a/include/net/flow_dissector.h +++ b/include/net/flow_dissector.h @@ -329,6 +329,16 @@ struct flow_dissector_key_cfm { #define FLOW_DIS_CFM_MDL_MASK GENMASK(7, 5) #define FLOW_DIS_CFM_MDL_MAX 7 +/** + * struct flow_dissector_key_enc_flags + * @flags: tunnel control flags + */ +struct flow_dissector_key_enc_flags { + __be16 flags; +}; + +#define TUNNEL_FLAGS_PRESENT (TUNNEL_CSUM | TUNNEL_DONT_FRAGMENT | TUNNEL_OAM) + enum flow_dissector_key_id { FLOW_DISSECTOR_KEY_CONTROL, /* struct flow_dissector_key_control */ FLOW_DISSECTOR_KEY_BASIC, /* struct flow_dissector_key_basic */ @@ -363,6 +373,7 @@ enum flow_dissector_key_id { FLOW_DISSECTOR_KEY_L2TPV3, /* struct flow_dissector_key_l2tpv3 */ FLOW_DISSECTOR_KEY_CFM, /* struct flow_dissector_key_cfm */ FLOW_DISSECTOR_KEY_IPSEC, /* struct flow_dissector_key_ipsec */ + FLOW_DISSECTOR_KEY_ENC_FLAGS, /* struct flow_dissector_key_enc_flags */ FLOW_DISSECTOR_KEY_MAX, }; diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 272f09251343..9099a5524d7c 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -382,7 +382,9 @@ skb_flow_dissect_tunnel_info(const struct sk_buff *skb, !dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_ENC_IP) && !dissector_uses_key(flow_dissector, - FLOW_DISSECTOR_KEY_ENC_OPTS)) + FLOW_DISSECTOR_KEY_ENC_OPTS) && + !dissector_uses_key(flow_dissector, + FLOW_DISSECTOR_KEY_ENC_FLAGS)) return; info = skb_tunnel_info(skb); @@ -467,6 +469,15 @@ skb_flow_dissect_tunnel_info(const struct sk_buff *skb, TUNNEL_OPTIONS_PRESENT; } } + + if (dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_ENC_FLAGS)) { + struct flow_dissector_key_enc_flags *enc_flags; + + enc_flags = skb_flow_dissector_target(flow_dissector, + FLOW_DISSECTOR_KEY_ENC_FLAGS, + target_container); + enc_flags->flags = info->key.tun_flags & TUNNEL_FLAGS_PRESENT; + } } EXPORT_SYMBOL(skb_flow_dissect_tunnel_info); -- 2.43.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net-next 2/2] net/sched: cls_flower: add support for matching tunnel control flags 2024-01-31 16:13 [PATCH net-next 0/2] net: allow dissecting/matching tunnel control flags Davide Caratti 2024-01-31 16:13 ` [PATCH net-next 1/2] flow_dissector: add support for " Davide Caratti @ 2024-01-31 16:13 ` Davide Caratti 2024-01-31 21:13 ` Jamal Hadi Salim 1 sibling, 1 reply; 6+ messages in thread From: Davide Caratti @ 2024-01-31 16:13 UTC (permalink / raw) To: Jamal Hadi Salim, Cong Wang, Jiri Pirko, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, netdev Cc: Marcelo Ricardo Leitner, Xin Long, Ilya Maximets extend cls_flower to match flags belonging to 'TUNNEL_FLAGS_PRESENT' mask inside skb tunnel metadata. Suggested-by: Ilya Maximets <i.maximets@ovn.org> Signed-off-by: Davide Caratti <dcaratti@redhat.com> --- include/uapi/linux/pkt_cls.h | 3 +++ net/sched/cls_flower.c | 45 ++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h index ea277039f89d..e3394f9d06b7 100644 --- a/include/uapi/linux/pkt_cls.h +++ b/include/uapi/linux/pkt_cls.h @@ -554,6 +554,9 @@ enum { TCA_FLOWER_KEY_SPI, /* be32 */ TCA_FLOWER_KEY_SPI_MASK, /* be32 */ + TCA_FLOWER_KEY_ENC_FLAGS, /* be16 */ + TCA_FLOWER_KEY_ENC_FLAGS_MASK, /* be16 */ + __TCA_FLOWER_MAX, }; diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index efb9d2811b73..d244169c8471 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -74,6 +74,7 @@ struct fl_flow_key { struct flow_dissector_key_l2tpv3 l2tpv3; struct flow_dissector_key_ipsec ipsec; struct flow_dissector_key_cfm cfm; + struct flow_dissector_key_enc_flags enc_flags; } __aligned(BITS_PER_LONG / 8); /* Ensure that we can do comparisons as longs. */ struct fl_flow_mask_range { @@ -731,6 +732,10 @@ static const struct nla_policy fl_policy[TCA_FLOWER_MAX + 1] = { [TCA_FLOWER_KEY_SPI_MASK] = { .type = NLA_U32 }, [TCA_FLOWER_L2_MISS] = NLA_POLICY_MAX(NLA_U8, 1), [TCA_FLOWER_KEY_CFM] = { .type = NLA_NESTED }, + [TCA_FLOWER_KEY_ENC_FLAGS] = NLA_POLICY_MASK(NLA_BE16, + TUNNEL_FLAGS_PRESENT), + [TCA_FLOWER_KEY_ENC_FLAGS_MASK] = NLA_POLICY_MASK(NLA_BE16, + TUNNEL_FLAGS_PRESENT), }; static const struct nla_policy @@ -1748,6 +1753,21 @@ static int fl_set_key_cfm(struct nlattr **tb, return 0; } +static int fl_set_key_enc_flags(struct nlattr **tb, __be16 *flags_key, + __be16 *flags_mask, struct netlink_ext_ack *extack) +{ + /* mask is mandatory for flags */ + if (!tb[TCA_FLOWER_KEY_ENC_FLAGS_MASK]) { + NL_SET_ERR_MSG(extack, "missing enc_flags mask"); + return -EINVAL; + } + + *flags_key = nla_get_be16(tb[TCA_FLOWER_KEY_ENC_FLAGS]); + *flags_mask = nla_get_be16(tb[TCA_FLOWER_KEY_ENC_FLAGS_MASK]); + + return 0; +} + static int fl_set_key(struct net *net, struct nlattr **tb, struct fl_flow_key *key, struct fl_flow_key *mask, struct netlink_ext_ack *extack) @@ -1986,6 +2006,10 @@ static int fl_set_key(struct net *net, struct nlattr **tb, ret = fl_set_key_flags(tb, &key->control.flags, &mask->control.flags, extack); + if (tb[TCA_FLOWER_KEY_ENC_FLAGS]) + ret = fl_set_key_enc_flags(tb, &key->enc_flags.flags, + &mask->enc_flags.flags, extack); + return ret; } @@ -2098,6 +2122,8 @@ static void fl_init_dissector(struct flow_dissector *dissector, FLOW_DISSECTOR_KEY_IPSEC, ipsec); FL_KEY_SET_IF_MASKED(mask, keys, cnt, FLOW_DISSECTOR_KEY_CFM, cfm); + FL_KEY_SET_IF_MASKED(mask, keys, cnt, + FLOW_DISSECTOR_KEY_ENC_FLAGS, enc_flags); skb_flow_dissector_init(dissector, keys, cnt); } @@ -3185,6 +3211,22 @@ static int fl_dump_key_cfm(struct sk_buff *skb, return err; } +static int fl_dump_key_enc_flags(struct sk_buff *skb, + struct flow_dissector_key_enc_flags *key, + struct flow_dissector_key_enc_flags *mask) +{ + if (!memchr_inv(mask, 0, sizeof(*mask))) + return 0; + + if (nla_put_be16(skb, TCA_FLOWER_KEY_ENC_FLAGS, key->flags)) + return -EMSGSIZE; + + if (nla_put_be16(skb, TCA_FLOWER_KEY_ENC_FLAGS_MASK, mask->flags)) + return -EMSGSIZE; + + return 0; +} + static int fl_dump_key_options(struct sk_buff *skb, int enc_opt_type, struct flow_dissector_key_enc_opts *enc_opts) { @@ -3481,6 +3523,9 @@ static int fl_dump_key(struct sk_buff *skb, struct net *net, if (fl_dump_key_cfm(skb, &key->cfm, &mask->cfm)) goto nla_put_failure; + if (fl_dump_key_enc_flags(skb, &key->enc_flags, &mask->enc_flags)) + goto nla_put_failure; + return 0; nla_put_failure: -- 2.43.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 2/2] net/sched: cls_flower: add support for matching tunnel control flags 2024-01-31 16:13 ` [PATCH net-next 2/2] net/sched: cls_flower: add support for matching " Davide Caratti @ 2024-01-31 21:13 ` Jamal Hadi Salim 2024-02-01 11:14 ` Davide Caratti 0 siblings, 1 reply; 6+ messages in thread From: Jamal Hadi Salim @ 2024-01-31 21:13 UTC (permalink / raw) To: Davide Caratti Cc: Cong Wang, Jiri Pirko, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, netdev, Marcelo Ricardo Leitner, Xin Long, Ilya Maximets On Wed, Jan 31, 2024 at 11:16 AM Davide Caratti <dcaratti@redhat.com> wrote: > > extend cls_flower to match flags belonging to 'TUNNEL_FLAGS_PRESENT' mask > inside skb tunnel metadata. > > Suggested-by: Ilya Maximets <i.maximets@ovn.org> > Signed-off-by: Davide Caratti <dcaratti@redhat.com> > --- > include/uapi/linux/pkt_cls.h | 3 +++ > net/sched/cls_flower.c | 45 ++++++++++++++++++++++++++++++++++++ > 2 files changed, 48 insertions(+) > > diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h > index ea277039f89d..e3394f9d06b7 100644 > --- a/include/uapi/linux/pkt_cls.h > +++ b/include/uapi/linux/pkt_cls.h > @@ -554,6 +554,9 @@ enum { > TCA_FLOWER_KEY_SPI, /* be32 */ > TCA_FLOWER_KEY_SPI_MASK, /* be32 */ > > + TCA_FLOWER_KEY_ENC_FLAGS, /* be16 */ > + TCA_FLOWER_KEY_ENC_FLAGS_MASK, /* be16 */ > + > __TCA_FLOWER_MAX, > }; > > diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c > index efb9d2811b73..d244169c8471 100644 > --- a/net/sched/cls_flower.c > +++ b/net/sched/cls_flower.c > @@ -74,6 +74,7 @@ struct fl_flow_key { > struct flow_dissector_key_l2tpv3 l2tpv3; > struct flow_dissector_key_ipsec ipsec; > struct flow_dissector_key_cfm cfm; > + struct flow_dissector_key_enc_flags enc_flags; > } __aligned(BITS_PER_LONG / 8); /* Ensure that we can do comparisons as longs. */ > > struct fl_flow_mask_range { > @@ -731,6 +732,10 @@ static const struct nla_policy fl_policy[TCA_FLOWER_MAX + 1] = { > [TCA_FLOWER_KEY_SPI_MASK] = { .type = NLA_U32 }, > [TCA_FLOWER_L2_MISS] = NLA_POLICY_MAX(NLA_U8, 1), > [TCA_FLOWER_KEY_CFM] = { .type = NLA_NESTED }, > + [TCA_FLOWER_KEY_ENC_FLAGS] = NLA_POLICY_MASK(NLA_BE16, > + TUNNEL_FLAGS_PRESENT), > + [TCA_FLOWER_KEY_ENC_FLAGS_MASK] = NLA_POLICY_MASK(NLA_BE16, > + TUNNEL_FLAGS_PRESENT), > }; > > static const struct nla_policy > @@ -1748,6 +1753,21 @@ static int fl_set_key_cfm(struct nlattr **tb, > return 0; > } > > +static int fl_set_key_enc_flags(struct nlattr **tb, __be16 *flags_key, > + __be16 *flags_mask, struct netlink_ext_ack *extack) > +{ > + /* mask is mandatory for flags */ > + if (!tb[TCA_FLOWER_KEY_ENC_FLAGS_MASK]) { if (NL_REQ_ATTR_CHECK(extack,...)) > + NL_SET_ERR_MSG(extack, "missing enc_flags mask"); > + return -EINVAL; > + } > + > + *flags_key = nla_get_be16(tb[TCA_FLOWER_KEY_ENC_FLAGS]); > + *flags_mask = nla_get_be16(tb[TCA_FLOWER_KEY_ENC_FLAGS_MASK]); > + > + return 0; > +} > + > static int fl_set_key(struct net *net, struct nlattr **tb, > struct fl_flow_key *key, struct fl_flow_key *mask, > struct netlink_ext_ack *extack) > @@ -1986,6 +2006,10 @@ static int fl_set_key(struct net *net, struct nlattr **tb, > ret = fl_set_key_flags(tb, &key->control.flags, > &mask->control.flags, extack); > > + if (tb[TCA_FLOWER_KEY_ENC_FLAGS]) And here.. cheers, jamal > + ret = fl_set_key_enc_flags(tb, &key->enc_flags.flags, > + &mask->enc_flags.flags, extack); > + > return ret; > } > > @@ -2098,6 +2122,8 @@ static void fl_init_dissector(struct flow_dissector *dissector, > FLOW_DISSECTOR_KEY_IPSEC, ipsec); > FL_KEY_SET_IF_MASKED(mask, keys, cnt, > FLOW_DISSECTOR_KEY_CFM, cfm); > + FL_KEY_SET_IF_MASKED(mask, keys, cnt, > + FLOW_DISSECTOR_KEY_ENC_FLAGS, enc_flags); > > skb_flow_dissector_init(dissector, keys, cnt); > } > @@ -3185,6 +3211,22 @@ static int fl_dump_key_cfm(struct sk_buff *skb, > return err; > } > > +static int fl_dump_key_enc_flags(struct sk_buff *skb, > + struct flow_dissector_key_enc_flags *key, > + struct flow_dissector_key_enc_flags *mask) > +{ > + if (!memchr_inv(mask, 0, sizeof(*mask))) > + return 0; > + > + if (nla_put_be16(skb, TCA_FLOWER_KEY_ENC_FLAGS, key->flags)) > + return -EMSGSIZE; > + > + if (nla_put_be16(skb, TCA_FLOWER_KEY_ENC_FLAGS_MASK, mask->flags)) > + return -EMSGSIZE; > + > + return 0; > +} > + > static int fl_dump_key_options(struct sk_buff *skb, int enc_opt_type, > struct flow_dissector_key_enc_opts *enc_opts) > { > @@ -3481,6 +3523,9 @@ static int fl_dump_key(struct sk_buff *skb, struct net *net, > if (fl_dump_key_cfm(skb, &key->cfm, &mask->cfm)) > goto nla_put_failure; > > + if (fl_dump_key_enc_flags(skb, &key->enc_flags, &mask->enc_flags)) > + goto nla_put_failure; > + > return 0; > > nla_put_failure: > -- > 2.43.0 > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 2/2] net/sched: cls_flower: add support for matching tunnel control flags 2024-01-31 21:13 ` Jamal Hadi Salim @ 2024-02-01 11:14 ` Davide Caratti 2024-02-01 14:59 ` Jamal Hadi Salim 0 siblings, 1 reply; 6+ messages in thread From: Davide Caratti @ 2024-02-01 11:14 UTC (permalink / raw) To: Jamal Hadi Salim Cc: Cong Wang, Jiri Pirko, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, netdev, Marcelo Ricardo Leitner, Xin Long, Ilya Maximets hello Jamal, thanks for looking at this! On Wed, Jan 31, 2024 at 04:13:25PM -0500, Jamal Hadi Salim wrote: > On Wed, Jan 31, 2024 at 11:16 AM Davide Caratti <dcaratti@redhat.com> wrote: > > > > extend cls_flower to match flags belonging to 'TUNNEL_FLAGS_PRESENT' mask > > inside skb tunnel metadata. > > > > Suggested-by: Ilya Maximets <i.maximets@ovn.org> > > Signed-off-by: Davide Caratti <dcaratti@redhat.com> [...] > > @@ -1748,6 +1753,21 @@ static int fl_set_key_cfm(struct nlattr **tb, > > return 0; > > } > > > > +static int fl_set_key_enc_flags(struct nlattr **tb, __be16 *flags_key, > > + __be16 *flags_mask, struct netlink_ext_ack *extack) > > +{ > > + /* mask is mandatory for flags */ > > + if (!tb[TCA_FLOWER_KEY_ENC_FLAGS_MASK]) { > > if (NL_REQ_ATTR_CHECK(extack,...)) > > > + NL_SET_ERR_MSG(extack, "missing enc_flags mask"); > > + return -EINVAL; > > + } right, I will change it in the v2. [...] > > @@ -1986,6 +2006,10 @@ static int fl_set_key(struct net *net, struct nlattr **tb, > > ret = fl_set_key_flags(tb, &key->control.flags, > > &mask->control.flags, extack); > > > > + if (tb[TCA_FLOWER_KEY_ENC_FLAGS]) > > And here.. > > cheers, > jamal > > > + ret = fl_set_key_enc_flags(tb, &key->enc_flags.flags, > > + &mask->enc_flags.flags, extack); > > + > > return ret; here I don't see any advantage in doing if (!NL_REQ_ATTR_CHECK(extack, NULL, tb, TCA_FLOWER_KEY_ENC_FLAGS)) ret = fl_set_key_enc_flags(tb, ... ); return ret; the attribute is not mandatory, so a call to NL_SET_ERR_ATTR_MISS() would do a useless/misleading assignment in extack->miss_type. However, thanks for bringing the attention here :) At a second look, this hunk introduces a bug: in case the parsing of TCA_FLOWER_KEY_FLAGS fails, 'ret' is -EINVAL. If attributes TCA_FLOWER_KEY_ENC_FLAGS + TCA_FLOWER_KEY_ENC_FLAGS_MASK are good to go, 'ret' will be overwritten with 0 and flower will accept the rule... this is not intentional :) will fix this in the v2. -- davide ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net-next 2/2] net/sched: cls_flower: add support for matching tunnel control flags 2024-02-01 11:14 ` Davide Caratti @ 2024-02-01 14:59 ` Jamal Hadi Salim 0 siblings, 0 replies; 6+ messages in thread From: Jamal Hadi Salim @ 2024-02-01 14:59 UTC (permalink / raw) To: Davide Caratti Cc: Cong Wang, Jiri Pirko, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, netdev, Marcelo Ricardo Leitner, Xin Long, Ilya Maximets Hi Davide, On Thu, Feb 1, 2024 at 6:14 AM Davide Caratti <dcaratti@redhat.com> wrote: > > hello Jamal, thanks for looking at this! > > On Wed, Jan 31, 2024 at 04:13:25PM -0500, Jamal Hadi Salim wrote: > > On Wed, Jan 31, 2024 at 11:16 AM Davide Caratti <dcaratti@redhat.com> wrote: > > > > > > extend cls_flower to match flags belonging to 'TUNNEL_FLAGS_PRESENT' mask > > > inside skb tunnel metadata. > > > > > > Suggested-by: Ilya Maximets <i.maximets@ovn.org> > > > Signed-off-by: Davide Caratti <dcaratti@redhat.com> > > [...] > > > > @@ -1748,6 +1753,21 @@ static int fl_set_key_cfm(struct nlattr **tb, > > > return 0; > > > } > > > > > > +static int fl_set_key_enc_flags(struct nlattr **tb, __be16 *flags_key, > > > + __be16 *flags_mask, struct netlink_ext_ack *extack) > > > +{ > > > + /* mask is mandatory for flags */ > > > + if (!tb[TCA_FLOWER_KEY_ENC_FLAGS_MASK]) { > > > > if (NL_REQ_ATTR_CHECK(extack,...)) > > > > > + NL_SET_ERR_MSG(extack, "missing enc_flags mask"); > > > + return -EINVAL; > > > + } > > right, I will change it in the v2. > > [...] > > > > @@ -1986,6 +2006,10 @@ static int fl_set_key(struct net *net, struct nlattr **tb, > > > ret = fl_set_key_flags(tb, &key->control.flags, > > > &mask->control.flags, extack); > > > > > > + if (tb[TCA_FLOWER_KEY_ENC_FLAGS]) > > > > And here.. > > > > cheers, > > jamal > > > > > + ret = fl_set_key_enc_flags(tb, &key->enc_flags.flags, > > > + &mask->enc_flags.flags, extack); > > > + > > > return ret; > > here I don't see any advantage in doing > > if (!NL_REQ_ATTR_CHECK(extack, NULL, tb, TCA_FLOWER_KEY_ENC_FLAGS)) > ret = fl_set_key_enc_flags(tb, ... ); > > return ret; > Ok, i was a little overzealous there. When i see tb[] my brain goes NL_REQ_ATTR_CHECK ;-> > the attribute is not mandatory, so a call to NL_SET_ERR_ATTR_MISS() > would do a useless/misleading assignment in extack->miss_type. > True. > However, thanks for bringing the attention here :) At a second look, > this hunk introduces a bug: in case the parsing of TCA_FLOWER_KEY_FLAGS > fails, 'ret' is -EINVAL. If attributes TCA_FLOWER_KEY_ENC_FLAGS + > TCA_FLOWER_KEY_ENC_FLAGS_MASK are good to go, 'ret' will be overwritten > with 0 and flower will accept the rule... this is not intentional :) > will fix this in the v2. > np ;-> cheers, jamal > -- > davide > > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-02-01 14:59 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-01-31 16:13 [PATCH net-next 0/2] net: allow dissecting/matching tunnel control flags Davide Caratti 2024-01-31 16:13 ` [PATCH net-next 1/2] flow_dissector: add support for " Davide Caratti 2024-01-31 16:13 ` [PATCH net-next 2/2] net/sched: cls_flower: add support for matching " Davide Caratti 2024-01-31 21:13 ` Jamal Hadi Salim 2024-02-01 11:14 ` Davide Caratti 2024-02-01 14:59 ` Jamal Hadi Salim
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).