6lowpan Linuxカーネルメモ

6lowpanのカーネル実装部分のメモ

– Bluetoothでの 6lowpan(IPv6 over bluetooth)のメイン部分
net/bluetooth/6lowpan.c
基本的にはl2capにbluetoothの足回りは依存していて、l2cap以上の上物を書けばOKという作り。l2capとIP層との繋ぎまで。l2capの実装は ”net/bluetooth/l2cap_core.c” とかを参照。
6LoWPANのRFCは現在絶賛ドラフト中。rfc7400のヘッダ圧縮も入っている。

– PAN内のPeer(Bluetooth同士)の扱い
6LoWPAN内のPeerの管理は “linux2.6/include/linux/list.h” を使った単純リスト構造。Peerの検索はlist。あれまぁDHT/Chordにしたら?とか一瞬思ったけど、そもそもBluetoothって同時接続で激しいルーティングする感じでも無いし、listでも十分と思われ。Peerはもちろん複数持ってもOK。
パケットがbt%dデバイスから送信時(ndo_start_xmit=bt_xmit)は、Peerが1個の場合はすぐに送信。2個以上の時は、OSのルーティングテーブルによろしく(bt%dが出来るから)。

– 6lowpanヘッダ処理
net/6lowpan/iphc.c
IPv6をBluetooth上に投げる時にヘッダ圧縮(rfc7400)。圧縮といってもヘッダを省く位な感じ。この時にHop Limitの処理も入る。超過したらソケットバッファからdropされる。
別のディレクトリになっているのは、必ずしもbluetoothのみを対象にする訳では無いという現れかな。

– bt%dで作成されるデバイス
 setup_netdev, netdev_setup
 ARPHRD_6LOWPAN
 IFF_POINTOPOINT

– /sys/kernel/debug/bluetooth/6lowpan_psm
 bluetoothのデバイスで、周辺のbtのlistenの開始・終了セット
 -> bt_6lowpan_listen

– /sys/kernel/debug/bluetooth/6lowpan_control
 実際のbt%dの作成とl2capで対向のBluetoothに接続
 -> lowpan_control_write

– bt%dへの読み書き
 bt_xmit -> send_pkt : Bluetooth上でl2capで送信
 chan_recv_cb -> recv_pkt : l2capからの受信

メインの構造は以上で、あとはヘッダ処理とかsetup/init系。6lowpan/bluetooth合わせても2000行程度だからサクサク読めるはず。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください