apply low level device settings
authorFelix Fietkau <nbd@openwrt.org>
Tue, 18 Oct 2011 23:12:15 +0000 (01:12 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 18 Oct 2011 23:12:15 +0000 (01:12 +0200)
system-linux.c

index 3d6230d841830a7cf1723dd5453d8d8d62169513..e313cbc97934bf37f410e180419fe66bef039f99 100644 (file)
@@ -470,9 +470,32 @@ int system_vlan_del(struct device *dev)
        return system_vlan(dev, -1);
 }
 
-int system_if_up(struct device *dev)
+static void
+system_if_apply_settings(struct device *dev)
 {
+       struct ifreq ifr;
+
+       memset(&ifr, 0, sizeof(ifr));
+       strncpy(ifr.ifr_name, dev->ifname, sizeof(ifr.ifr_name));
+       if (dev->flags & DEV_OPT_MTU) {
+               ifr.ifr_mtu = dev->mtu;
+               ioctl(sock_ioctl, SIOCSIFMTU, &ifr);
+       }
+       if (dev->flags & DEV_OPT_TXQUEUELEN) {
+               ifr.ifr_qlen = dev->txqueuelen;
+               ioctl(sock_ioctl, SIOCSIFTXQLEN, &ifr);
+       }
+       if (dev->flags & DEV_OPT_MACADDR) {
+               memcpy(&ifr.ifr_hwaddr, dev->macaddr, sizeof(dev->macaddr));
+               ioctl(sock_ioctl, SIOCSIFHWADDR, &ifr);
+       }
+
        dev->ifindex = system_if_resolve(dev);
+}
+
+int system_if_up(struct device *dev)
+{
+       system_if_apply_settings(dev);
        return system_if_flags(dev->ifname, IFF_UP, 0);
 }