diff mbox series

[OpenWrt-Devel] bcm53xx: reorder board.d code in 02_network

Message ID 20200403142930.10236-1-zajec5@gmail.com
State Changes Requested
Headers show
Series [OpenWrt-Devel] bcm53xx: reorder board.d code in 02_network | expand

Commit Message

Rafał Miłecki April 3, 2020, 2:29 p.m. UTC
From: Rafał Miłecki <rafal@milecki.pl>

Reorder existing code so that:
1. Switch config gets handled first
2. WAN interface generic code gets always executed

Before this change WAN interface code wasn't executed on all devices due
to early "exit 0".

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
 .../bcm53xx/base-files/etc/board.d/02_network | 98 ++++++++-----------
 1 file changed, 41 insertions(+), 57 deletions(-)

Comments

Adrian Schmutzler April 3, 2020, 2:50 p.m. UTC | #1
Hi Rafał,

Acked-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>

One comment inline below.

You may also consider using the similar "function-style" approach used in ath79, ramips, ...:
https://github.com/openwrt/openwrt/blob/master/target/linux/ath79/generic/base-files/etc/board.d/02_network

> -----Original Message-----
> From: openwrt-devel [mailto:openwrt-devel-bounces@lists.openwrt.org]
> On Behalf Of Rafal Milecki
> Sent: Freitag, 3. April 2020 16:30
> To: openwrt-devel@lists.openwrt.org
> Cc: Rafał Miłecki <rafal@milecki.pl>
> Subject: [OpenWrt-Devel] [PATCH] bcm53xx: reorder board.d code in
> 02_network
> 
> From: Rafał Miłecki <rafal@milecki.pl>
> 
> Reorder existing code so that:
> 1. Switch config gets handled first
> 2. WAN interface generic code gets always executed
> 
> Before this change WAN interface code wasn't executed on all devices due
> to early "exit 0".
> 
> Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
> ---
>  .../bcm53xx/base-files/etc/board.d/02_network | 98 ++++++++-----------
>  1 file changed, 41 insertions(+), 57 deletions(-)
> 
> diff --git a/target/linux/bcm53xx/base-files/etc/board.d/02_network
> b/target/linux/bcm53xx/base-files/etc/board.d/02_network
> index 9fd26e72f4..f9cedff5b5 100755
> --- a/target/linux/bcm53xx/base-files/etc/board.d/02_network
> +++ b/target/linux/bcm53xx/base-files/etc/board.d/02_network
> @@ -10,50 +10,79 @@ board_config_update
> 
>  board=$(board_name)
> 
> +# On BCM4708 / BCM4709(4) there are 3 Ethernet interfaces connected to
> +3 switch # ports. It's up to vendor design which to use.
>  case "$board" in
>  tenda,ac9)
>  	ucidef_add_switch "switch0" \
>  		"1:lan" "2:lan" "3:lan" "4:lan" "8@eth0" "0:wan" "5@eth1"
> -	board_config_flush
> -	exit 0
>  	;;
>  buffalo,wxr-1900dhp| \
>  buffalo,wzr-1750dhp)
>  	ucidef_add_switch "switch0" \
>  		"0:lan:1" "1:lan:2" "2:lan:3" "3:lan:4" "4:wan:5" "5@eth0"
> -	board_config_flush
> -	exit 0
> +	;;
> +dlink,dir-885l | \
> +netgear,r7900 | \
> +netgear,r8000 | \
> +netgear,r8500)
> +	# NVRAM specifies port 8 (eth2) - unsupported by OpenWrt b53
> +	# Use port 5 (eth0) as workaround
> +	ucidef_add_switch "switch0" \
> +		"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@eth0"
> +
> +	# As vendor doesn't use eth0 its MAC may be missing. Use one from
> eth2.
> +	et2macaddr="$(nvram get et2macaddr)"
> +	[ -n "$et2macaddr" ] && ucidef_set_interface_macaddr "lan"

Though this is not the wan address, I'd move this to the "MAC section" below to have all MAC address assignments together, like it is done on others targets.

Best

Adrian

> "$et2macaddr"
>  	;;
>  luxul,abr-4500-v1|\
>  luxul,xbr-4500-v1)
>  	ucidef_add_switch "switch0" \
>  		"0:wan" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5@eth0"
> -	board_config_flush
> -	exit 0
>  	;;
>  phicomm,k3)
>  	ucidef_add_switch "switch0" \
>  		"0:lan" "1:lan" "2:lan" "3:wan" "5@eth0"
> -	board_config_flush
> -	exit 0
> -    ;;
> +	;;
> +*)
> +	# NVRAM entries may contain unsorted ports, e.g. Netgear R6250
> uses
> +	# vlan1ports=3 2 1 0 5*
> +	# vlan2ports=4 5u
> +	# and early Netgear R8000 was using
> +	# vlan1ports=3 2 1 0 5 7 8*
> +	vlan1ports="$(echo $(nvram get vlan1ports | tr " " "\n" | sort))"
> +	vlan2ports="$(echo $(nvram get vlan2ports | tr " " "\n" | sort))"
> +	if echo "$vlan1ports" | egrep -q "^1 2 3 4 5" && \
> +	   echo "$vlan2ports" | egrep -q "^0 5"; then
> +		ucidef_add_switch "switch0" \
> +			"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "5t@eth0"
> +	elif echo "$vlan1ports" | egrep -q "^1 2 3 5 7" && \
> +	     echo "$vlan2ports" | egrep -q "^0 7"; then
> +		ucidef_add_switch "switch0" \
> +			"1:lan" "2:lan" "3:lan" "5:lan" "0:wan" "7t@eth1"
> +	elif echo "$vlan1ports" | egrep -q "^0 1 2 3 5 7 8" && \
> +	     echo "$vlan2ports" | egrep -q "^4 8"; then
> +		ucidef_add_switch "switch0" \
> +			"0:lan" "1:lan" "2:lan" "3:lan" "5:lan" "7:lan" "4:wan"
> "8t@eth2"
> +	else
> +		ucidef_add_switch "switch0" \
> +			"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@eth0"
> +	fi
> +	;;
>  esac
> 
>  wan_macaddr="$(nvram get wan_hwaddr)"
>  case "$board" in
>  asus,rt-ac87u)
> -	ifname=eth1
>  	etXmacaddr=$(nvram get et1macaddr)
>  	;;
>  dlink,dir-885l | \
>  netgear,r7900 | \
>  netgear,r8000 | \
>  netgear,r8500)
> -	ifname=eth2
>  	etXmacaddr=$(nvram get et2macaddr)
>  	;;
>  *)
> -	ifname=eth0
>  	etXmacaddr=$(nvram get et0macaddr)
>  	;;
>  esac
> @@ -61,51 +90,6 @@ esac
>  # If WAN MAC isn't explicitly set, calculate it using base MAC as reference.
>  [ -z "$wan_macaddr" -a -n "$etXmacaddr" ] &&
> wan_macaddr=$(macaddr_add "$etXmacaddr" 1)
> 
> -# Workaround for devices using eth2 connected to (CPU) switch port 8 -case
> "$board" in -dlink,dir-885l | \
> -netgear,r7900 | \
> -netgear,r8000 | \
> -netgear,r8500)
> -	ifname=eth0
> -	ucidef_add_switch "switch0" \
> -		"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@$ifname"
> -
> -	# These devices should use eth2 so their eth0 interface often has no
> MAC
> -	# assigned. Manually assign eth2's MAC to the LAN.
> -	et2macaddr="$(nvram get et2macaddr)"
> -	[ -n "$et2macaddr" ] && ucidef_set_interface_macaddr "lan"
> "$et2macaddr"
> -	[ -n "$wan_macaddr" ] && ucidef_set_interface_macaddr "wan"
> "$wan_macaddr"
> -
> -	board_config_flush
> -	exit 0
> -	;;
> -esac
> -
> -# NVRAM entries may contain unsorted ports, e.g. Netgear R6250 uses -#
> vlan1ports=3 2 1 0 5* -# vlan2ports=4 5u -# and early Netgear R8000 was
> using -# vlan1ports=3 2 1 0 5 7 8* -vlan1ports="$(echo $(nvram get vlan1ports
> | tr " " "\n" | sort))"
> -vlan2ports="$(echo $(nvram get vlan2ports | tr " " "\n" | sort))"
> -if echo "$vlan1ports" | egrep -q "^1 2 3 4 5" && \
> -   echo "$vlan2ports" | egrep -q "^0 5"; then
> -	ucidef_add_switch "switch0" \
> -		"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "5t@$ifname"
> -elif echo "$vlan1ports" | egrep -q "^1 2 3 5 7" && \
> -     echo "$vlan2ports" | egrep -q "^0 7"; then
> -	ucidef_add_switch "switch0" \
> -		"1:lan" "2:lan" "3:lan" "5:lan" "0:wan" "7t@$ifname"
> -elif echo "$vlan1ports" | egrep -q "^0 1 2 3 5 7 8" && \
> -     echo "$vlan2ports" | egrep -q "^4 8"; then
> -	ucidef_add_switch "switch0" \
> -		"0:lan" "1:lan" "2:lan" "3:lan" "5:lan" "7:lan" "4:wan"
> "8t@$ifname"
> -else
> -	ucidef_add_switch "switch0" \
> -		"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@$ifname"
> -fi
> -
>  [ -n "$wan_macaddr" ] && ucidef_set_interface_macaddr "wan"
> "$wan_macaddr"
> 
>  board_config_flush
> --
> 2.25.1
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
diff mbox series

Patch

diff --git a/target/linux/bcm53xx/base-files/etc/board.d/02_network b/target/linux/bcm53xx/base-files/etc/board.d/02_network
index 9fd26e72f4..f9cedff5b5 100755
--- a/target/linux/bcm53xx/base-files/etc/board.d/02_network
+++ b/target/linux/bcm53xx/base-files/etc/board.d/02_network
@@ -10,50 +10,79 @@  board_config_update
 
 board=$(board_name)
 
+# On BCM4708 / BCM4709(4) there are 3 Ethernet interfaces connected to 3 switch
+# ports. It's up to vendor design which to use.
 case "$board" in
 tenda,ac9)
 	ucidef_add_switch "switch0" \
 		"1:lan" "2:lan" "3:lan" "4:lan" "8@eth0" "0:wan" "5@eth1"
-	board_config_flush
-	exit 0
 	;;
 buffalo,wxr-1900dhp| \
 buffalo,wzr-1750dhp)
 	ucidef_add_switch "switch0" \
 		"0:lan:1" "1:lan:2" "2:lan:3" "3:lan:4" "4:wan:5" "5@eth0"
-	board_config_flush
-	exit 0
+	;;
+dlink,dir-885l | \
+netgear,r7900 | \
+netgear,r8000 | \
+netgear,r8500)
+	# NVRAM specifies port 8 (eth2) - unsupported by OpenWrt b53
+	# Use port 5 (eth0) as workaround
+	ucidef_add_switch "switch0" \
+		"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@eth0"
+
+	# As vendor doesn't use eth0 its MAC may be missing. Use one from eth2.
+	et2macaddr="$(nvram get et2macaddr)"
+	[ -n "$et2macaddr" ] && ucidef_set_interface_macaddr "lan" "$et2macaddr"
 	;;
 luxul,abr-4500-v1|\
 luxul,xbr-4500-v1)
 	ucidef_add_switch "switch0" \
 		"0:wan" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5@eth0"
-	board_config_flush
-	exit 0
 	;;
 phicomm,k3)
 	ucidef_add_switch "switch0" \
 		"0:lan" "1:lan" "2:lan" "3:wan" "5@eth0"
-	board_config_flush
-	exit 0
-    ;;
+	;;
+*)
+	# NVRAM entries may contain unsorted ports, e.g. Netgear R6250 uses
+	# vlan1ports=3 2 1 0 5*
+	# vlan2ports=4 5u
+	# and early Netgear R8000 was using
+	# vlan1ports=3 2 1 0 5 7 8*
+	vlan1ports="$(echo $(nvram get vlan1ports | tr " " "\n" | sort))"
+	vlan2ports="$(echo $(nvram get vlan2ports | tr " " "\n" | sort))"
+	if echo "$vlan1ports" | egrep -q "^1 2 3 4 5" && \
+	   echo "$vlan2ports" | egrep -q "^0 5"; then
+		ucidef_add_switch "switch0" \
+			"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "5t@eth0"
+	elif echo "$vlan1ports" | egrep -q "^1 2 3 5 7" && \
+	     echo "$vlan2ports" | egrep -q "^0 7"; then
+		ucidef_add_switch "switch0" \
+			"1:lan" "2:lan" "3:lan" "5:lan" "0:wan" "7t@eth1"
+	elif echo "$vlan1ports" | egrep -q "^0 1 2 3 5 7 8" && \
+	     echo "$vlan2ports" | egrep -q "^4 8"; then
+		ucidef_add_switch "switch0" \
+			"0:lan" "1:lan" "2:lan" "3:lan" "5:lan" "7:lan" "4:wan" "8t@eth2"
+	else
+		ucidef_add_switch "switch0" \
+			"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@eth0"
+	fi
+	;;
 esac
 
 wan_macaddr="$(nvram get wan_hwaddr)"
 case "$board" in
 asus,rt-ac87u)
-	ifname=eth1
 	etXmacaddr=$(nvram get et1macaddr)
 	;;
 dlink,dir-885l | \
 netgear,r7900 | \
 netgear,r8000 | \
 netgear,r8500)
-	ifname=eth2
 	etXmacaddr=$(nvram get et2macaddr)
 	;;
 *)
-	ifname=eth0
 	etXmacaddr=$(nvram get et0macaddr)
 	;;
 esac
@@ -61,51 +90,6 @@  esac
 # If WAN MAC isn't explicitly set, calculate it using base MAC as reference.
 [ -z "$wan_macaddr" -a -n "$etXmacaddr" ] && wan_macaddr=$(macaddr_add "$etXmacaddr" 1)
 
-# Workaround for devices using eth2 connected to (CPU) switch port 8
-case "$board" in
-dlink,dir-885l | \
-netgear,r7900 | \
-netgear,r8000 | \
-netgear,r8500)
-	ifname=eth0
-	ucidef_add_switch "switch0" \
-		"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@$ifname"
-
-	# These devices should use eth2 so their eth0 interface often has no MAC
-	# assigned. Manually assign eth2's MAC to the LAN.
-	et2macaddr="$(nvram get et2macaddr)"
-	[ -n "$et2macaddr" ] && ucidef_set_interface_macaddr "lan" "$et2macaddr"
-	[ -n "$wan_macaddr" ] && ucidef_set_interface_macaddr "wan" "$wan_macaddr"
-
-	board_config_flush
-	exit 0
-	;;
-esac
-
-# NVRAM entries may contain unsorted ports, e.g. Netgear R6250 uses
-# vlan1ports=3 2 1 0 5*
-# vlan2ports=4 5u
-# and early Netgear R8000 was using
-# vlan1ports=3 2 1 0 5 7 8*
-vlan1ports="$(echo $(nvram get vlan1ports | tr " " "\n" | sort))"
-vlan2ports="$(echo $(nvram get vlan2ports | tr " " "\n" | sort))"
-if echo "$vlan1ports" | egrep -q "^1 2 3 4 5" && \
-   echo "$vlan2ports" | egrep -q "^0 5"; then
-	ucidef_add_switch "switch0" \
-		"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "5t@$ifname"
-elif echo "$vlan1ports" | egrep -q "^1 2 3 5 7" && \
-     echo "$vlan2ports" | egrep -q "^0 7"; then
-	ucidef_add_switch "switch0" \
-		"1:lan" "2:lan" "3:lan" "5:lan" "0:wan" "7t@$ifname"
-elif echo "$vlan1ports" | egrep -q "^0 1 2 3 5 7 8" && \
-     echo "$vlan2ports" | egrep -q "^4 8"; then
-	ucidef_add_switch "switch0" \
-		"0:lan" "1:lan" "2:lan" "3:lan" "5:lan" "7:lan" "4:wan" "8t@$ifname"
-else
-	ucidef_add_switch "switch0" \
-		"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@$ifname"
-fi
-
 [ -n "$wan_macaddr" ] && ucidef_set_interface_macaddr "wan" "$wan_macaddr"
 
 board_config_flush