LinkStaion LS−GLによる無線LANアクセスポイント化


 日経LINUXの今年2月号に出ていた玄箱Proで無線LANを使う方法があったのでほとんど同じ構造のLS−GLでも出来るのではと思い、チップにZD1211bを使ったUSBタイプの無線LANをLS−GLで動かしてみることを試みた。
 やり方については、日経LINUXの記事に従いカーネルのバージョンを上げることを最初に試してみた。

 ○システム条件
   OS:Debian etch LinkStation LS-GL で debian を動かそうでDebian化したLS−GLをetchにUPしたもの
      カーネル−2.6.16.16−arm1
   無線LAN:アクセスポイント−Buffalo WLI−U2−KG54L 端末−PCI GW−US54Min2 
今回使用した無線LAN
1.カーネルのバージョンアップ
 し かし、この方法は、玄箱については最新バージョンに対応したパッチが提供されているが、LS−GLについてはそれが無く、最新版はメルコのほメルコのSource Code Downloadページにあるlinux- 2.6.16_lsp.1.7.8であり、zd1211bのドライバーがカーネルに同梱されている2.6.18には達していない。
 もしかして、構造が類似している玄箱なのでカーネルがそのまま動くのではと記事のとおり2.6.24-rc3をコンパイルして置き換えてみたが起動しない。
 一月待ってやっと手に入れたシリアルアダプターが運良く届いたのでこれを使って接続して見てみると、

Starting kernel ...

arg:console=ttyS0,115200 root=/dev/sda2 rw initrd=0x00800040,15M panic=5 BOOTVER=1.10
CONFIG_BUFFALO_PLATFORM CONFIG_BUFFALO_LINKSTATION_LSGL ---
 LS−GLのカーネルでは赤字の部分が表示されるが、玄箱用のカーネルではこれが無くここで停止してしまう。

 玄箱にはCONFIG_BUFFALO_PLATFORM CONFIG_BUFFALO_LINKSTATION_LSGLなる変数は有るはずもなく、これが原因で停止しているようである。
ソースをいじってこれらの変数を組み込むことも考えたが私の力では当然無理なのでカーネルのアップは取り敢えずあきらめることとした。

2.ドライバーの組み込み
  ネット上にあるドライバーとしては、
  ・メーカー製のZD1211LnxDrv_2_22_0_0.tar.gz
  ・これを有志が改造したzd1211-driver-r85.tgz
  ・Debianのパッケージとしてapt-get installで組み込めるzd1211-source
 がある。

 最初、2番目のzd1211-driver-r85.tgzをネットから頂いてきて試してみるが、私の環境ではコンパイルできない。
 それは、make中にzd1211b Invalid module formatなるエラー表示がありコンパイル不能となることである。
 試行錯誤を3日程繰り返した結果判明した事は、これはカーネルソースやモジュールなどの環境が整っていなかったことによるものと思われる。最初から環境設定、つまりカーネルのソースとモジュールのセットをやり直すことで解決した。

 zd1211-driver-r85.tgzが不調のため次のZD1211LnxDrv_2_22_0_0.tar.gzで試してみる。これに関しては、warningはたくさん出るが、zd1211b.koなるモジュールは生成される。
 しかし、dmesgの表示で
  zd1211 version magic  gcc-4.1 gcc-3.4が異なるとのメッセージが出る。
  これも後日解消したのであるがカーネルの再構築をしていなかったのでメーカー製のカーネルに使ったコンパイラーのバージョンgcc-3.4と今回 zd1211bのドライバーをコンパイルした時のgcc-4.1が異なっていたことが原因であり、再構築したカーネルに置き換えることで解決。

 三つ目のzd1211-sourceについても試してみたが、コンパイル上で同じ問題が出ると共に、よくよく見てみるとzd1211用でzd1211bには対応していないことが分かりこれは没。

 コンパイルに成功した上記2つの方法で無線での接続を試みると、どちらもドライバーは動いているようであるが、iwconfigで見る限り受信レベルが0であり、また、actランプもつかないのでどこかおかしいようである。
 しかし、これは私の勘違いで、色々やっている内にpingが通りだし、結果iwconfigの表示には受信レベルは0のままであることが分かった。
 最終的に動いたのは、zd1211-driver-r85.tgzであり、稼働までの経過を辿ると以下の通りのはずである。

3.zd1211-driver-r85.tgzのmakeから稼働までの経過
  /usr/src/zd1211-driver-r85/src/zdusb.cに今回使用するメルコのWLI-U2-KG54LのVenderIDとProductIDを追記する。
  また、/usr/src/zd1211-driver-r85/Makefileのカーネルソースのパスとモジュールの在処へのパスも適宜修正する。
   さらに、今回使用するWLI-U2-KG54Lに使われているチップはzd1211bであるのでMakefileの20行目にあるzd1211bの指定フラグを1に変更する。

test:/#cd /usr/src
test:/usr/src#tar xzvf zd1211-driver-r85.tgz
test:/usr/src#cd zd1211-driver-r85
test:/usr/src/zd1211-driver-r85# vi Makefile
   # set to 1 for zd1211b
      ZD1211REV_B=1


test:/usr/src/zd1211-driver-r85#vi src/zdusb.c

#ifdef ZD1211B
                { USB_DEVICE(0x0053, 0x5301) },
                { USB_DEVICE(0x0053, 0x5302) },
                { USB_DEVICE(0x050d, 0x4050) },
                { USB_DEVICE(0x050d, 0x705c) },
                { USB_DEVICE(0x0586, 0x340f) },
                { USB_DEVICE(0x079b, 0x0062) },
                { USB_DEVICE(0x083a, 0x4505) },
                { USB_DEVICE(0x083a, 0xe501) },
                { USB_DEVICE(0x0ace, 0x1215) },
                { USB_DEVICE(0x0ace, 0xa215) },
                { USB_DEVICE(0x0baf, 0x0121) },
                { USB_DEVICE(0x0cde, 0x001a) },
                { USB_DEVICE(0x0df6, 0x9075) },
                { USB_DEVICE(0x0f88, 0x3014) },
                { USB_DEVICE(0x1233, 0x0471) },
                { USB_DEVICE(0x157e, 0x300d) },
                { USB_DEVICE(0x1582, 0x6003) },
                { USB_DEVICE(0x0411, 0x00da) },  ここを追記メルコのWLI-U2-KG54Lの諸元

○コンパイル開始
test:/usr/src/zd1211-driver-r85# make
/lib/modules/2.6.16.16-arm1/build ここがモジュールへのパス。違っている場合は、Makefileを修正
/usr/src/zd1211-driver-r85
-I/usr/src/zd1211-driver-r85/src/include -fomit-frame-pointer -O2 -Wall -Wstrict-prototypes -pipe -DZDCONF_WE_STAT_SUPPORT=1 -DHOST_IF_USB -DAMAC -DGCCK -DOFDM -DHOSTAPD_SUPPORT -DUSE_EP4_SET_REG -DDOWNLOADFIRMWARE -DfTX_GAIN_OFDM=0 -DfNEW_CODE_MAP=1 -DfWRITE_WORD_REG=1 -DfREAD_MUL_REG=1 -DENHANCE_RX=1 -DZD1211B
src/zd1205.o src/zdasocsvc.o src/zdauthreq.o src/zdauthrsp.o src/zdmmrx.o src/zdshared.o src/zdhci.o src/zdglobal.o src/zdencrypt.o src/zdpmfilter.o src/zdpsmon.o src/zdsynch.o src/zdbuf.o src/zd1205_proc.o src/zdhw.o src/zddebug.o src/zdtkipseed.o src/zdmic.o src/zdusb.o src/zd1211.o
make -C /lib/modules/2.6.16.16-arm1/build SUBDIRS=/usr/src/zd1211-driver-r85 modules
make[1]: Entering directory `/usr/src/linux-2.6.16_lsp.1.7.8' ここがカーネルソースへのパス
  Building modules, stage 2.
  MODPOST
  LD [M]  /usr/src/zd1211-driver-r85/zd1211b.ko
make[1]: Leaving directory `/usr/src/linux-2.6.16_lsp.1.7.8'

test:/usr/src/zd1211-driver-r85# ls -l
total 652
-rwxr-xr-x 1 www-data www-data   4674 Feb  6 21:26 Makefile
-rwxr-xr-x 1 root     www-data  13296 Feb  8 19:38 apdbg
-rw-r--r-- 1 www-data www-data   9144 Mar 18  2006 apdbg.c
-rwxr-xr-x 1 www-data www-data  18334 Feb 13  2006 copying
drwxr-sr-x 2 www-data www-data   4096 Feb  8 00:10 src
-rwxr-xr-x 1 www-data www-data    644 Feb 13  2006 sta
-rw-r--r-- 1 root     www-data 292006 Feb  9 11:43 zd1211b.ko
-rw-r--r-- 1 root     www-data   1401 Feb  8 00:10 zd1211b.mod.c
-rw-r--r-- 1 root     www-data   2776 Feb  8 00:10 zd1211b.mod.o
-rw-r--r-- 1 root     www-data 289883 Feb  8 00:10 zd1211b.o

test:/usr/src/zd1211-driver-r85# make install
/lib/modules/2.6.16.16-arm1/build
/usr/src/zd1211-driver-r85
-I/usr/src/zd1211-driver-r85/src/include -fomit-frame-pointer -O2 -Wall -Wstrict-prototypes -pipe -DZDCONF_WE_STAT_SUPPORT=1 -DHOST_IF_USB -DAMAC -DGCCK -DOFDM -DHOSTAPD_SUPPORT -DUSE_EP4_SET_REG -DDOWNLOADFIRMWARE -DfTX_GAIN_OFDM=0 -DfNEW_CODE_MAP=1 -DfWRITE_WORD_REG=1 -DfREAD_MUL_REG=1 -DENHANCE_RX=1 -DZD1211B
src/zd1205.o src/zdasocsvc.o src/zdauthreq.o src/zdauthrsp.o src/zdmmrx.o src/zdshared.o src/zdhci.o src/zdglobal.o src/zdencrypt.o src/zdpmfilter.o src/zdpsmon.o src/zdsynch.o src/zdbuf.o src/zd1205_proc.o src/zdhw.o src/zddebug.o src/zdtkipseed.o src/zdmic.o src/zdusb.o src/zd1211.o
make -C /lib/modules/2.6.16.16-arm1/build SUBDIRS=/usr/src/zd1211-driver-r85 modules
make[1]: Entering directory `/usr/src/linux-2.6.16_lsp.1.7.8'
  Building modules, stage 2.
  MODPOST
make[1]: Leaving directory `/usr/src/linux-2.6.16_lsp.1.7.8'
mkdir -p /lib/modules/2.6.16.16-arm1/net
cp zd1211b.ko /lib/modules/2.6.16.16-arm1/net
depmod -a 2.6.16.16-arm1
gcc -o apdbg apdbg.c
chmod +x apdbg
cp ./apdbg /sbin/apdbg

driverが所定の位置にインストールされたことの確認
test:/usr/src/zd1211-driver-r85# ls -l /lib/modules/2.6.16.16-arm1/net/
total 584
-rw-r--r-- 1 root root 290979 Feb  9 00:19 zd1211.ko
-rw-r--r-- 1 root root 292006 Feb  9 11:44 zd1211b.ko

makeの中でdepmod -a が行われているので modprobe による組み込みは省略

ドライバーの組み込みを確認
lsmod
test:/usr/src/zd1211-driver-r85# lsmod
Module                  Size  Used by
zd1211b               296840  0

動作の確認
iwconfig
test:/usr/src/zd1211-driver-r85# iwconfig
eth0      no wireless extensions.

lo        no wireless extensions.

wlan0     802.11b/g NIC  ESSID:""
          Access Point: Not-Associated
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  invalid crypt:0  invalid misc:0

この状態では起動していないので以下により無線LAN起動
test:/# ifconfig wlan0 up
アクセスポイントを調べる
iwlist wlan0 scanning
test:/# iwlist wlan0 scanning
wlan0     Scan completed :
          Cell 01 - Address: 00:07:40:76:FB:D9
                    ESSID:"00074083148D"
                    Mode:Master
                    Frequency:2.432 GHz (Channel 5)
                    Extra:SignalStrength=81%,LinkQuality:92%
                    Encryption key:off
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s
                              11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
                              48 Mb/s; 54 Mb/s
                    Extra:bcn_int=100


これで無線LANの諸元がセットされる。いちいち手動でやるよりこの方が便利。

eth0      no wireless extensions.

lo        no wireless extensions.

wlan0     802.11b/g NIC  ESSID:"00074083148D"
          Mode:Managed  Frequency=2.432 GHz  Access Point: 00:07:40:76:FB:D9
          Bit Rate:11 Mb/s
          Retry:off   RTS thr=2432 B   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0/100  Signal level:7/100  Noise level:0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

IPアドレスのセット
test:/# ifconfig wlan0 192.168.0.40 netmask 255.255.255.0 broadcast 192.168.0.255
これでpingが通り出す。


恒常的に使用するには/etc/network/interfacesを有線LANから無線LANに変更してIPアドレスの取得もDHCP経由とする。

test:/# vi /etc/network/interfaces

# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.
auto lo
iface lo inet loopback
#auto eth0
#iface eth0 inet dhcp
auto wlan0
iface wlan0 inet dhcp
wireless_essid 00074083148D

4.アクセスポイントとしての稼働
テスト中のLS−GL

test:/# ifconfig wlan0 up
test:/# iwconfig wlan0 mode master
Change Mode wait too long
Mode: AP_BSS

test:/# iwconfig wlan0 essid 12345678901A
test:/# iwconfig wlan0 channel 11
test:/# iwconfig
eth0      no wireless extensions.

lo        no wireless extensions.

wlan0     802.11b/g NIC  ESSID:"12345678901A"
          Mode:Master  Frequency=2.462 GHz  Access Point: 00:1D:73:11:1A:BF
          Bit Rate:0 kb/s
          Retry:off   RTS thr=9999 B   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:260  Invalid misc:5   Missed beacon:0
test:/# ifconfig wlan0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
 でアクセスポイントとして動いているであろう事を確認して、端末から接続を試みる。
 WindowsのPCでアクセスポイントサーチを行う。旨くキャッチ出来る時とUSBを抜き差しするなどで再設定しないといけない時もあるが、そのうち検出されるので接続を行う。
 接続後pingにより確認するが、何故か端末側からは通のにアクセスポイント側からは通らない。ランプ表示を見ると通信はしているのだが端末側からの応答が無いようである。また、端末側からのpingも応答時間が不安定である。
 パケットがエラーで壊れているのではとか、フォーマットが違うため応答を返していないのではとか疑うが調べようがない。
 そこで別のPLANET製無線LANアダプターGW-US54Mini2を持っていたのでそれに変えてやってみると何のことはない問題なく通ってしまった。
 これは同じMelco製ではあるがWLI-CB-G54とWLI-U2-KG54Lとの相性の問題であろうか。

 この状態の時は実はドライバーはZD1211LnxDrv_2_22_0_0.tar.gzを使っての結果である。
 zd1211-driver-r85.tgzでやっていのだがpingの不具合でドライバーを変えてみたらどうかと考え変更してみたという訳である。
 恐らくこれまでの状況からするとzd1211-driver-r85.tgzでも同じ結果となったと思う。

5.アクセスポイント化
 アクセスポイントとしての通信が確認できたので次は正式のアクセスポイントとしてパケットを通過させることを試みる。
 方法にはネットで見てみると
  ・iptableのNAT機能で実現する方法 
  ・ブリッジ機能を組み込む方法
 が有るようであるが、経験のないブリッジを試すこととする。
 しかし、ここでブリッジのイメージが今一つ掴めず、別セグメントでなければということが頭の隅にあり、それゆえに時間を浪費する羽目になってしまった。
 後で分かったことではあるが、ブリッジとは言葉通りブリッジでありルーターとは別物で同一セグメントの中で動作する物のようである。
 従って、ネットワークのインタフェースは個々にIPアドレスを持たず、装置として一つのIPアドレスを持つようである。
 試行錯誤の末動いた設定は以下の通りである。

(1)ブリッジインターフェースbr0の設定
 ネット上で見つけたブリッジの設定コマンドであるbrctlを使ってみたところbr0が無いと言われ、さらに調べるとどうもこれはカーネルの設定で作成されるらしいことが分かる。
 そこでカーネルの設定をmenuconfigで見てみると802.1d Ethernet Bridgingが不使用になっていた。
 ので以下のように仕様に変更してコンパイルし直す。
 Networking  --->
 [*] Networking support                                              x x
        Networking options  --->
 <*> 802.1d Ethernet Bridging

カーネルを入れ替えリブートしたところ#brctl addbr br0が通ったため再構築は成功したようである。
ブリッジの設定は以下の通りである。

test:/# brctl addbr br0
test:/# brctl stp br0 off
test:/# brctl addif br0 eth0
device eth0 entered promiscuous mode
test:/# brctl addif br0 eth1
device eth1 entered promiscuous mode
test:/# ifconfig eth0 0.0.0.0 up
test:/# ifconfig eth1 0.0.0.0 up
test:/# ifconfig br0 192.168.0.150 up
br0: port 2(eth1) entering learning state
br0: port 1(eth0) entering learning state
br0: topology change detected, propagating
br0: port 2(eth1) entering forwarding state
br0: topology change detected, propagating
br0: port 1(eth0) entering forwarding state

確認のためbrctl show をしてみると、
test:/# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.001601353ea6       no              eth0
                                                        eth1
このように表示され何となく旨くいっているように見える。
その後pingで相互に確認するが問題なくとおる。そのときのネットワーク状態は以下の通りでbr0以外IPアドレスが無いことが分かる。
test:/# ifconfig
br0       Link encap:Ethernet  HWaddr 00:16:01:35:3E:A6
          inet addr:192.168.0.150  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:387 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:106232 (103.7 KiB)  TX bytes:0 (0.0 b)

eth0      Link encap:Ethernet  HWaddr 00:16:01:35:3E:A6
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:809 errors:0 dropped:0 overruns:0 frame:0
          TX packets:210 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:512
          RX bytes:216573 (211.4 KiB)  TX bytes:47010 (45.9 KiB)
          Interrupt:21

eth1      Link encap:Ethernet  HWaddr 00:1D:73:11:1A:BF
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:955 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1612 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:139439 (136.1 KiB)  TX bytes:266828 (260.5 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:70 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:10344 (10.1 KiB)  TX bytes:10344 (10.1 KiB)

これで手動での設定は出来たわけであるが、起動時あるいはUSBの挿抜時に自動的に認識させたいためhotplugの設定をすべく、/etc/hotplug/usb/zd1211bとzd1211b.offをセットする。

(2)hotplugの設定
test:/# vi /etc/hotplug/usb/zd1211b
#!/bin/sh
ifup eth1
iwconfig eth1 essid 12345678901A
iwconfig eth1 mode managed
iwconfig eth1 mode master
iwconfig eth1 channel 11
brctl addbr br0
brctl stp br0 off
brctl addif br0 eth0
brctl addif br0 eth1
ifconfig eth0 0.0.0.0 up
ifconfig eth1 0.0.0.0 up
ifconfig br0 192.168.0.150 netmask 255.255.255.0 broadcast 192.168.0.255 up
route add default gw 192.168.0.254

test:/# vi /etc/hotplug/usb/zd1211b.off

#!/bin/sh
ifconfig eth0 down
ifconfig eth1 down
ifconfig br0 down
brctl delif eth0
brctl delif eth1
brctl delbr br0
iface eth0 inet dhcp

これを実行可能とする。
test:/etc/hotplug/usb# chmod +x *
test:/etc/hotplug/usb# ls -l
total 8
-rwxr-xr-x 1 root root 369 Feb 10 13:26 zd1211b
-rwxr-xr-x 1 root root 194 Feb 10 13:32 zd1211b.off

次に起動時のネットワーク設定である/etc/netwprk/interfaceを修正する。
test:/etc/hotplug/usb# vi /etc/network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

これでUSBの無線LANアダプターを刺せばアクセスポイントに変身するはずである。
test:/# usb 2-1: new high speed USB device using ehci_platform and address 2
usb 2-1: Product: USB2.0 WLAN
usb 2-1: Manufacturer: Buffalo
usb 2-1: configuration #1 chosen from 1 choice

 _____     ____    _    ____
|__  /   _|  _ \  / \  / ___|
  / / | | | | | |/ _ \ \___ \
 / /| |_| | |_| / ___ \ ___) |
/____\__, |____/_/   \_\____/
     |___/
ZD1211B - version 2.22.0.0-development
vendor_id = 0411
product_id = 00da
USB 2.0 Host
Release Ver = 4810
EEPORM Ver = 4810
Finsih download Firmware. Ready to reboot
PA type: 0
PHYNEWLayout = 1
Airoha AL2230S_RF
AllowedChannel = 000107ff
Region:73
usbcore: registered new driver zd1211b
device eth0 entered promiscuous mode
device eth1 entered promiscuous mode
br0: port 1(eth0) entering learning state
Promiscuous or ALLMulti mode enabled.
br0: port 2(eth1) entering learning state
br0: topology change detected, propagating
br0: port 1(eth0) entering forwarding state
br0: topology change detected, propagating
br0: port 2(eth1) entering forwarding state

ドライバーを読み込んでブリッジを設定しており旨く動いているようである。
そこでネットワークと無線の状況を確認してみる。
test:/# ifconfig
br0       Link encap:Ethernet  HWaddr 00:16:01:35:3E:A6
          inet addr:192.168.0.150  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:30 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:9079 (8.8 KiB)  TX bytes:0 (0.0 b)

eth0      Link encap:Ethernet  HWaddr 00:16:01:35:3E:A6
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:60 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:512
          RX bytes:8679 (8.4 KiB)  TX bytes:5934 (5.7 KiB)
          Interrupt:21

eth1      Link encap:Ethernet  HWaddr 00:1D:73:11:1A:BF
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4710 (4.5 KiB)  TX bytes:108 (108.0 b)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

test:/# iwconfig
eth0      no wireless extensions.

lo        no wireless extensions.

eth1      802.11b/g NIC  ESSID:"seikyou"
          Mode:Managed  Frequency=2.437 GHz  Access Point: 00:90:CC:CB:A6:39
          Bit Rate:0 kb/s
          Retry:off   RTS thr=9999 B   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:56  Invalid misc:82   Missed beacon:0

br0       no wireless extensions.

しかし、無線の設定がおかしい。
どうもhotplugが旨く動いていないようである。試行錯誤を繰り返し、/etc/network/interfacesを下記のようにしたところ何となくUSB挿入時は動いている。
しかし、抜いたときのzd1211b.offが動かない。hotplugの設定方法がよく分からない。
この状態だと立ち上げ時、あるいは終了時はマニュアルでの修正が必要のようである。
現在の設定は以下の通りである。終了時はzd1211b.offを手動で起動している。
test:/etc# cat network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.
auto lo
iface lo inet loopback
#auto wlan0
#iface wlan0 inet dhcp
auto eth1
allow-hotplug eth1
iface eth1 inet dhcp

test:/etc# cat ./hotplug/usb/zd1211b
#!/bin/sh
ifup eth1
iwconfig eth1 mode ad-hoc
iwconfig eth1 mode master
iwconfig eth1 essid 12345678901A
iwconfig eth1 channel 11
brctl addbr br0
brctl stp br0 off
brctl addif br0 eth0
brctl addif br0 eth1
ifconfig eth0 0.0.0.0 up
ifconfig eth1 0.0.0.0 up
ifconfig br0 192.168.0.150 netmask 255.255.255.0 broadcast 192.168.0.255 up
route add default gw 192.168.0.254

test:/etc# cat ./hotplug/usb/zd1211b.off
#!/bin/sh
ifconfig eth0 down
ifconfig eth1 down
ifconfig br0 down
brctl delif br0 eth0
brctl delif br0 eth1
brctl delbr br0
ifconfig eth0 192.168.0.63 netmask 255.255.255.0 broadcast 192.168.0.255 up

その後ネットを検索していると抜いた時のhotplugの動作は、/etc/hotplug/usb/にある.offファイルを実行するのではなく起動時に
$REBOVOR変数に入れたファイルを実行し、終了後にそれを削除することが判明ししたため/etc/hotplug/usb/zd1211bを以下の通り修正した。
test:/etc# cat ./hotplug/usb/zd1211b
#!/bin/sh
ifup eth1
iwconfig eth1 mode ad-hoc
iwconfig eth1 mode master
iwconfig eth1 essid 12345678901A
iwconfig eth1 channel 11
brctl addbr br0
brctl stp br0 off
brctl addif br0 eth0
brctl addif br0 eth1
ifconfig eth0 0.0.0.0 up
ifconfig eth1 0.0.0.0 up
ifconfig br0 192.168.0.150 netmask 255.255.255.0 broadcast 192.168.0.255 up
route add default gw 192.168.0.254
if [ $? = 0 ]; then
    ln -s /etc/hotplug/usb/zd1211b.off $REMOVER
fi
赤字が追加部分
実際の動作は、起動時に以下のリンクを作成させ、USBプラグを抜いたときに/etc/hotplug/usb/zd1211b.offが確実に実行されるように変更した。

起動時に以下のとおり/etc/hotplug/usb/zd1211b.offにリンクが作成され、抜いたときにこれが実行され、その後消去されるようである。

test:/etc/hotplug/usb# ls -l /var/run/usb/
total 0
lrwxrwxrwx 1 root root 28 Feb 16 09:23 %proc%bus%usb%001%002 -> /etc/hotplug/usb/zd1211b.off

USBアダプターを抜いた後のネットワーク、ブリッジ、無線LAN、hotplugの状況を以下に示すが全てクリアされている。
test:/etc/hotplug/usb# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:01:35:3E:A6
          inet addr:192.168.0.63  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:252 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:512
          RX bytes:58193 (56.8 KiB)  TX bytes:684 (684.0 b)
          Interrupt:21

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

test:/etc/hotplug/usb# iwconfig
eth0      no wireless extensions.

lo        no wireless extensions.

test:/etc/hotplug/usb# brctl show
bridge name     bridge id               STP enabled     interfaces
test:/etc/hotplug/usb# ls -l /var/run/usb/
total 0