Skip to content

Commit 4f8081a

Browse files
committed
modules: hostap: Update WPA supplicant to use per-VIF control channel
Update WPA supplicant functions to pass the control channel (socket) as a parameter instead of relying on a global socket. This change aligns with the PR 80 modifications in hostap repo and ensures that each Virtual Interface (VIF) uses its dedicated control channel for communication. Signed-off-by: Hanan Arshad <[email protected]>
1 parent 45be54e commit 4f8081a

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

modules/hostap/src/supp_api.c

+19-18
Original file line numberDiff line numberDiff line change
@@ -80,20 +80,19 @@ static void supp_shell_connect_status(struct k_work *work);
8080
static K_WORK_DELAYABLE_DEFINE(wpa_supp_status_work,
8181
supp_shell_connect_status);
8282

83-
#define wpa_cli_cmd_v(cmd, ...) ({ \
84-
bool status; \
85-
\
86-
if (zephyr_wpa_cli_cmd_v(cmd, ##__VA_ARGS__) < 0) { \
87-
wpa_printf(MSG_ERROR, \
88-
"Failed to execute wpa_cli command: %s", \
89-
cmd); \
90-
status = false; \
91-
} else { \
92-
status = true; \
93-
} \
94-
\
95-
status; \
96-
})
83+
#define wpa_cli_cmd_v(cmd, ...) \
84+
({ \
85+
bool status; \
86+
\
87+
if (zephyr_wpa_cli_cmd_v(wpa_s->ctrl_conn, cmd, ##__VA_ARGS__) < 0) { \
88+
wpa_printf(MSG_ERROR, "Failed to execute wpa_cli command: %s", cmd); \
89+
status = false; \
90+
} else { \
91+
status = true; \
92+
} \
93+
\
94+
status; \
95+
})
9796

9897
static struct wpa_supplicant *get_wpa_s_handle(const struct device *dev)
9998
{
@@ -620,7 +619,7 @@ static int wpas_add_and_config_network(struct wpa_supplicant *wpa_s,
620619
goto out;
621620
}
622621

623-
ret = z_wpa_ctrl_add_network(&resp);
622+
ret = z_wpa_ctrl_add_network(wpa_s->ctrl_conn, &resp);
624623
if (ret) {
625624
wpa_printf(MSG_ERROR, "Failed to add network");
626625
goto out;
@@ -1309,7 +1308,7 @@ int supplicant_status(const struct device *dev, struct wifi_iface_status *status
13091308
status->channel = channel;
13101309

13111310
if (ssid_len == 0) {
1312-
int _res = z_wpa_ctrl_status(&cli_status);
1311+
int _res = z_wpa_ctrl_status(wpa_s->ctrl_conn, &cli_status);
13131312

13141313
if (_res < 0) {
13151314
ssid_len = 0;
@@ -1338,7 +1337,7 @@ int supplicant_status(const struct device *dev, struct wifi_iface_status *status
13381337

13391338
status->rssi = -WPA_INVALID_NOISE;
13401339
if (status->iface_mode == WIFI_MODE_INFRA) {
1341-
ret = z_wpa_ctrl_signal_poll(&signal_poll);
1340+
ret = z_wpa_ctrl_signal_poll(wpa_s->ctrl_conn, &signal_poll);
13421341
if (!ret) {
13431342
status->rssi = signal_poll.rssi;
13441343
status->current_phy_tx_rate = signal_poll.current_txrate;
@@ -1488,6 +1487,7 @@ int supplicant_11k_cfg(const struct device *dev, struct wifi_11k_params *params)
14881487
int supplicant_11k_neighbor_request(const struct device *dev, struct wifi_11k_params *params)
14891488
{
14901489
int ssid_len = strlen(params->ssid);
1490+
struct wpa_supplicant *wpa_s = get_wpa_s_handle(dev);
14911491

14921492
if (params != NULL && ssid_len > 0) {
14931493
if (ssid_len > WIFI_SSID_MAX_LEN) {
@@ -1754,6 +1754,7 @@ int supplicant_bss_ext_capab(const struct device *dev, int capab)
17541754
int supplicant_legacy_roam(const struct device *dev)
17551755
{
17561756
int ret = -1;
1757+
struct wpa_supplicant *wpa_s = get_wpa_s_handle(dev);
17571758

17581759
k_mutex_lock(&wpa_supplicant_mutex, K_FOREVER);
17591760
if (!wpa_cli_cmd_v("scan")) {
@@ -1862,7 +1863,7 @@ static int supplicant_wps_pin(const struct device *dev, struct wifi_wps_config_p
18621863
}
18631864

18641865
if (params->oper == WIFI_WPS_PIN_GET) {
1865-
if (zephyr_wpa_cli_cmd_resp(get_pin_cmd, params->pin)) {
1866+
if (zephyr_wpa_cli_cmd_resp(wpa_s->ctrl_conn, get_pin_cmd, params->pin)) {
18661867
goto out;
18671868
}
18681869
} else if (params->oper == WIFI_WPS_PIN_SET) {

0 commit comments

Comments
 (0)