From 5b1c363c7b3cd489583285f2ae75400b0494462c Mon Sep 17 00:00:00 2001 From: Hangbin Liu Date: Wed, 18 Apr 2018 13:05:48 +0800 Subject: [PATCH] vxlan: fix ttl inherit behavior Like kernel net-next commit 72f6d71e491e6 ("vxlan: add ttl inherit support"), vxlan ttl inherit should means inherit the inner protocol's ttl value. But currently when we add vxlan with "ttl inherit", we only set ttl 0, which is actually use whatever default value instead of inherit the inner protocol's ttl value. To make a difference with ttl inherit and ttl == 0, we add an attribute IFLA_VXLAN_TTL_INHERIT when "ttl inherit" specified. And use "ttl auto" to means "use whatever default value", the same behavior with ttl == 0. Reported-by: Jianlin Shi Suggested-by: Jiri Benc Signed-off-by: Hangbin Liu Signed-off-by: David Ahern --- ip/iplink_vxlan.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ip/iplink_vxlan.c b/ip/iplink_vxlan.c index be9f35e4..d4d793b6 100644 --- a/ip/iplink_vxlan.c +++ b/ip/iplink_vxlan.c @@ -143,14 +143,18 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv, NEXT_ARG(); check_duparg(&attrs, IFLA_VXLAN_TTL, "ttl", *argv); - if (strcmp(*argv, "inherit") != 0) { + if (strcmp(*argv, "inherit") == 0) { + addattr_l(n, 1024, IFLA_VXLAN_TTL_INHERIT, NULL, 0); + } else if (strcmp(*argv, "auto") == 0) { + addattr8(n, 1024, IFLA_VXLAN_TTL, ttl); + } else { if (get_unsigned(&uval, *argv, 0)) invarg("invalid TTL", *argv); if (uval > 255) invarg("TTL must be <= 255", *argv); ttl = uval; + addattr8(n, 1024, IFLA_VXLAN_TTL, ttl); } - addattr8(n, 1024, IFLA_VXLAN_TTL, ttl); } else if (!matches(*argv, "tos") || !matches(*argv, "dsfield")) { __u32 uval;