summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-10-19 01:12:15 +0200
committerFelix Fietkau <nbd@openwrt.org>2011-10-19 01:12:15 +0200
commitbeecba5195b2f1180f0bdfb6f61f0dbd3dff0eba (patch)
tree2e3eb6704913f39f97a4050a4561b2a960f5f5a6
parent8c6361136d8c976407b03252b6cfadecb441b37a (diff)
downloadnetifd-beecba5195b2f1180f0bdfb6f61f0dbd3dff0eba.tar.gz
apply low level device settings
-rw-r--r--system-linux.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/system-linux.c b/system-linux.c
index 3d6230d..e313cbc 100644
--- a/system-linux.c
+++ b/system-linux.c
@@ -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);
}