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)
}
n = calloc(1, sizeof(*n) + len);
+ if (!n)
+ return UBUS_STATUS_UNKNOWN_ERROR;
+
memcpy(n->data, data, len);
n->node.key = blobmsg_name(n->data);
avl_insert(&iface->data, &n->node);
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)
{
if (state == IFS_UP)
interface_event(iface, IFEV_DOWN);
interface_ip_set_enabled(&iface->config_ip, false);
+ interface_ip_set_enabled(&iface->proto_ip, false);
interface_ip_flush(&iface->proto_ip);
interface_flush_state(iface);
system_flush_routes();
interface_set_l3_dev(iface, iface->main_dev.dev);
interface_ip_set_enabled(&iface->config_ip, true);
+ interface_ip_set_enabled(&iface->proto_ip, true);
system_flush_routes();
iface->state = IFS_UP;
iface->start_time = system_get_rtime();
return;
interface_ip_set_enabled(&iface->config_ip, false);
+ interface_ip_set_enabled(&iface->proto_ip, false);
interface_ip_flush(&iface->proto_ip);
device_add_user(&iface->l3_dev, dev);
return;
}
interface_ip_set_enabled(&iface->config_ip, enabled);
+ interface_ip_set_enabled(&iface->proto_ip, enabled);
}
}