Network Management API
Network Management APIはネットワークリクエストの送信やネットワークイベントの通知の受信に使用されます。
このAPIを使用すると、ネットワークレイヤーのコードだけでなく、アプリケーションも、IPスタックの任意のレベルで定義されたネットワークルーチンを呼び出したり、関連するネットワークイベントの通知を受け取ったりすることができます。
プロシージャーリクエストは、対応するリクエストの登録ハンドラーを呼び出す1つのnet_mgmt()
APIを介して実行されます。
APIを有効にする
アプリケーションでNetwork Management APIを有効にするには、以下のKconfigsを有効にします。
CONFIG_NET_MGMT=y
CONFIG_NET_MGMT_EVENT=y
CONFIG_NET_MGMT_EVENT_INFO=y
CONFIG_NET_MGMT_EVENT_STACK_SIZE=4096
- CONFIG_NET_MGMT: Network Management APIを追加
- CONFIG_NET_MGMT_EVENT: ランタイムネットワークイベント通知のサポートを追加
- CONFIG_NET_MGMT_EVENT_INFO: イベントとともに情報を渡すためのサポートを追加
- CONFIG_NET_MGMT_EVENT_STACK_SIZE: すべてのイベントを処理できるようにスタックサイズを増やす
さらに、以下のヘッダーファイルをインクルードする必要があります。
#include <zephyr/net/wifi.h>
#include <zephyr/net/wifi_mgmt.h>
#include <zephyr/net/net_mgmt.h>
wifi.h
: Wi-Fi Management APIのヘッダーファイルwifi_mgmt.h
: Wi-Fi固有のNetwork Management APIのヘッダーファイルnet_mgmt.h
Network Management APIのヘッダーファイル
このコースでは、nRF Connect SDKの実験的機能であるNetwork Connection Managerを使用して、ネットワークインターフェースとIPイベントをリッスンし、インテーフェースが接続されているかどうかを確認します。
KconfigのCONFIG_NET_CONNECTION_MANAGERは、アプリケーションにコネクションマネージャーを追加して起動し、L4イベントconnected
とdisconnected
を発生させます。
CONFIG_NET_CONNECTION_MANAGER=y
Wi-Fiを有効にする
Network Management APIを使ってWi-Fiに接続するには、アプリケーションでWi-Fiを有効にする必要があります。
これは以下のKconfigsを有効にすることによって行われます。
CONFIG_WIFI=y
CONFIG_WIFI_NRF700X=y
CONFIG_WPA_SUPP=y
- CONFIG_WIFI: 一般的なWi-Fiドライバーを有効にする
- CONFIG_WIFI_NRF700X: NordicのWi-Fiドライバーを有効にする
- CONFIG_WPA_SUPP: WPA(Wi-Fi Protected Access)のサプリカントサポートを有効にし、主にWPAの認証フェーズ、ネットワークスキャン、キー交換、ローミングサポートの実装を担当する
Wi-Fiパラメータの設定
Wi-Fiに接続する際、パラメータは構造体wifi_connect_req_params
で渡され、以下のシグネイチャを持ちます。
- SSID: Wi=FiネットワークのSSID
- PSK: 通常はパスフレーズまたはパスワード
- SAE password(sae_password): SAEパスワード(WPA3を使用する場合)
- Band(band): 接続したいWi-Fiバンド
- Channel(channel): 使用するWi-Fiチャンネル
- Security: 使用するセキュリティタイプ(NONE, PSK, PSK_SHA256, SAW, WAPI, EAP, WEP, WPA_SPK)
- MFP: 管理フレーム保護オプション
- Timeout: 接続のタイムアウト秒
以下は、Wi-Fiパラメータの入力例です
static struct wifi_connect_req_params params = {
.ssid = CONFIG_SSID;
.ssid_length = strlen(params->ssid);
.psk = CONFIG_PASSWORD;
.psk_length = strlen(params->psk);
.channel = WIFI_CHANNEL_ANY;
.security = WIFI_SECURITY_TYPE_PSK;
.mfp = WIFI_MFP_OPTIONAL;
.timeout = SYS_FOREVER_MS;
}
Wi-FI接続リクエスト
Network Management APIはすべてnet_mgmt()
を使って呼び出されます。