Skip to content

Commit 0ac0a8f

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 <hananarshad619@gmail.com>
1 parent 4f0f27c commit 0ac0a8f

File tree

3 files changed

+41
-22
lines changed

3 files changed

+41
-22
lines changed

modules/hostap/src/supp_api.c

Lines changed: 21 additions & 19 deletions
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
{
@@ -622,7 +621,7 @@ static int wpas_add_and_config_network(struct wpa_supplicant *wpa_s,
622621
goto out;
623622
}
624623

625-
ret = z_wpa_ctrl_add_network(&resp);
624+
ret = z_wpa_ctrl_add_network(wpa_s->ctrl_conn, &resp);
626625
if (ret) {
627626
wpa_printf(MSG_ERROR, "Failed to add network");
628627
goto out;
@@ -1313,7 +1312,7 @@ int supplicant_status(const struct device *dev, struct wifi_iface_status *status
13131312
status->channel = channel;
13141313

13151314
if (ssid_len == 0) {
1316-
int _res = z_wpa_ctrl_status(&cli_status);
1315+
int _res = z_wpa_ctrl_status(wpa_s->ctrl_conn, &cli_status);
13171316

13181317
if (_res < 0) {
13191318
ssid_len = 0;
@@ -1342,7 +1341,7 @@ int supplicant_status(const struct device *dev, struct wifi_iface_status *status
13421341

13431342
status->rssi = -WPA_INVALID_NOISE;
13441343
if (status->iface_mode == WIFI_MODE_INFRA) {
1345-
ret = z_wpa_ctrl_signal_poll(&signal_poll);
1344+
ret = z_wpa_ctrl_signal_poll(wpa_s->ctrl_conn, &signal_poll);
13461345
if (!ret) {
13471346
status->rssi = signal_poll.rssi;
13481347
status->current_phy_tx_rate = signal_poll.current_txrate;
@@ -1492,6 +1491,7 @@ int supplicant_11k_cfg(const struct device *dev, struct wifi_11k_params *params)
14921491
int supplicant_11k_neighbor_request(const struct device *dev, struct wifi_11k_params *params)
14931492
{
14941493
int ssid_len = strlen(params->ssid);
1494+
struct wpa_supplicant *wpa_s = get_wpa_s_handle(dev);
14951495

14961496
if (params != NULL && ssid_len > 0) {
14971497
if (ssid_len > WIFI_SSID_MAX_LEN) {
@@ -1758,6 +1758,7 @@ int supplicant_bss_ext_capab(const struct device *dev, int capab)
17581758
int supplicant_legacy_roam(const struct device *dev)
17591759
{
17601760
int ret = -1;
1761+
struct wpa_supplicant *wpa_s = get_wpa_s_handle(dev);
17611762

17621763
k_mutex_lock(&wpa_supplicant_mutex, K_FOREVER);
17631764
if (!wpa_cli_cmd_v("scan")) {
@@ -1866,7 +1867,7 @@ static int supplicant_wps_pin(const struct device *dev, struct wifi_wps_config_p
18661867
}
18671868

18681869
if (params->oper == WIFI_WPS_PIN_GET) {
1869-
if (zephyr_wpa_cli_cmd_resp(get_pin_cmd, params->pin)) {
1870+
if (zephyr_wpa_cli_cmd_resp(wpa_s->ctrl_conn, get_pin_cmd, params->pin)) {
18701871
goto out;
18711872
}
18721873
} else if (params->oper == WIFI_WPS_PIN_SET) {
@@ -2299,6 +2300,7 @@ int supplicant_dpp_dispatch(const struct device *dev, struct wifi_dpp_params *pa
22992300
{
23002301
int ret;
23012302
char *cmd = NULL;
2303+
struct wpa_supplicant *wpa_s = get_wpa_s_handle(dev);
23022304

23032305
if (params == NULL) {
23042306
return -EINVAL;
@@ -2317,7 +2319,7 @@ int supplicant_dpp_dispatch(const struct device *dev, struct wifi_dpp_params *pa
23172319
}
23182320

23192321
wpa_printf(MSG_DEBUG, "wpa_cli %s", cmd);
2320-
if (zephyr_wpa_cli_cmd_resp(cmd, params->resp)) {
2322+
if (zephyr_wpa_cli_cmd_resp(wpa_s->ctrl_conn, cmd, params->resp)) {
23212323
os_free(cmd);
23222324
return -ENOEXEC;
23232325
}

modules/hostap/src/supp_main.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ struct wpa_supplicant *zephyr_get_handle_by_ifname(const char *ifname);
5858
struct hapd_interfaces *zephyr_get_default_hapd_context(void);
5959
#endif
6060

61-
struct wpa_supplicant *zephyr_get_handle_by_ifname(const char *ifname);
62-
6361
struct wpa_supplicant_event_msg {
6462
#ifdef CONFIG_WIFI_NM_HOSTAPD_AP
6563
int hostapd;

modules/hostap/src/wpa_cli.c

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,17 @@
88
* @brief wpa_cli implementation for Zephyr OS
99
*/
1010

11+
#include <stdlib.h>
1112
#include <zephyr/kernel.h>
1213
#include <zephyr/shell/shell.h>
14+
#include <zephyr/net/net_if.h>
1315
#include <zephyr/init.h>
1416

17+
18+
#include "supp_main.h"
19+
20+
#include "common.h"
21+
#include "wpa_supplicant_i.h"
1522
#include "wpa_cli_zephyr.h"
1623
#ifdef CONFIG_WIFI_NM_HOSTAPD_AP
1724
#include "hostapd_cli_zephyr.h"
@@ -21,8 +28,20 @@ static int cmd_wpa_cli(const struct shell *sh,
2128
size_t argc,
2229
const char *argv[])
2330
{
31+
struct net_if *iface = net_if_get_first_wifi();
32+
char if_name[CONFIG_NET_INTERFACE_NAME_LEN + 1];
33+
struct wpa_supplicant *wpa_s = NULL;
34+
2435
ARG_UNUSED(sh);
2536

37+
if(iface == NULL) {
38+
shell_error(sh, "No Wifi interface found");
39+
return -ENOENT;
40+
}
41+
42+
net_if_get_name(iface, if_name, sizeof(if_name));
43+
wpa_s = zephyr_get_handle_by_ifname(if_name);
44+
2645
if (argc == 1) {
2746
shell_error(sh, "Missing argument");
2847
return -EINVAL;
@@ -32,7 +51,7 @@ static int cmd_wpa_cli(const struct shell *sh,
3251
argc++;
3352

3453
/* Remove wpa_cli from the argument list */
35-
return zephyr_wpa_ctrl_zephyr_cmd(argc - 1, &argv[1]);
54+
return zephyr_wpa_ctrl_zephyr_cmd(wpa_s->ctrl_conn, argc - 1, &argv[1]);
3655
}
3756

3857
#ifdef CONFIG_WIFI_NM_HOSTAPD_AP

0 commit comments

Comments
 (0)