bcm53xx: set WAN MAC address to don't share one with LAN interface
authorRafał Miłecki <rafal@milecki.pl>
Wed, 1 Feb 2017 15:45:19 +0000 (16:45 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Fri, 3 Feb 2017 06:50:59 +0000 (07:50 +0100)
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>
target/linux/bcm53xx/base-files/etc/board.d/02_network

index 0a055f4d1ffe28a0218ed58a96885b557347a6cf..fa2837cba2bb20a18889526e6f81a44b920c025b 100755 (executable)
@@ -25,22 +25,28 @@ buffalo,wzr-1750dhp)
        ;;
 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 | \
@@ -55,6 +61,7 @@ netgear,r8500)
        # 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
@@ -85,6 +92,8 @@ else
                "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
 
 exit 0