a = blobmsg_open_table(&b, "device");
avl_for_each_element(&interfaces, iface, avl) {
- if (iface->dhcpv4 != MODE_SERVER || iface->dhcpv4_assignments.next == NULL)
+ if (iface->dhcpv4 != MODE_SERVER)
continue;
void *i = blobmsg_open_table(&b, iface->ifname);
blobmsg_add_string(&b, "hostname", (c->hostname) ? c->hostname : "");
blobmsg_add_u8(&b, "accept-reconf-nonce", c->accept_fr_nonce);
+ if (c->reqopts) {
+ int opt = 0;
+ int chars = 0;
+ buf = blobmsg_alloc_string_buffer(&b, "reqopts", strlen(c->reqopts) * 4 + 1);
+ for(; c->reqopts[opt]; opt++)
+ chars += snprintf(buf + chars, 6, "%u,", (uint8_t)c->reqopts[opt]);
+ buf[chars - 1] = '\0';
+ blobmsg_add_string_buffer(&b);
+ }
+
m = blobmsg_open_array(&b, "flags");
if (c->flags & OAF_BOUND)
blobmsg_add_string(&b, NULL, "bound");
a = blobmsg_open_table(&b, "device");
avl_for_each_element(&interfaces, iface, avl) {
- if (iface->dhcpv6 != MODE_SERVER || iface->ia_assignments.next == NULL)
+ if (iface->dhcpv6 != MODE_SERVER)
continue;
void *i = blobmsg_open_table(&b, iface->ifname);
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);
+ dhcpv6_ia_enum_addrs(iface, a, now, dhcpv6_blobmsg_ia_addr, NULL);
blobmsg_close_table(&b, m);
blobmsg_add_u32(&b, "valid", INFINITE_VALID(a->valid_until) ?
{
struct blob_attr *tb[IFACE_ATTR_MAX];
struct interface *c;
- bool update = false;
+ bool update = true;
blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb, blob_data(msg), blob_len(msg));
const char *interface = (tb[IFACE_ATTR_INTERFACE]) ?
blobmsg_get_string(tb[IFACE_ATTR_INTERFACE]) : "";
avl_for_each_element(&interfaces, c, avl) {
- if (!strcmp(interface, c->name) && !c->ignore) {
- update = true;
+ if (!strcmp(interface, c->name) && c->ignore) {
+ update = false;
break;
}
}