static void system_set_dev_sysctl(const char *path, const char *device, const char *val)
{
- snprintf(dev_buf, sizeof(dev_buf), path, val);
+ snprintf(dev_buf, sizeof(dev_buf), path, device);
system_set_sysctl(dev_buf, val);
}
}
}
-static void
+void
system_if_apply_settings(struct device *dev, struct device_settings *s)
{
struct ifreq ifr;
if (ioctl(sock_ioctl, SIOCSIFTXQLEN, &ifr) < 0)
s->flags &= ~DEV_OPT_TXQUEUELEN;
}
- if (s->flags & DEV_OPT_MACADDR) {
+ if ((s->flags & DEV_OPT_MACADDR) && !dev->external) {
ifr.ifr_hwaddr.sa_family = ARPHRD_ETHER;
memcpy(&ifr.ifr_hwaddr.sa_data, s->macaddr, sizeof(s->macaddr));
if (ioctl(sock_ioctl, SIOCSIFHWADDR, &ifr) < 0)
.rtm_family = (alen == 4) ? AF_INET : AF_INET6,
.rtm_dst_len = route->mask,
.rtm_table = RT_TABLE_MAIN,
- .rtm_protocol = (route->flags & DEVADDR_KERNEL) ? RTPROT_KERNEL : RTPROT_BOOT,
+ .rtm_protocol = (route->flags & DEVADDR_KERNEL) ? RTPROT_KERNEL : RTPROT_STATIC,
.rtm_scope = scope,
.rtm_type = (cmd == RTM_DELROUTE) ? 0: RTN_UNICAST,
};