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

Adrian Schmutzler mail at adrianschmutzler.de
Tue Nov 3 12:24:53 EST 2020


Hi John,

> -----Original Message-----
> From: openwrt-devel [mailto:openwrt-devel-bounces at lists.openwrt.org]
> On Behalf Of John Crispin
> Sent: Dienstag, 3. November 2020 17:43
> To: openwrt-devel at lists.openwrt.org
> Cc: John Crispin <john at phrozen.org>
> 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.

Please also bump PKG_RELEASE for base-files when you apply this.

One typo below ...

> 
> Signed-off-by: John Crispin <john at phrozen.org>
> ---
>  package/base-files/files/bin/config_generate  | 35 +++++++++++++++++--
>  .../files/lib/functions/uci-defaults.sh       |  4 +++
>  2 files changed, 37 insertions(+), 2 deletions(-)
> 
> 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..73ba279fd5 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_brigde_device() {

brigde->bridge

Best

Adrian

> +	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
> --
> 2.25.1
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: openpgp-digital-signature.asc
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.openwrt.org/pipermail/openwrt-devel/attachments/20201103/6204eba1/attachment.sig>


More information about the openwrt-devel mailing list