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)
{
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)) {
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);
vlist_update(&interfaces);
config_init = true;
- device_lock();
device_reset_config();
config_init_devices(true);
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();