mediatek: store MAC address in boot partition on Banana Pi R2
authorDavid Woodhouse <dwmw2@infradead.org>
Sun, 14 Jun 2020 13:20:36 +0000 (14:20 +0100)
committerPetr Štetiar <ynezz@true.cz>
Wed, 8 Jul 2020 21:22:30 +0000 (23:22 +0200)
Like many boards, the Banana Pi R2 doesn't have permanant storage of
its MAC address, and we store the first random one that the kernel
generates in order to use it later and at least be consistent.

Store it in the FAT boot partition, just as the U7623 board (and others)
do.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
target/linux/mediatek/mt7623/base-files/lib/preinit/07_set_iface_mac

index f64458526f0906f34b15707dc065a8c98960200c..60b699d9c96711dd6b8f7087c13c3eb3a65635da 100644 (file)
@@ -1,23 +1,19 @@
 # Copyright (C) 2018 OpenWrt.org
 
-RECOVERY_PART=/dev/mmcblk0p1
+. /lib/functions.sh
+. /lib/functions/system.sh
 
-preinit_set_mac_address() {
+set_recovery_mac_address() {
+       local RECOVERY_PART="$1"
        local mac
 
-       . /lib/functions.sh
-       . /lib/functions/system.sh
-
-       case $(board_name) in
-       unielec,u7623-02-emmc-512m)
-               if [ -b $RECOVERY_PART ]; then
-                       insmod nls_cp437
-                       insmod nls_iso8859-1
-                       insmod fat
-                       insmod vfat
-                       mkdir -p /tmp/recovery
-                       mount -o rw,noatime $RECOVERY_PART /tmp/recovery
-
+       if [ -b $RECOVERY_PART ]; then
+               insmod nls_cp437
+               insmod nls_iso8859-1
+               insmod fat
+               insmod vfat
+               mkdir -p /tmp/recovery
+               if mount -o rw,noatime $RECOVERY_PART -t vfat /tmp/recovery; then
                        if [ -f "/tmp/recovery/mac_addr" ];
                        then
                                mac=$(cat /tmp/recovery/mac_addr)
@@ -28,17 +24,34 @@ preinit_set_mac_address() {
 
                        sync
                        umount /tmp/recovery
-                       rm -rf /tmp/recovery
-               fi
+                       rmdir /tmp/recovery
 
-               ip link set dev wan address $mac 2> /dev/null
+                       ip link set dev wan address $mac 2> /dev/null
 
-               mac=$(macaddr_add $mac 1)
+                       mac=$(macaddr_add $mac 1)
 
-               ip link set dev lan0 address $mac 2>/dev/null
-               ip link set dev lan1 address $mac 2>/dev/null
-               ip link set dev lan2 address $mac 2>/dev/null
-               ip link set dev lan3 address $mac 2>/dev/null
+                       ip link set dev lan0 address $mac 2>/dev/null
+                       ip link set dev lan1 address $mac 2>/dev/null
+                       ip link set dev lan2 address $mac 2>/dev/null
+                       ip link set dev lan3 address $mac 2>/dev/null
+               fi
+       fi
+}
+
+preinit_set_mac_address() {
+       local rootpart
+
+       case $(board_name) in
+       bananapi,bpi-r2)
+               rootpart=$(cat /proc/cmdline)
+               rootpart="${rootpart##*root=}"
+               rootpart="${rootpart%%p3 *}"
+               if [ "$rootpart" = "/dev/mmcblk0" -o "$rootpart" = "/dev/mmcblk1" ]; then
+                       set_recovery_mac_address ${rootpart}p2
+               fi
+               ;;
+       unielec,u7623-02-emmc-512m)
+               set_recovery_mac_address /dev/mmcblk0p1
                ;;
        esac
 }