今週もブラジル話、出張先から無事日本に帰ってくることができた報告からはじめよう。学会会場からリオデジャネイロ空港まで移動に半日かかり、昼の2時ころ到着したのだが、帰りの飛行機は夜の10時にならないと搭乗が始まらない[1] ので、思いがけなく夜までの半日、空き時間ができた。この間空港にいてもすることがなく、空港のロビーでぶらついたりパソコンなどしようものなら、それこそひったくりの格好の餌食なので、長居は無用である。
あたり前だがブラジルではポルトガル語しか通用せず[2] 、筆者の言語範囲[3] から逸脱しているので、学会で一緒になったドイツ人とブラジル人女性のカップル[4] にぴったりくっついて、町内の半日見学をしてくることにした[5] 。お決まりの「タイタニック」 、もとい「Corcovadoのキリスト像」からイパネマ、コパカバーナビーチ、ポン・ジ・アスーカと、かけ足ながらも見聞を広めることができた。
図1 コルコバードのキリスト像。筆者撮影。
…それで、リオとFreeBSDとどうして関係があるかというと、案内所を出たばかりの我々にふらっと近寄ってきて、結局最後まで車で案内してくれた「にわかガイド」のカジオ君が関係するのだ。彼の車はオンボロもいいところで、リクライニングシートは勝手に倒れるわ、スピードメータをはじめとした計器類は全部壊れてるわ(安全上、ウィンカーだけは点くらしい) 、ちょっと日本では考えられないオンボロ車に乗っているわりに、日本の若者も顔負けとばかり、ひっきりなしに携帯電話 で仲間とやりとりをしており、発展途上国でもみんなケータイ世代、というのに驚いた次第である。
この話を学科の先生(大手通信会社の元研究所長)にすると、配線を敷設しなくて済む分コスト安なので、発展途上国こそケータイなのだそうだ。これを利用して自動潜水ロボットの先生はガンジス川からパソコン通信で観測データを日々送っておられるとか。そんなわけで(強引にも)今回はFreeBSD とケータイでパソコン通信の話 である。
3Gデータ通信モデムを試す[フランス編]
筆者は仕事柄、「 24時間ネットにつながっているタイプ」の人間である。ところが家庭内平和のため、休暇をとって10日間とか海外逃亡することもある。休暇中どうやって接続性を確保するか が大問題なわけだ。昨夏のフランスで、しばらく妻の実家の田舎の別荘に行くことになり、さてどうやって仕事を続けようか[6] と迷い、えいやで3Gデータ通信カード を買ってみることにした。
図2 Option iCON 225
モノはFrance Telecom資本のOrange社が売っているハイスピードモデム、Option iCON 255というものである。マルチファンクションタイプのデバイスで、パソコン挿入するとまずはUSB mass storage(CDROM)として認識される。CDの中にはWindows用のドライバのインストーラが入っており、自動的にドライバがインストールされた後は、毎回挿入するたびに自動でファンクションがモデムに切り替わり、接続準備OKとなる仕組である。
本体価格は200ユーロ超だが、「 Pass Internet Everywhere」という契約を組むことで、まず69ユーロ、家計簿を確認したら、そのほかSIMカードに30ユーロかかり、一時金99ユーロで2ヵ月後に30ユーロのキャッシュバックが入ったので、実質は69ユーロの出費であった[7] 。
最初筆者はFreeBSDでこのデバイスが動くことを全く期待しておらず(笑) 、Windowsで使えればいいやと購入したのだが、なんとこのモデムに付いてきたドライバが、フランス語のWindows XPでは動くのに日本語のXPでは動かない とんでもない代物だったのだ。「 さすが国際化が苦手なWindows」と感心ばかりもしていられない。動かなければせっかくのモデムが無駄になるだけでなく、毎年夏場は大事な国際学会の〆切があるから死活問題なのである。
ここで見つけた救世主はスウェーデンのFredrik Lindberg氏で、iCON 225のデバイス用のドライバ「hso」が公開され、portsにもなっていたのだった。手元で再度確認したところ、7.1-RELEASEでも2008年12月時点での8-CURRENTでも動作している。
インストールは簡単で、いつものようにrootになって、
# cd /usr/ports/comms/hso-kmod/
# make install clean
と入力すればよい。
/boot/modules/hso.koというローダブルカーネルモジュール(LKM)と、制御のための簡単なプログラムhsoctlがインストールされる。
利用するには、/boot/loader.confファイルに
hso_load="YES"
と記入して再起動するか、rootユーザで
# kldload hso
とすればよい。また、GENERICカーネルを使っている場合は気にしなくてよいが、この際に「umass」モジュールも必須である。
準備ができたらiCON 225をマシンに挿入する。青いLEDが短かい周期(0.5秒)で点滅をくりかえし、電源が入ったことを知らせる。コンソールには一旦umass0としてアタッチされたデバイスが取り外され、改めてhso0が検出されたと表示される。
umass0: on uhub3
cd0 at umass-sim0 bus 0 target 0 lun 0
cd0: Removable CD-ROM SCSI-2 device
cd0: 1.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present
umass0: at uhub3 port 1 (addr 2) disconnected
(cd0:umass-sim0:0:0:0): lost device
(cd0:umass-sim0:0:0:0): removing device entry
umass0: detached
hso0: on uhub3
hso0: Ethernet address: 40:0c:e3:XX:XX:XX
/dev/以下に、cuaHSO0 や ttyHSO0 といったデバイスが生成されるので、cu -l /dev/cuaHSO0として接続を開始する。「 PINコードの入力」「 接続先の指定」「 接続確認」の3ステップである。
# cu -l /dev/cuaHSO0.0
Connected
at
OK
AT+CPIN=番号
OK
at+CPIN?
+CPIN: READY
OK
AT+CGDCONT=1,,"orange.ie"
OK
AT_OWANCALL=1,1,0
OK
AT_OWANDATA=1
_OWANDATA: 1, 10.23.128.19, 0.0.0.0, 80.10.46.232, 0.0.0.0, 0.0.0.0, 0.0.0.0, 72000
OWANDATA以下、自分のアドレス情報やDNSサーバの情報が表示されるので、別のウィンドウを開き、rootで指定を行う。
# ifconfig hso0 10.23.128.19/32 up
# route add default -interface hso0
# echo "nameserver 80.10.46.232" >> /etc/resolv.conf
あっけなく、接続終了である。ちなみに、hsoモジュールは「hsoctl」で動かすとさらに楽ちんで、
# hsoctl -p 番号 hso0
# hsoctl -a "orange.ie" hso0
と入力するだけでネットワーク接続完了、Ctrl-Cでhsoctlを終了するとネットワーク切断である。「 http://orange.fr/」にアクセスして、購入したアカウントとパスワードを入力すればインターネットに出ることができる。
気になるネットワーク性能だが、留学先の研究室長先生の別荘(レ島)は3G基地局の目の前だったので、非常に高速な接続を堪能し、また妻の実家の別荘はGSMネットワークだったが、先週の「エコダウンロード法」を活用することで、トータル2時間の接続だけで万を超えるメールを処理することができた。iCON 225はフランスをはじめヨーロッパで広く流通しているようなので、海外にでかけるときは参考にされるとよいだろう。また、Windowsで動かない海外のドライバ があるとわかった時点でFreeBSD万歳三唱の声である。
b-mobile 3Gの接続サービスをFreeBSDで使う
われらが日本での3Gサービスとしては、たとえば日本通信株式会社の「b-mobile」がある。同僚の先生が持っていたので「わしも族」よろしく、また(親戚でもなんでもないのだが)社長の苗字が筆者かぶっているよしみで、これまた衝動買いをしてきてしまった。
モデム自体はZTE社から出ているMF626という種類のもののようである。これにデータ通信専用の「FOMAカード」が挿さっている。携帯電話で「開通処理」をすると数分後に使えるようになり、電波を受けているときは写真のように緑色のLEDが点灯する。
図3 b-mobile ZTE MF626
このモデム用のドライバはまだ見あたらない[8] 。システムは先ほどのiCON 225とまったく同じで、最初はCD-ROMとして認識され、CD-ROMをejectするとモデムになるという仕組みである。
したがって、手作業でUSBデバイスにファンクション切り替えのコマンドを送ってやって、プロダクトコード0x2000を0x0031に切り替えてやればよい。そのためにはusb_modeswitchプログラムを使う…
…のだが、筆者が試したところ、切り替えコマンドをwrite()するところでタイムアウトエラーが出てしまい、どうしても書き変えることができなかった。睡眠を犠牲にして頑張ってみたのだが、ソースのどこを見ても特殊な作業はしていないように見えるだけに、たかだか一晩徹夜したくらいでは解決できなかった(残念) 。
敗けそうになりながら何とか解決法はないかと頑張った結果、先月末たまたま購入したばかりのFOMA端末「Panasonic P-01A」に、b-mobileのFOMAカードを差し込む ことで、接続に成功したので紹介する。
実はFreeBSDは7.0からすでにFOMA携帯と相性が良くなっており、
/boot/loader.confに
ufoma_load="YES"
と記入して再起動するか、rootで
# kldload ufoma
として手動でモジュールを読みこむことで、FOMA端末を認識してくれるようになる。
接続に使ったケーブルは秋葉原で1,000円ほどで売っていた「充電もできるFOMA用USBケーブル」である。ufomaモジュールのおかげで難なくモデムとして認識してくれた。P-01Aは都合3台のモデム構成となっていることがわかる(下記参照) 。
FOMA の「設定/サービス→その他→USBモード設定」で「通信モード」としておく。これを「microSDモード」とすると、内蔵していればmicroSDカードが/dev/da0s1として認識されるので、rootで
# mount -t msdosfs /dev/da0s1 /mnt
とすることで、/mnt以下にマウントすることで読み書きできるようになる。もちろん使った後、引き抜く前にumount /mntを忘れてはならない。
この状態で、cuコマンドなどで直接モデムを簡単に制御できる。ATDTコマンドで普通のFOMAカードでも、「 64kデータ通信」が簡単にできてしまう。
ucom0: on uhub4
ucom0: iclass 2/136 ifno:0
ucom0:Supported Mode:modem,vendor1
ucom0: data interface 1, has CM over data, has break
ucom1: on uhub4
ucom1: iclass 2/136 ifno:2
ucom1:Supported Mode:obex,vendor1
ucom1: data interface 3, has CM over data, has break
ucom2: on uhub4
ucom2: iclass 2/136 ifno:4
ucom2:Supported Mode:handsfree
たとえば「so-net」をプロバイダに、「 64kデータ通信」を行うためのサンプルの/etc/ppp/ppp.confファイルを示す。モデムデバイスを「/dev/cuaU0」と指定することにのみ注意すれば、あとはごく普通の「ppp」接続である。
リスト1 /etc/ppp/ppp.confの例
default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)
set device /dev/cuaU0
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
\"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
sonet:
enable force-scripts
set login
set timeout 300
set phone "057000XXXX(sonetのデータ通信専用番号)"
set authname "自分のログイン名.so-net.ne.jp"
set authkey "パスワード"
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR
enable dns
この設定を利用して、大学との間で1259Kバイトのファイルをscpでアップロードした結果は以下のとおりである。64kビットを8で割って、おおむね8Kバイト/sの速度が出たことがわかる。昔便利に使っていた「PHS接続」そのものといえる。
dsc_5223.jpg 100% 1259KB 8.0KB/s 02:37
図4 64kデータ通信中
以上の手順で準備体操をしておいて、おもむろに高速データ通信環境の設定にとりかかることにしよう。
携帯の電源を切る
バッテリを外し、FOMAカードを入れかえる
バッテリを戻し、端末を起動、端末暗証番号入力
FreeBSDマシンに接続する
で準備完了である。
図5 SIMカードを交換
ppp.confファイルをMac OS X v10.3で利用するための手順書 に従って書き換える。
変更になる箇所は、ユーザ名のほか、pppコマンドの「dial」スクリプトである。初期設定でAT+CGDCONT=1,\\\"IP\\\",\\\"dm.jplat.net\\\"
と指定して、( バックスラッシュの数に注意。これが足りないとダイヤル失敗する) 、b-mobileのネットワークに接続できるようにする。
リスト2 ppp.confをb-mobile用に書き換え
default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)
allow mita
set device /dev/cuaU0
set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATZ OK-ATZ-OK AT+CGDCONT=1,\\\"IP\\\",\\\"dm.jplat.net\\\" OK ATD\\T TIMEOUT 20 CONNECT"
bmobile:
enable force-scripts
set login
set timeout 300
set phone "*99***1#"
set authname "[email protected] "
set authkey "bmobile"
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR
enable dns
設定中に allow mita とある1行は、一般ユーザ「mita」がいちいちrootにならなくても「networkグループ」に属しているだけでpppを起動できるようにするためのおまじないである。このほか、/etc/groupファイルにメンバの追加を忘れずに行っておく(※9) 。
リスト3 /etc/groupへの追加例
network:*:69:mita
あとは通常のようにppp接続すればよい。
% ppp
Working in interactive mode
Using interface: tun0
ppp ON micro> dial bmobile
Ppp ON micro> dial bmobile
PPp ON micro> dial bmobile
PPP ON micro> dial bmobile
図6 データ通信中
気になる性能だが、先ほど速度測定に使用した1259Kバイトのファイルを使って測ってみたところ、すべての場合において64k接続よりも高速にファイルの転送ができるようになったことが確認できた。
また、新しくした妻の携帯P-04Aでも同じく、ufoma.koで問題なくデータ通信網経由のPPP接続ができたことを報告しておく(※10) 。
一点不思議なことは、アップロード、すなわち手持ちのマシンからインターネット上のサーバへSCPすると40Kバイト/s、したがって320キロビット毎秒 ほど出ているのに、その逆でダウンロードすると11.3Kバイト/sほどしか出なかったことである。昼間も同じ程度の速度だったので、何か設定をし忘れている可能性は捨てきれない。ともあれ、これで(カード入れ替えという手間は残るものの) 、せっかくの投資も無駄にすることなく活用できそうなので筆者は大いに満足している。
今回急遽利用したP-01Aには、Bluetooth経由でモデムを使うためのプロファイルが実装されているので、電波の悪いところでは特に携帯電話を窓際に置いてゲートウェイにして、Bluetooth経由で部屋の中にいてインターネットを使うといった使い方ができそうである。FreeBSDとケータイのコラボで新たな可能性が広がりそうな予感だ。