#!/bin/sh . /etc/functions.sh . /lib/ramips.sh if [ ! -x /usr/sbin/maccalc ]; then echo "$0: maccalc not found!" return fi create_lan_wan() { uci batch <&2 return fi dd bs=1 skip=$seek count=6 if=$part 2>/dev/null | /usr/sbin/maccalc bin2mac } get_mac_nvram() { local mtdname="$1" local key="$2" local part local mac_dirty part=$(find_mtd_part "$mtdname") if [ -z "$part" ]; then echo "get_mac_nvram: partition $mtdname not found!" >&2 return fi mac_dirty=$(strings "$part" | sed -n 's/'"$key"'=//p') # "canonicalize" mac maccalc add "$mac_dirty" 0 } set_macs() { local lan_mac="$1" local wan_mac="$2" echo "Setting LAN mac address to: $lan_mac" >&2 echo "Setting WAN mac address to: $wan_mac" >&2 uci batch <&2 return fi set_macs_only_lan "$lan_mac" } set_macs_only_lan_from_nvram() { local mtdname="$1" local key="$2" local lan_mac lan_mac=$(get_mac_nvram "$mtdname" "$key") if [ -z $lan_mac ]; then echo "set_macs_only_lan_from_nvram: can't extract mac address from $part" >&2 return fi set_macs_only_lan "$lan_mac" } ramips_setup_interfaces() { local board="$1" case $board in argus-atp52b | \ b2c | \ f5d8235-v2 | \ nw718) create_lan_wan ;; *) RT3X5X=`cat /proc/cpuinfo | grep RT3.5` [ -z "${RT3X5X}" ] || create_lan_wan ;; esac } ramips_setup_macs() { local board="$1" case $board in f5d8235-v2) set_macs_only_lan_from_mtd "u-boot" 262148 ;; argus-atp52b | \ b2c | \ nw718) set_macs_only_lan_from_mtd "factory" 4 ;; esac } board=$(ramips_board_name) ramips_setup_interfaces $board ramips_setup_macs $board