From 1fdf787f83456bf33ad6ad77c20e364d588d90e6 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Tue, 3 Nov 2020 17:43:22 +0100 Subject: [PATCH] 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 --- package/base-files/Makefile | 2 +- package/base-files/files/bin/config_generate | 35 +++++++++++++++++-- .../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 b212b4cdeb..00efbea29f 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:=211 +PKG_RELEASE:=212 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 1c0334475b..6f6d58399f 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.@bridge-vlan[-1].device='$device' + set network.@bridge-vlan[-1].vlan='$bridge_vlan_id' + set network.@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.@system[0] @@ -430,8 +458,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 8cf2735374..8cb20c62ee 100755 --- a/package/base-files/files/lib/functions/uci-defaults.sh +++ b/package/base-files/files/lib/functions/uci-defaults.sh @@ -84,6 +84,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