ip/tunnel: Unify setup and accept zero address for local/remote endpoints
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 <serhe.popovych@gmail.com>
This commit is contained in:
parent
1eccc57341
commit
57daab1e70
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
NEXT_ARG();
|
||||
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;
|
||||
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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue