/* * Driver interaction with Linux nl80211/cfg80211 * Copyright (c) 2002-2014, Jouni Malinen * Copyright (c) 2003-2004, Instant802 Networks, Inc. * Copyright (c) 2005-2006, Devicescape Software, Inc. * Copyright (c) 2007, Johannes Berg * Copyright (c) 2009-2010, Atheros Communications * * This software may be distributed under the terms of the BSD license. * See README for more details. */ #ifndef _DRIVER_NL80211_H_ #define _DRIVER_NL80211_H_ #include "includes.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "nl80211_copy.h" #include "common.h" #include "eloop.h" #include "utils/list.h" #include "common/qca-vendor.h" #include "common/ieee802_11_defs.h" #include "common/ieee802_11_common.h" #include "l2_packet/l2_packet.h" #include "netlink.h" #include "linux_ioctl.h" #include "radiotap.h" #include "radiotap_iter.h" #include "rfkill.h" #include "driver.h" #ifdef CONFIG_LIBNL20 /* libnl 2.0 compatibility code */ #define nl_handle nl_sock #define nl80211_handle_alloc nl_socket_alloc_cb #define nl80211_handle_destroy nl_socket_free #endif /* CONFIG_LIBNL20 */ #ifndef IFF_LOWER_UP #define IFF_LOWER_UP 0x10000 /* driver signals L1 up */ #endif #ifndef IFF_DORMANT #define IFF_DORMANT 0x20000 /* driver signals dormant */ #endif #ifndef IF_OPER_DORMANT #define IF_OPER_DORMANT 5 #endif #ifndef IF_OPER_UP #define IF_OPER_UP 6 #endif struct nl80211_global { struct dl_list interfaces; int if_add_ifindex; u64 if_add_wdevid; int if_add_wdevid_set; struct netlink_data *netlink; struct nl_cb *nl_cb; struct nl_handle *nl; int nl80211_id; int ioctl_sock; /* socket for ioctl() use */ struct nl_handle *nl_event; }; struct nl80211_wiphy_data { struct dl_list list; struct dl_list bsss; struct dl_list drvs; struct nl_handle *nl_beacons; struct nl_cb *nl_cb; int wiphy_idx; }; struct i802_bss { struct wpa_driver_nl80211_data *drv; struct i802_bss *next; int ifindex; u64 wdev_id; char ifname[IFNAMSIZ + 1]; char brname[IFNAMSIZ]; unsigned int beacon_set:1; unsigned int added_if_into_bridge:1; unsigned int added_bridge:1; unsigned int in_deinit:1; unsigned int wdev_id_set:1; unsigned int added_if:1; u8 addr[ETH_ALEN]; int freq; int if_dynamic; void *ctx; struct nl_handle *nl_preq, *nl_mgmt; struct nl_cb *nl_cb; struct nl80211_wiphy_data *wiphy_data; struct dl_list wiphy_list; }; struct wpa_driver_nl80211_data { struct nl80211_global *global; struct dl_list list; struct dl_list wiphy_list; char phyname[32]; void *ctx; int ifindex; int if_removed; int if_disabled; int ignore_if_down_event; struct rfkill_data *rfkill; struct wpa_driver_capa capa; u8 *extended_capa, *extended_capa_mask; unsigned int extended_capa_len; int has_capability; int operstate; int scan_complete_events; enum scan_states { NO_SCAN, SCAN_REQUESTED, SCAN_STARTED, SCAN_COMPLETED, SCAN_ABORTED, SCHED_SCAN_STARTED, SCHED_SCAN_STOPPED, SCHED_SCAN_RESULTS } scan_state; struct nl_cb *nl_cb; u8 auth_bssid[ETH_ALEN]; u8 auth_attempt_bssid[ETH_ALEN]; u8 bssid[ETH_ALEN]; u8 prev_bssid[ETH_ALEN]; int associated; u8 ssid[32]; size_t ssid_len; enum nl80211_iftype nlmode; enum nl80211_iftype ap_scan_as_station; unsigned int assoc_freq; int monitor_sock; int monitor_ifidx; int monitor_refcount; unsigned int disabled_11b_rates:1; unsigned int pending_remain_on_chan:1; unsigned int in_interface_list:1; unsigned int device_ap_sme:1; unsigned int poll_command_supported:1; unsigned int data_tx_status:1; unsigned int scan_for_auth:1; unsigned int retry_auth:1; unsigned int use_monitor:1; unsigned int ignore_next_local_disconnect:1; unsigned int ignore_next_local_deauth:1; unsigned int allow_p2p_device:1; unsigned int hostapd:1; unsigned int start_mode_ap:1; unsigned int start_iface_up:1; unsigned int test_use_roc_tx:1; unsigned int ignore_deauth_event:1; unsigned int dfs_vendor_cmd_avail:1; u64 remain_on_chan_cookie; u64 send_action_cookie; unsigned int last_mgmt_freq; struct wpa_driver_scan_filter *filter_ssids; size_t num_filter_ssids; struct i802_bss *first_bss; int eapol_tx_sock; int eapol_sock; /* socket for EAPOL frames */ int default_if_indices[16]; int *if_indices; int num_if_indices; /* From failed authentication command */ int auth_freq; u8 auth_bssid_[ETH_ALEN]; u8 auth_ssid[32]; size_t auth_ssid_len; int auth_alg; u8 *auth_ie; size_t auth_ie_len; u8 auth_wep_key[4][16]; size_t auth_wep_key_len[4]; int auth_wep_tx_keyidx; int auth_local_state_change; int auth_p2p; }; #endif