Hack in random, but valid MAC address in arm64 base image
This is a hack, but it provides a way to automatically
generate a unique MAC address to devices from a single
arm64 base image. The MAC address is a valid unicast
locally administered address, however the vendor field
is randomized.
Bug: 143254418
Test: local build
Change-Id: I907e1ff8850b849bba0ec4b6ad262e33c666aeb0
diff --git a/tools/create_base_image_arm.sh b/tools/create_base_image_arm.sh
index 8302c85..5d4ac07 100755
--- a/tools/create_base_image_arm.sh
+++ b/tools/create_base_image_arm.sh
@@ -129,6 +129,7 @@
tmpfile=`mktemp`
bootenv=`mktemp`
cat > ${tmpfile} << "EOF"
+ethaddr=00:00:00:00:00:00
bootdelay=2
baudrate=1500000
scriptaddr=0x00500000
diff --git a/tools/flash-blk-dev.sh b/tools/flash-blk-dev.sh
index e5381e0..d4568c2 100755
--- a/tools/flash-blk-dev.sh
+++ b/tools/flash-blk-dev.sh
@@ -101,6 +101,19 @@
elif [ "$part_type" == "GPT" ]; then
parts=`sudo gdisk -l /dev/${blk_dev} | grep "^Number" -A999 | tail -n +2 | wc -l`
FIRST_SECTOR=`sudo gdisk -l /dev/${blk_dev} 2>/dev/null | tail -1 | tr -s ' ' | cut -d" " -f3`
+
+ if [ ${parts} -ge 2 ]; then
+ hexchars="0123456789abcdef"
+ valid2ndchar="26ae"
+ mac=`echo -n ${hexchars:$(( $RANDOM % 16 )):1}`
+ mac+=`echo -n ${valid2ndchar:$(( $RANDOM % 4 )):1}`
+ mac+=`for i in {1..10}; do echo -n ${hexchars:$(( $RANDOM % 16 )):1}; done | sed -e 's/\(..\)/:\1/g'`
+
+ envfile=`mktemp`
+ dd if=/dev/${blk_dev}2 of=${envfile}
+ sed -i "s/00:00:00:00:00:00/${mac}/" ${envfile}
+ fi
+
sudo sgdisk -d${parts} /dev/${blk_dev} >/dev/null 2>&1
sudo sgdisk -a1 -n:${parts}:${FIRST_SECTOR}:- -A:${parts}:set:2 -t:${parts}:8305 -c:${parts}:rootfs /dev/${blk_dev} >/dev/null 2>&1
sudo e2fsck -fy /dev/${blk_dev}${parts} >/dev/null 2>&1