interface_add_error(iface, "proto-static", "INVALID_ADDRESS", &str, 1);
return false;
}
- vlist_add(&iface->proto_addr, &addr->node);
+ vlist_add(&iface->proto_ip.addr, &addr->node);
return true;
}
}
route->mask = 0;
route->flags = DEVADDR_DEVICE | (v6 ? DEVADDR_INET6 : DEVADDR_INET4);
- vlist_add(&iface->proto_route, &route->node);
+ vlist_add(&iface->proto_ip.route, &route->node);
return true;
}
proto_apply_static_settings(struct interface *iface, struct blob_attr *attr)
{
struct blob_attr *tb[__OPT_MAX];
- struct in_addr ina;
const char *error;
- int netmask = 32;
+ unsigned int netmask = 32;
int n_v4 = 0, n_v6 = 0;
blobmsg_parse(static_attrs, __OPT_MAX, tb, blob_data(attr), blob_len(attr));
if (tb[OPT_NETMASK]) {
- if (!inet_aton(blobmsg_data(tb[OPT_NETMASK]), &ina)) {
+ netmask = parse_netmask_string(blobmsg_data(tb[OPT_NETMASK]), false);
+ if (netmask > 32) {
error = "INVALID_NETMASK";
goto error;
}
-
- netmask = 32 - fls(~(ntohl(ina.s_addr)));
}
if (tb[OPT_IPADDR])
}
if (tb[OPT_DNS])
- interface_add_dns_server_list(iface, tb[OPT_DNS]);
+ interface_add_dns_server_list(&iface->proto_ip, tb[OPT_DNS]);
return 0;
free(state);
}
-struct interface_proto_state *
+static struct interface_proto_state *
static_attach(const struct proto_handler *h, struct interface *iface,
struct blob_attr *attr)
{