FreeBSD
WiFi

FreeBSDのWiFiドライバー

FreeBSDのWiFiドライバーは2015年にifnetのKernel Programming Interfaceの変更にともない修正が入りました。この修正はリリースバージョンでは11で反映されました。それまではifnetをそれぞれのデバイスが持っていた物をwlanに集約して、それぞれのドライバーからifnetを削除するという修正でした。すべてのWiFiドライバに修正が入っているのでかなり大規模な修正でした。

https://wiki.freebsd.org/projects/ifnet/net80211

この修正でifconfigでWiFiのデバイスが表示されなくなり、代わりにsysctlで確認できるようになりました。

# sysctl net.wlan.devices
net.wlan.devices: otus0

生のWiFiのデバイスはifではないという考えに基づく変更ではないかと思います。

ちなみにotusは11でサポートされた、AtherosのAR9系WiFiのドライバーです。

wlanを作りwpaコマンドを使うのは従来通りです。

# ifconfig wlan0 create wlandev otus0 country JP
# ifconfig wlan0 up scan

country JPは/etc/regdomain.xmlに書かれた国毎の設定が反映されます。これを付けなかったり、日本以外を設定すると、いくら技適マークが入ったモジュールを使っていても、電波法違反となりますので注意してください。

アクセスポイント(HOSTAP)に接続する場合(STA)は以下のようにします。

# kldload wlan_ccmp wlan_tkip wlan_wep
# wpa_passphrase ssid password > /tmp/wpa.conf
# wpa_supplicant -i wlan0 -c /tmp/wpa.conf

これでwlan0にdhclientをするかifconfigで固定アドレスを設定すれば通信できます。

wlan0がどのデバイスで動いているかはifconfigには出てこないので以下で確認できます。

# sysctl net.wlan.0.%parent
net.wlan.0.%parent: otus0

hostapdを使ったAPも試してみましたが、うまくいきません。以前試したときのようにMac OS X雪豹から接続すると、接続してすぐに切断されてしまいます。Mac OS X側にTimeoutとログが出ているので、なにかが足りないのかもしれません。

よく見かけるWiFiデバイスのリスト

デバイス 接続 メーカー チップ タイプ 備考
otus USB Atheros AR9170 n HOSTAPのサポートは無いようです
ath PCI,CardBus Atheros AR5212 g
uath USB Atheros AR5005UG and AR5005UX g
ral PCI Ralink RT2500, RT2501, RT2600, RT2700, RT2800, RT3090 and RT3900E g/n nのサポートは無い
ural USB Ralink RT2500USB g
rum USB Ralink RT2501USB and RT2601USB g
run USB Ralink RT2700U, RT2800U, RT3000U and RT3900E n 対応チップのVersionは、2860, 2872, 3070, 3071, 3572, 3593, 5390, 5392, 5592。
bwi PCI,CardBus Broadcom BCM43xx g CardBusのモジュールをいくつか持っていますが、エラーが出て使えませんでした
bwn PCI,CardBus Broadcom BCM43xx g
rsu USB REALTEK RTL8188SU/RTL8192SU n
urtwn USB REALTEK RTL8188CU/RTL8188RU/RTL8188EU/RTL8192CU n
urtw USB REALTEK RTL8187B/L g
zyd USB ZyDAS Technology(Atheros) ZD1211/ZD1211B b

最初のFreeBSDのWiFiスタックはNetBSDのものをポートしたようです。オリジナルはWIDEの尾上淳(Atsushi Onoe)さんが作った物ようです。現在のスタックはそれをSam Lefflerさんが作り直した物との事です。

BroadcomのWiFiサポートを作り直すbhndというPJがあります。

参考

kismetの使い方