Merge branch 'net-improve-vxlan-option-process-in-net_sched-and-lwtunnel'
Xin Long says: ==================== net: improve vxlan option process in net_sched and lwtunnel This patch is to do some mask when setting vxlan option in net_sched and lwtunnel, so that only available bits can be set on vxlan md gbp. This would help when users don't know exactly vxlan's gbp bits, and avoid some mismatch because of some unavailable bits set by users. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@ -121,6 +121,9 @@ struct vxlanhdr_gbp {
|
||||
#define VXLAN_GBP_POLICY_APPLIED (BIT(3) << 16)
|
||||
#define VXLAN_GBP_ID_MASK (0xFFFF)
|
||||
|
||||
#define VXLAN_GBP_MASK (VXLAN_GBP_DONT_LEARN | VXLAN_GBP_POLICY_APPLIED | \
|
||||
VXLAN_GBP_ID_MASK)
|
||||
|
||||
/*
|
||||
* VXLAN Generic Protocol Extension (VXLAN_F_GPE):
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
|
@ -554,6 +554,7 @@ static int ip_tun_parse_opts_vxlan(struct nlattr *attr,
|
||||
|
||||
attr = tb[LWTUNNEL_IP_OPT_VXLAN_GBP];
|
||||
md->gbp = nla_get_u32(attr);
|
||||
md->gbp &= VXLAN_GBP_MASK;
|
||||
info->key.tun_flags |= TUNNEL_VXLAN_OPT;
|
||||
}
|
||||
|
||||
|
@ -156,6 +156,7 @@ tunnel_key_copy_vxlan_opt(const struct nlattr *nla, void *dst, int dst_len,
|
||||
struct vxlan_metadata *md = dst;
|
||||
|
||||
md->gbp = nla_get_u32(tb[TCA_TUNNEL_KEY_ENC_OPT_VXLAN_GBP]);
|
||||
md->gbp &= VXLAN_GBP_MASK;
|
||||
}
|
||||
|
||||
return sizeof(struct vxlan_metadata);
|
||||
|
@ -1175,8 +1175,10 @@ static int fl_set_vxlan_opt(const struct nlattr *nla, struct fl_flow_key *key,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (tb[TCA_FLOWER_KEY_ENC_OPT_VXLAN_GBP])
|
||||
if (tb[TCA_FLOWER_KEY_ENC_OPT_VXLAN_GBP]) {
|
||||
md->gbp = nla_get_u32(tb[TCA_FLOWER_KEY_ENC_OPT_VXLAN_GBP]);
|
||||
md->gbp &= VXLAN_GBP_MASK;
|
||||
}
|
||||
|
||||
return sizeof(*md);
|
||||
}
|
||||
|
Reference in New Issue
Block a user