はじめに
Andoridなスマートフォンには、Bluetoothテザリングと言う機能があります。 私の使っているXperia Z Ultraでは、Wi-Fiで接続されている時に、 Bluetoothテザリングすると、Wi-FiからBluetoothへの変換器のように 動作します。 これを、NetBSDからやってみます。Bluetooth PAN
前述したBluetoothでのテザリングは、Androidなスマートフォンが NAP (Network Access Point)として動作していると言うことになります。NetBSDで、Bluetooth PANを扱う際に必要なのは、btpand(8): Bluetooth PAN daemonです。 基本的には、btpand(8)のマニュアルページに書かれているようにやれば良いはずです。
まず、Bluetooth PANで使うネットワークインターフェイスを用意します。 仮想Ethernetデバイスであるtap(4)を使います。 自分の使っているカーネルがtap(4)を有効にしているかカーネル設定ファイルで 確認しておきましょう。 おそらく多くの人が使っているであろうGENERICカーネルには、 標準で含まれています。
pseudo-device tap
がカーネル設定ファイルに含まれていれば大丈夫です。
続いて、tap0ネットワークインターフェイスは、btpand(8)が自動的に
作成してくれますので、心配いりません。
Bluetoothデバイスを用意しておく必要もあります。 普通のラップトップには、Bluetoothレシーバーが 内蔵されているのではないかと思うのですが、 私の使っている東芝dynabook R63/PSには、ACPIの先につながっているようで、 NetBSD/amd64 7.99.43からは使えません。 ですので、今回は、プラネックスコミュニケーションズのBT-Micro3E1Xという USB接続のBluetooth 3.0+EDRなレシーバーを接続してみます。 以下のように認識されます。
ubt0 at uhub0 port 1
ubt0: Cambridge Silicon Radio Bluetooth USB Adapter, rev 2.00/52.76, addr 3
ubt0のように認識されない場合には、カーネル設定ファイルでBluetooth関連の項目が
定義されているか確認します。
それでも認識されない場合には、ubt(4)等のデバイスドライバーで対処する必要が
あるかもしれません。
準備として、そもそもBluetoothサポートを有効にする必要があります。
/etc/rc.conf
に以下のように追加します。
bluetooth=YES
その上で、有効化します。以下のように実行すれば良いです。
# /etc/rc.d/bluetooth start
以下のように表示されれば、問題ありません。
configuring Bluetooth controllers: ubt0.
starting Bluetooth Link Key/PIN Code manager
starting Bluetooth Service Discovery server
次に、自分のAndroidなスマートフォンに名前を付けておきます。 AndroidなスマートフォンでBluetoothを有効にします。 続けて、Bluetoothテザリングも有効にします。
$ btconfig ubt0 inquiry
これによって、Bluetoothデバイスのアドレスが取得できます。
以下のような結果ですと、btaddrの右隣の値がアドレスです。
仮にXX:XX:XX:XX:XX:XXとしておきます。
Device Discovery from device: ubt0 ... 1 response
1: bdaddr XX:XX:XX:XX:XX:XX
: name "Xperia Z Ultra"
: class [0x5a020c] Smart Phone
次に、
/etc/bluetooth/hosts
に以下のように記載します。
ここで、XX:XX:XX:XX:XX:XXはさきほど確認したアドレスです。
bc:6e:64:a0:ba:c1 xperia
次に、Xperia Z UltraがちゃんとNAPを提供してくれているか、 念のため確認しておきましょう。 以下のようであれば無事にNAPを提供しています。
$ sdpquery -a xperia search NAP
ServiceRecordHandle: 0x00010007
ServiceClassIDList:
Network Access Point
ProtocolDescriptorList:
L2CAP (PSM 0x000f)
BNEP (v1.0; IPv4, ARP)
BrowseGroupList:
Public Browse Root
LanguageBaseAttributeIDList:
en.UTF-8 base 0x0100
BluetoothProfileDescriptorList:
Network Access Point, v1.0
ServiceName: "Android Network Access Point"
ServiceDescription: "NAP"
SecurityDescription: Service-level Security
NetAccessType: 100Mb Ethernet
MaxNetAccessRate: 1250000
どうやらIPv6は使えないようです。
どんなスマートフォンとつながってしまっても良いのでは困ります。 PIN (暗証番号)を設定し、それを使って認証します。 ここでは、さきほど設定した名称xperiaに対して、4桁のPINを設定します。
$ btpin -d ubt0 -a xperia -r -l 4
PIN: ZZZZ
ここで表示された数字4桁がPINです。
では、早速Bluetooth PAN接続してみましょう。
# btpand -d ubt0 -a xperia -s NAP
btpand[25264]: Searching for NAP service at XX:XX:XX:XX:XX:XX
btpand[25264]: Found PSM 15 for service NAP
btpand[25264]: Opening connection to service 0x1116 at YY:YY:YY:YY:YY:YY
btpand[25264]: channel_open: (fd#5)
btpand[25264]: Using interface tap0 with addr 00:1b:dc:06:1d:05
btpand[25264]: channel_open: (fd#6)
のように実行すると、Xperia Z Ultra側でPINを入力するようにうながされます。
さきほどの4桁のPINを入力します。
dhcpcd(8)コマンドで、IPアドレス他を取得します。
# dhcpcd tap0
これで、もしXperia Z UltraがWi-Fiでインターネットに接続されているので あれば、そのインターネット接続をBluetoothで使えるようになっています。 どうやらあまり広帯域ではないようですが。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。