[PATCH iproute2 1/3] ip/tunnel: Unify setup and accept zero address for local/remote endpoints
flat view
STALE3226d
From: Serhey Popovych <hidden>
Date: 2017-12-13 19:36:34
Subsystem:
the rest · Maintainer:
Linus Torvalds
It is fully legal to submit zero (INADDR_ANY/IN6ADDR_ANY_INIT) value for local and/or remote endpoints for all tunnel drivers: no need additionally check this in userspace. Note that all tunnel specific code already can pass zero address to the kernel. Signed-off-by: Serhey Popovych <redacted> --- ip/iptunnel.c | 10 ++-------- ip/link_gre.c | 6 ++---- ip/link_iptnl.c | 10 ++-------- ip/link_vti.c | 14 ++------------ ip/link_vti6.c | 26 ++++++++------------------ 5 files changed, 16 insertions(+), 50 deletions(-)
diff --git a/ip/iptunnel.c b/ip/iptunnel.c
index 208a1f0..ce610f8 100644
--- a/ip/iptunnel.c
+++ b/ip/iptunnel.c@@ -127,16 +127,10 @@ static int parse_args(int argc, char **argv, int cmd, struct ip_tunnel_parm *p) p->iph.frag_off = htons(IP_DF); } else if (strcmp(*argv, "remote") == 0) { NEXT_ARG(); - if (strcmp(*argv, "any")) - p->iph.daddr = get_addr32(*argv); - else - p->iph.daddr = htonl(INADDR_ANY); + p->iph.daddr = get_addr32(*argv); } else if (strcmp(*argv, "local") == 0) { NEXT_ARG(); - if (strcmp(*argv, "any")) - p->iph.saddr = get_addr32(*argv); - else - p->iph.saddr = htonl(INADDR_ANY); + p->iph.saddr = get_addr32(*argv); } else if (strcmp(*argv, "dev") == 0) { NEXT_ARG(); medium = *argv;
diff --git a/ip/link_gre.c b/ip/link_gre.c
index 43cb1af..6f82fb4 100644
--- a/ip/link_gre.c
+++ b/ip/link_gre.c@@ -251,12 +251,10 @@ get_failed: pmtudisc = 1; } else if (!matches(*argv, "remote")) { NEXT_ARG(); - if (strcmp(*argv, "any")) - daddr = get_addr32(*argv); + daddr = get_addr32(*argv); } else if (!matches(*argv, "local")) { NEXT_ARG(); - if (strcmp(*argv, "any")) - saddr = get_addr32(*argv); + saddr = get_addr32(*argv); } else if (!matches(*argv, "dev")) { NEXT_ARG(); link = if_nametoindex(*argv);
diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c
index 4940b8b..521d6ba 100644
--- a/ip/link_iptnl.c
+++ b/ip/link_iptnl.c@@ -195,16 +195,10 @@ get_failed: while (argc > 0) { if (strcmp(*argv, "remote") == 0) { NEXT_ARG(); - if (strcmp(*argv, "any")) - raddr = get_addr32(*argv); - else - raddr = 0; + raddr = get_addr32(*argv); } else if (strcmp(*argv, "local") == 0) { NEXT_ARG(); - if (strcmp(*argv, "any")) - laddr = get_addr32(*argv); - else - laddr = 0; + laddr = get_addr32(*argv); } else if (matches(*argv, "dev") == 0) { NEXT_ARG(); link = if_nametoindex(*argv);
diff --git a/ip/link_vti.c b/ip/link_vti.c
index 07ac94e..05aefa3 100644
--- a/ip/link_vti.c
+++ b/ip/link_vti.c@@ -167,20 +167,10 @@ get_failed: okey = uval; } else if (!matches(*argv, "remote")) { NEXT_ARG(); - if (!strcmp(*argv, "any")) { - fprintf(stderr, "invalid value for \"remote\": \"%s\"\n", *argv); - exit(-1); - } else { - daddr = get_addr32(*argv); - } + daddr = get_addr32(*argv); } else if (!matches(*argv, "local")) { NEXT_ARG(); - if (!strcmp(*argv, "any")) { - fprintf(stderr, "invalid value for \"local\": \"%s\"\n", *argv); - exit(-1); - } else { - saddr = get_addr32(*argv); - } + saddr = get_addr32(*argv); } else if (!matches(*argv, "dev")) { NEXT_ARG(); link = if_nametoindex(*argv);
diff --git a/ip/link_vti6.c b/ip/link_vti6.c
index 6d08bfe..f665520 100644
--- a/ip/link_vti6.c
+++ b/ip/link_vti6.c@@ -161,27 +161,17 @@ get_failed: } okey = uval; } else if (!matches(*argv, "remote")) { - NEXT_ARG(); - if (!strcmp(*argv, "any")) { - fprintf(stderr, "invalid value for \"remote\": \"%s\"\n", *argv); - exit(-1); - } else { - inet_prefix addr; + inet_prefix addr; - get_prefix(&addr, *argv, AF_INET6); - memcpy(&daddr, addr.data, addr.bytelen); - } - } else if (!matches(*argv, "local")) { NEXT_ARG(); - if (!strcmp(*argv, "any")) { - fprintf(stderr, "invalid value for \"local\": \"%s\"\n", *argv); - exit(-1); - } else { - inet_prefix addr; + get_prefix(&addr, *argv, AF_INET6); + memcpy(&daddr, addr.data, addr.bytelen); + } else if (!matches(*argv, "local")) { + inet_prefix addr; - get_prefix(&addr, *argv, AF_INET6); - memcpy(&saddr, addr.data, addr.bytelen); - } + NEXT_ARG(); + get_prefix(&addr, *argv, AF_INET6); + memcpy(&saddr, addr.data, addr.bytelen); } else if (!matches(*argv, "dev")) { NEXT_ARG(); link = if_nametoindex(*argv);
--
1.7.10.4