diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-10-19 01:12:15 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2011-10-19 01:12:15 +0200 |
commit | beecba5195b2f1180f0bdfb6f61f0dbd3dff0eba (patch) | |
tree | 2e3eb6704913f39f97a4050a4561b2a960f5f5a6 /system-linux.c | |
parent | 8c6361136d8c976407b03252b6cfadecb441b37a (diff) |
apply low level device settings
Diffstat (limited to 'system-linux.c')
-rw-r--r-- | system-linux.c | 25 |
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); } |