X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;ds=sidebyside;f=device.c;h=7d606c6e5782108444308a6777e3f13f48ed6b45;hb=f8981d9933683e1a8314fa86ac610f8e9a22661c;hp=6a770aceee979849335fe7d0e691fb2d2734948e;hpb=3d26347d0042313be3c9347f8d82c4ccea67fe68;p=project%2Fnetifd.git diff --git a/device.c b/device.c index 6a770ac..7d606c6 100644 --- a/device.c +++ b/device.c @@ -37,6 +37,7 @@ static const struct blobmsg_policy dev_attrs[__DEV_ATTR_MAX] = { [DEV_ATTR_MACADDR] = { .name = "macaddr", .type = BLOBMSG_TYPE_STRING }, [DEV_ATTR_TXQUEUELEN] = { .name = "txqueuelen", .type = BLOBMSG_TYPE_INT32 }, [DEV_ATTR_ENABLED] = { .name = "enabled", .type = BLOBMSG_TYPE_BOOL }, + [DEV_ATTR_IPV6] = { .name = "ipv6", .type = BLOBMSG_TYPE_BOOL }, }; const struct uci_blob_param_list device_attr_list = { @@ -60,6 +61,9 @@ void device_unlock(void) static int set_device_state(struct device *dev, bool state) { + if (dev->external) + return 0; + if (state) system_if_up(dev); else @@ -139,6 +143,7 @@ device_merge_settings(struct device *dev, struct device_settings *n) memcpy(n->macaddr, (s->flags & DEV_OPT_MACADDR ? s->macaddr : os->macaddr), sizeof(n->macaddr)); + n->ipv6 = s->flags & DEV_OPT_IPV6 ? s->ipv6 : os->ipv6; n->flags = s->flags | os->flags; } @@ -172,6 +177,11 @@ device_init_settings(struct device *dev, struct blob_attr **tb) } } + if ((cur = tb[DEV_ATTR_IPV6])) { + s->ipv6 = blobmsg_get_bool(cur); + s->flags |= DEV_OPT_IPV6; + } + device_set_disabled(dev, disabled); } @@ -623,7 +633,7 @@ device_create(const char *name, const struct device_type *type, odev->current_config = true; change = device_set_config(odev, type, config); if (odev->external) { - system_if_apply_settings(odev, &odev->settings); + system_if_apply_settings(odev, &odev->settings, odev->settings.flags); change = DEV_CONFIG_APPLIED; } switch (change) { @@ -705,6 +715,8 @@ device_dump_status(struct blob_buf *b, struct device *dev) blobmsg_add_string(b, "macaddr", format_macaddr(st.macaddr)); if (st.flags & DEV_OPT_TXQUEUELEN) blobmsg_add_u32(b, "txqueuelen", st.txqueuelen); + if (st.flags & DEV_OPT_IPV6) + blobmsg_add_u8(b, "ipv6", st.ipv6); } s = blobmsg_open_table(b, "statistics");