#!/bin/sh

. /lib/functions.sh

usage() {
	echo "setmac <wl1|wl0|lan|wan> <mac>"
	echo "example: setmac wl1 00:11:22:33:44:55"
}

# GMAC MAC address offset, as defined in raether.h
GMAC0_OFFSET=0xE000
GMAC2_OFFSET=0xE006

value=$2
#A=expr substr "$2" 1 2
#B=expr substr "$2" 4 5
#C=expr substr "$2" 7 8
#D=expr substr "$2" 10 11
#E=expr substr "$2" 13 14
#F=expr substr "$2" 16 17

A=${value:0:2}
B=${value:3:2}
C=${value:6:2}
D=${value:9:2}
E=${value:12:2}
F=${value:15:2}

factory_mtd_name=Factory
factory_mtd_sysfs=/sys/class/mtd/$(grep $factory_mtd_name /proc/mtd | awk -F: '{print $1}')
[ $(($(cat $factory_mtd_sysfs/flags) & 0x400)) -eq 0 ] && {
	echo "$factory_mtd_name partition is read-only."
	exit 1
}

echo "$A:$B:$C:$D:$E:$F"

case $1 in
	wl0)
		iwpriv wl0 e2p 04=$B$A
		iwpriv wl0 e2p 06=$D$C
		iwpriv wl0 e2p 08=$F$E
		;;
	wl1)
		iwpriv wl1 e2p 04=$B$A
		iwpriv wl1 e2p 06=$D$C
		iwpriv wl1 e2p 08=$F$E
		;;
	wan|eth)
		echo -ne "\x$A\x$B\x$C\x$D\x$E\x$F" | \
			dd of=$(find_mtd_part $factory_mtd_name) bs=1 seek=$((GMAC2_OFFSET)) 2>&-
		;;
	lan)
		echo -ne "\x$A\x$B\x$C\x$D\x$E\x$F" | \
			dd of=$(find_mtd_part $factory_mtd_name) bs=1 seek=$((GMAC0_OFFSET)) 2>&-
		;;
	*)
		usage
		;;
esac
