Lines Matching +full:mic +full:- +full:pos

3  * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi>
9 * When used with WE-18 or newer, this interface can be used as-is with number
49 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_set_auth_param()
53 if (ioctl(drv->ioctl_sock, SIOCSIWAUTH, &iwr) < 0) { in wpa_driver_wext_set_auth_param()
59 ret = errno == EOPNOTSUPP ? -2 : -1; in wpa_driver_wext_set_auth_param()
67 * wpa_driver_wext_get_bssid - Get BSSID, SIOCGIWAP
70 * Returns: 0 on success, -1 on failure
79 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_get_bssid()
81 if (ioctl(drv->ioctl_sock, SIOCGIWAP, &iwr) < 0) { in wpa_driver_wext_get_bssid()
83 ret = -1; in wpa_driver_wext_get_bssid()
92 * wpa_driver_wext_set_bssid - Set BSSID, SIOCSIWAP
95 * Returns: 0 on success, -1 on failure
104 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_set_bssid()
111 if (ioctl(drv->ioctl_sock, SIOCSIWAP, &iwr) < 0) { in wpa_driver_wext_set_bssid()
113 ret = -1; in wpa_driver_wext_set_bssid()
121 * wpa_driver_wext_get_ssid - Get SSID, SIOCGIWESSID
124 * Returns: SSID length on success, -1 on failure
133 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_get_ssid()
137 if (ioctl(drv->ioctl_sock, SIOCGIWESSID, &iwr) < 0) { in wpa_driver_wext_get_ssid()
140 ret = -1; in wpa_driver_wext_get_ssid()
146 * remove it here before further processing. WE-21 changes this in wpa_driver_wext_get_ssid()
149 if (ret > 0 && ssid[ret - 1] == '\0' && in wpa_driver_wext_get_ssid()
150 drv->we_version_compiled < 21) in wpa_driver_wext_get_ssid()
151 ret--; in wpa_driver_wext_get_ssid()
159 * wpa_driver_wext_set_ssid - Set SSID, SIOCSIWESSID
163 * Returns: 0 on success, -1 on failure
173 return -1; in wpa_driver_wext_set_ssid()
176 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_set_ssid()
182 if (drv->we_version_compiled < 21) { in wpa_driver_wext_set_ssid()
188 * length is not incremented here. WE-21 changes this to in wpa_driver_wext_set_ssid()
196 if (ioctl(drv->ioctl_sock, SIOCSIWESSID, &iwr) < 0) { in wpa_driver_wext_set_ssid()
199 ret = -1; in wpa_driver_wext_set_ssid()
207 * wpa_driver_wext_set_freq - Set frequency/channel, SIOCSIWFREQ
210 * Returns: 0 on success, -1 on failure
219 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_set_freq()
223 if (ioctl(drv->ioctl_sock, SIOCSIWFREQ, &iwr) < 0) { in wpa_driver_wext_set_freq()
226 ret = -1; in wpa_driver_wext_set_freq()
243 if (os_strncmp(custom, "MLME-MICHAELMICFAILURE.indication", 33) == 0) { in wpa_driver_wext_event_wireless_custom()
300 const struct iw_michaelmicfailure *mic; in wpa_driver_wext_event_wireless_michaelmicfailure() local
303 if (len < sizeof(*mic)) in wpa_driver_wext_event_wireless_michaelmicfailure()
304 return -1; in wpa_driver_wext_event_wireless_michaelmicfailure()
306 mic = (const struct iw_michaelmicfailure *) ev; in wpa_driver_wext_event_wireless_michaelmicfailure()
308 wpa_printf(MSG_DEBUG, "Michael MIC failure wireless event: " in wpa_driver_wext_event_wireless_michaelmicfailure()
309 "flags=0x%x src_addr=" MACSTR, mic->flags, in wpa_driver_wext_event_wireless_michaelmicfailure()
310 MAC2STR(mic->src_addr.sa_data)); in wpa_driver_wext_event_wireless_michaelmicfailure()
313 data.michael_mic_failure.unicast = !(mic->flags & IW_MICFAILURE_GROUP); in wpa_driver_wext_event_wireless_michaelmicfailure()
328 return -1; in wpa_driver_wext_event_wireless_pmkidcand()
331 addr = (const u8 *) cand->bssid.sa_data; in wpa_driver_wext_event_wireless_pmkidcand()
334 "flags=0x%x index=%d bssid=" MACSTR, cand->flags, in wpa_driver_wext_event_wireless_pmkidcand()
335 cand->index, MAC2STR(addr)); in wpa_driver_wext_event_wireless_pmkidcand()
339 data.pmkid_candidate.index = cand->index; in wpa_driver_wext_event_wireless_pmkidcand()
340 data.pmkid_candidate.preauth = cand->flags & IW_PMKID_CAND_PREAUTH; in wpa_driver_wext_event_wireless_pmkidcand()
341 wpa_supplicant_event(drv->ctx, EVENT_PMKID_CANDIDATE, &data); in wpa_driver_wext_event_wireless_pmkidcand()
351 return -1; in wpa_driver_wext_event_wireless_assocreqie()
355 os_free(drv->assoc_req_ies); in wpa_driver_wext_event_wireless_assocreqie()
356 drv->assoc_req_ies = os_memdup(ev, len); in wpa_driver_wext_event_wireless_assocreqie()
357 if (drv->assoc_req_ies == NULL) { in wpa_driver_wext_event_wireless_assocreqie()
358 drv->assoc_req_ies_len = 0; in wpa_driver_wext_event_wireless_assocreqie()
359 return -1; in wpa_driver_wext_event_wireless_assocreqie()
361 drv->assoc_req_ies_len = len; in wpa_driver_wext_event_wireless_assocreqie()
371 return -1; in wpa_driver_wext_event_wireless_assocrespie()
375 os_free(drv->assoc_resp_ies); in wpa_driver_wext_event_wireless_assocrespie()
376 drv->assoc_resp_ies = os_memdup(ev, len); in wpa_driver_wext_event_wireless_assocrespie()
377 if (drv->assoc_resp_ies == NULL) { in wpa_driver_wext_event_wireless_assocrespie()
378 drv->assoc_resp_ies_len = 0; in wpa_driver_wext_event_wireless_assocrespie()
379 return -1; in wpa_driver_wext_event_wireless_assocrespie()
381 drv->assoc_resp_ies_len = len; in wpa_driver_wext_event_wireless_assocrespie()
391 if (drv->assoc_req_ies == NULL && drv->assoc_resp_ies == NULL) in wpa_driver_wext_event_assoc_ies()
395 if (drv->assoc_req_ies) { in wpa_driver_wext_event_assoc_ies()
396 data.assoc_info.req_ies = drv->assoc_req_ies; in wpa_driver_wext_event_assoc_ies()
397 data.assoc_info.req_ies_len = drv->assoc_req_ies_len; in wpa_driver_wext_event_assoc_ies()
399 if (drv->assoc_resp_ies) { in wpa_driver_wext_event_assoc_ies()
400 data.assoc_info.resp_ies = drv->assoc_resp_ies; in wpa_driver_wext_event_assoc_ies()
401 data.assoc_info.resp_ies_len = drv->assoc_resp_ies_len; in wpa_driver_wext_event_assoc_ies()
404 wpa_supplicant_event(drv->ctx, EVENT_ASSOCINFO, &data); in wpa_driver_wext_event_assoc_ies()
406 os_free(drv->assoc_req_ies); in wpa_driver_wext_event_assoc_ies()
407 drv->assoc_req_ies = NULL; in wpa_driver_wext_event_assoc_ies()
408 os_free(drv->assoc_resp_ies); in wpa_driver_wext_event_assoc_ies()
409 drv->assoc_resp_ies = NULL; in wpa_driver_wext_event_assoc_ies()
417 char *pos, *end, *custom, *buf; in wpa_driver_wext_event_wireless() local
419 pos = data; in wpa_driver_wext_event_wireless()
422 while ((size_t) (end - pos) >= IW_EV_LCP_LEN) { in wpa_driver_wext_event_wireless()
425 os_memcpy(&iwe_buf, pos, IW_EV_LCP_LEN); in wpa_driver_wext_event_wireless()
427 iwe->cmd, iwe->len); in wpa_driver_wext_event_wireless()
428 if (iwe->len <= IW_EV_LCP_LEN || iwe->len > end - pos) in wpa_driver_wext_event_wireless()
431 custom = pos + IW_EV_POINT_LEN; in wpa_driver_wext_event_wireless()
432 if (drv->we_version_compiled > 18 && in wpa_driver_wext_event_wireless()
433 (iwe->cmd == IWEVMICHAELMICFAILURE || in wpa_driver_wext_event_wireless()
434 iwe->cmd == IWEVCUSTOM || in wpa_driver_wext_event_wireless()
435 iwe->cmd == IWEVASSOCREQIE || in wpa_driver_wext_event_wireless()
436 iwe->cmd == IWEVASSOCRESPIE || in wpa_driver_wext_event_wireless()
437 iwe->cmd == IWEVPMKIDCAND)) { in wpa_driver_wext_event_wireless()
438 /* WE-19 removed the pointer from struct iw_point */ in wpa_driver_wext_event_wireless()
440 int dlen = dpos - (char *) &iwe_buf; in wpa_driver_wext_event_wireless()
441 os_memcpy(dpos, pos + IW_EV_LCP_LEN, in wpa_driver_wext_event_wireless()
442 sizeof(struct iw_event) - dlen); in wpa_driver_wext_event_wireless()
444 os_memcpy(&iwe_buf, pos, sizeof(struct iw_event)); in wpa_driver_wext_event_wireless()
448 switch (iwe->cmd) { in wpa_driver_wext_event_wireless()
452 MAC2STR((u8 *) iwe->u.ap_addr.sa_data)); in wpa_driver_wext_event_wireless()
454 (const u8 *) iwe->u.ap_addr.sa_data) || in wpa_driver_wext_event_wireless()
456 iwe->u.ap_addr.sa_data, in wpa_driver_wext_event_wireless()
459 os_free(drv->assoc_req_ies); in wpa_driver_wext_event_wireless()
460 drv->assoc_req_ies = NULL; in wpa_driver_wext_event_wireless()
461 os_free(drv->assoc_resp_ies); in wpa_driver_wext_event_wireless()
462 drv->assoc_resp_ies = NULL; in wpa_driver_wext_event_wireless()
463 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, in wpa_driver_wext_event_wireless()
468 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, in wpa_driver_wext_event_wireless()
473 if (iwe->u.data.length > end - custom) { in wpa_driver_wext_event_wireless()
479 drv->ctx, custom, iwe->u.data.length); in wpa_driver_wext_event_wireless()
482 if (iwe->u.data.length > end - custom) { in wpa_driver_wext_event_wireless()
487 buf = dup_binstr(custom, iwe->u.data.length); in wpa_driver_wext_event_wireless()
490 wpa_driver_wext_event_wireless_custom(drv->ctx, buf); in wpa_driver_wext_event_wireless()
494 drv->scan_complete_events = 1; in wpa_driver_wext_event_wireless()
496 drv, drv->ctx); in wpa_driver_wext_event_wireless()
497 wpa_supplicant_event(drv->ctx, EVENT_SCAN_RESULTS, in wpa_driver_wext_event_wireless()
501 if (iwe->u.data.length > end - custom) { in wpa_driver_wext_event_wireless()
507 drv, custom, iwe->u.data.length); in wpa_driver_wext_event_wireless()
510 if (iwe->u.data.length > end - custom) { in wpa_driver_wext_event_wireless()
516 drv, custom, iwe->u.data.length); in wpa_driver_wext_event_wireless()
519 if (iwe->u.data.length > end - custom) { in wpa_driver_wext_event_wireless()
525 drv, custom, iwe->u.data.length); in wpa_driver_wext_event_wireless()
529 pos += iwe->len; in wpa_driver_wext_event_wireless()
541 len = sizeof(event.interface_status.ifname) - 1; in wpa_driver_wext_event_link()
551 if (os_strcmp(drv->ifname, event.interface_status.ifname) == 0) { in wpa_driver_wext_event_link()
553 if (drv->if_removed) { in wpa_driver_wext_event_link()
555 "already set - ignore event"); in wpa_driver_wext_event_link()
558 drv->if_removed = 1; in wpa_driver_wext_event_link()
560 if (if_nametoindex(drv->ifname) == 0) { in wpa_driver_wext_event_link()
562 "does not exist - ignore " in wpa_driver_wext_event_link()
564 drv->ifname); in wpa_driver_wext_event_link()
567 if (!drv->if_removed) { in wpa_driver_wext_event_link()
569 "already cleared - ignore event"); in wpa_driver_wext_event_link()
572 drv->if_removed = 0; in wpa_driver_wext_event_link()
576 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event); in wpa_driver_wext_event_link()
591 if (attr->rta_type == IFLA_IFNAME) { in wpa_driver_wext_own_ifname()
592 if (os_strcmp(((char *) attr) + rta_len, drv->ifname) in wpa_driver_wext_own_ifname()
608 if (drv->ifindex == ifindex || drv->ifindex2 == ifindex) in wpa_driver_wext_own_ifindex()
611 if (drv->if_removed && wpa_driver_wext_own_ifname(drv, buf, len)) { in wpa_driver_wext_own_ifindex()
612 drv->ifindex = if_nametoindex(drv->ifname); in wpa_driver_wext_own_ifindex()
631 if (!wpa_driver_wext_own_ifindex(drv, ifi->ifi_index, buf, len)) { in wpa_driver_wext_event_rtm_newlink()
633 ifi->ifi_index); in wpa_driver_wext_event_rtm_newlink()
639 drv->operstate, ifi->ifi_flags, in wpa_driver_wext_event_rtm_newlink()
640 (ifi->ifi_flags & IFF_UP) ? "[UP]" : "", in wpa_driver_wext_event_rtm_newlink()
641 (ifi->ifi_flags & IFF_RUNNING) ? "[RUNNING]" : "", in wpa_driver_wext_event_rtm_newlink()
642 (ifi->ifi_flags & IFF_LOWER_UP) ? "[LOWER_UP]" : "", in wpa_driver_wext_event_rtm_newlink()
643 (ifi->ifi_flags & IFF_DORMANT) ? "[DORMANT]" : ""); in wpa_driver_wext_event_rtm_newlink()
645 if (!drv->if_disabled && !(ifi->ifi_flags & IFF_UP)) { in wpa_driver_wext_event_rtm_newlink()
647 drv->if_disabled = 1; in wpa_driver_wext_event_rtm_newlink()
648 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_DISABLED, NULL); in wpa_driver_wext_event_rtm_newlink()
651 if (drv->if_disabled && (ifi->ifi_flags & IFF_UP)) { in wpa_driver_wext_event_rtm_newlink()
652 if (if_indextoname(ifi->ifi_index, namebuf) && in wpa_driver_wext_event_rtm_newlink()
653 linux_iface_up(drv->ioctl_sock, drv->ifname) == 0) { in wpa_driver_wext_event_rtm_newlink()
657 } else if (if_nametoindex(drv->ifname) == 0) { in wpa_driver_wext_event_rtm_newlink()
660 drv->ifname); in wpa_driver_wext_event_rtm_newlink()
661 } else if (drv->if_removed) { in wpa_driver_wext_event_rtm_newlink()
664 "removed", drv->ifname); in wpa_driver_wext_event_rtm_newlink()
667 drv->if_disabled = 0; in wpa_driver_wext_event_rtm_newlink()
668 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_ENABLED, in wpa_driver_wext_event_rtm_newlink()
674 * Some drivers send the association event before the operup event--in in wpa_driver_wext_event_rtm_newlink()
679 if (drv->operstate == 1 && in wpa_driver_wext_event_rtm_newlink()
680 (ifi->ifi_flags & (IFF_LOWER_UP | IFF_DORMANT)) == IFF_LOWER_UP && in wpa_driver_wext_event_rtm_newlink()
681 !(ifi->ifi_flags & IFF_RUNNING)) in wpa_driver_wext_event_rtm_newlink()
682 netlink_send_oper_ifla(drv->netlink, drv->ifindex, in wpa_driver_wext_event_rtm_newlink()
683 -1, IF_OPER_UP); in wpa_driver_wext_event_rtm_newlink()
690 if (attr->rta_type == IFLA_WIRELESS) { in wpa_driver_wext_event_rtm_newlink()
693 attr->rta_len - rta_len); in wpa_driver_wext_event_rtm_newlink()
694 } else if (attr->rta_type == IFLA_IFNAME) { in wpa_driver_wext_event_rtm_newlink()
697 attr->rta_len - rta_len, 0); in wpa_driver_wext_event_rtm_newlink()
716 if (attr->rta_type == IFLA_IFNAME) { in wpa_driver_wext_event_rtm_dellink()
719 attr->rta_len - rta_len, 1); in wpa_driver_wext_event_rtm_dellink()
740 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1)) { in wpa_driver_wext_rfkill_unblocked()
752 char buf[90], *pos; in wext_get_phy_name() local
755 drv->phyname[0] = '\0'; in wext_get_phy_name()
756 snprintf(buf, sizeof(buf) - 1, "/sys/class/net/%s/phy80211/name", in wext_get_phy_name()
757 drv->ifname); in wext_get_phy_name()
765 rv = read(f, drv->phyname, sizeof(drv->phyname) - 1); in wext_get_phy_name()
773 drv->phyname[rv] = '\0'; in wext_get_phy_name()
774 pos = os_strchr(drv->phyname, '\n'); in wext_get_phy_name()
775 if (pos) in wext_get_phy_name()
776 *pos = '\0'; in wext_get_phy_name()
778 drv->ifname, drv->phyname); in wext_get_phy_name()
783 * wpa_driver_wext_init - Initialize WE driver interface
800 drv->ctx = ctx; in wpa_driver_wext_init()
801 os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname)); in wpa_driver_wext_init()
805 wpa_printf(MSG_DEBUG, "WEXT: cfg80211-based driver detected"); in wpa_driver_wext_init()
806 drv->cfg80211 = 1; in wpa_driver_wext_init()
810 drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0); in wpa_driver_wext_init()
811 if (drv->ioctl_sock < 0) { in wpa_driver_wext_init()
820 cfg->ctx = drv; in wpa_driver_wext_init()
821 cfg->newlink_cb = wpa_driver_wext_event_rtm_newlink; in wpa_driver_wext_init()
822 cfg->dellink_cb = wpa_driver_wext_event_rtm_dellink; in wpa_driver_wext_init()
823 drv->netlink = netlink_init(cfg); in wpa_driver_wext_init()
824 if (drv->netlink == NULL) { in wpa_driver_wext_init()
832 rcfg->ctx = drv; in wpa_driver_wext_init()
833 os_strlcpy(rcfg->ifname, ifname, sizeof(rcfg->ifname)); in wpa_driver_wext_init()
834 rcfg->blocked_cb = wpa_driver_wext_rfkill_blocked; in wpa_driver_wext_init()
835 rcfg->unblocked_cb = wpa_driver_wext_rfkill_unblocked; in wpa_driver_wext_init()
836 drv->rfkill = rfkill_init(rcfg); in wpa_driver_wext_init()
837 if (drv->rfkill == NULL) { in wpa_driver_wext_init()
842 drv->mlme_sock = -1; in wpa_driver_wext_init()
852 rfkill_deinit(drv->rfkill); in wpa_driver_wext_init()
853 netlink_deinit(drv->netlink); in wpa_driver_wext_init()
855 close(drv->ioctl_sock); in wpa_driver_wext_init()
876 return -1; in wext_hostap_ifname()
879 drv->ifname, ifname); in wext_hostap_ifname()
881 return -1; in wext_hostap_ifname()
885 return -1; in wext_hostap_ifname()
889 type = res ? atoi(res) : -1; in wext_hostap_ifname()
899 return -1; in wext_hostap_ifname()
908 int ret = -1; in wext_add_hostap()
910 snprintf(buf, sizeof(buf), "/sys/class/net/%s/device/net", drv->ifname); in wext_add_hostap()
913 return -1; in wext_add_hostap()
915 while (n--) { in wext_add_hostap()
916 if (ret < 0 && wext_hostap_ifname(drv, names[n]->d_name) == 0) in wext_add_hostap()
928 char path[200], buf[200], *pos; in wext_check_hostap() local
933 * events. Since some of the versions included WE-18 support, let's add in wext_check_hostap()
944 drv->ifname); in wext_check_hostap()
945 res = readlink(path, buf, sizeof(buf) - 1); in wext_check_hostap()
948 pos = strrchr(buf, '/'); in wext_check_hostap()
949 if (pos) in wext_check_hostap()
950 pos++; in wext_check_hostap()
952 pos = buf; in wext_check_hostap()
953 wpa_printf(MSG_DEBUG, "WEXT: Driver: %s", pos); in wext_check_hostap()
954 if (os_strncmp(pos, "hostap", 6) == 0 && in wext_check_hostap()
960 if (os_strncmp(drv->ifname, "wlan", 4) == 0) { in wext_check_hostap()
962 os_strlcpy(ifname2, drv->ifname, sizeof(ifname2)); in wext_check_hostap()
974 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1) < 0) { in wpa_driver_wext_finish_drv_init()
975 if (rfkill_is_blocked(drv->rfkill)) { in wpa_driver_wext_finish_drv_init()
978 drv->ifname); in wpa_driver_wext_finish_drv_init()
979 drv->if_disabled = 1; in wpa_driver_wext_finish_drv_init()
983 "interface '%s' UP", drv->ifname); in wpa_driver_wext_finish_drv_init()
984 return -1; in wpa_driver_wext_finish_drv_init()
1003 drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt; in wpa_driver_wext_finish_drv_init()
1012 drv->ifindex = if_nametoindex(drv->ifname); in wpa_driver_wext_finish_drv_init()
1016 netlink_send_oper_ifla(drv->netlink, drv->ifindex, in wpa_driver_wext_finish_drv_init()
1021 drv, drv->ctx); in wpa_driver_wext_finish_drv_init()
1029 * wpa_driver_wext_deinit - Deinitialize WE driver interface
1041 eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv->ctx); in wpa_driver_wext_deinit()
1042 eloop_cancel_timeout(wpa_driver_wext_send_rfkill, drv, drv->ctx); in wpa_driver_wext_deinit()
1050 netlink_send_oper_ifla(drv->netlink, drv->ifindex, 0, IF_OPER_UP); in wpa_driver_wext_deinit()
1051 netlink_deinit(drv->netlink); in wpa_driver_wext_deinit()
1052 rfkill_deinit(drv->rfkill); in wpa_driver_wext_deinit()
1054 if (drv->mlme_sock >= 0) in wpa_driver_wext_deinit()
1055 eloop_unregister_read_sock(drv->mlme_sock); in wpa_driver_wext_deinit()
1057 (void) linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 0); in wpa_driver_wext_deinit()
1059 close(drv->ioctl_sock); in wpa_driver_wext_deinit()
1060 if (drv->mlme_sock >= 0) in wpa_driver_wext_deinit()
1061 close(drv->mlme_sock); in wpa_driver_wext_deinit()
1062 os_free(drv->assoc_req_ies); in wpa_driver_wext_deinit()
1063 os_free(drv->assoc_resp_ies); in wpa_driver_wext_deinit()
1069 * wpa_driver_wext_scan_timeout - Scan timeout to report scan completion
1078 wpa_printf(MSG_DEBUG, "Scan timeout - try to get results"); in wpa_driver_wext_scan_timeout()
1084 * wpa_driver_wext_scan - Request the driver to initiate scan
1087 * Returns: 0 on success, -1 on failure
1095 const u8 *ssid = params->ssids[0].ssid; in wpa_driver_wext_scan()
1096 size_t ssid_len = params->ssids[0].ssid_len; in wpa_driver_wext_scan()
1101 return -1; in wpa_driver_wext_scan()
1105 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_scan()
1118 if (ioctl(drv->ioctl_sock, SIOCSIWSCAN, &iwr) < 0) { in wpa_driver_wext_scan()
1121 ret = -1; in wpa_driver_wext_scan()
1127 if (drv->scan_complete_events) { in wpa_driver_wext_scan()
1135 wpa_printf(MSG_DEBUG, "Scan requested (ret=%d) - scan timeout %d " in wpa_driver_wext_scan()
1137 eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv->ctx); in wpa_driver_wext_scan()
1139 drv->ctx); in wpa_driver_wext_scan()
1158 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_giwscan()
1162 if (ioctl(drv->ioctl_sock, SIOCGIWSCAN, &iwr) == 0) in wpa_driver_wext_giwscan()
1170 res_buf_len = 65535; /* 16-bit length field */ in wpa_driver_wext_giwscan()
1171 wpa_printf(MSG_DEBUG, "Scan results did not fit - " in wpa_driver_wext_giwscan()
1209 if (iwe->u.mode == IW_MODE_ADHOC) in wext_get_scan_mode()
1210 res->res.caps |= IEEE80211_CAP_IBSS; in wext_get_scan_mode()
1211 else if (iwe->u.mode == IW_MODE_MASTER || iwe->u.mode == IW_MODE_INFRA) in wext_get_scan_mode()
1212 res->res.caps |= IEEE80211_CAP_ESS; in wext_get_scan_mode()
1220 int ssid_len = iwe->u.essid.length; in wext_get_scan_ssid()
1221 if (ssid_len > end - custom) in wext_get_scan_ssid()
1223 if (iwe->u.essid.flags && in wext_get_scan_ssid()
1226 os_memcpy(res->ssid, custom, ssid_len); in wext_get_scan_ssid()
1227 res->ssid_len = ssid_len; in wext_get_scan_ssid()
1237 if (iwe->u.freq.e == 0) { in wext_get_scan_freq()
1243 * since the driver may be sending an A-band channel that we in wext_get_scan_freq()
1247 if (res->res.freq) in wext_get_scan_freq()
1250 if (iwe->u.freq.m >= 1 && iwe->u.freq.m <= 13) { in wext_get_scan_freq()
1251 res->res.freq = 2407 + 5 * iwe->u.freq.m; in wext_get_scan_freq()
1253 } else if (iwe->u.freq.m == 14) { in wext_get_scan_freq()
1254 res->res.freq = 2484; in wext_get_scan_freq()
1259 if (iwe->u.freq.e > 6) { in wext_get_scan_freq()
1262 MAC2STR(res->res.bssid), iwe->u.freq.m, in wext_get_scan_freq()
1263 iwe->u.freq.e); in wext_get_scan_freq()
1267 for (i = 0; i < iwe->u.freq.e; i++) in wext_get_scan_freq()
1269 res->res.freq = iwe->u.freq.m / divi; in wext_get_scan_freq()
1277 res->res.qual = iwe->u.qual.qual; in wext_get_scan_qual()
1278 res->res.noise = iwe->u.qual.noise; in wext_get_scan_qual()
1279 res->res.level = iwe->u.qual.level; in wext_get_scan_qual()
1280 if (iwe->u.qual.updated & IW_QUAL_QUAL_INVALID) in wext_get_scan_qual()
1281 res->res.flags |= WPA_SCAN_QUAL_INVALID; in wext_get_scan_qual()
1282 if (iwe->u.qual.updated & IW_QUAL_LEVEL_INVALID) in wext_get_scan_qual()
1283 res->res.flags |= WPA_SCAN_LEVEL_INVALID; in wext_get_scan_qual()
1284 if (iwe->u.qual.updated & IW_QUAL_NOISE_INVALID) in wext_get_scan_qual()
1285 res->res.flags |= WPA_SCAN_NOISE_INVALID; in wext_get_scan_qual()
1286 if (iwe->u.qual.updated & IW_QUAL_DBM) in wext_get_scan_qual()
1287 res->res.flags |= WPA_SCAN_LEVEL_DBM; in wext_get_scan_qual()
1288 if ((iwe->u.qual.updated & IW_QUAL_DBM) || in wext_get_scan_qual()
1289 ((iwe->u.qual.level != 0) && in wext_get_scan_qual()
1290 (iwe->u.qual.level > drv->max_level))) { in wext_get_scan_qual()
1291 if (iwe->u.qual.level >= 64) in wext_get_scan_qual()
1292 res->res.level -= 0x100; in wext_get_scan_qual()
1293 if (iwe->u.qual.noise >= 64) in wext_get_scan_qual()
1294 res->res.noise -= 0x100; in wext_get_scan_qual()
1302 if (!(iwe->u.data.flags & IW_ENCODE_DISABLED)) in wext_get_scan_encode()
1303 res->res.caps |= IEEE80211_CAP_PRIVACY; in wext_get_scan_encode()
1308 struct wext_scan_data *res, char *pos, in wext_get_scan_rate() argument
1312 char *custom = pos + IW_EV_LCP_LEN; in wext_get_scan_rate()
1316 clen = iwe->len; in wext_get_scan_rate()
1317 if (clen > (size_t) (end - custom)) in wext_get_scan_rate()
1325 clen -= sizeof(struct iw_param); in wext_get_scan_rate()
1329 /* Convert the maxrate from WE-style (b/s units) to in wext_get_scan_rate()
1332 res->maxrate = maxrate / 500000; in wext_get_scan_rate()
1343 if (iwe->u.data.length == 0) in wext_get_scan_iwevgenie()
1347 gend = genie + iwe->u.data.length; in wext_get_scan_iwevgenie()
1353 tmp = os_realloc(res->ie, res->ie_len + gend - gpos); in wext_get_scan_iwevgenie()
1356 os_memcpy(tmp + res->ie_len, gpos, gend - gpos); in wext_get_scan_iwevgenie()
1357 res->ie = tmp; in wext_get_scan_iwevgenie()
1358 res->ie_len += gend - gpos; in wext_get_scan_iwevgenie()
1369 clen = iwe->u.data.length; in wext_get_scan_custom()
1370 if (clen > (size_t) (end - custom)) in wext_get_scan_custom()
1377 bytes = custom + clen - spos; in wext_get_scan_custom()
1381 tmp = os_realloc(res->ie, res->ie_len + bytes); in wext_get_scan_custom()
1384 res->ie = tmp; in wext_get_scan_custom()
1385 if (hexstr2bin(spos, tmp + res->ie_len, bytes) < 0) in wext_get_scan_custom()
1387 res->ie_len += bytes; in wext_get_scan_custom()
1392 bytes = custom + clen - spos; in wext_get_scan_custom()
1396 tmp = os_realloc(res->ie, res->ie_len + bytes); in wext_get_scan_custom()
1399 res->ie = tmp; in wext_get_scan_custom()
1400 if (hexstr2bin(spos, tmp + res->ie_len, bytes) < 0) in wext_get_scan_custom()
1402 res->ie_len += bytes; in wext_get_scan_custom()
1408 bytes = custom + clen - spos; in wext_get_scan_custom()
1418 res->res.tsf += WPA_GET_BE64(bin); in wext_get_scan_custom()
1425 return drv->we_version_compiled > 18 && in wext_19_iw_point()
1437 u8 *pos, *end, *ssid_ie = NULL, *rate_ie = NULL; in wpa_driver_wext_add_scan_entry() local
1440 pos = data->ie; in wpa_driver_wext_add_scan_entry()
1441 end = pos + data->ie_len; in wpa_driver_wext_add_scan_entry()
1442 while (pos && end - pos > 1) { in wpa_driver_wext_add_scan_entry()
1443 if (2 + pos[1] > end - pos) in wpa_driver_wext_add_scan_entry()
1445 if (pos[0] == WLAN_EID_SSID) in wpa_driver_wext_add_scan_entry()
1446 ssid_ie = pos; in wpa_driver_wext_add_scan_entry()
1447 else if (pos[0] == WLAN_EID_SUPP_RATES) in wpa_driver_wext_add_scan_entry()
1448 rate_ie = pos; in wpa_driver_wext_add_scan_entry()
1449 else if (pos[0] == WLAN_EID_EXT_SUPP_RATES) in wpa_driver_wext_add_scan_entry()
1450 rate_ie = pos; in wpa_driver_wext_add_scan_entry()
1451 pos += 2 + pos[1]; in wpa_driver_wext_add_scan_entry()
1456 extra_len += 2 + data->ssid_len; in wpa_driver_wext_add_scan_entry()
1457 if (rate_ie == NULL && data->maxrate) in wpa_driver_wext_add_scan_entry()
1460 r = os_zalloc(sizeof(*r) + extra_len + data->ie_len); in wpa_driver_wext_add_scan_entry()
1463 os_memcpy(r, &data->res, sizeof(*r)); in wpa_driver_wext_add_scan_entry()
1464 r->ie_len = extra_len + data->ie_len; in wpa_driver_wext_add_scan_entry()
1465 pos = (u8 *) (r + 1); in wpa_driver_wext_add_scan_entry()
1471 *pos++ = WLAN_EID_SSID; in wpa_driver_wext_add_scan_entry()
1472 *pos++ = data->ssid_len; in wpa_driver_wext_add_scan_entry()
1473 os_memcpy(pos, data->ssid, data->ssid_len); in wpa_driver_wext_add_scan_entry()
1474 pos += data->ssid_len; in wpa_driver_wext_add_scan_entry()
1476 if (rate_ie == NULL && data->maxrate) { in wpa_driver_wext_add_scan_entry()
1481 *pos++ = WLAN_EID_SUPP_RATES; in wpa_driver_wext_add_scan_entry()
1482 *pos++ = 1; in wpa_driver_wext_add_scan_entry()
1483 *pos++ = data->maxrate; in wpa_driver_wext_add_scan_entry()
1485 if (data->ie) in wpa_driver_wext_add_scan_entry()
1486 os_memcpy(pos, data->ie, data->ie_len); in wpa_driver_wext_add_scan_entry()
1488 tmp = os_realloc_array(res->res, res->num + 1, in wpa_driver_wext_add_scan_entry()
1494 tmp[res->num++] = r; in wpa_driver_wext_add_scan_entry()
1495 res->res = tmp; in wpa_driver_wext_add_scan_entry()
1500 * wpa_driver_wext_get_scan_results - Fetch the latest scan results
1502 * Returns: Scan results on success, -1 on failure
1511 char *pos, *end, *custom; in wpa_driver_wext_get_scan_results() local
1527 pos = (char *) res_buf; in wpa_driver_wext_get_scan_results()
1531 while ((size_t) (end - pos) >= IW_EV_LCP_LEN) { in wpa_driver_wext_get_scan_results()
1534 os_memcpy(&iwe_buf, pos, IW_EV_LCP_LEN); in wpa_driver_wext_get_scan_results()
1535 if (iwe->len <= IW_EV_LCP_LEN || iwe->len > end - pos) in wpa_driver_wext_get_scan_results()
1538 custom = pos + IW_EV_POINT_LEN; in wpa_driver_wext_get_scan_results()
1539 if (wext_19_iw_point(drv, iwe->cmd)) { in wpa_driver_wext_get_scan_results()
1540 /* WE-19 removed the pointer from struct iw_point */ in wpa_driver_wext_get_scan_results()
1542 int dlen = dpos - (char *) &iwe_buf; in wpa_driver_wext_get_scan_results()
1543 os_memcpy(dpos, pos + IW_EV_LCP_LEN, in wpa_driver_wext_get_scan_results()
1544 sizeof(struct iw_event) - dlen); in wpa_driver_wext_get_scan_results()
1546 os_memcpy(&iwe_buf, pos, sizeof(struct iw_event)); in wpa_driver_wext_get_scan_results()
1550 switch (iwe->cmd) { in wpa_driver_wext_get_scan_results()
1558 iwe->u.ap_addr.sa_data, ETH_ALEN); in wpa_driver_wext_get_scan_results()
1576 wext_get_scan_rate(iwe, &data, pos, end); in wpa_driver_wext_get_scan_results()
1586 pos += iwe->len; in wpa_driver_wext_get_scan_results()
1595 (unsigned long) len, (unsigned long) res->num); in wpa_driver_wext_get_scan_results()
1616 return -1; in wpa_driver_wext_get_range()
1619 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_get_range()
1623 minlen = ((char *) &range->enc_capa) - (char *) range + in wpa_driver_wext_get_range()
1624 sizeof(range->enc_capa); in wpa_driver_wext_get_range()
1626 if (ioctl(drv->ioctl_sock, SIOCGIWRANGE, &iwr) < 0) { in wpa_driver_wext_get_range()
1630 return -1; in wpa_driver_wext_get_range()
1632 range->we_version_compiled >= 18) { in wpa_driver_wext_get_range()
1635 range->we_version_compiled, in wpa_driver_wext_get_range()
1636 range->we_version_source, in wpa_driver_wext_get_range()
1637 range->enc_capa); in wpa_driver_wext_get_range()
1638 drv->has_capability = 1; in wpa_driver_wext_get_range()
1639 drv->we_version_compiled = range->we_version_compiled; in wpa_driver_wext_get_range()
1640 if (range->enc_capa & IW_ENC_CAPA_WPA) { in wpa_driver_wext_get_range()
1641 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA | in wpa_driver_wext_get_range()
1644 if (range->enc_capa & IW_ENC_CAPA_WPA2) { in wpa_driver_wext_get_range()
1645 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA2 | in wpa_driver_wext_get_range()
1648 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP40 | in wpa_driver_wext_get_range()
1650 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP128; in wpa_driver_wext_get_range()
1651 if (range->enc_capa & IW_ENC_CAPA_CIPHER_TKIP) in wpa_driver_wext_get_range()
1652 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP; in wpa_driver_wext_get_range()
1653 if (range->enc_capa & IW_ENC_CAPA_CIPHER_CCMP) in wpa_driver_wext_get_range()
1654 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP; in wpa_driver_wext_get_range()
1655 if (range->enc_capa & IW_ENC_CAPA_4WAY_HANDSHAKE) in wpa_driver_wext_get_range()
1656 drv->capa.flags |= WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK | in wpa_driver_wext_get_range()
1658 drv->capa.auth = WPA_DRIVER_AUTH_OPEN | in wpa_driver_wext_get_range()
1661 drv->capa.max_scan_ssids = 1; in wpa_driver_wext_get_range()
1665 drv->capa.key_mgmt, drv->capa.enc, in wpa_driver_wext_get_range()
1666 (unsigned long long) drv->capa.flags); in wpa_driver_wext_get_range()
1668 wpa_printf(MSG_DEBUG, "SIOCGIWRANGE: too old (short) data - " in wpa_driver_wext_get_range()
1672 drv->max_level = range->max_qual.level; in wpa_driver_wext_get_range()
1688 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X)) in wpa_driver_wext_set_psk()
1695 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_set_psk()
1699 return -1; in wpa_driver_wext_set_psk()
1703 ext->key_len = PMK_LEN; in wpa_driver_wext_set_psk()
1704 os_memcpy(&ext->key, psk, ext->key_len); in wpa_driver_wext_set_psk()
1705 ext->alg = IW_ENCODE_ALG_PMK; in wpa_driver_wext_set_psk()
1707 ret = ioctl(drv->ioctl_sock, SIOCSIWENCODEEXT, &iwr); in wpa_driver_wext_set_psk()
1732 return -1; in wpa_driver_wext_set_key_ext()
1737 return -1; in wpa_driver_wext_set_key_ext()
1739 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_set_key_ext()
1748 ext->ext_flags |= IW_ENCODE_EXT_GROUP_KEY; in wpa_driver_wext_set_key_ext()
1750 ext->ext_flags |= IW_ENCODE_EXT_SET_TX_KEY; in wpa_driver_wext_set_key_ext()
1752 ext->addr.sa_family = ARPHRD_ETHER; in wpa_driver_wext_set_key_ext()
1754 os_memcpy(ext->addr.sa_data, addr, ETH_ALEN); in wpa_driver_wext_set_key_ext()
1756 os_memset(ext->addr.sa_data, 0xff, ETH_ALEN); in wpa_driver_wext_set_key_ext()
1759 ext->key_len = key_len; in wpa_driver_wext_set_key_ext()
1762 ext->alg = IW_ENCODE_ALG_PMK; in wpa_driver_wext_set_key_ext()
1766 ext->alg = IW_ENCODE_ALG_NONE; in wpa_driver_wext_set_key_ext()
1769 ext->alg = IW_ENCODE_ALG_WEP; in wpa_driver_wext_set_key_ext()
1772 ext->alg = IW_ENCODE_ALG_TKIP; in wpa_driver_wext_set_key_ext()
1775 ext->alg = IW_ENCODE_ALG_CCMP; in wpa_driver_wext_set_key_ext()
1778 ext->alg = IW_ENCODE_ALG_AES_CMAC; in wpa_driver_wext_set_key_ext()
1784 return -1; in wpa_driver_wext_set_key_ext()
1789 ext->ext_flags |= IW_ENCODE_EXT_RX_SEQ_VALID; in wpa_driver_wext_set_key_ext()
1790 os_memcpy(ext->rx_seq, seq, seq_len); in wpa_driver_wext_set_key_ext()
1793 if (ioctl(drv->ioctl_sock, SIOCSIWENCODEEXT, &iwr) < 0) { in wpa_driver_wext_set_key_ext()
1794 ret = errno == EOPNOTSUPP ? -2 : -1; in wpa_driver_wext_set_key_ext()
1799 ret = -2; in wpa_driver_wext_set_key_ext()
1812 * wpa_driver_wext_set_key - Configure encryption key
1815 * Returns: 0 on success, -1 on failure
1826 enum wpa_alg alg = params->alg; in wpa_driver_wext_set_key()
1827 enum key_flag key_flag = params->key_flag; in wpa_driver_wext_set_key()
1828 const u8 *addr = params->addr; in wpa_driver_wext_set_key()
1829 int key_idx = params->key_idx; in wpa_driver_wext_set_key()
1830 int set_tx = params->set_tx; in wpa_driver_wext_set_key()
1831 const u8 *seq = params->seq; in wpa_driver_wext_set_key()
1832 size_t seq_len = params->seq_len; in wpa_driver_wext_set_key()
1833 const u8 *key = params->key; in wpa_driver_wext_set_key()
1834 size_t key_len = params->key_len; in wpa_driver_wext_set_key()
1846 if (ret == -2 && in wpa_driver_wext_set_key()
1858 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_set_key()
1866 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) { in wpa_driver_wext_set_key()
1869 ret = -1; in wpa_driver_wext_set_key()
1874 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_set_key()
1879 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) { in wpa_driver_wext_set_key()
1883 ret = -1; in wpa_driver_wext_set_key()
1907 drv->use_crypt = enabled; in wpa_driver_wext_set_drop_unencrypted()
1921 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_mlme()
1930 if (ioctl(drv->ioctl_sock, SIOCSIWMLME, &iwr) < 0) { in wpa_driver_wext_mlme()
1933 ret = -1; in wpa_driver_wext_mlme()
1948 * Only force-disconnect when the card is in infrastructure mode, in wpa_driver_wext_disconnect()
1950 * SSID as an attempt to create a new ad-hoc network. in wpa_driver_wext_disconnect()
1953 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_disconnect()
1954 if (ioctl(drv->ioctl_sock, SIOCGIWMODE, &iwr) < 0) { in wpa_driver_wext_disconnect()
1967 if (drv->cfg80211) { in wpa_driver_wext_disconnect()
2016 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_set_gen_ie()
2020 if (ioctl(drv->ioctl_sock, SIOCSIWGENIE, &iwr) < 0) { in wpa_driver_wext_set_gen_ie()
2023 ret = -1; in wpa_driver_wext_set_gen_ie()
2074 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_auth_alg_fallback()
2089 if (!drv->use_crypt) { in wpa_driver_wext_auth_alg_fallback()
2092 if (params->auth_alg & WPA_AUTH_ALG_OPEN) in wpa_driver_wext_auth_alg_fallback()
2094 if (params->auth_alg & WPA_AUTH_ALG_SHARED) in wpa_driver_wext_auth_alg_fallback()
2098 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) { in wpa_driver_wext_auth_alg_fallback()
2101 ret = -1; in wpa_driver_wext_auth_alg_fallback()
2118 if (drv->cfg80211) { in wpa_driver_wext_associate()
2130 if (wpa_driver_wext_set_drop_unencrypted(drv, params->drop_unencrypted) in wpa_driver_wext_associate()
2132 ret = -1; in wpa_driver_wext_associate()
2133 if (wpa_driver_wext_set_auth_alg(drv, params->auth_alg) < 0) in wpa_driver_wext_associate()
2134 ret = -1; in wpa_driver_wext_associate()
2135 if (wpa_driver_wext_set_mode(drv, params->mode) < 0) in wpa_driver_wext_associate()
2136 ret = -1; in wpa_driver_wext_associate()
2142 if (drv->auth_alg_fallback && in wpa_driver_wext_associate()
2144 ret = -1; in wpa_driver_wext_associate()
2146 if (!params->bssid && in wpa_driver_wext_associate()
2148 ret = -1; in wpa_driver_wext_associate()
2153 if (wpa_driver_wext_set_gen_ie(drv, params->wpa_ie, params->wpa_ie_len) in wpa_driver_wext_associate()
2155 ret = -1; in wpa_driver_wext_associate()
2156 if (params->wpa_proto & WPA_PROTO_RSN) in wpa_driver_wext_associate()
2158 else if (params->wpa_proto & WPA_PROTO_WPA) in wpa_driver_wext_associate()
2164 ret = -1; in wpa_driver_wext_associate()
2165 value = wpa_driver_wext_cipher2wext(params->pairwise_suite); in wpa_driver_wext_associate()
2168 ret = -1; in wpa_driver_wext_associate()
2169 value = wpa_driver_wext_cipher2wext(params->group_suite); in wpa_driver_wext_associate()
2172 ret = -1; in wpa_driver_wext_associate()
2173 value = wpa_driver_wext_keymgmt2wext(params->key_mgmt_suite); in wpa_driver_wext_associate()
2176 ret = -1; in wpa_driver_wext_associate()
2177 value = params->key_mgmt_suite != WPA_KEY_MGMT_NONE || in wpa_driver_wext_associate()
2178 params->pairwise_suite != WPA_CIPHER_NONE || in wpa_driver_wext_associate()
2179 params->group_suite != WPA_CIPHER_NONE || in wpa_driver_wext_associate()
2180 (params->wpa_proto & (WPA_PROTO_RSN | WPA_PROTO_WPA)); in wpa_driver_wext_associate()
2183 ret = -1; in wpa_driver_wext_associate()
2188 if (params->key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X || in wpa_driver_wext_associate()
2189 params->key_mgmt_suite == WPA_KEY_MGMT_PSK) in wpa_driver_wext_associate()
2194 if (wpa_driver_wext_set_psk(drv, params->psk) < 0) in wpa_driver_wext_associate()
2195 ret = -1; in wpa_driver_wext_associate()
2199 ret = -1; in wpa_driver_wext_associate()
2200 switch (params->mgmt_frame_protection) { in wpa_driver_wext_associate()
2212 ret = -1; in wpa_driver_wext_associate()
2213 if (params->freq.freq && in wpa_driver_wext_associate()
2214 wpa_driver_wext_set_freq(drv, params->freq.freq) < 0) in wpa_driver_wext_associate()
2215 ret = -1; in wpa_driver_wext_associate()
2216 if (!drv->cfg80211 && in wpa_driver_wext_associate()
2217 wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0) in wpa_driver_wext_associate()
2218 ret = -1; in wpa_driver_wext_associate()
2219 if (params->bssid && in wpa_driver_wext_associate()
2220 wpa_driver_wext_set_bssid(drv, params->bssid) < 0) in wpa_driver_wext_associate()
2221 ret = -1; in wpa_driver_wext_associate()
2222 if (drv->cfg80211 && in wpa_driver_wext_associate()
2223 wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0) in wpa_driver_wext_associate()
2224 ret = -1; in wpa_driver_wext_associate()
2248 drv->auth_alg_fallback = res == -2; in wpa_driver_wext_set_auth_alg()
2254 * wpa_driver_wext_set_mode - Set wireless mode (infra/adhoc), SIOCSIWMODE
2257 * Returns: 0 on success, -1 on failure
2263 int ret = -1; in wpa_driver_wext_set_mode()
2267 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_set_mode()
2269 if (ioctl(drv->ioctl_sock, SIOCSIWMODE, &iwr) == 0) { in wpa_driver_wext_set_mode()
2284 if (ioctl(drv->ioctl_sock, SIOCGIWMODE, &iwr) < 0) { in wpa_driver_wext_set_mode()
2295 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 0) == 0) { in wpa_driver_wext_set_mode()
2298 if (ioctl(drv->ioctl_sock, SIOCSIWMODE, &iwr) < 0) in wpa_driver_wext_set_mode()
2304 (void) linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1); in wpa_driver_wext_set_mode()
2320 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_pmksa()
2331 if (ioctl(drv->ioctl_sock, SIOCSIWPMKSA, &iwr) < 0) { in wpa_driver_wext_pmksa()
2335 ret = -1; in wpa_driver_wext_pmksa()
2346 return wpa_driver_wext_pmksa(drv, IW_PMKSA_ADD, params->bssid, in wpa_driver_wext_add_pmkid()
2347 params->pmkid); in wpa_driver_wext_add_pmkid()
2355 return wpa_driver_wext_pmksa(drv, IW_PMKSA_REMOVE, params->bssid, in wpa_driver_wext_remove_pmkid()
2356 params->pmkid); in wpa_driver_wext_remove_pmkid()
2370 if (!drv->has_capability) in wpa_driver_wext_get_capa()
2371 return -1; in wpa_driver_wext_get_capa()
2372 os_memcpy(capa, &drv->capa, sizeof(*capa)); in wpa_driver_wext_get_capa()
2381 drv->ifindex2 = -1; in wpa_driver_wext_alternative_ifindex()
2385 drv->ifindex2 = if_nametoindex(ifname); in wpa_driver_wext_alternative_ifindex()
2386 if (drv->ifindex2 <= 0) in wpa_driver_wext_alternative_ifindex()
2387 return -1; in wpa_driver_wext_alternative_ifindex()
2390 "wireless events", drv->ifindex2, ifname); in wpa_driver_wext_alternative_ifindex()
2400 wpa_printf(MSG_DEBUG, "%s: operstate %d->%d (%s)", in wpa_driver_wext_set_operstate()
2401 __func__, drv->operstate, state, state ? "UP" : "DORMANT"); in wpa_driver_wext_set_operstate()
2402 drv->operstate = state; in wpa_driver_wext_set_operstate()
2403 return netlink_send_oper_ifla(drv->netlink, drv->ifindex, -1, in wpa_driver_wext_set_operstate()
2410 return drv->we_version_compiled; in wpa_driver_wext_get_version()
2417 return drv->phyname; in wext_get_radio_name()
2428 si->data.signal = -WPA_INVALID_NOISE; in wpa_driver_wext_signal_poll()
2429 si->current_noise = WPA_INVALID_NOISE; in wpa_driver_wext_signal_poll()
2430 si->chanwidth = CHAN_WIDTH_UNKNOWN; in wpa_driver_wext_signal_poll()
2433 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); in wpa_driver_wext_signal_poll()
2438 if (ioctl(drv->ioctl_sock, SIOCGIWSTATS, &iwr) < 0) { in wpa_driver_wext_signal_poll()
2441 return -1; in wpa_driver_wext_signal_poll()
2444 si->data.signal = stats.qual.level - in wpa_driver_wext_signal_poll()
2446 si->current_noise = stats.qual.noise - in wpa_driver_wext_signal_poll()
2456 char *pos, *end; in wpa_driver_wext_status() local
2459 pos = buf; in wpa_driver_wext_status()
2462 if (linux_get_ifhwaddr(drv->ioctl_sock, drv->ifname, addr)) in wpa_driver_wext_status()
2463 return -1; in wpa_driver_wext_status()
2465 res = os_snprintf(pos, end - pos, in wpa_driver_wext_status()
2469 drv->ifindex, in wpa_driver_wext_status()
2470 drv->ifname, in wpa_driver_wext_status()
2472 if (os_snprintf_error(end - pos, res)) in wpa_driver_wext_status()
2473 return pos - buf; in wpa_driver_wext_status()
2474 pos += res; in wpa_driver_wext_status()
2476 return pos - buf; in wpa_driver_wext_status()