[openwrt/openwrt] base-files: add board.d support for bridge device

LEDE Commits lede-commits at lists.infradead.org
Wed Nov 4 01:37:28 EST 2020


blogic pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/be09c5a3cd6535ccfc6b1628546c0416d94bd131

commit be09c5a3cd6535ccfc6b1628546c0416d94bd131
Author: John Crispin <john at phrozen.org>
AuthorDate: Tue Nov 3 17:43:22 2020 +0100

    base-files: add board.d support for bridge device
    
    Latest netifd allows us to setup network bridges with implicit vlan
    tagging. For this to work, we need to setup several additional uci
    sections. This feature is particularly usefull for DSA tupe devices.
    Add board.d and uci-defaults support for generating the sections.
    
    Signed-off-by: John Crispin <john at phrozen.org>
---
 package/base-files/Makefile                        |  2 +-
 package/base-files/files/bin/config_generate       | 35 ++++++++++++++++++++--
 .../base-files/files/lib/functions/uci-defaults.sh |  4 +++
 3 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index c139ea313b..f63c4db533 100644
--- a/package/base-files/Makefile
+++ b/package/base-files/Makefile
@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
 include $(INCLUDE_DIR)/feeds.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=234
+PKG_RELEASE:=235
 PKG_FLAGS:=nonshared
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate
index eb6816e519..e23f901504 100755
--- a/package/base-files/files/bin/config_generate
+++ b/package/base-files/files/bin/config_generate
@@ -7,6 +7,28 @@ CFG=/etc/board.json
 [ -s $CFG ] || /bin/board_detect || exit 1
 [ -s /etc/config/network -a -s /etc/config/system ] && exit 0
 
+generate_bridge() {
+	local name=$1
+	uci -q batch <<-EOF
+		set network.$name=device
+		set network.$name.name=$name
+		set network.$name.type=bridge
+	EOF
+}
+
+bridge_vlan_id=0
+generate_bridge_vlan() {
+	local device=$1
+	local ports="$2"
+	bridge_vlan_id=$((bridge_vlan_id + 1))
+	uci -q batch <<-EOF
+		add network bridge-vlan
+		set network. at bridge-vlan[-1].device='$device'
+		set network. at bridge-vlan[-1].vlan='$bridge_vlan_id'
+		set network. at bridge-vlan[-1].ports='$ports'
+	EOF
+}
+
 generate_static_network() {
 	uci -q batch <<-EOF
 		delete network.loopback
@@ -63,6 +85,7 @@ generate_static_network() {
 addr_offset=2
 generate_network() {
 	local ifname macaddr protocol type ipaddr netmask
+	local bridge=$2
 
 	json_select network
 		json_select "$1"
@@ -77,6 +100,12 @@ generate_network() {
 		*\ * | lan:*) type="bridge" ;;
 	esac
 
+	[ -n "$bridge" ] && {
+		generate_bridge_vlan $bridge "$ifname"
+		ifname=$bridge.$bridge_vlan_id
+		type=""
+	}
+
 	uci -q batch <<-EOF
 		delete network.$1
 		set network.$1='interface'
@@ -236,7 +265,6 @@ generate_switch() {
 	json_select ..
 }
 
-
 generate_static_system() {
 	uci -q batch <<-EOF
 		delete system. at system[0]
@@ -439,8 +467,11 @@ if [ ! -s /etc/config/network ]; then
 	touch /etc/config/network
 	generate_static_network
 
+	json_get_vars bridge
+	[ -n "$bridge" ] && generate_bridge $bridge
+
 	json_get_keys keys network
-	for key in $keys; do generate_network $key; done
+	for key in $keys; do generate_network $key $bridge; done
 
 	json_get_keys keys switch
 	for key in $keys; do generate_switch $key; done
diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh
index 27a409fe3b..39bbeda24c 100755
--- a/package/base-files/files/lib/functions/uci-defaults.sh
+++ b/package/base-files/files/lib/functions/uci-defaults.sh
@@ -90,6 +90,10 @@ ucidef_set_interfaces_lan_wan() {
 	ucidef_set_interface_wan "$wan_if"
 }
 
+ucidef_set_bridge_device() {
+	json_add_string bridge "${1:switch0}"
+}
+
 _ucidef_add_switch_port() {
 	# inherited: $num $device $need_tag $want_untag $role $index $prev_role
 	# inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5



More information about the lede-commits mailing list