Lines Matching defs: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) {
321 struct wpa_driver_wext_data *drv, const char *ev, size_t len)
341 wpa_supplicant_event(drv->ctx, EVENT_PMKID_CANDIDATE, &data);
348 struct wpa_driver_wext_data *drv, const char *ev, int len)
355 os_free(drv->assoc_req_ies);
356 drv->assoc_req_ies = os_memdup(ev, len);
357 if (drv->assoc_req_ies == NULL) {
358 drv->assoc_req_ies_len = 0;
361 drv->assoc_req_ies_len = len;
368 struct wpa_driver_wext_data *drv, const char *ev, int len)
375 os_free(drv->assoc_resp_ies);
376 drv->assoc_resp_ies = os_memdup(ev, len);
377 if (drv->assoc_resp_ies == NULL) {
378 drv->assoc_resp_ies_len = 0;
381 drv->assoc_resp_ies_len = len;
387 static void wpa_driver_wext_event_assoc_ies(struct wpa_driver_wext_data *drv)
391 if (drv->assoc_req_ies == NULL && drv->assoc_resp_ies == NULL)
395 if (drv->assoc_req_ies) {
396 data.assoc_info.req_ies = drv->assoc_req_ies;
397 data.assoc_info.req_ies_len = drv->assoc_req_ies_len;
399 if (drv->assoc_resp_ies) {
400 data.assoc_info.resp_ies = drv->assoc_resp_ies;
401 data.assoc_info.resp_ies_len = drv->assoc_resp_ies_len;
404 wpa_supplicant_event(drv->ctx, EVENT_ASSOCINFO, &data);
406 os_free(drv->assoc_req_ies);
407 drv->assoc_req_ies = NULL;
408 os_free(drv->assoc_resp_ies);
409 drv->assoc_resp_ies = NULL;
413 static void wpa_driver_wext_event_wireless(struct wpa_driver_wext_data *drv,
432 if (drv->we_version_compiled > 18 &&
459 os_free(drv->assoc_req_ies);
460 drv->assoc_req_ies = NULL;
461 os_free(drv->assoc_resp_ies);
462 drv->assoc_resp_ies = NULL;
463 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC,
467 wpa_driver_wext_event_assoc_ies(drv);
468 wpa_supplicant_event(drv->ctx, EVENT_ASSOC,
479 drv->ctx, custom, iwe->u.data.length);
490 wpa_driver_wext_event_wireless_custom(drv->ctx, buf);
494 drv->scan_complete_events = 1;
496 drv, drv->ctx);
497 wpa_supplicant_event(drv->ctx, EVENT_SCAN_RESULTS,
507 drv, custom, iwe->u.data.length);
516 drv, custom, iwe->u.data.length);
525 drv, custom, iwe->u.data.length);
534 static void wpa_driver_wext_event_link(struct wpa_driver_wext_data *drv,
551 if (os_strcmp(drv->ifname, event.interface_status.ifname) == 0) {
553 if (drv->if_removed) {
558 drv->if_removed = 1;
560 if (if_nametoindex(drv->ifname) == 0) {
564 drv->ifname);
567 if (!drv->if_removed) {
572 drv->if_removed = 0;
576 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event);
580 static int wpa_driver_wext_own_ifname(struct wpa_driver_wext_data *drv,
592 if (os_strcmp(((char *) attr) + rta_len, drv->ifname)
605 static int wpa_driver_wext_own_ifindex(struct wpa_driver_wext_data *drv,
608 if (drv->ifindex == ifindex || drv->ifindex2 == ifindex)
611 if (drv->if_removed && wpa_driver_wext_own_ifname(drv, buf, len)) {
612 drv->ifindex = if_nametoindex(drv->ifname);
615 wpa_driver_wext_finish_drv_init(drv);
626 struct wpa_driver_wext_data *drv = ctx;
631 if (!wpa_driver_wext_own_ifindex(drv, ifi->ifi_index, buf, len)) {
639 drv->operstate, ifi->ifi_flags,
645 if (!drv->if_disabled && !(ifi->ifi_flags & IFF_UP)) {
647 drv->if_disabled = 1;
648 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_DISABLED, NULL);
651 if (drv->if_disabled && (ifi->ifi_flags & IFF_UP)) {
653 linux_iface_up(drv->ioctl_sock, drv->ifname) == 0) {
657 } else if (if_nametoindex(drv->ifname) == 0) {
660 drv->ifname);
661 } else if (drv->if_removed) {
664 "removed", drv->ifname);
667 drv->if_disabled = 0;
668 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_ENABLED,
679 if (drv->operstate == 1 &&
682 netlink_send_oper_ifla(drv->netlink, drv->ifindex,
692 drv, ((char *) attr) + rta_len,
695 wpa_driver_wext_event_link(drv,
707 struct wpa_driver_wext_data *drv = ctx;
717 wpa_driver_wext_event_link(drv,
738 struct wpa_driver_wext_data *drv = ctx;
740 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1)) {
749 static void wext_get_phy_name(struct wpa_driver_wext_data *drv)
755 drv->phyname[0] = '\0';
757 drv->ifname);
765 rv = read(f, drv->phyname, sizeof(drv->phyname) - 1);
773 drv->phyname[rv] = '\0';
774 pos = os_strchr(drv->phyname, '\n');
778 drv->ifname, drv->phyname);
791 struct wpa_driver_wext_data *drv;
797 drv = os_zalloc(sizeof(*drv));
798 if (drv == NULL)
800 drv->ctx = ctx;
801 os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname));
806 drv->cfg80211 = 1;
807 wext_get_phy_name(drv);
810 drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
811 if (drv->ioctl_sock < 0) {
820 cfg->ctx = drv;
823 drv->netlink = netlink_init(cfg);
824 if (drv->netlink == NULL) {
832 rcfg->ctx = drv;
836 drv->rfkill = rfkill_init(rcfg);
837 if (drv->rfkill == NULL) {
842 drv->mlme_sock = -1;
844 if (wpa_driver_wext_finish_drv_init(drv) < 0)
847 wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_ENABLED, 1);
849 return drv;
852 rfkill_deinit(drv->rfkill);
853 netlink_deinit(drv->netlink);
855 close(drv->ioctl_sock);
857 os_free(drv);
868 static int wext_hostap_ifname(struct wpa_driver_wext_data *drv,
879 drv->ifname, ifname);
896 wpa_driver_wext_alternative_ifindex(drv, ifname);
903 static int wext_add_hostap(struct wpa_driver_wext_data *drv)
910 snprintf(buf, sizeof(buf), "/sys/class/net/%s/device/net", drv->ifname);
916 if (ret < 0 && wext_hostap_ifname(drv, names[n]->d_name) == 0)
926 static void wext_check_hostap(struct wpa_driver_wext_data *drv)
944 drv->ifname);
955 wext_add_hostap(drv) == 0)
960 if (os_strncmp(drv->ifname, "wlan", 4) == 0) {
962 os_strlcpy(ifname2, drv->ifname, sizeof(ifname2));
964 wpa_driver_wext_alternative_ifindex(drv, ifname2);
969 static int wpa_driver_wext_finish_drv_init(struct wpa_driver_wext_data *drv)
974 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1) < 0) {
975 if (rfkill_is_blocked(drv->rfkill)) {
978 drv->ifname);
979 drv->if_disabled = 1;
983 "interface '%s' UP", drv->ifname);
991 wpa_driver_wext_flush_pmkid(drv);
993 if (wpa_driver_wext_set_mode(drv, 0) < 0) {
999 wpa_driver_wext_get_range(drv);
1003 drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt;
1010 wpa_driver_wext_disconnect(drv);
1012 drv->ifindex = if_nametoindex(drv->ifname);
1014 wext_check_hostap(drv);
1016 netlink_send_oper_ifla(drv->netlink, drv->ifindex,
1021 drv, drv->ctx);
1037 struct wpa_driver_wext_data *drv = priv;
1039 wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_ENABLED, 0);
1041 eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv->ctx);
1042 eloop_cancel_timeout(wpa_driver_wext_send_rfkill, drv, drv->ctx);
1048 wpa_driver_wext_disconnect(drv);
1050 netlink_send_oper_ifla(drv->netlink, drv->ifindex, 0, IF_OPER_UP);
1051 netlink_deinit(drv->netlink);
1052 rfkill_deinit(drv->rfkill);
1054 if (drv->mlme_sock >= 0)
1055 eloop_unregister_read_sock(drv->mlme_sock);
1057 (void) linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 0);
1059 close(drv->ioctl_sock);
1060 if (drv->mlme_sock >= 0)
1061 close(drv->mlme_sock);
1062 os_free(drv->assoc_req_ies);
1063 os_free(drv->assoc_resp_ies);
1064 os_free(drv);
1091 struct wpa_driver_wext_data *drv = priv;
1105 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1118 if (ioctl(drv->ioctl_sock, SIOCSIWSCAN, &iwr) < 0) {
1127 if (drv->scan_complete_events) {
1137 eloop_cancel_timeout(wpa_driver_wext_scan_timeout, drv, drv->ctx);
1138 eloop_register_timeout(timeout, 0, wpa_driver_wext_scan_timeout, drv,
1139 drv->ctx);
1145 static u8 * wpa_driver_wext_giwscan(struct wpa_driver_wext_data *drv,
1158 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1162 if (ioctl(drv->ioctl_sock, SIOCGIWSCAN, &iwr) == 0)
1273 static void wext_get_scan_qual(struct wpa_driver_wext_data *drv,
1290 (iwe->u.qual.level > drv->max_level))) {
1423 static int wext_19_iw_point(struct wpa_driver_wext_data *drv, u16 cmd)
1425 return drv->we_version_compiled > 18 &&
1506 struct wpa_driver_wext_data *drv = priv;
1515 res_buf = wpa_driver_wext_giwscan(drv, &len);
1539 if (wext_19_iw_point(drv, iwe->cmd)) {
1570 wext_get_scan_qual(drv, iwe, &data);
1603 struct wpa_driver_wext_data *drv = priv;
1619 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1626 if (ioctl(drv->ioctl_sock, SIOCGIWRANGE, &iwr) < 0) {
1638 drv->has_capability = 1;
1639 drv->we_version_compiled = range->we_version_compiled;
1641 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA |
1645 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA2 |
1648 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP40 |
1650 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP128;
1652 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP;
1654 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP;
1656 drv->capa.flags |= WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK |
1658 drv->capa.auth = WPA_DRIVER_AUTH_OPEN |
1661 drv->capa.max_scan_ssids = 1;
1665 drv->capa.key_mgmt, drv->capa.enc,
1666 (unsigned long long) drv->capa.flags);
1672 drv->max_level = range->max_qual.level;
1679 static int wpa_driver_wext_set_psk(struct wpa_driver_wext_data *drv,
1688 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X))
1695 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1707 ret = ioctl(drv->ioctl_sock, SIOCSIWENCODEEXT, &iwr);
1724 struct wpa_driver_wext_data *drv = priv;
1739 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1793 if (ioctl(drv->ioctl_sock, SIOCSIWENCODEEXT, &iwr) < 0) {
1823 struct wpa_driver_wext_data *drv = priv;
1841 ret = wpa_driver_wext_set_key_ext(drv, alg, addr, key_idx, set_tx,
1858 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1866 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) {
1874 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1879 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) {
1894 struct wpa_driver_wext_data *drv = priv;
1896 return wpa_driver_wext_set_auth_param(drv,
1905 struct wpa_driver_wext_data *drv = priv;
1907 drv->use_crypt = enabled;
1908 return wpa_driver_wext_set_auth_param(drv, IW_AUTH_DROP_UNENCRYPTED,
1913 static int wpa_driver_wext_mlme(struct wpa_driver_wext_data *drv,
1921 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1930 if (ioctl(drv->ioctl_sock, SIOCSIWMLME, &iwr) < 0) {
1940 static void wpa_driver_wext_disconnect(struct wpa_driver_wext_data *drv)
1953 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
1954 if (ioctl(drv->ioctl_sock, SIOCGIWMODE, &iwr) < 0) {
1962 if (wpa_driver_wext_set_bssid(drv, null_bssid) < 0) {
1967 if (drv->cfg80211) {
1973 if (wpa_driver_wext_set_ssid(drv, (u8 *) "", 0) < 0) {
1988 if (wpa_driver_wext_set_ssid(drv, ssid, SSID_MAX_LEN) < 0) {
1999 struct wpa_driver_wext_data *drv = priv;
2002 ret = wpa_driver_wext_mlme(drv, addr, IW_MLME_DEAUTH, reason_code);
2003 wpa_driver_wext_disconnect(drv);
2011 struct wpa_driver_wext_data *drv = priv;
2016 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2020 if (ioctl(drv->ioctl_sock, SIOCSIWGENIE, &iwr) < 0) {
2064 wpa_driver_wext_auth_alg_fallback(struct wpa_driver_wext_data *drv,
2074 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2089 if (!drv->use_crypt) {
2098 if (ioctl(drv->ioctl_sock, SIOCSIWENCODE, &iwr) < 0) {
2111 struct wpa_driver_wext_data *drv = priv;
2118 if (drv->cfg80211) {
2123 if (wpa_driver_wext_set_ssid(drv, (u8 *) "", 0) < 0) {
2130 if (wpa_driver_wext_set_drop_unencrypted(drv, params->drop_unencrypted)
2133 if (wpa_driver_wext_set_auth_alg(drv, params->auth_alg) < 0)
2135 if (wpa_driver_wext_set_mode(drv, params->mode) < 0)
2142 if (drv->auth_alg_fallback &&
2143 wpa_driver_wext_auth_alg_fallback(drv, params) < 0)
2147 wpa_driver_wext_set_bssid(drv, NULL) < 0)
2153 if (wpa_driver_wext_set_gen_ie(drv, params->wpa_ie, params->wpa_ie_len)
2162 if (wpa_driver_wext_set_auth_param(drv,
2166 if (wpa_driver_wext_set_auth_param(drv,
2170 if (wpa_driver_wext_set_auth_param(drv,
2174 if (wpa_driver_wext_set_auth_param(drv,
2181 if (wpa_driver_wext_set_auth_param(drv,
2194 if (wpa_driver_wext_set_psk(drv, params->psk) < 0)
2196 if (wpa_driver_wext_set_auth_param(drv,
2211 if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_MFP, value) < 0)
2214 wpa_driver_wext_set_freq(drv, params->freq.freq) < 0)
2216 if (!drv->cfg80211 &&
2217 wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)
2220 wpa_driver_wext_set_bssid(drv, params->bssid) < 0)
2222 if (drv->cfg80211 &&
2223 wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)
2232 struct wpa_driver_wext_data *drv = priv;
2246 res = wpa_driver_wext_set_auth_param(drv, IW_AUTH_80211_AUTH_ALG,
2248 drv->auth_alg_fallback = res == -2;
2261 struct wpa_driver_wext_data *drv = priv;
2267 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2269 if (ioctl(drv->ioctl_sock, SIOCSIWMODE, &iwr) == 0) {
2284 if (ioctl(drv->ioctl_sock, SIOCGIWMODE, &iwr) < 0) {
2295 if (linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 0) == 0) {
2298 if (ioctl(drv->ioctl_sock, SIOCSIWMODE, &iwr) < 0)
2304 (void) linux_set_iface_flags(drv->ioctl_sock, drv->ifname, 1);
2312 static int wpa_driver_wext_pmksa(struct wpa_driver_wext_data *drv,
2320 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2331 if (ioctl(drv->ioctl_sock, SIOCSIWPMKSA, &iwr) < 0) {
2345 struct wpa_driver_wext_data *drv = priv;
2346 return wpa_driver_wext_pmksa(drv, IW_PMKSA_ADD, params->bssid,
2354 struct wpa_driver_wext_data *drv = priv;
2355 return wpa_driver_wext_pmksa(drv, IW_PMKSA_REMOVE, params->bssid,
2362 struct wpa_driver_wext_data *drv = priv;
2363 return wpa_driver_wext_pmksa(drv, IW_PMKSA_FLUSH, NULL, NULL);
2369 struct wpa_driver_wext_data *drv = priv;
2370 if (!drv->has_capability)
2372 os_memcpy(capa, &drv->capa, sizeof(*capa));
2377 int wpa_driver_wext_alternative_ifindex(struct wpa_driver_wext_data *drv,
2381 drv->ifindex2 = -1;
2385 drv->ifindex2 = if_nametoindex(ifname);
2386 if (drv->ifindex2 <= 0)
2390 "wireless events", drv->ifindex2, ifname);
2398 struct wpa_driver_wext_data *drv = priv;
2401 __func__, drv->operstate, state, state ? "UP" : "DORMANT");
2402 drv->operstate = state;
2403 return netlink_send_oper_ifla(drv->netlink, drv->ifindex, -1,
2408 int wpa_driver_wext_get_version(struct wpa_driver_wext_data *drv)
2410 return drv->we_version_compiled;
2416 struct wpa_driver_wext_data *drv = priv;
2417 return drv->phyname;
2423 struct wpa_driver_wext_data *drv = priv;
2433 os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
2438 if (ioctl(drv->ioctl_sock, SIOCGIWSTATS, &iwr) < 0) {
2454 struct wpa_driver_wext_data *drv = priv;
2462 if (linux_get_ifhwaddr(drv->ioctl_sock, drv->ifname, addr))
2469 drv->ifindex,
2470 drv->ifname,