Skip to content

Commit dbae4bd

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 530fa15 commit dbae4bd

File tree

1 file changed

+21
-19
lines changed

1 file changed

+21
-19
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
}

0 commit comments

Comments
 (0)