#!/bin/sh

# SPDX-FileCopyrightText: 2023-2026 KUNBUS GmbH
# 
# SPDX-License-Identifier: GPL-2.0-or-later

DEVNAME=$1
OFFSET=$2

# try reading MAC address from HAT EEPROM or base-mac-address file generated by
# revpi-factory-reset(8) on devices with no HAT EEPROM
BASE_MAC_FILE=/proc/device-tree/hat/custom_5
if [ ! -f "$BASE_MAC_FILE" ]; then
	BASE_MAC_FILE=/usr/share/revpi/devinfo/base-mac-address
	if [ ! -f "$BASE_MAC_FILE" ]; then
		printf "No HAT EEPROM or base-mac-address file found\n" >&2
		exit 1
	fi
fi

BASE_MAC="$(grep -Ezoxm1 "([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}" \
	"$BASE_MAC_FILE")"
if [ -z "$BASE_MAC" ]; then
	printf "File '%s' does not contain a MAC address\n" "$BASE_MAC_FILE" >&2
	exit 2
fi

MAC_NUM=$(printf "%s" "$BASE_MAC" | tr -d ':')
DEC_RESULT=$((0x$MAC_NUM + OFFSET))
OFFSET_MAC=$(printf "%x" "$DEC_RESULT" | sed 's/../&:/g')
OFFSET_MAC="${OFFSET_MAC%:}"

echo "Setting MAC for $DEVNAME and $OFFSET"
/sbin/ip link set "$DEVNAME" address "$OFFSET_MAC"

exit $?
