123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- From 89db76eeff6502dfa39b011962ec9d560ed4c2ee Mon Sep 17 00:00:00 2001
- From: Peter Oh <[email protected]>
- Date: Tue, 29 May 2018 14:39:06 -0700
- Subject: [PATCH 02/18] mesh: factor out rsn initialization
- RSN initialization can be used in different phases
- if mesh initialization and mesh join don't happen
- in sequence such as DFS CAC is done in between,
- hence factor it out to help convering the case.
- Signed-off-by: Peter Oh <[email protected]>
- ---
- wpa_supplicant/mesh.c | 84 +++++++++++++++++++++++++------------------
- wpa_supplicant/mesh.h | 1 +
- 2 files changed, 50 insertions(+), 35 deletions(-)
- --- a/wpa_supplicant/mesh.c
- +++ b/wpa_supplicant/mesh.c
- @@ -147,6 +147,53 @@ static void wpas_mesh_copy_groups(struct
- }
-
-
- +int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s)
- +{
- + struct hostapd_iface *ifmsh = wpa_s->ifmsh;
- + struct mesh_conf *mconf = wpa_s->ifmsh->mconf;
- + struct wpa_ssid *ssid = wpa_s->current_ssid;
- + struct hostapd_data *bss = ifmsh->bss[0];
- + static int default_groups[] = { 19, 20, 21, 25, 26, -1 };
- + const char *password;
- + size_t len;
- +
- + if (mconf->security != MESH_CONF_SEC_NONE) {
- + password = ssid->sae_password;
- + if (!password)
- + password = ssid->passphrase;
- + if (!password) {
- + wpa_printf(MSG_ERROR,
- + "mesh: Passphrase for SAE not configured");
- + return -1;
- + }
- +
- + bss->conf->wpa = ssid->proto;
- + bss->conf->wpa_key_mgmt = ssid->key_mgmt;
- +
- + if (wpa_s->conf->sae_groups &&
- + wpa_s->conf->sae_groups[0] > 0) {
- + wpas_mesh_copy_groups(bss, wpa_s);
- + } else {
- + bss->conf->sae_groups =
- + os_memdup(default_groups,
- + sizeof(default_groups));
- + if (!bss->conf->sae_groups)
- + return -1;
- + }
- +
- + len = os_strlen(password);
- + bss->conf->ssid.wpa_passphrase =
- + dup_binstr(password, len);
- +
- + wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, mconf);
- + if (!wpa_s->mesh_rsn)
- + return -1;
- + }
- +
- + return 0;
- +}
- +
- +
- static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
- struct wpa_ssid *ssid,
- struct hostapd_freq_params *freq)
- @@ -156,9 +203,6 @@ static int wpa_supplicant_mesh_init(stru
- struct hostapd_config *conf;
- struct mesh_conf *mconf;
- int basic_rates_erp[] = { 10, 20, 55, 60, 110, 120, 240, -1 };
- - static int default_groups[] = { 19, 20, 21, 25, 26, -1 };
- - const char *password;
- - size_t len;
- int rate_len;
- int frequency;
-
- @@ -292,38 +336,8 @@ static int wpa_supplicant_mesh_init(stru
- return -1;
- }
-
- - if (mconf->security != MESH_CONF_SEC_NONE) {
- - password = ssid->sae_password;
- - if (!password)
- - password = ssid->passphrase;
- - if (!password) {
- - wpa_printf(MSG_ERROR,
- - "mesh: Passphrase for SAE not configured");
- - goto out_free;
- - }
- -
- - bss->conf->wpa = ssid->proto;
- - bss->conf->wpa_key_mgmt = ssid->key_mgmt;
- -
- - if (wpa_s->conf->sae_groups &&
- - wpa_s->conf->sae_groups[0] > 0) {
- - wpas_mesh_copy_groups(bss, wpa_s);
- - } else {
- - bss->conf->sae_groups =
- - os_memdup(default_groups,
- - sizeof(default_groups));
- - if (!bss->conf->sae_groups)
- - goto out_free;
- - }
- -
- - len = os_strlen(password);
- - bss->conf->ssid.wpa_passphrase =
- - dup_binstr(password, len);
- -
- - wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, mconf);
- - if (!wpa_s->mesh_rsn)
- - goto out_free;
- - }
- + if (wpas_mesh_init_rsn(wpa_s))
- + goto out_free;
-
- wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf);
-
- --- a/wpa_supplicant/mesh.h
- +++ b/wpa_supplicant/mesh.h
- @@ -22,6 +22,7 @@ int wpas_mesh_peer_remove(struct wpa_sup
- int wpas_mesh_peer_add(struct wpa_supplicant *wpa_s, const u8 *addr,
- int duration);
- void wpas_join_mesh(struct wpa_supplicant *wpa_s);
- +int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s);
-
- #ifdef CONFIG_MESH
-
|