Home | History | Annotate | Download | only in drivers

Lines Matching refs:drv

37 static int wpa_driver_wext_finish_drv_init(struct wpa_driver_wext_data *drv);
38 static void wpa_driver_wext_disconnect(struct wpa_driver_wext_data *drv);
42 int wpa_driver_wext_set_auth_param(struct wpa_driver_wext_data *drv,
49 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
53 if (ioctl(drv->ioctl_sock, SIOCSIWAUTH, &iwr) < 0) {
74 struct wpa_driver_wext_data *drv = priv;
79 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
81 if (ioctl(drv->ioctl_sock, SIOCGIWAP, &iwr) < 0) {
99 struct wpa_driver_wext_data *drv = priv;
104 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
111 if (ioctl(drv->ioctl_sock, SIOCSIWAP, &iwr) < 0) {
128 struct wpa_driver_wext_data *drv = priv;
133 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
137 if (ioctl(drv->ioctl_sock, SIOCGIWESSID, &iwr) < 0) {
150 drv->we_version_compiled < 21)
167 struct wpa_driver_wext_data *drv = priv;
176 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
182 if (drv->we_version_compiled < 21) {
196 if (ioctl(drv->ioctl_sock, SIOCSIWESSID, &iwr) < 0) {
214 struct wpa_driver_wext_data *drv = priv;
219 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
223 if (ioctl(drv->ioctl_sock, SIOCSIWFREQ, &iwr) < 0) {
330 struct wpa_driver_wext_data *drv, const char *ev, size_t len)
350 wpa_supplicant_event(drv->ctx, EVENT_PMKID_CANDIDATE, &data);
357 struct wpa_driver_wext_data *drv, const char *ev, int len)
364 os_free(drv->assoc_req_ies);
365 drv->assoc_req_ies = os_malloc(len);
366 if (drv->assoc_req_ies == NULL) {
367 drv->assoc_req_ies_len = 0;
370 os_memcpy(drv->assoc_req_ies, ev, len);
371 drv->assoc_req_ies_len = len;
378 struct wpa_driver_wext_data *drv, const char *ev, int len)
385 os_free(drv->assoc_resp_ies);
386 drv->assoc_resp_ies = os_malloc(len);
387 if (drv->assoc_resp_ies == NULL) {
388 drv->assoc_resp_ies_len = 0;
391 os_memcpy(drv->assoc_resp_ies, ev, len);
392 drv->assoc_resp_ies_len = len;
398 static void wpa_driver_wext_event_assoc_ies(struct wpa_driver_wext_data *drv)
402 if (drv->assoc_req_ies == NULL && drv->assoc_resp_ies == NULL)
406 if (drv->assoc_req_ies) {
407 data.assoc_info.req_ies = drv->assoc_req_ies;
408 data.assoc_info.req_ies_len = drv->assoc_req_ies_len;
410 if (drv->assoc_resp_ies) {
411 data.assoc_info.resp_ies = drv->assoc_resp_ies;
412 data.assoc_info.resp_ies_len = drv->assoc_resp_ies_len;
415 wpa_supplicant_event(drv->ctx, EVENT_ASSOCINFO, &data);
417 os_free(drv->assoc_req_ies);
418 drv->assoc_req_ies = NULL;
419 os_free(drv->assoc_resp_ies);
420 drv->assoc_resp_ies = NULL;
424 static void wpa_driver_wext_event_wireless(struct wpa_driver_wext_data *drv,
443 if (drv->we_version_compiled > 18 &&
469 os_free(drv->assoc_req_ies);
470 drv->assoc_req_ies = NULL;
471 os_free(drv->assoc_resp_ies);
472 drv->assoc_resp_ies = NULL;
473 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC,
477 wpa_driver_wext_event_assoc_ies(drv);
478 wpa_supplicant_event(drv->ctx, EVENT_ASSOC,
489 drv->ctx, custom, iwe->u.data.length);
500 wpa_driver_wext_event_wireless_custom(drv->ctx, buf);
504 drv->scan_complete_events = 1;
506 drv, drv->ctx);
507 wpa_supplicant_event(drv->ctx, EVENT_SCAN_RESULTS,
517 drv, custom, iwe->u.data.length);
526 drv, custom, iwe->u.data.length);
535 drv, custom, iwe->u.data.length);
544 static void wpa_driver_wext_event_link(struct wpa_driver_wext_data *drv,
561 if (os_strcmp(drv->ifname, event.interface_status.ifname) == 0) {
563 if (drv->if_removed) {
568 drv->if_removed = 1;
570 if (if_nametoindex(drv->ifname) == 0) {
574 drv->ifname);
577 if (!drv->if_removed) {
582 drv->if_removed = 0;
586 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event);
590 static int wpa_driver_wext_own_ifname(struct wpa_driver_wext_data *drv,
602 if (os_strcmp(((char *) attr) + rta_len, drv->ifname)
615 drv,
618 if (drv->ifindex == ifindex || drv->ifindex2 == ifindex)
621 if (drv->if_removed && wpa_driver_wext_own_ifname(drv, buf, len)) {
622 drv->ifindex = if_nametoindex(drv->ifname);
625 wpa_driver_wext_finish_drv_init(drv);
636 struct wpa_driver_wext_data *drv = ctx;
641 if (!wpa_driver_wext_own_ifindex(drv, ifi->ifi_index, buf, len)) {
649 drv->operstate, ifi->ifi_flags,
655 if (!drv->if_disabled && !(ifi->ifi_flags & IFF_UP)) {
657 drv->if_disabled = 1;
658 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_DISABLED, NULL);
661 if (drv->if_disabled && (ifi->ifi_flags & IFF_UP)) {
663 linux_iface_up(drv->ioctl_sock, drv->ifname) == 0) {
667 } else if (if_nametoindex(drv->ifname) == 0) {
670 drv->ifname);
671 } else if (drv->if_removed) {
674 "removed", drv->ifname);
677 drv->if_disabled = 0;
678 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_ENABLED,
689 if (drv->operstate == 1 &&
692 netlink_send_oper_ifla(drv->netlink, drv->ifindex,
702 drv, ((char *) attr) + rta_len,
705 wpa_driver_wext_event_link(drv,
717 struct wpa_driver_wext_data *drv = ctx;
727 wpa_driver_wext_event_link(drv,
748 struct wpa_driver_wext_data *drv = ctx;
750 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1)) {
759 static void wext_get_phy_name(struct wpa_driver_wext_data *drv)
765 drv->phyname[0] = '\0';
767 drv->ifname);
775 rv = read(f, drv->phyname, sizeof(drv->phyname) - 1);
783 drv->phyname[rv] = '\0';
784 pos = os_strchr(drv->phyname, '\n');
788 drv->ifname, drv->phyname);
801 struct wpa_driver_wext_data *drv;
807 drv = os_zalloc(sizeof(*drv));
808 if (drv == NULL)
810 drv->ctx = ctx;
811 os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname));
816 drv->cfg80211 = 1;
817 wext_get_phy_name(drv);
820 drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
821 if (drv->ioctl_sock < 0) {
830 cfg->ctx = drv;
833 drv->netlink = netlink_init(cfg);
834 if (drv->netlink == NULL) {
842 rcfg->ctx = drv;
846 drv->rfkill = rfkill_init(rcfg);
847 if (drv->rfkill == NULL) {
852 drv->mlme_sock = -1;
854 if (wpa_driver_wext_finish_drv_init(drv) < 0)
857 wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_ENABLED, 1);
859 return drv;
862 rfkill_deinit(drv->rfkill);
863 netlink_deinit(drv->netlink);
865 close(drv->ioctl_sock);
867 os_free(drv);
878 static int wext_hostap_ifname(struct wpa_driver_wext_data *drv,
889 drv->ifname, ifname);
904 wpa_driver_wext_alternative_ifindex(drv, ifname);
911 static int wext_add_hostap(struct wpa_driver_wext_data *drv)
918 snprintf(buf, sizeof(buf), "/sys/class/net/%s/device/net", drv->ifname);
924 if (ret < 0 && wext_hostap_ifname(drv, names[n]->d_name) == 0)
934 static void wext_check_hostap(struct wpa_driver_wext_data *drv)
952 drv->ifname);
963 wext_add_hostap(drv) == 0)
968 if (os_strncmp(drv->ifname, "wlan", 4) == 0) {
970 os_strlcpy(ifname2, drv->ifname, sizeof(ifname2));
972 wpa_driver_wext_alternative_ifindex(drv, ifname2);
977 static int wpa_driver_wext_finish_drv_init(struct wpa_driver_wext_data *drv)
981 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1) < 0) {
982 if (rfkill_is_blocked(drv->rfkill)) {
985 drv->ifname);
986 drv->if_disabled = 1;
990 "interface '%s' UP", drv->ifname);
998 wpa_driver_wext_flush_pmkid(drv);
1000 if (wpa_driver_wext_set_mode(drv, 0) < 0) {
1006 wpa_driver_wext_get_range(drv);
1013 wpa_driver_wext_disconnect(drv);
1015 drv->ifindex = if_nametoindex(drv->ifname);
1017 wext_check_hostap(drv);
1019 netlink_send_oper_ifla(drv->netlink, drv->ifindex,
1024 drv, drv->ctx);
1040 struct wpa_driver_wext_data *drv = priv;
1042 wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_ENABLED, 0);
1044 eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv->ctx);
1045 eloop_cancel_timeout(wpa_driver_wext_send_rfkill, drv, drv->ctx);
1051 wpa_driver_wext_disconnect(drv);
1053 netlink_send_oper_ifla(drv->netlink, drv->ifindex, 0, IF_OPER_UP);
1054 netlink_deinit(drv->netlink);
1055 rfkill_deinit(drv->rfkill);
1057 if (drv->mlme_sock >= 0)
1058 eloop_unregister_read_sock(drv->mlme_sock);
1060 (void) linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 0);
1062 close(drv->ioctl_sock);
1063 if (drv->mlme_sock >= 0)
1064 close(drv->mlme_sock);
1065 os_free(drv->assoc_req_ies);
1066 os_free(drv->assoc_resp_ies);
1067 os_free(drv);
1094 struct wpa_driver_wext_data *drv = priv;
1108 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1121 if (ioctl(drv->ioctl_sock, SIOCSIWSCAN, &iwr) < 0) {
1130 if (drv->scan_complete_events) {
1140 eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv->ctx);
1141 eloop_register_timeout(timeout, 0, wpa_driver_wext_scan_timeout, drv,
1142 drv->ctx);
1148 static u8 * wpa_driver_wext_giwscan(struct wpa_driver_wext_data *drv,
1161 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1165 if (ioctl(drv->ioctl_sock, SIOCGIWSCAN, &iwr) == 0)
1276 static void wext_get_scan_qual(struct wpa_driver_wext_data *drv,
1293 (iwe->u.qual.level > drv->max_level))) {
1426 static int wext_19_iw_point(struct wpa_driver_wext_data *drv, u16 cmd)
1428 return drv->we_version_compiled > 18 &&
1509 struct wpa_driver_wext_data *drv = priv;
1518 res_buf = wpa_driver_wext_giwscan(drv, &len);
1542 if (wext_19_iw_point(drv, iwe->cmd)) {
1573 wext_get_scan_qual(drv, iwe, &data);
1606 struct wpa_driver_wext_data *drv = priv;
1622 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1629 if (ioctl(drv->ioctl_sock, SIOCGIWRANGE, &iwr) < 0) {
1641 drv->has_capability = 1;
1642 drv->we_version_compiled = range->we_version_compiled;
1644 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA |
1648 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA2 |
1651 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP40 |
1653 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP128;
1655 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP;
1657 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP;
1659 drv->capa.flags |= WPA_DRIVER_FLAGS_4WAY_HANDSHAKE;
1660 drv->capa.auth = WPA_DRIVER_AUTH_OPEN |
1663 drv->capa.max_scan_ssids = 1;
1667 drv->capa.key_mgmt, drv->capa.enc,
1668 (unsigned long long) drv->capa.flags);
1674 drv->max_level = range->max_qual.level;
1681 static int wpa_driver_wext_set_psk(struct wpa_driver_wext_data *drv,
1690 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE))
1697 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1709 ret = ioctl(drv->ioctl_sock, SIOCSIWENCODEEXT, &iwr);
1725 struct wpa_driver_wext_data *drv = priv;
1740 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1795 if (ioctl(drv->ioctl_sock, SIOCSIWENCODEEXT, &iwr) < 0) {
1844 struct wpa_driver_wext_data *drv = priv;
1853 ret = wpa_driver_wext_set_key_ext(drv, alg, addr, key_idx, set_tx,
1870 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1878 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) {
1886 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1891 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) {
1906 struct wpa_driver_wext_data *drv = priv;
1908 return wpa_driver_wext_set_auth_param(drv,
1917 struct wpa_driver_wext_data *drv = priv;
1919 drv->use_crypt = enabled;
1920 return wpa_driver_wext_set_auth_param(drv, IW_AUTH_DROP_UNENCRYPTED,
1925 static int wpa_driver_wext_mlme(struct wpa_driver_wext_data *drv,
1933 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1942 if (ioctl(drv->ioctl_sock, SIOCSIWMLME, &iwr) < 0) {
1952 static void wpa_driver_wext_disconnect(struct wpa_driver_wext_data *drv)
1965 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1966 if (ioctl(drv->ioctl_sock, SIOCGIWMODE, &iwr) < 0) {
1974 if (wpa_driver_wext_set_bssid(drv, null_bssid) < 0) {
1979 if (drv->cfg80211) {
1985 if (wpa_driver_wext_set_ssid(drv, (u8 *) "", 0) < 0) {
2000 if (wpa_driver_wext_set_ssid(drv, ssid, SSID_MAX_LEN) < 0) {
2011 struct wpa_driver_wext_data *drv = priv;
2014 ret = wpa_driver_wext_mlme(drv, addr, IW_MLME_DEAUTH, reason_code);
2015 wpa_driver_wext_disconnect(drv);
2023 struct wpa_driver_wext_data *drv = priv;
2028 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2032 if (ioctl(drv->ioctl_sock, SIOCSIWGENIE, &iwr) < 0) {
2076 wpa_driver_wext_auth_alg_fallback(struct wpa_driver_wext_data *drv,
2086 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2101 if (!drv->use_crypt) {
2110 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) {
2123 struct wpa_driver_wext_data *drv = priv;
2130 if (drv->cfg80211) {
2135 if (wpa_driver_wext_set_ssid(drv, (u8 *) "", 0) < 0) {
2142 if (wpa_driver_wext_set_drop_unencrypted(drv, params->drop_unencrypted)
2145 if (wpa_driver_wext_set_auth_alg(drv, params->auth_alg) < 0)
2147 if (wpa_driver_wext_set_mode(drv, params->mode) < 0)
2154 if (drv->auth_alg_fallback &&
2155 wpa_driver_wext_auth_alg_fallback(drv, params) < 0)
2159 wpa_driver_wext_set_bssid(drv, NULL) < 0)
2165 if (wpa_driver_wext_set_gen_ie(drv, params->wpa_ie, params->wpa_ie_len)
2174 if (wpa_driver_wext_set_auth_param(drv,
2178 if (wpa_driver_wext_set_auth_param(drv,
2182 if (wpa_driver_wext_set_auth_param(drv,
2186 if (wpa_driver_wext_set_auth_param(drv,
2193 if (wpa_driver_wext_set_auth_param(drv,
2206 if (wpa_driver_wext_set_psk(drv, params->psk) < 0)
2208 if (wpa_driver_wext_set_auth_param(drv,
2224 if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_MFP, value) < 0)
2228 wpa_driver_wext_set_freq(drv, params->freq.freq) < 0)
2230 if (!drv->cfg80211 &&
2231 wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)
2234 wpa_driver_wext_set_bssid(drv, params->bssid) < 0)
2236 if (drv->cfg80211 &&
2237 wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)
2246 struct wpa_driver_wext_data *drv = priv;
2260 res = wpa_driver_wext_set_auth_param(drv, IW_AUTH_80211_AUTH_ALG,
2262 drv->auth_alg_fallback = res == -2;
2275 struct wpa_driver_wext_data *drv = priv;
2281 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2283 if (ioctl(drv->ioctl_sock, SIOCSIWMODE, &iwr) == 0) {
2298 if (ioctl(drv->ioctl_sock, SIOCGIWMODE, &iwr) < 0) {
2309 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 0) == 0) {
2312 if (ioctl(drv->ioctl_sock, SIOCSIWMODE, &iwr) < 0)
2318 (void) linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1);
2326 static int wpa_driver_wext_pmksa(struct wpa_driver_wext_data *drv,
2334 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2345 if (ioctl(drv->ioctl_sock, SIOCSIWPMKSA, &iwr) < 0) {
2359 struct wpa_driver_wext_data *drv = priv;
2360 return wpa_driver_wext_pmksa(drv, IW_PMKSA_ADD, bssid, pmkid);
2367 struct wpa_driver_wext_data *drv = priv;
2368 return wpa_driver_wext_pmksa(drv, IW_PMKSA_REMOVE, bssid, pmkid);
2374 struct wpa_driver_wext_data *drv = priv;
2375 return wpa_driver_wext_pmksa(drv, IW_PMKSA_FLUSH, NULL, NULL);
2381 struct wpa_driver_wext_data *drv = priv;
2382 if (!drv->has_capability)
2384 os_memcpy(capa, &drv->capa, sizeof(*capa));
2389 int wpa_driver_wext_alternative_ifindex(struct wpa_driver_wext_data *drv,
2393 drv->ifindex2 = -1;
2397 drv->ifindex2 = if_nametoindex(ifname);
2398 if (drv->ifindex2 <= 0)
2402 "wireless events", drv->ifindex2, ifname);
2410 struct wpa_driver_wext_data *drv = priv;
2413 __func__, drv->operstate, state, state ? "UP" : "DORMANT");
2414 drv->operstate = state;
2415 return netlink_send_oper_ifla(drv->netlink, drv->ifindex, -1,
2420 int wpa_driver_wext_get_version(struct wpa_driver_wext_data *drv)
2422 return drv->we_version_compiled;
2428 struct wpa_driver_wext_data *drv = priv;
2429 return drv->phyname;
2435 struct wpa_driver_wext_data *drv = priv;
2445 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2450 if (ioctl(drv->ioctl_sock, SIOCGIWSTATS, &iwr) < 0) {
2466 struct wpa_driver_wext_data *drv = priv;
2474 if (linux_get_ifhwaddr(drv->ioctl_sock, drv->ifname, addr))
2481 drv->ifindex,
2482 drv->ifname,