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);
|
p->iph.frag_off = htons(IP_DF);
|
||||||
} else if (strcmp(*argv, "remote") == 0) {
|
} else if (strcmp(*argv, "remote") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (strcmp(*argv, "any"))
|
p->iph.daddr = get_addr32(*argv);
|
||||||
p->iph.daddr = get_addr32(*argv);
|
|
||||||
else
|
|
||||||
p->iph.daddr = htonl(INADDR_ANY);
|
|
||||||
} else if (strcmp(*argv, "local") == 0) {
|
} else if (strcmp(*argv, "local") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (strcmp(*argv, "any"))
|
p->iph.saddr = get_addr32(*argv);
|
||||||
p->iph.saddr = get_addr32(*argv);
|
|
||||||
else
|
|
||||||
p->iph.saddr = htonl(INADDR_ANY);
|
|
||||||
} else if (strcmp(*argv, "dev") == 0) {
|
} else if (strcmp(*argv, "dev") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
medium = *argv;
|
medium = *argv;
|
||||||
|
|
|
||||||
|
|
@ -251,12 +251,10 @@ get_failed:
|
||||||
pmtudisc = 1;
|
pmtudisc = 1;
|
||||||
} else if (!matches(*argv, "remote")) {
|
} else if (!matches(*argv, "remote")) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (strcmp(*argv, "any"))
|
daddr = get_addr32(*argv);
|
||||||
daddr = get_addr32(*argv);
|
|
||||||
} else if (!matches(*argv, "local")) {
|
} else if (!matches(*argv, "local")) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (strcmp(*argv, "any"))
|
saddr = get_addr32(*argv);
|
||||||
saddr = get_addr32(*argv);
|
|
||||||
} else if (!matches(*argv, "dev")) {
|
} else if (!matches(*argv, "dev")) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
link = if_nametoindex(*argv);
|
link = if_nametoindex(*argv);
|
||||||
|
|
|
||||||
|
|
@ -195,16 +195,10 @@ get_failed:
|
||||||
while (argc > 0) {
|
while (argc > 0) {
|
||||||
if (strcmp(*argv, "remote") == 0) {
|
if (strcmp(*argv, "remote") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (strcmp(*argv, "any"))
|
raddr = get_addr32(*argv);
|
||||||
raddr = get_addr32(*argv);
|
|
||||||
else
|
|
||||||
raddr = 0;
|
|
||||||
} else if (strcmp(*argv, "local") == 0) {
|
} else if (strcmp(*argv, "local") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (strcmp(*argv, "any"))
|
laddr = get_addr32(*argv);
|
||||||
laddr = get_addr32(*argv);
|
|
||||||
else
|
|
||||||
laddr = 0;
|
|
||||||
} else if (matches(*argv, "dev") == 0) {
|
} else if (matches(*argv, "dev") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
link = if_nametoindex(*argv);
|
link = if_nametoindex(*argv);
|
||||||
|
|
|
||||||
|
|
@ -167,20 +167,10 @@ get_failed:
|
||||||
okey = uval;
|
okey = uval;
|
||||||
} else if (!matches(*argv, "remote")) {
|
} else if (!matches(*argv, "remote")) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (!strcmp(*argv, "any")) {
|
daddr = get_addr32(*argv);
|
||||||
fprintf(stderr, "invalid value for \"remote\": \"%s\"\n", *argv);
|
|
||||||
exit(-1);
|
|
||||||
} else {
|
|
||||||
daddr = get_addr32(*argv);
|
|
||||||
}
|
|
||||||
} else if (!matches(*argv, "local")) {
|
} else if (!matches(*argv, "local")) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (!strcmp(*argv, "any")) {
|
saddr = get_addr32(*argv);
|
||||||
fprintf(stderr, "invalid value for \"local\": \"%s\"\n", *argv);
|
|
||||||
exit(-1);
|
|
||||||
} else {
|
|
||||||
saddr = get_addr32(*argv);
|
|
||||||
}
|
|
||||||
} else if (!matches(*argv, "dev")) {
|
} else if (!matches(*argv, "dev")) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
link = if_nametoindex(*argv);
|
link = if_nametoindex(*argv);
|
||||||
|
|
|
||||||
|
|
@ -161,27 +161,17 @@ get_failed:
|
||||||
}
|
}
|
||||||
okey = uval;
|
okey = uval;
|
||||||
} else if (!matches(*argv, "remote")) {
|
} else if (!matches(*argv, "remote")) {
|
||||||
NEXT_ARG();
|
inet_prefix addr;
|
||||||
if (!strcmp(*argv, "any")) {
|
|
||||||
fprintf(stderr, "invalid value for \"remote\": \"%s\"\n", *argv);
|
|
||||||
exit(-1);
|
|
||||||
} else {
|
|
||||||
inet_prefix addr;
|
|
||||||
|
|
||||||
get_prefix(&addr, *argv, AF_INET6);
|
NEXT_ARG();
|
||||||
memcpy(&daddr, addr.data, addr.bytelen);
|
get_prefix(&addr, *argv, AF_INET6);
|
||||||
}
|
memcpy(&daddr, addr.data, addr.bytelen);
|
||||||
} else if (!matches(*argv, "local")) {
|
} else if (!matches(*argv, "local")) {
|
||||||
NEXT_ARG();
|
inet_prefix addr;
|
||||||
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);
|
NEXT_ARG();
|
||||||
memcpy(&saddr, addr.data, addr.bytelen);
|
get_prefix(&addr, *argv, AF_INET6);
|
||||||
}
|
memcpy(&saddr, addr.data, addr.bytelen);
|
||||||
} else if (!matches(*argv, "dev")) {
|
} else if (!matches(*argv, "dev")) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
link = if_nametoindex(*argv);
|
link = if_nametoindex(*argv);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue