Bluetooth Bonding

/ Linux/Unix / Comment[0]
Bonding(Teaming)とは複数のNICを1本にまとめ、冗長化や高速化を実現する技術

それをBluetoothに流用しようという誰得なことをやってみた

$ sudo apt-get install ifenslave

bondingモジュールの設定ファイルを作る
$ sudo vi /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bonding mode=0 miimon=100

モード
・0 balance-rr 高速送信
・1 active-backup 冗長化優先
・2 balance-xor 直結ネットワーク上のホストとの通信向け
・3 broadcast (・ω・`)
・4 802.3ad 直結ネットワーク上のホストとの通信向け
http://osdn.jp/event/kernel2005/pdf/nec.pdf

miimonはMIIリンクモニタリング間隔をミリ秒単位で指定するオプション
最適値は100らしい
http://www.kernel.org/pub/linux/kernel/people/marcelo/linux-2.4/Documentation/networking/bonding.txt

interfacesを設定
$ sudo vi /etc/network/interfaces
auto bond0
iface bond0 inet static
address 192.168.0.9
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
slave bnep0 bnep1
bnep0,1はBluetoothPANのデバイス名


NIC代わりのBluetoothPANを構築

ペアリングされている物同士を接続する
$ sudo pand -i hci0 --connect AA:AA:AA:AA:AA:AA
$ sudo pand -i hci1 --connect BB:BB:BB:BB:BB:BB

接続に成功するとbnep[0-9]というデバイスが作成される
$ ifconfig bnep0
bnep0     Link encap:イーサネット  ハードウェアアドレス BB:BB:BB:BB:BB:BB  
BROADCAST MULTICAST MTU:1500 メトリック:1
RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)

$ ifconfig bnep1
bnep1     Link encap:イーサネット  ハードウェアアドレス CC:CC:CC:CC:CC:CC
BROADCAST MULTICAST MTU:1500 メトリック:1
RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)


bnep0,1をbondingする
$ sudo ifenslave bond0 bnep0 bnep1
$ ifconfig bond0
bond0     Link encap:イーサネット  ハードウェアアドレス   BB:BB:BB:BB:BB:BB
inetアドレス:192.168.0.9 ブロードキャスト:192.168.0.255 マスク:255.255.255.0
inet6アドレス: fe80::209:ddff:fe40:cd8/64 範囲:リンク
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 メトリック:1
RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:18 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:0
RXバイト:72 (72.0 B) TXバイト:1008 (1.0 KB)

$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: fast
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 1
Actor Key: 9
Partner Key: 1
Partner Mac Address: 00:00:00:00:00:00

Slave Interface: bnep0
MII Status: up
Link Failure Count: 0
Permanent HW addr: CC:CC:CC:CC:CC:CC
Aggregator ID: 1

Slave Interface: bnep1
MII Status: up
Link Failure Count: 0
Permanent HW addr: DD:DD:DD:DD:DD:DD

サーバ側も同じようにbnep0,1を束ねる
$ sudo modprobe bonding mode=0 miimon=100
$ sudo ifenslave bond0 bnep0 bnep1
$ sudo ifconfig bond0 up
$ sudo ifconfig bond0 192.168.0.8

クライアントで
$ ping -I bond0 192.168.0.8
PING 192.168.0.8 (192.168.0.8) from 192.168.0.9 bond0: 56(84) bytes of data.
64 bytes from 192.168.0.8: icmp_req=2 ttl=64 time=8.47 ms
64 bytes from 192.168.0.8: icmp_req=4 ttl=64 time=16.1 ms
64 bytes from 192.168.0.8: icmp_req=7 ttl=64 time=32.5 ms
64 bytes from 192.168.0.8: icmp_req=9 ttl=64 time=15.1 ms

返答が帰ってきたら成功


scpでデータを送ってみたが・・・
test                                                  6% 3216KB  12.0KB/s - stalled -

$ ifconfig bnep0
bnep0     Link encap:イーサネット  ハードウェアアドレス CC:CC:CC:CC:CC:CC  
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 メトリック:1
RXパケット:650 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:2373 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:50015 (50.0 KB) TXバイト:3378468 (3.3 MB)

$ ifconfig bnep1
bnep1     Link encap:イーサネット  ハードウェアアドレス DD:DD:DD:DD:DD:DD  
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 メトリック:1
RXパケット:630 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:16 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:45447 (45.4 KB) TXバイト:844 (844.0 B)

やっぱりダメだったよ

bnep0しか使ってないみたいだし(・ω・`)速度は途中で低下するし(・ω・`)
ってかscpの-stalled-の表示初めて見た
速度低下の原因はチャンネルが被っちゃってるから? それとも無線LANが近くにあるから?

それ以前に使い方の問題だろうね(・ω・`)

bondingはNICの冗長化や高速化をする技術であり、
Bluetoothに流用することは無理だということを知った

まあ何事もやってみなきゃ分からないさ(・ω・`)
関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可