3

Linux で wlan を管理するために、独自の C ライブラリを作成しています。私は wpa_cli インターフェイスに基づいていますが、理解できません。なぜ 2 つの wpa_ctrl 構造を使用するのですか?

static struct wpa_ctrl *ctrl_conn;
static struct wpa_ctrl *mon_conn;

ctrl_conn だけで開いてアタッチしても機能しますか?

4

1 に答える 1

6

wpa_cli対話型と対話型の 2 つの方法で動作します

プロンプトがある場合は、wpa_cli対話的に使用しており、その逆も同様です。

インタラクティブモードは次のとおりです。

$ wpa_cli -i wlan0
wpa_cli v2.1
Copyright (c) 2004-2014, Jouni Malinen <j@w1.fi> and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.

Interactive mode

> status
wpa_state=INACTIVE
address=98:fc:11:d1:89:68
uuid=0cb62eb3-776e-55d2-a4f9-983cdd3e48d2

そして非インタラクティブモードです:

$ wpa_cli -i wlan0 status
wpa_state=INACTIVE
address=98:fc:11:d1:89:68
uuid=0cb62eb3-776e-55d2-a4f9-983cdd3e48d2

インタラクティブモードを使用している場合は、と のwpa_cli両方ctrl_connを使用するようmon_connです。ctrl_connはコマンドの送信のみにmon_conn使用され、イベントの取得に使用されます (つまり、 を介して接続されるものですwpa_ctrl_attach())。

また、非対話モードを使用している場合は、イベントが返されないという理由wpa_cliだけで使用してください。ctrl_conn

イベントを使用する予定がある場合wpa_supplicant(そうしてくれることを願っています)、wpa_ctrl_request() msg_cb 引数に関するコメントで説明されているように、2 つの異なる接続を使用することをお勧めします。

/**
 * wpa_ctrl_request - Send a command to wpa_supplicant/hostapd
 * @ctrl: Control interface data from wpa_ctrl_open()
 * @cmd: Command; usually, ASCII text, e.g., "PING"
 * @cmd_len: Length of the cmd in bytes
 * @reply: Buffer for the response
 * @reply_len: Reply buffer length
 * @msg_cb: Callback function for unsolicited messages or %NULL if not used
 * Returns: 0 on success, -1 on error (send or receive failed), -2 on timeout
 *
 * This function is used to send commands to wpa_supplicant/hostapd. Received
 * response will be written to reply and reply_len is set to the actual length
 * of the reply. This function will block for up to two seconds while waiting
 * for the reply. If unsolicited messages are received, the blocking time may
 * be longer.
 *
 * msg_cb can be used to register a callback function that will be called for
 * unsolicited messages received while waiting for the command response. These
 * messages may be received if wpa_ctrl_request() is called at the same time as
 * wpa_supplicant/hostapd is sending such a message. This can happen only if
 * the program has used wpa_ctrl_attach() to register itself as a monitor for
 * event messages. Alternatively to msg_cb, programs can register two control
 * interface connections and use one of them for commands and the other one for
 * receiving event messages, in other words, call wpa_ctrl_attach() only for
 * the control interface connection that will be used for event messages.
 */
int wpa_ctrl_request(struct wpa_ctrl *ctrl, const char *cmd, size_t cmd_len,
             char *reply, size_t *reply_len,
             void (*msg_cb)(char *msg, size_t len));
于 2014-09-25T10:50:52.293 に答える