/* * Driver interaction with Linux nl80211/cfg80211 * Copyright (c) 2002-2010, Jouni Malinen <j@w1.fi> * Copyright (c) 2003-2004, Instant802 Networks, Inc. * Copyright (c) 2005-2006, Devicescape Software, Inc. * Copyright (c) 2007, Johannes Berg <johannes@sipsolutions.net> * Copyright (c) 2009-2010, Atheros Communications * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Alternatively, this software may be distributed under the terms of BSD * license. * * See README and COPYING for more details. */ #ifndef _DRIVER_NL80211_H_ #define _DRIVER_NL80211_H_ #include "includes.h" #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <net/if.h> #include <netlink/genl/genl.h> #include <netlink/genl/family.h> #include <netlink/genl/ctrl.h> #include <linux/rtnetlink.h> #include <netpacket/packet.h> #include <linux/filter.h> #include "nl80211_copy.h" #include "common.h" #include "eloop.h" #include "utils/list.h" #include "common/ieee802_11_defs.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; }; struct i802_bss { struct wpa_driver_nl80211_data *drv; struct i802_bss *next; int ifindex; char ifname[IFNAMSIZ + 1]; char brname[IFNAMSIZ]; unsigned int beacon_set:1; unsigned int added_if_into_bridge:1; unsigned int added_bridge:1; }; struct wpa_driver_nl80211_data { struct nl80211_global *global; struct dl_list list; u8 addr[ETH_ALEN]; char phyname[32]; void *ctx; struct netlink_data *netlink; int ioctl_sock; /* socket for ioctl() use */ int ifindex; int if_removed; int if_disabled; struct rfkill_data *rfkill; struct wpa_driver_capa capa; int has_capability; int operstate; int scan_complete_events; struct nl_handle *nl_handle; struct nl_handle *nl_handle_event; struct nl_handle *nl_handle_preq; struct nl_cache *nl_cache; struct nl_cache *nl_cache_event; struct nl_cache *nl_cache_preq; struct nl_cb *nl_cb; struct genl_family *nl80211; u8 auth_bssid[ETH_ALEN]; u8 bssid[ETH_ALEN]; int associated; u8 ssid[32]; size_t ssid_len; int nlmode; int ap_scan_as_station; unsigned int assoc_freq; int monitor_sock; int monitor_ifidx; int no_monitor_iface_capab; int disable_11b_rates; unsigned int pending_remain_on_chan: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; #ifdef HOSTAPD int eapol_sock; /* socket for EAPOL frames */ int default_if_indices[16]; int *if_indices; int num_if_indices; int last_freq; int last_freq_ht; #endif /* HOSTAPD */ }; #endif