bcm53xx: refactor board.d code in 02_network

1. Use functions for cleaner code
2. Always execute WAN interface generic code

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

Acked-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
master
Rafał Miłecki 2020-04-03 15:55:01 +02:00
parent 3ec70052c5
commit b51ea43f90
1 changed files with 95 additions and 94 deletions

View File

@ -6,82 +6,41 @@
. /lib/functions/system.sh . /lib/functions/system.sh
. /lib/functions/uci-defaults.sh . /lib/functions/uci-defaults.sh
board_config_update bcm53xx_setup_interfaces()
{
board=$(board_name) local board="$1"
# On BCM4708 / BCM4709(4) there are 3 Ethernet interfaces connected to 3 switch
# ports. It's up to vendor which to use.
case "$board" in case "$board" in
tenda,ac9) tenda,ac9)
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"1:lan" "2:lan" "3:lan" "4:lan" "8@eth0" "0:wan" "5@eth1" "1:lan" "2:lan" "3:lan" "4:lan" "8@eth0" "0:wan" "5@eth1"
board_config_flush
exit 0
;; ;;
buffalo,wxr-1900dhp| \ buffalo,wxr-1900dhp| \
buffalo,wzr-1750dhp) buffalo,wzr-1750dhp)
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"0:lan:1" "1:lan:2" "2:lan:3" "3:lan:4" "4:wan:5" "5@eth0" "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"
;; ;;
luxul,abr-4500-v1|\ luxul,abr-4500-v1|\
luxul,xbr-4500-v1) luxul,xbr-4500-v1)
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"0:wan" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5@eth0" "0:wan" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5@eth0"
board_config_flush
exit 0
;; ;;
phicomm,k3) phicomm,k3)
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"0:lan" "1:lan" "2:lan" "3:wan" "5@eth0" "0:lan" "1:lan" "2:lan" "3:wan" "5@eth0"
board_config_flush
exit 0
;;
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
# 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 # NVRAM entries may contain unsorted ports, e.g. Netgear R6250 uses
# vlan1ports=3 2 1 0 5* # vlan1ports=3 2 1 0 5*
# vlan2ports=4 5u # vlan2ports=4 5u
@ -92,22 +51,64 @@ vlan2ports="$(echo $(nvram get vlan2ports | tr " " "\n" | sort))"
if echo "$vlan1ports" | egrep -q "^1 2 3 4 5" && \ if echo "$vlan1ports" | egrep -q "^1 2 3 4 5" && \
echo "$vlan2ports" | egrep -q "^0 5"; then echo "$vlan2ports" | egrep -q "^0 5"; then
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "5t@$ifname" "1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "5t@eth0"
elif echo "$vlan1ports" | egrep -q "^1 2 3 5 7" && \ elif echo "$vlan1ports" | egrep -q "^1 2 3 5 7" && \
echo "$vlan2ports" | egrep -q "^0 7"; then echo "$vlan2ports" | egrep -q "^0 7"; then
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"1:lan" "2:lan" "3:lan" "5:lan" "0:wan" "7t@$ifname" "1:lan" "2:lan" "3:lan" "5:lan" "0:wan" "7t@eth1"
elif echo "$vlan1ports" | egrep -q "^0 1 2 3 5 7 8" && \ elif echo "$vlan1ports" | egrep -q "^0 1 2 3 5 7 8" && \
echo "$vlan2ports" | egrep -q "^4 8"; then echo "$vlan2ports" | egrep -q "^4 8"; then
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"0:lan" "1:lan" "2:lan" "3:lan" "5:lan" "7:lan" "4:wan" "8t@$ifname" "0:lan" "1:lan" "2:lan" "3:lan" "5:lan" "7:lan" "4:wan" "8t@eth2"
else else
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@$ifname" "0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@eth0"
fi fi
;;
esac
}
bcm53xx_setup_macs()
{
local board="$1"
case "$board" in
dlink,dir-885l | \
netgear,r7900 | \
netgear,r8000 | \
netgear,r8500)
# 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"
;;
esac
wan_macaddr="$(nvram get wan_hwaddr)"
case "$board" in
asus,rt-ac87u)
etXmacaddr=$(nvram get et1macaddr)
;;
dlink,dir-885l | \
netgear,r7900 | \
netgear,r8000 | \
netgear,r8500)
etXmacaddr=$(nvram get et2macaddr)
;;
*)
etXmacaddr=$(nvram get et0macaddr)
;;
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)
[ -n "$wan_macaddr" ] && ucidef_set_interface_macaddr "wan" "$wan_macaddr" [ -n "$wan_macaddr" ] && ucidef_set_interface_macaddr "wan" "$wan_macaddr"
}
board_config_update
board=$(board_name)
bcm53xx_setup_interfaces "$board"
bcm53xx_setup_macs "$board"
board_config_flush board_config_flush
exit 0 exit 0