ネットワーク

【無線LAN】組み込みボードで無線LANを動かしてみた(Intel N6300編)⑤iwを使った無線LAN管理

【※ 当記事は2020年7月2日時点の情報です】

ペイヴメント(@pavement1234)です。

エンジニア
エンジニア

古いパソコンから抜き取ったN-6300というIntelの無線LANカードを例えばRaspberry Piみたいな組込デバイスに接続したい

こんな悩みを解決します。

今回やることは1つ。

  1. iwを使った無線LAN管理

バージョン情報

Linux Kernel 3.14

iwを使った無線LAN管理

Linuxの無線LANについて書いてあるワイヤレス設定を読みながら進めてみます。

①ドライバーの状態について確認する

PCIブリッジとN-6300のドライバがPCIデバイスとして認識されています。

# lspci -k
00:00.0 PCI bridge: Synopsys, Inc. Device abcd (rev 01)
Kernel driver in use: pcieport
01:00.0 Network controller: Intel Corporation Centrino Ultimate-N 6300 (rev 35)
Subsystem: Intel Corporation Centrino Ultimate-N 6300 3×3 AGN
Kernel driver in use: iwlwifi
Kernel modules: iwlwifi

②ip linkと打ち込み無線LANインタフェース(例えばwlan0)が生成されているか見る

wlan0が出来ています。

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: can0: <NOARP40000> mtu 16 qdisc noop qlen 10
link/[280] 3: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether xx:xx:xx:xx:xx:xxbrd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
5: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

③念のためFirmwareがロードされているか確認する

iwlwifi(ver 9.221.4.1 build 25532 )が動作モード(op_mode)iwldvmで起動しています。

# dmesg | grep firmware
imx-sdma 20ec000.sdma: loaded firmware 3.1
usbserial: USB Serial support registered for Keyspan – (without firmware)
egalax_ts 2-0004: Failed to read firmware version
ili210x_i2c 2-0041: Failed to get firmware version, err: -5
iwlwifi 0000:01:00.0: loaded firmware version 9.221.4.1 build 25532 op_mode iwldvm

さらにiwlwifiの情報を得るにはこんな感じ。

# dmesg | grep iwlwifi
iwlwifi 0000:01:00.0: loaded firmware version 9.221.4.1 build 25532 op_mode iwldvm
iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEBUG disabled
iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEBUGFS disabled
iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEVICE_TRACING disabled
iwlwifi 0000:01:00.0: Detected Intel(R) Centrino(R) Ultimate-N 6300 AGN, REV=0x74
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled

さて、危うくスルーするとこでしたが動作モードのiwldvmとは何でしょう。iwldvmでGoogle検索したらiwlwifiがヒット。iwlwifi(Intelの無線LANドライバ)について詳しく解説されています。

で、iwldvmですが、どうもIntelの無線LANファームはIntel Wireless WiFi DVM Firmware supportIntel Wireless WiFi MVM Firmware supportという2つの種類がある様子。Linux WirelessのIntel無線LANファームウェアのリストを見るとチップ型番によりDVM、MVMが決まってる様子。なのですが、DVMが何なのかはよく分からりませんでした。

いよいよ無線LANとしての動作を確認します。

N-6300を無線LAN子機(STA)として動作させてみる

さらにワイヤレス設定を読み進めます。。ヒントにもある通りまずは手動で接続を試行すべきとのこと。自宅の無線LAN親機(AP)はWPAなのでiwとwpa_supplicantが必要みたいです。

①無線LANインタフェースの名前を調べる

すでにip linkでも確認していますがiwで改めて確認。wlan0として認識されています。

# ./iw dev
phy#0
Interface wlan0
ifindex 5
wdev 0x1
addr 3c:a9:f4:8b:fe:d0
type managed

②リンクの状態を確認する

未接続でした。何故でしょう。

# ./iw dev wlan0 link
Not connected.

③インタフェース有効化(通常は不要らしいのですが…)

なんかエラー出ました。

# ip link set wlan0 up
ip: SIOCSIFFLAGS: Operation not possible due to RF-kill

どうも典型的な現象らしいです。

#Rfkillによるブロックを読み、rfkill listを実行。Soft blocked: yes、Hard blocked: noなので物理的にOFFされているわけではなく、ソフト(カーネル)でブロックされているだけみたいです。

# rfkill list
0: phy0: wlan
Soft blocked: yes
Hard blocked: no

ソフトブロックを解除するには、こうするようです。

# rfkill unblock wifi

再びrfkill listを実行したところ、ソフトブロックが解除されていました。

# rfkill list
0: phy0: wlan
Soft blocked: no
Hard blocked: no

④再びインタフェース有効化

ワオワオ。今度は動きました。

# ip link set wlan0 up
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready

④インタフェースが立ち上がってるか確認

UPされています!

# ip link show wlan0
5: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

⑤無線LAN親機(AP)をスキャンする

APが見つかりました。(MACアドレスとかSSIDは一部マスク)

./iw dev wlan0 scan
SS xx:xx:xx:xx:xx:xx(on wlan0)
TSF: 6365888411648 usec (73d, 16:18:08)
freq: 5200
beacon interval: 100 TUs
capability: ESS Privacy SpectrumMgmt (0x0111)
signal: -60.00 dBm
last seen: 0 ms ago
Information elements from Probe Response frame:
SSID: W04_xxxxxxxxxxxx_5G
Supported rates: 6.0* 9.0 12.0* 18.0 24.0* 36.0 48.0 54.0
DS Parameter set: channel 40
HT capabilities:
Capabilities: 0x6e
HT20/HT40
SM Power Save disabled
RX HT20 SGI
RX HT40 SGI
No RX STBC
Max AMSDU length: 3839 bytes
No DSSS/CCK HT40
Maximum RX AMPDU length 32767 bytes (exponent: 0x002)
Minimum RX AMPDU time spacing: 4 usec (0x05)
HT RX MCS rate indexes supported: 0-7, 32
HT TX MCS rate indexes are undefined
HT operation:
* primary channel: 40
* secondary channel offset: below
* STA channel width: any
* RIFS: 0
* HT protection: no
* non-GF present: 1
* OBSS non-GF present: 0
* dual beacon: 0
* dual CTS protection: 0
* STBC beacon: 0
* L-SIG TXOP Prot: 0
* PCO active: 0
* PCO phase: 0
WPA: * Version: 1
* Group cipher: TKIP
* Pairwise ciphers: TKIP CCMP
* Authentication suites: PSK
RSN: * Version: 1
* Group cipher: TKIP
* Pairwise ciphers: TKIP CCMP
* Authentication suites: PSK
* Capabilities: 1-PTKSA-RC 1-GTKSA-RC (0x0000)
WMM: * Parameter version 1
* BE: CW 15-1023, AIFSN 3
* BK: CW 15-1023, AIFSN 7
* VI: CW 7-15, AIFSN 2, TXOP 3008 usec
* VO: CW 3-7, AIFSN 2, TXOP 1504 usec
BSS Load:
* station count: 1
* channel utilisation: 3/255
* available admission capacity: 31250 [*32us] VHT capabilities:
VHT Capabilities (0x31c00020):
Max MPDU length: 3895
Supported Channel Width: neither 160 nor 80+80
short GI (80 MHz)
+HTC-VHT
RX antenna pattern consistency
TX antenna pattern consistency
VHT RX MCS set:
1 streams: MCS 0-9
2 streams: not supported
3 streams: not supported
4 streams: not supported
5 streams: not supported
6 streams: not supported
7 streams: not supported
8 streams: not supported
VHT RX highest supported: 292 Mbps
VHT TX MCS set:
1 streams: MCS 0-9
2 streams: not supported
3 streams: not supported
4 streams: not supported
5 streams: not supported
6 streams: not supported
7 streams: not supported
8 streams: not supported
VHT TX highest supported: 292 Mbps
VHT operation:
* channel width: 1 (80 MHz)
* center freq segment 1: 42
* center freq segment 2: 0
* VHT basic MCS set: 0xfffe

⑥無線LAN(親機)に繋ぐためのwpa_supplicant設定

iwを使ってWPAの無線LAN(親機)に繋ぐには、wpa_supplicantを使う必要があります。wpa_supplicantの設定ファイルを開いたところ、最初はなにも設定されていません。

# vi /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
key_mgmt=NONE
}

Linuxでwpa_supplicantを使ってWPA2の無線LANに接続する方法を読み、自宅の無線LAN(親機)のSSIDとパスフレーズ(psk)を指定。

# vi /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid=”W04_xxxxxxxxxxxx_5G”
key_mgmt=WPA-PSK
proto=WPA WPA2
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk=”xxxxxxxxxxxx”
}

⑦wpa_supplicantを起動

成功したみたいです。

# wpa_supplicant -D nl80211,wext -i wlan0 -c /etc/wpa_supplicant.conf
Successfully initialized wpa_supplicant
wlan0: SME: Trying to authenticatwlan0: authenticate with xx:xx:xx:xx:xx:xx
e with xx:xx:xx:xx:xx:xx (SSID=’W04_xxxxxxxxxxxx_5G’ freq=5200 MHz)
wlan0: send auth to xx:xx:xx:xx:xx:xx (try 1/3)
wlan0: authenticated
wlan0: Trying to associate with xx:xx:xx:xx:xxxxfe (SSID=’W04_xxxxxxxxxxxx_5G’ freq=5200 MHz)
wlan0: associate with xx:xx:xx:xx:xx:xx(try 1/3)
wlan0: RX AssocResp from xx:xx:xx:xx:xx:xx(capab=0x111 status=0 aid=1)
IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
wlan0: associated
wlan0: Associated with xx:xx:xx:xx:xx:xx
wlan0: WPA: Key negotiation completed with xx:xx:xx:xx:xx:xx[PTK=CCMP GTK=TKIP] wlan0: CTRL-EVENT-CONNECTED – Connection to xx:xx:xx:xx:xx:xxcompleted [id=0 id_str=]

Ctrl+Cで抜けたら、リンクが切れました。

wlan0: deauthenticating from xx:xx:xx:xx:xx:xx by local choice (reason=3)
cfg80211: Calling CRDA to update world regulatory domain
wlan0: CTRL-EVENT-DISCONNECTED bssid=xx:xx:xx:xx:xx:xxreason=3 locally_generated=1
wlan0: CTRL-EVENT-TERMINATING

&を付けてバックグラウンド起動しました。

# wpa_supplicant -D nl80211,wext -i wlan0 -c /etc/wpa_supplicant.conf &
(省略)

⑧再びリンク状態を取得

繋がりました。

# ./iw dev wlan0 link
Connected to ac:84:c6:cc:31:fe (on wlan0)
SSID: W04_xxxxxxxxxxxx_5G
freq: 5200
RX: 45180 bytes (367 packets)
TX: 533 bytes (5 packets)
signal: -61 dBm
rx bitrate: 24.0 MBit/s
tx bitrate: 6.0 MBit/s

bss flags: short-slot-time
dtim period: 0
beacon int: 100

⑨IPアドレスを振る

自宅の無線LAN親機(AP)はDHCPサーバですが、組込Linuxボードにdhcpが入ってないので静的IPを設定しました。うちのセグメントは192.168.100.xなのでこんな感じ。

# ip addr add 192.168.100.222/24 dev wlan0
# ip route add default via 192.168.100.1

⑩IPアドレスを確認する

IPアドレスは無事設定できた様子です。

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: can0: <NOARP40000> mtu 16 qdisc noop qlen 10
link/[280] 3: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether xx:xx:xx:xx:xx:xxbrd ff:ff:ff:ff:ff:ff
4: sit0@NONE: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
5: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.100.222/24 scope global wlan0
valid_lft forever preferred_lft forever
inet6 xxxx:xxx:xxxx:xxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic
valid_lft 7004sec preferred_lft 3404sec
inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever

⑪無線LAN親機(AP)にPINGを打ってみる

無線LAN親機(AP)のIPアドレス(192.168.100.1)に対してPINGが通りました。

# ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1): 56 data bytes
64 bytes from 192.168.100.1: seq=0 ttl=64 time=17.649 ms
64 bytes from 192.168.100.1: seq=1 ttl=64 time=37.288 ms
64 bytes from 192.168.100.1: seq=2 ttl=64 time=10.136 ms
64 bytes from 192.168.100.1: seq=3 ttl=64 time=29.372 ms
(以下略)

⑫無線LAN親機(AP)から切断

意図的にリンク断しました。

# ip link set wlan0 down
wlan0: deauthenticating from xx:xx:xx:xx:xx:xx by local choice (reason=3)
wlan0: CTRL-EVENT-DISCONNECTED bssid=xx:xx:xx:xx:xx:xx reason=3 locally_generated=1
cfg80211: Calling CRDA to update world regulatory domain

wpa_supplicantのプロセスIDを調べて。

♯ ps | grep wpa_supplicant
806 root 6364 S wpa_supplicant -D nl80211,wext -i wlan0 -c /etc/wpa_
822 root 2660 S grep wpa_supplicant

killしました。

# kill -9 806

次の項でN-6300を無線LAN親機(AP)にしてみます。

N-6300を無線LAN親機(AP)として動作させてみる

hostapd を用いた無線 LAN アクセスポイントの構築を読みました。hostapdというソフトウェア無線LAN親機(AP)が必要になるようです。BD-SABRE-LITEでhostapdと打ち込んでみましたが、インストールされてなかったのでソースからビルドしてみます。

# hostapd
-sh: hostapd: not found

①wgetでダウンロード

まずはhostapd(ver.2.6)のソースをダウンロード。

$ wget https://w1.fi/releases/hostapd-2.6.tar.gz
–2019-10-05 01:32:38– https://w1.fi/releases/hostapd-2.6.tar.gz
w1.fi (w1.fi) をDNSに問いあわせています… 212.71.239.96
w1.fi (w1.fi)|212.71.239.96|:443 に接続しています… 接続しました。
HTTP による接続要求を送信しました、応答を待っています… 200 OK
長さ: 1822341 (1.7M) [application/x-gzip] hostapd-2.6.tar.gz' に保存中

100%[==========================================================>] 1,822,341 365KB/s 時間 5.4s

2019-10-05 01:32:45 (332 KB/s) - hostapd-2.6.tar.gz’ へ保存完了 [1822341/1822341]

②hostapd(tar.gz)を解凍

$ tar xvf hostapd-2.6.tar.gz
hostapd-2.6/
hostapd-2.6/CONTRIBUTIONS
(以下略)

③hostapdのフォルダに入り、コンフィグファイルをコピー

こんな作法みたいです。

$ cd hostapd-2.6/hostapd/
$ cp defconfig .config

④クロスコンパイラの環境変数を設定

例によってこれを打ちます。

$ . /opt/poky/1.8.2/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi

⑤まずmakeしてみる(失敗覚悟)

エラー発生。ネットで調べたところHOSTAPをコメントアウトしてLIBNL3を有効化すると良いみたい。うちもLIBNL3なので真似してみる。

$ make
CC main.c
CC config_file.c
CC ../src/ap/hostapd.c
CC ../src/ap/wpa_auth_glue.c
CC ../src/ap/drv_callbacks.c
CC ../src/ap/ap_drv_ops.c
CC ../src/ap/utils.c
CC ../src/ap/authsrv.c
CC ../src/ap/ieee802_1x.c
CC ../src/ap/ap_config.c
CC ../src/ap/eap_user_db.c
CC ../src/ap/ieee802_11_auth.c
CC ../src/ap/sta_info.c
CC ../src/ap/wpa_auth.c
CC ../src/ap/tkip_countermeasures.c
CC ../src/ap/ap_mlme.c
CC ../src/ap/wpa_auth_ie.c
CC ../src/ap/preauth_auth.c
CC ../src/ap/pmksa_cache_auth.c
CC ../src/ap/ieee802_11_shared.c
CC ../src/ap/beacon.c
CC ../src/ap/bss_load.c
CC ../src/ap/neighbor_db.c
CC ../src/ap/rrm.c
CC ../src/drivers/drivers.c
CC ../src/utils/eloop.c
CC ../src/utils/common.c
CC ../src/utils/wpa_debug.c
CC ../src/utils/wpabuf.c
CC ../src/utils/os_unix.c
CC ../src/utils/ip_addr.c
CC ../src/common/ieee802_11_common.c
CC ../src/common/wpa_common.c
CC ../src/common/hw_features_common.c
CC ../src/eapol_auth/eapol_auth_sm.c
CC ../src/eapol_auth/eapol_auth_dump.c
CC ../src/radius/radius.c
CC ../src/radius/radius_client.c
CC ../src/radius/radius_das.c
CC ../src/ap/accounting.c
CC ../src/ap/vlan_init.c
CC ../src/ap/vlan_ifconfig.c
CC ../src/ap/vlan.c
CC ../src/common/ctrl_iface_common.c
CC ctrl_iface.c
CC ../src/ap/ctrl_iface_ap.c
CC ../src/ap/iapp.c
CC ../src/ap/peerkey_auth.c
CC ../src/drivers/driver_hostap.c
../src/drivers/driver_nl80211.c:17:31: fatal error: netlink/genl/genl.h: No such file or directory
#include <netlink/genl/genl.h>
^
compilation terminated.
make: *** [../src/drivers/driver_nl80211.o] エラー 1

⑥confgファイルの変更

こんな感じです。

$ diff -u defconfig .config
— defconfig 2016-10-03 03:51:11.000000000 +0900
+++ .config 2019-10-05 01:49:38.935154260 +0900
@@ -10,7 +10,7 @@
# to override previous values of the variables.

# Driver interface for Host AP driver
-CONFIG_DRIVER_HOSTAP=y
+#CONFIG_DRIVER_HOSTAP=y

# Driver interface for wired authenticator
#CONFIG_DRIVER_WIRED=y
@@ -31,7 +31,7 @@
#CONFIG_LIBNL20=y

# Use libnl 3.2 libraries (if this is selected, CONFIG_LIBNL20 is ignored)
-#CONFIG_LIBNL32=y
+CONFIG_LIBNL32=y

⑦再びmake

エラー発生。そろそろ真剣に考えてみます。エラーは../src/drivers/drivers.o:(.rodata+0x4): undefined reference to wpa_driver_hostap_ops' collect2: error: ld returned 1 exit statusです。wpa_driver_hostap_opsが未定義と言ってます。

$ make
CC ../src/drivers/driver_nl80211.c
CC ../src/drivers/driver_nl80211_capa.c
CC ../src/drivers/driver_nl80211_event.c
CC ../src/drivers/driver_nl80211_monitor.c
CC ../src/drivers/driver_nl80211_scan.c
CC ../src/drivers/netlink.c
CC ../src/drivers/linux_ioctl.c
CC ../src/drivers/rfkill.c
CC ../src/utils/radiotap.c
CC ../src/l2_packet/l2_packet_linux.c
CC ../src/eap_server/eap_server_md5.c
CC ../src/eap_server/eap_server_tls.c
CC ../src/eap_server/eap_server_peap.c
CC ../src/eap_common/eap_peap_common.c
CC ../src/eap_server/eap_server_ttls.c
CC ../src/eap_server/eap_server_mschapv2.c
CC ../src/eap_server/eap_server_gtc.c
CC eap_register.c
CC ../src/eap_server/eap_server.c
CC ../src/eap_common/eap_common.c
CC ../src/eap_server/eap_server_methods.c
CC ../src/eap_server/eap_server_identity.c
CC ../src/crypto/ms_funcs.c
CC ../src/eap_common/chap.c
CC ../src/eap_server/eap_server_tls_common.c
CC ../src/crypto/tls_openssl.c
CC ../src/crypto/tls_openssl_ocsp.c
CC ../src/crypto/crypto_openssl.c
CC ../src/crypto/aes-omac1.c
CC ../src/crypto/sha1-prf.c
CC ../src/crypto/sha1-tlsprf.c
CC ../src/crypto/sha256-prf.c
CC ../src/crypto/sha256-tlsprf.c
CC ../src/crypto/sha256-kdf.c
CC ../src/crypto/random.c
CC ../src/ap/wmm.c
CC ../src/ap/ap_list.c
CC ../src/ap/ieee802_11.c
CC ../src/ap/hw_features.c
CC ../src/ap/dfs.c
CC ../src/drivers/driver_common.c
../src/drivers/drivers.o:(.rodata+0x4): undefined reference to
wpa_driver_hostap_ops’
collect2: error: ld returned 1 exit status
make: *** [hostapd] エラー 1

⑧configを再び編集

どうもHOSTAPを無効化してはならない気がします。CONFIG_DRIVER_HOSTAP=yをコメントアウトしましたが、再び有効化しました(♯を取りました)。再びdiffを取るとこんな感じ。

$ diff -u defconfig .config
— defconfig 2016-10-03 03:51:11.000000000 +0900
+++ .config 2019-10-05 01:55:16.843157903 +0900
@@ -31,7 +31,7 @@
#CONFIG_LIBNL20=y

# Use libnl 3.2 libraries (if this is selected, CONFIG_LIBNL20 is ignored)
-#CONFIG_LIBNL32=y
+CONFIG_LIBNL32=y

# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)

⑨またmakeした

今度はパス。hostapdとhostapd_cliが出来ました。

$ make
LD hostapd
CC hostapd_cli.c
CC ../src/common/wpa_ctrl.c
CC ../src/common/cli.c
CC ../src/utils/edit_simple.c
LD hostapd_cli

⑩実機にhostapdとhostapd_cliをコピー

動きました。

# ./hostapd
hostapd v2.6
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2016, Jouni Malinen <j@w1.fi> and contributors

usage: hostapd [-hdBKtv] [-P <PID file>] [-e <entropy file>] \
[-g <global ctrl_iface>] [-G <group>]\
[-i <comma-separated list of interface names>]\
<configuration file(s)>

options:
-h show this usage
-d show more debug messages (-dd for even more)
-B run daemon in the background
-e entropy file
-g global control interface path
-G group for control interfaces
-P PID file
-K include key data in debug messages
-i list of interface names to use
-S start all the interfaces synchronously
-t include timestamps in some debug messages
-v show hostapd version

⑪hostapd.confを作る

ネット情報を参考に書いてみました。重要なのはSSIDとパスフレーズ。

ctrl_interface=~/hostapd
interface=wlan0
driver=nl80211
ssid=pavement1234
country_code=JP
hw_mode=g
channel=1
wpa=1
wpa_passphrase=123456780
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

⑫hostapdを起動してみる

とりあえずやってみる主義の私。案の定失敗。wlan0がUPされてないみたいです。

# ./hostapd hostapd.conf
Configuration file: hostapd.conf
Could not set interface wlan0 flags (UP): Operation not possible due to RF-kill
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
nl80211 driver initialization failed.
wlan0: interface state UNINITIALIZED->DISABLED
wlan0: AP-DISABLED
hostapd_free_hapd_data: Interface wlan0 wasn’t started

⑬作法に沿ってwlan0を有効化

いい感じです。

# rfkill unblock wifi
# ip link set wlan0 up
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready

 

⑭再びhostapdを起動

なんかnl80211でエラー出てますね。

# ./hostapd hostapd.conf
Configuration file: hostapd.conf
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
nl80211 driver initialization failed.
wlan0: interface state UNINITIALIZED->DISABLED
wlan0: AP-DISABLED
hostapd_free_hapd_data: Interface wlan0 wasn’t started

 

hostapdが起動しない時の確認事項を読むとこんなことが書いてあります。

理由:APとして使用したいインターフェースが設定と合っていない可能性が高いです。

確認するべき場所:

/etc/network/interfaces
/etc/default/isc-dhcp-server
hostapd.confファイル(自分で設定した場合はそのファイル)

⑮原因を探る

hostapd.conf 覚書を読んでみました。リファレンスとして良さげですが今私が欲しいのはhostpad.confのサンプルです。RaspberryPiで無線LANアクセスポイント – Greenleafを読んだところ、サンプル発見。

interface=wlan0
driver=nl80211
ssid=Pi3-AP
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40] macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=r@spberry
rsn_pairwise=CCMP

サンプルの一部を変えてhostapd.conf2と名付けました。

interface=wlan0
driver=nl80211
ssid=pavement1234
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40] macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=123456789
rsn_pairwise=CCMP

エラーが出ました。ieee80211nとht_capabを取り急ぎ削除。

# ./hostapd hostapd.conf2
Configuration file: hostapd.conf2
Line 6: unknown configuration item ‘ieee80211n’
Line 8: unknown configuration item ‘ht_capab’
2 errors found in configuration file ‘hostapd.conf2’
Failed to set up interface with hostapd.conf2
Failed to initialize interface

再びhostapd起動を試みますがエラー発生。

# ./hostapd hostapd.conf2
Configuration file: hostapd.conf2
iwlwifi 0000:01:00.0: L1 Disabled – LTR Disabled
iwlwifi 0000:01:00.0: Radio type=0x0-0x3-0x1
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
nl80211 driver initialization failed.
wlan0: interface state UNINITIALIZED->DISABLED
wlan0: AP-DISABLED
hostapd_free_hapd_data: Interface wlan0 wasn’t started

うーん…。
そもそもN-6300ってAPモード対応してるのでしょうか?
カーネルコンフィギュレーションのPrism APを有効にしないとダメなのか?(過去の経験則)

仕切り直します。

まず①。Intel N6300 wireless card doesn’t support AP modeを読みました。Wi-FiデバイスがAPモードをサポートしているかが重要みたいです。次にソフトウェアアクセスポイント – ArchWikiを読みました。iw listと打ち込むとAPモードに対応しているかわかるみたいです。

iw listと打ってみたところ、APモードは対応してませんでした…。というわけで、一旦仕切りなおし。先日購入した別メーカーの無線LANチップたちを試してみることにします。

Intel N-6300を組み込みボードに接続して動かせた

Intel N-6300を組み込みボードに接続して動かしてみました。STAとして動作OK。

N-6300はSTAモードしか対応していなかったので、APモードに対応しているモジュールを試してみます。

# ./iw list
Wiphy phy0
max # scan SSIDs: 20
max scan IEs length: 95 bytes
max # sched scan SSIDs: 0
max # match sets: 0
Retry short limit: 7
Retry long limit: 4
Coverage class: 0 (up to 0m)
Device supports RSN-IBSS.
Supported Ciphers:
* WEP40 (00-0f-ac:1)
* WEP104 (00-0f-ac:5)
* TKIP (00-0f-ac:2)
* CCMP-128 (00-0f-ac:4)
Available Antennas: TX 0 RX 0
Supported interface modes:
* IBSS
* managed
* monitor
Band 1:
Capabilities: 0x1072
HT20/HT40
Static SM Power Save
RX Greenfield
RX HT20 SGI
RX HT40 SGI
No RX STBC
Max AMSDU length: 3839 bytes
DSSS/CCK HT40
Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
Minimum RX AMPDU time spacing: 4 usec (0x05)
HT Max RX data rate: 450 Mbps
HT TX/RX MCS rate indexes supported: 0-23, 32
Bitrates (non-HT):
* 1.0 Mbps
* 2.0 Mbps (short preamble supported)
* 5.5 Mbps (short preamble supported)
* 11.0 Mbps (short preamble supported)
* 6.0 Mbps
* 9.0 Mbps
* 12.0 Mbps
* 18.0 Mbps
* 24.0 Mbps
* 36.0 Mbps
* 48.0 Mbps
* 54.0 Mbps
Frequencies:
* 2412 MHz (15.0 dBm)
* 2417 MHz (15.0 dBm)
* 2422 MHz (15.0 dBm)
* 2427 MHz (15.0 dBm)
* 2432 MHz [5] (15.0 dBm)
* 2437 MHz [6] (15.0 dBm)
* 2442 MHz [7] (15.0 dBm)
* 2447 MHz [8] (15.0 dBm)
* 2452 MHz [9] (15.0 dBm)
* 2457 MHz [10] (15.0 dBm)
* 2462 MHz [11] (15.0 dBm)
* 2467 MHz [12] (15.0 dBm) (no IR)
* 2472 MHz [13] (15.0 dBm) (no IR)
Band 2:
Capabilities: 0x1072
HT20/HT40
Static SM Power Save
RX Greenfield
RX HT20 SGI
RX HT40 SGI
No RX STBC
Max AMSDU length: 3839 bytes
DSSS/CCK HT40
Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
Minimum RX AMPDU time spacing: 4 usec (0x05)
HT Max RX data rate: 450 Mbps
HT TX/RX MCS rate indexes supported: 0-23, 32
Bitrates (non-HT):
* 6.0 Mbps
* 9.0 Mbps
* 12.0 Mbps
* 18.0 Mbps
* 24.0 Mbps
* 36.0 Mbps
* 48.0 Mbps
* 54.0 Mbps
Frequencies:
* 5180 MHz [36] (15.0 dBm) (no IR)
* 5200 MHz [40] (15.0 dBm) (no IR)
* 5220 MHz [44] (15.0 dBm) (no IR)
* 5240 MHz [48] (15.0 dBm) (no IR)
* 5260 MHz [52] (15.0 dBm) (no IR, radar detection)
* 5280 MHz [56] (15.0 dBm) (no IR, radar detection)
* 5300 MHz [60] (15.0 dBm) (no IR, radar detection)
* 5320 MHz [64] (15.0 dBm) (no IR, radar detection)
* 5500 MHz [100] (15.0 dBm) (no IR, radar detection)
* 5520 MHz [104] (15.0 dBm) (no IR, radar detection)
* 5540 MHz [108] (15.0 dBm) (no IR, radar detection)
* 5560 MHz [112] (15.0 dBm) (no IR, radar detection)
* 5580 MHz [116] (15.0 dBm) (no IR, radar detection)
* 5600 MHz [120] (15.0 dBm) (no IR, radar detection)
* 5620 MHz [124] (15.0 dBm) (no IR, radar detection)
* 5640 MHz [128] (15.0 dBm) (no IR, radar detection)
* 5660 MHz [132] (15.0 dBm) (no IR, radar detection)
* 5680 MHz [136] (15.0 dBm) (no IR, radar detection)
* 5700 MHz [140] (15.0 dBm) (no IR, radar detection)
* 5745 MHz [149] (15.0 dBm) (no IR)
* 5765 MHz [153] (15.0 dBm) (no IR)
* 5785 MHz [157] (15.0 dBm) (no IR)
* 5805 MHz [161] (15.0 dBm) (no IR)
* 5825 MHz [165] (15.0 dBm) (no IR)
Supported commands:
* new_interface
* set_interface
* new_key
* start_ap
* new_station
* set_bss
* authenticate
* associate
* deauthenticate
* disassociate
* join_ibss
* set_tx_bitrate_mask
* frame
* frame_wait_cancel
* set_wiphy_netns
* set_channel
* set_wds_peer
* probe_client
* set_noack_map
* register_beacons
* start_p2p_device
* set_mcast_rate
* set_qos_map
* connect
* disconnect
Supported TX frame types:
* IBSS: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* managed: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* AP/VLAN: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* mesh point: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-client: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-GO: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-device: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
Supported RX frame types:
* IBSS: 0x40 0xb0 0xc0 0xd0
* managed: 0x40 0xd0
* AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* AP/VLAN: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* mesh point: 0xb0 0xc0 0xd0
* P2P-client: 0x40 0xd0
* P2P-GO: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* P2P-device: 0x40 0xd0
software interface modes (can always be added):
* monitor
interface combinations are not supported
HT Capability overrides:
* MCS: ff ff ff ff ff ff ff ff ff ff
* maximum A-MSDU length
* supported channel width
* short GI for 40 MHz
* max A-MPDU length exponent
* min MPDU start spacing
Device supports TX status socket option.
Device supports HT-IBSS.
Device supports SAE with AUTHENTICATE command
Device supports scan flush.
Device supports per-vif TX power setting
Driver supports a userspace MPM

まとめ

今回、iwを使った無線LAN管理を試してみました。残念ながらIntel N6300はAPモードに対応してませんでしたが、STAとしてはPC、組み込みデバイス両方で動いたので良しとします。

 

ABOUT ME
ペイヴメント
ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。