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