Intel Edisonはチップ上にデュアルチャネルのWi-Fiモジュールを内蔵している。
通常はWi-Fiアクセスポイントにぶら下がる"infrastructureモード"が用いられるが、Wi-Fiアクセスポイントを介さずにWi-Fi機器どうしが直接通信する"ad-hocモード"で動作させることもできる。
このad-hocモードを用いて、複数のEdisonが参加するメッシュネットワークを構築し、適切なルーティング制御を行えば、Wi-Fiアクセスポイントが無くとも複数のEdisonが通信できる閉じたネットワークを構成することができる。
今回はメッシュネットワークの制御にbatman-advを用いて、Edisonのad-hoc Wi-Fiメッシュネットワークの検証を行った。
batman-advを導入したカーネルのビルド
以下の手順を参考に、batman-advを導入したカーネルをビルドする。
https://software.intel.com/en-us/blogs/2015/02/27/intel-edison-adding-kernel-modules-to-yocto-example-batman
(ビルドサーバのCPUとディスクI/O速度、及びネットワーク速度にもよるが、今回用いたビルドサーバではフルビルドに6時間程度要した)
ベースとなるカーネルコードは、2015/05/09時点で最新のIntel Edison® Board Firmware Software Release 2.1を用いる(ココを参照)。
ビルドサーバの準備
バージョン | |
---|---|
CPU | Intel(R) Core(TM)2 Duo CPU E8500 @ 3.16GHz |
Memory | 7983MiB |
Distribution | Ubuntu 15.04 |
Kernel | 3.19.0-16-generic |
nmatsui@develop:~$ sudo apt-get install build-essential git diffstat gawk chrpath texinfo libtool gcc-multilib u-boot-tools -y
nmatsui@develop:~$ wget http://downloadmirror.intel.com/24910/eng/edison-src-ww18-15.tgz
nmatsui@develop:~$ tar xvfz edison-src-ww18-15.tgz
nmatsui@develop:~$ cd edison-src/
ビルド環境のセットアップ
--bb_number_thread
と--parallel_make
は、ビルドサーバのCPUコア数×2ぐらいを指定すると良い。
./meta-intel-edison/setup.sh
の内部で必要なモジュールをgit cloneしているため、Proxy環境下だと動作しない可能性がある。
nmatsui@develop:~/edison-src$ mkdir dl
nmatsui@develop:~/edison-src$ mkdir sst
nmatsui@develop:~/edison-src$ ./meta-intel-edison/setup.sh --dl_dir=./dl --sstate_dir=./sst --bb_number_thread=4 --parallel_make=4
nmatsui@develop:~/edison-src$ source poky/oe-init-build-env
カーネルモジュールの選択
nmatsui@develop:~/edison-src/build$ bitbake -c menuconfig virtual/kernel
上記コマンドを実行すると、別ウィンドウでカーネルモジュールの選択メニューが開く。
※ 別ウィンドウが開くまで少し時間がかかる
Networking support ---> Networking options ---> B.A.T.M.A.N. Advanced Meshing Protocol と遷移する。
batman-advをローダブルモジュールとして組み込む。
- B.A.T.M.A.N. Advanced Meshing Protocolを
<M>
にする- Bridge Loop Avoidanceを
[*]
にする - Distributed ARP Tableを
[*]
にする - Network Codingを
[*]
にする - B.A.T.M.A.N. debuggingを
[*]
にする
- Bridge Loop Avoidanceを
※ <M>
はローダブルモジュールとして組み込まれるという意味
< SAVE > で.configに上書き保存した後、3回 < Exit > するとメニューが終了する。
./tmp/work/edison-poky-linux/linux-yocto/<your current kernel>/linux-edison-standard-build/
以下の.config.oldと.configのdiffを取ると、メニュー画面で設定したbatman-advの設定項目が変更されていることがわかる。
--- .config.old 2015-05-08 22:35:47.828091117 +0900
+++ .config 2015-05-08 22:45:47.654645792 +0900
@@ -925,7 +925,11 @@
CONFIG_NET_SCH_FIFO=y
# CONFIG_DCB is not set
CONFIG_DNS_RESOLVER=y
-# CONFIG_BATMAN_ADV is not set
+CONFIG_BATMAN_ADV=m
+CONFIG_BATMAN_ADV_BLA=y
+CONFIG_BATMAN_ADV_DAT=y
+CONFIG_BATMAN_ADV_NC=y
+CONFIG_BATMAN_ADV_DEBUG=y
# CONFIG_OPENVSWITCH is not set
# CONFIG_VSOCKETS is not set
# CONFIG_NETLINK_MMAP is not set
カーネルモジュールのビルド
Edisonのカーネルモジュールをビルドする。
nmatsui@develop:~/edison-src/build$ mv ../meta-intel-edison/meta-intel-edison-bsp/recipes-kernel/linux/files/defconfig ../meta-intel-edison/meta-intel-edison-bsp/recipes-kernel/linux/files/defconfig.old
nmatsui@develop:~/edison-src/build$ cp tmp/work/edison-poky-linux/linux-yocto/3.10.17+gitAUTOINC+6ad20f049a_c03195ed6e-r0/linux-edison-standard-build/.config ../meta-intel-edison/meta-intel-edison-bsp/recipes-kernel/linux/files/defconfig
nmatsui@develop:~/edison-src/build$ bitbake -c compile_kernelmodules virtual/kernel
batctlのインストールパッケージのビルド
batman-advのコマンドラインユーティリティbatctl
はopkgでインストールできないため、ココで公開されているrecipeを元に、 http://www.open-mesh.org で公開されているbatctlのソースを取得してEdison用にビルドするrecipeを作成する。
recipeの名前から取得するモジュールのバージョンが決まる。2015/05/09時点で最新のbatctlはbatctl-2015.0.tar.gz
なので、recipeの名前をbatctl_2015.0.bb
にする。
nmatsui@develop:~/edison-src/build$ mkdir ../meta-intel-edison/meta-intel-edison-distro/recipes-support/batman/
nmatsui@develop:~/edison-src/build$ vi ../meta-intel-edison/meta-intel-edison-distro/recipes-support/batman/batctl_2015.0.bb
DESCRIPTION = "Control application for B.A.T.M.A.N. routing protocol kernel module for multi-hop ad-hoc mesh networks."
HOMEPAGE = "http://www.open-mesh.net/"
SECTION = "console/network"
PRIORITY = "optional"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://../license-destdir/${PN}/generic_GPLv2;md5=801f80980d171dd6425610833a22dbe6"
RDEPENDS_${PN} = "kernel-module-batman-adv"
DEPENDS = "libnl"
SRC_URI = "http://downloads.open-mesh.net/batman/stable/sources/batctl/batctl-${PV}.tar.gz\
file://patch.patch"
SRC_URI[md5sum] = "d28ad89d71888ad6b99a1f6b30c9d47c"
SRC_URI[sha256sum] = "634d91189f96bda6d4ce6179dce90ad578566f29d3111b49d6e775d4f3591f04"
EXTRA_OEMAKE = 'STAGING_INC="${STAGING_INC}"'
do_compile() {
oe_runmake
}
do_install() {
install -d ${D}${bindir}
install -m 0755 batctl ${D}${bindir}
}
ただしopen-mesh.orgで公開されているソースコードそのままでは、Edison用にビルドできないため、Makefileのpatchも作成しておく。
nmatsui@develop:~/edison-src/build$ mkdir ../meta-intel-edison/meta-intel-edison-distro/recipes-support/batman/files
nmatsui@develop:~/edison-src/build$ vi ../meta-intel-edison/meta-intel-edison-distro/recipes-support/batman/files/patch.patch
--- a/Makefile 2015-05-08 23:26:31.973042073 +0900
+++ b/Makefile 2015-05-08 23:27:21.456806172 +0900
@@ -29,7 +29,7 @@
MANPAGE = man/batctl.8
# batctl flags and options
-CFLAGS += -Wall -W -std=gnu99 -fno-strict-aliasing -MD -MP
+CFLAGS += -Wall -W -std=gnu99 -fno-strict-aliasing -MD -MP -I${STAGING_INC}/libnl3
CPPFLAGS += -D_GNU_SOURCE
LDLIBS += -lm
※ patch.patchの末尾に空白行が1行入っていることに注意。
次のコマンドでパッケージをビルドすると、tmp/deploy/ipk/core2-32/batctl_2015.0-r0_core2-32.ipk
としてbatctlのインストールパッケージが生成される。
nmatsui@develop:~/edison-src/build$ bitbake batctl
Edisonのカーネルイメージのビルド
次に、Edisonに焼きこむカーネルイメージ全体をビルドする。
※ 非常に時間がかかるので注意
nmatsui@develop:~/edison-src/build$ bitbake edison-image
なお自動的にFetchできないモジュールがあった場合、以下のようなエラーが表示される。
ERROR: Function failed: Fetcher failure for URL: 'http://downloads.sourceforge.net/swig/swig-3.0.5.tar.gz'. Unable to fetch URL from any source.
この場合、以下のように当該ファイルを事前Fetchしておくことでエラーを回避できる。
- 当該ファイルをマニュアルでダウンロードする
- ビルド環境のセットアップ(
./meta-intel-edison/setup.sh
)時に--dl_dir
で指定したディレクトリに配置する - 同じディレクトリにダウンロード完了ファイル(*.done)をtouchする
Edisonへ焼き込むカーネルイメージの準備
最後に、ビルドしたカーネルイメージをtoFlashディレクトリにまとめる。
nmatsui@develop:~/edison-src/build$ ../meta-intel-edison/utils/flash/postBuild.sh
toFlash/package-list.txt
を見れば、カーネルモジュールにbatman-advが含まれていることが確認できる。
nmatsui@develop:~/edison-src/build$ grep "batman-adv" toFlash/package-list.txt
kernel-module-batman-adv 3.10.17+git0+6ad20f049a_c03195ed6e-r0
Edisonの準備
ad-hoc Wi-Fiメッシュネットワークを組むすべてのEdisonで、この章の作業を行う。
カーネルの焼き込み
Edisonの給電USBポートをビルドサーバーに接続すると、Edisonのmass-storageが/media/<user name>/Edison
にマウントされる。toFlashディレクトリの中身すべてを、マウントされたディレクトリへコピーする。
※ 過去に転送したカーネルイメージがある場合、事前にすべて削除する
nmatsui@develop:~/edison-src/build$ rm -rf /media/nmatsui/Edison/*
nmatsui@develop:~/edison-src/build$ cp -r ./toFlash/* /media/nmatsui/Edison/
リモートコンソールUSBポート経由でEdisonにシリアル接続し、転送したカーネルイメージをEdisonへ焼き込む。
nmatsui@develop:~$ sudo screen /dev/ttyUSB0 115200
root@edison:~# reboot ota
ビルドサーバのusb0デバイスの準備
給電USBポート経由でSCPできるように、ビルドサーバのusb0デバイスにEdisonのusb0デバイスと同じネットワーク(192.168.2.0/24)に所属するIPアドレスを与える。
nmatsui@develop:~/edison-src/build$ sudo ip addr add 192.168.2.2/24 dev usb0
nmatsui@develop:~/edison-src/build$ sudo ip addr show usb0
14: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether b6:04:bc:f9:d0:e8 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.2/24 scope global usb0
valid_lft forever preferred_lft forever
inet6 fe80::b404:bcff:fef9:d0e8/64 scope link
valid_lft forever preferred_lft forever
Edisonの初期設定
パスワード・ホスト名・Wi-Fiの設定
パスワード、ホスト名、及びWi-Fiを設定する。
ad-hoc Wi-Fiメッシュネットワークに参加するすべてのEdisonで、ホスト名が重複しないように注意すること。
root@edison:~# configure_edison --setup
パッケージアップデート
インターネットに接続できるWi-Fiアクセスポイントに接続しているうちに、Edisonのパッケージをアップデートする。
root@edison:~# echo 'src/gz all http://repo.opkg.net/edison/repo/all' >> /etc/opkg/base-feeds.conf
root@edison:~# echo 'src/gz edison http://repo.opkg.net/edison/repo/edison' >> /etc/opkg/base-feeds.conf
root@edison:~# echo 'src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32' >> /etc/opkg/base-feeds.conf
root@edison:~# opkg update
root@edison:~# opkg upgrade
batctlのインストール
ビルドサーバからusb0経由でbatctlパッケージをSCPし、インストールする。
root@edison:~# ip addr show usb0
4: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 02:00:86:93:53:62 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.15/24 brd 192.168.2.255 scope global usb0
valid_lft forever preferred_lft forever
inet6 fe80::86ff:fe93:5362/64 scope link
valid_lft forever preferred_lft forever
nmatsui@develop:~/edison-src/build$ scp ./tmp/deploy/ipk/core2-32/batctl_2015.0-r0_core2-32.ipk root@192.168.2.15:/tmp
root@edison:~# opkg install /tmp/batctl_2015.0-r0_core2-32.ipk
Edisonの停止
Edisonを停止し、ビルドサーバから給電USBポートとリモートコンソールUSBポートの接続を外す。以降、給電USBポートはビルドサーバへ接続する必要はなく、電池などから給電すれば良い。
root@edison:~# shutdown -h now
ad-hoc Wi-Fiメッシュネットワークの構築
Edisonを起動してシリアル接続し、ad-hoc Wi-Fiメッシュネットワークの設定を行う。
今回はArduino BoardのEdison(edison01)とBreakout BoardのEdison(edison02)という2台のEdisonで実験した。
※ Edisonチップに内蔵されたWi-Fiモジュールを利用しているだけなので、Boardの差異に意味はない
ホスト名 | batman-advが与えたIPv6アドレス | 自分で与えたIPv4アドレス |
---|---|---|
edison01 | fe80::7400:b5ff:fed4:7b91/64 | 10.0.0.1/24 |
edison02 | fe80::0430:58ff:feeb:3415/64 | 10.0.0.2/24 |
batman-advカーネルモジュールをロード
root@edison01:~# lsmod | grep batman
root@edison01:~# modprobe batman-adv
root@edison01:~# lsmod | grep batman
batman_adv 145288 0
root@edison01:~# modinfo batman-adv
filename: /lib/modules/3.10.17-yocto-standard/kernel/net/batman-adv/batman-adv.ko
version: 2013.2.0
description: B.A.T.M.A.N. advanced
author: Marek Lindner <lindner_marek@yahoo.de>, Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
license: GPL
srcversion: 66711903985B5CAAE0DAF30
depends:
intree: Y
vermagic: 3.10.17-yocto-standard SMP preempt mod_unload ATOM
modinfoで表示されるバージョン番号や、lsmodで表示される"batman_adv"というアンダーバーになっているモジュール名がどこから来たのかは謎。。。
Wi-Fiをad-hocモードに変更
EdisonのWi-Fiをad-hocモードに変更する。
周波数帯とssidを一致させ、modeをad-hocにし、公開APかつ認証無しという設定にしなければ、ad-hoc接続できない。
(EdisonのWi-Fiモジュールの詳細は、Intel edison Wi-Fi Guideを参照)
root@edison01:~# ip addr show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 78:4b:87:a0:18:fd brd ff:ff:ff:ff:ff:ff
inet 192.168.0.9/24 scope global wlan0
valid_lft forever preferred_lft forever
root@edison01:~# wpa_cli status
Selected interface 'wlan0'
bssid=1c:b1:7f:e2:de:96
ssid=XXXXXXXX
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.0.9
p2p_device_address=7a:4b:87:a0:18:fd
address=78:4b:87:a0:18:fd
root@edison01:~# wpa_cli -iwlan0 disconnect
OK
root@edison01:~# wpa_cli -iwlan0 remove_network all
OK
root@edison01:~# wpa_cli -iwlan0 add_network
0
root@edison01:~# wpa_cli -iwlan0 set_network 0 frequency 2412
OK
root@edison01:~# wpa_cli -iwlan0 set_network 0 mode 1
OK
root@edison01:~# wpa_cli -iwlan0 set_network 0 ssid \"batman\"
OK
root@edison01:~# wpa_cli -iwlan0 set_network 0 auth_alg OPEN
OK
root@edison01:~# wpa_cli -iwlan0 set_network 0 key_mgmt NONE
OK
root@edison01:~# wpa_cli -iwlan0 set_network 0 scan_ssid 1
OK
root@edison01:~# wpa_cli -iwlan0 select_network 0
OK
root@edison01:~# wpa_cli -iwlan0 enable_network 0
OK
root@edison01:~# ip addr show wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 78:4b:87:a0:18:fd brd ff:ff:ff:ff:ff:ff
root@edison01:~# wpa_cli status
Selected interface 'wlan0'
bssid=02:6f:13:7a:9b:d3
ssid=batman
id=0
mode=IBSS
pairwise_cipher=NONE
group_cipher=NONE
key_mgmt=NONE
wpa_state=COMPLETED
p2p_device_address=7a:4b:87:a0:18:fd
address=78:4b:87:a0:18:fd
メッシュネットワーク構築
batctlを用い、wlan0のad-hocネットワーク上にメッシュネットワークを構築する。
root@edison01:~# batctl if add wlan0
root@edison01:~# ip link set dev bat0 up
root@edison01:~# ip addr show bat0
5: bat0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link/ether 76:00:b5:d4:7b:91 brd ff:ff:ff:ff:ff:ff
inet6 fe80::7400:b5ff:fed4:7b91/64 scope link
valid_lft forever preferred_lft forever
上記の作業を1台目のEdison(edison01)で実行すると、batman-advにより仮想デバイス bat0 が構成され、リンクローカルのIPv6アドレス fe80::7400:b5ff:fed4:7b91/64 が自動的に与えらた。
ただしbatman-advはIPv4アドレスを自動で与えないため、今回は手作業で10.0.0.1/24のIPv4アドレスを与えた。
root@edison01:~# ip addr add 10.0.0.1/24 dev bat0
root@edison01:~# ip addr show bat0
5: bat0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
link/ether 76:00:b5:d4:7b:91 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 scope global bat0
valid_lft forever preferred_lft forever
inet6 fe80::7400:b5ff:fed4:7b91/64 scope link
valid_lft forever preferred_lft forever
同様の作業を2台目のEdison(edison02)でも実行し、ad-hoc Wi-Fiメッシュネットワーク上でfe80::0430:58ff:feeb:3415/64と10.0.0.2/24のアドレスが与えられた。
接続検証
ここまでで、ad-hoc Wi-Fiメッシュネットワークにedison01とedison02が接続されたので、接続確認を行う。
edison01
自身のbat0 IPv6アドレスへping
root@edison01:~# ping -c 3 fe80::7400:b5ff:fed4:7b91
PING fe80::7400:b5ff:fed4:7b91 (fe80::7400:b5ff:fed4:7b91): 56 data bytes
64 bytes from fe80::7400:b5ff:fed4:7b91: seq=0 ttl=64 time=0.260 ms
64 bytes from fe80::7400:b5ff:fed4:7b91: seq=1 ttl=64 time=0.274 ms
64 bytes from fe80::7400:b5ff:fed4:7b91: seq=2 ttl=64 time=0.271 ms
--- fe80::7400:b5ff:fed4:7b91 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.260/0.268/0.274 ms
自身のbat0 IPv4アドレスへping
root@edison01:~# ping -c 3 10.0.0.1
PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: seq=0 ttl=64 time=0.252 ms
64 bytes from 10.0.0.1: seq=1 ttl=64 time=0.226 ms
64 bytes from 10.0.0.1: seq=2 ttl=64 time=0.227 ms
--- 10.0.0.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.226/0.235/0.252 ms
自身のmulticast DNS名にping
Intel Edison Board Firmware Software Release 2.1のカーネルは、デフォルトでmulticst DNSが動作するため、<ホスト名>.localでも各Edisonに接続できるはず。
root@edison01:~# ping -c 3 edison01.local
PING edison01.local (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: seq=0 ttl=64 time=0.211 ms
64 bytes from 10.0.0.1: seq=1 ttl=64 time=0.227 ms
64 bytes from 10.0.0.1: seq=2 ttl=64 time=0.230 ms
--- edison01.local ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.211/0.222/0.230 ms
edison02のbat0 IPv6アドレスへping
root@edison01:~# ping -c 3 fe80::0430:58ff:feeb:3415
PING fe80::0430:58ff:feeb:3415 (fe80::430:58ff:feeb:3415): 56 data bytes
64 bytes from fe80::430:58ff:feeb:3415: seq=0 ttl=64 time=22.225 ms
64 bytes from fe80::430:58ff:feeb:3415: seq=1 ttl=64 time=21.356 ms
64 bytes from fe80::430:58ff:feeb:3415: seq=2 ttl=64 time=30.626 ms
--- fe80::0430:58ff:feeb:3415 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 21.356/24.735/30.626 ms
edison02のbat0 IPv4アドレスへping
root@edison01:~# ping -c 3 10.0.0.2
PING 10.0.0.2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: seq=0 ttl=64 time=9.282 ms
64 bytes from 10.0.0.2: seq=1 ttl=64 time=8.884 ms
64 bytes from 10.0.0.2: seq=2 ttl=64 time=18.188 ms
--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 8.884/12.118/18.188 ms
edison02のmulticast DNS名にping
root@edison01:~# ping -c 3 edison02.local
PING edison02.local (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: seq=0 ttl=64 time=42.641 ms
64 bytes from 10.0.0.2: seq=1 ttl=64 time=37.797 ms
64 bytes from 10.0.0.2: seq=2 ttl=64 time=41.481 ms
--- edison02.local ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 37.797/40.639/42.641 ms
edison02
自身のbat0 IPv6アドレスへping
root@edison02:~# ping -c 3 fe80::0430:58ff:feeb:3415
PING fe80::0430:58ff:feeb:3415 (fe80::430:58ff:feeb:3415): 56 data bytes
64 bytes from fe80::430:58ff:feeb:3415: seq=0 ttl=64 time=0.261 ms
64 bytes from fe80::430:58ff:feeb:3415: seq=1 ttl=64 time=0.273 ms
64 bytes from fe80::430:58ff:feeb:3415: seq=2 ttl=64 time=0.273 ms
--- fe80::0430:58ff:feeb:3415 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.261/0.269/0.273 ms
自身のbat0 IPv4アドレスへping
root@edison02:~# ping -c 3 10.0.0.2
PING 10.0.0.2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: seq=0 ttl=64 time=0.255 ms
64 bytes from 10.0.0.2: seq=1 ttl=64 time=0.227 ms
64 bytes from 10.0.0.2: seq=2 ttl=64 time=0.228 ms
--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.227/0.236/0.255 ms
自身のmulticast DNS名にping
root@edison02:~# ping -c 3 edison02.local
PING edison02.local (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: seq=0 ttl=64 time=0.193 ms
64 bytes from 10.0.0.2: seq=1 ttl=64 time=0.227 ms
64 bytes from 10.0.0.2: seq=2 ttl=64 time=0.225 ms
--- edison02.local ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.193/0.215/0.227 ms
edison01のbat0 IPv6アドレスへping
root@edison02:~# ping -c 3 fe80::7400:b5ff:fed4:7b91
PING fe80::7400:b5ff:fed4:7b91 (fe80::7400:b5ff:fed4:7b91): 56 data bytes
64 bytes from fe80::7400:b5ff:fed4:7b91: seq=0 ttl=64 time=42.838 ms
64 bytes from fe80::7400:b5ff:fed4:7b91: seq=1 ttl=64 time=17.808 ms
64 bytes from fe80::7400:b5ff:fed4:7b91: seq=2 ttl=64 time=50.349 ms
--- fe80::7400:b5ff:fed4:7b91 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 17.808/36.998/50.349 ms
edison01のbat0 IPv4アドレスへping
root@edison02:~# ping -c 3 10.0.0.1
PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: seq=0 ttl=64 time=40.028 ms
64 bytes from 10.0.0.1: seq=1 ttl=64 time=39.172 ms
64 bytes from 10.0.0.1: seq=2 ttl=64 time=38.162 ms
--- 10.0.0.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 38.162/39.120/40.028 ms
edison01のmulticast DNS名にping
root@edison02:~# ping -c 3 edison01.local
PING edison01.local (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: seq=0 ttl=64 time=32.154 ms
64 bytes from 10.0.0.1: seq=1 ttl=64 time=3.124 ms
64 bytes from 10.0.0.1: seq=2 ttl=64 time=16.178 ms
--- edison01.local ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 3.124/17.152/32.154 ms
まとめ
Intel EdisonのWi-Fiモジュールをad-hocモードで動作させ、batman-advを用いることで、ad-hoc Wi-Fiメッシュネットワークを動作させることができた。
本来は4台以上のEdisonでメッシュネットワークを構築し、Wi-Fiが直接届かない両端のEdison間でも問題なく接続できることや、途中のEdisonに障害が起きても適切にルーティングされることなども検証したいのだが、そんなにたくさんのEdisonが手元に無い・・・
この技術をうまく活用すれば、Wi-Fiアクセスポイントの維持管理に煩わさせられることなく、Intel EdisonをIPネットワーク化し活用することができると思われる。