diff options
Diffstat (limited to 'target/linux')
-rwxr-xr-x | target/linux/ramips/base-files/etc/uci-defaults/network | 119 | ||||
-rwxr-xr-x | target/linux/ramips/base-files/etc/uci-defaults/nw718 | 36 |
2 files changed, 116 insertions, 39 deletions
diff --git a/target/linux/ramips/base-files/etc/uci-defaults/network b/target/linux/ramips/base-files/etc/uci-defaults/network index 35b2fccdc..cd0feaf00 100755 --- a/target/linux/ramips/base-files/etc/uci-defaults/network +++ b/target/linux/ramips/base-files/etc/uci-defaults/network @@ -1,6 +1,15 @@ #!/bin/sh -RT3X5X=`cat /proc/cpuinfo | grep RT3.5` -[ -z "${RT3X5X}" ] || { + +. /etc/functions.sh +. /lib/ramips.sh + +if [ ! -x /usr/sbin/maccalc ]; then + echo "$0: maccalc not found!" + return +fi + +create_lan_wan() +{ uci batch <<EOF set network.lan.ifname=eth0.1 set network.wan=interface @@ -10,4 +19,108 @@ commit network EOF } -uci commit network +get_mac_binary() +{ + local mtdname="$1" + local seek="$2" + local part + + part=$(find_mtd_part "$mtdname") + if [ -z "$part" ]; then + echo "get_mac_binary: partition $mtdname not found!" >&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 <<EOF +set network.lan.macaddr='$lan_mac' +set network.wan.macaddr='$wan_mac' +commit network +EOF +} + +set_macs_only_lan() +{ + local lan_mac="$1" + local wan_mac + + wan_mac=$(/usr/sbin/maccalc add "$lan_mac" 1) + + set_macs "$lan_mac" "$wan_mac" +} + +set_macs_only_lan_from_mtd() +{ + local mtdname="$1" + local seek="$2" + local lan_mac + + lan_mac=$(get_mac_binary "$mtdname" "$seek") + if [ -z $lan_mac ]; then + echo "set_macs_only_lan_from_mtd: can't extract mac address from $part" >&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" +} + +board=$(ramips_board_name) + +case $board in + f5d8235-v2) + create_lan_wan + set_macs_only_lan_from_mtd "u-boot" 262148 + ;; + argus-atp52b | \ + nw718) + create_lan_wan + set_macs_only_lan_from_mtd "factory" 4 + ;; + *) + RT3X5X=`cat /proc/cpuinfo | grep RT3.5` + [ -z "${RT3X5X}" ] || create_lan_wan + ;; +esac diff --git a/target/linux/ramips/base-files/etc/uci-defaults/nw718 b/target/linux/ramips/base-files/etc/uci-defaults/nw718 deleted file mode 100755 index 6fd96df6f..000000000 --- a/target/linux/ramips/base-files/etc/uci-defaults/nw718 +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -# -# Copyright (C) 2011 OpenWrt.org -# - -nw718_set_macs() { - local part - local lan_mac - local wan_mac - - [ -z $(which maccalc) ] && return - - . /etc/functions.sh - - part=$(find_mtd_part "factory") - [ -z $part ] && return - - lan_mac=$(dd bs=1 skip=4 count=6 if=$part 2>/dev/null | maccalc bin2mac) - [ -z $lan_mac ] && return - - wan_mac=$(maccalc add $lan_mac 1) - - uci batch <<EOF -set network.lan.macaddr='$lan_mac' -set network.wan.macaddr='$wan_mac' -commit network -EOF -} - -. /lib/ramips.sh - -board=$(ramips_board_name) - -if [ "${board}" == "nw718" ]; then - nw718_set_macs -fi |