From aa75db53e808eb8760e02f43e197d621115a7bc3 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Fri, 15 Jan 2021 02:15:12 +0100 Subject: [PATCH] rockchip: use stable MAC-address for NanoPi R2S 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 --- .../rockchip/armv8/base-files/etc/board.d/02_network | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/target/linux/rockchip/armv8/base-files/etc/board.d/02_network b/target/linux/rockchip/armv8/base-files/etc/board.d/02_network index 75f43f2dc8..d8acaabe27 100755 --- a/target/linux/rockchip/armv8/base-files/etc/board.d/02_network +++ b/target/linux/rockchip/armv8/base-files/etc/board.d/02_network @@ -18,6 +18,13 @@ rockchip_setup_interfaces() esac } +nanopi_generate_mac() +{ + local sd_hash=$(sha256sum /sys/devices/platform/*.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" @@ -28,7 +35,7 @@ rockchip_setup_macs() case "$board" in friendlyarm,nanopi-r2s|\ friendlyarm,nanopi-r4s) - wan_mac=$(macaddr_random) + wan_mac=$(nanopi_generate_mac) lan_mac=$(macaddr_add "$wan_mac" +1) ;; esac