From 3b8656a9b0206d33464b65a1f3d8d47636c6e0d7 Mon Sep 17 00:00:00 2001 From: angt Date: Thu, 3 Mar 2016 10:46:29 +0000 Subject: [PATCH] Use if_nametoindex() instead of SIOCGIFINDEX --- mud.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/mud.c b/mud.c index 6f7fb08..3759c3c 100644 --- a/mud.c +++ b/mud.c @@ -402,29 +402,15 @@ int mud_bind (struct mud *mud, const char *name) const size_t len = strlen(name); - struct ifreq ifr = {0}; - - if (len >= sizeof(ifr.ifr_name)) + if (len >= IF_NAMESIZE) return -1; - memcpy(ifr.ifr_name, name, len+1); + unsigned index = if_nametoindex(name); - int fd = socket(AF_UNIX, SOCK_DGRAM, 0); - - if (fd == -1) + if (!index) return -1; - int ret = ioctl(fd, SIOCGIFINDEX, &ifr); - int err = errno; - - close(fd); - - if (ret == -1) { - errno = err; - return -1; - } - - struct sock *sock = mud_get_sock(mud, ifr.ifr_ifindex); + struct sock *sock = mud_get_sock(mud, index); if (sock) return 0; @@ -435,14 +421,14 @@ int mud_bind (struct mud *mud, const char *name) return -1; memcpy(&sock->name, name, len+1); - sock->index = ifr.ifr_ifindex; + sock->index = index; sock->next = mud->sock; mud->sock = sock; struct path *path; for (path = mud->path; path; path = path->next) - mud_new_path(mud, ifr.ifr_ifindex, (struct sockaddr *)&path->addr); + mud_new_path(mud, index, (struct sockaddr *)&path->addr); return 0; }