Lines Matching +full:drv +full:- +full:0

3  * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
35 static const u8 rfc1042_header[6] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 };
58 static void handle_data(struct hostap_driver_data *drv, u8 *buf, size_t len, in handle_data() argument
71 fc = le_to_host16(hdr->frame_control); in handle_data()
74 printf("Not ToDS data frame (fc=0x%04x)\n", fc); in handle_data()
78 sa = hdr->addr2; in handle_data()
79 os_memset(&event, 0, sizeof(event)); in handle_data()
82 wpa_supplicant_event(drv->hapd, EVENT_RX_FROM_UNKNOWN, &event); in handle_data()
85 left = len - sizeof(*hdr); in handle_data()
92 if (memcmp(pos, rfc1042_header, sizeof(rfc1042_header)) != 0) { in handle_data()
97 left -= sizeof(rfc1042_header); in handle_data()
106 left -= 2; in handle_data()
109 drv_event_eapol_rx(drv->hapd, sa, pos, left); in handle_data()
113 printf("Unknown ethertype 0x%04x in data frame\n", ethertype); in handle_data()
119 static void handle_tx_callback(struct hostap_driver_data *drv, u8 *buf, in handle_tx_callback() argument
127 fc = le_to_host16(hdr->frame_control); in handle_tx_callback()
129 os_memset(&event, 0, sizeof(event)); in handle_tx_callback()
132 event.tx_status.dst = hdr->addr1; in handle_tx_callback()
136 wpa_supplicant_event(drv->hapd, EVENT_TX_STATUS, &event); in handle_tx_callback()
140 static void handle_frame(struct hostap_driver_data *drv, u8 *buf, size_t len) in handle_frame() argument
157 fc = le_to_host16(hdr->frame_control); in handle_frame()
172 handle_tx_callback(drv, buf, data_len, ver == 2 ? 1 : 0); in handle_frame()
174 } else if (ver != 0) { in handle_frame()
181 os_memset(&event, 0, sizeof(event)); in handle_frame()
184 wpa_supplicant_event(drv->hapd, EVENT_RX_MGMT, &event); in handle_frame()
191 handle_data(drv, buf, data_len, stype); in handle_frame()
202 struct hostap_driver_data *drv = eloop_ctx; in handle_read() local
206 len = recv(sock, buf, sizeof(buf), 0); in handle_read()
207 if (len < 0) { in handle_read()
212 handle_frame(drv, buf, len); in handle_read()
216 static int hostap_init_sockets(struct hostap_driver_data *drv, u8 *own_addr) in hostap_init_sockets() argument
221 drv->sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); in hostap_init_sockets()
222 if (drv->sock < 0) { in hostap_init_sockets()
225 return -1; in hostap_init_sockets()
228 if (eloop_register_read_sock(drv->sock, handle_read, drv, NULL)) { in hostap_init_sockets()
230 return -1; in hostap_init_sockets()
233 memset(&ifr, 0, sizeof(ifr)); in hostap_init_sockets()
235 drv->iface) >= (int) sizeof(ifr.ifr_name)) { in hostap_init_sockets()
237 return -1; in hostap_init_sockets()
239 if (ioctl(drv->sock, SIOCGIFINDEX, &ifr) != 0) { in hostap_init_sockets()
242 return -1; in hostap_init_sockets()
245 if (hostap_set_iface_flags(drv, 1)) { in hostap_init_sockets()
246 return -1; in hostap_init_sockets()
249 memset(&addr, 0, sizeof(addr)); in hostap_init_sockets()
255 if (bind(drv->sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) { in hostap_init_sockets()
257 return -1; in hostap_init_sockets()
260 return linux_get_ifhwaddr(drv->sock, drv->iface, own_addr); in hostap_init_sockets()
269 struct hostap_driver_data *drv = priv; in hostap_send_mlme() local
274 hdr->frame_control |= host_to_le16(BIT(1)); in hostap_send_mlme()
275 res = send(drv->sock, msg, len, 0); in hostap_send_mlme()
276 hdr->frame_control &= ~host_to_le16(BIT(1)); in hostap_send_mlme()
286 struct hostap_driver_data *drv = priv; in hostap_send_eapol() local
297 return -1; in hostap_send_eapol()
300 hdr->frame_control = in hostap_send_eapol()
302 hdr->frame_control |= host_to_le16(WLAN_FC_FROMDS); in hostap_send_eapol()
304 hdr->frame_control |= host_to_le16(WLAN_FC_ISWEP); in hostap_send_eapol()
305 memcpy(hdr->IEEE80211_DA_FROMDS, addr, ETH_ALEN); in hostap_send_eapol()
306 memcpy(hdr->IEEE80211_BSSID_FROMDS, own_addr, ETH_ALEN); in hostap_send_eapol()
307 memcpy(hdr->IEEE80211_SA_FROMDS, own_addr, ETH_ALEN); in hostap_send_eapol()
316 res = hostap_send_mlme(drv, (u8 *) hdr, len, 0, 0, NULL, 0, 0, 0, -1); in hostap_send_eapol()
317 if (res < 0) { in hostap_send_eapol()
318 wpa_printf(MSG_ERROR, "hostap_send_eapol - packet len: %lu - " in hostap_send_eapol()
332 struct hostap_driver_data *drv = priv; in hostap_sta_set_flags() local
340 flags_and = ~0; in hostap_sta_set_flags()
341 memset(&param, 0, sizeof(param)); in hostap_sta_set_flags()
346 return hostapd_ioctl(drv, &param, sizeof(param)); in hostap_sta_set_flags()
352 struct hostap_driver_data *drv = priv; in hostap_set_iface_flags() local
356 if (os_snprintf(ifname, IFNAMSIZ, "%sap", drv->iface) >= IFNAMSIZ) { in hostap_set_iface_flags()
358 return -1; in hostap_set_iface_flags()
360 if (linux_set_iface_flags(drv->ioctl_sock, ifname, dev_up) < 0) in hostap_set_iface_flags()
361 return -1; in hostap_set_iface_flags()
364 memset(&ifr, 0, sizeof(ifr)); in hostap_set_iface_flags()
367 if (ioctl(drv->ioctl_sock, SIOCSIFMTU, &ifr) != 0) { in hostap_set_iface_flags()
369 "Setting MTU failed - trying to survive with current value: ioctl[SIOCSIFMTU]: %s", in hostap_set_iface_flags()
374 return 0; in hostap_set_iface_flags()
381 struct hostap_driver_data *drv = priv; in hostapd_ioctl() local
384 memset(&iwr, 0, sizeof(iwr)); in hostapd_ioctl()
385 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in hostapd_ioctl()
389 if (ioctl(drv->ioctl_sock, PRISM2_IOCTL_HOSTAPD, &iwr) < 0) { in hostapd_ioctl()
392 return -1; in hostapd_ioctl()
395 return 0; in hostapd_ioctl()
402 struct hostap_driver_data *drv = priv; in wpa_driver_hostap_set_key() local
406 int ret = 0; in wpa_driver_hostap_set_key()
407 enum wpa_alg alg = params->alg; in wpa_driver_hostap_set_key()
408 const u8 *addr = params->addr; in wpa_driver_hostap_set_key()
409 int key_idx = params->key_idx; in wpa_driver_hostap_set_key()
410 int set_tx = params->set_tx; in wpa_driver_hostap_set_key()
411 const u8 *key = params->key; in wpa_driver_hostap_set_key()
412 size_t key_len = params->key_len; in wpa_driver_hostap_set_key()
417 return -1; in wpa_driver_hostap_set_key()
420 param->cmd = PRISM2_SET_ENCRYPTION; in wpa_driver_hostap_set_key()
422 memset(param->sta_addr, 0xff, ETH_ALEN); in wpa_driver_hostap_set_key()
424 memcpy(param->sta_addr, addr, ETH_ALEN); in wpa_driver_hostap_set_key()
427 os_strlcpy((char *) param->u.crypt.alg, "NONE", in wpa_driver_hostap_set_key()
431 os_strlcpy((char *) param->u.crypt.alg, "WEP", in wpa_driver_hostap_set_key()
435 os_strlcpy((char *) param->u.crypt.alg, "TKIP", in wpa_driver_hostap_set_key()
439 os_strlcpy((char *) param->u.crypt.alg, "CCMP", in wpa_driver_hostap_set_key()
444 return -1; in wpa_driver_hostap_set_key()
446 param->u.crypt.flags = set_tx ? HOSTAP_CRYPT_FLAG_SET_TX_KEY : 0; in wpa_driver_hostap_set_key()
447 param->u.crypt.idx = key_idx; in wpa_driver_hostap_set_key()
448 param->u.crypt.key_len = key_len; in wpa_driver_hostap_set_key()
451 if (hostapd_ioctl(drv, param, blen)) { in wpa_driver_hostap_set_key()
453 ret = -1; in wpa_driver_hostap_set_key()
464 struct hostap_driver_data *drv = priv; in hostap_get_seqnum() local
468 int ret = 0; in hostap_get_seqnum()
473 return -1; in hostap_get_seqnum()
476 param->cmd = PRISM2_GET_ENCRYPTION; in hostap_get_seqnum()
478 os_memset(param->sta_addr, 0xff, ETH_ALEN); in hostap_get_seqnum()
480 os_memcpy(param->sta_addr, addr, ETH_ALEN); in hostap_get_seqnum()
481 param->u.crypt.idx = idx; in hostap_get_seqnum()
483 if (hostapd_ioctl(drv, param, blen)) { in hostap_get_seqnum()
485 ret = -1; in hostap_get_seqnum()
487 os_memcpy(seq, param->u.crypt.seq, 8); in hostap_get_seqnum()
497 struct hostap_driver_data *drv = priv; in hostap_ioctl_prism2param() local
501 memset(&iwr, 0, sizeof(iwr)); in hostap_ioctl_prism2param()
502 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in hostap_ioctl_prism2param()
507 if (ioctl(drv->ioctl_sock, PRISM2_IOCTL_PRISM2_PARAM, &iwr) < 0) { in hostap_ioctl_prism2param()
510 return -1; in hostap_ioctl_prism2param()
513 return 0; in hostap_ioctl_prism2param()
519 struct hostap_driver_data *drv = priv; in hostap_set_ieee8021x() local
520 int enabled = params->enabled; in hostap_set_ieee8021x()
523 if (hostap_ioctl_prism2param(drv, PRISM2_PARAM_IEEE_802_1X, enabled)) { in hostap_set_ieee8021x()
526 return -1; in hostap_set_ieee8021x()
530 return 0; in hostap_set_ieee8021x()
534 if (hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOST_DECRYPT, 1) || in hostap_set_ieee8021x()
535 hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOST_ENCRYPT, 1)) { in hostap_set_ieee8021x()
536 printf("Could not setup host-based encryption in kernel " in hostap_set_ieee8021x()
538 return -1; in hostap_set_ieee8021x()
541 return 0; in hostap_set_ieee8021x()
547 struct hostap_drvier_data *drv = priv; in hostap_set_privacy() local
549 return hostap_ioctl_prism2param(drv, PRISM2_PARAM_PRIVACY_INVOKED, in hostap_set_privacy()
556 struct hostap_driver_data *drv = priv; in hostap_set_ssid() local
559 memset(&iwr, 0, sizeof(iwr)); in hostap_set_ssid()
560 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in hostap_set_ssid()
565 if (ioctl(drv->ioctl_sock, SIOCSIWESSID, &iwr) < 0) { in hostap_set_ssid()
568 return -1; in hostap_set_ssid()
571 return 0; in hostap_set_ssid()
577 struct hostap_driver_data *drv = priv; in hostap_flush() local
580 memset(&param, 0, sizeof(param)); in hostap_flush()
582 return hostapd_ioctl(drv, &param, sizeof(param)); in hostap_flush()
590 struct hostap_driver_data *drv = priv; in hostap_read_sta_data() local
595 memset(data, 0, sizeof(*data)); in hostap_read_sta_data()
597 drv->iface, MAC2STR(addr)); in hostap_read_sta_data()
601 return -1; in hostap_read_sta_data()
610 *pos++ = '\0'; in hostap_read_sta_data()
612 if (strcmp(line, "rx_packets") == 0) in hostap_read_sta_data()
613 data->rx_packets = val; in hostap_read_sta_data()
614 else if (strcmp(line, "tx_packets") == 0) in hostap_read_sta_data()
615 data->tx_packets = val; in hostap_read_sta_data()
616 else if (strcmp(line, "rx_bytes") == 0) in hostap_read_sta_data()
617 data->rx_bytes = val; in hostap_read_sta_data()
618 else if (strcmp(line, "tx_bytes") == 0) in hostap_read_sta_data()
619 data->tx_bytes = val; in hostap_read_sta_data()
624 return 0; in hostap_read_sta_data()
630 struct hostap_driver_data *drv = priv; in hostap_sta_add() local
632 int tx_supp_rates = 0; in hostap_sta_add()
635 #define WLAN_RATE_1M BIT(0) in hostap_sta_add()
640 for (i = 0; i < params->supp_rates_len; i++) { in hostap_sta_add()
641 if ((params->supp_rates[i] & 0x7f) == 2) in hostap_sta_add()
643 if ((params->supp_rates[i] & 0x7f) == 4) in hostap_sta_add()
645 if ((params->supp_rates[i] & 0x7f) == 11) in hostap_sta_add()
647 if ((params->supp_rates[i] & 0x7f) == 22) in hostap_sta_add()
651 memset(&param, 0, sizeof(param)); in hostap_sta_add()
653 memcpy(param.sta_addr, params->addr, ETH_ALEN); in hostap_sta_add()
654 param.u.add_sta.aid = params->aid; in hostap_sta_add()
655 param.u.add_sta.capability = params->capability; in hostap_sta_add()
657 return hostapd_ioctl(drv, &param, sizeof(param)); in hostap_sta_add()
663 struct hostap_driver_data *drv = priv; in hostap_sta_remove() local
666 hostap_sta_set_flags(drv, addr, 0, 0, ~WPA_STA_AUTHORIZED); in hostap_sta_remove()
668 memset(&param, 0, sizeof(param)); in hostap_sta_remove()
671 if (hostapd_ioctl(drv, &param, sizeof(param))) { in hostap_sta_remove()
673 return -1; in hostap_sta_remove()
675 return 0; in hostap_sta_remove()
681 struct hostap_driver_data *drv = priv; in hostap_get_inact_sec() local
684 memset(&param, 0, sizeof(param)); in hostap_get_inact_sec()
687 if (hostapd_ioctl(drv, &param, sizeof(param))) { in hostap_get_inact_sec()
688 return -1; in hostap_get_inact_sec()
697 struct hostap_driver_data *drv = priv; in hostap_sta_clear_stats() local
700 memset(&param, 0, sizeof(param)); in hostap_sta_clear_stats()
703 if (hostapd_ioctl(drv, &param, sizeof(param))) { in hostap_sta_clear_stats()
704 return -1; in hostap_sta_clear_stats()
707 return 0; in hostap_sta_clear_stats()
711 static int hostapd_ioctl_set_generic_elem(struct hostap_driver_data *drv) in hostapd_ioctl_set_generic_elem() argument
717 elem_len = drv->generic_ie_len + drv->wps_ie_len; in hostapd_ioctl_set_generic_elem()
724 return -1; in hostapd_ioctl_set_generic_elem()
726 param->cmd = PRISM2_HOSTAPD_SET_GENERIC_ELEMENT; in hostapd_ioctl_set_generic_elem()
727 param->u.generic_elem.len = elem_len; in hostapd_ioctl_set_generic_elem()
728 if (drv->generic_ie) { in hostapd_ioctl_set_generic_elem()
729 os_memcpy(param->u.generic_elem.data, drv->generic_ie, in hostapd_ioctl_set_generic_elem()
730 drv->generic_ie_len); in hostapd_ioctl_set_generic_elem()
732 if (drv->wps_ie) { in hostapd_ioctl_set_generic_elem()
733 os_memcpy(&param->u.generic_elem.data[drv->generic_ie_len], in hostapd_ioctl_set_generic_elem()
734 drv->wps_ie, drv->wps_ie_len); in hostapd_ioctl_set_generic_elem()
737 param->u.generic_elem.data, elem_len); in hostapd_ioctl_set_generic_elem()
738 res = hostapd_ioctl(drv, param, blen); in hostapd_ioctl_set_generic_elem()
749 struct hostap_driver_data *drv = priv; in hostap_set_generic_elem() local
751 os_free(drv->generic_ie); in hostap_set_generic_elem()
752 drv->generic_ie = NULL; in hostap_set_generic_elem()
753 drv->generic_ie_len = 0; in hostap_set_generic_elem()
755 drv->generic_ie = os_memdup(elem, elem_len); in hostap_set_generic_elem()
756 if (drv->generic_ie == NULL) in hostap_set_generic_elem()
757 return -1; in hostap_set_generic_elem()
758 drv->generic_ie_len = elem_len; in hostap_set_generic_elem()
761 return hostapd_ioctl_set_generic_elem(drv); in hostap_set_generic_elem()
769 struct hostap_driver_data *drv = priv; in hostap_set_ap_wps_ie() local
777 os_free(drv->wps_ie); in hostap_set_ap_wps_ie()
778 drv->wps_ie = NULL; in hostap_set_ap_wps_ie()
779 drv->wps_ie_len = 0; in hostap_set_ap_wps_ie()
781 drv->wps_ie = os_memdup(wpabuf_head(proberesp), in hostap_set_ap_wps_ie()
783 if (drv->wps_ie == NULL) in hostap_set_ap_wps_ie()
784 return -1; in hostap_set_ap_wps_ie()
785 drv->wps_ie_len = wpabuf_len(proberesp); in hostap_set_ap_wps_ie()
788 return hostapd_ioctl_set_generic_elem(drv); in hostap_set_ap_wps_ie()
793 hostapd_wireless_event_wireless_custom(struct hostap_driver_data *drv, in hostapd_wireless_event_wireless_custom() argument
798 if (strncmp(custom, "MLME-MICHAELMICFAILURE.indication", 33) == 0) { in hostapd_wireless_event_wireless_custom()
804 "MLME-MICHAELMICFAILURE.indication " in hostapd_wireless_event_wireless_custom()
809 if (hwaddr_aton(pos, addr) == 0) { in hostapd_wireless_event_wireless_custom()
811 os_memset(&data, 0, sizeof(data)); in hostapd_wireless_event_wireless_custom()
814 wpa_supplicant_event(drv->hapd, in hostapd_wireless_event_wireless_custom()
818 "MLME-MICHAELMICFAILURE.indication " in hostapd_wireless_event_wireless_custom()
825 static void hostapd_wireless_event_wireless(struct hostap_driver_data *drv, in hostapd_wireless_event_wireless() argument
834 while ((size_t) (end - pos) >= IW_EV_LCP_LEN) { in hostapd_wireless_event_wireless()
838 wpa_printf(MSG_DEBUG, "Wireless event: cmd=0x%x len=%d", in hostapd_wireless_event_wireless()
839 iwe->cmd, iwe->len); in hostapd_wireless_event_wireless()
840 if (iwe->len <= IW_EV_LCP_LEN || iwe->len > end - pos) in hostapd_wireless_event_wireless()
844 if (drv->we_version > 18 && in hostapd_wireless_event_wireless()
845 (iwe->cmd == IWEVMICHAELMICFAILURE || in hostapd_wireless_event_wireless()
846 iwe->cmd == IWEVCUSTOM)) { in hostapd_wireless_event_wireless()
847 /* WE-19 removed the pointer from struct iw_point */ in hostapd_wireless_event_wireless()
849 int dlen = dpos - (char *) &iwe_buf; in hostapd_wireless_event_wireless()
851 sizeof(struct iw_event) - dlen); in hostapd_wireless_event_wireless()
857 switch (iwe->cmd) { in hostapd_wireless_event_wireless()
859 if (iwe->u.data.length > end - custom) in hostapd_wireless_event_wireless()
861 buf = malloc(iwe->u.data.length + 1); in hostapd_wireless_event_wireless()
864 memcpy(buf, custom, iwe->u.data.length); in hostapd_wireless_event_wireless()
865 buf[iwe->u.data.length] = '\0'; in hostapd_wireless_event_wireless()
866 hostapd_wireless_event_wireless_custom(drv, buf); in hostapd_wireless_event_wireless()
871 pos += iwe->len; in hostapd_wireless_event_wireless()
880 struct hostap_driver_data *drv = ctx; in hostapd_wireless_event_rtm_newlink() local
884 /* TODO: use ifi->ifi_index to filter out wireless events from other in hostapd_wireless_event_rtm_newlink()
892 if (attr->rta_type == IFLA_WIRELESS) { in hostapd_wireless_event_rtm_newlink()
894 drv, ((char *) attr) + rta_len, in hostapd_wireless_event_rtm_newlink()
895 attr->rta_len - rta_len); in hostapd_wireless_event_rtm_newlink()
902 static int hostap_get_we_version(struct hostap_driver_data *drv) in hostap_get_we_version() argument
909 drv->we_version = 0; in hostap_get_we_version()
918 return -1; in hostap_get_we_version()
920 memset(&iwr, 0, sizeof(iwr)); in hostap_get_we_version()
921 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in hostap_get_we_version()
925 minlen = ((char *) &range->enc_capa) - (char *) range + in hostap_get_we_version()
926 sizeof(range->enc_capa); in hostap_get_we_version()
928 if (ioctl(drv->ioctl_sock, SIOCGIWRANGE, &iwr) < 0) { in hostap_get_we_version()
932 return -1; in hostap_get_we_version()
934 range->we_version_compiled >= 18) { in hostap_get_we_version()
936 "WE(source)=%d enc_capa=0x%x", in hostap_get_we_version()
937 range->we_version_compiled, in hostap_get_we_version()
938 range->we_version_source, in hostap_get_we_version()
939 range->enc_capa); in hostap_get_we_version()
940 drv->we_version = range->we_version_compiled; in hostap_get_we_version()
944 return 0; in hostap_get_we_version()
948 static int hostap_wireless_event_init(struct hostap_driver_data *drv) in hostap_wireless_event_init() argument
952 hostap_get_we_version(drv); in hostap_wireless_event_init()
956 return -1; in hostap_wireless_event_init()
957 cfg->ctx = drv; in hostap_wireless_event_init()
958 cfg->newlink_cb = hostapd_wireless_event_rtm_newlink; in hostap_wireless_event_init()
959 drv->netlink = netlink_init(cfg); in hostap_wireless_event_init()
960 if (drv->netlink == NULL) { in hostap_wireless_event_init()
962 return -1; in hostap_wireless_event_init()
965 return 0; in hostap_wireless_event_init()
972 struct hostap_driver_data *drv; in hostap_init() local
974 drv = os_zalloc(sizeof(struct hostap_driver_data)); in hostap_init()
975 if (drv == NULL) { in hostap_init()
980 drv->hapd = hapd; in hostap_init()
981 drv->ioctl_sock = drv->sock = -1; in hostap_init()
982 memcpy(drv->iface, params->ifname, sizeof(drv->iface)); in hostap_init()
984 drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0); in hostap_init()
985 if (drv->ioctl_sock < 0) { in hostap_init()
988 os_free(drv); in hostap_init()
992 if (hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOSTAPD, 1)) { in hostap_init()
995 drv->iface); in hostap_init()
996 close(drv->ioctl_sock); in hostap_init()
997 os_free(drv); in hostap_init()
1001 if (hostap_init_sockets(drv, params->own_addr) || in hostap_init()
1002 hostap_wireless_event_init(drv)) { in hostap_init()
1003 close(drv->ioctl_sock); in hostap_init()
1004 os_free(drv); in hostap_init()
1008 return drv; in hostap_init()
1014 struct hostap_driver_data *drv = priv; in hostap_driver_deinit() local
1016 netlink_deinit(drv->netlink); in hostap_driver_deinit()
1017 (void) hostap_set_iface_flags(drv, 0); in hostap_driver_deinit()
1018 (void) hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOSTAPD, 0); in hostap_driver_deinit()
1019 (void) hostap_ioctl_prism2param(drv, PRISM2_PARAM_HOSTAPD_STA, 0); in hostap_driver_deinit()
1021 if (drv->ioctl_sock >= 0) in hostap_driver_deinit()
1022 close(drv->ioctl_sock); in hostap_driver_deinit()
1024 if (drv->sock >= 0) in hostap_driver_deinit()
1025 close(drv->sock); in hostap_driver_deinit()
1027 os_free(drv->generic_ie); in hostap_driver_deinit()
1028 os_free(drv->wps_ie); in hostap_driver_deinit()
1030 free(drv); in hostap_driver_deinit()
1037 struct hostap_driver_data *drv = priv; in hostap_sta_deauth() local
1047 return 0; in hostap_sta_deauth()
1050 memset(&mgmt, 0, sizeof(mgmt)); in hostap_sta_deauth()
1057 return hostap_send_mlme(drv, (u8 *) &mgmt, IEEE80211_HDRLEN + in hostap_sta_deauth()
1058 sizeof(mgmt.u.deauth), 0, 0, NULL, 0, 0, 0, -1); in hostap_sta_deauth()
1064 struct hostap_driver_data *drv = priv; in hostap_set_freq() local
1067 os_memset(&iwr, 0, sizeof(iwr)); in hostap_set_freq()
1068 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in hostap_set_freq()
1069 iwr.u.freq.m = freq->channel; in hostap_set_freq()
1070 iwr.u.freq.e = 0; in hostap_set_freq()
1072 if (ioctl(drv->ioctl_sock, SIOCSIWFREQ, &iwr) < 0) { in hostap_set_freq()
1075 return -1; in hostap_set_freq()
1078 return 0; in hostap_set_freq()
1085 struct hostap_driver_data *drv = priv; in hostap_sta_disassoc() local
1088 memset(&mgmt, 0, sizeof(mgmt)); in hostap_sta_disassoc()
1095 return hostap_send_mlme(drv, (u8 *) &mgmt, IEEE80211_HDRLEN + in hostap_sta_disassoc()
1096 sizeof(mgmt.u.disassoc), 0, 0, NULL, 0, 0, 0, in hostap_sta_disassoc()
1097 -1); in hostap_sta_disassoc()
1117 *flags = 0; in hostap_get_hw_feature_data()
1118 *dfs = 0; in hostap_get_hw_feature_data()
1120 mode->mode = HOSTAPD_MODE_IEEE80211B; in hostap_get_hw_feature_data()
1121 mode->num_channels = 14; in hostap_get_hw_feature_data()
1122 mode->num_rates = 4; in hostap_get_hw_feature_data()
1124 clen = mode->num_channels * sizeof(struct hostapd_channel_data); in hostap_get_hw_feature_data()
1125 rlen = mode->num_rates * sizeof(int); in hostap_get_hw_feature_data()
1127 mode->channels = os_zalloc(clen); in hostap_get_hw_feature_data()
1128 mode->rates = os_zalloc(rlen); in hostap_get_hw_feature_data()
1129 if (mode->channels == NULL || mode->rates == NULL) { in hostap_get_hw_feature_data()
1130 os_free(mode->channels); in hostap_get_hw_feature_data()
1131 os_free(mode->rates); in hostap_get_hw_feature_data()
1136 for (i = 0; i < 14; i++) { in hostap_get_hw_feature_data()
1137 mode->channels[i].chan = i + 1; in hostap_get_hw_feature_data()
1138 mode->channels[i].freq = chan2freq[i]; in hostap_get_hw_feature_data()
1139 mode->channels[i].allowed_bw = HOSTAPD_CHAN_WIDTH_20; in hostap_get_hw_feature_data()
1142 mode->channels[i].flag = HOSTAPD_CHAN_DISABLED; in hostap_get_hw_feature_data()
1145 mode->rates[0] = 10; in hostap_get_hw_feature_data()
1146 mode->rates[1] = 20; in hostap_get_hw_feature_data()
1147 mode->rates[2] = 55; in hostap_get_hw_feature_data()
1148 mode->rates[3] = 110; in hostap_get_hw_feature_data()
1159 os_memset(&hdr, 0, sizeof(hdr)); in wpa_driver_hostap_poll_client()
1177 hostap_send_mlme(priv, (u8 *)&hdr, sizeof(hdr), 0, 0, NULL, 0, 0, 0, in wpa_driver_hostap_poll_client()
1178 -1); in wpa_driver_hostap_poll_client()