LoginSignup
25
22

More than 5 years have passed since last update.

Intel Edisonでad-hoc Wi-Fiメッシュネットワークを構築する

Last updated at Posted at 2015-05-09

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
Edison用yoctoPJのソースコード取得
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

カーネルモジュールの選択

BATMANの設定
nmatsui@develop:~/edison-src/build$ bitbake -c menuconfig virtual/kernel

上記コマンドを実行すると、別ウィンドウでカーネルモジュールの選択メニューが開く。
※ 別ウィンドウが開くまで少し時間がかかる

Networking support ---> Networking options ---> B.A.T.M.A.N. Advanced Meshing Protocol と遷移する。

edison_kernel_build_01.png
edison_kernel_build_02.png
edison_kernel_build_03.png

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を[*]にする

<M>はローダブルモジュールとして組み込まれるという意味

edison_kernel_build_04.png

< SAVE > で.configに上書き保存した後、3回 < Exit > するとメニューが終了する。

edison_kernel_build_05.png
edison_kernel_build_06.png

./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のカーネルモジュールをビルドする。

.configをrecipes-kernelのdefconfigコピー
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にする。

recipeのディレクトリ作成
nmatsui@develop:~/edison-src/build$ mkdir ../meta-intel-edison/meta-intel-edison-distro/recipes-support/batman/
batctlのrecipe作成
nmatsui@develop:~/edison-src/build$ vi ../meta-intel-edison/meta-intel-edison-distro/recipes-support/batman/batctl_2015.0.bb
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も作成しておく。

recipeのディレクトリ作成
nmatsui@develop:~/edison-src/build$ mkdir ../meta-intel-edison/meta-intel-edison-distro/recipes-support/batman/files
batctlのMakefileのpatch作成
nmatsui@develop:~/edison-src/build$ vi ../meta-intel-edison/meta-intel-edison-distro/recipes-support/batman/files/patch.patch
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のインストールパッケージが生成される。

batctlパッケージのビルド
nmatsui@develop:~/edison-src/build$ bitbake batctl

Edisonのカーネルイメージのビルド

次に、Edisonに焼きこむカーネルイメージ全体をビルドする。
※ 非常に時間がかかるので注意

Edisonのカーネルイメージをビルド
nmatsui@develop:~/edison-src/build$ bitbake edison-image

なお自動的にFetchできないモジュールがあった場合、以下のようなエラーが表示される。

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しておくことでエラーを回避できる。

  1. 当該ファイルをマニュアルでダウンロードする
  2. ビルド環境のセットアップ(./meta-intel-edison/setup.sh)時に--dl_dirで指定したディレクトリに配置する
  3. 同じディレクトリにダウンロード完了ファイル(*.done)をtouchする

Edisonへ焼き込むカーネルイメージの準備

最後に、ビルドしたカーネルイメージをtoFlashディレクトリにまとめる。

カーネルイメージの準備
nmatsui@develop:~/edison-src/build$ ../meta-intel-edison/utils/flash/postBuild.sh

toFlash/package-list.txtを見れば、カーネルモジュールにbatman-advが含まれていることが確認できる。

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アドレスを与える。

usb0デバイスの設定
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で、ホスト名が重複しないように注意すること。

edisonの初期設定
root@edison:~# configure_edison --setup

パッケージアップデート

インターネットに接続できるWi-Fiアクセスポイントに接続しているうちに、Edisonのパッケージをアップデートする。

base-feedを設定
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し、インストールする。

Edisonのusb0デバイスのIPアドレス確認
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
ビルドサーバからipkをSCP
nmatsui@develop:~/edison-src/build$ scp ./tmp/deploy/ipk/core2-32/batctl_2015.0-r0_core2-32.ipk root@192.168.2.15:/tmp
batctlインストール
root@edison:~# opkg install /tmp/batctl_2015.0-r0_core2-32.ipk 

Edisonの停止

Edisonを停止し、ビルドサーバから給電USBポートとリモートコンソールUSBポートの接続を外す。以降、給電USBポートはビルドサーバへ接続する必要はなく、電池などから給電すれば良い。

reboot
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カーネルモジュールをロード

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
Wi-Fi(wlan0)の設定変更
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
Wi-Fiをad-hocにした状態
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ネットワーク上にメッシュネットワークを構築する。

batman-adv起動
root@edison01:~# batctl if add wlan0
root@edison01:~# ip link set dev bat0 up
batman-advを起動した状態
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アドレスを与えた。

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/6410.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ネットワーク化し活用することができると思われる。

25
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
22