You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.1 KiB
Plaintext

4 years ago
#!/bin/sh
#
# Copyright (C) 2009 OpenWrt.org
#
. /lib/ar71xx.sh
. /lib/functions.sh
. /lib/functions/system.sh
fetch_mac_from_mtd() {
local mtd_part=$1
local lan_env=$2
local wan_env=$3
local mtd mac
mtd=$(grep $mtd_part /proc/mtd | cut -d: -f1)
[ -z $mtd ] && return
mac=$(grep $lan_env /dev/$mtd | cut -d= -f2)
[ ! -z $mac ] && ifconfig eth0 hw ether $mac 2>/dev/null
mac=$(grep $wan_env /dev/$mtd | cut -d= -f2)
[ ! -z $mac ] && ifconfig eth1 hw ether $mac 2>/dev/null
}
fetch_mac_from_uboot() {
tmpmac=`fw_printenv $1 2>&1`
case $tmpmac in
*Error*defined*)
;;
*)
echo $tmpmac
;;
esac
}
wp_gen_mac_addr() {
local addr_offset=$1
local bapt_name=$2
local bapt_mac=`fetch_mac_from_uboot $bapt_name | awk -F"=" '{print $2}'`
if [ -z $bapt_mac ]; then
local uboot_mac=`fetch_mac_from_uboot ethaddr | awk -F"=" '{print $2}'`
uboot_mac=`macaddr_canonicalize $uboot_mac`
local mac=`macaddr_add $uboot_mac $addr_offset`
local ret=0
else
local mac=`macaddr_canonicalize $bapt_mac`
local ret=1
fi
echo $mac
return $ret
}
wp_set_mac_addr() {
local interface=$1
local addr_offset=$2
local bapt_name=$3
mac=`wp_gen_mac_addr $addr_offset $bapt_name`
local ret=$?
ifconfig $interface hw ether $mac 2>/dev/null
return $ret
}
wp_check_mac_addresses() {
eth0mac=`mtd_get_mac_binary art 0` #0x0000
eth1mac=`mtd_get_mac_binary art 6` #0x0006
wlan0mac=`mtd_get_mac_binary art 20486` #0x5006 #5 GHz section
wlan1mac=`mtd_get_mac_binary art 4098` #0x1002 #2.4 GHz section
if [ "$eth0mac" == "00:c0:02:11:55:99" \
-a "$eth1mac" == "00:c0:02:11:55:88" \
-a "$wlan0mac" == "00:03:07:12:34:56" \
-a "$wlan1mac" == "00:c0:02:11:55:88" ]; then
return 1
fi
return 0
}
wp_set_wifi_mac_fixup() {
local phy=$1
local addr_offset=$2
local bapt_name=$3
uci_toggle_state wireless $phy "" phy
uci_set_state wireless $phy macaddr_fixup "$(wp_gen_mac_addr $addr_offset $bapt_name)"
}
preinit_set_mac_address() {
case $(ar71xx_board_name) in
tew-632brp)
fetch_mac_from_mtd config lan_mac wan_mac
;;
dir-615-c1)
fetch_mac_from_mtd config lan_mac wan_mac
echo 1 > /sys/class/leds/dir-615-c1:green:wancpu/brightness
;;
dir-615-i1)
fetch_mac_from_mtd nvram sys_lan_mac sys_wan_mac
;;
r6100)
mac_lan=$(mtd_get_mac_binary caldata 0)
[ -n "$mac_lan" ] && ifconfig eth1 hw ether "$mac_lan"
mac_wan=$(mtd_get_mac_binary caldata 6)
[ -n "$mac_wan" ] && ifconfig eth0 hw ether "$mac_wan"
;;
wrt160nl)
fetch_mac_from_mtd nvram lan_hwaddr wan_hwaddr
;;
dvl-1200e|\
dvl-1750e)
wp_check_mac_addresses
if [ $? -eq 1 ]; then
wp_set_mac_addr eth0 2 "MacAddress0"
wp_set_mac_addr eth1 3 "MacAddress1"
wp_set_wifi_mac_fixup phy0 1 "WiFiMacAddress1"
wp_set_wifi_mac_fixup phy1 0 "WiFiMacAddress0"
fi
;;
dvl-1200i|\
dvl-1750i|\
dvl-1750c|\
dvl-1750x)
wp_check_mac_addresses
if [ $? -eq 1 ]; then
wp_set_mac_addr eth0 2 "MacAddress0"
wp_set_wifi_mac_fixup phy0 1 "WiFiMacAddress1"
wp_set_wifi_mac_fixup phy1 0 "WiFiMacAddress0"
fi
;;
esac
}
boot_hook_add preinit_main preinit_set_mac_address