EdgerouterでIPv6を使おうとするとおかしいくらいにEdgerouter Xの情報しかない。もう狂ったように。自分はとある勘違いからEdgerouter 4と6に乗り換えてしまった。まぁ、勘違いは置いていて、Switch0に全く魅力が感じなかったのと、VLANを大量に貼っている場合、Edgerouterに負荷がかかる。ルーターの起動に30分とかありえない。さらにMTU 9000の設定ができない。そんな不満をオンラインで呟いていたら、香港のHome LAB師匠が他の機材ならいけると教えてくれたので買い替えた。それでだいぶパフォーマンスアップ。今度日本のシュウマイを送ったる。
閑話休題
まぁ、Edgerouter XとEdgerouter 4/6でSwitch0がない、MTUがあげられない、オフロードができる機能が異なるくらいしか、ぱっと見違いはない。クロスコンパイラー関連で調べてみたら全く別のものだったということで、まずはそこから。
show hardware cpuでアーキテクチャの確認ができる。
Edgerouter X CPU: MediaTek MT7621AT
Architecture: mips
Byte Order: Little Endian
Edgerouter 4 CPU: Cavium CN5020
Architecture: mips64
Byte Order: Big Endian
あららビット数も違うしエンディアンも違う。。。ほとんどのパッケージは、MIPS (32bit)が動いている模様。
Edgerouter 4で、uname -mを叩くと
mips64
となるので、kernel自体は64bitらしい。
Edgerouterは、所詮Debianなので、Debianパッケージをインストールができる。
ハードウェアの情報をみてみると
https://www.debian.org/releases/stretch/mips64el/ch02s01.html.ja
mipsあるいはmips64elがいけるらしい
やってみたところ、確かにmipsはいけるが、mips64elはダメでした。アーキテクチャがmips64なのにmips64elは入りませんとエラーになる。
$ sudo dpkg -i ndppd_0.2.5-3_mips64el.deb
dpkg: error processing archive ndppd_0.2.5-3_mips64el.deb (–install):
package architecture (mips64el) does not match system (mips)
Errors were encountered while processing:
ndppd_0.2.5-3_mips64el.deb
強制的に入れてみると実は入るんだが。。。気持ち悪い。(このndppdパッケージ自体はバグがあるので、一度強制インストールをするとなかなかパッケージが外せない。)となるとクロスコンパイラーの出番となる。
以下でクロスコンパイラーの設定ができる。
適当なUbuntuマシンで以下を実行。g++いらない、gccだけでよくてもg++を指定することをお勧めする。あとで++だけいれるのは面倒。
#Edgerouter Xの場合
apt -y install g++-mipsel-linux-gnu
ls /usr/bin/mipsel-linux-gnu-
#Edgerouter 4/6の場合
apt -y install g++-mips64-linux-gnuabi64
ls /usr/bin/mips64-linux-gnuabi64-
もちろん、これ以外に最低限makeなどが必要だが。
また、コンパイラのオプションはここいら。ただし、少なくともR3000がプレステでぇとかR8000がぁとか語れないのであれば触らない方が無難。(いや、その程度だと完全に事故るが。)
https://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html
あとは世間に出回っている、
/usr/bin/mipsel-linux-gnu-g++
を
/usr/bin/mips64-linux-gnuabi64-g++
と書き換えればいいだけ。
出来上がったバイナリはそれぞれfileで確認すると
#Edgerouter Xの場合
xxxxxx: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV) ….
#Edgerouter 4の場合
xxxxxx: ELF 64-bit MSB executable, MIPS, MIPS64 rel2 version 1 (SYSV) ….
となればOK。まぁEdgerouter 4上で、32bitのELFバイナリも多分動くと思うが。。。
これで、ようやくndppdの話ができる。
うまくやれば、ONUを外して、EdgerouterのSFPを光回線のモジュラーに直結できそうなんだが、如何せん、それで嬉しい構成が取れる環境って実はそんなにない。自分のところはv6プラスだったので全く意味がないことがわかった。(この記事自体も実はv6プラス環境では全く無意味)
おまけ
ラズパイのクロスコンパイラーも記載しておく。
for hf
apt -y install g++-arm-linux-gnueabihf
ls /usr/bin/arm-linux-gnueabihf-
for arm64
apt -y install g++-aarch64-linux-gnu
ls /usr/bin/aarch64-linux-gnu-