Edited at

AllJoynに付属しているサンプルbasicを試してみる。

More than 3 years have passed since last update.

試したサンプルはこちら。

https://allseenalliance.org/developers/develop/run-sample-apps/basic


実行環境


  • VirtualBox上のUbuntu 14.04で試してみた。

  • AllJoynのバージョンは、v14.12。


basicは何をやるサンプルか?

ローカルのネットワーク越しに以下のようなことをしてくれる。



  • basic_clientが、basic_serviceに対して2つの単語HelloWorldを渡す。


  • basic_serviceは、それらの単語を連結した文字列Hello Worldを、basic_clientに返してくれる。


ビルド

ここに従ってビルドした。

ビルドすると、以下の場所にバイナリが生成される。今回使うのは (*) のプログラム。

build/linux/x86/debug/dist/cpp/bin/samples/

├── AboutClient
├── AboutClient_legacy
├── AboutService
├── AboutService_legacy
├── basic_client <= (*)
├── basic_service <= (*)
├── chat
├── FileTransferClient
├── FileTransferService
├── nameChange_client
├── SampleDaemon
├── sample_rule_app
├── signalConsumer_client
└── signal_service


動かしてみる

basic_serviceを起動する。

$  LD_LIBRARY_PATH=$AJ_ROOT/build/linux/x86/debug/dist/cpp/lib ./basic_service

AllJoyn Library version: v14.12.000.
AllJoyn Library build info: AllJoyn Library v14.12.000 (Built Thu Oct 15 03:27:58 UTC 2015 by thina - Git: alljoyn.git branch: '(detached from v14.12)' tag: 'v14.12' (+0 changes) commit ref: 0d71b216bb3a3cadc615c3eda6f8200093c5e117).
Interface created.
BusAttachment started.
RegisterBusObject succeeded.
ObjectRegistered has been called.
Connect to 'null:' succeeded.
NameOwnerChanged: name=org.alljoyn.Bus.sample, oldOwner=<none>, newOwner=:fKWGJuRH.2.
RequestName('org.alljoyn.Bus.sample') succeeded.
BindSessionPort succeeded.
Advertisement of the service name 'org.alljoyn.Bus.sample' succeeded.

basic_clientを動かす。何やらERROR NETWORKというエラーが発生しているようだが、とりあえず気にしない。(bindに失敗している模様。)

$  LD_LIBRARY_PATH=$AJ_ROOT/build/linux/x86/debug/dist/cpp/lib ./basic_client

AllJoyn Library version: v14.12.000.
AllJoyn Library build info: AllJoyn Library v14.12.000 (Built Thu Oct 15 03:27:58 UTC 2015 by thina - Git: alljoyn.git branch: '(detached from v14.12)' tag: 'v14.12' (+0 changes) commit ref: 0d71b216bb3a3cadc615c3eda6f8200093c5e117).
Interface 'org.alljoyn.Bus.sample' created.
BusAttachment started.
0.728 ****** ERROR NETWORK common/os/posix/Socket.cc:346 | Binding (sockfd = 41) to 0.0.0.0 9955: 98 - Address already in use: ER_OS_ERROR
BusAttachment connected to 'null:'.
BusListener Registered.
org.alljoyn.Bus.FindAdvertisedName ('org.alljoyn.Bus.sample') succeeded.
Waited 0 seconds for JoinSession completion.
0.737 ****** ERROR NETWORK common/os/posix/Socket.cc:346 | Binding (sockfd = 53) to 0.0.0.0 9955: 98 - Address already in use: ER_OS_ERROR
FoundAdvertisedName(name='org.alljoyn.Bus.sample', prefix='org.alljoyn.Bus.sample')
FoundAdvertisedName(name='org.alljoyn.Bus.sample', prefix='org.alljoyn.Bus.sample')
NameOwnerChanged: name='org.alljoyn.Bus.sample', oldOwner='<none>', newOwner=':fKWGJuRH.2'.
JoinSession SUCCESS (Session id=549605507).
JoinSession SUCCESS (Session id=-681846617).
'org.alljoyn.Bus.sample.cat' (path='/sample') returned 'Hello World!'.
Basic client exiting with status 0x0000 (ER_OK).

basic_clientは、AllJoynのネットワークへの参加(Join)成功後、HelloWorldという文字列を投げる。

basic_serviceは、basic_clientが送信してきたHelloWorldを連結して、basic_clientにレスポンスを返している。


パケットをキャプチャしてみる

ネットワーク上の動きを見てみるために、パケットをキャプチャしてみる。

これは、ADVERTISEMENT AND DISCOVERYの仕組みをパケットを観測することにより、理解を深めるためにやってみた。

ちなみに、tcpdumpのコマンドは以下。(邪魔なsshのパケットは無視している。)

 $ sudo tcpdump -i eth0 -nX not port 22

パケットの詳細解析は別途やるとして、ざっくり列挙してみる。

Advertisement and Discovery
に、プロトコルの詳細の説明があるので、合わせて読む。


  • 起動直後は、basic_servicebasic_clientともに以下の挙動。(若干パケットの内容は異なる。)


    • マルチキャストアドレス224.0.0.113に、何か送信する。

    • ブロードキャストアドレス10.0.2.225に、何か送信する。

    • マルチキャストアドレスff02::13aに、何か送信する。



  • 送信間隔を徐々に広げながら、上記を繰り返す。

  • 使用しているプロトコルは以下のようだ。(Wireshark上の表記)


    • ALLJOYN-NS


      • IPv4マルチキャスト

      • IPv6マルチキャスト

      • ブロードキャスト



    • MDNS

    • ICMPv3

    • ICMPv6




  • Helloとか、Worldという文字列は暗号化されていて、パケットからは観測することはできなかった。

キャプチャしたパケットは、以下にある。

https://github.com/toshiyukihina/alljoyn-sample-packets