| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | 
							- From bd05de484bfa61def530d717c7234381f6b33cf7 Mon Sep 17 00:00:00 2001
 
- From: Peter Oh <[email protected]>
 
- 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 <[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,
 
- @@ -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
 
 
  |