bcm53xx: set WAN MAC address to don't share one with LAN interface

After analyzing numerous NVRAMs and vendor firmwares it seems the base
MAC address is used for LAN interface. WAN interface has different one
which sometimes is set directly in NVRAM and sometines needs to be
calculated.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Rafał Miłecki 2017-02-01 16:45:19 +01:00
parent 41de9a2e12
commit 5ed23223fd
1 changed files with 10 additions and 1 deletions

View File

@ -25,22 +25,28 @@ buffalo,wzr-1750dhp)
;; ;;
esac esac
wan_macaddr="$(nvram get wan_hwaddr)"
case "$board" in case "$board" in
asus,rt-ac87u) asus,rt-ac87u)
ifname=eth1 ifname=eth1
etXmacaddr=$(nvram get et1macaddr)
;; ;;
dlink,dir-885l | \ dlink,dir-885l | \
netgear,r7900 | \ netgear,r7900 | \
netgear,r8000 | \ netgear,r8000 | \
netgear,r8500) netgear,r8500)
ifname=eth2 ifname=eth2
etXmacaddr=$(nvram get et2macaddr)
;; ;;
*) *)
ifname=eth0 ifname=eth0
etXmacaddr=$(nvram get et0macaddr)
;; ;;
esac 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 # Workaround for devices using eth2 connected to (CPU) switch port 8
case "$board" in case "$board" in
dlink,dir-885l | \ dlink,dir-885l | \
@ -55,6 +61,7 @@ netgear,r8500)
# assigned. Manually assign eth2's MAC to the LAN. # assigned. Manually assign eth2's MAC to the LAN.
et2macaddr="$(nvram get et2macaddr)" et2macaddr="$(nvram get et2macaddr)"
[ -n "$et2macaddr" ] && ucidef_set_interface_macaddr "lan" "$et2macaddr" [ -n "$et2macaddr" ] && ucidef_set_interface_macaddr "lan" "$et2macaddr"
[ -n "$wan_macaddr" ] && ucidef_set_interface_macaddr "wan" "$wan_macaddr"
board_config_flush board_config_flush
exit 0 exit 0
@ -85,6 +92,8 @@ else
"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@$ifname" "0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@$ifname"
fi fi
[ -n "$wan_macaddr" ] && ucidef_set_interface_macaddr "wan" "$wan_macaddr"
board_config_flush board_config_flush
exit 0 exit 0