+static void
+interface_ip_dump_address_list(struct interface_ip_settings *ip, bool v6)
+{
+ struct device_addr *addr;
+ char *buf;
+ void *a;
+ int buflen = 128;
+ int af;
+
+ vlist_for_each_element(&ip->addr, addr, node) {
+ if ((addr->flags & DEVADDR_FAMILY) == DEVADDR_INET4)
+ af = AF_INET;
+ else
+ af = AF_INET6;
+
+ if (af != (v6 ? AF_INET6 : AF_INET))
+ continue;
+
+ a = blobmsg_open_table(&b, NULL);
+
+ buf = blobmsg_alloc_string_buffer(&b, "address", buflen);
+ inet_ntop(af, &addr->addr, buf, buflen);
+ blobmsg_add_string_buffer(&b);
+
+ blobmsg_add_u32(&b, "mask", addr->mask);
+
+ blobmsg_close_table(&b, a);
+ }
+}
+
+static void
+interface_ip_dump_route_list(struct interface_ip_settings *ip)
+{
+ struct device_route *route;
+ int buflen = 128;
+ char *buf;
+ void *r;
+ int af;
+
+ vlist_for_each_element(&ip->route, route, node) {
+ if ((route->flags & DEVADDR_FAMILY) == DEVADDR_INET4)
+ af = AF_INET;
+ else
+ af = AF_INET6;
+
+ r = blobmsg_open_table(&b, NULL);
+
+ buf = blobmsg_alloc_string_buffer(&b, "target", buflen);
+ inet_ntop(af, &route->addr, buf, buflen);
+ blobmsg_add_string_buffer(&b);
+
+ blobmsg_add_u32(&b, "mask", route->mask);
+
+ buf = blobmsg_alloc_string_buffer(&b, "nexthop", buflen);
+ inet_ntop(af, &route->nexthop, buf, buflen);
+ blobmsg_add_string_buffer(&b);
+
+ if (route->flags & DEVROUTE_MTU)
+ blobmsg_add_u32(&b, "mtu", route->mtu);
+
+ if (route->flags & DEVROUTE_METRIC)
+ blobmsg_add_u32(&b, "metric", route->metric);
+
+ blobmsg_add_u8(&b, "enabled", route->enabled);
+
+ blobmsg_close_table(&b, r);
+ }
+}
+
+static void
+interface_ip_dump_dns_server_list(struct interface_ip_settings *ip)
+{
+ struct dns_server *dns;
+ int buflen = 128;
+ char *buf;
+
+ vlist_simple_for_each_element(&ip->dns_servers, dns, node) {
+ buf = blobmsg_alloc_string_buffer(&b, NULL, buflen);
+ inet_ntop(dns->af, &dns->addr, buf, buflen);
+ blobmsg_add_string_buffer(&b);
+ }
+}
+
+static void
+interface_ip_dump_dns_search_list(struct interface_ip_settings *ip)
+{
+ struct dns_search_domain *dns;
+
+ vlist_simple_for_each_element(&ip->dns_search, dns, node) {
+ blobmsg_add_string(&b, NULL, dns->name);
+ }
+}
+