[ "$ACTION" == "add" ] || exit 0

PHYNBR=${DEVPATH##*/phy}

[ -n $PHYNBR ] || exit 0

. /lib/functions.sh
. /lib/functions/system.sh

board=$(board_name)

case "$board" in
	abt,asr3000)
		# Originally, phy1 is phy0 mac with LA bit set. However, this would conflict
		# addresses on multiple VIFs with the other radio. Use label mac to set LA bit.
		addr=$(cat /sys/class/net/eth1/address)
		[ "$PHYNBR" = "0" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_setbit_la $addr > /sys${DEVPATH}/macaddress
		;;
	acer,predator-w6|\
	acer,vero-w6m)
		[ "$PHYNBR" = "0" ] && mmc_get_mac_ascii u-boot-env 2gMAC > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && mmc_get_mac_ascii u-boot-env 6gMAC > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "2" ] && mmc_get_mac_ascii u-boot-env 5gMAC > /sys${DEVPATH}/macaddress
		;;
	acer,predator-w6d)
		[ "$PHYNBR" = "0" ] && mmc_get_mac_ascii u-boot-env 2gMAC > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && mmc_get_mac_ascii u-boot-env 5gMAC > /sys${DEVPATH}/macaddress
		;;
	asus,rt-ax59u)
		CI_UBIPART="UBI_DEV"
		addr=$(mtd_get_mac_binary_ubi "Factory" 0x4)
		# Originally, phy1 is phy0 mac with LA and 28th bits set. However, this would conflict
		# addresses on multiple VIFs with the other radio when bit 28 is already set.
		# Set LA and 28 bits and increment mac-address instead.
		[ "$PHYNBR" = "1" ] && \
			macaddr_setbit_la $(macaddr_setbit $(macaddr_add $addr 1) 28) > \
			/sys${DEVPATH}/macaddress
		;;
	asus,tuf-ax4200|\
	asus,tuf-ax6000)
		CI_UBIPART="UBI_DEV"
		addr=$(mtd_get_mac_binary_ubi "Factory" 0x4)
		# Originally, phy0 is phy1 mac with LA bit set. However, this would conflict
		# addresses on multiple VIFs with the other radio. Set LA bit and increment
		# mac-address instead.
		[ "$PHYNBR" = "0" ] && macaddr_setbit_la $(macaddr_add $addr 1) > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && echo "$addr" > /sys${DEVPATH}/macaddress
		;;
	bananapi,bpi-r3|\
	bananapi,bpi-r3-mini)
		addr=$(cat /sys/class/net/eth0/address)
		[ "$PHYNBR" = "0" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress
		;;
	bananapi,bpi-r4|\
	bananapi,bpi-r4-poe)
		addr=$(cat /sys/class/net/eth0/address)
		[ "$PHYNBR" = "0" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "2" ] && macaddr_add $addr 4 > /sys${DEVPATH}/macaddress
		;;
	cetron,ct3003)
		addr=$(mtd_get_mac_binary "art" 0)
		[ "$PHYNBR" = "0" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_setbit_la $(macaddr_add $addr 2) > /sys${DEVPATH}/macaddress
		;;
	cmcc,rax3000m)
		addr=$(cat /sys/class/net/eth0/address)
		[ "$PHYNBR" = "1" ] && macaddr_add $addr -1 > /sys${DEVPATH}/macaddress
		;;
	comfast,cf-e393ax)
		addr=$(mtd_get_mac_binary "Factory" 0x8000)
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
		;;
	cudy,tr3000-v1|\
	cudy,re3000-v1)
		addr=$(mtd_get_mac_binary bdinfo 0xde00)
		[ "$PHYNBR" = "0" ] && echo "$addr" > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_setbit_la $(macaddr_add $addr 1) > /sys${DEVPATH}/macaddress
		;;
	cudy,ap3000outdoor-v1|\
	cudy,m3000-v1|\
	cudy,wr3000s-v1|\
	cudy,wr3000-v1)
		addr=$(mtd_get_mac_binary bdinfo 0xde00)
		# Originally, phy0 is phy1 mac with LA bit set. However, this would conflict
		# addresses on multiple VIFs with the other radio. Set LA bit and increment
		# mac-address instead.
		[ "$PHYNBR" = "0" ] && echo "$addr" > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_setbit_la $(macaddr_add $addr 1) > /sys${DEVPATH}/macaddress
		;;
	dlink,aquila-pro-ai-m30-a1)
		addr=$(mtd_get_mac_binary "Odm" 0x81)
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress
		;;
	glinet,gl-mt6000|\
	glinet,gl-x3000|\
	glinet,gl-xe3000)
		addr=$(mmc_get_mac_binary factory 0x04)
		[ "$PHYNBR" = "0" ] && echo "$addr" > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
		;;
	h3c,magic-nx30-pro)
		addr=$(mtd_get_mac_ascii pdt_data_1 ethaddr)
		[ "$PHYNBR" = "0" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress
		;;
	jcg,q30-pro|\
	netcore,n60)
		# Originally, phy1 is phy0 mac with LA bit set. However, this would conflict
		# addresses on multiple VIFs with the other radio. Use label mac to set LA bit.
		[ "$PHYNBR" = "1" ] && macaddr_setbit_la $(get_mac_label) > /sys${DEVPATH}/macaddress
		;;
	jdcloud,re-cp-03)
		[ "$PHYNBR" = "1" ] && mmc_get_mac_binary factory 0xa > /sys${DEVPATH}/macaddress
		;;
	keenetic,kn-3811|\
	keenetic,kn-3911)
		[ "$PHYNBR" = "1" ] && \
			macaddr_setbit_la "$(mtd_get_mac_binary rf-eeprom 0x4)" > /sys${DEVPATH}/macaddress
		;;
	mercusys,mr90x-v1|\
	tplink,re6000xd)
		addr=$(get_mac_binary "/tmp/tp_data/default-mac" 0)
		[ "$PHYNBR" = "0" ] && echo "$addr" > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $addr -1 > /sys${DEVPATH}/macaddress
		;;
	netgear,wax220)
		hw_mac_addr=$(mtd_get_mac_ascii u-boot-env mac)
		[ "$PHYNBR" = "0" ] && macaddr_add $hw_mac_addr 2 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $hw_mac_addr 3 > /sys${DEVPATH}/macaddress
		;;
	nokia,ea0326gmp)
		addr=$(cat /sys/class/net/eth0/address)
		[ "$PHYNBR" = "0" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress
		;;
	nradio,c8-668gl)
		hw_mac_addr=$(mmc_get_mac_ascii bdinfo "fac_mac ")
		[ "$PHYNBR" = "0" ] && echo "$hw_mac_addr" > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_setbit_la $hw_mac_addr > /sys${DEVPATH}/macaddress
		;;
	openembed,som7981)
		[ "$PHYNBR" = "1" ] && cat /sys/class/net/eth0/address > /sys${DEVPATH}/macaddress
		;;
	qihoo,360t7)
		addr=$(mtd_get_mac_ascii factory lanMac)
		[ "$PHYNBR" = "0" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress
		;;
	ruijie,rg-x60-pro)
		addr=$(mtd_get_mac_ascii product_info ethaddr)
		[ "$PHYNBR" = "0" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress
		;;
	tplink,tl-xdr4288|\
	tplink,tl-xdr6086|\
	tplink,tl-xdr6088)
		[ "$PHYNBR" = "0" ] && get_mac_label > /sys${DEVPATH}/macaddress
		;;
	tplink,tl-xtr8488)
		[ "$PHYNBR" = "1" ] && get_mac_label > /sys${DEVPATH}/macaddress
		;;
	ubnt,unifi-6-plus)
		addr=$(mtd_get_mac_binary EEPROM 0x6)
		[ "$PHYNBR" = "0" ] && echo "$addr" > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
		;;
	routerich,ax3000|\
	routerich,ax3000-ubootmod|\
	zbtlink,zbt-z8102ax|\
	zbtlink,zbt-z8103ax|\
	zyxel,ex5601-t0|\
	zyxel,ex5601-t0-ubootmod)
		addr=$(mtd_get_mac_binary "Factory" 0x4)
		[ "$PHYNBR" = "1" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
		;;
	zyxel,nwa50ax-pro)
		hw_mac_addr="$(mtd_get_mac_binary mrd 0x1fff8)"
		[ "$PHYNBR" = "0" ] && macaddr_add $hw_mac_addr 1 > /sys${DEVPATH}/macaddress
		[ "$PHYNBR" = "1" ] && macaddr_add $hw_mac_addr 2 > /sys${DEVPATH}/macaddress
		;;
esac
