rockchip: use stable MAC-address for NanoPi R2S
authorDavid Bauer <mail@david-bauer.net>
Fri, 15 Jan 2021 01:15:12 +0000 (02:15 +0100)
committerDavid Bauer <mail@david-bauer.net>
Mon, 18 Jan 2021 16:32:52 +0000 (17:32 +0100)
The NanoPi R2S does not have a board specific MAC address written inside
e.g. an EEPROM, hence why it is randomly generated on first boot.

The issue with that however is the lack of a driver for the PRNG.
It often results to the same MAC address used on multiple boards by
default, as urngd is not active at this early stage resulting in low
available entropy.

There is however a semi-unique identifier available to us, which is the
CID of the used SD card. It is unique to each SD card, hence we can use
it to generate the MAC address used for LAN and WAN.

Signed-off-by: David Bauer <mail@david-bauer.net>
target/linux/rockchip/armv8/base-files/etc/board.d/02_network

index e129fd6a670c17b998a3d503efa4f0d6b1c7705f..48133c81a164ae8d60f43e01d35d6d7d8f4fc6f8 100755 (executable)
@@ -17,6 +17,13 @@ rockchip_setup_interfaces()
        esac
 }
 
+nanopi_r2s_generate_mac()
+{
+       local sd_hash=$(sha256sum /sys/devices/platform/ff500000.dwmmc/mmc_host/mmc0/mmc0:*/cid)
+       local mac_base=$(macaddr_canonicalize "$(echo "${sd_hash}" | dd bs=1 count=12 2>/dev/null)")
+       echo "$(macaddr_unsetbit_mc "$(macaddr_setbit_la "${mac_base}")")"
+}
+
 rockchip_setup_macs()
 {
        local board="$1"
@@ -26,7 +33,7 @@ rockchip_setup_macs()
 
        case "$board" in
        friendlyarm,nanopi-r2s)
-               wan_mac=$(macaddr_random)
+               wan_mac=$(nanopi_r2s_generate_mac)
                lan_mac=$(macaddr_add "$wan_mac" +1)
                ;;
        esac