Rafał Miłecki b51ea43f90 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>
2020-04-03 17:59:56 +02:00

115 lines
3.0 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (C) 2011 OpenWrt.org
#
. /lib/functions/system.sh
. /lib/functions/uci-defaults.sh
bcm53xx_setup_interfaces()
{
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
tenda,ac9)
ucidef_add_switch "switch0" \
"1:lan" "2:lan" "3:lan" "4:lan" "8@eth0" "0:wan" "5@eth1"
;;
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"
;;
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,xbr-4500-v1)
ucidef_add_switch "switch0" \
"0:wan" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5@eth0"
;;
phicomm,k3)
ucidef_add_switch "switch0" \
"0:lan" "1:lan" "2:lan" "3:wan" "5@eth0"
;;
*)
# 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
}
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"
}
board_config_update
board=$(board_name)
bcm53xx_setup_interfaces "$board"
bcm53xx_setup_macs "$board"
board_config_flush
exit 0