From patchwork Tue Nov 3 16:43:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Crispin X-Patchwork-Id: 1393203 X-Patchwork-Delegate: blogic@openwrt.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.openwrt.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=phrozen.org Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=merlin.20170209 header.b=qQjaGKuU; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CQbJ31q1dz9sSn for ; Wed, 4 Nov 2020 03:45:38 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=iH4dZGXv0fGoexcK3r2TTFKj2bDt1fsW12xzCQWlaXs=; b=qQjaGKuUuz/olQsG1LX4ciKk8R Jjt476m3Kgqxh6SkgB6XwB1LS8zNfML+rD4rSZS/ZntfcvvFJYui9KClbueVw5uccrKhY374NfOhp AZRNtjaSXBDXRNJJNzb98Dzlk6p8h6xxOqowNxaUDRuXsJAjBsTJaMALIEW+q43YRxNh+p7rRZjae 37vJ5VU4o9Vp6msrRnMT6y49cx8o5aWGH+/IgHq/KNI+hGVRbR4wnR1pLDjScPUr8OLZcydhgQFA0 RTqbzZ/ksCBm9Z7poc8M3qB5MkqEpoBwgHYzGmWm+WREy6kxLe8hJTytk/up5D9S+EikIaRjhh8Tb n5fV8fTQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kZzPC-0006En-7A; Tue, 03 Nov 2020 16:43:34 +0000 Received: from nbd.name ([2a01:4f8:221:3d45::2]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kZzP9-0006Dc-1a for openwrt-devel@lists.openwrt.org; Tue, 03 Nov 2020 16:43:32 +0000 Received: from [149.224.151.57] (helo=localhost.localdomain) by ds12 with esmtpa (Exim 4.89) (envelope-from ) id 1kZzP5-0003tk-2U; Tue, 03 Nov 2020 17:43:27 +0100 From: John Crispin To: openwrt-devel@lists.openwrt.org Subject: [PATCH] base-files: add board.d support for bridge device Date: Tue, 3 Nov 2020 17:43:22 +0100 Message-Id: <20201103164322.3964629-1-john@phrozen.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201103_114331_213431_CA5B01D3 X-CRM114-Status: GOOD ( 13.55 ) X-Spam-Score: 0.0 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: John Crispin Sender: "openwrt-devel" Errors-To: openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org 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/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.@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] @@ -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() { + 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