vxlan: add ttl inherit support
Like tos inherit, ttl inherit should also means inherit the inner protocol's ttl values, which actually not implemented in vxlan yet. But we could not treat ttl == 0 as "use the inner TTL", because that would be used also when the "ttl" option is not specified and that would be a behavior change, and breaking real use cases. So add a different attribute IFLA_VXLAN_TTL_INHERIT when "ttl inherit" is specified with ip cmd. Reported-by: Jianlin Shi <jishi@redhat.com> Suggested-by: Jiri Benc <jbenc@redhat.com> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

کامیت شده توسط
David S. Miller

والد
062b3e1b6d
کامیت
72f6d71e49
@@ -2085,9 +2085,13 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
|
||||
local_ip = vxlan->cfg.saddr;
|
||||
dst_cache = &rdst->dst_cache;
|
||||
md->gbp = skb->mark;
|
||||
ttl = vxlan->cfg.ttl;
|
||||
if (!ttl && vxlan_addr_multicast(dst))
|
||||
ttl = 1;
|
||||
if (flags & VXLAN_F_TTL_INHERIT) {
|
||||
ttl = ip_tunnel_get_ttl(old_iph, skb);
|
||||
} else {
|
||||
ttl = vxlan->cfg.ttl;
|
||||
if (!ttl && vxlan_addr_multicast(dst))
|
||||
ttl = 1;
|
||||
}
|
||||
|
||||
tos = vxlan->cfg.tos;
|
||||
if (tos == 1)
|
||||
@@ -2709,6 +2713,7 @@ static const struct nla_policy vxlan_policy[IFLA_VXLAN_MAX + 1] = {
|
||||
[IFLA_VXLAN_GBP] = { .type = NLA_FLAG, },
|
||||
[IFLA_VXLAN_GPE] = { .type = NLA_FLAG, },
|
||||
[IFLA_VXLAN_REMCSUM_NOPARTIAL] = { .type = NLA_FLAG },
|
||||
[IFLA_VXLAN_TTL_INHERIT] = { .type = NLA_FLAG },
|
||||
};
|
||||
|
||||
static int vxlan_validate(struct nlattr *tb[], struct nlattr *data[],
|
||||
@@ -3254,6 +3259,12 @@ static int vxlan_nl2conf(struct nlattr *tb[], struct nlattr *data[],
|
||||
if (data[IFLA_VXLAN_TTL])
|
||||
conf->ttl = nla_get_u8(data[IFLA_VXLAN_TTL]);
|
||||
|
||||
if (data[IFLA_VXLAN_TTL_INHERIT]) {
|
||||
if (changelink)
|
||||
return -EOPNOTSUPP;
|
||||
conf->flags |= VXLAN_F_TTL_INHERIT;
|
||||
}
|
||||
|
||||
if (data[IFLA_VXLAN_LABEL])
|
||||
conf->label = nla_get_be32(data[IFLA_VXLAN_LABEL]) &
|
||||
IPV6_FLOWLABEL_MASK;
|
||||
|
مرجع در شماره جدید
Block a user