mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 20:23:57 +08:00
cls_flower: Add extack support for mpls options
Pass extack down to fl_set_key_mpls() and set message on error. Signed-off-by: Guillaume Nault <gnault@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e4a58ef3ce
commit
442f730e48
@ -766,7 +766,8 @@ static int fl_set_key_port_range(struct nlattr **tb, struct fl_flow_key *key,
|
|||||||
|
|
||||||
static int fl_set_key_mpls(struct nlattr **tb,
|
static int fl_set_key_mpls(struct nlattr **tb,
|
||||||
struct flow_dissector_key_mpls *key_val,
|
struct flow_dissector_key_mpls *key_val,
|
||||||
struct flow_dissector_key_mpls *key_mask)
|
struct flow_dissector_key_mpls *key_mask,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
if (tb[TCA_FLOWER_KEY_MPLS_TTL]) {
|
if (tb[TCA_FLOWER_KEY_MPLS_TTL]) {
|
||||||
key_val->mpls_ttl = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TTL]);
|
key_val->mpls_ttl = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TTL]);
|
||||||
@ -775,24 +776,36 @@ static int fl_set_key_mpls(struct nlattr **tb,
|
|||||||
if (tb[TCA_FLOWER_KEY_MPLS_BOS]) {
|
if (tb[TCA_FLOWER_KEY_MPLS_BOS]) {
|
||||||
u8 bos = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_BOS]);
|
u8 bos = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_BOS]);
|
||||||
|
|
||||||
if (bos & ~MPLS_BOS_MASK)
|
if (bos & ~MPLS_BOS_MASK) {
|
||||||
|
NL_SET_ERR_MSG_ATTR(extack,
|
||||||
|
tb[TCA_FLOWER_KEY_MPLS_BOS],
|
||||||
|
"Bottom Of Stack (BOS) must be 0 or 1");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
key_val->mpls_bos = bos;
|
key_val->mpls_bos = bos;
|
||||||
key_mask->mpls_bos = MPLS_BOS_MASK;
|
key_mask->mpls_bos = MPLS_BOS_MASK;
|
||||||
}
|
}
|
||||||
if (tb[TCA_FLOWER_KEY_MPLS_TC]) {
|
if (tb[TCA_FLOWER_KEY_MPLS_TC]) {
|
||||||
u8 tc = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TC]);
|
u8 tc = nla_get_u8(tb[TCA_FLOWER_KEY_MPLS_TC]);
|
||||||
|
|
||||||
if (tc & ~MPLS_TC_MASK)
|
if (tc & ~MPLS_TC_MASK) {
|
||||||
|
NL_SET_ERR_MSG_ATTR(extack,
|
||||||
|
tb[TCA_FLOWER_KEY_MPLS_TC],
|
||||||
|
"Traffic Class (TC) must be between 0 and 7");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
key_val->mpls_tc = tc;
|
key_val->mpls_tc = tc;
|
||||||
key_mask->mpls_tc = MPLS_TC_MASK;
|
key_mask->mpls_tc = MPLS_TC_MASK;
|
||||||
}
|
}
|
||||||
if (tb[TCA_FLOWER_KEY_MPLS_LABEL]) {
|
if (tb[TCA_FLOWER_KEY_MPLS_LABEL]) {
|
||||||
u32 label = nla_get_u32(tb[TCA_FLOWER_KEY_MPLS_LABEL]);
|
u32 label = nla_get_u32(tb[TCA_FLOWER_KEY_MPLS_LABEL]);
|
||||||
|
|
||||||
if (label & ~MPLS_LABEL_MASK)
|
if (label & ~MPLS_LABEL_MASK) {
|
||||||
|
NL_SET_ERR_MSG_ATTR(extack,
|
||||||
|
tb[TCA_FLOWER_KEY_MPLS_LABEL],
|
||||||
|
"Label must be between 0 and 1048575");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
}
|
||||||
key_val->mpls_label = label;
|
key_val->mpls_label = label;
|
||||||
key_mask->mpls_label = MPLS_LABEL_MASK;
|
key_mask->mpls_label = MPLS_LABEL_MASK;
|
||||||
}
|
}
|
||||||
@ -1364,7 +1377,7 @@ static int fl_set_key(struct net *net, struct nlattr **tb,
|
|||||||
sizeof(key->icmp.code));
|
sizeof(key->icmp.code));
|
||||||
} else if (key->basic.n_proto == htons(ETH_P_MPLS_UC) ||
|
} else if (key->basic.n_proto == htons(ETH_P_MPLS_UC) ||
|
||||||
key->basic.n_proto == htons(ETH_P_MPLS_MC)) {
|
key->basic.n_proto == htons(ETH_P_MPLS_MC)) {
|
||||||
ret = fl_set_key_mpls(tb, &key->mpls, &mask->mpls);
|
ret = fl_set_key_mpls(tb, &key->mpls, &mask->mpls, extack);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
} else if (key->basic.n_proto == htons(ETH_P_ARP) ||
|
} else if (key->basic.n_proto == htons(ETH_P_ARP) ||
|
||||||
|
Loading…
Reference in New Issue
Block a user