diff options
author | Patrick Grimm <stargieg@gmail.com> | 2015-06-14 22:55:50 +0200 |
---|---|---|
committer | Patrick Grimm <stargieg@gmail.com> | 2015-06-14 22:55:50 +0200 |
commit | e99ca79b04f18831ada51b913a3869804ddf98ee (patch) | |
tree | 1c3600813dfc32f15eca9d35e1ad53c3b42628fa /src/ubus.c | |
parent | 3ee43ee22302fb38f74454c38710a5937afb74e3 (diff) |
dhcpv4: add ubus_get_address4 ubus_get_mask4 function
Signed-off-by: Patrick Grimm <patrick@lunatiki.de>
Diffstat (limited to 'src/ubus.c')
-rw-r--r-- | src/ubus.c | 51 |
1 files changed, 51 insertions, 0 deletions
@@ -361,6 +361,57 @@ bool ubus_has_prefix(const char *name, const char *ifname) return false; } +struct in_addr ubus_get_address4(const char *name) +{ + struct blob_attr *c; + unsigned rem; + + if (!dump) + return NULL; + + blobmsg_for_each_attr(c, dump, rem) { + struct blob_attr *tb[IFACE_ATTR_MAX]; + blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb, blobmsg_data(c), blobmsg_data_len(c)); + + if (!tb[IFACE_ATTR_INTERFACE] || strcmp(name, + blobmsg_get_string(tb[IFACE_ATTR_INTERFACE]))) + continue; + + if (tb[IFACE_ATTR_IFNAME]) { + struct in_addr addr4; + if (inet_pton(AF_INET, blobmsg_get_string(tb[IFACE_ATTR_ADDRESS4]), &addr4) == 1) + return addr4; + } + } + + return NULL; +} + +struct in_addr ubus_get_mask4(const char *name) +{ + struct blob_attr *c; + unsigned rem; + + if (!dump) + return NULL; + + blobmsg_for_each_attr(c, dump, rem) { + struct blob_attr *tb[IFACE_ATTR_MAX]; + blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb, blobmsg_data(c), blobmsg_data_len(c)); + + if (!tb[IFACE_ATTR_INTERFACE] || strcmp(name, + blobmsg_get_string(tb[IFACE_ATTR_INTERFACE]))) + continue; + + if (tb[IFACE_ATTR_IFNAME]) { + struct in_addr mask4; + if (inet_pton(AF_INET, blobmsg_get_string(tb[IFACE_ATTR_MASK4]), &mask4) == 1) + return mask4; + } + } + + return NULL; +} int init_ubus(void) { |