IPv6 over Bluetooth(RFC7668)を試してみる
ノルウェー王国に本拠地を置くNordic Semiconductor社のnRF51系チップは、いち早くIPv6 over Bluetoothに対応しています。IoT SDKの公開も行われていますので、今回はRed Bear社製 BLE Nanoを使ってIPv6とBluetoothの世界をいち早く体験してみましょう(※筆者も試し始めたばかりなので「動く」程度の情報です)。
実行ファイルの作成
まずは、次の手順に従ってGCC-ARM開発環境をLinux上で準備し、実行ファイルを作成しましょう。
1. Linux開発環境を準備する
# uname -sr; cat /etc/redhat-release Linux 3.10.0-229.20.1.el7.x86_64 CentOS Linux release 7.1.1503 (Core) # yum install -y wget net-tools bzip2 bc openssl-devel bluez usbutils ld-linux.so.2 # yum groupinstall "Development Tools" -y
2. GCC-ARM Embeded開発環境を準備する
https://launchpad.net/gcc-arm-embedded/からパッケージをダウンロードします。
# cd /usr/local/ # tar vxfj /opt/gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
3. nRF51 Iot SDK開発環境を準備する
https://developer.nordicsemi.com/nRF51_IoT_SDK/からパッケージをダウンロードします。
# cd /opt # unzip nrf51_iot_sdk_0.8.0_f1f6187.zip # vi /opt/Nordic/nrf51/components/toolchain/gcc/Makrfile.posix GNU_INSTALL_ROOT := /usr/local/gcc-arm-none-eabi-4_9-2015q3 GNU_VERSION := 4.9.3 GNU_PREFIX := arm-none-enbi
4. サンプルアプリケーションをコンパイルする
# cd /opt/Nordic/nrf51/examples/iot/mqtt/publisher/boards/pca10023/armgcc # make
5. HEXファイルをLinuxからWindowsにコピーし実行ファイルを作成する
s1xx-iot-prototype2_softdevice.hexをnrf51_iot_sdkからコピーします。
nrf51422_xxac_s1xx_iot.hexをnrf51_iot_sdkからコピーします(コンパイルしたもの)。
C:\nrf51_iot_sdk> mergehex.exe --merge s1xx-iot-prototype2_softdevice.hex nrf51422_xxac_s1xx_iot.hex --output output.hex
※出来上がった実行ファイル(output.hex)をD:\(MBED)nRF51 USBドングルへコピーします。
Linux環境の作成と動作検証
続いて、IPv6 over Bluetooth(6LoWPAN)に対応するLinux環境を作ります(図8)。ここではLinux Kernelとして4.1.3を用いています。Kernelを作り替え、新たな環境を作り出しましょう。
1. IPv6 over Bluetooth(6LoWPAN) Linux環境を整備する
# uname -sr; cat /etc/redhat-release Linux 3.10.0-229.20.1.el7.x86_64 CentOS Linux release 7.1.1503 (Core) # yum install-y wget net-tools bzip2 bc openssl-devel bluez usbutils # yum groupinstall "Development Tools"-y # cd /usr/local/src/ # wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.1.13.tar.xz # tar vxf ./linux-4.1.13.tar.xz # cd /usr/local/src/linux-4.1.13 # cp/boot/config-3.10.0-229.20.1.el7.x86_64./.config # make oldconfig # vi.config CONFIG_6LOWPAN=m CONFIG_6LOWPAN_NHC=m CONFIG_6LOWPAN_NHC_DEST=m CONFIG_6LOWPAN_NHC_FRAGMENT=m CONFIG_6LOWPAN_NHC_HOP=m CONFIG_6LOWPAN_NHC_IPV6=m CONFIG_6LOWPAN_NHC_MOBILITY=m CONFIG_6LOWPAN_NHC_ROUTING=m CONFIG_6LOWPAN_NHC_UDP=m CONFIG_IEEE802.154_6LOWPAN=m CONFIG_BT_6LOWPAN=m # make; make modules_install; make install # sync; sync; sync; reboot # uname -sr Linux 4.1.13
最後に動作検証です。図9のように新たなLinux Kernelで作ったIPv6 over Bluetooth(6LoWPAN)環境を設定しましょう。それが終われば、動作確認です。
2. IPv6 over Bluetooth(6LoWPAN)を設定する
# modprobe bluetooth_6lowpan # hciconfig hciO up # echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable
3. IPv6 over Bluetooth(6LoWPAN)に接続する
# hcitool lescan LE Scan ... 00:6B:53:21:30:A8|PV6ICMP # echo "connect 00:6B:53:21:30:A8 1" > /sys/kernel/debug/bluetooth/6lowpan_control
4. IPv6 over Bluetooth(6LoWPAN)を確認する
# hciconfig -a hcio: Type: BR/EDR Bus: USB BD Address:5C:F3:70:63:06:D9 ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING PSCAN # ifconfig -a bt0: flags=4177<UP,POINTOPOINTRUNNING,MULTICAST> mtu 1280 inet6 fe80::5ef3:70ff:fe63:6d9 prefixlen 64 scopeid 0x20<link>
5. Ping6 over IP over Bluetooth(6LoWPAN)で疎通確認する
# ping6 -c2 -| bt0 ff02::1 | grep DUP 64 bytes from fe80::26b:53ff:fe21:30a8: icmp_seq=1 tt|=64 time=77.5 ms (DUP!) # pingo fe80::26b;53ff:fe21:30a8 -| bt0 64 bytes from fe80::26b:53ff:fe21:30a8: icmp_seq=1 ttl=64 time=146 ms 64 bytes from fe80::26b:53ff:fe21:30a8: icmp_seq=2 ttl=64 time=157 ms 64 bytes from fe80::26b:53ff:fe21:30a8: icmp_seq=3 ttl=64 time=100 ms
Bluetooth 4.1で規格が整理されBluetooth 4.2のIPSP(Internet Protocol Support Profile)によって実現されるIPv6 over Bluetoothの世界は、いかがでしたか? 先ごろApple社のiPhone 6s/6s PlusでもBluetooth 4.2対応が完了したという噂や、今後のiOSではアプリケーション開発にIPv6対応が必須などのお話が耳に聞こえてきているので、こういった世界も近い未来に現実のモノになっていくと筆者も感じています。
最後に総括ではありませんが、筆者なりの雑感を読者の皆さまに共有したいと思います。