diff options
| -rw-r--r-- | package/iwinfo/Makefile | 2 | ||||
| -rw-r--r-- | package/iwinfo/src/include/iwinfo.h | 12 | ||||
| -rw-r--r-- | package/iwinfo/src/include/iwinfo/api/broadcom.h | 24 | ||||
| -rw-r--r-- | package/iwinfo/src/include/iwinfo/api/madwifi.h | 6 | ||||
| -rw-r--r-- | package/iwinfo/src/include/iwinfo/api/nl80211.h | 1064 | ||||
| -rw-r--r-- | package/iwinfo/src/iwinfo_cli.c | 43 | ||||
| -rw-r--r-- | package/iwinfo/src/iwinfo_lua.c | 39 | ||||
| -rw-r--r-- | package/iwinfo/src/iwinfo_madwifi.c | 20 | ||||
| -rw-r--r-- | package/iwinfo/src/iwinfo_nl80211.c | 72 | ||||
| -rw-r--r-- | package/iwinfo/src/iwinfo_wl.c | 111 | 
10 files changed, 1305 insertions, 88 deletions
| diff --git a/package/iwinfo/Makefile b/package/iwinfo/Makefile index d58d62d46..63ccec9b1 100644 --- a/package/iwinfo/Makefile +++ b/package/iwinfo/Makefile @@ -7,7 +7,7 @@  include $(TOPDIR)/rules.mk  PKG_NAME:=libiwinfo -PKG_RELEASE:=28 +PKG_RELEASE:=29  PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)  PKG_CONFIG_DEPENDS := \ diff --git a/package/iwinfo/src/include/iwinfo.h b/package/iwinfo/src/include/iwinfo.h index 40b85a049..72e233361 100644 --- a/package/iwinfo/src/include/iwinfo.h +++ b/package/iwinfo/src/include/iwinfo.h @@ -49,10 +49,22 @@ extern const char *IWINFO_KMGMT_NAMES[];  extern const char *IWINFO_AUTH_NAMES[]; +struct iwinfo_rate_entry { +	uint16_t rate; +	uint8_t mcs; +	uint8_t is_40mhz:1; +	uint8_t is_short_gi:1; +}; +  struct iwinfo_assoclist_entry {  	uint8_t	mac[6];  	int8_t signal;  	int8_t noise; +	uint32_t inactive; +	uint32_t rx_packets; +	uint32_t tx_packets; +	struct iwinfo_rate_entry rx_rate; +	struct iwinfo_rate_entry tx_rate;  };  struct iwinfo_txpwrlist_entry { diff --git a/package/iwinfo/src/include/iwinfo/api/broadcom.h b/package/iwinfo/src/include/iwinfo/api/broadcom.h index bae69c7f7..50eedd9e4 100644 --- a/package/iwinfo/src/include/iwinfo/api/broadcom.h +++ b/package/iwinfo/src/include/iwinfo/api/broadcom.h @@ -64,6 +64,30 @@ typedef struct wl_sta_rssi {  	uint16_t				foo;  } wl_sta_rssi_t; +#define WL_NUMRATES     255 /* max # of rates in a rateset */ +typedef struct wl_rateset { +    uint32_t  				count;          /* # rates in this set */ +    uint8_t   				rates[WL_NUMRATES]; /* rates in 500kbps units w/hi bit set if basic */ +} wl_rateset_t; + +typedef struct wl_sta_info { +    uint16_t				ver;        /* version of this struct */ +    uint16_t				len;        /* length in bytes of this structure */ +    uint16_t				cap;        /* sta's advertised capabilities */ +    uint32_t				flags;      /* flags defined below */ +    uint32_t				idle;       /* time since data pkt rx'd from sta */ +    unsigned char			ea[6];      /* Station address */ +    wl_rateset_t			rateset;    /* rateset in use */ +    uint32_t				in;   		/* seconds elapsed since associated */ +    uint32_t				listen_interval_inms; /* Min Listen interval in ms for this STA */ +    uint32_t				tx_pkts;    /* # of packets transmitted */ +    uint32_t				tx_failures;    /* # of packets failed */ +    uint32_t				rx_ucast_pkts;  /* # of unicast packets received */ +    uint32_t				rx_mcast_pkts;  /* # of multicast packets received */ +    uint32_t				tx_rate;    /* Rate of last successful tx frame */ +    uint32_t				rx_rate;    /* Rate of last successful rx frame */ +} wl_sta_info_t; +  typedef struct wlc_ssid {  	uint32_t				ssid_len;  	unsigned char			ssid[32]; diff --git a/package/iwinfo/src/include/iwinfo/api/madwifi.h b/package/iwinfo/src/include/iwinfo/api/madwifi.h index fe4b3e62a..80d32e195 100644 --- a/package/iwinfo/src/include/iwinfo/api/madwifi.h +++ b/package/iwinfo/src/include/iwinfo/api/madwifi.h @@ -22,8 +22,10 @@  #define _MADWIFI_H  /* ieee80211.h */ -#define	IEEE80211_ADDR_LEN		6 -#define	IEEE80211_RATE_VAL		0x7f +#define	IEEE80211_ADDR_LEN			6 +#define	IEEE80211_RATE_VAL			0x7f +#define	IEEE80211_SEQ_SEQ_MASK		0xfff0 +#define	IEEE80211_SEQ_SEQ_SHIFT		4  /* ieee80211_crypto.h */ diff --git a/package/iwinfo/src/include/iwinfo/api/nl80211.h b/package/iwinfo/src/include/iwinfo/api/nl80211.h index 999e35421..d73dcb8e8 100644 --- a/package/iwinfo/src/include/iwinfo/api/nl80211.h +++ b/package/iwinfo/src/include/iwinfo/api/nl80211.h @@ -6,7 +6,7 @@   * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>   * Copyright 2008 Michael Wu <flamingice@sourmilk.net>   * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> - * Copyright 2008 Michael Buesch <mb@bu3sch.de> + * Copyright 2008 Michael Buesch <m@bues.ch>   * Copyright 2008, 2009 Luis R. Rodriguez <lrodriguez@atheros.com>   * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>   * Copyright 2008 Colin McCabe <colin@cozybit.com> @@ -77,6 +77,39 @@   */  /** + * DOC: Virtual interface / concurrency capabilities + * + * Some devices are able to operate with virtual MACs, they can have + * more than one virtual interface. The capability handling for this + * is a bit complex though, as there may be a number of restrictions + * on the types of concurrency that are supported. + * + * To start with, each device supports the interface types listed in + * the %NL80211_ATTR_SUPPORTED_IFTYPES attribute, but by listing the + * types there no concurrency is implied. + * + * Once concurrency is desired, more attributes must be observed: + * To start with, since some interface types are purely managed in + * software, like the AP-VLAN type in mac80211 for example, there's + * an additional list of these, they can be added at any time and + * are only restricted by some semantic restrictions (e.g. AP-VLAN + * cannot be added without a corresponding AP interface). This list + * is exported in the %NL80211_ATTR_SOFTWARE_IFTYPES attribute. + * + * Further, the list of supported combinations is exported. This is + * in the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute. Basically, + * it exports a list of "groups", and at any point in time the + * interfaces that are currently active must fall into any one of + * the advertised groups. Within each group, there are restrictions + * on the number of interfaces of different types that are supported + * and also the number of different channels, along with potentially + * some other restrictions. See &enum nl80211_if_combination_attrs. + * + * All together, these attributes define the concurrency of virtual + * interfaces that a given device supports. + */ + +/**   * enum nl80211_commands - supported nl80211 commands   *   * @NL80211_CMD_UNSPEC: unspecified command to catch errors @@ -128,6 +161,13 @@   * @NL80211_CMD_SET_BEACON: set the beacon on an access point interface   *	using the %NL80211_ATTR_BEACON_INTERVAL, %NL80211_ATTR_DTIM_PERIOD,   *	%NL80211_ATTR_BEACON_HEAD and %NL80211_ATTR_BEACON_TAIL attributes. + *	Following attributes are provided for drivers that generate full Beacon + *	and Probe Response frames internally: %NL80211_ATTR_SSID, + *	%NL80211_ATTR_HIDDEN_SSID, %NL80211_ATTR_CIPHERS_PAIRWISE, + *	%NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS, + *	%NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY, + *	%NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_IE, %NL80211_ATTR_IE_PROBE_RESP, + *	%NL80211_ATTR_IE_ASSOC_RESP.   * @NL80211_CMD_NEW_BEACON: add a new beacon to an access point interface,   *	parameters are like for %NL80211_CMD_SET_BEACON.   * @NL80211_CMD_DEL_BEACON: remove the beacon, stop sending it @@ -148,6 +188,10 @@   * @NL80211_CMD_SET_MPATH:  Set mesh path attributes for mesh path to   * 	destination %NL80211_ATTR_MAC on the interface identified by   * 	%NL80211_ATTR_IFINDEX. + * @NL80211_CMD_NEW_MPATH: Create a new mesh path for the destination given by + *	%NL80211_ATTR_MAC via %NL80211_ATTR_MPATH_NEXT_HOP. + * @NL80211_CMD_DEL_MPATH: Delete a mesh path to the destination given by + *	%NL80211_ATTR_MAC.   * @NL80211_CMD_NEW_PATH: Add a mesh path with given attributes to the   *	the interface identified by %NL80211_ATTR_IFINDEX.   * @NL80211_CMD_DEL_PATH: Remove a mesh path identified by %NL80211_ATTR_MAC @@ -172,10 +216,10 @@   * 	to the specified ISO/IEC 3166-1 alpha2 country code. The core will   * 	store this as a valid request and then query userspace for it.   * - * @NL80211_CMD_GET_MESH_PARAMS: Get mesh networking properties for the + * @NL80211_CMD_GET_MESH_CONFIG: Get mesh networking properties for the   *	interface identified by %NL80211_ATTR_IFINDEX   * - * @NL80211_CMD_SET_MESH_PARAMS: Set mesh networking properties for the + * @NL80211_CMD_SET_MESH_CONFIG: Set mesh networking properties for the   *      interface identified by %NL80211_ATTR_IFINDEX   *   * @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The @@ -194,11 +238,36 @@   *   * @NL80211_CMD_GET_SCAN: get scan results   * @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters + *	%NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the + *	probe requests at CCK rate or not.   * @NL80211_CMD_NEW_SCAN_RESULTS: scan notification (as a reply to   *	NL80211_CMD_GET_SCAN and on the "scan" multicast group)   * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons,   *	partial scan results may be available   * + * @NL80211_CMD_START_SCHED_SCAN: start a scheduled scan at certain + *	intervals, as specified by %NL80211_ATTR_SCHED_SCAN_INTERVAL. + *	Like with normal scans, if SSIDs (%NL80211_ATTR_SCAN_SSIDS) + *	are passed, they are used in the probe requests.  For + *	broadcast, a broadcast SSID must be passed (ie. an empty + *	string).  If no SSID is passed, no probe requests are sent and + *	a passive scan is performed.  %NL80211_ATTR_SCAN_FREQUENCIES, + *	if passed, define which channels should be scanned; if not + *	passed, all channels allowed for the current regulatory domain + *	are used.  Extra IEs can also be passed from the userspace by + *	using the %NL80211_ATTR_IE attribute. + * @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan.  Returns -ENOENT + *	if scheduled scan is not running. + * @NL80211_CMD_SCHED_SCAN_RESULTS: indicates that there are scheduled scan + *	results available. + * @NL80211_CMD_SCHED_SCAN_STOPPED: indicates that the scheduled scan has + *	stopped.  The driver may issue this event at any time during a + *	scheduled scan.  One reason for stopping the scan is if the hardware + *	does not support starting an association or a normal scan while running + *	a scheduled scan.  This event is also sent when the + *	%NL80211_CMD_STOP_SCHED_SCAN command is received or when the interface + *	is brought down while a scheduled scan was running. + *   * @NL80211_CMD_GET_SURVEY: get survey resuls, e.g. channel occupation   *      or noise level   * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to @@ -358,11 +427,18 @@   *	user space application). %NL80211_ATTR_FRAME is used to specify the   *	frame contents (including header). %NL80211_ATTR_WIPHY_FREQ (and   *	optionally %NL80211_ATTR_WIPHY_CHANNEL_TYPE) is used to indicate on - *	which channel the frame is to be transmitted or was received. This - *	channel has to be the current channel (remain-on-channel or the - *	operational channel). When called, this operation returns a cookie - *	(%NL80211_ATTR_COOKIE) that will be included with the TX status event - *	pertaining to the TX request. + *	which channel the frame is to be transmitted or was received. If this + *	channel is not the current channel (remain-on-channel or the + *	operational channel) the device will switch to the given channel and + *	transmit the frame, optionally waiting for a response for the time + *	specified using %NL80211_ATTR_DURATION. When called, this operation + *	returns a cookie (%NL80211_ATTR_COOKIE) that will be included with the + *	TX status event pertaining to the TX request. + *	%NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the + *	management frames at CCK rate or not in 2GHz band. + * @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this + *	command may be used with the corresponding cookie to cancel the wait + *	time if it is known that it is no longer necessary.   * @NL80211_CMD_ACTION: Alias for @NL80211_CMD_FRAME for backward compatibility.   * @NL80211_CMD_FRAME_TX_STATUS: Report TX status of a management frame   *	transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies @@ -389,11 +465,87 @@   *   * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface.   * + * @NL80211_CMD_JOIN_MESH: Join a mesh. The mesh ID must be given, and initial + *	mesh config parameters may be given. + * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the + *	network is determined by the network interface. + * + * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame + *	notification. This event is used to indicate that an unprotected + *	deauthentication frame was dropped when MFP is in use. + * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame + *	notification. This event is used to indicate that an unprotected + *	disassociation frame was dropped when MFP is in use. + * + * @NL80211_CMD_NEW_PEER_CANDIDATE: Notification on the reception of a + *      beacon or probe response from a compatible mesh peer.  This is only + *      sent while no station information (sta_info) exists for the new peer + *      candidate and when @NL80211_MESH_SETUP_USERSPACE_AUTH is set.  On + *      reception of this notification, userspace may decide to create a new + *      station (@NL80211_CMD_NEW_STATION).  To stop this notification from + *      reoccurring, the userspace authentication daemon may want to create the + *      new station with the AUTHENTICATED flag unset and maybe change it later + *      depending on the authentication result. + * + * @NL80211_CMD_GET_WOWLAN: get Wake-on-Wireless-LAN (WoWLAN) settings. + * @NL80211_CMD_SET_WOWLAN: set Wake-on-Wireless-LAN (WoWLAN) settings. + *	Since wireless is more complex than wired ethernet, it supports + *	various triggers. These triggers can be configured through this + *	command with the %NL80211_ATTR_WOWLAN_TRIGGERS attribute. For + *	more background information, see + *	http://wireless.kernel.org/en/users/Documentation/WoWLAN. + * + * @NL80211_CMD_SET_REKEY_OFFLOAD: This command is used give the driver + *	the necessary information for supporting GTK rekey offload. This + *	feature is typically used during WoWLAN. The configuration data + *	is contained in %NL80211_ATTR_REKEY_DATA (which is nested and + *	contains the data in sub-attributes). After rekeying happened, + *	this command may also be sent by the driver as an MLME event to + *	inform userspace of the new replay counter. + * + * @NL80211_CMD_PMKSA_CANDIDATE: This is used as an event to inform userspace + *	of PMKSA caching dandidates. + * + * @NL80211_CMD_TDLS_OPER: Perform a high-level TDLS command (e.g. link setup). + * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame. + * + * @NL80211_CMD_UNEXPECTED_FRAME: Used by an application controlling an AP + *	(or GO) interface (i.e. hostapd) to ask for unexpected frames to + *	implement sending deauth to stations that send unexpected class 3 + *	frames. Also used as the event sent by the kernel when such a frame + *	is received. + *	For the event, the %NL80211_ATTR_MAC attribute carries the TA and + *	other attributes like the interface index are present. + *	If used as the command it must have an interface index and you can + *	only unsubscribe from the event by closing the socket. Subscription + *	is also for %NL80211_CMD_UNEXPECTED_4ADDR_FRAME events. + * + * @NL80211_CMD_UNEXPECTED_4ADDR_FRAME: Sent as an event indicating that the + *	associated station identified by %NL80211_ATTR_MAC sent a 4addr frame + *	and wasn't already in a 4-addr VLAN. The event will be sent similarly + *	to the %NL80211_CMD_UNEXPECTED_FRAME event, to the same listener. + * + * @NL80211_CMD_PROBE_CLIENT: Probe an associated station on an AP interface + *	by sending a null data frame to it and reporting when the frame is + *	acknowleged. This is used to allow timing out inactive clients. Uses + *	%NL80211_ATTR_IFINDEX and %NL80211_ATTR_MAC. The command returns a + *	direct reply with an %NL80211_ATTR_COOKIE that is later used to match + *	up the event with the request. The event includes the same data and + *	has %NL80211_ATTR_ACK set if the frame was ACKed. + * + * @NL80211_CMD_REGISTER_BEACONS: Register this socket to receive beacons from + *	other BSSes when any interfaces are in AP mode. This helps implement + *	OLBC handling in hostapd. Beacons are reported in %NL80211_CMD_FRAME + *	messages. Note that per PHY only one application may register. + * + * @NL80211_CMD_SET_NOACK_MAP: sets a bitmap for the individual TIDs whether + *      No Acknowledgement Policy should be applied. + *   * @NL80211_CMD_MAX: highest used command number   * @__NL80211_CMD_AFTER_LAST: internal use   */  enum nl80211_commands { -/* don't change the order or add anything inbetween, this is ABI! */ +/* don't change the order or add anything between, this is ABI! */  	NL80211_CMD_UNSPEC,  	NL80211_CMD_GET_WIPHY,		/* can dump */ @@ -431,8 +583,8 @@ enum nl80211_commands {  	NL80211_CMD_SET_REG,  	NL80211_CMD_REQ_SET_REG, -	NL80211_CMD_GET_MESH_PARAMS, -	NL80211_CMD_SET_MESH_PARAMS, +	NL80211_CMD_GET_MESH_CONFIG, +	NL80211_CMD_SET_MESH_CONFIG,  	NL80211_CMD_SET_MGMT_EXTRA_IE /* reserved; not used */, @@ -493,6 +645,41 @@ enum nl80211_commands {  	NL80211_CMD_SET_CHANNEL,  	NL80211_CMD_SET_WDS_PEER, +	NL80211_CMD_FRAME_WAIT_CANCEL, + +	NL80211_CMD_JOIN_MESH, +	NL80211_CMD_LEAVE_MESH, + +	NL80211_CMD_UNPROT_DEAUTHENTICATE, +	NL80211_CMD_UNPROT_DISASSOCIATE, + +	NL80211_CMD_NEW_PEER_CANDIDATE, + +	NL80211_CMD_GET_WOWLAN, +	NL80211_CMD_SET_WOWLAN, + +	NL80211_CMD_START_SCHED_SCAN, +	NL80211_CMD_STOP_SCHED_SCAN, +	NL80211_CMD_SCHED_SCAN_RESULTS, +	NL80211_CMD_SCHED_SCAN_STOPPED, + +	NL80211_CMD_SET_REKEY_OFFLOAD, + +	NL80211_CMD_PMKSA_CANDIDATE, + +	NL80211_CMD_TDLS_OPER, +	NL80211_CMD_TDLS_MGMT, + +	NL80211_CMD_UNEXPECTED_FRAME, + +	NL80211_CMD_PROBE_CLIENT, + +	NL80211_CMD_REGISTER_BEACONS, + +	NL80211_CMD_UNEXPECTED_4ADDR_FRAME, + +	NL80211_CMD_SET_NOACK_MAP, +  	/* add new commands above here */  	/* used to define NL80211_CMD_MAX below */ @@ -513,6 +700,13 @@ enum nl80211_commands {  #define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE  #define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT +#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS + +/* source-level API compatibility */ +#define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG +#define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG +#define NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE NL80211_MESH_SETUP_IE +  /**   * enum nl80211_attrs - nl80211 netlink attributes   * @@ -583,7 +777,7 @@ enum nl80211_commands {   *	consisting of a nested array.   *   * @NL80211_ATTR_MESH_ID: mesh id (1-32 bytes). - * @NL80211_ATTR_PLINK_ACTION: action to perform on the mesh peer link. + * @NL80211_ATTR_STA_PLINK_ACTION: action to perform on the mesh peer link.   * @NL80211_ATTR_MPATH_NEXT_HOP: MAC address of the next hop for a mesh path.   * @NL80211_ATTR_MPATH_INFO: information about a mesh_path, part of mesh path   * 	info given for %NL80211_CMD_GET_MPATH, nested attribute described at @@ -628,8 +822,14 @@ enum nl80211_commands {   *   * @NL80211_ATTR_MAX_NUM_SCAN_SSIDS: number of SSIDs you can scan with   *	a single scan request, a wiphy attribute. + * @NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS: number of SSIDs you can + *	scan with a single scheduled scan request, a wiphy attribute.   * @NL80211_ATTR_MAX_SCAN_IE_LEN: maximum length of information elements   *	that can be added to a scan request + * @NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN: maximum length of information + *	elements that can be added to a scheduled scan request + * @NL80211_ATTR_MAX_MATCH_SETS: maximum number of sets that can be + *	used with @NL80211_ATTR_SCHED_SCAN_MATCH, a wiphy attribute.   *   * @NL80211_ATTR_SCAN_FREQUENCIES: nested attribute with frequencies (in MHz)   * @NL80211_ATTR_SCAN_SSIDS: nested attribute with SSIDs, leave out for passive @@ -710,18 +910,20 @@ enum nl80211_commands {   * @NL80211_ATTR_STATUS_CODE: StatusCode for the %NL80211_CMD_CONNECT   *	event (u16)   * @NL80211_ATTR_PRIVACY: Flag attribute, used with connect(), indicating - *	that protected APs should be used. + *	that protected APs should be used. This is also used with NEW_BEACON to + *	indicate that the BSS is to use protection.   * - * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT and ASSOCIATE to - *	indicate which unicast key ciphers will be used with the connection + * @NL80211_ATTR_CIPHERS_PAIRWISE: Used with CONNECT, ASSOCIATE, and NEW_BEACON + *	to indicate which unicast key ciphers will be used with the connection   *	(an array of u32). - * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT and ASSOCIATE to indicate - *	which group key cipher will be used with the connection (a u32). - * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT and ASSOCIATE to indicate - *	which WPA version(s) the AP we want to associate with is using + * @NL80211_ATTR_CIPHER_GROUP: Used with CONNECT, ASSOCIATE, and NEW_BEACON to + *	indicate which group key cipher will be used with the connection (a + *	u32). + * @NL80211_ATTR_WPA_VERSIONS: Used with CONNECT, ASSOCIATE, and NEW_BEACON to + *	indicate which WPA version(s) the AP we want to associate with is using   *	(a u32 with flags from &enum nl80211_wpa_versions). - * @NL80211_ATTR_AKM_SUITES: Used with CONNECT and ASSOCIATE to indicate - *	which key management algorithm(s) to use (an array of u32). + * @NL80211_ATTR_AKM_SUITES: Used with CONNECT, ASSOCIATE, and NEW_BEACON to + *	indicate which key management algorithm(s) to use (an array of u32).   *   * @NL80211_ATTR_REQ_IE: (Re)association request information elements as   *	sent out by the card, for ROAM and successful CONNECT events. @@ -758,6 +960,9 @@ enum nl80211_commands {   *	cache, a wiphy attribute.   *   * @NL80211_ATTR_DURATION: Duration of an operation in milliseconds, u32. + * @NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION: Device attribute that + *	specifies the maximum duration that can be requested with the + *	remain-on-channel operation, in milliseconds, u32.   *   * @NL80211_ATTR_COOKIE: Generic 64-bit cookie to identify objects.   * @@ -804,13 +1009,195 @@ enum nl80211_commands {   * @NL80211_ATTR_SUPPORT_IBSS_RSN: The device supports IBSS RSN, which mostly   *	means support for per-station GTKs.   * + * @NL80211_ATTR_WIPHY_ANTENNA_TX: Bitmap of allowed antennas for transmitting. + *	This can be used to mask out antennas which are not attached or should + *	not be used for transmitting. If an antenna is not selected in this + *	bitmap the hardware is not allowed to transmit on this antenna. + * + *	Each bit represents one antenna, starting with antenna 1 at the first + *	bit. Depending on which antennas are selected in the bitmap, 802.11n + *	drivers can derive which chainmasks to use (if all antennas belonging to + *	a particular chain are disabled this chain should be disabled) and if + *	a chain has diversity antennas wether diversity should be used or not. + *	HT capabilities (STBC, TX Beamforming, Antenna selection) can be + *	derived from the available chains after applying the antenna mask. + *	Non-802.11n drivers can derive wether to use diversity or not. + *	Drivers may reject configurations or RX/TX mask combinations they cannot + *	support by returning -EINVAL. + * + * @NL80211_ATTR_WIPHY_ANTENNA_RX: Bitmap of allowed antennas for receiving. + *	This can be used to mask out antennas which are not attached or should + *	not be used for receiving. If an antenna is not selected in this bitmap + *	the hardware should not be configured to receive on this antenna. + *	For a more detailed description see @NL80211_ATTR_WIPHY_ANTENNA_TX. + * + * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX: Bitmap of antennas which are available + *	for configuration as TX antennas via the above parameters. + * + * @NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX: Bitmap of antennas which are available + *	for configuration as RX antennas via the above parameters. + *   * @NL80211_ATTR_MCAST_RATE: Multicast tx rate (in 100 kbps) for IBSS   * + * @NL80211_ATTR_OFFCHANNEL_TX_OK: For management frame TX, the frame may be + *	transmitted on another channel when the channel given doesn't match + *	the current channel. If the current channel doesn't match and this + *	flag isn't set, the frame will be rejected. This is also used as an + *	nl80211 capability flag. + * + * @NL80211_ATTR_BSS_HTOPMODE: HT operation mode (u16) + * + * @NL80211_ATTR_KEY_DEFAULT_TYPES: A nested attribute containing flags + *	attributes, specifying what a key should be set as default as. + *	See &enum nl80211_key_default_types. + * + * @NL80211_ATTR_MESH_SETUP: Optional mesh setup parameters.  These cannot be + *	changed once the mesh is active. + * @NL80211_ATTR_MESH_CONFIG: Mesh configuration parameters, a nested attribute + *	containing attributes from &enum nl80211_meshconf_params. + * @NL80211_ATTR_SUPPORT_MESH_AUTH: Currently, this means the underlying driver + *	allows auth frames in a mesh to be passed to userspace for processing via + *	the @NL80211_MESH_SETUP_USERSPACE_AUTH flag. + * @NL80211_ATTR_STA_PLINK_STATE: The state of a mesh peer link as + *	defined in &enum nl80211_plink_state. Used when userspace is + *	driving the peer link management state machine. + *	@NL80211_MESH_SETUP_USERSPACE_AMPE must be enabled. + * + * @NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED: indicates, as part of the wiphy + *	capabilities, the supported WoWLAN triggers + * @NL80211_ATTR_WOWLAN_TRIGGERS: used by %NL80211_CMD_SET_WOWLAN to + *	indicate which WoW triggers should be enabled. This is also + *	used by %NL80211_CMD_GET_WOWLAN to get the currently enabled WoWLAN + *	triggers. + + * @NL80211_ATTR_SCHED_SCAN_INTERVAL: Interval between scheduled scan + *	cycles, in msecs. + + * @NL80211_ATTR_SCHED_SCAN_MATCH: Nested attribute with one or more + *	sets of attributes to match during scheduled scans.  Only BSSs + *	that match any of the sets will be reported.  These are + *	pass-thru filter rules. + *	For a match to succeed, the BSS must match all attributes of a + *	set.  Since not every hardware supports matching all types of + *	attributes, there is no guarantee that the reported BSSs are + *	fully complying with the match sets and userspace needs to be + *	able to ignore them by itself. + *	Thus, the implementation is somewhat hardware-dependent, but + *	this is only an optimization and the userspace application + *	needs to handle all the non-filtered results anyway. + *	If the match attributes don't make sense when combined with + *	the values passed in @NL80211_ATTR_SCAN_SSIDS (eg. if an SSID + *	is included in the probe request, but the match attributes + *	will never let it go through), -EINVAL may be returned. + *	If ommited, no filtering is done. + * + * @NL80211_ATTR_INTERFACE_COMBINATIONS: Nested attribute listing the supported + *	interface combinations. In each nested item, it contains attributes + *	defined in &enum nl80211_if_combination_attrs. + * @NL80211_ATTR_SOFTWARE_IFTYPES: Nested attribute (just like + *	%NL80211_ATTR_SUPPORTED_IFTYPES) containing the interface types that + *	are managed in software: interfaces of these types aren't subject to + *	any restrictions in their number or combinations. + * + * @%NL80211_ATTR_REKEY_DATA: nested attribute containing the information + *	necessary for GTK rekeying in the device, see &enum nl80211_rekey_data. + * + * @NL80211_ATTR_SCAN_SUPP_RATES: rates per to be advertised as supported in scan, + *	nested array attribute containing an entry for each band, with the entry + *	being a list of supported rates as defined by IEEE 802.11 7.3.2.2 but + *	without the length restriction (at most %NL80211_MAX_SUPP_RATES). + * + * @NL80211_ATTR_HIDDEN_SSID: indicates whether SSID is to be hidden from Beacon + *	and Probe Response (when response to wildcard Probe Request); see + *	&enum nl80211_hidden_ssid, represented as a u32 + * + * @NL80211_ATTR_IE_PROBE_RESP: Information element(s) for Probe Response frame. + *	This is used with %NL80211_CMD_NEW_BEACON and %NL80211_CMD_SET_BEACON to + *	provide extra IEs (e.g., WPS/P2P IE) into Probe Response frames when the + *	driver (or firmware) replies to Probe Request frames. + * @NL80211_ATTR_IE_ASSOC_RESP: Information element(s) for (Re)Association + *	Response frames. This is used with %NL80211_CMD_NEW_BEACON and + *	%NL80211_CMD_SET_BEACON to provide extra IEs (e.g., WPS/P2P IE) into + *	(Re)Association Response frames when the driver (or firmware) replies to + *	(Re)Association Request frames. + * + * @NL80211_ATTR_STA_WME: Nested attribute containing the wme configuration + *	of the station, see &enum nl80211_sta_wme_attr. + * @NL80211_ATTR_SUPPORT_AP_UAPSD: the device supports uapsd when working + *	as AP. + * + * @NL80211_ATTR_ROAM_SUPPORT: Indicates whether the firmware is capable of + *	roaming to another AP in the same ESS if the signal lever is low. + * + * @NL80211_ATTR_PMKSA_CANDIDATE: Nested attribute containing the PMKSA caching + *	candidate information, see &enum nl80211_pmksa_candidate_attr. + * + * @NL80211_ATTR_TX_NO_CCK_RATE: Indicates whether to use CCK rate or not + *	for management frames transmission. In order to avoid p2p probe/action + *	frames are being transmitted at CCK rate in 2GHz band, the user space + *	applications use this attribute. + *	This attribute is used with %NL80211_CMD_TRIGGER_SCAN and + *	%NL80211_CMD_FRAME commands. + * + * @NL80211_ATTR_TDLS_ACTION: Low level TDLS action code (e.g. link setup + *	request, link setup confirm, link teardown, etc.). Values are + *	described in the TDLS (802.11z) specification. + * @NL80211_ATTR_TDLS_DIALOG_TOKEN: Non-zero token for uniquely identifying a + *	TDLS conversation between two devices. + * @NL80211_ATTR_TDLS_OPERATION: High level TDLS operation; see + *	&enum nl80211_tdls_operation, represented as a u8. + * @NL80211_ATTR_TDLS_SUPPORT: A flag indicating the device can operate + *	as a TDLS peer sta. + * @NL80211_ATTR_TDLS_EXTERNAL_SETUP: The TDLS discovery/setup and teardown + *	procedures should be performed by sending TDLS packets via + *	%NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be + *	used for asking the driver to perform a TDLS operation. + * + * @NL80211_ATTR_DEVICE_AP_SME: This u32 attribute may be listed for devices + *	that have AP support to indicate that they have the AP SME integrated + *	with support for the features listed in this attribute, see + *	&enum nl80211_ap_sme_features. + * + * @NL80211_ATTR_DONT_WAIT_FOR_ACK: Used with %NL80211_CMD_FRAME, this tells + *	the driver to not wait for an acknowledgement. Note that due to this, + *	it will also not give a status callback nor return a cookie. This is + *	mostly useful for probe responses to save airtime. + * + * @NL80211_ATTR_FEATURE_FLAGS: This u32 attribute contains flags from + *	&enum nl80211_feature_flags and is advertised in wiphy information. + * @NL80211_ATTR_PROBE_RESP_OFFLOAD: Indicates that the HW responds to probe + * + *	requests while operating in AP-mode. + *	This attribute holds a bitmap of the supported protocols for + *	offloading (see &enum nl80211_probe_resp_offload_support_attr). + * + * @NL80211_ATTR_PROBE_RESP: Probe Response template data. Contains the entire + *	probe-response frame. The DA field in the 802.11 header is zero-ed out, + *	to be filled by the FW. + * @NL80211_ATTR_DISABLE_HT:  Force HT capable interfaces to disable + *      this feature.  Currently, only supported in mac80211 drivers. + * @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the + *      ATTR_HT_CAPABILITY to which attention should be paid. + *      Currently, only mac80211 NICs support this feature. + *      The values that may be configured are: + *       MCS rates, MAX-AMSDU, HT-20-40 and HT_CAP_SGI_40 + *       AMPDU density and AMPDU factor. + *      All values are treated as suggestions and may be ignored + *      by the driver as required.  The actual values may be seen in + *      the station debugfs ht_caps file. + * + * @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country + *    abides to when initiating radiation on DFS channels. A country maps + *    to one DFS region. + * + * @NL80211_ATTR_NOACK_MAP: This u16 bitmap contains the No Ack Policy of + *      up to 16 TIDs. + *   * @NL80211_ATTR_MAX: highest attribute number currently defined   * @__NL80211_ATTR_AFTER_LAST: internal use   */  enum nl80211_attrs { -/* don't change the order or add anything inbetween, this is ABI! */ +/* don't change the order or add anything between, this is ABI! */  	NL80211_ATTR_UNSPEC,  	NL80211_ATTR_WIPHY, @@ -860,7 +1247,7 @@ enum nl80211_attrs {  	NL80211_ATTR_REG_ALPHA2,  	NL80211_ATTR_REG_RULES, -	NL80211_ATTR_MESH_PARAMS, +	NL80211_ATTR_MESH_CONFIG,  	NL80211_ATTR_BSS_BASIC_RATES, @@ -975,8 +1362,82 @@ enum nl80211_attrs {  	NL80211_ATTR_SUPPORT_IBSS_RSN, +	NL80211_ATTR_WIPHY_ANTENNA_TX, +	NL80211_ATTR_WIPHY_ANTENNA_RX, +  	NL80211_ATTR_MCAST_RATE, +	NL80211_ATTR_OFFCHANNEL_TX_OK, + +	NL80211_ATTR_BSS_HT_OPMODE, + +	NL80211_ATTR_KEY_DEFAULT_TYPES, + +	NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION, + +	NL80211_ATTR_MESH_SETUP, + +	NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX, +	NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX, + +	NL80211_ATTR_SUPPORT_MESH_AUTH, +	NL80211_ATTR_STA_PLINK_STATE, + +	NL80211_ATTR_WOWLAN_TRIGGERS, +	NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, + +	NL80211_ATTR_SCHED_SCAN_INTERVAL, + +	NL80211_ATTR_INTERFACE_COMBINATIONS, +	NL80211_ATTR_SOFTWARE_IFTYPES, + +	NL80211_ATTR_REKEY_DATA, + +	NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS, +	NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN, + +	NL80211_ATTR_SCAN_SUPP_RATES, + +	NL80211_ATTR_HIDDEN_SSID, + +	NL80211_ATTR_IE_PROBE_RESP, +	NL80211_ATTR_IE_ASSOC_RESP, + +	NL80211_ATTR_STA_WME, +	NL80211_ATTR_SUPPORT_AP_UAPSD, + +	NL80211_ATTR_ROAM_SUPPORT, + +	NL80211_ATTR_SCHED_SCAN_MATCH, +	NL80211_ATTR_MAX_MATCH_SETS, + +	NL80211_ATTR_PMKSA_CANDIDATE, + +	NL80211_ATTR_TX_NO_CCK_RATE, + +	NL80211_ATTR_TDLS_ACTION, +	NL80211_ATTR_TDLS_DIALOG_TOKEN, +	NL80211_ATTR_TDLS_OPERATION, +	NL80211_ATTR_TDLS_SUPPORT, +	NL80211_ATTR_TDLS_EXTERNAL_SETUP, + +	NL80211_ATTR_DEVICE_AP_SME, + +	NL80211_ATTR_DONT_WAIT_FOR_ACK, + +	NL80211_ATTR_FEATURE_FLAGS, + +	NL80211_ATTR_PROBE_RESP_OFFLOAD, + +	NL80211_ATTR_PROBE_RESP, + +	NL80211_ATTR_DFS_REGION, + +	NL80211_ATTR_DISABLE_HT, +	NL80211_ATTR_HT_CAPABILITY_MASK, + +	NL80211_ATTR_NOACK_MAP, +  	/* add attributes here, update the policy in nl80211.c */  	__NL80211_ATTR_AFTER_LAST, @@ -985,6 +1446,7 @@ enum nl80211_attrs {  /* source-level API compatibility */  #define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION +#define	NL80211_ATTR_MESH_PARAMS NL80211_ATTR_MESH_CONFIG  /*   * Allow user space programs to use #ifdef on new attributes by defining them @@ -1010,8 +1472,10 @@ enum nl80211_attrs {  #define NL80211_ATTR_AKM_SUITES NL80211_ATTR_AKM_SUITES  #define NL80211_ATTR_KEY NL80211_ATTR_KEY  #define NL80211_ATTR_KEYS NL80211_ATTR_KEYS +#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS  #define NL80211_MAX_SUPP_RATES			32 +#define NL80211_MAX_SUPP_HT_RATES		77  #define NL80211_MAX_SUPP_REG_RULES		32  #define NL80211_TKIP_DATA_OFFSET_ENCR_KEY	0  #define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY	16 @@ -1028,7 +1492,9 @@ enum nl80211_attrs {   * @NL80211_IFTYPE_ADHOC: independent BSS member   * @NL80211_IFTYPE_STATION: managed BSS member   * @NL80211_IFTYPE_AP: access point - * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points + * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points; VLAN interfaces + *	are a bit special in that they must always be tied to a pre-existing + *	AP type interface.   * @NL80211_IFTYPE_WDS: wireless distribution interface   * @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames   * @NL80211_IFTYPE_MESH_POINT: mesh point @@ -1070,6 +1536,12 @@ enum nl80211_iftype {   *	with short barker preamble   * @NL80211_STA_FLAG_WME: station is WME/QoS capable   * @NL80211_STA_FLAG_MFP: station uses management frame protection + * @NL80211_STA_FLAG_AUTHENTICATED: station is authenticated + * @NL80211_STA_FLAG_TDLS_PEER: station is a TDLS peer -- this flag should + *	only be used in managed mode (even in the flags mask). Note that the + *	flag can't be changed, it is only valid while adding a station, and + *	attempts to change it will silently be ignored (rather than rejected + *	as errors.)   * @NL80211_STA_FLAG_MAX: highest station flag number currently defined   * @__NL80211_STA_FLAG_AFTER_LAST: internal use   */ @@ -1079,6 +1551,8 @@ enum nl80211_sta_flags {  	NL80211_STA_FLAG_SHORT_PREAMBLE,  	NL80211_STA_FLAG_WME,  	NL80211_STA_FLAG_MFP, +	NL80211_STA_FLAG_AUTHENTICATED, +	NL80211_STA_FLAG_TDLS_PEER,  	/* keep last */  	__NL80211_STA_FLAG_AFTER_LAST, @@ -1124,6 +1598,36 @@ enum nl80211_rate_info {  };  /** + * enum nl80211_sta_bss_param - BSS information collected by STA + * + * These attribute types are used with %NL80211_STA_INFO_BSS_PARAM + * when getting information about the bitrate of a station. + * + * @__NL80211_STA_BSS_PARAM_INVALID: attribute number 0 is reserved + * @NL80211_STA_BSS_PARAM_CTS_PROT: whether CTS protection is enabled (flag) + * @NL80211_STA_BSS_PARAM_SHORT_PREAMBLE:  whether short preamble is enabled + *	(flag) + * @NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME:  whether short slot time is enabled + *	(flag) + * @NL80211_STA_BSS_PARAM_DTIM_PERIOD: DTIM period for beaconing (u8) + * @NL80211_STA_BSS_PARAM_BEACON_INTERVAL: Beacon interval (u16) + * @NL80211_STA_BSS_PARAM_MAX: highest sta_bss_param number currently defined + * @__NL80211_STA_BSS_PARAM_AFTER_LAST: internal use + */ +enum nl80211_sta_bss_param { +	__NL80211_STA_BSS_PARAM_INVALID, +	NL80211_STA_BSS_PARAM_CTS_PROT, +	NL80211_STA_BSS_PARAM_SHORT_PREAMBLE, +	NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME, +	NL80211_STA_BSS_PARAM_DTIM_PERIOD, +	NL80211_STA_BSS_PARAM_BEACON_INTERVAL, + +	/* keep last */ +	__NL80211_STA_BSS_PARAM_AFTER_LAST, +	NL80211_STA_BSS_PARAM_MAX = __NL80211_STA_BSS_PARAM_AFTER_LAST - 1 +}; + +/**   * enum nl80211_sta_info - station information   *   * These attribute types are used with %NL80211_ATTR_STA_INFO @@ -1133,16 +1637,30 @@ enum nl80211_rate_info {   * @NL80211_STA_INFO_INACTIVE_TIME: time since last activity (u32, msecs)   * @NL80211_STA_INFO_RX_BYTES: total received bytes (u32, from this station)   * @NL80211_STA_INFO_TX_BYTES: total transmitted bytes (u32, to this station) - * @__NL80211_STA_INFO_AFTER_LAST: internal - * @NL80211_STA_INFO_MAX: highest possible station info attribute   * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm)   * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute - * 	containing info as possible, see &enum nl80211_sta_info_txrate. + * 	containing info as possible, see &enum nl80211_rate_info   * @NL80211_STA_INFO_RX_PACKETS: total received packet (u32, from this station)   * @NL80211_STA_INFO_TX_PACKETS: total transmitted packets (u32, to this   *	station)   * @NL80211_STA_INFO_TX_RETRIES: total retries (u32, to this station)   * @NL80211_STA_INFO_TX_FAILED: total failed packets (u32, to this station) + * @NL80211_STA_INFO_SIGNAL_AVG: signal strength average (u8, dBm) + * @NL80211_STA_INFO_LLID: the station's mesh LLID + * @NL80211_STA_INFO_PLID: the station's mesh PLID + * @NL80211_STA_INFO_PLINK_STATE: peer link state for the station + *	(see %enum nl80211_plink_state) + * @NL80211_STA_INFO_RX_BITRATE: last unicast data frame rx rate, nested + *	attribute, like NL80211_STA_INFO_TX_BITRATE. + * @NL80211_STA_INFO_BSS_PARAM: current station's view of BSS, nested attribute + *     containing info as possible, see &enum nl80211_sta_bss_param + * @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected + * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update. + * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32) + * @NL80211_STA_INFO_CHAIN_SIGNAL: per-chain signal strength of last PPDU + * @NL80211_STA_INFO_CHAIN_SIGNAL_AVG: per-chain signal strength average + * @__NL80211_STA_INFO_AFTER_LAST: internal + * @NL80211_STA_INFO_MAX: highest possible station info attribute   */  enum nl80211_sta_info {  	__NL80211_STA_INFO_INVALID, @@ -1158,6 +1676,14 @@ enum nl80211_sta_info {  	NL80211_STA_INFO_TX_PACKETS,  	NL80211_STA_INFO_TX_RETRIES,  	NL80211_STA_INFO_TX_FAILED, +	NL80211_STA_INFO_SIGNAL_AVG, +	NL80211_STA_INFO_RX_BITRATE, +	NL80211_STA_INFO_BSS_PARAM, +	NL80211_STA_INFO_CONNECTED_TIME, +	NL80211_STA_INFO_STA_FLAGS, +	NL80211_STA_INFO_BEACON_LOSS, +	NL80211_STA_INFO_CHAIN_SIGNAL, +	NL80211_STA_INFO_CHAIN_SIGNAL_AVG,  	/* keep last */  	__NL80211_STA_INFO_AFTER_LAST, @@ -1311,7 +1837,11 @@ enum nl80211_bitrate_attr {   * 	wireless core it thinks its knows the regulatory domain we should be in.   * @NL80211_REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an   * 	802.11 country information element with regulatory information it - * 	thinks we should consider. + * 	thinks we should consider. cfg80211 only processes the country + *	code from the IE, and relies on the regulatory domain information + *	structure passed by userspace (CRDA) from our wireless-regdb. + *	If a channel is enabled but the country code indicates it should + *	be disabled we disable the channel and re-enable it upon disassociation.   */  enum nl80211_reg_initiator {  	NL80211_REGDOM_SET_BY_CORE, @@ -1383,6 +1913,26 @@ enum nl80211_reg_rule_attr {  };  /** + * enum nl80211_sched_scan_match_attr - scheduled scan match attributes + * @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved + * @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching, + * only report BSS with matching SSID. + * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter + *	attribute number currently defined + * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use + */ +enum nl80211_sched_scan_match_attr { +	__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID, + +	NL80211_ATTR_SCHED_SCAN_MATCH_SSID, + +	/* keep last */ +	__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST, +	NL80211_SCHED_SCAN_MATCH_ATTR_MAX = +		__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST - 1 +}; + +/**   * enum nl80211_reg_rule_flags - regulatory rule flags   *   * @NL80211_RRF_NO_OFDM: OFDM modulation not allowed @@ -1408,6 +1958,21 @@ enum nl80211_reg_rule_flags {  };  /** + * enum nl80211_dfs_regions - regulatory DFS regions + * + * @NL80211_DFS_UNSET: Country has no DFS master region specified + * @NL80211_DFS_FCC_: Country follows DFS master rules from FCC + * @NL80211_DFS_FCC_: Country follows DFS master rules from ETSI + * @NL80211_DFS_JP_: Country follows DFS master rules from JP/MKK/Telec + */ +enum nl80211_dfs_regions { +	NL80211_DFS_UNSET	= 0, +	NL80211_DFS_FCC		= 1, +	NL80211_DFS_ETSI	= 2, +	NL80211_DFS_JP		= 3, +}; + +/**   * enum nl80211_survey_info - survey information   *   * These attribute types are used with %NL80211_ATTR_SURVEY_INFO @@ -1480,14 +2045,15 @@ enum nl80211_mntr_flags {  /**   * enum nl80211_meshconf_params - mesh configuration parameters   * - * Mesh configuration parameters + * Mesh configuration parameters. These can be changed while the mesh is + * active.   *   * @__NL80211_MESHCONF_INVALID: internal use   *   * @NL80211_MESHCONF_RETRY_TIMEOUT: specifies the initial retry timeout in   * millisecond units, used by the Peer Link Open message   * - * @NL80211_MESHCONF_CONFIRM_TIMEOUT: specifies the inital confirm timeout, in + * @NL80211_MESHCONF_CONFIRM_TIMEOUT: specifies the initial confirm timeout, in   * millisecond units, used by the peer link management to close a peer link   *   * @NL80211_MESHCONF_HOLDING_TIMEOUT: specifies the holding timeout, in @@ -1527,7 +2093,24 @@ enum nl80211_mntr_flags {   * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs)   * that it takes for an HWMP information element to propagate across the mesh   * - * @NL80211_MESHCONF_ROOTMODE: whether root mode is enabled or not + * @NL80211_MESHCONF_HWMP_ROOTMODE: whether root mode is enabled or not + * + * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a + * source mesh point for path selection elements. + * + * @NL80211_MESHCONF_HWMP_RANN_INTERVAL:  The interval of time (in TUs) between + * root announcements are transmitted. + * + * @NL80211_MESHCONF_GATE_ANNOUNCEMENTS: Advertise that this mesh station has + * access to a broader network beyond the MBSS.  This is done via Root + * Announcement frames. + * + * @NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: The minimum interval of time (in + * TUs) during which a mesh STA can send only one Action frame containing a + * PERR element. + * + * @NL80211_MESHCONF_FORWARDING: set Mesh STA as forwarding or non-forwarding + * or forwarding entity (default is TRUE - forwarding entity)   *   * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute   * @@ -1549,6 +2132,11 @@ enum nl80211_meshconf_params {  	NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL,  	NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME,  	NL80211_MESHCONF_HWMP_ROOTMODE, +	NL80211_MESHCONF_ELEMENT_TTL, +	NL80211_MESHCONF_HWMP_RANN_INTERVAL, +	NL80211_MESHCONF_GATE_ANNOUNCEMENTS, +	NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, +	NL80211_MESHCONF_FORWARDING,  	/* keep last */  	__NL80211_MESHCONF_ATTR_AFTER_LAST, @@ -1556,6 +2144,54 @@ enum nl80211_meshconf_params {  };  /** + * enum nl80211_mesh_setup_params - mesh setup parameters + * + * Mesh setup parameters.  These are used to start/join a mesh and cannot be + * changed while the mesh is active. + * + * @__NL80211_MESH_SETUP_INVALID: Internal use + * + * @NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL: Enable this option to use a + * vendor specific path selection algorithm or disable it to use the default + * HWMP. + * + * @NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC: Enable this option to use a + * vendor specific path metric or disable it to use the default Airtime + * metric. + * + * @NL80211_MESH_SETUP_IE: Information elements for this mesh, for instance, a + * robust security network ie, or a vendor specific information element that + * vendors will use to identify the path selection methods and metrics in use. + * + * @NL80211_MESH_SETUP_USERSPACE_AUTH: Enable this option if an authentication + * daemon will be authenticating mesh candidates. + * + * @NL80211_MESH_SETUP_USERSPACE_AMPE: Enable this option if an authentication + * daemon will be securing peer link frames.  AMPE is a secured version of Mesh + * Peering Management (MPM) and is implemented with the assistance of a + * userspace daemon.  When this flag is set, the kernel will send peer + * management frames to a userspace daemon that will implement AMPE + * functionality (security capabilities selection, key confirmation, and key + * management).  When the flag is unset (default), the kernel can autonomously + * complete (unsecured) mesh peering without the need of a userspace daemon. + * + * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number + * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use + */ +enum nl80211_mesh_setup_params { +	__NL80211_MESH_SETUP_INVALID, +	NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL, +	NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC, +	NL80211_MESH_SETUP_IE, +	NL80211_MESH_SETUP_USERSPACE_AUTH, +	NL80211_MESH_SETUP_USERSPACE_AMPE, + +	/* keep last */ +	__NL80211_MESH_SETUP_ATTR_AFTER_LAST, +	NL80211_MESH_SETUP_ATTR_MAX = __NL80211_MESH_SETUP_ATTR_AFTER_LAST - 1 +}; + +/**   * enum nl80211_txq_attr - TX queue parameter attributes   * @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved   * @NL80211_TXQ_ATTR_QUEUE: TX queue identifier (NL80211_TXQ_Q_*) @@ -1713,6 +2349,23 @@ enum nl80211_wpa_versions {  };  /** + * enum nl80211_key_default_types - key default types + * @__NL80211_KEY_DEFAULT_TYPE_INVALID: invalid + * @NL80211_KEY_DEFAULT_TYPE_UNICAST: key should be used as default + *	unicast key + * @NL80211_KEY_DEFAULT_TYPE_MULTICAST: key should be used as default + *	multicast key + * @NUM_NL80211_KEY_DEFAULT_TYPES: number of default types + */ +enum nl80211_key_default_types { +	__NL80211_KEY_DEFAULT_TYPE_INVALID, +	NL80211_KEY_DEFAULT_TYPE_UNICAST, +	NL80211_KEY_DEFAULT_TYPE_MULTICAST, + +	NUM_NL80211_KEY_DEFAULT_TYPES +}; + +/**   * enum nl80211_key_attributes - key attributes   * @__NL80211_KEY_INVALID: invalid   * @NL80211_KEY_DATA: (temporal) key data; for TKIP this consists of @@ -1728,6 +2381,9 @@ enum nl80211_wpa_versions {   * @NL80211_KEY_TYPE: the key type from enum nl80211_key_type, if not   *	specified the default depends on whether a MAC address was   *	given with the command using the key or not (u32) + * @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags + *	attributes, specifying what a key should be set as default as. + *	See &enum nl80211_key_default_types.   * @__NL80211_KEY_AFTER_LAST: internal   * @NL80211_KEY_MAX: highest key attribute   */ @@ -1740,6 +2396,7 @@ enum nl80211_key_attributes {  	NL80211_KEY_DEFAULT,  	NL80211_KEY_DEFAULT_MGMT,  	NL80211_KEY_TYPE, +	NL80211_KEY_DEFAULT_TYPES,  	/* keep last */  	__NL80211_KEY_AFTER_LAST, @@ -1753,12 +2410,15 @@ enum nl80211_key_attributes {   *	in an array of rates as defined in IEEE 802.11 7.3.2.2 (u8 values with   *	1 = 500 kbps) but without the IE length restriction (at most   *	%NL80211_MAX_SUPP_RATES in a single array). + * @NL80211_TXRATE_MCS: HT (MCS) rates allowed for TX rate selection + *	in an array of MCS numbers.   * @__NL80211_TXRATE_AFTER_LAST: internal   * @NL80211_TXRATE_MAX: highest TX rate attribute   */  enum nl80211_tx_rate_attributes {  	__NL80211_TXRATE_INVALID,  	NL80211_TXRATE_LEGACY, +	NL80211_TXRATE_MCS,  	/* keep last */  	__NL80211_TXRATE_AFTER_LAST, @@ -1790,6 +2450,8 @@ enum nl80211_ps_state {   *	the minimum amount the RSSI level must change after an event before a   *	new event may be issued (to reduce effects of RSSI oscillation).   * @NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT: RSSI threshold event + * @NL80211_ATTR_CQM_PKT_LOSS_EVENT: a u32 value indicating that this many + *	consecutive packets were not acknowledged by the peer   * @__NL80211_ATTR_CQM_AFTER_LAST: internal   * @NL80211_ATTR_CQM_MAX: highest key attribute   */ @@ -1798,6 +2460,7 @@ enum nl80211_attr_cqm {  	NL80211_ATTR_CQM_RSSI_THOLD,  	NL80211_ATTR_CQM_RSSI_HYST,  	NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, +	NL80211_ATTR_CQM_PKT_LOSS_EVENT,  	/* keep last */  	__NL80211_ATTR_CQM_AFTER_LAST, @@ -1829,4 +2492,343 @@ enum nl80211_tx_power_setting {  	NL80211_TX_POWER_FIXED,  }; +/** + * enum nl80211_wowlan_packet_pattern_attr - WoWLAN packet pattern attribute + * @__NL80211_WOWLAN_PKTPAT_INVALID: invalid number for nested attribute + * @NL80211_WOWLAN_PKTPAT_PATTERN: the pattern, values where the mask has + *	a zero bit are ignored + * @NL80211_WOWLAN_PKTPAT_MASK: pattern mask, must be long enough to have + *	a bit for each byte in the pattern. The lowest-order bit corresponds + *	to the first byte of the pattern, but the bytes of the pattern are + *	in a little-endian-like format, i.e. the 9th byte of the pattern + *	corresponds to the lowest-order bit in the second byte of the mask. + *	For example: The match 00:xx:00:00:xx:00:00:00:00:xx:xx:xx (where + *	xx indicates "don't care") would be represented by a pattern of + *	twelve zero bytes, and a mask of "0xed,0x07". + *	Note that the pattern matching is done as though frames were not + *	802.11 frames but 802.3 frames, i.e. the frame is fully unpacked + *	first (including SNAP header unpacking) and then matched. + * @NUM_NL80211_WOWLAN_PKTPAT: number of attributes + * @MAX_NL80211_WOWLAN_PKTPAT: max attribute number + */ +enum nl80211_wowlan_packet_pattern_attr { +	__NL80211_WOWLAN_PKTPAT_INVALID, +	NL80211_WOWLAN_PKTPAT_MASK, +	NL80211_WOWLAN_PKTPAT_PATTERN, + +	NUM_NL80211_WOWLAN_PKTPAT, +	MAX_NL80211_WOWLAN_PKTPAT = NUM_NL80211_WOWLAN_PKTPAT - 1, +}; + +/** + * struct nl80211_wowlan_pattern_support - pattern support information + * @max_patterns: maximum number of patterns supported + * @min_pattern_len: minimum length of each pattern + * @max_pattern_len: maximum length of each pattern + * + * This struct is carried in %NL80211_WOWLAN_TRIG_PKT_PATTERN when + * that is part of %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED in the + * capability information given by the kernel to userspace. + */ +struct nl80211_wowlan_pattern_support { +	__u32 max_patterns; +	__u32 min_pattern_len; +	__u32 max_pattern_len; +} __attribute__((packed)); + +/** + * enum nl80211_wowlan_triggers - WoWLAN trigger definitions + * @__NL80211_WOWLAN_TRIG_INVALID: invalid number for nested attributes + * @NL80211_WOWLAN_TRIG_ANY: wake up on any activity, do not really put + *	the chip into a special state -- works best with chips that have + *	support for low-power operation already (flag) + * @NL80211_WOWLAN_TRIG_DISCONNECT: wake up on disconnect, the way disconnect + *	is detected is implementation-specific (flag) + * @NL80211_WOWLAN_TRIG_MAGIC_PKT: wake up on magic packet (6x 0xff, followed + *	by 16 repetitions of MAC addr, anywhere in payload) (flag) + * @NL80211_WOWLAN_TRIG_PKT_PATTERN: wake up on the specified packet patterns + *	which are passed in an array of nested attributes, each nested attribute + *	defining a with attributes from &struct nl80211_wowlan_trig_pkt_pattern. + *	Each pattern defines a wakeup packet. The matching is done on the MSDU, + *	i.e. as though the packet was an 802.3 packet, so the pattern matching + *	is done after the packet is converted to the MSDU. + * + *	In %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, it is a binary attribute + *	carrying a &struct nl80211_wowlan_pattern_support. + * @NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED: Not a real trigger, and cannot be + *	used when setting, used only to indicate that GTK rekeying is supported + *	by the device (flag) + * @NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE: wake up on GTK rekey failure (if + *	done by the device) (flag) + * @NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST: wake up on EAP Identity Request + *	packet (flag) + * @NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE: wake up on 4-way handshake (flag) + * @NL80211_WOWLAN_TRIG_RFKILL_RELEASE: wake up when rfkill is released + *	(on devices that have rfkill in the device) (flag) + * @NUM_NL80211_WOWLAN_TRIG: number of wake on wireless triggers + * @MAX_NL80211_WOWLAN_TRIG: highest wowlan trigger attribute number + */ +enum nl80211_wowlan_triggers { +	__NL80211_WOWLAN_TRIG_INVALID, +	NL80211_WOWLAN_TRIG_ANY, +	NL80211_WOWLAN_TRIG_DISCONNECT, +	NL80211_WOWLAN_TRIG_MAGIC_PKT, +	NL80211_WOWLAN_TRIG_PKT_PATTERN, +	NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED, +	NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE, +	NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST, +	NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE, +	NL80211_WOWLAN_TRIG_RFKILL_RELEASE, + +	/* keep last */ +	NUM_NL80211_WOWLAN_TRIG, +	MAX_NL80211_WOWLAN_TRIG = NUM_NL80211_WOWLAN_TRIG - 1 +}; + +/** + * enum nl80211_iface_limit_attrs - limit attributes + * @NL80211_IFACE_LIMIT_UNSPEC: (reserved) + * @NL80211_IFACE_LIMIT_MAX: maximum number of interfaces that + *	can be chosen from this set of interface types (u32) + * @NL80211_IFACE_LIMIT_TYPES: nested attribute containing a + *	flag attribute for each interface type in this set + * @NUM_NL80211_IFACE_LIMIT: number of attributes + * @MAX_NL80211_IFACE_LIMIT: highest attribute number + */ +enum nl80211_iface_limit_attrs { +	NL80211_IFACE_LIMIT_UNSPEC, +	NL80211_IFACE_LIMIT_MAX, +	NL80211_IFACE_LIMIT_TYPES, + +	/* keep last */ +	NUM_NL80211_IFACE_LIMIT, +	MAX_NL80211_IFACE_LIMIT = NUM_NL80211_IFACE_LIMIT - 1 +}; + +/** + * enum nl80211_if_combination_attrs -- interface combination attributes + * + * @NL80211_IFACE_COMB_UNSPEC: (reserved) + * @NL80211_IFACE_COMB_LIMITS: Nested attributes containing the limits + *	for given interface types, see &enum nl80211_iface_limit_attrs. + * @NL80211_IFACE_COMB_MAXNUM: u32 attribute giving the total number of + *	interfaces that can be created in this group. This number doesn't + *	apply to interfaces purely managed in software, which are listed + *	in a separate attribute %NL80211_ATTR_INTERFACES_SOFTWARE. + * @NL80211_IFACE_COMB_STA_AP_BI_MATCH: flag attribute specifying that + *	beacon intervals within this group must be all the same even for + *	infrastructure and AP/GO combinations, i.e. the GO(s) must adopt + *	the infrastructure network's beacon interval. + * @NL80211_IFACE_COMB_NUM_CHANNELS: u32 attribute specifying how many + *	different channels may be used within this group. + * @NUM_NL80211_IFACE_COMB: number of attributes + * @MAX_NL80211_IFACE_COMB: highest attribute number + * + * Examples: + *	limits = [ #{STA} <= 1, #{AP} <= 1 ], matching BI, channels = 1, max = 2 + *	=> allows an AP and a STA that must match BIs + * + *	numbers = [ #{AP, P2P-GO} <= 8 ], channels = 1, max = 8 + *	=> allows 8 of AP/GO + * + *	numbers = [ #{STA} <= 2 ], channels = 2, max = 2 + *	=> allows two STAs on different channels + * + *	numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4 + *	=> allows a STA plus three P2P interfaces + * + * The list of these four possiblities could completely be contained + * within the %NL80211_ATTR_INTERFACE_COMBINATIONS attribute to indicate + * that any of these groups must match. + * + * "Combinations" of just a single interface will not be listed here, + * a single interface of any valid interface type is assumed to always + * be possible by itself. This means that implicitly, for each valid + * interface type, the following group always exists: + *	numbers = [ #{<type>} <= 1 ], channels = 1, max = 1 + */ +enum nl80211_if_combination_attrs { +	NL80211_IFACE_COMB_UNSPEC, +	NL80211_IFACE_COMB_LIMITS, +	NL80211_IFACE_COMB_MAXNUM, +	NL80211_IFACE_COMB_STA_AP_BI_MATCH, +	NL80211_IFACE_COMB_NUM_CHANNELS, + +	/* keep last */ +	NUM_NL80211_IFACE_COMB, +	MAX_NL80211_IFACE_COMB = NUM_NL80211_IFACE_COMB - 1 +}; + + +/** + * enum nl80211_plink_state - state of a mesh peer link finite state machine + * + * @NL80211_PLINK_LISTEN: initial state, considered the implicit + *	state of non existant mesh peer links + * @NL80211_PLINK_OPN_SNT: mesh plink open frame has been sent to + *	this mesh peer + * @NL80211_PLINK_OPN_RCVD: mesh plink open frame has been received + *	from this mesh peer + * @NL80211_PLINK_CNF_RCVD: mesh plink confirm frame has been + *	received from this mesh peer + * @NL80211_PLINK_ESTAB: mesh peer link is established + * @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled + * @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh + *	plink are discarded + * @NUM_NL80211_PLINK_STATES: number of peer link states + * @MAX_NL80211_PLINK_STATES: highest numerical value of plink states + */ +enum nl80211_plink_state { +	NL80211_PLINK_LISTEN, +	NL80211_PLINK_OPN_SNT, +	NL80211_PLINK_OPN_RCVD, +	NL80211_PLINK_CNF_RCVD, +	NL80211_PLINK_ESTAB, +	NL80211_PLINK_HOLDING, +	NL80211_PLINK_BLOCKED, + +	/* keep last */ +	NUM_NL80211_PLINK_STATES, +	MAX_NL80211_PLINK_STATES = NUM_NL80211_PLINK_STATES - 1 +}; + +#define NL80211_KCK_LEN			16 +#define NL80211_KEK_LEN			16 +#define NL80211_REPLAY_CTR_LEN		8 + +/** + * enum nl80211_rekey_data - attributes for GTK rekey offload + * @__NL80211_REKEY_DATA_INVALID: invalid number for nested attributes + * @NL80211_REKEY_DATA_KEK: key encryption key (binary) + * @NL80211_REKEY_DATA_KCK: key confirmation key (binary) + * @NL80211_REKEY_DATA_REPLAY_CTR: replay counter (binary) + * @NUM_NL80211_REKEY_DATA: number of rekey attributes (internal) + * @MAX_NL80211_REKEY_DATA: highest rekey attribute (internal) + */ +enum nl80211_rekey_data { +	__NL80211_REKEY_DATA_INVALID, +	NL80211_REKEY_DATA_KEK, +	NL80211_REKEY_DATA_KCK, +	NL80211_REKEY_DATA_REPLAY_CTR, + +	/* keep last */ +	NUM_NL80211_REKEY_DATA, +	MAX_NL80211_REKEY_DATA = NUM_NL80211_REKEY_DATA - 1 +}; + +/** + * enum nl80211_hidden_ssid - values for %NL80211_ATTR_HIDDEN_SSID + * @NL80211_HIDDEN_SSID_NOT_IN_USE: do not hide SSID (i.e., broadcast it in + *	Beacon frames) + * @NL80211_HIDDEN_SSID_ZERO_LEN: hide SSID by using zero-length SSID element + *	in Beacon frames + * @NL80211_HIDDEN_SSID_ZERO_CONTENTS: hide SSID by using correct length of SSID + *	element in Beacon frames but zero out each byte in the SSID + */ +enum nl80211_hidden_ssid { +	NL80211_HIDDEN_SSID_NOT_IN_USE, +	NL80211_HIDDEN_SSID_ZERO_LEN, +	NL80211_HIDDEN_SSID_ZERO_CONTENTS +}; + +/** + * enum nl80211_sta_wme_attr - station WME attributes + * @__NL80211_STA_WME_INVALID: invalid number for nested attribute + * @NL80211_STA_WME_UAPSD_QUEUES: bitmap of uapsd queues. the format + *	is the same as the AC bitmap in the QoS info field. + * @NL80211_STA_WME_MAX_SP: max service period. the format is the same + *	as the MAX_SP field in the QoS info field (but already shifted down). + * @__NL80211_STA_WME_AFTER_LAST: internal + * @NL80211_STA_WME_MAX: highest station WME attribute + */ +enum nl80211_sta_wme_attr { +	__NL80211_STA_WME_INVALID, +	NL80211_STA_WME_UAPSD_QUEUES, +	NL80211_STA_WME_MAX_SP, + +	/* keep last */ +	__NL80211_STA_WME_AFTER_LAST, +	NL80211_STA_WME_MAX = __NL80211_STA_WME_AFTER_LAST - 1 +}; + +/** + * enum nl80211_pmksa_candidate_attr - attributes for PMKSA caching candidates + * @__NL80211_PMKSA_CANDIDATE_INVALID: invalid number for nested attributes + * @NL80211_PMKSA_CANDIDATE_INDEX: candidate index (u32; the smaller, the higher + *	priority) + * @NL80211_PMKSA_CANDIDATE_BSSID: candidate BSSID (6 octets) + * @NL80211_PMKSA_CANDIDATE_PREAUTH: RSN pre-authentication supported (flag) + * @NUM_NL80211_PMKSA_CANDIDATE: number of PMKSA caching candidate attributes + *	(internal) + * @MAX_NL80211_PMKSA_CANDIDATE: highest PMKSA caching candidate attribute + *	(internal) + */ +enum nl80211_pmksa_candidate_attr { +	__NL80211_PMKSA_CANDIDATE_INVALID, +	NL80211_PMKSA_CANDIDATE_INDEX, +	NL80211_PMKSA_CANDIDATE_BSSID, +	NL80211_PMKSA_CANDIDATE_PREAUTH, + +	/* keep last */ +	NUM_NL80211_PMKSA_CANDIDATE, +	MAX_NL80211_PMKSA_CANDIDATE = NUM_NL80211_PMKSA_CANDIDATE - 1 +}; + +/** + * enum nl80211_tdls_operation - values for %NL80211_ATTR_TDLS_OPERATION + * @NL80211_TDLS_DISCOVERY_REQ: Send a TDLS discovery request + * @NL80211_TDLS_SETUP: Setup TDLS link + * @NL80211_TDLS_TEARDOWN: Teardown a TDLS link which is already established + * @NL80211_TDLS_ENABLE_LINK: Enable TDLS link + * @NL80211_TDLS_DISABLE_LINK: Disable TDLS link + */ +enum nl80211_tdls_operation { +	NL80211_TDLS_DISCOVERY_REQ, +	NL80211_TDLS_SETUP, +	NL80211_TDLS_TEARDOWN, +	NL80211_TDLS_ENABLE_LINK, +	NL80211_TDLS_DISABLE_LINK, +}; + +/* + * enum nl80211_ap_sme_features - device-integrated AP features + * Reserved for future use, no bits are defined in + * NL80211_ATTR_DEVICE_AP_SME yet. +enum nl80211_ap_sme_features { +}; + */ + +/** + * enum nl80211_feature_flags - device/driver features + * @NL80211_FEATURE_SK_TX_STATUS: This driver supports reflecting back + *	TX status to the socket error queue when requested with the + *	socket option. + * @NL80211_FEATURE_HT_IBSS: This driver supports IBSS with HT datarates. + */ +enum nl80211_feature_flags { +	NL80211_FEATURE_SK_TX_STATUS	= 1 << 0, +	NL80211_FEATURE_HT_IBSS		= 1 << 1, +}; + +/** + * enum nl80211_probe_resp_offload_support_attr - optional supported + *	protocols for probe-response offloading by the driver/FW. + *	To be used with the %NL80211_ATTR_PROBE_RESP_OFFLOAD attribute. + *	Each enum value represents a bit in the bitmap of supported + *	protocols. Typically a subset of probe-requests belonging to a + *	supported protocol will be excluded from offload and uploaded + *	to the host. + * + * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS: Support for WPS ver. 1 + * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2: Support for WPS ver. 2 + * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P: Support for P2P + * @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U: Support for 802.11u + */ +enum nl80211_probe_resp_offload_support_attr { +	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS =	1<<0, +	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 =	1<<1, +	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P =	1<<2, +	NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U =	1<<3, +}; +  #endif /* __LINUX_NL80211_H */ diff --git a/package/iwinfo/src/iwinfo_cli.c b/package/iwinfo/src/iwinfo_cli.c index d60d7b8d9..dc8ed8b14 100644 --- a/package/iwinfo/src/iwinfo_cli.c +++ b/package/iwinfo/src/iwinfo_cli.c @@ -275,6 +275,34 @@ static char * format_hwmodes(int modes)  	return buf;  } +static char * format_assocrate(struct iwinfo_rate_entry *r) +{ +	static char buf[40]; +	char *p = buf; +	int l = sizeof(buf); + +	if (r->rate <= 0) +	{ +		snprintf(buf, sizeof(buf), "unknown"); +	} +	else +	{ +		p += snprintf(p, l, "%s", format_rate(r->rate)); +		l = sizeof(buf) - (p - buf); + +		if (r->mcs >= 0) +		{ +			p += snprintf(p, l, ", MCS %d, %dMHz", r->mcs, 20 + r->is_40mhz*20); +			l = sizeof(buf) - (p - buf); + +			if (r->is_short_gi) +				p += snprintf(p, l, ", short GI"); +		} +	} + +	return buf; +} +  static const char * print_type(const struct iwinfo_ops *iw, const char *ifname)  { @@ -635,11 +663,22 @@ static void print_assoclist(const struct iwinfo_ops *iw, const char *ifname)  	{  		e = (struct iwinfo_assoclist_entry *) &buf[i]; -		printf("%s  %s / %s (SNR %d)\n", +		printf("%s  %s / %s (SNR %d)  %d ms ago\n",  			format_bssid(e->mac),  			format_signal(e->signal),  			format_noise(e->noise), -			(e->signal - e->noise)); +			(e->signal - e->noise), +			e->inactive); + +		printf("	RX: %-38s  %8d Pkts.\n", +			format_assocrate(&e->rx_rate), +			e->rx_packets +		); + +		printf("	TX: %-38s  %8d Pkts.\n\n", +			format_assocrate(&e->tx_rate), +			e->tx_packets +		);  	}  } diff --git a/package/iwinfo/src/iwinfo_lua.c b/package/iwinfo/src/iwinfo_lua.c index 533236b4d..6b78cb763 100644 --- a/package/iwinfo/src/iwinfo_lua.c +++ b/package/iwinfo/src/iwinfo_lua.c @@ -265,6 +265,45 @@ static int iwinfo_L_assoclist(lua_State *L, int (*func)(const char *, char *, in  			lua_pushnumber(L, e->noise);  			lua_setfield(L, -2, "noise"); +			lua_pushnumber(L, e->inactive); +			lua_setfield(L, -2, "inactive"); + +			lua_pushnumber(L, e->rx_packets); +			lua_setfield(L, -2, "rx_packets"); + +			lua_pushnumber(L, e->tx_packets); +			lua_setfield(L, -2, "tx_packets"); + +			lua_pushnumber(L, e->rx_rate.rate); +			lua_setfield(L, -2, "rx_rate"); + +			lua_pushnumber(L, e->tx_rate.rate); +			lua_setfield(L, -2, "tx_rate"); + +			if (e->rx_rate.mcs >= 0) +			{ +				lua_pushnumber(L, e->rx_rate.mcs); +				lua_setfield(L, -2, "rx_mcs"); + +				lua_pushboolean(L, e->rx_rate.is_40mhz); +				lua_setfield(L, -2, "rx_40mhz"); + +				lua_pushboolean(L, e->rx_rate.is_short_gi); +				lua_setfield(L, -2, "rx_short_gi"); +			} + +			if (e->tx_rate.mcs >= 0) +			{ +				lua_pushnumber(L, e->tx_rate.mcs); +				lua_setfield(L, -2, "tx_mcs"); + +				lua_pushboolean(L, e->tx_rate.is_40mhz); +				lua_setfield(L, -2, "tx_40mhz"); + +				lua_pushboolean(L, e->tx_rate.is_short_gi); +				lua_setfield(L, -2, "tx_short_gi"); +			} +  			lua_setfield(L, -2, macstr);  		}  	} diff --git a/package/iwinfo/src/iwinfo_madwifi.c b/package/iwinfo/src/iwinfo_madwifi.c index fcd6c8c98..043cf53e8 100644 --- a/package/iwinfo/src/iwinfo_madwifi.c +++ b/package/iwinfo/src/iwinfo_madwifi.c @@ -726,9 +726,29 @@ int madwifi_get_assoclist(const char *ifname, char *buf, int *len)  		do {  			si = (struct ieee80211req_sta_info *) cp; +			memset(&entry, 0, sizeof(entry)); +  			entry.signal = (si->isi_rssi - 95);  			entry.noise  = noise;  			memcpy(entry.mac, &si->isi_macaddr, 6); + +			entry.inactive = si->isi_inact * 1000; + +			entry.tx_packets = (si->isi_txseqs[0] & IEEE80211_SEQ_SEQ_MASK) +				>> IEEE80211_SEQ_SEQ_SHIFT; + +			entry.rx_packets = (si->isi_rxseqs[0] & IEEE80211_SEQ_SEQ_MASK) +				>> IEEE80211_SEQ_SEQ_SHIFT; + +			entry.tx_rate.rate = +				(si->isi_rates[si->isi_txrate] & IEEE80211_RATE_VAL) * 500; + +			/* XXX: this is just a guess */ +			entry.rx_rate.rate = entry.tx_rate.rate; + +			entry.rx_rate.mcs = -1; +			entry.tx_rate.mcs = -1; +  			memcpy(&buf[bl], &entry, sizeof(struct iwinfo_assoclist_entry));  			bl += sizeof(struct iwinfo_assoclist_entry); diff --git a/package/iwinfo/src/iwinfo_nl80211.c b/package/iwinfo/src/iwinfo_nl80211.c index 5c6f7a8ef..05d820349 100644 --- a/package/iwinfo/src/iwinfo_nl80211.c +++ b/package/iwinfo/src/iwinfo_nl80211.c @@ -1052,33 +1052,81 @@ static int nl80211_get_assoclist_cb(struct nl_msg *msg, void *arg)  	struct iwinfo_assoclist_entry *e = arr->buf;  	struct nlattr **attr = nl80211_parse(msg);  	struct nlattr *sinfo[NL80211_STA_INFO_MAX + 1]; +	struct nlattr *rinfo[NL80211_RATE_INFO_MAX + 1];  	static struct nla_policy stats_policy[NL80211_STA_INFO_MAX + 1] = {  		[NL80211_STA_INFO_INACTIVE_TIME] = { .type = NLA_U32    }, -		[NL80211_STA_INFO_RX_BYTES]      = { .type = NLA_U32    }, -		[NL80211_STA_INFO_TX_BYTES]      = { .type = NLA_U32    },  		[NL80211_STA_INFO_RX_PACKETS]    = { .type = NLA_U32    },  		[NL80211_STA_INFO_TX_PACKETS]    = { .type = NLA_U32    }, -		[NL80211_STA_INFO_SIGNAL]        = { .type = NLA_U8     }, +		[NL80211_STA_INFO_RX_BITRATE]    = { .type = NLA_NESTED },  		[NL80211_STA_INFO_TX_BITRATE]    = { .type = NLA_NESTED }, -		[NL80211_STA_INFO_LLID]          = { .type = NLA_U16    }, -		[NL80211_STA_INFO_PLID]          = { .type = NLA_U16    }, -		[NL80211_STA_INFO_PLINK_STATE]   = { .type = NLA_U8     }, +		[NL80211_STA_INFO_SIGNAL]        = { .type = NLA_U8     }, +	}; + +	static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = { +		[NL80211_RATE_INFO_BITRATE]      = { .type = NLA_U16    }, +		[NL80211_RATE_INFO_MCS]          = { .type = NLA_U8     }, +		[NL80211_RATE_INFO_40_MHZ_WIDTH] = { .type = NLA_FLAG   }, +		[NL80211_RATE_INFO_SHORT_GI]     = { .type = NLA_FLAG   },  	};  	/* advance to end of array */  	e += arr->count; +	memset(e, 0, sizeof(*e));  	if (attr[NL80211_ATTR_MAC])  		memcpy(e->mac, nla_data(attr[NL80211_ATTR_MAC]), 6); -	if (attr[NL80211_ATTR_STA_INFO]) +	if (attr[NL80211_ATTR_STA_INFO] && +		!nla_parse_nested(sinfo, NL80211_STA_INFO_MAX, +			attr[NL80211_ATTR_STA_INFO], stats_policy))  	{ -		if (!nla_parse_nested(sinfo, NL80211_STA_INFO_MAX, -				attr[NL80211_ATTR_STA_INFO], stats_policy)) +		if (sinfo[NL80211_STA_INFO_SIGNAL]) +			e->signal = nla_get_u8(sinfo[NL80211_STA_INFO_SIGNAL]); + +		if (sinfo[NL80211_STA_INFO_INACTIVE_TIME]) +			e->inactive = nla_get_u32(sinfo[NL80211_STA_INFO_INACTIVE_TIME]); + +		if (sinfo[NL80211_STA_INFO_RX_PACKETS]) +			e->rx_packets = nla_get_u32(sinfo[NL80211_STA_INFO_RX_PACKETS]); + +		if (sinfo[NL80211_STA_INFO_TX_PACKETS]) +			e->tx_packets = nla_get_u32(sinfo[NL80211_STA_INFO_TX_PACKETS]); + +		if (sinfo[NL80211_STA_INFO_RX_BITRATE] && +			!nla_parse_nested(rinfo, NL80211_RATE_INFO_MAX, +				sinfo[NL80211_STA_INFO_RX_BITRATE], rate_policy))  		{ -			if (sinfo[NL80211_STA_INFO_SIGNAL]) -				e->signal = nla_get_u8(sinfo[NL80211_STA_INFO_SIGNAL]); +			if (rinfo[NL80211_RATE_INFO_BITRATE]) +				e->rx_rate.rate = +					nla_get_u16(rinfo[NL80211_RATE_INFO_BITRATE]) * 100; + +			if (rinfo[NL80211_RATE_INFO_MCS]) +				e->rx_rate.mcs = nla_get_u8(rinfo[NL80211_RATE_INFO_MCS]); + +			if (rinfo[NL80211_RATE_INFO_40_MHZ_WIDTH]) +				e->rx_rate.is_40mhz = 1; + +			if (rinfo[NL80211_RATE_INFO_SHORT_GI]) +				e->rx_rate.is_short_gi = 1; +		} + +		if (sinfo[NL80211_STA_INFO_TX_BITRATE] && +			!nla_parse_nested(rinfo, NL80211_RATE_INFO_MAX, +				sinfo[NL80211_STA_INFO_TX_BITRATE], rate_policy)) +		{ +			if (rinfo[NL80211_RATE_INFO_BITRATE]) +				e->tx_rate.rate = +					nla_get_u16(rinfo[NL80211_RATE_INFO_BITRATE]) * 100; + +			if (rinfo[NL80211_RATE_INFO_MCS]) +				e->tx_rate.mcs = nla_get_u8(rinfo[NL80211_RATE_INFO_MCS]); + +			if (rinfo[NL80211_RATE_INFO_40_MHZ_WIDTH]) +				e->tx_rate.is_40mhz = 1; + +			if (rinfo[NL80211_RATE_INFO_SHORT_GI]) +				e->tx_rate.is_short_gi = 1;  		}  	} @@ -1113,8 +1161,6 @@ int nl80211_get_assoclist(const char *ifname, char *buf, int *len)  					nl80211_send(req, nl80211_get_assoclist_cb, &arr);  					nl80211_free(req);  				} - -				break;  			}  		} diff --git a/package/iwinfo/src/iwinfo_wl.c b/package/iwinfo/src/iwinfo_wl.c index 7b39a9b86..16202f629 100644 --- a/package/iwinfo/src/iwinfo_wl.c +++ b/package/iwinfo/src/iwinfo_wl.c @@ -37,17 +37,30 @@ static int wl_ioctl(const char *name, int cmd, void *buf, int len)  	return iwinfo_ioctl(SIOCDEVPRIVATE, &ifr);  } +static int wl_iovar(const char *name, const char *cmd, const char *arg, +					int arglen, void *buf, int buflen) +{ +	int cmdlen = strlen(cmd) + 1; + +	memcpy(buf, cmd, cmdlen); + +	if (arg && arglen > 0) +		memcpy(buf + cmdlen, arg, arglen); + +	return wl_ioctl(name, WLC_GET_VAR, buf, buflen); +} +  static struct wl_maclist * wl_read_assoclist(const char *ifname)  {  	struct wl_maclist *macs;  	int maclen = 4 + WL_MAX_STA_COUNT * 6; -	if( (macs = (struct wl_maclist *) malloc(maclen)) != NULL ) +	if ((macs = (struct wl_maclist *) malloc(maclen)) != NULL)  	{  		memset(macs, 0, maclen);  		macs->count = WL_MAX_STA_COUNT; -		if( !wl_ioctl(ifname, WLC_GET_ASSOCLIST, macs, maclen) ) +		if (!wl_ioctl(ifname, WLC_GET_ASSOCLIST, macs, maclen))  			return macs;  		free(macs); @@ -60,11 +73,8 @@ static struct wl_maclist * wl_read_assoclist(const char *ifname)  int wl_probe(const char *ifname)  {  	int magic; - -	if( !wl_ioctl(ifname, WLC_GET_MAGIC, &magic, sizeof(magic)) && (magic == WLC_IOCTL_MAGIC)) -		return 1; - -	return 0; +	return (!wl_ioctl(ifname, WLC_GET_MAGIC, &magic, sizeof(magic)) && +			(magic == WLC_IOCTL_MAGIC));  }  void wl_close(void) @@ -77,20 +87,20 @@ int wl_get_mode(const char *ifname, char *buf)  	int ret = -1;  	int ap, infra, passive; -	if( (ret = wl_ioctl(ifname, WLC_GET_AP, &ap, sizeof(ap))) ) +	if ((ret = wl_ioctl(ifname, WLC_GET_AP, &ap, sizeof(ap))))  		return ret; -	if( (ret = wl_ioctl(ifname, WLC_GET_INFRA, &infra, sizeof(infra))) ) +	if ((ret = wl_ioctl(ifname, WLC_GET_INFRA, &infra, sizeof(infra))))  		return ret; -	if( (ret = wl_ioctl(ifname, WLC_GET_PASSIVE, &passive, sizeof(passive))) ) +	if ((ret = wl_ioctl(ifname, WLC_GET_PASSIVE, &passive, sizeof(passive))))  		return ret; -	if( passive ) +	if (passive)  		sprintf(buf, "Monitor"); -	else if( !infra ) +	else if (!infra)  		sprintf(buf, "Ad-Hoc"); -	else if( ap ) +	else if (ap)  		sprintf(buf, "Master");  	else  		sprintf(buf, "Client"); @@ -103,7 +113,7 @@ int wl_get_ssid(const char *ifname, char *buf)  	int ret = -1;  	wlc_ssid_t ssid; -	if( !(ret = wl_ioctl(ifname, WLC_GET_SSID, &ssid, sizeof(ssid))) ) +	if (!(ret = wl_ioctl(ifname, WLC_GET_SSID, &ssid, sizeof(ssid))))  		memcpy(buf, ssid.ssid, ssid.ssid_len);  	return ret; @@ -114,7 +124,7 @@ int wl_get_bssid(const char *ifname, char *buf)  	int ret = -1;  	char bssid[6]; -	if( !(ret = wl_ioctl(ifname, WLC_GET_BSSID, bssid, 6)) ) +	if (!(ret = wl_ioctl(ifname, WLC_GET_BSSID, bssid, 6)))  		sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",  			(uint8_t)bssid[0], (uint8_t)bssid[1], (uint8_t)bssid[2],  			(uint8_t)bssid[3], (uint8_t)bssid[4], (uint8_t)bssid[5] @@ -163,7 +173,7 @@ int wl_get_signal(const char *ifname, int *buf)  	wl_ioctl(ifname, WLC_GET_BSS_INFO, tmp, WLC_IOCTL_MAXLEN); -	if( !wl_ioctl(ifname, WLC_GET_AP, &ap, sizeof(ap)) && !ap ) +	if (!wl_ioctl(ifname, WLC_GET_AP, &ap, sizeof(ap)) && !ap)  	{  		*buf = tmp[WL_BSS_RSSI_OFFSET];  	} @@ -172,13 +182,13 @@ int wl_get_signal(const char *ifname, int *buf)  		rssi = rssi_count = 0;  		/* Calculate average rssi from conntected stations */ -		if( (macs = wl_read_assoclist(ifname)) != NULL ) +		if ((macs = wl_read_assoclist(ifname)) != NULL)  		{ -			for( i = 0; i < macs->count; i++ ) +			for (i = 0; i < macs->count; i++)  			{  				memcpy(starssi.mac, &macs->ea[i], 6); -				if( !wl_ioctl(ifname, WLC_GET_RSSI, &starssi, 12) ) +				if (!wl_ioctl(ifname, WLC_GET_RSSI, &starssi, 12))  				{  					rssi -= starssi.rssi;  					rssi_count++; @@ -259,10 +269,10 @@ int wl_get_encryption(const char *ifname, char *buf)  	switch(wpa)  	{  		case 0: -			if( wsec && !wauth ) +			if (wsec && !wauth)  				c->auth_algs |= IWINFO_AUTH_OPEN; -			else if( wsec && wauth ) +			else if (wsec && wauth)  				c->auth_algs |= IWINFO_AUTH_SHARED;  			/* ToDo: evaluate WEP key lengths */ @@ -376,6 +386,26 @@ int wl_get_enctype(const char *ifname, char *buf)  	return 0;  } +static void wl_get_assoclist_cb(const char *ifname, +							    struct iwinfo_assoclist_entry *e) +{ +	wl_sta_info_t sta = { 0 }; + +	if (!wl_iovar(ifname, "sta_info", e->mac, 6, &sta, sizeof(sta)) && +		(sta.ver >= 2)) +	{ +		e->inactive     = sta.idle * 1000; +		e->rx_packets   = sta.rx_ucast_pkts; +		e->tx_packets   = sta.tx_pkts; +		e->rx_rate.rate = sta.rx_rate; +		e->tx_rate.rate = sta.tx_rate; + +		/* ToDo: 11n */ +		e.rx_rate.mcs = -1; +		e.tx_rate.mcs = -1; +	} +} +  int wl_get_assoclist(const char *ifname, char *buf, int *len)  {  	int i, j, noise; @@ -394,22 +424,25 @@ int wl_get_assoclist(const char *ifname, char *buf, int *len)  	wl_ioctl(ifname, WLC_GET_INFRA, &infra, sizeof(infra));  	wl_ioctl(ifname, WLC_GET_PASSIVE, &passive, sizeof(passive)); -	if( wl_get_noise(ifname, &noise) ) +	if (wl_get_noise(ifname, &noise))  		noise = 0; -	if( (ap || infra || passive) && ((macs = wl_read_assoclist(ifname)) != NULL) ) +	if ((ap || infra || passive) && ((macs = wl_read_assoclist(ifname)) != NULL))  	{ -		for( i = 0, j = 0; i < macs->count; i++, j += sizeof(struct iwinfo_assoclist_entry) ) +		for (i = 0, j = 0; i < macs->count; i++, j += sizeof(struct iwinfo_assoclist_entry))  		{ +			memset(&entry, 0, sizeof(entry));  			memcpy(rssi.mac, &macs->ea[i], 6); -			if( !wl_ioctl(ifname, WLC_GET_RSSI, &rssi, sizeof(struct wl_sta_rssi)) ) +			if (!wl_ioctl(ifname, WLC_GET_RSSI, &rssi, sizeof(struct wl_sta_rssi)))  				entry.signal = (rssi.rssi - 0x100);  			else  				entry.signal = 0;  			entry.noise = noise;  			memcpy(entry.mac, &macs->ea[i], 6); +			wl_get_assoclist_cb(ifname, &entry); +  			memcpy(&buf[j], &entry, sizeof(entry));  		} @@ -417,13 +450,13 @@ int wl_get_assoclist(const char *ifname, char *buf, int *len)  		free(macs);  		return 0;  	} -	else if( (arp = fopen("/proc/net/arp", "r")) != NULL ) +	else if ((arp = fopen("/proc/net/arp", "r")) != NULL)  	{  		j = 0; -		while( fgets(line, sizeof(line), arp) != NULL ) +		while (fgets(line, sizeof(line), arp) != NULL)  		{ -			if( sscanf(line, "%*s 0x%*d 0x%*d %17s %*s %s", macstr, devstr) && !strcmp(devstr, ifname) ) +			if (sscanf(line, "%*s 0x%*d 0x%*d %17s %*s %s", macstr, devstr) && !strcmp(devstr, ifname))  			{  				rssi.mac[0] = strtol(&macstr[0],  NULL, 16);  				rssi.mac[1] = strtol(&macstr[3],  NULL, 16); @@ -432,7 +465,7 @@ int wl_get_assoclist(const char *ifname, char *buf, int *len)  				rssi.mac[4] = strtol(&macstr[12], NULL, 16);  				rssi.mac[5] = strtol(&macstr[15], NULL, 16); -				if( !wl_ioctl(ifname, WLC_GET_RSSI, &rssi, sizeof(struct wl_sta_rssi)) ) +				if (!wl_ioctl(ifname, WLC_GET_RSSI, &rssi, sizeof(struct wl_sta_rssi)))  					entry.signal = (rssi.rssi - 0x100);  				else  					entry.signal = 0; @@ -460,7 +493,7 @@ int wl_get_txpwrlist(const char *ifname, char *buf, int *len)  	uint8_t mw[8]  = { 1, 3, 6, 10, 15, 25, 39, 63 };  	int i; -	for( i = 0; i < 8; i++ ) +	for (i = 0; i < 8; i++)  	{  		entry.dbm = dbm[i];  		entry.mw  = mw[i]; @@ -485,14 +518,14 @@ int wl_get_country(const char *ifname, char *buf)  {  	char ccode[WLC_CNTRY_BUF_SZ]; -	if( !wl_ioctl(ifname, WLC_GET_COUNTRY, ccode, WLC_CNTRY_BUF_SZ) ) +	if (!wl_ioctl(ifname, WLC_GET_COUNTRY, ccode, WLC_CNTRY_BUF_SZ))  	{  		/* IL0 -> World */ -		if( !strcmp(ccode, "IL0") ) +		if (!strcmp(ccode, "IL0"))  			sprintf(buf, "00");  		/* YU -> RS */ -		else if( !strcmp(ccode, "YU") ) +		else if (!strcmp(ccode, "YU"))  			sprintf(buf, "RS");  		else @@ -513,19 +546,19 @@ int wl_get_countrylist(const char *ifname, char *buf, int *len)  	cl->buflen = sizeof(cdata); -	if( !wl_ioctl(ifname, WLC_GET_COUNTRY_LIST, cl, cl->buflen) ) +	if (!wl_ioctl(ifname, WLC_GET_COUNTRY_LIST, cl, cl->buflen))  	{ -		for( i = 0, count = 0; i < cl->count; i++, c++ ) +		for (i = 0, count = 0; i < cl->count; i++, c++)  		{  			sprintf(c->ccode, &cl->country_abbrev[i * WLC_CNTRY_BUF_SZ]);  			c->iso3166 = c->ccode[0] * 256 + c->ccode[1];  			/* IL0 -> World */ -			if( !strcmp(c->ccode, "IL0") ) +			if (!strcmp(c->ccode, "IL0"))  				c->iso3166 = 0x3030;  			/* YU -> RS */ -			else if( !strcmp(c->ccode, "YU") ) +			else if (!strcmp(c->ccode, "YU"))  				c->iso3166 = 0x5253;  		} @@ -546,9 +579,9 @@ int wl_get_mbssid_support(const char *ifname, int *buf)  	wlc_rev_info_t revinfo;  	/* Multi bssid support only works on corerev >= 9 */ -	if( !wl_ioctl(ifname, WLC_GET_REVINFO, &revinfo, sizeof(revinfo)) ) +	if (!wl_ioctl(ifname, WLC_GET_REVINFO, &revinfo, sizeof(revinfo)))  	{ -		if( revinfo.corerev >= 9 ) +		if (revinfo.corerev >= 9)  		{  			*buf = 1;  			return 0; | 
