mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-10-09 13:20:18 +00:00
ip neigh: device is optional for proxy entries
Though dumping such entries crashes present kernels. Signed-off-by: Konstantin Khlebnikov <koct9i@gmail.com>
This commit is contained in:
parent
5866bddd9a
commit
e834eb8eba
13
ip/ipneigh.c
13
ip/ipneigh.c
@ -100,8 +100,9 @@ static int ipneigh_modify(int cmd, int flags, int argc, char **argv)
|
|||||||
struct ndmsg ndm;
|
struct ndmsg ndm;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
} req;
|
} req;
|
||||||
char *d = NULL;
|
char *dev = NULL;
|
||||||
int dst_ok = 0;
|
int dst_ok = 0;
|
||||||
|
int dev_ok = 0;
|
||||||
int lladdr_ok = 0;
|
int lladdr_ok = 0;
|
||||||
char * lla = NULL;
|
char * lla = NULL;
|
||||||
inet_prefix dst;
|
inet_prefix dst;
|
||||||
@ -135,10 +136,12 @@ static int ipneigh_modify(int cmd, int flags, int argc, char **argv)
|
|||||||
duparg("address", *argv);
|
duparg("address", *argv);
|
||||||
get_addr(&dst, *argv, preferred_family);
|
get_addr(&dst, *argv, preferred_family);
|
||||||
dst_ok = 1;
|
dst_ok = 1;
|
||||||
|
dev_ok = 1;
|
||||||
req.ndm.ndm_flags |= NTF_PROXY;
|
req.ndm.ndm_flags |= NTF_PROXY;
|
||||||
} else if (strcmp(*argv, "dev") == 0) {
|
} else if (strcmp(*argv, "dev") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
d = *argv;
|
dev = *argv;
|
||||||
|
dev_ok = 1;
|
||||||
} else {
|
} else {
|
||||||
if (strcmp(*argv, "to") == 0) {
|
if (strcmp(*argv, "to") == 0) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
@ -153,7 +156,7 @@ static int ipneigh_modify(int cmd, int flags, int argc, char **argv)
|
|||||||
}
|
}
|
||||||
argc--; argv++;
|
argc--; argv++;
|
||||||
}
|
}
|
||||||
if (d == NULL || !dst_ok || dst.family == AF_UNSPEC) {
|
if (!dev_ok || !dst_ok || dst.family == AF_UNSPEC) {
|
||||||
fprintf(stderr, "Device and destination are required arguments.\n");
|
fprintf(stderr, "Device and destination are required arguments.\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
@ -175,8 +178,8 @@ static int ipneigh_modify(int cmd, int flags, int argc, char **argv)
|
|||||||
|
|
||||||
ll_init_map(&rth);
|
ll_init_map(&rth);
|
||||||
|
|
||||||
if ((req.ndm.ndm_ifindex = ll_name_to_index(d)) == 0) {
|
if (dev && (req.ndm.ndm_ifindex = ll_name_to_index(dev)) == 0) {
|
||||||
fprintf(stderr, "Cannot find device \"%s\"\n", d);
|
fprintf(stderr, "Cannot find device \"%s\"\n", dev);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user