Use if_nametoindex() instead of SIOCGIFINDEX

This commit is contained in:
angt
2016-03-03 10:46:29 +00:00
parent cb416c1c41
commit 3b8656a9b0

26
mud.c
View File

@@ -402,29 +402,15 @@ int mud_bind (struct mud *mud, const char *name)
const size_t len = strlen(name); const size_t len = strlen(name);
struct ifreq ifr = {0}; if (len >= IF_NAMESIZE)
if (len >= sizeof(ifr.ifr_name))
return -1; return -1;
memcpy(ifr.ifr_name, name, len+1); unsigned index = if_nametoindex(name);
int fd = socket(AF_UNIX, SOCK_DGRAM, 0); if (!index)
if (fd == -1)
return -1; return -1;
int ret = ioctl(fd, SIOCGIFINDEX, &ifr); struct sock *sock = mud_get_sock(mud, index);
int err = errno;
close(fd);
if (ret == -1) {
errno = err;
return -1;
}
struct sock *sock = mud_get_sock(mud, ifr.ifr_ifindex);
if (sock) if (sock)
return 0; return 0;
@@ -435,14 +421,14 @@ int mud_bind (struct mud *mud, const char *name)
return -1; return -1;
memcpy(&sock->name, name, len+1); memcpy(&sock->name, name, len+1);
sock->index = ifr.ifr_ifindex; sock->index = index;
sock->next = mud->sock; sock->next = mud->sock;
mud->sock = sock; mud->sock = sock;
struct path *path; struct path *path;
for (path = mud->path; path; path = path->next) 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; return 0;
} }