From bcdbe2ef1d3757948f4b8a800eac1b99375509c5 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Fri, 11 Aug 2017 12:31:59 +0200 Subject: replace hand-coded tun_gifindex() with standard POSIX if_nametoindex() Change-Id: I738472765ab09f530dcf071455e1bb4e6fb3f6e5 --- lib/tun.c | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/lib/tun.c b/lib/tun.c index 205d39a..717da88 100644 --- a/lib/tun.c +++ b/lib/tun.c @@ -89,30 +89,6 @@ int tun_nlattr(struct nlmsghdr *n, int nsize, int type, void *d, int dlen) n->nlmsg_len = alen + len; return 0; } - -int tun_gifindex(struct tun_t *this, __u32 * index) -{ - struct ifreq ifr; - int fd; - - memset(&ifr, '\0', sizeof(ifr)); - ifr.ifr_addr.sa_family = AF_INET; - ifr.ifr_dstaddr.sa_family = AF_INET; - ifr.ifr_netmask.sa_family = AF_INET; - strncpy(ifr.ifr_name, this->devname, IFNAMSIZ); - ifr.ifr_name[IFNAMSIZ - 1] = 0; /* Make sure to terminate */ - if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "socket() failed"); - } - if (ioctl(fd, SIOCGIFINDEX, &ifr)) { - SYS_ERR(DTUN, LOGL_ERROR, errno, "ioctl() failed"); - close(fd); - return -1; - } - close(fd); - *index = ifr.ifr_ifindex; - return 0; -} #endif int tun_sifflags(struct tun_t *this, int flags) @@ -266,7 +242,9 @@ int tun_addaddr(struct tun_t *this, req.i.ifa_prefixlen = 32; /* 32 FOR IPv4 */ req.i.ifa_flags = 0; req.i.ifa_scope = RT_SCOPE_HOST; /* TODO or 0 */ - if (tun_gifindex(this, &req.i.ifa_index)) { + req.i.ifa_index = if_nametoindex(this->devname); + if (!req.i.ifa_index) { + SYS_ERR(DTUN, LOGL_ERROR, errno, "Unable to get ifindex for %s", this->devname); return -1; } -- cgit v1.2.3