Lines Matching refs:wpa_s
30 static void wpa_supplicant_mesh_deinit(struct wpa_supplicant *wpa_s) in wpa_supplicant_mesh_deinit() argument
32 wpa_supplicant_mesh_iface_deinit(wpa_s, wpa_s->ifmsh); in wpa_supplicant_mesh_deinit()
33 wpa_s->ifmsh = NULL; in wpa_supplicant_mesh_deinit()
34 wpa_s->current_ssid = NULL; in wpa_supplicant_mesh_deinit()
35 os_free(wpa_s->mesh_rsn); in wpa_supplicant_mesh_deinit()
36 wpa_s->mesh_rsn = NULL; in wpa_supplicant_mesh_deinit()
37 os_free(wpa_s->mesh_params); in wpa_supplicant_mesh_deinit()
38 wpa_s->mesh_params = NULL; in wpa_supplicant_mesh_deinit()
44 void wpa_supplicant_mesh_iface_deinit(struct wpa_supplicant *wpa_s, in wpa_supplicant_mesh_iface_deinit() argument
51 mesh_mpm_deinit(wpa_s, ifmsh); in wpa_supplicant_mesh_iface_deinit()
71 static struct mesh_conf * mesh_config_create(struct wpa_supplicant *wpa_s, in mesh_config_create() argument
92 if (wpa_s->drv_enc & WPA_DRIVER_CAPA_ENC_BIP) in mesh_config_create()
93 conf->ieee80211w = wpa_s->conf->pmf; in mesh_config_create()
104 wpa_msg(wpa_s, MSG_INFO, "mesh: Invalid pairwise cipher"); in mesh_config_create()
113 wpa_msg(wpa_s, MSG_INFO, "mesh: Invalid group cipher"); in mesh_config_create()
138 struct wpa_supplicant *wpa_s) in wpas_mesh_copy_groups() argument
143 for (num_groups = 0; wpa_s->conf->sae_groups[num_groups] > 0; in wpas_mesh_copy_groups()
147 groups_size = (num_groups + 1) * sizeof(wpa_s->conf->sae_groups[0]); in wpas_mesh_copy_groups()
150 os_memcpy(bss->conf->sae_groups, wpa_s->conf->sae_groups, in wpas_mesh_copy_groups()
155 static int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s) in wpas_mesh_init_rsn() argument
157 struct hostapd_iface *ifmsh = wpa_s->ifmsh; in wpas_mesh_init_rsn()
158 struct wpa_ssid *ssid = wpa_s->current_ssid; in wpas_mesh_init_rsn()
176 if (wpa_s->conf->sae_groups && wpa_s->conf->sae_groups[0] > 0) { in wpas_mesh_init_rsn()
177 wpas_mesh_copy_groups(bss, wpa_s); in wpas_mesh_init_rsn()
188 wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, ifmsh->mconf); in wpas_mesh_init_rsn()
189 return !wpa_s->mesh_rsn ? -1 : 0; in wpas_mesh_init_rsn()
193 static int wpas_mesh_complete(struct wpa_supplicant *wpa_s) in wpas_mesh_complete() argument
195 struct hostapd_iface *ifmsh = wpa_s->ifmsh; in wpas_mesh_complete()
196 struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params; in wpas_mesh_complete()
197 struct wpa_ssid *ssid = wpa_s->current_ssid; in wpas_mesh_complete()
207 wpas_mesh_init_rsn(wpa_s)) { in wpas_mesh_complete()
210 wpa_supplicant_mesh_deinit(wpa_s); in wpas_mesh_complete()
215 wpa_s->pairwise_cipher = wpa_s->mesh_rsn->pairwise_cipher; in wpas_mesh_complete()
216 wpa_s->group_cipher = wpa_s->mesh_rsn->group_cipher; in wpas_mesh_complete()
217 wpa_s->mgmt_group_cipher = wpa_s->mesh_rsn->mgmt_group_cipher; in wpas_mesh_complete()
226 wpa_msg(wpa_s, MSG_INFO, "joining mesh %s", in wpas_mesh_complete()
228 ret = wpa_drv_join_mesh(wpa_s, params); in wpas_mesh_complete()
230 wpa_msg(wpa_s, MSG_ERROR, "mesh join error=%d", ret); in wpas_mesh_complete()
233 wpa_drv_set_operstate(wpa_s, 1); in wpas_mesh_complete()
236 wpa_supplicant_set_state(wpa_s, WPA_COMPLETED); in wpas_mesh_complete()
242 static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s, in wpa_supplicant_mesh_init() argument
254 if (!wpa_s->conf->user_mpm) { in wpa_supplicant_mesh_init()
256 wpa_msg(wpa_s, MSG_WARNING, in wpa_supplicant_mesh_init()
261 wpa_s->ifmsh = ifmsh = hostapd_alloc_iface(); in wpa_supplicant_mesh_init()
265 ifmsh->drv_flags = wpa_s->drv_flags; in wpa_supplicant_mesh_init()
267 ifmsh->bss = os_calloc(wpa_s->ifmsh->num_bss, in wpa_supplicant_mesh_init()
276 ifmsh->bss[0]->msg_ctx = wpa_s; in wpa_supplicant_mesh_init()
277 os_memcpy(bss->own_addr, wpa_s->own_addr, ETH_ALEN); in wpa_supplicant_mesh_init()
278 bss->driver = wpa_s->driver; in wpa_supplicant_mesh_init()
279 bss->drv_priv = wpa_s->drv_priv; in wpa_supplicant_mesh_init()
288 wpa_s->assoc_freq = frequency; in wpa_supplicant_mesh_init()
289 wpa_s->current_ssid = ssid; in wpa_supplicant_mesh_init()
299 bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity; in wpa_supplicant_mesh_init()
301 if (ieee80211_is_dfs(ssid->frequency, wpa_s->hw.modes, in wpa_supplicant_mesh_init()
302 wpa_s->hw.num_modes) && wpa_s->conf->country[0]) { in wpa_supplicant_mesh_init()
305 conf->country[0] = wpa_s->conf->country[0]; in wpa_supplicant_mesh_init()
306 conf->country[1] = wpa_s->conf->country[1]; in wpa_supplicant_mesh_init()
313 ifmsh->bss[0]->max_plinks = wpa_s->conf->max_peer_links; in wpa_supplicant_mesh_init()
315 wpa_s->conf->dot11RSNASAERetransPeriod; in wpa_supplicant_mesh_init()
316 os_strlcpy(bss->conf->iface, wpa_s->ifname, sizeof(bss->conf->iface)); in wpa_supplicant_mesh_init()
318 mconf = mesh_config_create(wpa_s, ssid); in wpa_supplicant_mesh_init()
384 if (wpa_drv_init_mesh(wpa_s)) { in wpa_supplicant_mesh_init()
385 wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh in driver"); in wpa_supplicant_mesh_init()
395 wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf); in wpa_supplicant_mesh_init()
399 wpa_supplicant_mesh_deinit(wpa_s); in wpa_supplicant_mesh_init()
404 void wpa_mesh_notify_peer(struct wpa_supplicant *wpa_s, const u8 *addr, in wpa_mesh_notify_peer() argument
409 wpa_msg(wpa_s, MSG_INFO, in wpa_mesh_notify_peer()
413 wpa_msg(wpa_s, MSG_INFO, "Could not parse beacon from " MACSTR, in wpa_mesh_notify_peer()
417 wpa_mesh_new_mesh_peer(wpa_s, addr, &elems); in wpa_mesh_notify_peer()
421 void wpa_supplicant_mesh_add_scan_ie(struct wpa_supplicant *wpa_s, in wpa_supplicant_mesh_add_scan_ie() argument
434 int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s, in wpa_supplicant_join_mesh() argument
447 wpa_supplicant_mesh_deinit(wpa_s); in wpa_supplicant_join_mesh()
449 wpa_s->pairwise_cipher = WPA_CIPHER_NONE; in wpa_supplicant_join_mesh()
450 wpa_s->group_cipher = WPA_CIPHER_NONE; in wpa_supplicant_join_mesh()
451 wpa_s->mgmt_group_cipher = 0; in wpa_supplicant_join_mesh()
455 ibss_mesh_setup_freq(wpa_s, ssid, ¶ms->freq); in wpa_supplicant_join_mesh()
456 wpa_s->mesh_ht_enabled = !!params->freq.ht_enabled; in wpa_supplicant_join_mesh()
457 wpa_s->mesh_vht_enabled = !!params->freq.vht_enabled; in wpa_supplicant_join_mesh()
461 if (wpa_s->mesh_vht_enabled) { in wpa_supplicant_join_mesh()
484 else if (wpa_s->conf->beacon_int > 0) in wpa_supplicant_join_mesh()
485 params->beacon_int = wpa_s->conf->beacon_int; in wpa_supplicant_join_mesh()
488 else if (wpa_s->conf->dtim_period > 0) in wpa_supplicant_join_mesh()
489 params->dtim_period = wpa_s->conf->dtim_period; in wpa_supplicant_join_mesh()
490 params->conf.max_peer_links = wpa_s->conf->max_peer_links; in wpa_supplicant_join_mesh()
499 wpa_s->conf->user_mpm = 1; in wpa_supplicant_join_mesh()
502 if (wpa_s->conf->user_mpm) { in wpa_supplicant_join_mesh()
509 params->conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity; in wpa_supplicant_join_mesh()
511 os_free(wpa_s->mesh_params); in wpa_supplicant_join_mesh()
512 wpa_s->mesh_params = params; in wpa_supplicant_join_mesh()
513 if (wpa_supplicant_mesh_init(wpa_s, ssid, ¶ms->freq)) { in wpa_supplicant_join_mesh()
514 wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh"); in wpa_supplicant_join_mesh()
515 wpa_drv_leave_mesh(wpa_s); in wpa_supplicant_join_mesh()
520 ret = wpas_mesh_complete(wpa_s); in wpa_supplicant_join_mesh()
526 int wpa_supplicant_leave_mesh(struct wpa_supplicant *wpa_s) in wpa_supplicant_leave_mesh() argument
530 wpa_msg(wpa_s, MSG_INFO, "leaving mesh"); in wpa_supplicant_leave_mesh()
533 wpa_supplicant_mesh_deinit(wpa_s); in wpa_supplicant_leave_mesh()
535 ret = wpa_drv_leave_mesh(wpa_s); in wpa_supplicant_leave_mesh()
537 wpa_msg(wpa_s, MSG_ERROR, "mesh leave error=%d", ret); in wpa_supplicant_leave_mesh()
539 wpa_drv_set_operstate(wpa_s, 1); in wpa_supplicant_leave_mesh()
640 static int wpas_mesh_get_ifname(struct wpa_supplicant *wpa_s, char *ifname, in wpas_mesh_get_ifname() argument
643 char *ifname_ptr = wpa_s->ifname; in wpas_mesh_get_ifname()
647 wpa_s->mesh_if_idx); in wpas_mesh_get_ifname()
650 os_strlen(wpa_s->ifname) < IFNAMSIZ)) { in wpas_mesh_get_ifname()
652 res = os_snprintf(ifname, len, "mesh-%d", wpa_s->mesh_if_idx); in wpas_mesh_get_ifname()
656 wpa_s->mesh_if_idx++; in wpas_mesh_get_ifname()
661 int wpas_mesh_add_interface(struct wpa_supplicant *wpa_s, char *ifname, in wpas_mesh_add_interface() argument
668 if (ifname[0] == '\0' && wpas_mesh_get_ifname(wpa_s, ifname, len) < 0) in wpas_mesh_add_interface()
671 if (wpa_drv_if_add(wpa_s, WPA_IF_MESH, ifname, NULL, NULL, NULL, addr, in wpas_mesh_add_interface()
682 iface.driver = wpa_s->driver->name; in wpas_mesh_add_interface()
683 iface.driver_param = wpa_s->conf->driver_param; in wpas_mesh_add_interface()
684 iface.ctrl_interface = wpa_s->conf->ctrl_interface; in wpas_mesh_add_interface()
686 mesh_wpa_s = wpa_supplicant_add_iface(wpa_s->global, &iface, wpa_s); in wpas_mesh_add_interface()
690 wpa_drv_if_remove(wpa_s, WPA_IF_MESH, ifname); in wpas_mesh_add_interface()
698 int wpas_mesh_peer_remove(struct wpa_supplicant *wpa_s, const u8 *addr) in wpas_mesh_peer_remove() argument
700 return mesh_mpm_close_peer(wpa_s, addr); in wpas_mesh_peer_remove()
704 int wpas_mesh_peer_add(struct wpa_supplicant *wpa_s, const u8 *addr, in wpas_mesh_peer_add() argument
707 return mesh_mpm_connect_peer(wpa_s, addr, duration); in wpas_mesh_peer_add()