}
static bool
-parse_addr(struct interface *iface, const char *str, bool v6, int mask, bool ext)
+parse_addr(struct interface *iface, const char *str, bool v6, int mask,
+ bool ext, uint32_t broadcast)
{
struct device_addr *addr;
return false;
}
+ if (broadcast)
+ addr->broadcast = broadcast;
+
if (ext)
addr->flags |= DEVADDR_EXTERNAL;
}
static int
-parse_address_option(struct interface *iface, struct blob_attr *attr, bool v6, int netmask, bool ext)
+parse_address_option(struct interface *iface, struct blob_attr *attr, bool v6,
+ int netmask, bool ext, uint32_t broadcast)
{
struct blob_attr *cur;
int n_addr = 0;
return -1;
n_addr++;
- if (!parse_addr(iface, blobmsg_data(cur), v6, netmask, ext))
+ if (!parse_addr(iface, blobmsg_data(cur), v6, netmask, ext,
+ broadcast))
return -1;
}
const char *error;
unsigned int netmask = 32;
int n_v4 = 0, n_v6 = 0;
+ uint32_t broadcast = 0;
blobmsg_parse(proto_ip_attributes, __OPT_MAX, tb, blob_data(attr), blob_len(attr));
}
if (tb[OPT_IPADDR])
- n_v4 = parse_address_option(iface, tb[OPT_IPADDR], false, netmask, ext);
+ n_v4 = parse_address_option(iface, tb[OPT_IPADDR], false,
+ netmask, ext, broadcast);
if (tb[OPT_IP6ADDR])
- n_v6 = parse_address_option(iface, tb[OPT_IP6ADDR], true, netmask, ext);
+ n_v6 = parse_address_option(iface, tb[OPT_IP6ADDR], true,
+ netmask, ext, 0);
if (!n_v4 && !n_v6) {
error = "NO_ADDRESS";