diff options
Diffstat (limited to 'include/net/cfg80211.h')
| -rw-r--r-- | include/net/cfg80211.h | 133 | 
1 files changed, 112 insertions, 21 deletions
| diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 63921672bed0..9c23f4d33e06 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -330,6 +330,9 @@ struct ieee80211_supported_band {   * in a separate chapter.   */ +#define VHT_MUMIMO_GROUPS_DATA_LEN (WLAN_MEMBERSHIP_LEN +\ +				    WLAN_USER_POSITION_LEN) +  /**   * struct vif_params - describes virtual interface parameters   * @use_4addr: use 4-address frames @@ -339,10 +342,13 @@ struct ieee80211_supported_band {   *	This feature is only fully supported by drivers that enable the   *	%NL80211_FEATURE_MAC_ON_CREATE flag.  Others may support creating   **	only p2p devices with specified MAC. + * @vht_mumimo_groups: MU-MIMO groupID. used for monitoring only + *	 packets belonging to that MU-MIMO groupID.   */  struct vif_params { -       int use_4addr; -       u8 macaddr[ETH_ALEN]; +	int use_4addr; +	u8 macaddr[ETH_ALEN]; +	u8 vht_mumimo_groups[VHT_MUMIMO_GROUPS_DATA_LEN];  };  /** @@ -774,6 +780,7 @@ enum station_parameters_apply_mask {   *	(bitmask of BIT(NL80211_STA_FLAG_...))   * @listen_interval: listen interval or -1 for no change   * @aid: AID or zero for no change + * @peer_aid: mesh peer AID or zero for no change   * @plink_action: plink action to take   * @plink_state: set the peer link state for a station   * @ht_capa: HT capabilities of station @@ -805,6 +812,7 @@ struct station_parameters {  	u32 sta_modify_mask;  	int listen_interval;  	u16 aid; +	u16 peer_aid;  	u8 supported_rates_len;  	u8 plink_action;  	u8 plink_state; @@ -1418,6 +1426,21 @@ struct cfg80211_ssid {  };  /** + * struct cfg80211_scan_info - information about completed scan + * @scan_start_tsf: scan start time in terms of the TSF of the BSS that the + *	wireless device that requested the scan is connected to. If this + *	information is not available, this field is left zero. + * @tsf_bssid: the BSSID according to which %scan_start_tsf is set. + * @aborted: set to true if the scan was aborted for any reason, + *	userspace will be notified of that + */ +struct cfg80211_scan_info { +	u64 scan_start_tsf; +	u8 tsf_bssid[ETH_ALEN] __aligned(2); +	bool aborted; +}; + +/**   * struct cfg80211_scan_request - scan request description   *   * @ssids: SSIDs to scan for (active scan only) @@ -1427,12 +1450,17 @@ struct cfg80211_ssid {   * @scan_width: channel width for scanning   * @ie: optional information element(s) to add into Probe Request or %NULL   * @ie_len: length of ie in octets + * @duration: how long to listen on each channel, in TUs. If + *	%duration_mandatory is not set, this is the maximum dwell time and + *	the actual dwell time may be shorter. + * @duration_mandatory: if set, the scan duration must be as specified by the + *	%duration field.   * @flags: bit field of flags controlling operation   * @rates: bitmap of rates to advertise for each band   * @wiphy: the wiphy this was for   * @scan_start: time (in jiffies) when the scan started   * @wdev: the wireless device to scan for - * @aborted: (internal) scan request was notified as aborted + * @info: (internal) information about completed scan   * @notified: (internal) scan request was notified as done or aborted   * @no_cck: used to send probe requests at non CCK rate in 2GHz band   * @mac_addr: MAC address used with randomisation @@ -1448,6 +1476,8 @@ struct cfg80211_scan_request {  	enum nl80211_bss_scan_width scan_width;  	const u8 *ie;  	size_t ie_len; +	u16 duration; +	bool duration_mandatory;  	u32 flags;  	u32 rates[NUM_NL80211_BANDS]; @@ -1461,7 +1491,8 @@ struct cfg80211_scan_request {  	/* internal */  	struct wiphy *wiphy;  	unsigned long scan_start; -	bool aborted, notified; +	struct cfg80211_scan_info info; +	bool notified;  	bool no_cck;  	/* keep last */ @@ -1594,12 +1625,19 @@ enum cfg80211_signal_type {   *	buffered on the device) and be accurate to about 10ms.   *	If the frame isn't buffered, just passing the return value of   *	ktime_get_boot_ns() is likely appropriate. + * @parent_tsf: the time at the start of reception of the first octet of the + *	timestamp field of the frame. The time is the TSF of the BSS specified + *	by %parent_bssid. + * @parent_bssid: the BSS according to which %parent_tsf is set. This is set to + *	the BSS that requested the scan in which the beacon/probe was received.   */  struct cfg80211_inform_bss {  	struct ieee80211_channel *chan;  	enum nl80211_bss_scan_width scan_width;  	s32 signal;  	u64 boottime_ns; +	u64 parent_tsf; +	u8 parent_bssid[ETH_ALEN] __aligned(2);  };  /** @@ -2367,19 +2405,23 @@ struct cfg80211_qos_map {   *	(invoked with the wireless_dev mutex held)   *   * @connect: Connect to the ESS with the specified parameters. When connected, - *	call cfg80211_connect_result() with status code %WLAN_STATUS_SUCCESS. - *	If the connection fails for some reason, call cfg80211_connect_result() - *	with the status from the AP. The driver is allowed to roam to other - *	BSSes within the ESS when the other BSS matches the connect parameters. - *	When such roaming is initiated by the driver, the driver is expected to - *	verify that the target matches the configured security parameters and - *	to use Reassociation Request frame instead of Association Request frame. - *	The connect function can also be used to request the driver to perform - *	a specific roam when connected to an ESS. In that case, the prev_bssid + *	call cfg80211_connect_result()/cfg80211_connect_bss() with status code + *	%WLAN_STATUS_SUCCESS. If the connection fails for some reason, call + *	cfg80211_connect_result()/cfg80211_connect_bss() with the status code + *	from the AP or cfg80211_connect_timeout() if no frame with status code + *	was received. + *	The driver is allowed to roam to other BSSes within the ESS when the + *	other BSS matches the connect parameters. When such roaming is initiated + *	by the driver, the driver is expected to verify that the target matches + *	the configured security parameters and to use Reassociation Request + *	frame instead of Association Request frame. + *	The connect function can also be used to request the driver to perform a + *	specific roam when connected to an ESS. In that case, the prev_bssid   *	parameter is set to the BSSID of the currently associated BSS as an - *	indication of requesting reassociation. In both the driver-initiated and - *	new connect() call initiated roaming cases, the result of roaming is - *	indicated with a call to cfg80211_roamed() or cfg80211_roamed_bss(). + *	indication of requesting reassociation. + *	In both the driver-initiated and new connect() call initiated roaming + *	cases, the result of roaming is indicated with a call to + *	cfg80211_roamed() or cfg80211_roamed_bss().   *	(invoked with the wireless_dev mutex held)   * @disconnect: Disconnect from the BSS/ESS.   *	(invoked with the wireless_dev mutex held) @@ -3080,6 +3122,24 @@ struct wiphy_vendor_command {  };  /** + * struct wiphy_iftype_ext_capab - extended capabilities per interface type + * @iftype: interface type + * @extended_capabilities: extended capabilities supported by the driver, + *	additional capabilities might be supported by userspace; these are the + *	802.11 extended capabilities ("Extended Capabilities element") and are + *	in the same format as in the information element. See IEEE Std + *	802.11-2012 8.4.2.29 for the defined fields. + * @extended_capabilities_mask: mask of the valid values + * @extended_capabilities_len: length of the extended capabilities + */ +struct wiphy_iftype_ext_capab { +	enum nl80211_iftype iftype; +	const u8 *extended_capabilities; +	const u8 *extended_capabilities_mask; +	u8 extended_capabilities_len; +}; + +/**   * struct wiphy - wireless hardware description   * @reg_notifier: the driver's regulatory notification callback,   *	note that if your driver uses wiphy_apply_custom_regulatory() @@ -3199,9 +3259,14 @@ struct wiphy_vendor_command {   *	additional capabilities might be supported by userspace; these are   *	the 802.11 extended capabilities ("Extended Capabilities element")   *	and are in the same format as in the information element. See - *	802.11-2012 8.4.2.29 for the defined fields. + *	802.11-2012 8.4.2.29 for the defined fields. These are the default + *	extended capabilities to be used if the capabilities are not specified + *	for a specific interface type in iftype_ext_capab.   * @extended_capabilities_mask: mask of the valid values   * @extended_capabilities_len: length of the extended capabilities + * @iftype_ext_capab: array of extended capabilities per interface type + * @num_iftype_ext_capab: number of interface types for which extended + *	capabilities are specified separately.   * @coalesce: packet coalescing support information   *   * @vendor_commands: array of vendor commands supported by the hardware @@ -3301,6 +3366,9 @@ struct wiphy {  	const u8 *extended_capabilities, *extended_capabilities_mask;  	u8 extended_capabilities_len; +	const struct wiphy_iftype_ext_capab *iftype_ext_capab; +	unsigned int num_iftype_ext_capab; +  	/* If multiple wiphys are registered and you're handed e.g.  	 * a regular netdev with assigned ieee80211_ptr, you won't  	 * know whether it points to a wiphy your driver has registered @@ -4031,10 +4099,10 @@ const char *reg_initiator_name(enum nl80211_reg_initiator initiator);   * cfg80211_scan_done - notify that scan finished   *   * @request: the corresponding scan request - * @aborted: set to true if the scan was aborted for any reason, - *	userspace will be notified of that + * @info: information about the completed scan   */ -void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted); +void cfg80211_scan_done(struct cfg80211_scan_request *request, +			struct cfg80211_scan_info *info);  /**   * cfg80211_sched_scan_results - notify that new scan results are available @@ -4680,7 +4748,7 @@ static inline void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp)  void cfg80211_connect_bss(struct net_device *dev, const u8 *bssid,  			  struct cfg80211_bss *bss, const u8 *req_ie,  			  size_t req_ie_len, const u8 *resp_ie, -			  size_t resp_ie_len, u16 status, gfp_t gfp); +			  size_t resp_ie_len, int status, gfp_t gfp);  /**   * cfg80211_connect_result - notify cfg80211 of connection result @@ -4710,6 +4778,29 @@ cfg80211_connect_result(struct net_device *dev, const u8 *bssid,  }  /** + * cfg80211_connect_timeout - notify cfg80211 of connection timeout + * + * @dev: network device + * @bssid: the BSSID of the AP + * @req_ie: association request IEs (maybe be %NULL) + * @req_ie_len: association request IEs length + * @gfp: allocation flags + * + * It should be called by the underlying driver whenever connect() has failed + * in a sequence where no explicit authentication/association rejection was + * received from the AP. This could happen, e.g., due to not being able to send + * out the Authentication or Association Request frame or timing out while + * waiting for the response. + */ +static inline void +cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid, +			 const u8 *req_ie, size_t req_ie_len, gfp_t gfp) +{ +	cfg80211_connect_bss(dev, bssid, NULL, req_ie, req_ie_len, NULL, 0, -1, +			     gfp); +} + +/**   * cfg80211_roamed - notify cfg80211 of roaming   *   * @dev: network device |