 167028b750
			
		
	
	167028b750
	
	
	
		
			
			The size of the ipkgs increase a bit (between 0.7% and 1.1%): old 2019-04-21 (2.8): 288264 wpad-basic_2019-04-21-63962824-1_mipsel_24kc.ipk 256188 wpad-mini_2019-04-21-63962824-1_mipsel_24kc.ipk 427475 wpad-openssl_2019-04-21-63962824-1_mipsel_24kc.ipk 423071 wpad-wolfssl_2019-04-21-63962824-1_mipsel_24kc.ipk new 2019-08-08 (2.9): 290217 wpad-basic_2019-08-08-ca8c2bd2-1_mipsel_24kc.ipk 258745 wpad-mini_2019-08-08-ca8c2bd2-1_mipsel_24kc.ipk 431732 wpad-openssl_2019-08-08-ca8c2bd2-1_mipsel_24kc.ipk 427641 wpad-wolfssl_2019-08-08-ca8c2bd2-1_mipsel_24kc.ipk Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
		
			
				
	
	
		
			125 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From c05ace7510ead96e72b97ce47b33f7b5865d6d36 Mon Sep 17 00:00:00 2001
 | |
| From: Peter Oh <peter.oh@bowerswilkins.com>
 | |
| Date: Mon, 27 Aug 2018 14:28:38 -0700
 | |
| Subject: [PATCH 1/7] 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 isn't suitable for DFS channels to use,
 | |
| since mesh join process should be paused until DFS CAC is
 | |
| done and resumed after it's done.
 | |
| The callback will be called by hostapd_setup_interface_complete_sync.
 | |
| There is possiblity that completing mesh init fails, so add error
 | |
| handle codes.
 | |
| 
 | |
| Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
 | |
| Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
 | |
| ---
 | |
|  src/ap/hostapd.c      | 11 ++++++++++-
 | |
|  wpa_supplicant/mesh.c | 13 +++++++------
 | |
|  2 files changed, 17 insertions(+), 7 deletions(-)
 | |
| 
 | |
| --- a/src/ap/hostapd.c
 | |
| +++ b/src/ap/hostapd.c
 | |
| @@ -423,6 +423,8 @@ static void hostapd_free_hapd_data(struc
 | |
|  #ifdef CONFIG_MESH
 | |
|  	wpabuf_free(hapd->mesh_pending_auth);
 | |
|  	hapd->mesh_pending_auth = NULL;
 | |
| +	/* handling setup failure is already done */
 | |
| +	hapd->setup_complete_cb = NULL;
 | |
|  #endif /* CONFIG_MESH */
 | |
|  
 | |
|  	hostapd_clean_rrm(hapd);
 | |
| @@ -2049,6 +2051,13 @@ dfs_offload:
 | |
|  	if (hapd->setup_complete_cb)
 | |
|  		hapd->setup_complete_cb(hapd->setup_complete_cb_ctx);
 | |
|  
 | |
| +#ifdef CONFIG_MESH
 | |
| +	if (delay_apply_cfg && !iface->mconf) {
 | |
| +		wpa_printf(MSG_ERROR, "Error while completing mesh init");
 | |
| +		goto fail;
 | |
| +	}
 | |
| +#endif /* CONFIG_MESH */
 | |
| +
 | |
|  	wpa_printf(MSG_DEBUG, "%s: Setup of interface done.",
 | |
|  		   iface->bss[0]->conf->iface);
 | |
|  	if (iface->interfaces && iface->interfaces->terminate_on_error > 0)
 | |
| @@ -2192,7 +2201,7 @@ int hostapd_setup_interface(struct hosta
 | |
|  	ret = setup_interface(iface);
 | |
|  	if (ret) {
 | |
|  		wpa_printf(MSG_ERROR, "%s: Unable to setup interface.",
 | |
| -			   iface->bss[0]->conf->iface);
 | |
| +			   iface->conf ? iface->conf->bss[0]->iface : "N/A");
 | |
|  		return -1;
 | |
|  	}
 | |
|  
 | |
| --- a/wpa_supplicant/mesh.c
 | |
| +++ b/wpa_supplicant/mesh.c
 | |
| @@ -190,8 +190,9 @@ static int wpas_mesh_init_rsn(struct wpa
 | |
|  }
 | |
|  
 | |
|  
 | |
| -static int wpas_mesh_complete(struct wpa_supplicant *wpa_s)
 | |
| +static void wpas_mesh_complete_cb(void *ctx)
 | |
|  {
 | |
| +	struct wpa_supplicant *wpa_s = ctx;
 | |
|  	struct hostapd_iface *ifmsh = wpa_s->ifmsh;
 | |
|  	struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params;
 | |
|  	struct wpa_ssid *ssid = wpa_s->current_ssid;
 | |
| @@ -200,7 +201,7 @@ static int wpas_mesh_complete(struct wpa
 | |
|  	if (!params || !ssid || !ifmsh) {
 | |
|  		wpa_printf(MSG_ERROR, "mesh: %s called without active mesh",
 | |
|  			   __func__);
 | |
| -		return -1;
 | |
| +		return;
 | |
|  	}
 | |
|  
 | |
|  	if (ifmsh->mconf->security != MESH_CONF_SEC_NONE &&
 | |
| @@ -209,7 +210,7 @@ static int wpas_mesh_complete(struct wpa
 | |
|  			   "mesh: RSN initialization failed - deinit mesh");
 | |
|  		wpa_supplicant_mesh_deinit(wpa_s);
 | |
|  		wpa_drv_leave_mesh(wpa_s);
 | |
| -		return -1;
 | |
| +		return;
 | |
|  	}
 | |
|  
 | |
|  	if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) {
 | |
| @@ -235,8 +236,6 @@ static int wpas_mesh_complete(struct wpa
 | |
|  
 | |
|  	if (!ret)
 | |
|  		wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
 | |
| -
 | |
| -	return ret;
 | |
|  }
 | |
|  
 | |
|  
 | |
| @@ -263,6 +262,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,
 | |
| @@ -280,6 +280,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) {
 | |
| @@ -521,7 +523,6 @@ int wpa_supplicant_join_mesh(struct wpa_
 | |
|  		goto out;
 | |
|  	}
 | |
|  
 | |
| -	ret = wpas_mesh_complete(wpa_s);
 | |
|  out:
 | |
|  	return ret;
 | |
|  }
 |