diff options
Diffstat (limited to 'package/network/services/hostapd/patches/0104-mesh-use-setup-completion-callback-to-complete-mesh-.patch')
-rw-r--r-- | package/network/services/hostapd/patches/0104-mesh-use-setup-completion-callback-to-complete-mesh-.patch | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/package/network/services/hostapd/patches/0104-mesh-use-setup-completion-callback-to-complete-mesh-.patch b/package/network/services/hostapd/patches/0104-mesh-use-setup-completion-callback-to-complete-mesh-.patch new file mode 100644 index 0000000..8927d5c --- /dev/null +++ b/package/network/services/hostapd/patches/0104-mesh-use-setup-completion-callback-to-complete-mesh-.patch @@ -0,0 +1,73 @@ +From 8a4ebbb6bbbc1460c1d584d1a710bf1361797ffd Mon Sep 17 00:00:00 2001 +From: Peter Oh <peter.oh@bowerswilkins.com> +Date: Thu, 12 Apr 2018 02:49:01 -0700 +Subject: [PATCH 04/15] 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 +@@ -215,6 +215,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, +@@ -231,6 +232,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) { +@@ -372,8 +375,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; +@@ -495,7 +499,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 |