2018-04-28 19:12:19 +00:00
|
|
|
From 32044a7bb26858bedaf147c77f49f5cef1133de3 Mon Sep 17 00:00:00 2001
|
2018-04-12 11:07:22 +00:00
|
|
|
From: Peter Oh <peter.oh@bowerswilkins.com>
|
2018-04-28 19:12:19 +00:00
|
|
|
Date: Tue, 17 Apr 2018 21:55:01 -0700
|
|
|
|
Subject: [PATCH 04/16] mesh: use setup completion callback to complete mesh
|
2018-04-12 11:07:22 +00:00
|
|
|
join
|
|
|
|
|
|
|
|
mesh join function is the last function to be called during
|
|
|
|
mesh join process, but it's been called a bit earlier than
|
|
|
|
it's supposed to be, so that some mesh parameter values
|
|
|
|
such as VHT capabilities not applied correct when mesh join
|
|
|
|
is in process. Moreover current design of mesh join that is called
|
|
|
|
directly after mesh initialization is not suitable for DFS channels
|
|
|
|
to use, since mesh join process should be paused until DFS CAC is
|
|
|
|
done and resumed once it's done.
|
|
|
|
Using setup completion callback is how AP mode is using for DFS channels
|
|
|
|
and mesh can use the same way.
|
|
|
|
The callback will be called by hostapd_setup_interface_complete_sync.
|
|
|
|
|
|
|
|
Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
|
|
|
|
---
|
|
|
|
wpa_supplicant/mesh.c | 7 +++++--
|
|
|
|
wpa_supplicant/mesh.h | 2 +-
|
|
|
|
2 files changed, 6 insertions(+), 3 deletions(-)
|
|
|
|
|
|
|
|
--- a/wpa_supplicant/mesh.c
|
|
|
|
+++ b/wpa_supplicant/mesh.c
|
2018-04-28 19:12:19 +00:00
|
|
|
@@ -217,6 +217,7 @@ static int wpa_supplicant_mesh_init(stru
|
2018-04-12 11:07:22 +00:00
|
|
|
if (!ifmsh)
|
|
|
|
return -ENOMEM;
|
|
|
|
|
|
|
|
+ ifmsh->owner = wpa_s;
|
|
|
|
ifmsh->drv_flags = wpa_s->drv_flags;
|
|
|
|
ifmsh->num_bss = 1;
|
|
|
|
ifmsh->bss = os_calloc(wpa_s->ifmsh->num_bss,
|
2018-04-28 19:12:19 +00:00
|
|
|
@@ -233,6 +234,8 @@ static int wpa_supplicant_mesh_init(stru
|
2018-04-12 11:07:22 +00:00
|
|
|
bss->drv_priv = wpa_s->drv_priv;
|
|
|
|
bss->iface = ifmsh;
|
|
|
|
bss->mesh_sta_free_cb = mesh_mpm_free_sta;
|
|
|
|
+ bss->setup_complete_cb = wpas_mesh_complete_cb;
|
|
|
|
+ bss->setup_complete_cb_ctx = wpa_s;
|
|
|
|
frequency = ssid->frequency;
|
|
|
|
if (frequency != freq->freq &&
|
|
|
|
frequency == freq->freq + freq->sec_channel_offset * 20) {
|
2018-04-28 19:12:19 +00:00
|
|
|
@@ -374,8 +377,9 @@ void wpa_supplicant_mesh_add_scan_ie(str
|
2018-04-12 11:07:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
-void wpas_join_mesh(struct wpa_supplicant *wpa_s)
|
|
|
|
+void wpas_mesh_complete_cb(void *ctx)
|
|
|
|
{
|
|
|
|
+ struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)ctx;
|
|
|
|
struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params;
|
|
|
|
struct wpa_ssid *ssid = wpa_s->current_ssid;
|
|
|
|
int ret = 0;
|
2018-04-28 19:12:19 +00:00
|
|
|
@@ -497,7 +501,6 @@ int wpa_supplicant_join_mesh(struct wpa_
|
2018-04-12 11:07:22 +00:00
|
|
|
goto out;
|
|
|
|
}
|
|
|
|
|
|
|
|
- wpas_join_mesh(wpa_s);
|
|
|
|
out:
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
--- a/wpa_supplicant/mesh.h
|
|
|
|
+++ b/wpa_supplicant/mesh.h
|
|
|
|
@@ -21,7 +21,7 @@ int wpas_mesh_add_interface(struct wpa_s
|
|
|
|
int wpas_mesh_peer_remove(struct wpa_supplicant *wpa_s, const u8 *addr);
|
|
|
|
int wpas_mesh_peer_add(struct wpa_supplicant *wpa_s, const u8 *addr,
|
|
|
|
int duration);
|
|
|
|
-void wpas_join_mesh(struct wpa_supplicant *wpa_s);
|
|
|
|
+void wpas_mesh_complete_cb(void *ctx);
|
|
|
|
int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s);
|
|
|
|
|
|
|
|
#ifdef CONFIG_MESH
|