前回、iwコマンドを使ってN-6300を無線LAN子機(STA)にして自宅の無線LAN親機(AP)に接続した。今回はN-6300を無線LAN親機(AP)にしてみる。

【関連記事】
【組込ボードで無線LAN】②(無線LANカードN-6300を組込ボードに接続するには?)
【組込ボードで無線LAN】⑧(iwのビルド:後編-1)

  • N-6300を無線LAN親機(AP)として動作させてみる
hostapd を用いた無線 LAN アクセスポイントの構築を読んだ。hostapdというソフトウェア無線LAN親機(AP)が必要になるみたい。BD-SABRE-LITEでhostapdと打ち込んでみたが、インストールされてなかったのでソースからビルドしてみる。
# hostapd
-sh: hostapd: not found
①wgetでダウンロード
まずはQiitaの記事と同じように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してみる(失敗覚悟)
エラー発生。Qiitaをもう1度読んでみる。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した
今度はパス。hostapdhostapd_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
⑩実機にhostapdhostapd_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を作る
Qiitaを参考に書いてみた。重要なのは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、有効にしないとダメ?

仕切り直ししよう。

続く

IMG_20191005_081509

IMG_20191005_082414

スポンサードリンク