+ iface->autostart = blobmsg_get_bool_default(tb[IFACE_ATTR_AUTO], true);
+ iface->proto_ip.no_defaultroute =
+ !blobmsg_get_bool_default(tb[IFACE_ATTR_DEFAULTROUTE], true);
+ iface->proto_ip.no_dns =
+ !blobmsg_get_bool_default(tb[IFACE_ATTR_PEERDNS], true);
+
+ if ((cur = tb[IFACE_ATTR_DNS]))
+ interface_add_dns_server_list(&iface->config_ip, cur);
+
+ if ((cur = tb[IFACE_ATTR_DNS_SEARCH]))
+ interface_add_dns_search_list(&iface->config_ip, cur);
+
+ 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);
+
+ if ((cur = tb[IFACE_ATTR_IP4TABLE])) {
+ if (!system_resolve_rt_table(blobmsg_data(cur), &iface->ip4table))
+ DPRINTF("Failed to resolve routing table: %s\n", (char *) blobmsg_data(cur));
+ }
+
+ // Set a default exteranl routing table for IPv6 to do source-based-filtering
+
+ iface->ip6table = 1000 + ++interface_serial;
+ if ((cur = tb[IFACE_ATTR_IP6TABLE])) {
+ if (!system_resolve_rt_table(blobmsg_data(cur), &iface->ip6table))
+ DPRINTF("Failed to resolve routing table: %s\n", (char *) blobmsg_data(cur));
+ }
+