system-linux: resolve interface index at device_up
authorSteven Barth <steven@midlink.org>
Fri, 7 Oct 2011 18:01:11 +0000 (20:01 +0200)
committerSteven Barth <steven@midlink.org>
Fri, 7 Oct 2011 18:01:11 +0000 (20:01 +0200)
system-linux.c

index f6e1058fa85bccf5d8d5daa9dbd8294e2dd878b7..f1acc19bd7d73538601001f6b87bff9826ea280e 100644 (file)
@@ -165,8 +165,19 @@ static int system_if_flags(struct device *dev, unsigned add, unsigned rem)
        return ioctl(sock_ioctl, SIOCSIFFLAGS, &ifr);
 }
 
+static int system_if_resolve(struct device *dev)
+{
+       struct ifreq ifr;
+       strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name));
+       if (!ioctl(sock_ioctl, SIOCGIFINDEX, &ifr))
+               return ifr.ifr_ifindex;
+       else
+               return 0;
+}
+
 int system_if_up(struct device *dev)
 {
+       dev->ifindex = system_if_resolve(dev);
        return system_if_flags(dev, IFF_UP, 0);
 }
 
@@ -177,16 +188,7 @@ int system_if_down(struct device *dev)
 
 int system_if_check(struct device *dev)
 {
-       struct ifreq ifr;
-       strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name));
-       if (ioctl(sock_ioctl, SIOCGIFINDEX, &ifr))
-               return -1;
-
-       dev->ifindex = ifr.ifr_ifindex;
-
-       /* if (!strcmp(dev->ifname, "eth0"))
-               device_set_present(dev, true); */
-       return 0;
+       return -!(system_if_resolve(dev));
 }
 
 static int system_addr(struct device *dev, struct device_addr *addr, int cmd)