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@phrozen.org>
This commit is contained in:
John Crispin 2020-11-03 17:43:22 +01:00
parent df9ee254aa
commit be09c5a3cd
3 changed files with 38 additions and 3 deletions

View File

@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
include $(INCLUDE_DIR)/feeds.mk include $(INCLUDE_DIR)/feeds.mk
PKG_NAME:=base-files PKG_NAME:=base-files
PKG_RELEASE:=234 PKG_RELEASE:=235
PKG_FLAGS:=nonshared PKG_FLAGS:=nonshared
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/

View File

@ -7,6 +7,28 @@ CFG=/etc/board.json
[ -s $CFG ] || /bin/board_detect || exit 1 [ -s $CFG ] || /bin/board_detect || exit 1
[ -s /etc/config/network -a -s /etc/config/system ] && exit 0 [ -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() { generate_static_network() {
uci -q batch <<-EOF uci -q batch <<-EOF
delete network.loopback delete network.loopback
@ -63,6 +85,7 @@ generate_static_network() {
addr_offset=2 addr_offset=2
generate_network() { generate_network() {
local ifname macaddr protocol type ipaddr netmask local ifname macaddr protocol type ipaddr netmask
local bridge=$2
json_select network json_select network
json_select "$1" json_select "$1"
@ -77,6 +100,12 @@ generate_network() {
*\ * | lan:*) type="bridge" ;; *\ * | lan:*) type="bridge" ;;
esac esac
[ -n "$bridge" ] && {
generate_bridge_vlan $bridge "$ifname"
ifname=$bridge.$bridge_vlan_id
type=""
}
uci -q batch <<-EOF uci -q batch <<-EOF
delete network.$1 delete network.$1
set network.$1='interface' set network.$1='interface'
@ -236,7 +265,6 @@ generate_switch() {
json_select .. json_select ..
} }
generate_static_system() { generate_static_system() {
uci -q batch <<-EOF uci -q batch <<-EOF
delete system.@system[0] delete system.@system[0]
@ -439,8 +467,11 @@ if [ ! -s /etc/config/network ]; then
touch /etc/config/network touch /etc/config/network
generate_static_network generate_static_network
json_get_vars bridge
[ -n "$bridge" ] && generate_bridge $bridge
json_get_keys keys network 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 json_get_keys keys switch
for key in $keys; do generate_switch $key; done for key in $keys; do generate_switch $key; done

View File

@ -90,6 +90,10 @@ ucidef_set_interfaces_lan_wan() {
ucidef_set_interface_wan "$wan_if" ucidef_set_interface_wan "$wan_if"
} }
ucidef_set_bridge_device() {
json_add_string bridge "${1:switch0}"
}
_ucidef_add_switch_port() { _ucidef_add_switch_port() {
# inherited: $num $device $need_tag $want_untag $role $index $prev_role # inherited: $num $device $need_tag $want_untag $role $index $prev_role
# inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5 # inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5