- INIT_LIST_HEAD(da.addr);
-
- snprintf(path, sizeof(path), "network.interface.%s", net);
-
- if (ubus_lookup_id(ctx, path, &id))
- goto fail;
-
- if (ubus_invoke(ctx, id, "status", NULL, invoke_cb, &da, 500))
- goto fail;
+ INIT_LIST_HEAD(addr);
+
+ blobmsg_for_each_attr(c, interfaces, r) {
+ matched = false;
+ blobmsg_for_each_attr(cur, c, rem)
+ if (!strcmp(blobmsg_name(cur), "interface"))
+ matched = !strcmp(blobmsg_get_string(cur), net);
+
+ if (!matched)
+ continue;
+
+ blobmsg_for_each_attr(cur, c, rem) {
+ data = blobmsg_data(cur);
+
+ if (dev && !strcmp(blobmsg_name(cur), "device") && !dev->name[0])
+ snprintf(dev->name, sizeof(dev->name), "%s", data);
+ else if (dev && !strcmp(blobmsg_name(cur), "l3_device"))
+ snprintf(dev->name, sizeof(dev->name), "%s", data);
+ else if (!dev && !strcmp(blobmsg_name(cur), "ipv4-address"))
+ parse_subnets(addr, FW3_FAMILY_V4,
+ blobmsg_data(cur), blobmsg_data_len(cur));
+ else if (!dev && (!strcmp(blobmsg_name(cur), "ipv6-address") ||
+ !strcmp(blobmsg_name(cur), "ipv6-prefix-assignment")))
+ parse_subnets(addr, FW3_FAMILY_V6,
+ blobmsg_data(cur), blobmsg_data_len(cur));
+ }
+
+ if (dev)
+ dev->set = !!dev->name[0];
+
+ break;
+ }