diff options
author | Felix Fietkau <nbd@openwrt.org> | 2016-01-01 18:57:39 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2016-01-01 18:57:39 +0000 |
commit | eaf8889cf8c548f3cb06ac024395482af75c991e (patch) | |
tree | b2f5a1091e071178e1fc57068c54403c49a01dda /target/linux/ramips/base-files/sbin/fixup-mac-address | |
parent | 46519964ffdd8d917271496c9bd54a1d884fe5f2 (diff) | |
download | master-31e0f0ae-eaf8889cf8c548f3cb06ac024395482af75c991e.tar.gz master-31e0f0ae-eaf8889cf8c548f3cb06ac024395482af75c991e.tar.bz2 master-31e0f0ae-eaf8889cf8c548f3cb06ac024395482af75c991e.zip |
ramips: add a script to fix up the broken mac address on the witi board
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 48027
Diffstat (limited to 'target/linux/ramips/base-files/sbin/fixup-mac-address')
-rwxr-xr-x | target/linux/ramips/base-files/sbin/fixup-mac-address | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/target/linux/ramips/base-files/sbin/fixup-mac-address b/target/linux/ramips/base-files/sbin/fixup-mac-address new file mode 100755 index 0000000000..6e3bac4997 --- /dev/null +++ b/target/linux/ramips/base-files/sbin/fixup-mac-address @@ -0,0 +1,79 @@ +#!/bin/sh +. /lib/functions.sh +. /lib/functions/system.sh + +partname="" +offset="" +NEW_MAC= +YES= + +case "$(cat /tmp/sysinfo/board_name)" in + witi) + partname=factory + offset=$((0xe000)) + ;; + *) + echo "Unsupported board" + exit 1 + ;; +esac + +while [ -n "$1" ]; do + case "$1" in + ??:??:??:??:??:??) NEW_MAC="$1";; + -y) YES=1;; + *) + cat <<EOF +Unknown option/argument '$1' +Usage: $0 [-y] [<macaddr>] +EOF + exit 1 + ;; + esac + shift +done + +ask_bool() { + local message="$1" + local default="$((! ${2:-0}))" + [ -n "$YES" ] && return 0 + echo -n "$message " + read opt + case "$opt" in + y|Y) return 0;; + n|N) return 1;; + *) return $default;; + esac +} + +convert_hex() { + hexdump -e '/1 "%02x "' +} + +gen_mac() { + dd if=/dev/urandom bs=6 count=1 2>/dev/null +} + +mac="$(mtd_get_mac_binary $partname $offset)" +case "$mac" in + 00:00:00:00:00:00);; + ff:ff:ff:ff:ff:ff);; + *) + echo "Current MAC address: $mac" + ask_bool "Overwrite (y/N)?" 0 || exit + ;; +esac + +if [ -n "$NEW_MAC" ]; then + set -- $(echo "$NEW_MAC" | sed 's,:, ,g') +else + set -- $(gen_mac | convert_hex) + set -- $(printf %02x $(( (0x$1 & 0xfe) | 0x02 ))) $2 $3 $4 $5 $6 +fi +echo "New MAC address: $1:$2:$3:$4:$5:$6" +ask_bool "Write to EEPROM (y/N)?" || exit + +part=$(find_mtd_part "$partname") +[ -n "$part" ] || exit +echo -ne "\x$1\x$2\x$3\x$4\x$5\x$6" | dd of=$part conv=notrunc bs=1 count=6 seek=$offset 2>/dev/null +echo "Done" |