OpenWrt: mac addressの書き換え

数台のfon2405eのSPiフラッシュを載せ替えたまではいいのですが、一つ困った大きな問題があります。同じROMなのでmac addressが同じになってしまい、同時に起動していると通信障害が置きます。arpコマンドでHW addressを見てみればわかるように、同じmac addressだと衝突します。OpenWrtには/config/networkでmac addressのカスタム設定という方法があるのですが、なぜかfonには使えません。そこでフラッシュROMのEEPROM書き換えてmac addressを変えてみます。OpenWrtで予備知識を得られるのでまず目を通して置きます。

  • https://openwrt.org/docs/guide-user/installation/restore_art_partition
  • https://openwrt.org/docs/guide-developer/mac.address

これによると、rt305xの場合は+4なのでhexdumpで確認します。

hexdump -n 100 -C mtd2.bin
00000000  50 30 00 01 00 0c 43 30  50 88 ff ff ff ff ff ff  |P0....C0P.......|
00000010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000020  ff ff ff ff ff ff ff ff  00 0c 43 30 50 77 00 0c  |..........C0Pw..|
00000030  43 30 50 66 11 05 24 00  ff ff 2f 01 55 77 a8 aa  |C0Pf..$.../.Uw..|
00000040  8c 88 ff ff 0c 00 00 00  00 00 00 00 00 00 ff ff  |................|
00000050  ff ff 0d 0d 0d 0d 0c 0c  0c 0c 0c 0c 0c 0c 0c 0c  |................|
00000060  10 10 11 11                                       |....|
00000064

00 0c 43 30 50 88がralink SDKで作ったEEPROMのmac addressと一致しました。

そこで先頭のmac addressだけ変更することにします。

echo -n -e '\x01' | dd of=mtd2.bin bs=1 seek=4 conv=notrunc

hexdump -n 100 -C mtd2.bin
00000000  50 30 00 01 01 0c 43 30  50 88 ff ff ff ff ff ff  |P0....C0P.......|
00000010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000020  ff ff ff ff ff ff ff ff  00 0c 43 30 50 77 00 0c  |..........C0Pw..|
00000030  43 30 50 66 11 05 24 00  ff ff 2f 01 55 77 a8 aa  |C0Pf..$.../.Uw..|
00000040  8c 88 ff ff 0c 00 00 00  00 00 00 00 00 00 ff ff  |................|
00000050  ff ff 0d 0d 0d 0d 0c 0c  0c 0c 0c 0c 0c 0c 0c 0c  |................|
00000060  10 10 11 11                                       |....|
00000064

先頭が変わって01 0c 43 30 50 88になりました。これをmtdに書き込んで再起動します。

opkg install kmod-mtd-rw --force-depends
insmod /lib/modules/4.14.195/mtd-rw.ko i_want_a_brick=1
mtd -r write mtd2.bin factory

確かに変わってるのですが、期待したものと全く違っていました。原因は不明なもののmac addressの変更はこれでできました。

4: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 12:16:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff