Home | History | Annotate | Download | only in wpa_supplicant

Lines Matching defs:wpa_s

31 static void wpa_supplicant_mesh_deinit(struct wpa_supplicant *wpa_s,
34 wpa_supplicant_mesh_iface_deinit(wpa_s, wpa_s->ifmsh,
38 wpa_s->ifmsh = NULL;
39 wpa_s->current_ssid = NULL;
40 os_free(wpa_s->mesh_params);
41 wpa_s->mesh_params = NULL;
44 os_free(wpa_s->mesh_rsn);
45 wpa_s->mesh_rsn = NULL;
48 wpa_supplicant_leave_mesh(wpa_s, false);
52 void wpa_supplicant_mesh_iface_deinit(struct wpa_supplicant *wpa_s,
60 mesh_mpm_deinit(wpa_s, ifmsh);
82 static struct mesh_conf * mesh_config_create(struct wpa_supplicant *wpa_s,
102 if (wpa_s->drv_enc & WPA_DRIVER_CAPA_ENC_BIP)
103 conf->ieee80211w = wpa_s->conf->pmf;
113 wpa_msg(wpa_s, MSG_INFO, "mesh: Invalid pairwise cipher");
122 wpa_msg(wpa_s, MSG_INFO, "mesh: Invalid group cipher");
154 struct wpa_supplicant *wpa_s)
159 for (num_groups = 0; wpa_s->conf->sae_groups[num_groups] > 0;
163 groups_size = (num_groups + 1) * sizeof(wpa_s->conf->sae_groups[0]);
166 os_memcpy(bss->conf->sae_groups, wpa_s->conf->sae_groups,
171 static int wpas_mesh_init_rsn(struct wpa_supplicant *wpa_s)
173 struct hostapd_iface *ifmsh = wpa_s->ifmsh;
174 struct wpa_ssid *ssid = wpa_s->current_ssid;
192 if (wpa_s->conf->sae_groups && wpa_s->conf->sae_groups[0] > 0) {
193 wpas_mesh_copy_groups(bss, wpa_s);
204 wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, ifmsh->mconf);
205 return !wpa_s->mesh_rsn ? -1 : 0;
209 static int wpas_mesh_update_freq_params(struct wpa_supplicant *wpa_s)
211 struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params;
212 struct hostapd_iface *ifmsh = wpa_s->ifmsh;
236 wpa_supplicant_mesh_deinit(wpa_s, true);
244 static int wpas_mesh_complete(struct wpa_supplicant *wpa_s)
246 struct hostapd_iface *ifmsh = wpa_s->ifmsh;
247 struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params;
248 struct wpa_ssid *ssid = wpa_s->current_ssid;
262 wpa_s->assoc_freq = ifmsh->freq;
264 if (wpas_mesh_update_freq_params(wpa_s) < 0)
269 wpas_mesh_init_rsn(wpa_s)) {
272 wpa_supplicant_mesh_deinit(wpa_s, false);
277 wpa_s->pairwise_cipher = wpa_s->mesh_rsn->pairwise_cipher;
278 wpa_s->group_cipher = wpa_s->mesh_rsn->group_cipher;
279 wpa_s->mgmt_group_cipher = wpa_s->mesh_rsn->mgmt_group_cipher;
288 wpa_msg(wpa_s, MSG_INFO, "joining mesh %s",
290 ret = wpa_drv_join_mesh(wpa_s, params);
292 wpa_msg(wpa_s, MSG_ERROR, "mesh join error=%d", ret);
295 wpa_drv_set_operstate(wpa_s, 1);
298 wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
300 wpa_msg(wpa_s, MSG_INFO, MESH_GROUP_STARTED "ssid=\"%s\" id=%d",
303 wpas_notify_mesh_group_started(wpa_s, ssid);
312 struct wpa_supplicant *wpa_s = arg;
314 wpas_mesh_complete(wpa_s);
320 struct wpa_supplicant *wpa_s = ifmsh->owner;
323 ifmsh->mconf = mesh_config_create(wpa_s, wpa_s->current_ssid);
326 bss->msg_ctx = wpa_s;
327 os_memcpy(bss->own_addr, wpa_s->own_addr, ETH_ALEN);
328 bss->driver = wpa_s->driver;
329 bss->drv_priv = wpa_s->drv_priv;
333 bss->setup_complete_cb_ctx = wpa_s;
337 bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity;
339 if (wpa_drv_init_mesh(wpa_s)) {
340 wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh in driver");
356 struct wpa_supplicant *wpa_s = ifmsh->owner;
359 wpa_supplicant_mesh_deinit(wpa_s, false);
381 static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
393 if (!wpa_s->conf->user_mpm) {
395 wpa_msg(wpa_s, MSG_WARNING,
400 wpa_s->ifmsh = ifmsh = hostapd_alloc_iface();
404 ifmsh->owner = wpa_s;
405 ifmsh->drv_flags = wpa_s->drv_flags;
406 ifmsh->drv_flags2 = wpa_s->drv_flags2;
410 ifmsh->bss = os_calloc(wpa_s->ifmsh->num_bss,
419 ifmsh->bss[0]->msg_ctx = wpa_s;
420 os_memcpy(bss->own_addr, wpa_s->own_addr, ETH_ALEN);
421 bss->driver = wpa_s->driver;
422 bss->drv_priv = wpa_s->drv_priv;
426 bss->setup_complete_cb_ctx = wpa_s;
434 wpa_s->assoc_freq = frequency;
435 wpa_s->current_ssid = ssid;
476 bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity;
477 bss->conf->mesh_fwding = wpa_s->conf->mesh_fwding;
479 if (ieee80211_is_dfs(ssid->frequency, wpa_s->hw.modes,
480 wpa_s->hw.num_modes) && wpa_s->conf->country[0]) {
483 conf->country[0] = wpa_s->conf->country[0];
484 conf->country[1] = wpa_s->conf->country[1];
486 wpa_s->mesh_params->handle_dfs = true;
492 ifmsh->bss[0]->max_plinks = wpa_s->conf->max_peer_links;
494 wpa_s->conf->dot11RSNASAERetransPeriod;
495 os_strlcpy(bss->conf->iface, wpa_s->ifname, sizeof(bss->conf->iface));
497 mconf = mesh_config_create(wpa_s, ssid);
562 wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf);
564 if (wpa_drv_init_mesh(wpa_s)) {
565 wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh in driver");
577 wpa_supplicant_mesh_deinit(wpa_s, true);
582 void wpa_mesh_notify_peer(struct wpa_supplicant *wpa_s, const u8 *addr,
587 wpa_msg(wpa_s, MSG_INFO,
591 wpa_msg(wpa_s, MSG_INFO, "Could not parse beacon from " MACSTR,
595 wpa_mesh_new_mesh_peer(wpa_s
599 void wpa_supplicant_mesh_add_scan_ie(struct wpa_supplicant *wpa_s,
612 int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s,
625 wpa_supplicant_mesh_deinit(wpa_s, true);
627 wpa_s->pairwise_cipher = WPA_CIPHER_NONE;
628 wpa_s->group_cipher = WPA_CIPHER_NONE;
629 wpa_s->mgmt_group_cipher = 0;
633 ibss_mesh_setup_freq(wpa_s, ssid, &params->freq);
634 wpa_s->mesh_ht_enabled = !!params->freq.ht_enabled;
635 wpa_s->mesh_vht_enabled = !!params->freq.vht_enabled;
636 wpa_s->mesh_he_enabled = !!params->freq.he_enabled;
637 wpa_s->mesh_eht_enabled = !!params->freq.eht_enabled;
641 if (wpa_s->mesh_vht_enabled) {
664 if (wpa_s->mesh_he_enabled)
666 if (wpa_s->mesh_eht_enabled)
670 else if (wpa_s->conf->beacon_int > 0)
671 params->beacon_int = wpa_s->conf->beacon_int;
674 else if (wpa_s->conf->dtim_period > 0)
675 params->dtim_period = wpa_s->conf->dtim_period;
676 params->conf.max_peer_links = wpa_s->conf->max_peer_links;
685 wpa_s->conf->user_mpm = 1;
688 if (wpa_s->conf->user_mpm) {
695 params->conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity;
701 os_free(wpa_s->mesh_params);
702 wpa_s->mesh_params = params;
703 if (wpa_supplicant_mesh_init(wpa_s, ssid, &params->freq)) {
704 wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh");
705 wpa_supplicant_leave_mesh(wpa_s, true);
715 int wpa_supplicant_leave_mesh(struct wpa_supplicant *wpa_s, bool need_deinit)
719 wpa_msg(wpa_s, MSG_INFO, "leaving mesh");
723 wpa_supplicant_mesh_deinit(wpa_s, true);
725 ret = wpa_drv_leave_mesh(wpa_s);
727 wpa_msg(wpa_s, MSG_ERROR, "mesh leave error=%d", ret);
729 wpa_drv_set_operstate(wpa_s, 1);
830 static int wpas_mesh_get_ifname(struct wpa_supplicant *wpa_s, char *ifname,
833 char *ifname_ptr = wpa_s->ifname;
837 wpa_s->mesh_if_idx);
840 os_strlen(wpa_s->ifname) < IFNAMSIZ)) {
842 res = os_snprintf(ifname, len, "mesh-%d", wpa_s->mesh_if_idx);
846 wpa_s->mesh_if_idx++;
851 int wpas_mesh_add_interface(struct wpa_supplicant *wpa_s, char *ifname,
858 if (ifname[0] == '\0' && wpas_mesh_get_ifname(wpa_s, ifname, len) < 0)
861 if (wpa_drv_if_add(wpa_s, WPA_IF_MESH, ifname, NULL, NULL, NULL, addr,
872 iface.driver = wpa_s->driver->name;
873 iface.driver_param = wpa_s->conf->driver_param;
874 iface.ctrl_interface = wpa_s->conf->ctrl_interface;
876 mesh_wpa_s = wpa_supplicant_add_iface(wpa_s->global, &iface, wpa_s);
880 wpa_drv_if_remove(wpa_s, WPA_IF_MESH, ifname);
888 int wpas_mesh_peer_remove(struct wpa_supplicant *wpa_s, const u8 *addr)
890 return mesh_mpm_close_peer(wpa_s, addr);
894 int wpas_mesh_peer_add(struct wpa_supplicant *wpa_s, const u8 *addr,
897 return mesh_mpm_connect_peer(wpa_s, addr, duration);