From eaf8889cf8c548f3cb06ac024395482af75c991e Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 1 Jan 2016 18:57:39 +0000 Subject: ramips: add a script to fix up the broken mac address on the witi board Signed-off-by: Felix Fietkau SVN-Revision: 48027 --- .../linux/ramips/base-files/sbin/fixup-mac-address | 79 ++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100755 target/linux/ramips/base-files/sbin/fixup-mac-address (limited to 'target/linux/ramips/base-files') 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 + 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" -- cgit v1.2.3