[openwrt/openwrt] base-files: use "ports" array in board.json network for bridges

LEDE Commits lede-commits at lists.infradead.org
Tue May 18 03:31:02 PDT 2021


rmilecki pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/d42640e389a8b22a31fb0061c12cd9dfbddb87b8

commit d42640e389a8b22a31fb0061c12cd9dfbddb87b8
Author: Rafał Miłecki <rafal at milecki.pl>
AuthorDate: Fri May 14 11:09:57 2021 +0200

    base-files: use "ports" array in board.json network for bridges
    
    Bridge aggregates multiple ports so use a more accurate name ("ports")
    and format (array) for storing them in board.json.
    
    Example:
    
    "network": {
            "lan": {
                    "ports": [
                            "lan1",
                            "lan2",
                            "lan3",
                            "lan4"
                    ],
                    "protocol": "static"
            },
            "wan": {
                    "ifname": "wan",
                    "protocol": "dhcp"
            }
    }
    
    Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
---
 package/base-files/files/bin/config_generate          | 19 +++++++++++++------
 .../base-files/files/lib/functions/uci-defaults.sh    |  8 +++++++-
 2 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate
index ee3958e733..56f6c4423b 100755
--- a/package/base-files/files/bin/config_generate
+++ b/package/base-files/files/bin/config_generate
@@ -91,21 +91,28 @@ generate_static_network() {
 
 addr_offset=2
 generate_network() {
-	local ifname macaddr protocol type ipaddr netmask vlan
+	local ports ifname macaddr protocol type ipaddr netmask vlan
 	local bridge=$2
 
 	json_select network
 		json_select "$1"
+			json_get_values ports ports
 			json_get_vars ifname macaddr protocol ipaddr netmask vlan
 		json_select ..
 	json_select ..
 
-	[ -n "$ifname" ] || return
+	[ -n "$ifname" -o -n "$ports" ] || return
 
-	# force bridge for multi-interface devices (and lan)
-	case "$1:$ifname" in
-		*\ * | lan:*) type="bridge" ;;
-	esac
+	# Force bridge for "lan" as it may have other devices (e.g. wireless)
+	# bridged
+	[ "$1" = "lan" -a -z "$ports" ] && {
+		ports="$ifname"
+	}
+
+	[ -n "$ports" ] && {
+		type="bridge"
+		ifname="$ports"
+	}
 
 	[ -n "$bridge" ] && {
 		if [ -z "$vlan" ]; then
diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh
index 134c527d8d..407a9c710f 100644
--- a/package/base-files/files/lib/functions/uci-defaults.sh
+++ b/package/base-files/files/lib/functions/uci-defaults.sh
@@ -39,7 +39,13 @@ ucidef_set_interface() {
 
 		[ -n "$opt" -a -n "$val" ] || break
 
-		json_add_string "$opt" "$val"
+		[ "$opt" = "ifname" -a "$val" != "${val/ //}" ] && {
+			json_select_array "ports"
+			for e in $val; do json_add_string "" "$e"; done
+			json_close_array
+		} || {
+			json_add_string "$opt" "$val"
+		}
 	done
 
 	if ! json_is_a protocol string; then



More information about the lede-commits mailing list