Home | History | Annotate | Download | only in drivers

Lines Matching refs:drv

178 set80211priv(struct atheros_driver_data *drv, int op, void *data, int len)
189 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
205 if (ioctl(drv->ioctl_sock, op, &iwr) < 0) {
208 __func__, drv->iface, op,
217 set80211param(struct atheros_driver_data *drv, int op, int arg)
222 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
226 if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_SETPARAM, &iwr) < 0) {
229 "(%s) arg %d)", __func__, drv->iface, op,
254 atheros_configure_wpa(struct atheros_driver_data *drv,
281 if (set80211param(drv, IEEE80211_PARAM_MCASTCIPHER, v)) {
288 if (set80211param(drv, IEEE80211_PARAM_MCASTKEYLEN, v)) {
302 if (set80211param(drv, IEEE80211_PARAM_UCASTCIPHERS, v)) {
309 if (set80211param(drv, IEEE80211_PARAM_KEYMGTALGS,
328 if (set80211param(drv, IEEE80211_PARAM_RSNCAPS, v)) {
334 if (set80211param(drv, IEEE80211_PARAM_WPA, params->wpa)) {
344 struct atheros_driver_data *drv = priv;
354 return atheros_set_privacy(drv, 0);
357 hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
361 if (params->wpa && atheros_configure_wpa(drv, params) != 0) {
362 hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
368 hostapd_logger(drv->hapd, NULL, HOSTAPD_MODULE_DRIVER,
379 struct atheros_driver_data *drv = priv;
383 return set80211param(drv, IEEE80211_PARAM_PRIVACY, enabled);
389 struct atheros_driver_data *drv = priv;
402 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme));
426 struct atheros_driver_data *drv = priv;
441 ret = set80211priv(drv, IEEE80211_IOCTL_DELKEY, &wk, sizeof(wk));
456 struct atheros_driver_data *drv = priv;
462 return atheros_del_key(drv, addr, key_idx);
509 ret = set80211priv(drv, IEEE80211_IOCTL_SETKEY, &wk, sizeof(wk));
525 struct atheros_driver_data *drv = priv;
538 if (set80211priv(drv, IEEE80211_IOCTL_GETKEY, &wk, sizeof(wk))) {
582 struct atheros_driver_data *drv = priv;
592 if (set80211priv(drv, IEEE80211_IOCTL_STA_STATS,
596 if (memcmp(addr, drv->acct_mac, ETH_ALEN) == 0) {
597 memcpy(data, &drv->acct_data, sizeof(*data));
616 struct atheros_driver_data *drv = priv;
624 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme,
638 struct atheros_driver_data *drv = priv;
646 wpabuf_free(drv->wpa_ie);
647 drv->wpa_ie = wpabuf_alloc_copy(ie, ie_len);
656 if (drv->wps_beacon_ie != NULL) {
658 wpabuf_head(drv->wps_beacon_ie),
659 wpabuf_len(drv->wps_beacon_ie));
660 app_ie->app_buflen = ie_len + wpabuf_len(drv->wps_beacon_ie);
664 set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, app_ie,
670 if (drv->wps_probe_resp_ie != NULL) {
672 wpabuf_head(drv->wps_probe_resp_ie),
673 wpabuf_len(drv->wps_probe_resp_ie));
675 wpabuf_len(drv->wps_probe_resp_ie);
680 set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, app_ie,
690 struct atheros_driver_data *drv = priv;
700 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme));
714 struct atheros_driver_data *drv = priv;
724 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme));
738 struct atheros_driver_data *drv = ctx;
761 wpa_supplicant_event(drv->hapd, EVENT_RX_PROBE_REQ, &event);
769 struct atheros_driver_data *drv = ctx;
791 if (os_memcmp(drv->own_addr, mgmt->bssid, ETH_ALEN) != 0) {
802 drv_event_assoc(drv->hapd, mgmt->sa, iebuf, ielen, 0);
809 drv_event_assoc(drv->hapd, mgmt->sa, iebuf, ielen, 1);
821 wpa_supplicant_event(drv->hapd, EVENT_RX_ACTION, &event);
837 wpa_supplicant_event(drv->hapd, EVENT_AUTH, &event);
849 struct atheros_driver_data *drv = ctx;
873 wpa_supplicant_event(drv->hapd, EVENT_RX_MGMT, &event);
881 struct atheros_driver_data *drv = ctx;
901 if (os_memcmp(drv->own_addr, mgmt->bssid, ETH_ALEN) != 0) {
918 wpa_supplicant_event(drv->hapd, EVENT_RX_ACTION, &event);
945 static int atheros_receive_pkt(struct atheros_driver_data *drv)
967 ret = set80211priv(drv, IEEE80211_IOCTL_FILTERFRAME, &filt,
974 drv->sock_raw = l2_packet_init(drv->iface, NULL, ETH_P_80211_RAW,
975 atheros_raw_receive, drv, 1);
976 if (drv->sock_raw == NULL)
982 static int atheros_reset_appfilter(struct atheros_driver_data *drv)
986 return set80211priv(drv, IEEE80211_IOCTL_FILTERFRAME, &filt,
994 struct atheros_driver_data *drv = priv;
1010 (drv->wpa_ie != NULL)) {
1012 drv->wpa_ie);
1013 os_memcpy(&(beac_ie->app_buf[len]), wpabuf_head(drv->wpa_ie),
1014 wpabuf_len(drv->wpa_ie));
1015 beac_ie->app_buflen += wpabuf_len(drv->wpa_ie);
1020 return set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, beac_ie,
1030 struct atheros_driver_data *drv = priv;
1037 wpabuf_free(drv->wps_beacon_ie);
1038 drv->wps_beacon_ie = beacon ? wpabuf_dup(beacon) : NULL;
1039 wpabuf_free(drv->wps_probe_resp_ie);
1040 drv->wps_probe_resp_ie = proberesp ? wpabuf_dup(proberesp) : NULL;
1063 struct atheros_driver_data *drv = priv;
1087 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme));
1100 struct atheros_driver_data *drv = priv;
1126 ret = set80211priv(drv, IEEE80211_IOCTL_SETMLME, &mlme, sizeof(mlme));
1137 atheros_new_sta(struct atheros_driver_data *drv, u8 addr[IEEE80211_ADDR_LEN])
1139 struct hostapd_data *hapd = drv->hapd;
1149 if (set80211priv(drv, IEEE80211_IOCTL_GETWPAIE, &ie, sizeof(ie))) {
1198 if (memcmp(addr, drv->acct_mac, ETH_ALEN) == 0) {
1200 memset(drv->acct_mac, 0, ETH_ALEN);
1201 memset(&drv->acct_data, 0, sizeof(drv->acct_data));
1206 atheros_wireless_event_wireless_custom(struct atheros_driver_data *drv,
1227 wpa_supplicant_event(drv->hapd,
1246 hwaddr_aton(value, drv->acct_mac);
1248 drv->acct_data.rx_packets = val;
1250 drv->acct_data.tx_packets = val;
1252 drv->acct_data.rx_bytes = val;
1254 drv->acct_data.tx_bytes = val;
1263 wpa_supplicant_event(drv->hapd, EVENT_WPS_BUTTON_PUSHED, NULL);
1280 atheros_raw_receive(drv, NULL,
1291 atheros_raw_receive(drv, NULL,
1302 atheros_raw_receive(drv, NULL,
1313 atheros_raw_receive(drv, NULL,
1325 static void fetch_pending_big_events(struct atheros_driver_data *drv)
1337 os_strncpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
1343 if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_P2P_BIG_PARAM, &iwr)
1379 wpa_supplicant_event(drv->hapd, EVENT_RX_MGMT,
1392 atheros_wireless_event_atheros_custom(struct atheros_driver_data *drv,
1398 fetch_pending_big_events(drv);
1406 atheros_wireless_event_wireless(struct atheros_driver_data *drv,
1425 if (drv->we_version > 18 &&
1441 drv_event_disassoc(drv->hapd,
1445 atheros_new_sta(drv, (u8 *) iwe->u.addr.sa_data);
1463 drv, (int) iwe->u.data.flags,
1467 drv, buf, buf + iwe->u.data.length);
1482 struct atheros_driver_data *drv = ctx;
1486 if (ifi->ifi_index != drv->ifindex)
1496 drv, ((char *) attr) + rta_len,
1505 atheros_get_we_version(struct atheros_driver_data *drv)
1512 drv->we_version = 0;
1524 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
1531 if (ioctl(drv->ioctl_sock, SIOCGIWRANGE, &iwr) < 0) {
1542 drv->we_version = range->we_version_compiled;
1551 atheros_wireless_event_init(struct atheros_driver_data *drv)
1555 atheros_get_we_version(drv);
1560 cfg->ctx = drv;
1562 drv->netlink = netlink_init(cfg);
1563 if (drv->netlink == NULL) {
1576 struct atheros_driver_data *drv = priv;
1606 status = l2_packet_send(drv->sock_xmit, addr, ETH_P_EAPOL, bp, len);
1616 struct atheros_driver_data *drv = ctx;
1617 drv_event_eapol_rx(drv->hapd, src_addr, buf + sizeof(struct l2_ethhdr),
1624 struct atheros_driver_data *drv;
1629 drv = os_zalloc(sizeof(struct atheros_driver_data));
1630 if (drv == NULL) {
1635 drv->hapd = hapd;
1636 drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
1637 if (drv->ioctl_sock < 0) {
1641 memcpy(drv->iface, params->ifname, sizeof(drv->iface));
1644 os_strlcpy(ifr.ifr_name, drv->iface, sizeof(ifr.ifr_name));
1645 if (ioctl(drv->ioctl_sock, SIOCGIFINDEX, &ifr) != 0) {
1649 drv->ifindex = ifr.ifr_ifindex;
1651 drv->sock_xmit = l2_packet_init(drv->iface, NULL, ETH_P_EAPOL,
1652 handle_read, drv, 1);
1653 if (drv->sock_xmit == NULL)
1655 if (l2_packet_get_own_addr(drv->sock_xmit, params->own_addr))
1657 os_memcpy(drv->own_addr, params->own_addr, ETH_ALEN);
1661 drv->sock_recv = l2_packet_init(params->bridge[0], NULL,
1662 ETH_P_EAPOL, handle_read, drv,
1664 if (drv->sock_recv == NULL)
1666 } else if (linux_br_get(brname, drv->iface) == 0) {
1669 drv->sock_recv = l2_packet_init(brname, NULL, ETH_P_EAPOL,
1670 handle_read, drv, 1);
1671 if (drv->sock_recv == NULL)
1674 drv->sock_recv = drv->sock_xmit;
1677 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
1681 if (ioctl(drv->ioctl_sock, SIOCSIWMODE, &iwr) < 0) {
1688 linux_set_iface_flags(drv->ioctl_sock, drv->iface, 0);
1689 atheros_set_privacy(drv, 0); /* default to no privacy */
1691 if (atheros_receive_pkt(drv))
1694 if (atheros_wireless_event_init(drv))
1697 return drv;
1699 atheros_reset_appfilter(drv);
1700 if (drv->sock_raw)
1701 l2_packet_deinit(drv->sock_raw);
1702 if (drv->sock_recv != NULL && drv->sock_recv != drv->sock_xmit)
1703 l2_packet_deinit(drv->sock_recv);
1704 if (drv->sock_xmit != NULL)
1705 l2_packet_deinit(drv->sock_xmit);
1706 if (drv->ioctl_sock >= 0)
1707 close(drv->ioctl_sock);
1708 if (drv != NULL)
1709 free(drv);
1717 struct atheros_driver_data *drv = priv;
1719 atheros_reset_appfilter(drv);
1720 netlink_deinit(drv->netlink);
1721 (void) linux_set_iface_flags(drv->ioctl_sock, drv->iface, 0);
1722 if (drv->ioctl_sock >= 0)
1723 close(drv->ioctl_sock);
1724 if (drv->sock_recv != NULL && drv->sock_recv != drv->sock_xmit)
1725 l2_packet_deinit(drv->sock_recv);
1726 if (drv->sock_xmit != NULL)
1727 l2_packet_deinit(drv->sock_xmit);
1728 if (drv->sock_raw)
1729 l2_packet_deinit(drv->sock_raw);
1730 wpabuf_free(drv->wpa_ie);
1731 wpabuf_free(drv->wps_beacon_ie);
1732 wpabuf_free(drv->wps_probe_resp_ie);
1733 free(drv);
1739 struct atheros_driver_data *drv = priv;
1743 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
1748 if (ioctl(drv->ioctl_sock, SIOCSIWESSID, &iwr) < 0) {
1759 struct atheros_driver_data *drv = priv;
1764 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
1769 if (ioctl(drv
1781 struct atheros_driver_data *drv = priv;
1783 return set80211param(drv, IEEE80211_PARAM_COUNTERMEASURES, enabled);
1789 struct atheros_driver_data *drv = priv;
1790 return linux_set_iface_flags(drv->ioctl_sock, drv->iface, 1);
1844 struct atheros_driver_data *drv = priv;
1861 return set80211priv(drv, IEEE80211_IOCTL_SEND_MGMT, mgmt_frm,
1869 struct atheros_driver_data *drv = priv;
1878 retv = set80211priv(drv, IEEE80211_IOCTL_RES_REQ, &req,
1892 struct atheros_driver_data *drv = priv;
1900 return set80211priv(drv, IEEE80211_IOCTL_RES_REQ, &req,
1909 set80211big(struct atheros_driver_data *drv, int op, const void *data, int len)
1914 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ);
1922 if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_P2P_BIG_PARAM, &iwr) < 0) {
1940 struct atheros_driver_data *drv = priv;
1959 res = set80211big(drv, IEEE80211_IOC_P2P_SEND_ACTION,
1967 static int athr_wnm_tfs(struct atheros_driver_data *drv, const u8* peer,
1976 drv->iface, oper, MAC2STR(peer));
1999 if (set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, tfs_ie,
2018 if (set80211priv(drv, IEEE80211_IOCTL_GET_APPIEBUF, tfs_ie,
2045 if (set80211priv(drv, IEEE80211_IOCTL_SET_APPIEBUF, tfs_ie,
2061 static int atheros_wnm_sleep(struct atheros_driver_data *drv,
2089 ret = atheros_set_wps_ie(drv, data, dlen, IEEE80211_APPIE_FRAME_WNM);
2100 struct atheros_driver_data *drv = priv;
2107 return atheros_wnm_sleep(drv, peer, oper);
2112 return athr_wnm_tfs(drv, peer, buf, buf_len, oper);