+
+static void
+interface_update(struct vlist_tree *tree, struct vlist_node *node_new,
+ struct vlist_node *node_old)
+{
+ struct interface *if_old = container_of(node_old, struct interface, node);
+ struct interface *if_new = container_of(node_new, struct interface, node);
+
+ if (node_old) {
+ free(if_old->config);
+ netifd_ubus_remove_interface(if_old);
+ if (if_old->proto->free)
+ if_old->proto->free(if_old->proto);
+ free(if_old);
+ }
+
+ if (node_new) {
+ proto_init_interface(if_new, if_new->config);
+ interface_ip_init(if_new);
+ netifd_ubus_add_interface(if_new);
+ }
+}
+
+
+static void __init
+interface_init_list(void)
+{
+ vlist_init(&interfaces, avl_strcmp, interface_update,
+ struct interface, node, name);
+}