刺身の上にたんぽぽ乗せる日記

プログラミングしたり、自販機の下に落ちてる小銭を集めたりしてます

blackdog詳解

自分なりに整理してみた。

外観

まず外観から。

タバコより一回りくらい小さい。iPod miniを縦に小さくした感じ。
真ん中にあるのが指紋認証指紋認証しなくてもログインできるので意味無い。
トゲトゲなのは付属品の首輪モジュール。意味は全く無い。
インターフェースはUSB。小さいポートがあるので、ケーブルでPCにつなぐと利用できる。

利用方法

  1. USBでPCに挿す
  2. PCでblackdogがCD-ROMとして認識される
  3. PCでCD-ROM(に見えるもの)の中にあるXServerや中のネットワークのプロキシ(後述)が起動。
  4. PCからCD-ROMが抜けたように見える。
  5. (多分この間にblackdog側のカーネルがブートしてる)
  6. PCでblackdogがlinksysのethernet adapterとして認識される
  7. Xで指紋認証アプリが起動
  8. 指紋認証(又は指紋認証スキップ)でランチャが立ち上がる

後はランチャからターミナルを開くなり、好き勝手できる。
ちなみに、厳密にはBlackdogはUSBハブ+USB-CD-ROM+USB-Ethernet Adapterに見える。

ネットワーク構成

XのやりとりはPCから認識されているEthernet Adapter経由でやればいいんだけど、blackdog内で動くアプリの通信がどうやってPCのネットワークを利用するかが、実際見るまでよくわかんなかった。

多分下図のような構成になってる(左側がPC、右側がblackdog)。

kernelとuserの構成は多分これで正しい。
physicalレイヤだけはあんまり調べてないからよくわかんない。PCからはUsb-ethernetとして見えるけど、linux側は別にmacがあんのか単純にlinksysっぽい動きをしてんのか、とか色々やり方ありそうだけどわかんない。とりあえずIP/USBとだけ書いたけど。

実際の流れとしては、以下のような感じ。

例:http://google.comにアクセス

  1. 一般アプリがgoogle.comにconnect()
  2. ルーティングテーブルではtap0がdefaultルートなため、パケットがtap0から送出される。
  3. tap0に書き込まれたパケットは/dev/net/tunからイーサフレーム以上の部分が読み込み可能。vtunがtap0から読み込む
  4. vtunはtap0から読み込んだパケットをudpカプセル化して、PC側で動作するRealm-networking.exeに送る
  5. Realm-networking.exeはカプセル化されているパケットを読み出し、適切な動作を行う

pingをblackdogからgoogleなどに送ると、ICMPではなく、代わりにgoogleのecho(UDP)ポート宛てのパケットが送出される。この動作からして、Realm-networking.exeはraw socketなどを使って単純にパケットを右から左へ流すだけではなく、ペイロードの内容をパースして、synだったらconnect()呼び出したり、rst/finだったらclose()呼んだりと、大分面倒臭いuser-mode IP Masquerade的な動作をしていることが想像できる。まじ地獄。
じゃあなんでraw socket使わないの?っつーと、多分権限の問題だと思うけど。っつーか、CD-ROMとかネットワークアダプタって非adminで使えるのか?今度漫画喫茶で試してみよう。

blackdogがきました

楽しいね。
スペックのとおり、挿したらCDとして認識して、Xクライアントが立ち上がった。抜いたら、そのまま電源落ちるっぽい。hybernationは機能としてないみたいね。
非admin権限で動作するか、ってのはまだ試してないからわからん。多分動かないんじゃね?

面白いのはネットワーク周り。ネットワークインターフェースのエミュレーション手法が大変興味深い。これについては後日説明。

超小型Geode搭載PC Sizka

http://www.watch.impress.co.jp/akiba/hotline/20050923/etc_sizka.html

手のひらに載るなぁ。
うちでサーバとして使ってる古いdynabookは高音が五月蝿い。これ欲しいなぁ。
けど高いし、linuxインストールするの面倒臭そうだなぁ。

Powerbook G4が新しくなってる!

http://www.apple.com/jp/powerbook/

真ん中のモデルのディスプレイの解像度がSXGA+に近いサイズになった!すげー!
全力でbuy nowボタンを押してみたけど、24万という数字を見てウィンドウを閉じてしまった。

MSのCommand shellの紹介

http://arstechnica.com/guides/other/msh.ars/1

なんつーか、bashとかそういうshellよりは、pythonとかlispとかprologとかのinteractive modeが近いな。
FS自体もこれに親和性の高い作りをしてたら面白いんだけどな。