mirror of https://github.com/hak5/openwrt.git
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
parent
3ec70052c5
commit
b51ea43f90
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue