Lines Matching refs:drv

183 get80211param(struct atheros_driver_data *drv, int op, int *data)  in get80211param()  argument
188 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in get80211param()
191 if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_GETPARAM, &iwr) < 0) in get80211param()
201 set80211priv(struct atheros_driver_data *drv, int op, void *data, int len) in set80211priv() argument
212 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in set80211priv()
228 if (ioctl(drv->ioctl_sock, op, &iwr) < 0) { in set80211priv()
231 __func__, drv->iface, op, in set80211priv()
240 set80211param(struct atheros_driver_data *drv, int op, int arg) in set80211param() argument
245 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in set80211param()
249 if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_SETPARAM, &iwr) < 0) { in set80211param()
252 __func__, drv->iface, op, athr_get_param_name(op), in set80211param()
277 atheros_configure_wpa(struct atheros_driver_data *drv, in atheros_configure_wpa() argument
315 if (set80211param(drv, IEEE80211_PARAM_MCASTCIPHER, v)) { in atheros_configure_wpa()
322 if (set80211param(drv, IEEE80211_PARAM_MCASTKEYLEN, v)) { in atheros_configure_wpa()
345 if (set80211param(drv, IEEE80211_PARAM_UCASTCIPHERS, v)) { in atheros_configure_wpa()
353 if (set80211param(drv, IEEE80211_PARAM_KEYMGTALGS, in atheros_configure_wpa()
371 if (set80211param(drv, IEEE80211_PARAM_RSNCAPS, v)) { in atheros_configure_wpa()
378 if (set80211param(drv, IEEE80211_PARAM_WPA, params->wpa)) { in atheros_configure_wpa()
388 struct atheros_driver_data *drv = priv; in atheros_set_ieee8021x() local
398 return atheros_set_privacy(drv, 0); in atheros_set_ieee8021x()
404 if (params->wpa && atheros_configure_wpa(drv, params) != 0) { in atheros_set_ieee8021x()
420 struct atheros_driver_data *drv = priv; in atheros_set_privacy() local
424 return set80211param(drv, IEEE80211_PARAM_PRIVACY, enabled); in atheros_set_privacy()
430 struct atheros_driver_data *drv = priv; in atheros_set_sta_authorized() local
443 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme)); in atheros_set_sta_authorized()
468 struct atheros_driver_data *drv = priv; in atheros_del_key() local
483 ret = set80211priv(drv, IEEE80211_IOCTL_DELKEY, &wk, sizeof(wk)); in atheros_del_key()
496 struct atheros_driver_data *drv = priv; in atheros_set_key() local
508 return atheros_del_key(drv, addr, key_idx); in atheros_set_key()
575 ret = set80211priv(drv, IEEE80211_IOCTL_SETKEY, &wk, sizeof(wk)); in atheros_set_key()
591 struct atheros_driver_data *drv = priv; in atheros_get_seqnum() local
604 if (set80211priv(drv, IEEE80211_IOCTL_GETKEY, &wk, sizeof(wk))) { in atheros_get_seqnum()
648 struct atheros_driver_data *drv = priv; in atheros_read_sta_driver_data() local
658 if (set80211priv(drv, IEEE80211_IOCTL_STA_STATS, in atheros_read_sta_driver_data()
662 if (ether_addr_equal(addr, drv->acct_mac)) { in atheros_read_sta_driver_data()
663 os_memcpy(data, &drv->acct_data, sizeof(*data)); in atheros_read_sta_driver_data()
683 struct atheros_driver_data *drv = priv; in atheros_sta_clear_stats() local
691 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, in atheros_sta_clear_stats()
705 struct atheros_driver_data *drv = priv; in atheros_set_opt_ie() local
713 wpabuf_free(drv->wpa_ie); in atheros_set_opt_ie()
715 drv->wpa_ie = wpabuf_alloc_copy(ie, ie_len); in atheros_set_opt_ie()
717 drv->wpa_ie = NULL; in atheros_set_opt_ie()
727 if (drv->wps_beacon_ie != NULL) { in atheros_set_opt_ie()
729 wpabuf_head(drv->wps_beacon_ie), in atheros_set_opt_ie()
730 wpabuf_len(drv->wps_beacon_ie)); in atheros_set_opt_ie()
731 app_ie->app_buflen = ie_len + wpabuf_len(drv->wps_beacon_ie); in atheros_set_opt_ie()
735 set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, app_ie, in atheros_set_opt_ie()
741 if (drv->wps_probe_resp_ie != NULL) { in atheros_set_opt_ie()
743 wpabuf_head(drv->wps_probe_resp_ie), in atheros_set_opt_ie()
744 wpabuf_len(drv->wps_probe_resp_ie)); in atheros_set_opt_ie()
746 wpabuf_len(drv->wps_probe_resp_ie); in atheros_set_opt_ie()
751 set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, app_ie, in atheros_set_opt_ie()
761 struct atheros_driver_data *drv = priv; in atheros_sta_deauth() local
771 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme)); in atheros_sta_deauth()
785 struct atheros_driver_data *drv = priv; in atheros_sta_disassoc() local
795 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme)); in atheros_sta_disassoc()
809 struct atheros_driver_data *drv = ctx; in atheros_set_qos_map() local
823 os_strlcpy(iwr.ifr_name, drv->iface, sizeof(iwr.ifr_name)); in atheros_set_qos_map()
843 if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_DBGREQ, &iwr) < 0) { in atheros_set_qos_map()
846 __func__, drv->iface, strerror(errno)); in atheros_set_qos_map()
858 struct atheros_driver_data *drv = ctx; in atheros_raw_receive() local
890 wpa_supplicant_event(drv->hapd, EVENT_RX_PROBE_REQ, &event); in atheros_raw_receive()
895 (ether_addr_equal(drv->own_addr, mgmt->bssid) || in atheros_raw_receive()
900 wpa_supplicant_event(drv->hapd, EVENT_RX_MGMT, &event); in atheros_raw_receive()
904 if (!ether_addr_equal(drv->own_addr, mgmt->bssid)) { in atheros_raw_receive()
916 drv_event_assoc(drv->hapd, mgmt->sa, iebuf, ielen, NULL, 0, in atheros_raw_receive()
924 drv_event_assoc(drv->hapd, mgmt->sa, iebuf, ielen, NULL, 0, in atheros_raw_receive()
934 wpa_supplicant_event(drv->hapd, EVENT_RX_MGMT, &event); in atheros_raw_receive()
947 wpa_supplicant_event(drv->hapd, EVENT_AUTH, &event); in atheros_raw_receive()
955 static int atheros_receive_pkt(struct atheros_driver_data *drv) in atheros_receive_pkt() argument
975 ret = set80211priv(drv, IEEE80211_IOCTL_FILTERFRAME, &filt, in atheros_receive_pkt()
982 drv->sock_raw = l2_packet_init(drv->iface, NULL, ETH_P_80211_RAW, in atheros_receive_pkt()
983 atheros_raw_receive, drv, 1); in atheros_receive_pkt()
984 if (drv->sock_raw == NULL) in atheros_receive_pkt()
990 static int atheros_reset_appfilter(struct atheros_driver_data *drv) in atheros_reset_appfilter() argument
994 return set80211priv(drv, IEEE80211_IOCTL_FILTERFRAME, &filt, in atheros_reset_appfilter()
1002 struct atheros_driver_data *drv = priv; in atheros_set_wps_ie() local
1019 (drv->wpa_ie != NULL)) { in atheros_set_wps_ie()
1021 drv->wpa_ie); in atheros_set_wps_ie()
1022 os_memcpy(&(beac_ie->app_buf[len]), wpabuf_head(drv->wpa_ie), in atheros_set_wps_ie()
1023 wpabuf_len(drv->wpa_ie)); in atheros_set_wps_ie()
1024 beac_ie->app_buflen += wpabuf_len(drv->wpa_ie); in atheros_set_wps_ie()
1029 return set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, beac_ie, in atheros_set_wps_ie()
1039 struct atheros_driver_data *drv = priv; in atheros_set_ap_wps_ie() local
1046 wpabuf_free(drv->wps_beacon_ie); in atheros_set_ap_wps_ie()
1047 drv->wps_beacon_ie = beacon ? wpabuf_dup(beacon) : NULL; in atheros_set_ap_wps_ie()
1048 wpabuf_free(drv->wps_probe_resp_ie); in atheros_set_ap_wps_ie()
1049 drv->wps_probe_resp_ie = proberesp ? wpabuf_dup(proberesp) : NULL; in atheros_set_ap_wps_ie()
1070 struct atheros_driver_data *drv = priv; in atheros_sta_auth() local
1079 if (params->fils_auth && drv->fils_en) { in atheros_sta_auth()
1119 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme)); in atheros_sta_auth()
1132 struct atheros_driver_data *drv = priv; in atheros_sta_assoc() local
1158 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme)); in atheros_sta_assoc()
1169 atheros_new_sta(struct atheros_driver_data *drv, u8 addr[IEEE80211_ADDR_LEN]) in atheros_new_sta() argument
1171 struct hostapd_data *hapd = drv->hapd; in atheros_new_sta()
1181 if (set80211priv(drv, IEEE80211_IOCTL_GETWPAIE, &ie, sizeof(ie))) { in atheros_new_sta()
1229 if (ether_addr_equal(addr, drv->acct_mac)) { in atheros_new_sta()
1231 os_memset(drv->acct_mac, 0, ETH_ALEN); in atheros_new_sta()
1232 os_memset(&drv->acct_data, 0, sizeof(drv->acct_data)); in atheros_new_sta()
1237 atheros_wireless_event_wireless_custom(struct atheros_driver_data *drv, in atheros_wireless_event_wireless_custom() argument
1259 wpa_supplicant_event(drv->hapd, in atheros_wireless_event_wireless_custom()
1278 hwaddr_aton(value, drv->acct_mac); in atheros_wireless_event_wireless_custom()
1280 drv->acct_data.rx_packets = val; in atheros_wireless_event_wireless_custom()
1282 drv->acct_data.tx_packets = val; in atheros_wireless_event_wireless_custom()
1284 drv->acct_data.rx_bytes = val; in atheros_wireless_event_wireless_custom()
1286 drv->acct_data.tx_bytes = val; in atheros_wireless_event_wireless_custom()
1295 wpa_supplicant_event(drv->hapd, EVENT_WPS_BUTTON_PUSHED, NULL); in atheros_wireless_event_wireless_custom()
1309 atheros_raw_receive(drv, NULL, in atheros_wireless_event_wireless_custom()
1322 atheros_raw_receive(drv, NULL, in atheros_wireless_event_wireless_custom()
1333 atheros_raw_receive(drv, NULL, in atheros_wireless_event_wireless_custom()
1345 atheros_raw_receive(drv, NULL, in atheros_wireless_event_wireless_custom()
1351 static void send_action_cb_event(struct atheros_driver_data *drv, in send_action_cb_event() argument
1380 wpa_supplicant_event(drv->hapd, EVENT_TX_STATUS, &event); in send_action_cb_event()
1390 static void fetch_pending_big_events(struct atheros_driver_data *drv) in fetch_pending_big_events() argument
1402 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in fetch_pending_big_events()
1408 if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_P2P_BIG_PARAM, &iwr) in fetch_pending_big_events()
1444 wpa_supplicant_event(drv->hapd, EVENT_RX_MGMT, in fetch_pending_big_events()
1452 send_action_cb_event(drv, (void *) mgmt, data_len); in fetch_pending_big_events()
1462 atheros_wireless_event_atheros_custom(struct atheros_driver_data *drv, in atheros_wireless_event_atheros_custom() argument
1468 fetch_pending_big_events(drv); in atheros_wireless_event_atheros_custom()
1472 fetch_pending_big_events(drv); in atheros_wireless_event_atheros_custom()
1480 atheros_wireless_event_wireless(struct atheros_driver_data *drv, in atheros_wireless_event_wireless() argument
1499 if (drv->we_version > 18 && in atheros_wireless_event_wireless()
1515 drv_event_disassoc(drv->hapd, in atheros_wireless_event_wireless()
1519 atheros_new_sta(drv, (u8 *) iwe->u.addr.sa_data); in atheros_wireless_event_wireless()
1537 drv, (int) iwe->u.data.flags, in atheros_wireless_event_wireless()
1541 drv, buf, buf + iwe->u.data.length); in atheros_wireless_event_wireless()
1556 struct atheros_driver_data *drv = ctx; in atheros_wireless_event_rtm_newlink() local
1560 if (ifi->ifi_index != drv->ifindex) in atheros_wireless_event_rtm_newlink()
1570 drv, ((char *) attr) + rta_len, in atheros_wireless_event_rtm_newlink()
1579 atheros_get_we_version(struct atheros_driver_data *drv) in atheros_get_we_version() argument
1586 drv->we_version = 0; in atheros_get_we_version()
1598 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in atheros_get_we_version()
1605 if (ioctl(drv->ioctl_sock, SIOCGIWRANGE, &iwr) < 0) { in atheros_get_we_version()
1617 drv->we_version = range->we_version_compiled; in atheros_get_we_version()
1626 atheros_wireless_event_init(struct atheros_driver_data *drv) in atheros_wireless_event_init() argument
1630 atheros_get_we_version(drv); in atheros_wireless_event_init()
1635 cfg->ctx = drv; in atheros_wireless_event_init()
1637 drv->netlink = netlink_init(cfg); in atheros_wireless_event_init()
1638 if (drv->netlink == NULL) { in atheros_wireless_event_init()
1651 struct atheros_driver_data *drv = priv; in atheros_send_eapol() local
1682 status = l2_packet_send(drv->sock_xmit, addr, ETH_P_EAPOL, bp, len); in atheros_send_eapol()
1692 struct atheros_driver_data *drv = ctx; in handle_read() local
1693 drv_event_eapol_rx(drv->hapd, src_addr, buf + sizeof(struct l2_ethhdr), in handle_read()
1698 static void atheros_read_fils_cap(struct atheros_driver_data *drv) in atheros_read_fils_cap() argument
1705 if (get80211param(drv, IEEE80211_PARAM_ENABLE_FILS, &fils) < 0) { in atheros_read_fils_cap()
1713 drv->fils_en = fils; in atheros_read_fils_cap()
1714 wpa_printf(MSG_DEBUG, "atheros: fils_en=%d", drv->fils_en); in atheros_read_fils_cap()
1721 struct atheros_driver_data *drv; in atheros_init() local
1726 drv = os_zalloc(sizeof(struct atheros_driver_data)); in atheros_init()
1727 if (drv == NULL) { in atheros_init()
1733 drv->hapd = hapd; in atheros_init()
1734 drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0); in atheros_init()
1735 if (drv->ioctl_sock < 0) { in atheros_init()
1740 os_memcpy(drv->iface, params->ifname, sizeof(drv->iface)); in atheros_init()
1743 os_strlcpy(ifr.ifr_name, drv->iface, sizeof(ifr.ifr_name)); in atheros_init()
1744 if (ioctl(drv->ioctl_sock, SIOCGIFINDEX, &ifr) != 0) { in atheros_init()
1749 drv->ifindex = ifr.ifr_ifindex; in atheros_init()
1751 drv->sock_xmit = l2_packet_init(drv->iface, NULL, ETH_P_EAPOL, in atheros_init()
1752 handle_read, drv, 1); in atheros_init()
1753 if (drv->sock_xmit == NULL) in atheros_init()
1755 if (l2_packet_get_own_addr(drv->sock_xmit, params->own_addr)) in atheros_init()
1757 os_memcpy(drv->own_addr, params->own_addr, ETH_ALEN); in atheros_init()
1761 drv->sock_recv = l2_packet_init(params->bridge[0], NULL, in atheros_init()
1762 ETH_P_EAPOL, handle_read, drv, in atheros_init()
1764 if (drv->sock_recv == NULL) in atheros_init()
1766 } else if (linux_br_get(brname, drv->iface) == 0) { in atheros_init()
1769 drv->sock_recv = l2_packet_init(brname, NULL, ETH_P_EAPOL, in atheros_init()
1770 handle_read, drv, 1); in atheros_init()
1771 if (drv->sock_recv == NULL) in atheros_init()
1774 drv->sock_recv = drv->sock_xmit; in atheros_init()
1777 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in atheros_init()
1781 if (ioctl(drv->ioctl_sock, SIOCSIWMODE, &iwr) < 0) { in atheros_init()
1789 linux_set_iface_flags(drv->ioctl_sock, drv->iface, 0); in atheros_init()
1790 atheros_set_privacy(drv, 0); /* default to no privacy */ in atheros_init()
1792 if (atheros_receive_pkt(drv)) in atheros_init()
1795 if (atheros_wireless_event_init(drv)) in atheros_init()
1799 atheros_read_fils_cap(drv); in atheros_init()
1801 return drv; in atheros_init()
1803 atheros_reset_appfilter(drv); in atheros_init()
1804 if (drv->sock_raw) in atheros_init()
1805 l2_packet_deinit(drv->sock_raw); in atheros_init()
1806 if (drv->sock_recv != NULL && drv->sock_recv != drv->sock_xmit) in atheros_init()
1807 l2_packet_deinit(drv->sock_recv); in atheros_init()
1808 if (drv->sock_xmit != NULL) in atheros_init()
1809 l2_packet_deinit(drv->sock_xmit); in atheros_init()
1810 if (drv->ioctl_sock >= 0) in atheros_init()
1811 close(drv->ioctl_sock); in atheros_init()
1812 os_free(drv); in atheros_init()
1820 struct atheros_driver_data *drv = priv; in atheros_deinit() local
1822 atheros_reset_appfilter(drv); in atheros_deinit()
1824 if (drv->wpa_ie || drv->wps_beacon_ie || drv->wps_probe_resp_ie) { in atheros_deinit()
1826 wpabuf_free(drv->wpa_ie); in atheros_deinit()
1827 wpabuf_free(drv->wps_beacon_ie); in atheros_deinit()
1828 wpabuf_free(drv->wps_probe_resp_ie); in atheros_deinit()
1830 netlink_deinit(drv->netlink); in atheros_deinit()
1831 (void) linux_set_iface_flags(drv->ioctl_sock, drv->iface, 0); in atheros_deinit()
1832 if (drv->ioctl_sock >= 0) in atheros_deinit()
1833 close(drv->ioctl_sock); in atheros_deinit()
1834 if (drv->sock_recv != NULL && drv->sock_recv != drv->sock_xmit) in atheros_deinit()
1835 l2_packet_deinit(drv->sock_recv); in atheros_deinit()
1836 if (drv->sock_xmit != NULL) in atheros_deinit()
1837 l2_packet_deinit(drv->sock_xmit); in atheros_deinit()
1838 if (drv->sock_raw) in atheros_deinit()
1839 l2_packet_deinit(drv->sock_raw); in atheros_deinit()
1840 os_free(drv); in atheros_deinit()
1846 struct atheros_driver_data *drv = priv; in atheros_set_ssid() local
1850 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in atheros_set_ssid()
1855 if (ioctl(drv->ioctl_sock, SIOCSIWESSID, &iwr) < 0) { in atheros_set_ssid()
1866 struct atheros_driver_data *drv = priv; in atheros_get_ssid() local
1871 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in atheros_get_ssid()
1876 if (ioctl(drv->ioctl_sock, SIOCGIWESSID, &iwr) < 0) { in atheros_get_ssid()
1889 struct atheros_driver_data *drv = priv; in atheros_set_countermeasures() local
1891 return set80211param(drv, IEEE80211_PARAM_COUNTERMEASURES, enabled); in atheros_set_countermeasures()
1897 struct atheros_driver_data *drv = priv; in atheros_commit() local
1898 return linux_set_iface_flags(drv->ioctl_sock, drv->iface, 1); in atheros_commit()
1971 struct atheros_driver_data *drv = priv; in atheros_send_mgmt() local
1988 return set80211priv(drv, IEEE80211_IOCTL_SEND_MGMT, mgmt_frm, in atheros_send_mgmt()
1998 struct atheros_driver_data *drv = priv; in atheros_add_tspec() local
2007 retv = set80211priv(drv, IEEE80211_IOCTL_RES_REQ, &req, in atheros_add_tspec()
2021 struct atheros_driver_data *drv = priv; in atheros_add_sta_node() local
2029 return set80211priv(drv, IEEE80211_IOCTL_RES_REQ, &req, in atheros_add_sta_node()
2038 set80211big(struct atheros_driver_data *drv, int op, const void *data, int len) in set80211big() argument
2043 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in set80211big()
2051 if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_P2P_BIG_PARAM, &iwr) < 0) { in set80211big()
2069 struct atheros_driver_data *drv = priv; in atheros_send_action() local
2088 res = set80211big(drv, IEEE80211_IOC_P2P_SEND_ACTION, in atheros_send_action()
2096 static int athr_wnm_tfs(struct atheros_driver_data *drv, const u8* peer, in athr_wnm_tfs() argument
2105 drv->iface, oper, MAC2STR(peer)); in athr_wnm_tfs()
2128 if (set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, tfs_ie, in athr_wnm_tfs()
2147 if (set80211priv(drv, IEEE80211_IOCTL_GET_APPIEBUF, tfs_ie, in athr_wnm_tfs()
2174 if (set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, tfs_ie, in athr_wnm_tfs()
2190 static int atheros_wnm_sleep(struct atheros_driver_data *drv, in atheros_wnm_sleep() argument
2218 ret = atheros_set_wps_ie(drv, data, dlen, IEEE80211_APPIE_FRAME_WNM); in atheros_wnm_sleep()
2229 struct atheros_driver_data *drv = priv; in atheros_wnm_oper() local
2236 return atheros_wnm_sleep(drv, peer, oper); in atheros_wnm_oper()
2241 return athr_wnm_tfs(drv, peer, buf, buf_len, oper); in atheros_wnm_oper()