Skip to content

Commit

Permalink
gemini: Use library functions to assign MAC address
Browse files Browse the repository at this point in the history
This simplifies the ethernet address extraction script
by using standard library functions to locate the MTD
partitions and extract ethernet address from a binary
offset location in the flash. Furthermore, the aging
ifconfig is replaced by the ip tool, which will now
assign the MAC addresses.

Suggested-by: Christian Lamparter <chunkeey@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
[ifconfig replacement, use -n instead of ! -z,
-n requires string to be quoted within the test brackets,
drop prepended "x" in check, add quotes, make local
variables local, kill whitespaces]
  • Loading branch information
linusw authored and chunkeey committed Jun 15, 2019
1 parent bdbb679 commit cd6c353
Showing 1 changed file with 20 additions and 12 deletions.
32 changes: 20 additions & 12 deletions target/linux/gemini/base-files/lib/preinit/05_set_ether_mac_gemini
Original file line number Diff line number Diff line change
@@ -1,25 +1,33 @@
#!/bin/sh

. /lib/functions.sh
. /lib/functions/system.sh

set_ether_mac() {
local part
local DEVID
local MAC1
local MAC2

# Most devices have a standard "VCTL" partition
CONFIG_PARTITION="$(grep "VCTL" /proc/mtd | cut -d: -f1)"
if [ ! -z $CONFIG_PARTITION ] ; then
MAC1="$(strings /dev/$CONFIG_PARTITION |grep MAC|cut -d: -f2|cut -c3-14|sed -e 's,\(..\),:\1,g' -e 's,^:,,')"
MAC2="$(strings /dev/$CONFIG_PARTITION |grep MAC|cut -d: -f8|cut -c3-14|sed -e 's,\(..\),:\1,g' -e 's,^:,,')"
part="$(find_mtd_part VCTL)"
if [ -n "$part" ]; then
MAC1="$(strings $part |grep MAC|cut -d: -f2|cut -c3-14|sed -e 's,\(..\),:\1,g' -e 's,^:,,')"
MAC2="$(strings $part |grep MAC|cut -d: -f8|cut -c3-14|sed -e 's,\(..\),:\1,g' -e 's,^:,,')"

ifconfig eth0 hw ether $MAC1 2>/dev/null
ifconfig eth1 hw ether $MAC2 2>/dev/null
ip link set eth0 address "$MAC1" 2>/dev/null
ip link set eth1 address "$MAC2" 2>/dev/null
return 0
fi

# The DNS-313 has a special field in its RedBoot
# binary that we need to check
CONFIG_PARTITION="$(grep "RedBoot" /proc/mtd | cut -d: -f1)"
if [ ! -z $CONFIG_PARTITION ] ; then
DEVID="$(dd if=/dev/mtdblock0 bs=1 skip=119508 count=7 2>/dev/null)"
if [ "x$DEVID" = "xdns-313" ] ; then
MAC1="$(dd if=/dev/mtdblock0 bs=1 skip=119540 count=6 2>/dev/null | hexdump -n6 -e '/1 ":%02X"' | sed s/^://g)"
ifconfig eth0 hw ether $MAC1 2>/dev/null
part="$(find_mtd_part RedBoot)"
if [ -n "$part" ]; then
DEVID="$(dd if=$part bs=1 skip=119508 count=7 2>/dev/null)"
if [ "$DEVID" = "dns-313" ]; then
MAC1="$(mtd_get_mac_binary RedBoot 119540)"
ip link set eth0 address "$MAC1" 2>/dev/null
return 0
fi
fi
Expand Down

0 comments on commit cd6c353

Please sign in to comment.