From c4743c4d9b73a1d2f4253d27ea6ef20fe7c53a6d Mon Sep 17 00:00:00 2001 From: Serhey Popovych Date: Fri, 19 Jan 2018 18:44:01 +0200 Subject: [PATCH] iptnl/ip6tnl: Unify ttl/hoplimit parsing routines Handle "inherit" case properly for gre6 and ip6tnl. Use get_u8() in gre to parse ttl/hoplimit. Be consistent about "hlim" alias to ttl/hoplimit support. Signed-off-by: Serhey Popovych Signed-off-by: Stephen Hemminger --- ip/link_gre.c | 10 +++------- ip/link_gre6.c | 13 +++++++------ ip/link_ip6tnl.c | 14 +++++++------- ip/link_iptnl.c | 3 ++- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/ip/link_gre.c b/ip/link_gre.c index 6254e887..009ddfc7 100644 --- a/ip/link_gre.c +++ b/ip/link_gre.c @@ -229,16 +229,12 @@ get_failed: exit(-1); } } else if (!matches(*argv, "ttl") || - !matches(*argv, "hoplimit")) { - unsigned int uval; - + !matches(*argv, "hoplimit") || + !matches(*argv, "hlim")) { NEXT_ARG(); if (strcmp(*argv, "inherit") != 0) { - if (get_unsigned(&uval, *argv, 0)) + if (get_u8(&ttl, *argv, 0)) invarg("invalid TTL\n", *argv); - if (uval > 255) - invarg("TTL must be <= 255\n", *argv); - ttl = uval; } else ttl = 0; } else if (!matches(*argv, "tos") || diff --git a/ip/link_gre6.c b/ip/link_gre6.c index 29ca3d13..3d02e167 100644 --- a/ip/link_gre6.c +++ b/ip/link_gre6.c @@ -238,13 +238,14 @@ get_failed: exit(-1); } } else if (!matches(*argv, "ttl") || - !matches(*argv, "hoplimit")) { - __u8 uval; - + !matches(*argv, "hoplimit") || + !matches(*argv, "hlim")) { NEXT_ARG(); - if (get_u8(&uval, *argv, 0)) - invarg("invalid TTL", *argv); - hop_limit = uval; + if (strcmp(*argv, "inherit") != 0) { + if (get_u8(&hop_limit, *argv, 0)) + invarg("invalid HLIM\n", *argv); + } else + hop_limit = 0; } else if (!matches(*argv, "tos") || !matches(*argv, "tclass") || !matches(*argv, "dsfield")) { diff --git a/ip/link_ip6tnl.c b/ip/link_ip6tnl.c index 8f5c9bd7..f6c52acc 100644 --- a/ip/link_ip6tnl.c +++ b/ip/link_ip6tnl.c @@ -196,15 +196,15 @@ get_failed: link = if_nametoindex(*argv); if (link == 0) invarg("\"dev\" is invalid", *argv); - } else if (strcmp(*argv, "hoplimit") == 0 || - strcmp(*argv, "ttl") == 0 || + } else if (strcmp(*argv, "ttl") == 0 || + strcmp(*argv, "hoplimit") == 0 || strcmp(*argv, "hlim") == 0) { - __u8 uval; - NEXT_ARG(); - if (get_u8(&uval, *argv, 0)) - invarg("invalid HLIM", *argv); - hop_limit = uval; + if (strcmp(*argv, "inherit") != 0) { + if (get_u8(&hop_limit, *argv, 0)) + invarg("invalid HLIM\n", *argv); + } else + hop_limit = 0; } else if (strcmp(*argv, "encaplimit") == 0) { NEXT_ARG(); if (strcmp(*argv, "none") == 0) { diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c index ce3855c1..a6213d28 100644 --- a/ip/link_iptnl.c +++ b/ip/link_iptnl.c @@ -204,7 +204,8 @@ get_failed: if (link == 0) invarg("\"dev\" is invalid", *argv); } else if (strcmp(*argv, "ttl") == 0 || - strcmp(*argv, "hoplimit") == 0) { + strcmp(*argv, "hoplimit") == 0 || + strcmp(*argv, "hlim") == 0) { NEXT_ARG(); if (strcmp(*argv, "inherit") != 0) { if (get_u8(&ttl, *argv, 0))