openwrtv3/package/network/services/hostapd/patches/004-mesh-use-setup-completion-callback-to-complete-mesh-.patch
Daniel Golle 78f1974bc5 hostapd: update packaging and patches
Clean up conflicts/provides/depends hell and add PROVIDES for
eapol-test variants while at it.
Update mesh-DFS patchset from Peter Oh to v5 (with local fixes) which
allows to drop two revert-patches for upstream commits which previously
were necessary to un-break mesh-DFS support.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2018-05-31 00:38:16 +02:00

73 lines
2.6 KiB
Diff

From bd05de484bfa61def530d717c7234381f6b33cf7 Mon Sep 17 00:00:00 2001
From: Peter Oh <peter.oh@bowerswilkins.com>
Date: Tue, 29 May 2018 14:39:08 -0700
Subject: [PATCH 04/18] mesh: use setup completion callback to complete mesh
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
@@ -217,6 +217,7 @@ static int wpa_supplicant_mesh_init(stru
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,
@@ -234,6 +235,8 @@ static int wpa_supplicant_mesh_init(stru
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) {
@@ -375,8 +378,9 @@ void wpa_supplicant_mesh_add_scan_ie(str
}
-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;
@@ -498,7 +502,6 @@ int wpa_supplicant_join_mesh(struct wpa_
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