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()
42 void wpa_supplicant_mesh_iface_deinit(struct wpa_supplicant *wpa_s, in wpa_supplicant_mesh_iface_deinit() argument
49 mesh_mpm_deinit(wpa_s, ifmsh); in wpa_supplicant_mesh_iface_deinit()
69 static struct mesh_conf * mesh_config_create(struct wpa_supplicant *wpa_s, in mesh_config_create() argument
89 if (wpa_s->drv_enc & WPA_DRIVER_CAPA_ENC_BIP) in mesh_config_create()
90 conf->ieee80211w = wpa_s->conf->pmf; in mesh_config_create()
97 wpa_msg(wpa_s, MSG_INFO, "mesh: Invalid pairwise cipher"); in mesh_config_create()
106 wpa_msg(wpa_s, MSG_INFO, "mesh: Invalid group cipher"); in mesh_config_create()
131 struct wpa_supplicant *wpa_s) in wpas_mesh_copy_groups() argument
136 for (num_groups = 0; wpa_s->conf->sae_groups[num_groups] > 0; in wpas_mesh_copy_groups()
140 groups_size = (num_groups + 1) * sizeof(wpa_s->conf->sae_groups[0]); in wpas_mesh_copy_groups()
143 os_memcpy(bss->conf->sae_groups, wpa_s->conf->sae_groups, in wpas_mesh_copy_groups()
148 static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s, in wpa_supplicant_mesh_init() argument
162 if (!wpa_s->conf->user_mpm) { in wpa_supplicant_mesh_init()
164 wpa_msg(wpa_s, MSG_WARNING, in wpa_supplicant_mesh_init()
169 wpa_s->ifmsh = ifmsh = os_zalloc(sizeof(*wpa_s->ifmsh)); in wpa_supplicant_mesh_init()
173 ifmsh->drv_flags = wpa_s->drv_flags; in wpa_supplicant_mesh_init()
175 ifmsh->bss = os_calloc(wpa_s->ifmsh->num_bss, in wpa_supplicant_mesh_init()
184 os_memcpy(bss->own_addr, wpa_s->own_addr, ETH_ALEN); in wpa_supplicant_mesh_init()
185 bss->driver = wpa_s->driver; in wpa_supplicant_mesh_init()
186 bss->drv_priv = wpa_s->drv_priv; in wpa_supplicant_mesh_init()
195 wpa_s->assoc_freq = frequency; in wpa_supplicant_mesh_init()
196 wpa_s->current_ssid = ssid; in wpa_supplicant_mesh_init()
206 bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity; in wpa_supplicant_mesh_init()
210 ifmsh->bss[0]->max_plinks = wpa_s->conf->max_peer_links; in wpa_supplicant_mesh_init()
212 wpa_s->conf->dot11RSNASAERetransPeriod; in wpa_supplicant_mesh_init()
213 os_strlcpy(bss->conf->iface, wpa_s->ifname, sizeof(bss->conf->iface)); in wpa_supplicant_mesh_init()
215 mconf = mesh_config_create(wpa_s, ssid); in wpa_supplicant_mesh_init()
287 if (wpa_drv_init_mesh(wpa_s)) { in wpa_supplicant_mesh_init()
288 wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh in driver"); in wpa_supplicant_mesh_init()
302 if (wpa_s->conf->sae_groups && in wpa_supplicant_mesh_init()
303 wpa_s->conf->sae_groups[0] > 0) { in wpa_supplicant_mesh_init()
304 wpas_mesh_copy_groups(bss, wpa_s); in wpa_supplicant_mesh_init()
318 wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, mconf); in wpa_supplicant_mesh_init()
319 if (!wpa_s->mesh_rsn) in wpa_supplicant_mesh_init()
323 wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf); in wpa_supplicant_mesh_init()
327 wpa_supplicant_mesh_deinit(wpa_s); in wpa_supplicant_mesh_init()
332 void wpa_mesh_notify_peer(struct wpa_supplicant *wpa_s, const u8 *addr, in wpa_mesh_notify_peer() argument
337 wpa_msg(wpa_s, MSG_INFO, in wpa_mesh_notify_peer()
341 wpa_msg(wpa_s, MSG_INFO, "Could not parse beacon from " MACSTR, in wpa_mesh_notify_peer()
345 wpa_mesh_new_mesh_peer(wpa_s, addr, &elems); in wpa_mesh_notify_peer()
349 void wpa_supplicant_mesh_add_scan_ie(struct wpa_supplicant *wpa_s, in wpa_supplicant_mesh_add_scan_ie() argument
362 int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s, in wpa_supplicant_join_mesh() argument
373 wpa_supplicant_mesh_deinit(wpa_s); in wpa_supplicant_join_mesh()
375 wpa_s->pairwise_cipher = WPA_CIPHER_NONE; in wpa_supplicant_join_mesh()
376 wpa_s->group_cipher = WPA_CIPHER_NONE; in wpa_supplicant_join_mesh()
377 wpa_s->mgmt_group_cipher = 0; in wpa_supplicant_join_mesh()
382 ibss_mesh_setup_freq(wpa_s, ssid, &params.freq); in wpa_supplicant_join_mesh()
383 wpa_s->mesh_ht_enabled = !!params.freq.ht_enabled; in wpa_supplicant_join_mesh()
384 wpa_s->mesh_vht_enabled = !!params.freq.vht_enabled; in wpa_supplicant_join_mesh()
387 if (wpa_s->mesh_vht_enabled) { in wpa_supplicant_join_mesh()
409 else if (wpa_s->conf->beacon_int > 0) in wpa_supplicant_join_mesh()
410 params.beacon_int = wpa_s->conf->beacon_int; in wpa_supplicant_join_mesh()
413 else if (wpa_s->conf->dtim_period > 0) in wpa_supplicant_join_mesh()
414 params.dtim_period = wpa_s->conf->dtim_period; in wpa_supplicant_join_mesh()
415 params.conf.max_peer_links = wpa_s->conf->max_peer_links; in wpa_supplicant_join_mesh()
420 wpa_s->conf->user_mpm = 1; in wpa_supplicant_join_mesh()
423 if (wpa_s->conf->user_mpm) { in wpa_supplicant_join_mesh()
430 params.conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity; in wpa_supplicant_join_mesh()
432 if (wpa_supplicant_mesh_init(wpa_s, ssid, &params.freq)) { in wpa_supplicant_join_mesh()
433 wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh"); in wpa_supplicant_join_mesh()
434 wpa_drv_leave_mesh(wpa_s); in wpa_supplicant_join_mesh()
440 wpa_s->pairwise_cipher = wpa_s->mesh_rsn->pairwise_cipher; in wpa_supplicant_join_mesh()
441 wpa_s->group_cipher = wpa_s->mesh_rsn->group_cipher; in wpa_supplicant_join_mesh()
442 wpa_s->mgmt_group_cipher = wpa_s->mesh_rsn->mgmt_group_cipher; in wpa_supplicant_join_mesh()
445 if (wpa_s->ifmsh) { in wpa_supplicant_join_mesh()
446 params.ies = wpa_s->ifmsh->mconf->rsn_ie; in wpa_supplicant_join_mesh()
447 params.ie_len = wpa_s->ifmsh->mconf->rsn_ie_len; in wpa_supplicant_join_mesh()
448 params.basic_rates = wpa_s->ifmsh->basic_rates; in wpa_supplicant_join_mesh()
450 params.conf.ht_opmode = wpa_s->ifmsh->bss[0]->iface->ht_op_mode; in wpa_supplicant_join_mesh()
453 wpa_msg(wpa_s, MSG_INFO, "joining mesh %s", in wpa_supplicant_join_mesh()
455 ret = wpa_drv_join_mesh(wpa_s, &params); in wpa_supplicant_join_mesh()
457 wpa_msg(wpa_s, MSG_ERROR, "mesh join error=%d", ret); in wpa_supplicant_join_mesh()
460 wpa_drv_set_operstate(wpa_s, 1); in wpa_supplicant_join_mesh()
463 wpa_supplicant_set_state(wpa_s, WPA_COMPLETED); in wpa_supplicant_join_mesh()
470 int wpa_supplicant_leave_mesh(struct wpa_supplicant *wpa_s) in wpa_supplicant_leave_mesh() argument
474 wpa_msg(wpa_s, MSG_INFO, "leaving mesh"); in wpa_supplicant_leave_mesh()
477 wpa_supplicant_mesh_deinit(wpa_s); in wpa_supplicant_leave_mesh()
479 ret = wpa_drv_leave_mesh(wpa_s); in wpa_supplicant_leave_mesh()
481 wpa_msg(wpa_s, MSG_ERROR, "mesh leave error=%d", ret); in wpa_supplicant_leave_mesh()
483 wpa_drv_set_operstate(wpa_s, 1); in wpa_supplicant_leave_mesh()
584 static int wpas_mesh_get_ifname(struct wpa_supplicant *wpa_s, char *ifname, in wpas_mesh_get_ifname() argument
587 char *ifname_ptr = wpa_s->ifname; in wpas_mesh_get_ifname()
591 wpa_s->mesh_if_idx); in wpas_mesh_get_ifname()
594 os_strlen(wpa_s->ifname) < IFNAMSIZ)) { in wpas_mesh_get_ifname()
596 res = os_snprintf(ifname, len, "mesh-%d", wpa_s->mesh_if_idx); in wpas_mesh_get_ifname()
600 wpa_s->mesh_if_idx++; in wpas_mesh_get_ifname()
605 int wpas_mesh_add_interface(struct wpa_supplicant *wpa_s, char *ifname, in wpas_mesh_add_interface() argument
612 if (ifname[0] == '\0' && wpas_mesh_get_ifname(wpa_s, ifname, len) < 0) in wpas_mesh_add_interface()
615 if (wpa_drv_if_add(wpa_s, WPA_IF_MESH, ifname, NULL, NULL, NULL, addr, in wpas_mesh_add_interface()
626 iface.driver = wpa_s->driver->name; in wpas_mesh_add_interface()
627 iface.driver_param = wpa_s->conf->driver_param; in wpas_mesh_add_interface()
628 iface.ctrl_interface = wpa_s->conf->ctrl_interface; in wpas_mesh_add_interface()
630 mesh_wpa_s = wpa_supplicant_add_iface(wpa_s->global, &iface, wpa_s); in wpas_mesh_add_interface()
634 wpa_drv_if_remove(wpa_s, WPA_IF_MESH, ifname); in wpas_mesh_add_interface()
642 int wpas_mesh_peer_remove(struct wpa_supplicant *wpa_s, const u8 *addr) in wpas_mesh_peer_remove() argument
644 return mesh_mpm_close_peer(wpa_s, addr); in wpas_mesh_peer_remove()
648 int wpas_mesh_peer_add(struct wpa_supplicant *wpa_s, const u8 *addr, in wpas_mesh_peer_add() argument
651 return mesh_mpm_connect_peer(wpa_s, addr, duration); in wpas_mesh_peer_add()