2008年2月6日 星期三

無線網路 ipw2200 Chip 在 Linux 上的問題

Standard
雖然說 ipw2200 已經是過時的產物,新的 NB 上幾乎已經不再看得見它的存在,但它在 Linux 上的 Bug 仍然沒有被好好解決過。而因為工作需求,我常接觸到各式各樣他人贊助的機器,在偶然的一次機會,就發現了 ipw2200 的嚴重問題。不過一般 ipw2200 的擁有者也不用太在意,如果你沒有使用 netplugd 這個 Daemon ,或許不會感覺到任何的狀況發生。

一切問題出在使用 ipw2200 時,IFF_RUNNING 旗標會不斷改變,netplugd 會認為這是網路線的插拔訊號,所以會關閉再重新啟動該網路介面。碰到這問題的使用者,會發現網路狀態一下斷線、一下又連線,嚴重時將可能導致無法使用 wireless 上網。

網路上查過相關資訊,發現 ipw2200 有自動 scanning 的相關特性,可能會導致效能差等等問題,也有人說在載入驅動程式時可以指定 option 去關閉該功能,不過又有文章指出在某版本的 kernel 以後就不會有這個特性造成的問題存在。但是,眾多講法都只是道聽途說,無法確定是不是因為 autoscanning 造成 IFF_RUNNING 不斷改變,畢竟我使用的是 2.6.23.9 的 kernel ,照他們的講法應該沒問題才對 :(

這次比較懶惰,我沒去檢查 ipw2200 driver sourcecode,真正的原因不得而知。不過既然已經知道問題的現象,可以透過關閉 netplugd 或是改寫『 /etc/netplug.d/*』去暫時解決。不過更好的解決辦法,就是修正 ipw2200 driver 或是改寫 netplugd ,讓它不要以 IFF_RUNNING 去判斷網路線是否插拔。