[openwrt/openwrt] sunxi: ensure NanoPi R1 has unique MAC address

LEDE Commits lede-commits at lists.infradead.org
Sat Dec 24 17:28:15 PST 2022


blocktrron pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/c7d3bbb909bdcccd4f26f18b18cc1cb00500a874

commit c7d3bbb909bdcccd4f26f18b18cc1cb00500a874
Author: Jan-Niklas Burfeind <git at aiyionpri.me>
AuthorDate: Fri Dec 23 22:03:14 2022 +0100

    sunxi: ensure NanoPi R1 has unique MAC address
    
    Ensure the MAC address for all NanoPi R1 boards is assigned uniquely for
    each board.
    
    The vendor ships the device in two variants; one with and one without
    eMMC; but both without static mac-addresses.
    In order to assign both board types unique MAC addresses, fall back on
    the same method used for the NanoPi R2S and R4S in case the EEPROM
    chip is not present by generating the board MAC from the SD card CID.
    
    [0] https://wiki.friendlyelec.com/wiki/index.php/NanoPi_R1#Hardware_Spec
    
    Similar too and based on:
    
    commit b5675f500daf ("rockchip: ensure NanoPi R4S has unique MAC address")
    
    Co-authored-by: David Bauer <mail at david-bauer.net>
    Signed-off-by: Jan-Niklas Burfeind <git at aiyionpri.me>
---
 package/base-files/files/lib/functions/system.sh   |  8 +++++++
 .../armv8/base-files/etc/board.d/02_network        | 13 ++---------
 .../linux/sunxi/base-files/etc/board.d/02_network  | 25 ++++++++++++++++++++++
 3 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/package/base-files/files/lib/functions/system.sh b/package/base-files/files/lib/functions/system.sh
index 29de2e5dd6..176c10d065 100644
--- a/package/base-files/files/lib/functions/system.sh
+++ b/package/base-files/files/lib/functions/system.sh
@@ -204,6 +204,14 @@ macaddr_add() {
 	echo $oui:$nic
 }
 
+macaddr_generate_from_mmc_cid() {
+	local mmc_dev=$1
+
+	local sd_hash=$(sha256sum /sys/class/block/$mmc_dev/device/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}")")"
+}
+
 macaddr_geteui() {
 	local mac=$1
 	local sep=$2
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 b0e6479947..816045a480 100644
--- a/target/linux/rockchip/armv8/base-files/etc/board.d/02_network
+++ b/target/linux/rockchip/armv8/base-files/etc/board.d/02_network
@@ -17,15 +17,6 @@ rockchip_setup_interfaces()
 	esac
 }
 
-generate_mac_from_mmc_cid()
-{
-	local mmc_dev=$1
-
-	local sd_hash=$(sha256sum /sys/class/block/$mmc_dev/device/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}")")"
-}
-
 nanopi_r4s_get_mac()
 {
 	local interface=$1
@@ -38,7 +29,7 @@ nanopi_r4s_get_mac()
 			address=$(macaddr_setbit_la "$address")
 		fi
 	else
-		address=$(generate_mac_from_mmc_cid mmcblk1)
+		address=$(macaddr_generate_from_mmc_cid mmcblk1)
 		if [ "$interface" = "lan" ]; then
 			address=$(macaddr_add "$address" 1)
 		fi
@@ -56,7 +47,7 @@ rockchip_setup_macs()
 
 	case "$board" in
 	friendlyarm,nanopi-r2s)
-		wan_mac=$(generate_mac_from_mmc_cid mmcblk0)
+		wan_mac=$(macaddr_generate_from_mmc_cid mmcblk0)
 		lan_mac=$(macaddr_add "$wan_mac" 1)
 		;;
 	friendlyarm,nanopi-r4s)
diff --git a/target/linux/sunxi/base-files/etc/board.d/02_network b/target/linux/sunxi/base-files/etc/board.d/02_network
index 46ace1f67c..b295dc7daa 100644
--- a/target/linux/sunxi/base-files/etc/board.d/02_network
+++ b/target/linux/sunxi/base-files/etc/board.d/02_network
@@ -29,6 +29,27 @@ sunxi_setup_interfaces()
 	esac
 }
 
+nanopi_r1_get_mac()
+{
+	local interface=$1
+	local eeprom_path="/sys/bus/i2c/devices/2-0051/eeprom"
+	local address
+
+	if [ -f "$eeprom_path" ]; then
+		address=$(get_mac_binary "$eeprom_path" 0xfa)
+		if [ "$interface" = "lan" ]; then
+			address=$(macaddr_setbit_la "$address")
+		fi
+	else
+		address=$(macaddr_generate_from_mmc_cid mmcblk1)
+		if [ "$interface" = "lan" ]; then
+			address=$(macaddr_add "$address" 1)
+		fi
+	fi
+
+	echo "$address"
+}
+
 sunxi_setup_macs()
 {
 	local board="$1"
@@ -37,6 +58,10 @@ sunxi_setup_macs()
 	local label_mac=""
 
 	case "$board" in
+	friendlyarm,nanopi-r1)
+		wan_mac=$(nanopi_r1_get_mac wan)
+		lan_mac=$(nanopi_r1_get_mac lan)
+		;;
 	friendlyarm,nanopi-r1s-h5)
 		lan_mac=$(get_mac_binary "/sys/bus/i2c/devices/0-0051/eeprom" 0xfa)
 		;;




More information about the lede-commits mailing list