X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=interface.c;h=335e0be3fd841803c7cfce86a3110d1fd3d68989;hb=48ffedb4a2b6701eec99e32e91b8a66a0a4be950;hp=b304e00e6a407b251132840e6d664aa6833e6de9;hpb=059242dea7a7c1e51314cf41ad27aac853a385f3;p=project%2Fnetifd.git diff --git a/interface.c b/interface.c index b304e00..335e0be 100644 --- a/interface.c +++ b/interface.c @@ -37,6 +37,8 @@ enum { IFACE_ATTR_DNS_SEARCH, IFACE_ATTR_METRIC, IFACE_ATTR_INTERFACE, + IFACE_ATTR_IP6ASSIGN, + IFACE_ATTR_IP6HINT, IFACE_ATTR_MAX }; @@ -50,6 +52,8 @@ static const struct blobmsg_policy iface_attrs[IFACE_ATTR_MAX] = { [IFACE_ATTR_DNS] = { .name = "dns", .type = BLOBMSG_TYPE_ARRAY }, [IFACE_ATTR_DNS_SEARCH] = { .name = "dns_search", .type = BLOBMSG_TYPE_ARRAY }, [IFACE_ATTR_INTERFACE] = { .name = "interface", .type = BLOBMSG_TYPE_STRING }, + [IFACE_ATTR_IP6ASSIGN] = { .name = "ip6assign", .type = BLOBMSG_TYPE_INT32 }, + [IFACE_ATTR_IP6HINT] = { .name = "ip6hint", .type = BLOBMSG_TYPE_STRING }, }; static const union config_param_info iface_attr_info[IFACE_ATTR_MAX] = { @@ -483,6 +487,14 @@ interface_init(struct interface *iface, const char *name, if ((cur = tb[IFACE_ATTR_METRIC])) iface->metric = blobmsg_get_u32(cur); + if ((cur = tb[IFACE_ATTR_IP6ASSIGN])) + iface->config_ip.assignment_length = blobmsg_get_u32(cur); + + iface->config_ip.assignment_hint = -1; + if ((cur = tb[IFACE_ATTR_IP6HINT])) + iface->config_ip.assignment_hint = strtol(blobmsg_get_string(cur), NULL, 16) & + ~((1 << (64 - iface->config_ip.assignment_length)) - 1); + iface->config_autostart = iface->autostart; } @@ -755,6 +767,9 @@ interface_change_config(struct interface *if_old, struct interface *if_new) interface_ip_set_enabled(&if_old->proto_ip, if_new->proto_ip.enabled); } + if (UPDATE(config_ip.assignment_length) || UPDATE(config_ip.assignment_hint)) + interface_refresh_assignments(true); + interface_write_resolv_conf(); #undef UPDATE