NordicのIPv6 over Bluetoothの6LoWPAN側のrouter側(RPi)はカーネルが提供されている。6LoWPANの実装は”net/bluetooth/6lowpan.c”でIntelがコミットしていた。既にLinuxのカーネルツリーに入っていて、Nordic提供のRPi用Kernel 3.17.4ではinsmodして使える。
ただね…Nordic提供のKernelを使うと、ネットワーク周りのフィルター、具体的にはiptable NAT/masqueradeが動かなくなる。デフォのRasbianだと普通に使えるのにおかしくね?ってことで.config を見るとあれれ抜けてるよ…ということで、自分で最新のカーネルツリーを取ってきて、6lowpanとNETFILTER周りを有効にしたカーネルを作った。
具体的には6lowpanはmenuconfigの以下を有効にすればOK
作ったカーネルビルドはこちら。
config
kernel
moduleとfirmware
RaspberryPi向けの設置は、configはカーネルのビルド用、kernelはそのまんま/boot/に配置して元々のカーネルを上書きしてもconfig.txtで差し替え。moduleとfirmwareは/lib以下に展開。(バックアップはしてね)
これで普通にnetfilterのnatとかが使える。IPv6 over Bluetooth/6lowpanも動作確認済。
ちなみに、Nordicの.configは参考にしたけど、継承しないで最新のkernel 3.18.3(nordicのは3.17.4で古い)を使っている。一応、ちゃんと動いているからnordicのRaspberry Piのイメージでnetfilterでおかしいな?と思った時の参考まで。
ちなみに、恐らく予想だけど、nordicのnetfilterがおかしいのは旧カーネルのoldconfigする時に、いちいち新機能の差し替えが走るんだけど、そこで「エンター連打」をしてスッ飛ばしたからなんじゃないかと予想している。バージョン忘れたけど、どこかのカーネルのバージョンからNEWで連打ボーン!!すると、natとかがスルーされてしまう。たぶん、連打ボーンしてIPv6 over bluetoothじゃ使わないから気にしなかったんぢゃないかなーと。
とまぁ、そんなnetfilterなことより、Linuxのカーネルツリーに6LoWPAN(net/bluetooth/6lowpan.c)が既に追加されていて、普通にカーネル取ってきて自分でビルドすれば使えるというのが分かった。
「RPi Kernel for Nordic IoT SDK 6LoWPAN」への1件のフィードバック