bridge: rename "ifname" attribute to "ports"
authorRafał Miłecki <rafal@milecki.pl>
Fri, 14 May 2021 13:20:28 +0000 (15:20 +0200)
committerRafał Miłecki <rafal@milecki.pl>
Tue, 18 May 2021 10:33:00 +0000 (12:33 +0200)
Bridge aggregates multiple ports so use a more accurate name ("ports").
For backward compatibility add a temporary config translation.

Config example:

config interface 'lan'
        option type 'bridge'
        list ports 'lan1'
        list ports 'lan2'

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
bridge.c
config.c

index 397ac97..4db6e15 100644 (file)
--- a/bridge.c
+++ b/bridge.c
@@ -23,7 +23,7 @@
 #include "system.h"
 
 enum {
-       BRIDGE_ATTR_IFNAME,
+       BRIDGE_ATTR_PORTS,
        BRIDGE_ATTR_STP,
        BRIDGE_ATTR_FORWARD_DELAY,
        BRIDGE_ATTR_PRIORITY,
@@ -44,7 +44,7 @@ enum {
 };
 
 static const struct blobmsg_policy bridge_attrs[__BRIDGE_ATTR_MAX] = {
-       [BRIDGE_ATTR_IFNAME] = { "ifname", BLOBMSG_TYPE_ARRAY },
+       [BRIDGE_ATTR_PORTS] = { "ports", BLOBMSG_TYPE_ARRAY },
        [BRIDGE_ATTR_STP] = { "stp", BLOBMSG_TYPE_BOOL },
        [BRIDGE_ATTR_FORWARD_DELAY] = { "forward_delay", BLOBMSG_TYPE_INT32 },
        [BRIDGE_ATTR_PRIORITY] = { "priority", BLOBMSG_TYPE_INT32 },
@@ -64,7 +64,7 @@ static const struct blobmsg_policy bridge_attrs[__BRIDGE_ATTR_MAX] = {
 };
 
 static const struct uci_blob_param_info bridge_attr_info[__BRIDGE_ATTR_MAX] = {
-       [BRIDGE_ATTR_IFNAME] = { .type = BLOBMSG_TYPE_STRING },
+       [BRIDGE_ATTR_PORTS] = { .type = BLOBMSG_TYPE_STRING },
 };
 
 static const struct uci_blob_param_list bridge_attr_list = {
@@ -104,7 +104,7 @@ struct bridge_state {
 
        struct blob_attr *config_data;
        struct bridge_config config;
-       struct blob_attr *ifnames;
+       struct blob_attr *ports;
        bool active;
        bool force_active;
        bool has_vlans;
@@ -877,8 +877,8 @@ bridge_config_init(struct device *dev)
 
        bst->n_failed = 0;
        vlist_update(&bst->members);
-       if (bst->ifnames) {
-               blobmsg_for_each_attr(cur, bst->ifnames, rem) {
+       if (bst->ports) {
+               blobmsg_for_each_attr(cur, bst->ports, rem) {
                        bridge_add_member(bst, blobmsg_data(cur));
                }
        }
@@ -994,7 +994,7 @@ bridge_reload(struct device *dev, struct blob_attr *attr)
        if (tb_dev[DEV_ATTR_MACADDR])
                bst->primary_port = NULL;
 
-       bst->ifnames = tb_br[BRIDGE_ATTR_IFNAME];
+       bst->ports = tb_br[BRIDGE_ATTR_PORTS];
        device_init_settings(dev, tb_dev);
        bridge_apply_settings(bst, tb_br);
 
@@ -1015,7 +1015,7 @@ bridge_reload(struct device *dev, struct blob_attr *attr)
 
                diff = 0;
                uci_blob_diff(tb_br, otb_br, &bridge_attr_list, &diff);
-               if (diff & ~(1 << BRIDGE_ATTR_IFNAME))
+               if (diff & ~(1 << BRIDGE_ATTR_PORTS))
                    ret = DEV_CONFIG_RESTART;
 
                bridge_config_init(dev);
index fa7cbe4..1f4560f 100644 (file)
--- a/config.c
+++ b/config.c
@@ -95,6 +95,24 @@ 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)
+{
+       const char *ifname;
+
+       if (uci_lookup_option(uci_ctx, s, "ports"))
+               return;
+
+       ifname = uci_lookup_option_string(uci_ctx, s, "ifname");
+       if (ifname)
+               config_fixup_bridge_var(s, "ports", ifname);
+}
+
 static void
 config_fixup_bridge_vlan_filtering(struct uci_section *s, const char *name)
 {
@@ -117,6 +135,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 +273,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);