summaryrefslogtreecommitdiffhomepage
path: root/interface.c
diff options
context:
space:
mode:
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)
{