Skip to content

Commit 11036bd

Browse files
Asbjørn Sloth Tønnesenkuba-moo
authored andcommitted
net/sched: cls_flower: rework TCA_FLOWER_KEY_ENC_FLAGS usage
This patch changes how TCA_FLOWER_KEY_ENC_FLAGS is used, so that it is used with TCA_FLOWER_KEY_FLAGS_* flags, in the same way as TCA_FLOWER_KEY_FLAGS is currently used. Where TCA_FLOWER_KEY_FLAGS uses {key,mask}->control.flags, then TCA_FLOWER_KEY_ENC_FLAGS now uses {key,mask}->enc_control.flags, therefore {key,mask}->enc_flags is now unused. As the generic fl_set_key_flags/fl_dump_key_flags() is used with encap set to true, then fl_{set,dump}_key_enc_flags() is removed. This breaks unreleased userspace API (net-next since 2024-06-04). Signed-off-by: Asbjørn Sloth Tønnesen <[email protected]> Tested-by: Davide Caratti <[email protected]> Reviewed-by: Davide Caratti <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 988f872 commit 11036bd

File tree

2 files changed

+15
-45
lines changed

2 files changed

+15
-45
lines changed

include/uapi/linux/pkt_cls.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -554,8 +554,8 @@ enum {
554554
TCA_FLOWER_KEY_SPI, /* be32 */
555555
TCA_FLOWER_KEY_SPI_MASK, /* be32 */
556556

557-
TCA_FLOWER_KEY_ENC_FLAGS, /* u32 */
558-
TCA_FLOWER_KEY_ENC_FLAGS_MASK, /* u32 */
557+
TCA_FLOWER_KEY_ENC_FLAGS, /* be32 */
558+
TCA_FLOWER_KEY_ENC_FLAGS_MASK, /* be32 */
559559

560560
__TCA_FLOWER_MAX,
561561
};

net/sched/cls_flower.c

Lines changed: 13 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@
4545
(TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT | \
4646
TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST)
4747

48-
#define TUNNEL_FLAGS_PRESENT (\
49-
_BITUL(IP_TUNNEL_CSUM_BIT) | \
50-
_BITUL(IP_TUNNEL_DONT_FRAGMENT_BIT) | \
51-
_BITUL(IP_TUNNEL_OAM_BIT) | \
52-
_BITUL(IP_TUNNEL_CRIT_OPT_BIT))
48+
#define TCA_FLOWER_KEY_ENC_FLAGS_POLICY_MASK \
49+
(TCA_FLOWER_KEY_FLAGS_TUNNEL_CSUM | \
50+
TCA_FLOWER_KEY_FLAGS_TUNNEL_DONT_FRAGMENT | \
51+
TCA_FLOWER_KEY_FLAGS_TUNNEL_OAM | \
52+
TCA_FLOWER_KEY_FLAGS_TUNNEL_CRIT_OPT)
5353

5454
struct fl_flow_key {
5555
struct flow_dissector_key_meta meta;
@@ -745,10 +745,10 @@ static const struct nla_policy fl_policy[TCA_FLOWER_MAX + 1] = {
745745
[TCA_FLOWER_KEY_SPI_MASK] = { .type = NLA_U32 },
746746
[TCA_FLOWER_L2_MISS] = NLA_POLICY_MAX(NLA_U8, 1),
747747
[TCA_FLOWER_KEY_CFM] = { .type = NLA_NESTED },
748-
[TCA_FLOWER_KEY_ENC_FLAGS] = NLA_POLICY_MASK(NLA_U32,
749-
TUNNEL_FLAGS_PRESENT),
750-
[TCA_FLOWER_KEY_ENC_FLAGS_MASK] = NLA_POLICY_MASK(NLA_U32,
751-
TUNNEL_FLAGS_PRESENT),
748+
[TCA_FLOWER_KEY_ENC_FLAGS] = NLA_POLICY_MASK(NLA_BE32,
749+
TCA_FLOWER_KEY_ENC_FLAGS_POLICY_MASK),
750+
[TCA_FLOWER_KEY_ENC_FLAGS_MASK] = NLA_POLICY_MASK(NLA_BE32,
751+
TCA_FLOWER_KEY_ENC_FLAGS_POLICY_MASK),
752752
};
753753

754754
static const struct nla_policy
@@ -1866,21 +1866,6 @@ static int fl_set_key_cfm(struct nlattr **tb,
18661866
return 0;
18671867
}
18681868

1869-
static int fl_set_key_enc_flags(struct nlattr **tb, u32 *flags_key,
1870-
u32 *flags_mask, struct netlink_ext_ack *extack)
1871-
{
1872-
/* mask is mandatory for flags */
1873-
if (NL_REQ_ATTR_CHECK(extack, NULL, tb, TCA_FLOWER_KEY_ENC_FLAGS_MASK)) {
1874-
NL_SET_ERR_MSG(extack, "missing enc_flags mask");
1875-
return -EINVAL;
1876-
}
1877-
1878-
*flags_key = nla_get_u32(tb[TCA_FLOWER_KEY_ENC_FLAGS]);
1879-
*flags_mask = nla_get_u32(tb[TCA_FLOWER_KEY_ENC_FLAGS_MASK]);
1880-
1881-
return 0;
1882-
}
1883-
18841869
static int fl_set_key(struct net *net, struct nlattr **tb,
18851870
struct fl_flow_key *key, struct fl_flow_key *mask,
18861871
struct netlink_ext_ack *extack)
@@ -2123,8 +2108,8 @@ static int fl_set_key(struct net *net, struct nlattr **tb,
21232108
}
21242109

21252110
if (tb[TCA_FLOWER_KEY_ENC_FLAGS])
2126-
ret = fl_set_key_enc_flags(tb, &key->enc_flags.flags,
2127-
&mask->enc_flags.flags, extack);
2111+
ret = fl_set_key_flags(tb, true, &key->enc_control.flags,
2112+
&mask->enc_control.flags, extack);
21282113

21292114
return ret;
21302115
}
@@ -3381,22 +3366,6 @@ static int fl_dump_key_cfm(struct sk_buff *skb,
33813366
return err;
33823367
}
33833368

3384-
static int fl_dump_key_enc_flags(struct sk_buff *skb,
3385-
struct flow_dissector_key_enc_flags *key,
3386-
struct flow_dissector_key_enc_flags *mask)
3387-
{
3388-
if (!memchr_inv(mask, 0, sizeof(*mask)))
3389-
return 0;
3390-
3391-
if (nla_put_u32(skb, TCA_FLOWER_KEY_ENC_FLAGS, key->flags))
3392-
return -EMSGSIZE;
3393-
3394-
if (nla_put_u32(skb, TCA_FLOWER_KEY_ENC_FLAGS_MASK, mask->flags))
3395-
return -EMSGSIZE;
3396-
3397-
return 0;
3398-
}
3399-
34003369
static int fl_dump_key_options(struct sk_buff *skb, int enc_opt_type,
34013370
struct flow_dissector_key_enc_opts *enc_opts)
34023371
{
@@ -3699,7 +3668,8 @@ static int fl_dump_key(struct sk_buff *skb, struct net *net,
36993668
if (fl_dump_key_cfm(skb, &key->cfm, &mask->cfm))
37003669
goto nla_put_failure;
37013670

3702-
if (fl_dump_key_enc_flags(skb, &key->enc_flags, &mask->enc_flags))
3671+
if (fl_dump_key_flags(skb, true, key->enc_control.flags,
3672+
mask->enc_control.flags))
37033673
goto nla_put_failure;
37043674

37053675
return 0;

0 commit comments

Comments
 (0)