12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- From 32044a7bb26858bedaf147c77f49f5cef1133de3 Mon Sep 17 00:00:00 2001
- From: Peter Oh <[email protected]>
- Date: Tue, 17 Apr 2018 21:55:01 -0700
- Subject: [PATCH 04/16] 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 <[email protected]>
- ---
- 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,
- @@ -233,6 +234,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) {
- @@ -374,8 +377,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;
- @@ -497,7 +501,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
|