netifd: allow disabling rule/rule6 config sections
[project/netifd.git] / config.c
index fa7cbe42052d28b37ffd797fb263e35537da3d2c..9bbda39d3fb5259499cc50c10309920b39537364 100644 (file)
--- a/config.c
+++ b/config.c
@@ -95,6 +95,31 @@ config_fixup_bridge_var(struct uci_section *s, const char *name, const char *val
        uci_set(uci_ctx, &ptr);
 }
 
+/**
+ * config_fixup_bridge_ports - translate deprecated configs
+ *
+ * Old configs used "ifname" option for specifying bridge ports. For backward
+ * compatibility translate it into the new "ports" option.
+ */
+static void config_fixup_bridge_ports(struct uci_section *s)
+{
+       struct uci_ptr ptr = {
+               .p = s->package,
+               .s = s,
+               .option = "ifname",
+       };
+
+       if (uci_lookup_option(uci_ctx, s, "ports"))
+               return;
+
+       uci_lookup_ptr(uci_ctx, &ptr, NULL, false);
+       if (!ptr.o)
+               return;
+
+       ptr.value = "ports";
+       uci_rename(uci_ctx, &ptr);
+}
+
 static void
 config_fixup_bridge_vlan_filtering(struct uci_section *s, const char *name)
 {
@@ -117,6 +142,7 @@ config_parse_bridge_interface(struct uci_section *s, struct device_type *devtype
        sprintf(name, "%s-%s", devtype->name_prefix, s->e.name);
        blobmsg_add_string(&b, "name", name);
 
+       config_fixup_bridge_ports(s);
        config_fixup_bridge_vlan_filtering(s, name);
        uci_to_blob(&b, s, devtype->config_params);
        if (!device_create(name, devtype, b.head)) {
@@ -254,8 +280,10 @@ config_init_devices(bool bridge)
                if (!params)
                        params = simple_device_type.config_params;
 
-               if (devtype && devtype->bridge_capability)
+               if (devtype && devtype->bridge_capability) {
+                       config_fixup_bridge_ports(s);
                        config_fixup_bridge_vlan_filtering(s, name);
+               }
 
                blob_buf_init(&b, 0);
                uci_to_blob(&b, s, params);
@@ -734,7 +762,6 @@ config_init_all(void)
 
        vlist_update(&interfaces);
        config_init = true;
-       device_lock();
 
        device_reset_config();
        config_init_devices(true);
@@ -747,12 +774,10 @@ config_init_all(void)
        config_init_wireless();
 
        config_init = false;
-       device_unlock();
 
        device_reset_old();
        device_init_pending();
        vlist_flush(&interfaces);
-       device_free_unused(NULL);
        interface_refresh_assignments(false);
        interface_start_pending();
        wireless_start_pending();