summaryrefslogtreecommitdiff
path: root/interface.c
diff options
context:
space:
mode:
authorHans Dedecker <dedeckeh@gmail.com>2015-12-17 15:02:06 +0100
committerFelix Fietkau <nbd@openwrt.org>2015-12-19 12:28:27 +0100
commit6a84e770ed9f4ea0ffe9b20625f8f15868f5424b (patch)
tree76b0a4e871ff0f595e3e087b68d47315b21b1cbc /interface.c
parent245527193e90906451be35c2b8e972b8712ea6ab (diff)
downloadnetifd-6a84e770ed9f4ea0ffe9b20625f8f15868f5424b.tar.gz
interface: Trigger interface update event when interface data is updated via ubus
Interface update event will trigger an interface hotplug event and an ubus notify event which will inform subscribers about the updated interface data field Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Diffstat (limited to 'interface.c')
-rw-r--r--interface.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/interface.c b/interface.c
index 2638342..2aab37c 100644
--- a/interface.c
+++ b/interface.c
@@ -75,6 +75,8 @@ const struct uci_blob_param_list interface_attr_list = {
static void
set_config_state(struct interface *iface, enum interface_config_state s);
+static void
+interface_event(struct interface *iface, enum interface_event ev);
static void
interface_error_flush(struct interface *iface)
@@ -195,6 +197,25 @@ interface_add_data(struct interface *iface, const struct blob_attr *data)
return 0;
}
+int interface_parse_data(struct interface *iface, const struct blob_attr *attr)
+{
+ struct blob_attr *cur;
+ int rem, ret;
+
+ iface->updated = 0;
+
+ blob_for_each_attr(cur, attr, rem) {
+ ret = interface_add_data(iface, cur);
+ if (ret)
+ return ret;
+ }
+
+ if (iface->updated && iface->state == IFS_UP)
+ interface_event(iface, IFEV_UPDATE);
+
+ return 0;
+}
+
static void
interface_event(struct interface *iface, enum interface_event ev)
{