diff options
| author | Hans Dedecker | 2021-01-06 20:15:49 +0000 |
|---|---|---|
| committer | Hans Dedecker | 2021-01-20 20:02:57 +0000 |
| commit | f16afb7e167e23718ae3d8573082a410b718ae4c (patch) | |
| tree | 4d6a6e374c453b33d9202a3bac642f45d05b1bd4 | |
| parent | e199804b602a48eb69f0752584c0ad28495b82ad (diff) | |
| download | odhcp6c-f16afb7e167e23718ae3d8573082a410b718ae4c.tar.gz | |
ra: align ifindex resolving
Use ioctl SIOCGIFINDEX to resolve ifindex similar as in init_dhcpv6
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
(cherry picked from commit 2b6959dfe2095402e004b63d9aca9900c074abb6)
| -rw-r--r-- | src/ra.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -27,6 +27,7 @@ #include <net/if.h> #include <arpa/inet.h> +#include <sys/ioctl.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> @@ -76,6 +77,8 @@ static void ra_send_rs(int signal __attribute__((unused))); int ra_init(const char *ifname, const struct in6_addr *ifid, unsigned int options, unsigned int holdoff_interval) { + struct ifreq ifr; + ra_options = options; ra_holdoff_interval = holdoff_interval; @@ -84,11 +87,12 @@ int ra_init(const char *ifname, const struct in6_addr *ifid, if (sock < 0) goto failure; - if_index = if_nametoindex(ifname); - if (!if_index) + memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1); + if (ioctl(sock, SIOCGIFINDEX, &ifr) < 0) goto failure; - strncpy(if_name, ifname, sizeof(if_name) - 1); + if_index = ifr.ifr_ifindex; lladdr = *ifid; rtnl = socket(AF_NETLINK, SOCK_DGRAM | SOCK_CLOEXEC, NETLINK_ROUTE); |