Lines Matching refs:drv

41 int wpa_driver_register_event_cb(struct wpa_driver_ndis_data *drv);
47 static void wpa_driver_ndis_poll(void *drv);
49 static int wpa_driver_ndis_adapter_init(struct wpa_driver_ndis_data *drv);
50 static int wpa_driver_ndis_adapter_open(struct wpa_driver_ndis_data *drv);
51 static void wpa_driver_ndis_adapter_close(struct wpa_driver_ndis_data *drv);
451 static int ndis_get_oid(struct wpa_driver_ndis_data *drv, unsigned int oid, in ndis_get_oid() argument
466 o->ptcDeviceName = drv->adapter_name; in ndis_get_oid()
468 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_QUERY_OID_VALUE, in ndis_get_oid()
506 if (!PacketRequest(drv->adapter, FALSE, o)) { in ndis_get_oid()
526 static int ndis_set_oid(struct wpa_driver_ndis_data *drv, unsigned int oid, in ndis_set_oid() argument
545 o->ptcDeviceName = drv->adapter_name; in ndis_set_oid()
549 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_SET_OID_VALUE, in ndis_set_oid()
575 if (!PacketRequest(drv->adapter, TRUE, o)) { in ndis_set_oid()
587 static int ndis_set_auth_mode(struct wpa_driver_ndis_data *drv, int mode) in ndis_set_auth_mode() argument
590 if (ndis_set_oid(drv, OID_802_11_AUTHENTICATION_MODE, in ndis_set_auth_mode()
601 static int ndis_get_auth_mode(struct wpa_driver_ndis_data *drv) in ndis_get_auth_mode() argument
605 res = ndis_get_oid(drv, OID_802_11_AUTHENTICATION_MODE, in ndis_get_auth_mode()
616 static int ndis_set_encr_status(struct wpa_driver_ndis_data *drv, int encr) in ndis_set_encr_status() argument
619 if (ndis_set_oid(drv, OID_802_11_ENCRYPTION_STATUS, in ndis_set_encr_status()
629 static int ndis_get_encr_status(struct wpa_driver_ndis_data *drv) in ndis_get_encr_status() argument
633 res = ndis_get_oid(drv, OID_802_11_ENCRYPTION_STATUS, in ndis_get_encr_status()
646 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_get_bssid() local
648 if (drv->wired) { in wpa_driver_ndis_get_bssid()
657 return ndis_get_oid(drv, OID_802_11_BSSID, (char *) bssid, ETH_ALEN) < in wpa_driver_ndis_get_bssid()
664 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_get_ssid() local
668 res = ndis_get_oid(drv, OID_802_11_SSID, (char *) &buf, sizeof(buf)); in wpa_driver_ndis_get_ssid()
671 if (drv->wired) { in wpa_driver_ndis_get_ssid()
683 static int wpa_driver_ndis_set_ssid(struct wpa_driver_ndis_data *drv, in wpa_driver_ndis_set_ssid() argument
696 drv->radio_enabled = 1; in wpa_driver_ndis_set_ssid()
697 return ndis_set_oid(drv, OID_802_11_SSID, (char *) &buf, sizeof(buf)); in wpa_driver_ndis_set_ssid()
703 static int wpa_driver_ndis_radio_off(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_radio_off() argument
705 drv->radio_enabled = 0; in wpa_driver_ndis_radio_off()
706 return ndis_set_oid(drv, OID_802_11_DISASSOCIATE, " ", 4); in wpa_driver_ndis_radio_off()
711 static int wpa_driver_ndis_disconnect(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_disconnect() argument
717 return wpa_driver_ndis_set_ssid(drv, (u8 *) ssid, SSID_MAX_LEN); in wpa_driver_ndis_disconnect()
724 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_deauthenticate() local
725 return wpa_driver_ndis_disconnect(drv); in wpa_driver_ndis_deauthenticate()
737 struct wpa_driver_ndis_data *drv, in wpa_driver_ndis_scan_native80211() argument
747 res = ndis_set_oid(drv, OID_DOT11_SCAN_REQUEST, (char *) &req, in wpa_driver_ndis_scan_native80211()
749 eloop_cancel_timeout(wpa_driver_ndis_scan_timeout, drv, drv->ctx); in wpa_driver_ndis_scan_native80211()
750 eloop_register_timeout(7, 0, wpa_driver_ndis_scan_timeout, drv, in wpa_driver_ndis_scan_native80211()
751 drv->ctx); in wpa_driver_ndis_scan_native80211()
759 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_scan() local
762 if (drv->native80211) in wpa_driver_ndis_scan()
763 return wpa_driver_ndis_scan_native80211(drv, params); in wpa_driver_ndis_scan()
765 if (!drv->radio_enabled) { in wpa_driver_ndis_scan()
768 if (wpa_driver_ndis_disconnect(drv) < 0) { in wpa_driver_ndis_scan()
771 drv->radio_enabled = 1; in wpa_driver_ndis_scan()
774 res = ndis_set_oid(drv, OID_802_11_BSSID_LIST_SCAN, " ", 4); in wpa_driver_ndis_scan()
775 eloop_cancel_timeout(wpa_driver_ndis_scan_timeout, drv, drv->ctx); in wpa_driver_ndis_scan()
776 eloop_register_timeout(7, 0, wpa_driver_ndis_scan_timeout, drv, in wpa_driver_ndis_scan()
777 drv->ctx); in wpa_driver_ndis_scan()
816 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_get_scan_results() local
828 len = ndis_get_oid(drv, OID_802_11_BSSID_LIST, (char *) b, blen); in wpa_driver_ndis_get_scan_results()
902 static int wpa_driver_ndis_remove_key(struct wpa_driver_ndis_data *drv, in wpa_driver_ndis_remove_key() argument
918 res = ndis_set_oid(drv, OID_802_11_REMOVE_KEY, (char *) &rkey, in wpa_driver_ndis_remove_key()
922 res2 = ndis_set_oid(drv, OID_802_11_REMOVE_WEP, in wpa_driver_ndis_remove_key()
933 static int wpa_driver_ndis_add_wep(struct wpa_driver_ndis_data *drv, in wpa_driver_ndis_add_wep() argument
958 res = ndis_set_oid(drv, OID_802_11_ADD_WEP, (char *) wep, len); in wpa_driver_ndis_add_wep()
972 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_set_key() local
981 if (wpa_driver_ndis_get_bssid(drv, bssid) < 0) in wpa_driver_ndis_set_key()
990 return wpa_driver_ndis_remove_key(drv, key_idx, addr, bssid, in wpa_driver_ndis_set_key()
995 return wpa_driver_ndis_add_wep(drv, pairwise, key_idx, set_tx, in wpa_driver_ndis_set_key()
1029 res = ndis_set_oid(drv, OID_802_11_ADD_KEY, (char *) nkey, len); in wpa_driver_ndis_set_key()
1052 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_associate() local
1056 drv->mode = params->mode; in wpa_driver_ndis_associate()
1064 eloop_cancel_timeout(wpa_driver_ndis_poll_timeout, drv, NULL); in wpa_driver_ndis_associate()
1066 drv, NULL); in wpa_driver_ndis_associate()
1069 if (ndis_set_oid(drv, OID_802_11_INFRASTRUCTURE_MODE, in wpa_driver_ndis_associate()
1086 wpa_driver_ndis_set_key(drv->ifname, drv, WPA_ALG_WEP, in wpa_driver_ndis_associate()
1124 wpa_driver_ndis_set_key(drv->ifname, drv, WPA_ALG_WEP, in wpa_driver_ndis_associate()
1176 if (ndis_set_oid(drv, OID_802_11_PRIVACY_FILTER, in wpa_driver_ndis_associate()
1184 ndis_set_auth_mode(drv, auth_mode); in wpa_driver_ndis_associate()
1185 ndis_set_encr_status(drv, encr); in wpa_driver_ndis_associate()
1188 ndis_set_oid(drv, OID_802_11_BSSID, (char *) params->bssid, in wpa_driver_ndis_associate()
1190 drv->oid_bssid_set = 1; in wpa_driver_ndis_associate()
1191 } else if (drv->oid_bssid_set) { in wpa_driver_ndis_associate()
1192 ndis_set_oid(drv, OID_802_11_BSSID, "\xff\xff\xff\xff\xff\xff", in wpa_driver_ndis_associate()
1194 drv->oid_bssid_set = 0; in wpa_driver_ndis_associate()
1197 return wpa_driver_ndis_set_ssid(drv, params->ssid, params->ssid_len); in wpa_driver_ndis_associate()
1201 static int wpa_driver_ndis_set_pmkid(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_set_pmkid() argument
1208 entry = drv->pmkid; in wpa_driver_ndis_set_pmkid()
1211 if (count >= drv->no_of_pmkid) in wpa_driver_ndis_set_pmkid()
1222 entry = drv->pmkid; in wpa_driver_ndis_set_pmkid()
1229 ret = ndis_set_oid(drv, OID_802_11_PMKID, (char *) p, len); in wpa_driver_ndis_set_pmkid()
1238 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_add_pmkid() local
1245 if (drv->no_of_pmkid == 0) in wpa_driver_ndis_add_pmkid()
1249 entry = drv->pmkid; in wpa_driver_ndis_add_pmkid()
1263 entry->next = drv->pmkid; in wpa_driver_ndis_add_pmkid()
1264 drv->pmkid = entry; in wpa_driver_ndis_add_pmkid()
1271 entry->next = drv->pmkid; in wpa_driver_ndis_add_pmkid()
1272 drv->pmkid = entry; in wpa_driver_ndis_add_pmkid()
1276 return wpa_driver_ndis_set_pmkid(drv); in wpa_driver_ndis_add_pmkid()
1283 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_remove_pmkid() local
1290 if (drv->no_of_pmkid == 0) in wpa_driver_ndis_remove_pmkid()
1293 entry = drv->pmkid; in wpa_driver_ndis_remove_pmkid()
1301 drv->pmkid = entry->next; in wpa_driver_ndis_remove_pmkid()
1308 return wpa_driver_ndis_set_pmkid(drv); in wpa_driver_ndis_remove_pmkid()
1314 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_flush_pmkid() local
1319 if (drv->no_of_pmkid == 0) in wpa_driver_ndis_flush_pmkid()
1322 pmkid = drv->pmkid; in wpa_driver_ndis_flush_pmkid()
1323 drv->pmkid = NULL; in wpa_driver_ndis_flush_pmkid()
1334 prev_authmode = ndis_get_auth_mode(drv); in wpa_driver_ndis_flush_pmkid()
1336 ndis_set_auth_mode(drv, Ndis802_11AuthModeWPA2); in wpa_driver_ndis_flush_pmkid()
1343 ret = ndis_set_oid(drv, OID_802_11_PMKID, (char *) &p, 8); in wpa_driver_ndis_flush_pmkid()
1346 ndis_set_auth_mode(drv, prev_authmode); in wpa_driver_ndis_flush_pmkid()
1352 static int wpa_driver_ndis_get_associnfo(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_get_associnfo() argument
1361 len = ndis_get_oid(drv, OID_802_11_ASSOCIATION_INFORMATION, buf, in wpa_driver_ndis_get_associnfo()
1375 len = ndis_get_oid(drv, OID_802_11_ASSOCIATION_INFORMATION, in wpa_driver_ndis_get_associnfo()
1424 len = ndis_get_oid(drv, OID_802_11_BSSID_LIST, (char *) b, blen); in wpa_driver_ndis_get_associnfo()
1437 if (os_memcmp(drv->bssid, bss->MacAddress, ETH_ALEN) == 0 && in wpa_driver_ndis_get_associnfo()
1455 wpa_supplicant_event(drv->ctx, EVENT_ASSOCINFO, &data); in wpa_driver_ndis_get_associnfo()
1465 struct wpa_driver_ndis_data *drv = eloop_ctx; in wpa_driver_ndis_poll_timeout() local
1469 if (drv->wired) in wpa_driver_ndis_poll_timeout()
1472 if (wpa_driver_ndis_get_bssid(drv, bssid)) { in wpa_driver_ndis_poll_timeout()
1474 if (!is_zero_ether_addr(drv->bssid)) { in wpa_driver_ndis_poll_timeout()
1475 os_memset(drv->bssid, 0, ETH_ALEN); in wpa_driver_ndis_poll_timeout()
1476 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL); in wpa_driver_ndis_poll_timeout()
1480 if (os_memcmp(drv->bssid, bssid, ETH_ALEN) != 0) { in wpa_driver_ndis_poll_timeout()
1481 os_memcpy(drv->bssid, bssid, ETH_ALEN); in wpa_driver_ndis_poll_timeout()
1482 wpa_driver_ndis_get_associnfo(drv); in wpa_driver_ndis_poll_timeout()
1483 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, NULL); in wpa_driver_ndis_poll_timeout()
1493 poll = drv->mode == IEEE80211_MODE_IBSS; in wpa_driver_ndis_poll_timeout()
1502 drv, NULL); in wpa_driver_ndis_poll_timeout()
1509 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_poll() local
1510 eloop_cancel_timeout(wpa_driver_ndis_poll_timeout, drv, NULL); in wpa_driver_ndis_poll()
1511 wpa_driver_ndis_poll_timeout(drv, NULL); in wpa_driver_ndis_poll()
1517 void wpa_driver_ndis_event_connect(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_event_connect() argument
1520 if (wpa_driver_ndis_get_bssid(drv, drv->bssid) == 0) { in wpa_driver_ndis_event_connect()
1521 wpa_driver_ndis_get_associnfo(drv); in wpa_driver_ndis_event_connect()
1522 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, NULL); in wpa_driver_ndis_event_connect()
1529 void wpa_driver_ndis_event_disconnect(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_event_disconnect() argument
1532 os_memset(drv->bssid, 0, ETH_ALEN); in wpa_driver_ndis_event_disconnect()
1533 wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL); in wpa_driver_ndis_event_disconnect()
1537 static void wpa_driver_ndis_event_auth(struct wpa_driver_ndis_data *drv, in wpa_driver_ndis_event_auth() argument
1565 wpa_supplicant_event(drv->ctx, EVENT_MICHAEL_MIC_FAILURE, in wpa_driver_ndis_event_auth()
1571 static void wpa_driver_ndis_event_pmkid(struct wpa_driver_ndis_data *drv, in wpa_driver_ndis_event_pmkid() argument
1608 wpa_supplicant_event(drv->ctx, EVENT_PMKID_CANDIDATE, in wpa_driver_ndis_event_pmkid()
1616 void wpa_driver_ndis_event_media_specific(struct wpa_driver_ndis_data *drv, in wpa_driver_ndis_event_media_specific() argument
1633 wpa_driver_ndis_event_auth(drv, data, data_len); in wpa_driver_ndis_event_media_specific()
1636 wpa_driver_ndis_event_pmkid(drv, data, data_len); in wpa_driver_ndis_event_media_specific()
1647 void wpa_driver_ndis_event_adapter_arrival(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_event_adapter_arrival() argument
1656 wpa_driver_ndis_adapter_close(drv); in wpa_driver_ndis_event_adapter_arrival()
1657 if (wpa_driver_ndis_adapter_init(drv) < 0 || in wpa_driver_ndis_event_adapter_arrival()
1658 wpa_driver_ndis_adapter_open(drv) < 0) { in wpa_driver_ndis_event_adapter_arrival()
1669 os_strlcpy(event.interface_status.ifname, drv->ifname, in wpa_driver_ndis_event_adapter_arrival()
1672 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event); in wpa_driver_ndis_event_adapter_arrival()
1677 void wpa_driver_ndis_event_adapter_removal(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_event_adapter_removal() argument
1683 os_strlcpy(event.interface_status.ifname, drv->ifname, in wpa_driver_ndis_event_adapter_removal()
1686 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event); in wpa_driver_ndis_event_adapter_removal()
1691 wpa_driver_ndis_get_wpa_capability(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_get_wpa_capability() argument
1695 if (ndis_set_auth_mode(drv, Ndis802_11AuthModeWPA) == 0 && in wpa_driver_ndis_get_wpa_capability()
1696 ndis_get_auth_mode(drv) == Ndis802_11AuthModeWPA) { in wpa_driver_ndis_get_wpa_capability()
1698 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA; in wpa_driver_ndis_get_wpa_capability()
1701 if (ndis_set_auth_mode(drv, Ndis802_11AuthModeWPAPSK) == 0 && in wpa_driver_ndis_get_wpa_capability()
1702 ndis_get_auth_mode(drv) == Ndis802_11AuthModeWPAPSK) { in wpa_driver_ndis_get_wpa_capability()
1705 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK; in wpa_driver_ndis_get_wpa_capability()
1708 if (ndis_set_encr_status(drv, Ndis802_11Encryption3Enabled) == 0 && in wpa_driver_ndis_get_wpa_capability()
1709 ndis_get_encr_status(drv) == Ndis802_11Encryption3KeyAbsent) { in wpa_driver_ndis_get_wpa_capability()
1711 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP; in wpa_driver_ndis_get_wpa_capability()
1714 if (ndis_set_encr_status(drv, Ndis802_11Encryption2Enabled) == 0 && in wpa_driver_ndis_get_wpa_capability()
1715 ndis_get_encr_status(drv) == Ndis802_11Encryption2KeyAbsent) { in wpa_driver_ndis_get_wpa_capability()
1717 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP; in wpa_driver_ndis_get_wpa_capability()
1720 if (ndis_set_encr_status(drv, Ndis802_11Encryption1Enabled) == 0 && in wpa_driver_ndis_get_wpa_capability()
1721 ndis_get_encr_status(drv) == Ndis802_11Encryption1KeyAbsent) { in wpa_driver_ndis_get_wpa_capability()
1723 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP40 | in wpa_driver_ndis_get_wpa_capability()
1727 if (ndis_set_auth_mode(drv, Ndis802_11AuthModeShared) == 0 && in wpa_driver_ndis_get_wpa_capability()
1728 ndis_get_auth_mode(drv) == Ndis802_11AuthModeShared) { in wpa_driver_ndis_get_wpa_capability()
1729 drv->capa.auth |= WPA_DRIVER_AUTH_SHARED; in wpa_driver_ndis_get_wpa_capability()
1732 if (ndis_set_auth_mode(drv, Ndis802_11AuthModeOpen) == 0 && in wpa_driver_ndis_get_wpa_capability()
1733 ndis_get_auth_mode(drv) == Ndis802_11AuthModeOpen) { in wpa_driver_ndis_get_wpa_capability()
1734 drv->capa.auth |= WPA_DRIVER_AUTH_OPEN; in wpa_driver_ndis_get_wpa_capability()
1737 ndis_set_encr_status(drv, Ndis802_11EncryptionDisabled); in wpa_driver_ndis_get_wpa_capability()
1742 if (drv->capa.key_mgmt & WPA_DRIVER_CAPA_KEY_MGMT_WPA && in wpa_driver_ndis_get_wpa_capability()
1743 drv->capa.enc & (WPA_DRIVER_CAPA_ENC_TKIP | in wpa_driver_ndis_get_wpa_capability()
1746 drv->has_capability = 1; in wpa_driver_ndis_get_wpa_capability()
1753 drv->capa.key_mgmt, drv->capa.enc, drv->capa.auth); in wpa_driver_ndis_get_wpa_capability()
1757 static void wpa_driver_ndis_get_capability(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_get_capability() argument
1764 drv->capa.flags = WPA_DRIVER_FLAGS_DRIVER_IE; in wpa_driver_ndis_get_capability()
1766 len = ndis_get_oid(drv, OID_802_11_CAPABILITY, buf, sizeof(buf)); in wpa_driver_ndis_get_capability()
1768 wpa_driver_ndis_get_wpa_capability(drv); in wpa_driver_ndis_get_capability()
1783 drv->has_capability = 1; in wpa_driver_ndis_get_capability()
1784 drv->no_of_pmkid = c->NoOfPMKIDs; in wpa_driver_ndis_get_capability()
1798 drv->capa.auth |= WPA_DRIVER_AUTH_OPEN; in wpa_driver_ndis_get_capability()
1801 drv->capa.auth |= WPA_DRIVER_AUTH_SHARED; in wpa_driver_ndis_get_capability()
1804 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA; in wpa_driver_ndis_get_capability()
1807 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK; in wpa_driver_ndis_get_capability()
1810 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_WPA2; in wpa_driver_ndis_get_capability()
1813 drv->capa.key_mgmt |= in wpa_driver_ndis_get_capability()
1817 drv->capa.key_mgmt |= in wpa_driver_ndis_get_capability()
1825 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP40; in wpa_driver_ndis_get_capability()
1826 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_WEP104; in wpa_driver_ndis_get_capability()
1829 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP; in wpa_driver_ndis_get_capability()
1832 drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP; in wpa_driver_ndis_get_capability()
1841 drv->capa.key_mgmt, drv->capa.enc, drv->capa.auth); in wpa_driver_ndis_get_capability()
1847 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_get_capa() local
1848 if (!drv->has_capability) in wpa_driver_ndis_get_capa()
1850 os_memcpy(capa, &drv->capa, sizeof(*capa)); in wpa_driver_ndis_get_capa()
1857 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_get_ifname() local
1858 return drv->ifname; in wpa_driver_ndis_get_ifname()
1864 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_get_mac_addr() local
1865 return drv->own_addr; in wpa_driver_ndis_get_mac_addr()
1875 struct wpa_driver_ndis_data *drv = eloop_data; in ndisuio_notification_receive() local
1880 if (!ReadMsgQueue(drv->event_queue, buf, NDISUIO_MSG_SIZE, &len, 0, in ndisuio_notification_receive()
1901 wpa_driver_ndis_event_adapter_arrival(drv); in ndisuio_notification_receive()
1907 wpa_driver_ndis_event_adapter_removal(drv); in ndisuio_notification_receive()
1912 SetEvent(drv->connected_event); in ndisuio_notification_receive()
1913 wpa_driver_ndis_event_connect(drv); in ndisuio_notification_receive()
1916 ResetEvent(drv->connected_event); in ndisuio_notification_receive()
1918 wpa_driver_ndis_event_disconnect(drv); in ndisuio_notification_receive()
1924 drv, hdr->pvStatusBuffer, hdr->uiStatusBufferSize); in ndisuio_notification_receive()
1927 drv, ((const u8 *) hdr) + hdr->uiOffsetToStatusBuffer, in ndisuio_notification_receive()
1939 static void ndisuio_notification_deinit(struct wpa_driver_ndis_data *drv) in ndisuio_notification_deinit() argument
1944 req.hMsgQueue = drv->event_queue; in ndisuio_notification_deinit()
1947 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_REQUEST_NOTIFICATION, in ndisuio_notification_deinit()
1954 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_CANCEL_NOTIFICATION, in ndisuio_notification_deinit()
1961 if (drv->event_queue) { in ndisuio_notification_deinit()
1962 eloop_unregister_event(drv->event_queue, in ndisuio_notification_deinit()
1963 sizeof(drv->event_queue)); in ndisuio_notification_deinit()
1964 CloseHandle(drv->event_queue); in ndisuio_notification_deinit()
1965 drv->event_queue = NULL; in ndisuio_notification_deinit()
1968 if (drv->connected_event) { in ndisuio_notification_deinit()
1969 CloseHandle(drv->connected_event); in ndisuio_notification_deinit()
1970 drv->connected_event = NULL; in ndisuio_notification_deinit()
1975 static int ndisuio_notification_init(struct wpa_driver_ndis_data *drv) in ndisuio_notification_init() argument
1980 drv->connected_event = in ndisuio_notification_init()
1982 if (drv->connected_event == NULL) { in ndisuio_notification_init()
1995 drv->event_queue = CreateMsgQueue(NULL, &opt); in ndisuio_notification_init()
1996 if (drv->event_queue == NULL) { in ndisuio_notification_init()
2000 ndisuio_notification_deinit(drv); in ndisuio_notification_init()
2005 req.hMsgQueue = drv->event_queue; in ndisuio_notification_init()
2017 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_REQUEST_NOTIFICATION, in ndisuio_notification_init()
2022 ndisuio_notification_deinit(drv); in ndisuio_notification_init()
2026 eloop_register_event(drv->event_queue, sizeof(drv->event_queue), in ndisuio_notification_init()
2027 ndisuio_notification_receive, drv, NULL); in ndisuio_notification_init()
2034 static int wpa_driver_ndis_get_names(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_get_names() argument
2052 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_QUERY_BINDING, in wpa_driver_ndis_get_names()
2081 if (os_strstr(name, drv->ifname)) { in wpa_driver_ndis_get_names()
2087 if (os_strncmp(desc, drv->ifname, os_strlen(drv->ifname)) == 0) in wpa_driver_ndis_get_names()
2098 drv->ifname); in wpa_driver_ndis_get_names()
2103 os_strlcpy(drv->ifname, in wpa_driver_ndis_get_names()
2105 sizeof(drv->ifname)); in wpa_driver_ndis_get_names()
2107 drv->adapter_name = wpa_strdup_tchar(drv->ifname); in wpa_driver_ndis_get_names()
2108 if (drv->adapter_name == NULL) { in wpa_driver_ndis_get_names()
2121 drv->adapter_desc = dup_binstr(desc, dlen); in wpa_driver_ndis_get_names()
2123 if (drv->adapter_desc == NULL) in wpa_driver_ndis_get_names()
2127 drv->adapter_desc); in wpa_driver_ndis_get_names()
2253 if (found_name == -1 && os_strstr(name[i], drv->ifname)) in wpa_driver_ndis_get_names()
2256 os_strncmp(desc[i], drv->ifname, os_strlen(drv->ifname)) == in wpa_driver_ndis_get_names()
2266 os_strlcpy(drv->ifname, in wpa_driver_ndis_get_names()
2269 sizeof(drv->ifname)); in wpa_driver_ndis_get_names()
2274 drv->ifname); in wpa_driver_ndis_get_names()
2289 drv->adapter_desc = dup_binstr(desc[i], dlen); in wpa_driver_ndis_get_names()
2291 if (drv->adapter_desc == NULL) in wpa_driver_ndis_get_names()
2295 drv->adapter_desc); in wpa_driver_ndis_get_names()
2361 static int wpa_driver_ndis_rebind_adapter(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_rebind_adapter() argument
2367 len = _tcslen(drv->adapter_name); in wpa_driver_ndis_rebind_adapter()
2380 memcpy(multi, drv->adapter_name, len * sizeof(TCHAR)); in wpa_driver_ndis_rebind_adapter()
2405 static int wpa_driver_ndis_set_wzc(struct wpa_driver_ndis_data *drv, in wpa_driver_ndis_set_wzc() argument
2427 return wpa_driver_ndis_rebind_adapter(drv); in wpa_driver_ndis_set_wzc()
2505 drv->wzc_disabled = 1; in wpa_driver_ndis_set_wzc()
2506 return wpa_driver_ndis_rebind_adapter(drv); in wpa_driver_ndis_set_wzc()
2575 if (os_strstr(drv->ifname, guid) == NULL) in wpa_driver_ndis_set_wzc()
2632 drv->wzc_disabled = 0; in wpa_driver_ndis_set_wzc()
2651 drv->wzc_disabled = 1; in wpa_driver_ndis_set_wzc()
2669 static int wpa_driver_ndis_set_wzc(struct wpa_driver_ndis_data *drv, in wpa_driver_ndis_set_wzc() argument
2693 static int wpa_driver_ndis_adapter_init(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_adapter_init() argument
2700 drv->ndisuio = CreateFile(NDISUIO_DEVICE_NAME, in wpa_driver_ndis_adapter_init()
2705 if (drv->ndisuio == INVALID_HANDLE_VALUE) { in wpa_driver_ndis_adapter_init()
2710 driver_ndis_ndisuio_handle = drv->ndisuio; in wpa_driver_ndis_adapter_init()
2713 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_BIND_WAIT, NULL, 0, in wpa_driver_ndis_adapter_init()
2717 CloseHandle(drv->ndisuio); in wpa_driver_ndis_adapter_init()
2718 drv->ndisuio = INVALID_HANDLE_VALUE; in wpa_driver_ndis_adapter_init()
2730 static int wpa_driver_ndis_adapter_open(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_adapter_open() argument
2744 len = pos + os_strlen(drv->ifname); in wpa_driver_ndis_adapter_open()
2750 ifname[i] = (WCHAR) drv->ifname[i - pos]; in wpa_driver_ndis_adapter_open()
2753 if (!DeviceIoControl(drv->ndisuio, IOCTL_NDISUIO_OPEN_DEVICE, in wpa_driver_ndis_adapter_open()
2760 CloseHandle(drv->ndisuio); in wpa_driver_ndis_adapter_open()
2761 drv->ndisuio = INVALID_HANDLE_VALUE; in wpa_driver_ndis_adapter_open()
2770 os_snprintf(ifname, sizeof(ifname), "\\Device\\NPF_%s", drv->ifname); in wpa_driver_ndis_adapter_open()
2771 drv->adapter = PacketOpenAdapter(ifname); in wpa_driver_ndis_adapter_open()
2772 if (drv->adapter == NULL) { in wpa_driver_ndis_adapter_open()
2782 static void wpa_driver_ndis_adapter_close(struct wpa_driver_ndis_data *drv) in wpa_driver_ndis_adapter_close() argument
2786 if (drv->ndisuio != INVALID_HANDLE_VALUE) in wpa_driver_ndis_adapter_close()
2787 CloseHandle(drv->ndisuio); in wpa_driver_ndis_adapter_close()
2789 if (drv->adapter) in wpa_driver_ndis_adapter_close()
2790 PacketCloseAdapter(drv->adapter); in wpa_driver_ndis_adapter_close()
2795 static int ndis_add_multicast(struct wpa_driver_ndis_data *drv) in ndis_add_multicast() argument
2797 if (ndis_set_oid(drv, OID_802_3_MULTICAST_LIST, in ndis_add_multicast()
2810 struct wpa_driver_ndis_data *drv; in wpa_driver_ndis_init() local
2814 drv = os_zalloc(sizeof(*drv)); in wpa_driver_ndis_init()
2815 if (drv == NULL) in wpa_driver_ndis_init()
2817 drv->ctx = ctx; in wpa_driver_ndis_init()
2828 os_strlcpy(drv->ifname, ifname, sizeof(drv->ifname)); in wpa_driver_ndis_init()
2830 if (wpa_driver_ndis_adapter_init(drv) < 0) { in wpa_driver_ndis_init()
2831 os_free(drv); in wpa_driver_ndis_init()
2835 if (wpa_driver_ndis_get_names(drv) < 0) { in wpa_driver_ndis_init()
2836 wpa_driver_ndis_adapter_close(drv); in wpa_driver_ndis_init()
2837 os_free(drv); in wpa_driver_ndis_init()
2841 wpa_driver_ndis_set_wzc(drv, 0); in wpa_driver_ndis_init()
2843 if (wpa_driver_ndis_adapter_open(drv) < 0) { in wpa_driver_ndis_init()
2844 wpa_driver_ndis_adapter_close(drv); in wpa_driver_ndis_init()
2845 os_free(drv); in wpa_driver_ndis_init()
2849 if (ndis_get_oid(drv, OID_802_3_CURRENT_ADDRESS, in wpa_driver_ndis_init()
2850 (char *) drv->own_addr, ETH_ALEN) < 0) { in wpa_driver_ndis_init()
2853 wpa_driver_ndis_adapter_close(drv); in wpa_driver_ndis_init()
2854 os_free(drv); in wpa_driver_ndis_init()
2857 wpa_driver_ndis_get_capability(drv); in wpa_driver_ndis_init()
2861 drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt; in wpa_driver_ndis_init()
2866 wpa_driver_ndis_flush_pmkid(drv); in wpa_driver_ndis_init()
2872 wpa_driver_ndis_disconnect(drv); in wpa_driver_ndis_init()
2874 eloop_register_timeout(1, 0, wpa_driver_ndis_poll_timeout, drv, NULL); in wpa_driver_ndis_init()
2877 drv->events = ndis_events_init(&drv->events_pipe, &drv->event_avail, in wpa_driver_ndis_init()
2878 drv->ifname, drv->adapter_desc); in wpa_driver_ndis_init()
2879 if (drv->events == NULL) { in wpa_driver_ndis_init()
2880 wpa_driver_ndis_deinit(drv); in wpa_driver_ndis_init()
2883 eloop_register_event(drv->event_avail, sizeof(drv->event_avail), in wpa_driver_ndis_init()
2884 wpa_driver_ndis_event_pipe_cb, drv, NULL); in wpa_driver_ndis_init()
2888 if (ndisuio_notification_init(drv) < 0) { in wpa_driver_ndis_init()
2889 wpa_driver_ndis_deinit(drv); in wpa_driver_ndis_init()
2897 if (ndis_set_oid(drv, OID_802_11_INFRASTRUCTURE_MODE, in wpa_driver_ndis_init()
2906 res = ndis_get_oid(drv, OID_DOT11_CURRENT_OPERATION_MODE, buf, in wpa_driver_ndis_init()
2912 drv->native80211 = 1; in wpa_driver_ndis_init()
2913 } else if (!drv->has_capability || drv->capa.enc == 0) { in wpa_driver_ndis_init()
2921 drv->wired = 1; in wpa_driver_ndis_init()
2922 drv->capa.flags |= WPA_DRIVER_FLAGS_WIRED; in wpa_driver_ndis_init()
2923 drv->has_capability = 1; in wpa_driver_ndis_init()
2924 ndis_add_multicast(drv); in wpa_driver_ndis_init()
2928 return drv; in wpa_driver_ndis_init()
2934 struct wpa_driver_ndis_data *drv = priv; in wpa_driver_ndis_deinit() local
2937 if (drv->events) { in wpa_driver_ndis_deinit()
2938 eloop_unregister_event(drv->event_avail, in wpa_driver_ndis_deinit()
2939 sizeof(drv->event_avail)); in wpa_driver_ndis_deinit()
2940 ndis_events_deinit(drv->events); in wpa_driver_ndis_deinit()
2945 ndisuio_notification_deinit(drv); in wpa_driver_ndis_deinit()
2948 eloop_cancel_timeout(wpa_driver_ndis_scan_timeout, drv, drv->ctx); in wpa_driver_ndis_deinit()
2949 eloop_cancel_timeout(wpa_driver_ndis_poll_timeout, drv, NULL); in wpa_driver_ndis_deinit()
2950 wpa_driver_ndis_flush_pmkid(drv); in wpa_driver_ndis_deinit()
2951 wpa_driver_ndis_disconnect(drv); in wpa_driver_ndis_deinit()
2952 if (wpa_driver_ndis_radio_off(drv) < 0) { in wpa_driver_ndis_deinit()
2957 wpa_driver_ndis_adapter_close(drv); in wpa_driver_ndis_deinit()
2959 if (drv->wzc_disabled) in wpa_driver_ndis_deinit()
2960 wpa_driver_ndis_set_wzc(drv, 1); in wpa_driver_ndis_deinit()
2963 os_free(drv->adapter_name); in wpa_driver_ndis_deinit()
2965 os_free(drv->adapter_desc); in wpa_driver_ndis_deinit()
2966 os_free(drv); in wpa_driver_ndis_deinit()