[PATCH] base-files: add board.d support for bridge device
John Crispin
john at phrozen.org
Tue Nov 3 12:25:40 EST 2020
thanks for the quick review
John
On 03.11.20 18:24, Adrian Schmutzler wrote:
> 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
More information about the openwrt-devel
mailing list