Home | History | Annotate | Download | only in drivers

Lines Matching refs:drv

40 static int wpa_driver_wext_finish_drv_init(struct wpa_driver_wext_data *drv);
41 static void wpa_driver_wext_disconnect(struct wpa_driver_wext_data *drv);
45 int wpa_driver_wext_set_auth_param(struct wpa_driver_wext_data *drv,
52 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
56 if (ioctl(drv->ioctl_sock, SIOCSIWAUTH, &iwr) < 0) {
77 struct wpa_driver_wext_data *drv = priv;
82 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
84 if (ioctl(drv->ioctl_sock, SIOCGIWAP, &iwr) < 0) {
102 struct wpa_driver_wext_data *drv = priv;
107 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
114 if (ioctl(drv->ioctl_sock, SIOCSIWAP, &iwr) < 0) {
131 struct wpa_driver_wext_data *drv = priv;
136 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
140 if (ioctl(drv->ioctl_sock, SIOCGIWESSID, &iwr) < 0) {
152 drv->we_version_compiled < 21)
169 struct wpa_driver_wext_data *drv = priv;
178 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
184 if (drv->we_version_compiled < 21) {
198 if (ioctl(drv->ioctl_sock, SIOCSIWESSID, &iwr) < 0) {
215 struct wpa_driver_wext_data *drv = priv;
220 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
224 if (ioctl(drv->ioctl_sock, SIOCSIWFREQ, &iwr) < 0) {
338 struct wpa_driver_wext_data *drv, const char *ev, size_t len)
358 wpa_supplicant_event(drv->ctx, EVENT_PMKID_CANDIDATE, &data);
365 struct wpa_driver_wext_data *drv, const char *ev, int len)
372 os_free(drv->assoc_req_ies);
373 drv->assoc_req_ies = os_malloc(len);
374 if (drv->assoc_req_ies == NULL) {
375 drv->assoc_req_ies_len = 0;
378 os_memcpy(drv->assoc_req_ies, ev, len);
379 drv->assoc_req_ies_len = len;
386 struct wpa_driver_wext_data *drv, const char *ev, int len)
393 os_free(drv->assoc_resp_ies);
394 drv->assoc_resp_ies = os_malloc(len);
395 if (drv->assoc_resp_ies == NULL) {
396 drv->assoc_resp_ies_len = 0;
399 os_memcpy(drv->assoc_resp_ies, ev, len);
400 drv->assoc_resp_ies_len = len;
406 static void wpa_driver_wext_event_assoc_ies(struct wpa_driver_wext_data *drv)
410 if (drv->assoc_req_ies == NULL && drv->assoc_resp_ies == NULL)
414 if (drv->assoc_req_ies) {
415 data.assoc_info.req_ies = drv->assoc_req_ies;
416 data.assoc_info.req_ies_len = drv->assoc_req_ies_len;
418 if (drv->assoc_resp_ies) {
419 data.assoc_info.resp_ies = drv->assoc_resp_ies;
420 data.assoc_info.resp_ies_len = drv->assoc_resp_ies_len;
423 wpa_supplicant_event(drv->ctx, EVENT_ASSOCINFO, &data);
425 os_free(drv->assoc_req_ies);
426 drv->assoc_req_ies = NULL;
427 os_free(drv->assoc_resp_ies);
428 drv->assoc_resp_ies = NULL;
432 static void wpa_driver_wext_event_wireless(struct wpa_driver_wext_data *drv,
451 if (drv->we_version_compiled > 18 &&
477 os_free(drv->assoc_req_ies);
478 drv->assoc_req_ies = NULL;
479 os_free(drv->assoc_resp_ies);
480 drv->assoc_resp_ies = NULL;
481 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC,
485 wpa_driver_wext_event_assoc_ies(drv);
486 wpa_supplicant_event(drv->ctx, EVENT_ASSOC,
497 drv->ctx, custom, iwe->u.data.length);
508 wpa_driver_wext_event_wireless_custom(drv->ctx, buf);
512 drv->scan_complete_events = 1;
514 drv, drv->ctx);
515 wpa_supplicant_event(drv->ctx, EVENT_SCAN_RESULTS,
525 drv, custom, iwe->u.data.length);
534 drv, custom, iwe->u.data.length);
543 drv, custom, iwe->u.data.length);
552 static void wpa_driver_wext_event_link(struct wpa_driver_wext_data *drv,
569 if (os_strcmp(drv->ifname, event.interface_status.ifname) == 0) {
571 if (drv->if_removed) {
576 drv->if_removed = 1;
578 if (if_nametoindex(drv->ifname) == 0) {
582 drv->ifname);
585 if (!drv->if_removed) {
590 drv->if_removed = 0;
594 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event);
598 static int wpa_driver_wext_own_ifname(struct wpa_driver_wext_data *drv,
610 drv->ifname)
623 static int wpa_driver_wext_own_ifindex(struct wpa_driver_wext_data *drv,
626 if (drv->ifindex == ifindex || drv->ifindex2 == ifindex)
629 if (drv->if_removed && wpa_driver_wext_own_ifname(drv, buf, len)) {
630 drv->ifindex = if_nametoindex(drv->ifname);
633 wpa_driver_wext_finish_drv_init(drv);
644 struct wpa_driver_wext_data *drv = ctx;
649 if (!wpa_driver_wext_own_ifindex(drv, ifi->ifi_index, buf, len)) {
657 drv->operstate, ifi->ifi_flags,
663 if (!drv->if_disabled && !(ifi->ifi_flags & IFF_UP)) {
665 drv->if_disabled = 1;
666 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_DISABLED, NULL);
669 if (drv->if_disabled && (ifi->ifi_flags & IFF_UP)) {
671 linux_iface_up(drv->ioctl_sock, drv->ifname) == 0) {
675 } else if (if_nametoindex(drv->ifname) == 0) {
678 drv->ifname);
679 } else if (drv->if_removed) {
682 "removed", drv->ifname);
685 drv->if_disabled = 0;
686 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_ENABLED,
697 if (drv->operstate == 1 &&
700 netlink_send_oper_ifla(drv->netlink, drv->ifindex,
710 drv, ((char *) attr) + rta_len,
713 wpa_driver_wext_event_link(drv,
725 struct wpa_driver_wext_data *drv = ctx;
735 wpa_driver_wext_event_link(drv,
756 struct wpa_driver_wext_data *drv = ctx;
758 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1)) {
767 static void wext_get_phy_name(struct wpa_driver_wext_data *drv)
773 drv->phyname[0] = '\0';
775 drv->ifname);
783 rv = read(f, drv->phyname, sizeof(drv->phyname) - 1);
791 drv->phyname[rv] = '\0';
792 pos = os_strchr(drv->phyname, '\n');
796 drv->ifname, drv->phyname);
809 struct wpa_driver_wext_data *drv;
815 drv = os_zalloc(sizeof(*drv));
816 if (drv == NULL)
818 drv->ctx = ctx;
819 os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname));
824 drv->cfg80211 = 1;
825 wext_get_phy_name(drv);
828 drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
829 if (drv->ioctl_sock < 0) {
837 cfg->ctx = drv;
840 drv->netlink = netlink_init(cfg);
841 if (drv->netlink == NULL) {
849 rcfg->ctx = drv;
853 drv->rfkill = rfkill_init(rcfg);
854 if (drv->rfkill == NULL) {
859 drv->mlme_sock = -1;
862 drv->errors = 0;
863 drv->driver_is_started = TRUE;
864 drv->bgscan_enabled = 0;
867 if (wpa_driver_wext_finish_drv_init(drv) < 0)
870 wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_ENABLED, 1);
872 return drv;
875 rfkill_deinit(drv->rfkill);
876 netlink_deinit(drv->netlink);
878 close(drv->ioctl_sock);
880 os_free(drv);
891 static int wpa_driver_wext_finish_drv_init(struct wpa_driver_wext_data *drv)
895 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1) < 0) {
896 if (rfkill_is_blocked(drv->rfkill)) {
899 drv->ifname);
900 drv->if_disabled = 1;
904 "interface '%s' UP", drv->ifname);
912 wpa_driver_wext_flush_pmkid(drv);
914 if (wpa_driver_wext_set_mode(drv, 0) < 0) {
920 wpa_driver_wext_get_range(drv);
927 wpa_driver_wext_disconnect(drv);
929 drv->ifindex = if_nametoindex(drv->ifname);
931 if (os_strncmp(drv->ifname, "wlan", 4) == 0) {
941 os_strlcpy(ifname2, drv->ifname, sizeof(ifname2));
943 wpa_driver_wext_alternative_ifindex(drv, ifname2);
946 netlink_send_oper_ifla(drv->netlink, drv->ifindex,
951 drv, drv->ctx);
967 struct wpa_driver_wext_data *drv = priv;
969 wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_ENABLED, 0);
971 eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv->ctx);
977 wpa_driver_wext_disconnect(drv);
979 netlink_send_oper_ifla(drv->netlink, drv->ifindex, 0, IF_OPER_UP);
980 netlink_deinit(drv->netlink);
981 rfkill_deinit(drv->rfkill);
983 if (drv->mlme_sock >= 0)
984 eloop_unregister_read_sock(drv->mlme_sock);
986 (void) linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 0);
988 close(drv->ioctl_sock);
989 if (drv->mlme_sock >= 0)
990 close(drv->mlme_sock);
991 os_free(drv->assoc_req_ies);
992 os_free(drv->assoc_resp_ies);
993 os_free(drv);
1020 struct wpa_driver_wext_data *drv = priv;
1034 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1047 if (ioctl(drv->ioctl_sock, SIOCSIWSCAN, &iwr) < 0) {
1055 if (drv->scan_complete_events) {
1065 eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv->ctx);
1066 eloop_register_timeout(timeout, 0, wpa_driver_wext_scan_timeout, drv,
1067 drv->ctx);
1073 static u8 * wpa_driver_wext_giwscan(struct wpa_driver_wext_data *drv,
1086 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1090 if (ioctl(drv->ioctl_sock, SIOCGIWSCAN, &iwr) == 0)
1200 static void wext_get_scan_qual(struct wpa_driver_wext_data *drv,
1217 (iwe->u.qual.level > drv->max_level))) {
1350 static int wext_19_iw_point(struct wpa_driver_wext_data *drv, u16 cmd)
1352 return drv->we_version_compiled > 18 &&
1433 struct wpa_driver_wext_data *drv = priv;
1442 res_buf = wpa_driver_wext_giwscan(drv, &len);
1466 if (wext_19_iw_point(drv, iwe->cmd)) {
1497 wext_get_scan_qual(drv, iwe, &data);
1530 struct wpa_driver_wext_data *drv = priv;
1546 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1553 if (ioctl(drv->ioctl_sock, SIOCGIWRANGE, &iwr) < 0) {
1564 drv->has_capability = 1;
1565 drv->we_version_compiled = range->we_version_compiled;
1567 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA |
1571 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA2 |
1574 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP40 |
1576 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP128;
1578 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP;
1580 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP;
1582 drv->capa.flags |= WPA_DRIVER_FLAGS_4WAY_HANDSHAKE;
1583 drv->capa.auth = WPA_DRIVER_AUTH_OPEN |
1586 drv->capa.max_scan_ssids = 1;
1590 drv->capa.key_mgmt, drv->capa.enc, drv->capa.flags);
1596 drv->max_level = range->max_qual.level;
1603 static int wpa_driver_wext_set_psk(struct wpa_driver_wext_data *drv,
1612 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE))
1619 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1631 ret = ioctl(drv->ioctl_sock, SIOCSIWENCODEEXT, &iwr);
1646 struct wpa_driver_wext_data *drv = priv;
1661 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1716 if (ioctl(drv->ioctl_sock, SIOCSIWENCODEEXT, &iwr) < 0) {
1764 struct wpa_driver_wext_data *drv = priv;
1773 ret = wpa_driver_wext_set_key_ext(drv, alg, addr, key_idx, set_tx,
1790 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1798 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) {
1805 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1810 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) {
1823 struct wpa_driver_wext_data *drv = priv;
1825 return wpa_driver_wext_set_auth_param(drv,
1834 struct wpa_driver_wext_data *drv = priv;
1836 drv->use_crypt = enabled;
1837 return wpa_driver_wext_set_auth_param(drv, IW_AUTH_DROP_UNENCRYPTED,
1842 static int wpa_driver_wext_mlme(struct wpa_driver_wext_data *drv,
1850 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1859 if (ioctl(drv->ioctl_sock, SIOCSIWMLME, &iwr) < 0) {
1868 static void wpa_driver_wext_disconnect(struct wpa_driver_wext_data *drv)
1883 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1884 if (ioctl(drv->ioctl_sock, SIOCGIWMODE, &iwr) < 0) {
1891 if (wpa_driver_wext_set_bssid(drv, null_bssid) < 0) {
1897 if (drv->cfg80211) {
1903 if (wpa_driver_wext_set_ssid(drv, (u8 *) "", 0) < 0) {
1918 if (wpa_driver_wext_set_ssid(drv, ssid, 32) < 0) {
1930 struct wpa_driver_wext_data *drv = priv;
1933 ret = wpa_driver_wext_mlme(drv, addr, IW_MLME_DEAUTH, reason_code);
1934 wpa_driver_wext_disconnect(drv);
1942 struct wpa_driver_wext_data *drv = priv;
1947 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1951 if (ioctl(drv->ioctl_sock, SIOCSIWGENIE, &iwr) < 0) {
1994 wpa_driver_wext_auth_alg_fallback(struct wpa_driver_wext_data *drv,
2004 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2019 if (!drv->use_crypt) {
2028 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) {
2040 struct wpa_driver_wext_data *drv = priv;
2047 if (drv->cfg80211) {
2052 wpa_driver_wext_set_ssid(drv, (u8 *) "", 0);
2055 if (wpa_driver_wext_set_drop_unencrypted(drv, params->drop_unencrypted)
2058 if (wpa_driver_wext_set_auth_alg(drv, params->auth_alg) < 0)
2060 if (wpa_driver_wext_set_mode(drv, params->mode) < 0)
2067 if (drv->auth_alg_fallback &&
2068 wpa_driver_wext_auth_alg_fallback(drv, params) < 0)
2072 wpa_driver_wext_set_bssid(drv, NULL) < 0)
2078 if (wpa_driver_wext_set_gen_ie(drv, params->wpa_ie, params->wpa_ie_len)
2087 if (wpa_driver_wext_set_auth_param(drv,
2091 if (wpa_driver_wext_set_auth_param(drv,
2095 if (wpa_driver_wext_set_auth_param(drv,
2099 if (wpa_driver_wext_set_auth_param(drv,
2106 if (wpa_driver_wext_set_auth_param(drv,
2119 if (wpa_driver_wext_set_psk(drv, params->psk) < 0)
2121 if (wpa_driver_wext_set_auth_param(drv,
2137 if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_MFP, value) < 0)
2140 if (params->freq && wpa_driver_wext_set_freq(drv, params->freq) < 0)
2142 if (!drv->cfg80211 &&
2143 wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)
2146 wpa_driver_wext_set_bssid(drv, params->bssid) < 0)
2148 if (drv->cfg80211 &&
2149 wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)
2158 struct wpa_driver_wext_data *drv = priv;
2172 res = wpa_driver_wext_set_auth_param(drv, IW_AUTH_80211_AUTH_ALG,
2174 drv->auth_alg_fallback = res == -2;
2187 struct wpa_driver_wext_data *drv = priv;
2193 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2195 if (ioctl(drv->ioctl_sock, SIOCSIWMODE, &iwr) == 0) {
2209 if (ioctl(drv->ioctl_sock, SIOCGIWMODE, &iwr) < 0) {
2219 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 0) == 0) {
2222 if (ioctl(drv->ioctl_sock, SIOCSIWMODE, &iwr) < 0)
2227 (void) linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1);
2235 static int wpa_driver_wext_pmksa(struct wpa_driver_wext_data *drv,
2243 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2254 if (ioctl(drv->ioctl_sock, SIOCSIWPMKSA, &iwr) < 0) {
2267 struct wpa_driver_wext_data *drv = priv;
2268 return wpa_driver_wext_pmksa(drv, IW_PMKSA_ADD, bssid, pmkid);
2275 struct wpa_driver_wext_data *drv = priv;
2276 return wpa_driver_wext_pmksa(drv, IW_PMKSA_REMOVE, bssid, pmkid);
2282 struct wpa_driver_wext_data *drv = priv;
2283 return wpa_driver_wext_pmksa(drv, IW_PMKSA_FLUSH, NULL, NULL);
2289 struct wpa_driver_wext_data *drv = priv;
2290 if (!drv->has_capability)
2292 os_memcpy(capa, &drv->capa, sizeof(*capa));
2297 int wpa_driver_wext_alternative_ifindex(struct wpa_driver_wext_data *drv,
2301 drv->ifindex2 = -1;
2305 drv->ifindex2 = if_nametoindex(ifname);
2306 if (drv->ifindex2 <= 0)
2310 "wireless events", drv->ifindex2, ifname);
2318 struct wpa_driver_wext_data *drv = priv;
2321 __func__, drv->operstate, state, state ? "UP" : "DORMANT");
2322 drv->operstate = state;
2323 return netlink_send_oper_ifla(drv->netlink, drv->ifindex, -1,
2328 int wpa_driver_wext_get_version(struct wpa_driver_wext_data *drv)
2330 return drv->we_version_compiled;
2336 struct wpa_driver_wext_data *drv = priv;
2337 return drv->phyname;
2343 static int android_wext_cmd(struct wpa_driver_wext_data *drv, const char *cmd)
2350 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2358 ret = ioctl(drv->ioctl_sock, SIOCSIWPRIV, &iwr);
2363 drv->errors++;
2364 if (drv->errors > DRV_NUMBER_SEQUENTIAL_ERRORS) {
2365 drv->errors = 0;
2366 wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE
2372 drv->errors = 0;
2380 struct wpa_driver_wext_data *drv = priv;
2430 os_strncpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2434 ret = ioctl(drv->ioctl_sock, SIOCSIWPRIV, &iwr);
2438 drv->errors++;
2439 if (drv->errors > DRV_NUMBER_SEQUENTIAL_ERRORS) {
2440 drv->errors = 0;
2441 wpa_msg(drv->ctx, MSG_INFO,
2447 drv->errors = 0;
2448 drv->bgscan_enabled = 1;
2450 return android_wext_cmd(drv, "PNOFORCE 1");
2456 struct wpa_driver_wext_data *drv = priv;
2457 drv->bgscan_enabled = 0;
2458 return android_wext_cmd(drv, "PNOFORCE 0");