}
static double parse_leasetime(struct blob_attr *c) {
- char *val = blobmsg_get_string(c), *endptr;
- double time = strtod(val, &endptr);
- if (time && endptr[0]) {
+ char *val = blobmsg_get_string(c), *endptr = NULL;
+ double time = strcmp(val, "infinite") ? strtod(val, &endptr) : UINT32_MAX;
+
+ if (time && endptr && endptr[0]) {
if (endptr[0] == 's')
time *= 1;
else if (endptr[0] == 'm')
return -1;
strncpy(iface->name, name, sizeof(iface->name) - 1);
+
+ /* Default settings */
+ iface->managed = 1;
+ iface->learn_routes = true;
+
list_add(&iface->head, &interfaces);
overwrite = true;
}
if ((c = tb[IFACE_ATTR_RA_MANAGEMENT]))
iface->managed = blobmsg_get_u32(c);
- else if (overwrite)
- iface->managed = 1;
if ((c = tb[IFACE_ATTR_RA_OFFLINK]))
iface->ra_not_onlink = blobmsg_get_bool(c);
if ((c = tb[IFACE_ATTR_NDPROXY_ROUTING]))
iface->learn_routes = blobmsg_get_bool(c);
- else if (overwrite)
- iface->learn_routes = true;
if ((c = tb[IFACE_ATTR_NDPROXY_SLAVE]))
iface->external = blobmsg_get_bool(c);
i->ndp = (master && master->ndp == RELAYD_RELAY) ?
RELAYD_RELAY : RELAYD_DISABLED;
- setup_router_interface(i, true);
- setup_dhcpv6_interface(i, true);
- setup_ndp_interface(i, true);
- setup_dhcpv4_interface(i, true);
+ setup_router_interface(i, !i->ignore);
+ setup_dhcpv6_interface(i, !i->ignore);
+ setup_ndp_interface(i, !i->ignore);
+ setup_dhcpv4_interface(i, !i->ignore);
} else {
close_interface(i);
}