#!/bin/sh
# Fix mac addresses as necessary

fix=""

eth0=$(cat /sys/class/net/eth0/address 2>/dev/null)
wlan0=$(cat /sys/class/ieee80211/phy0/macaddress 2>/dev/null)
brlan=$(cat /sys/class/net/br-lan/address 2>/dev/null)
boardid=$(/usr/local/bin/get_boardid)
mfg=$(/usr/local/bin/get_hardware_mfg)

if [ "$eth0" = "$wlan0" -a "$eth0" != "" ]; then
    fix="lan wan dtdlink"
elif [ "$wlan0" = "" ]; then
    fix="lan wan dtdlink"
elif [ "$brlan" = "00:03:7f:11:23:c6" ]; then # Fix AR300M
    fix="lan"
elif [ "$mfg" = "MikroTik" ]; then # Fix all MikroTiks
    fix="lan wan dtdlink"
fi

eth0wan=""
if [ "$mfg" = "Vultr" ]; then # use eth0 mac for wan
    eth0wan="yes"
fi

mkdir -p /etc/aredn_include

list=""
for i in $fix
do
    if [ ! -s /etc/aredn_include/fixedmac.$i ]; then
        # Some mac addresses are stored in /etc/board.json
        mac=$(jsonfilter -i /etc/board.json -e @.network.$i.macaddr 2> /dev/null | awk '{print tolower($0)}')
        if [[ "$list" =~ "#$mac#" ]]; then
            # Dont allow reuse
            mac=""
        fi
        if [ "$eth0wan" = "yes" -a "$i" = "wan" ]; then
            mac=$eth0
        fi
        if [ "$mac" = "" ]; then
            # Generate a safe mac address
            mac=$(hexdump -n5 -e'/5 "02" 5/1 ":%02x"' /dev/random)
        fi
        echo -e "\toption macaddr '$mac'" > /etc/aredn_include/fixedmac.$i
        list="$list#$mac#"
    fi
done
