- blobmsg_add_u32(&b, "iaid", ntohl(lease->iaid));
- blobmsg_add_string(&b, "hostname", (lease->hostname) ? lease->hostname : "");
- blobmsg_add_u32(&b, "assigned", lease->assigned);
- blobmsg_add_u32(&b, "length", lease->length);
-
- void *m = blobmsg_open_array(&b, "ipv6");
- struct in6_addr addr;
- for (size_t i = 0; i < iface->ia_addr_len; ++i) {
- if (iface->ia_addr[i].prefix > 64)
- continue;
-
- addr = iface->ia_addr[i].addr;
- if (lease->length == 128)
- addr.s6_addr32[3] = htonl(lease->assigned);
- else
- addr.s6_addr32[1] |= htonl(lease->assigned);
-
- char *c = blobmsg_alloc_string_buffer(&b, NULL, INET6_ADDRSTRLEN);
- inet_ntop(AF_INET6, &addr, c, INET6_ADDRSTRLEN);
- blobmsg_add_string_buffer(&b);
- }
+ blobmsg_add_u32(&b, "iaid", ntohl(a->iaid));
+ blobmsg_add_string(&b, "hostname", (a->hostname) ? a->hostname : "");
+ blobmsg_add_u32(&b, "assigned", a->assigned);
+
+ m = blobmsg_open_array(&b, "flags");
+ if (a->flags & OAF_BOUND)
+ blobmsg_add_string(&b, NULL, "bound");
+
+ if (a->flags & OAF_STATIC)
+ blobmsg_add_string(&b, NULL, "static");
+ blobmsg_close_array(&b, m);
+
+ m = blobmsg_open_array(&b, a->length == 128 ? "ipv6-addr": "ipv6-prefix");
+ dhcpv6_enum_ia_addrs(iface, a, now, dhcpv6_blobmsg_ia_addr, NULL);