diff options
author | Felix Fietkau <nbd@openwrt.org> | 2012-02-26 17:43:10 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2012-02-26 17:43:10 +0100 |
commit | 73a32ab092ae32ec97e20b61512998c8411b8bd5 (patch) | |
tree | f69da571f77133096292198fbd6dec73013aff45 /proto.c | |
parent | 05c0ded29cf9dd7716528e61029886550ba1f7ab (diff) |
move broadcast address handling to the core
Diffstat (limited to 'proto.c')
-rw-r--r-- | proto.c | 19 |
1 files changed, 14 insertions, 5 deletions
@@ -123,7 +123,8 @@ proto_parse_ip_addr_string(const char *str, bool v6, int mask) } 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; @@ -133,6 +134,9 @@ parse_addr(struct interface *iface, const char *str, bool v6, int mask, bool ext return false; } + if (broadcast) + addr->broadcast = broadcast; + if (ext) addr->flags |= DEVADDR_EXTERNAL; @@ -141,7 +145,8 @@ parse_addr(struct interface *iface, const char *str, bool v6, int mask, bool ext } 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; @@ -152,7 +157,8 @@ parse_address_option(struct interface *iface, struct blob_attr *attr, bool v6, i 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; } @@ -188,6 +194,7 @@ proto_apply_ip_settings(struct interface *iface, struct blob_attr *attr, bool ex 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)); @@ -200,10 +207,12 @@ proto_apply_ip_settings(struct interface *iface, struct blob_attr *attr, bool ex } 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"; |