return false;
addr->mask = mask;
- if (!parse_ip_and_netmask(af, str, &addr->addr, &addr->mask)) {
- interface_add_error(iface, "proto", "INVALID_ADDRESS", &str, 1);
- free(addr);
- return false;
- }
+ if (!parse_ip_and_netmask(af, str, &addr->addr, &addr->mask))
+ goto error;
+
+ if (!v6) {
+ if (IN_EXPERIMENTAL(ntohl(addr->addr.in.s_addr)))
+ goto error;
+
+ } else if (IN6_IS_ADDR_MULTICAST(&addr->addr.in6))
+ goto error;
if (broadcast)
addr->broadcast = broadcast;
vlist_add(&iface->proto_ip.addr, &addr->node, &addr->flags);
return true;
+
+error:
+ interface_add_error(iface, "proto", "INVALID_ADDRESS", &str, 1);
+ free(addr);
+
+ return false;
}
static int
blobmsg_add_string(b, p->config_params->params[i].name, uci_get_validate_string(p->config_params, i));
blobmsg_close_table(b, v);
}
+ blobmsg_add_u8(b, "immediate", !!(p->flags & PROTO_FLAG_IMMEDIATE));
blobmsg_add_u8(b, "no_device", !!(p->flags & PROTO_FLAG_NODEV));
+ blobmsg_add_u8(b, "init_available", !!(p->flags & PROTO_FLAG_INIT_AVAILABLE));
+ blobmsg_add_u8(b, "renew_available", !!(p->flags & PROTO_FLAG_RENEW_AVAILABLE));
+ blobmsg_add_u8(b, "force_link_default", !!(p->flags & PROTO_FLAG_FORCE_LINK_DEFAULT));
+ blobmsg_add_u8(b, "last_error", !!(p->flags & PROTO_FLAG_LASTERROR));
+ blobmsg_add_u8(b, "teardown_on_l3_link_down", !!(p->flags & PROTO_FLAG_TEARDOWN_ON_L3_LINK_DOWN));
+ blobmsg_add_u8(b, "no_task", !!(p->flags & PROTO_FLAG_NO_TASK));
blobmsg_close_table(b, c);
}
}