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 1.カーネルのバージョンアップ し かし、この方法は、玄箱については最新バージョンに対応したパッチが提供されているが、LS−GLについてはそれが無く、最新版はメルコのほメルコのSource Code Downloadページにあるlinux- 2.6.16_lsp.1.7.8であり、zd1211bのドライバーがカーネルに同梱されている2.6.18には達していない。 もしかして、構造が類似している玄箱なのでカーネルがそのまま動くのではと記事のとおり2.6.24-rc3をコンパイルして置き換えてみたが起動しない。 一月待ってやっと手に入れたシリアルアダプターが運良く届いたのでこれを使って接続して見てみると、
玄箱には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.アクセスポイントとしての稼働 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 |