Commit 00f7763a authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge tag 'mac80211-next-for-net-next-2020-12-11' of...

Merge tag 'mac80211-next-for-net-next-2020-12-11' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next

Johannes Berg says:

====================
A new set of wireless changes:
 * validate key indices for key deletion
 * more preamble support in mac80211
 * various 6 GHz scan fixes/improvements
 * a common SAR power limitations API
 * various small fixes & code improvements

* tag 'mac80211-next-for-net-next-2020-12-11' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next: (35 commits)
  mac80211: add ieee80211_set_sar_specs
  nl80211: add common API to configure SAR power limitations
  mac80211: fix a mistake check for rx_stats update
  mac80211: mlme: save ssid info to ieee80211_bss_conf while assoc
  mac80211: Update rate control on channel change
  mac80211: don't filter out beacons once we start CSA
  mac80211: Fix calculation of minimal channel width
  mac80211: ignore country element TX power on 6 GHz
  mac80211: use bitfield helpers for BA session action frames
  mac80211: support Rx timestamp calculation for all preamble types
  mac80211: don't set set TDLS STA bandwidth wider than possible
  mac80211: support driver-based disconnect with reconnect hint
  cfg80211: support immediate reconnect request hint
  mac80211: use struct assignment for he_obss_pd
  cfg80211: remove struct ieee80211_he_bss_color
  nl80211: validate key indexes for cfg80211_registered_device
  cfg80211: include block-tx flag in channel switch started event
  mac80211: disallow band-switch during CSA
  ieee80211: update reduced neighbor report TBTT info length
  cfg80211: Save the regulatory domain when setting custom regulatory
  ...
====================

Link: https://lore.kernel.org/r/20201211142552.209018-1-johannes@sipsolutions.net


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 46d5e62d c534e093
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -1261,6 +1261,7 @@ struct ieee80211_mgmt {
#define BSS_MEMBERSHIP_SELECTOR_HT_PHY	127
#define BSS_MEMBERSHIP_SELECTOR_VHT_PHY	126
#define BSS_MEMBERSHIP_SELECTOR_HE_PHY	122
#define BSS_MEMBERSHIP_SELECTOR_SAE_H2E 123

/* mgmt header + 1 byte category code */
#define IEEE80211_MIN_ACTION_SIZE offsetof(struct ieee80211_mgmt, u.action.u)
@@ -3835,15 +3836,15 @@ static inline bool for_each_element_completed(const struct element *element,
#define WLAN_RSNX_CAPA_SAE_H2E BIT(5)

/*
 * reduced neighbor report, based on Draft P802.11ax_D5.0,
 * section 9.4.2.170
 * reduced neighbor report, based on Draft P802.11ax_D6.1,
 * section 9.4.2.170 and accepted contributions.
 */
#define IEEE80211_AP_INFO_TBTT_HDR_TYPE				0x03
#define IEEE80211_AP_INFO_TBTT_HDR_FILTERED			0x04
#define IEEE80211_AP_INFO_TBTT_HDR_COLOC			0x08
#define IEEE80211_AP_INFO_TBTT_HDR_COUNT			0xF0
#define IEEE80211_TBTT_INFO_OFFSET_BSSID_BSS_PARAM		8
#define IEEE80211_TBTT_INFO_OFFSET_BSSID_SSSID_BSS_PARAM	12
#define IEEE80211_TBTT_INFO_OFFSET_BSSID_BSS_PARAM		9
#define IEEE80211_TBTT_INFO_OFFSET_BSSID_SSSID_BSS_PARAM	13

#define IEEE80211_RNR_TBTT_PARAMS_OCT_RECOMMENDED		0x01
#define IEEE80211_RNR_TBTT_PARAMS_SAME_SSID			0x02
+23 −1
Original line number Diff line number Diff line
@@ -137,6 +137,17 @@ void rfkill_unregister(struct rfkill *rfkill);
 */
void rfkill_destroy(struct rfkill *rfkill);

/**
 * rfkill_set_hw_state_reason - Set the internal rfkill hardware block state
 *	with a reason
 * @rfkill: pointer to the rfkill class to modify.
 * @blocked: the current hardware block state to set
 * @reason: one of &enum rfkill_hard_block_reasons
 *
 * Prefer to use rfkill_set_hw_state if you don't need any special reason.
 */
bool rfkill_set_hw_state_reason(struct rfkill *rfkill,
				bool blocked, unsigned long reason);
/**
 * rfkill_set_hw_state - Set the internal rfkill hardware block state
 * @rfkill: pointer to the rfkill class to modify.
@@ -156,7 +167,11 @@ void rfkill_destroy(struct rfkill *rfkill);
 * should be blocked) so that drivers need not keep track of the soft
 * block state -- which they might not be able to.
 */
bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked);
static inline bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked)
{
	return rfkill_set_hw_state_reason(rfkill, blocked,
					  RFKILL_HARD_BLOCK_SIGNAL);
}

/**
 * rfkill_set_sw_state - Set the internal rfkill software block state
@@ -256,6 +271,13 @@ static inline void rfkill_destroy(struct rfkill *rfkill)
{
}

static inline bool rfkill_set_hw_state_reason(struct rfkill *rfkill,
					      bool blocked,
					      unsigned long reason)
{
	return blocked;
}

static inline bool rfkill_set_hw_state(struct rfkill *rfkill, bool blocked)
{
	return blocked;
+59 −16
Original line number Diff line number Diff line
@@ -302,19 +302,6 @@ struct cfg80211_he_bss_color {
	bool partial;
};

/**
 * struct ieee80211_he_bss_color - AP settings for BSS coloring
 *
 * @color: the current color.
 * @disabled: is the feature disabled.
 * @partial: define the AID equation.
 */
struct ieee80211_he_bss_color {
	u8 color;
	bool disabled;
	bool partial;
};

/**
 * struct ieee80211_sta_ht_cap - STA's HT capabilities
 *
@@ -1187,6 +1174,7 @@ enum cfg80211_ap_settings_flags {
 * @vht_required: stations must support VHT
 * @twt_responder: Enable Target Wait Time
 * @he_required: stations must support HE
 * @sae_h2e_required: stations must support direct H2E technique in SAE
 * @flags: flags, as defined in enum cfg80211_ap_settings_flags
 * @he_obss_pd: OBSS Packet Detection settings
 * @he_bss_color: BSS Color settings
@@ -1218,7 +1206,7 @@ struct cfg80211_ap_settings {
	const struct ieee80211_vht_cap *vht_cap;
	const struct ieee80211_he_cap_elem *he_cap;
	const struct ieee80211_he_operation *he_oper;
	bool ht_required, vht_required, he_required;
	bool ht_required, vht_required, he_required, sae_h2e_required;
	bool twt_responder;
	u32 flags;
	struct ieee80211_he_obss_pd he_obss_pd;
@@ -1744,6 +1732,54 @@ struct station_info {
	u8 connected_to_as;
};

/**
 * struct cfg80211_sar_sub_specs - sub specs limit
 * @power: power limitation in 0.25dbm
 * @freq_range_index: index the power limitation applies to
 */
struct cfg80211_sar_sub_specs {
	s32 power;
	u32 freq_range_index;
};

/**
 * struct cfg80211_sar_specs - sar limit specs
 * @type: it's set with power in 0.25dbm or other types
 * @num_sub_specs: number of sar sub specs
 * @sub_specs: memory to hold the sar sub specs
 */
struct cfg80211_sar_specs {
	enum nl80211_sar_type type;
	u32 num_sub_specs;
	struct cfg80211_sar_sub_specs sub_specs[];
};


/**
 * @struct cfg80211_sar_chan_ranges - sar frequency ranges
 * @start_freq:  start range edge frequency
 * @end_freq:    end range edge frequency
 */
struct cfg80211_sar_freq_ranges {
	u32 start_freq;
	u32 end_freq;
};

/**
 * struct cfg80211_sar_capa - sar limit capability
 * @type: it's set via power in 0.25dbm or other types
 * @num_freq_ranges: number of frequency ranges
 * @freq_ranges: memory to hold the freq ranges.
 *
 * Note: WLAN driver may append new ranges or split an existing
 * range to small ones and then append them.
 */
struct cfg80211_sar_capa {
	enum nl80211_sar_type type;
	u32 num_freq_ranges;
	const struct cfg80211_sar_freq_ranges *freq_ranges;
};

#if IS_ENABLED(CONFIG_CFG80211)
/**
 * cfg80211_get_station - retrieve information about a given station
@@ -4261,6 +4297,8 @@ struct cfg80211_ops {
				  struct cfg80211_tid_config *tid_conf);
	int	(*reset_tid_config)(struct wiphy *wiphy, struct net_device *dev,
				    const u8 *peer, u8 tids);
	int	(*set_sar_specs)(struct wiphy *wiphy,
				 struct cfg80211_sar_specs *sar);
};

/*
@@ -5029,6 +5067,8 @@ struct wiphy {

	u8 max_data_retry_count;

	const struct cfg80211_sar_capa *sar_capa;

	char priv[] __aligned(NETDEV_ALIGN);
};

@@ -6418,13 +6458,15 @@ void cfg80211_abandon_assoc(struct net_device *dev, struct cfg80211_bss *bss);
 * @dev: network device
 * @buf: 802.11 frame (header + body)
 * @len: length of the frame data
 * @reconnect: immediate reconnect is desired (include the nl80211 attribute)
 *
 * This function is called whenever deauthentication has been processed in
 * station mode. This includes both received deauthentication frames and
 * locally generated ones. This function may sleep. The caller must hold the
 * corresponding wdev's mutex.
 */
void cfg80211_tx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len);
void cfg80211_tx_mlme_mgmt(struct net_device *dev, const u8 *buf, size_t len,
			   bool reconnect);

/**
 * cfg80211_rx_unprot_mlme_mgmt - notification of unprotected mlme mgmt frame
@@ -7531,6 +7573,7 @@ void cfg80211_ch_switch_notify(struct net_device *dev,
 * @dev: the device on which the channel switch started
 * @chandef: the future channel definition
 * @count: the number of TBTTs until the channel switch happens
 * @quiet: whether or not immediate quiet was requested by the AP
 *
 * Inform the userspace about the channel switch that has just
 * started, so that it can take appropriate actions (eg. starting
@@ -7538,7 +7581,7 @@ void cfg80211_ch_switch_notify(struct net_device *dev,
 */
void cfg80211_ch_switch_started_notify(struct net_device *dev,
				       struct cfg80211_chan_def *chandef,
				       u8 count);
				       u8 count, bool quiet);

/**
 * ieee80211_operating_class_to_band - convert operating class to band
+33 −2
Original line number Diff line number Diff line
@@ -635,9 +635,7 @@ struct ieee80211_fils_discovery {
struct ieee80211_bss_conf {
	const u8 *bssid;
	u8 htc_trig_based_pkt_ext;
	bool multi_sta_back_32bit;
	bool uora_exists;
	bool ack_enabled;
	u8 uora_ocw_range;
	u16 frame_time_rts_th;
	bool he_support;
@@ -4197,6 +4195,8 @@ struct ieee80211_ops {
				   struct ieee80211_vif *vif);
	void (*sta_set_4addr)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
			      struct ieee80211_sta *sta, bool enabled);
	int (*set_sar_specs)(struct ieee80211_hw *hw,
			     const struct cfg80211_sar_specs *sar);
};

/**
@@ -5323,6 +5323,26 @@ ieee80211_gtk_rekey_add(struct ieee80211_vif *vif,
void ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const u8 *bssid,
				const u8 *replay_ctr, gfp_t gfp);

/**
 * ieee80211_key_mic_failure - increment MIC failure counter for the key
 *
 * Note: this is really only safe if no other RX function is called
 * at the same time.
 *
 * @keyconf: the key in question
 */
void ieee80211_key_mic_failure(struct ieee80211_key_conf *keyconf);

/**
 * ieee80211_key_replay - increment replay counter for the key
 *
 * Note: this is really only safe if no other RX function is called
 * at the same time.
 *
 * @keyconf: the key in question
 */
void ieee80211_key_replay(struct ieee80211_key_conf *keyconf);

/**
 * ieee80211_wake_queue - wake specific queue
 * @hw: pointer as obtained from ieee80211_alloc_hw().
@@ -5881,6 +5901,17 @@ void ieee80211_beacon_loss(struct ieee80211_vif *vif);
 */
void ieee80211_connection_loss(struct ieee80211_vif *vif);

/**
 * ieee80211_disconnect - request disconnection
 *
 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
 * @reconnect: immediate reconnect is desired
 *
 * Request disconnection from the current network and, if enabled, send a
 * hint to the higher layers that immediate reconnect is desired.
 */
void ieee80211_disconnect(struct ieee80211_vif *vif, bool reconnect);

/**
 * ieee80211_resume_disconnect - disconnect from AP after resume
 *
+113 −1
Original line number Diff line number Diff line
@@ -1178,6 +1178,10 @@
 *	includes the contents of the frame. %NL80211_ATTR_ACK flag is included
 *	if the recipient acknowledged the frame.
 *
 * @NL80211_CMD_SET_SAR_SPECS: SAR power limitation configuration is
 *	passed using %NL80211_ATTR_SAR_SPEC. %NL80211_ATTR_WIPHY is used to
 *	specify the wiphy index to be applied to.
 *
 * @NL80211_CMD_MAX: highest used command number
 * @__NL80211_CMD_AFTER_LAST: internal use
 */
@@ -1408,6 +1412,8 @@ enum nl80211_commands {

	NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS,

	NL80211_CMD_SET_SAR_SPECS,

	/* add new commands above here */

	/* used to define NL80211_CMD_MAX below */
@@ -2079,7 +2085,8 @@ enum nl80211_commands {
 *	until the channel switch event.
 * @NL80211_ATTR_CH_SWITCH_BLOCK_TX: flag attribute specifying that transmission
 *	must be blocked on the current channel (before the channel switch
 *	operation).
 *	operation). Also included in the channel switch started event if quiet
 *	was requested by the AP.
 * @NL80211_ATTR_CSA_IES: Nested set of attributes containing the IE information
 *	for the time while performing a channel switch.
 * @NL80211_ATTR_CNTDWN_OFFS_BEACON: An array of offsets (u16) to the channel
@@ -2534,6 +2541,15 @@ enum nl80211_commands {
 *	This is a u8 attribute that encapsulates one of the values from
 *	&enum nl80211_sae_pwe_mechanism.
 *
 * @NL80211_ATTR_SAR_SPEC: SAR power limitation specification when
 *	used with %NL80211_CMD_SET_SAR_SPECS. The message contains fields
 *	of %nl80211_sar_attrs which specifies the sar type and related
 *	sar specs. Sar specs contains array of %nl80211_sar_specs_attrs.
 *
 * @NL80211_ATTR_RECONNECT_REQUESTED: flag attribute, used with deauth and
 *	disassoc events to indicate that an immediate reconnect to the AP
 *	is desired.
 *
 * @NUM_NL80211_ATTR: total number of nl80211_attrs available
 * @NL80211_ATTR_MAX: highest attribute number currently defined
 * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -3025,6 +3041,10 @@ enum nl80211_attrs {

	NL80211_ATTR_SAE_PWE,

	NL80211_ATTR_RECONNECT_REQUESTED,

	NL80211_ATTR_SAR_SPEC,

	/* add attributes here, update the policy in nl80211.c */

	__NL80211_ATTR_AFTER_LAST,
@@ -7156,4 +7176,96 @@ enum nl80211_sae_pwe_mechanism {
	NL80211_SAE_PWE_HASH_TO_ELEMENT,
	NL80211_SAE_PWE_BOTH,
};

/**
 * enum nl80211_sar_type - type of SAR specs
 *
 * @NL80211_SAR_TYPE_POWER: power limitation specified in 0.25dBm unit
 *
 */
enum nl80211_sar_type {
	NL80211_SAR_TYPE_POWER,

	/* add new type here */

	/* Keep last */
	NUM_NL80211_SAR_TYPE,
};

/**
 * enum nl80211_sar_attrs - Attributes for SAR spec
 *
 * @NL80211_SAR_ATTR_TYPE: the SAR type as defined in &enum nl80211_sar_type.
 *
 * @NL80211_SAR_ATTR_SPECS: Nested array of SAR power
 *	limit specifications. Each specification contains a set
 *	of %nl80211_sar_specs_attrs.
 *
 *	For SET operation, it contains array of %NL80211_SAR_ATTR_SPECS_POWER
 *	and %NL80211_SAR_ATTR_SPECS_RANGE_INDEX.
 *
 *	For sar_capa dump, it contains array of
 *	%NL80211_SAR_ATTR_SPECS_START_FREQ
 *	and %NL80211_SAR_ATTR_SPECS_END_FREQ.
 *
 * @__NL80211_SAR_ATTR_LAST: Internal
 * @NL80211_SAR_ATTR_MAX: highest sar attribute
 *
 * These attributes are used with %NL80211_CMD_SET_SAR_SPEC
 */
enum nl80211_sar_attrs {
	__NL80211_SAR_ATTR_INVALID,

	NL80211_SAR_ATTR_TYPE,
	NL80211_SAR_ATTR_SPECS,

	__NL80211_SAR_ATTR_LAST,
	NL80211_SAR_ATTR_MAX = __NL80211_SAR_ATTR_LAST - 1,
};

/**
 * enum nl80211_sar_specs_attrs - Attributes for SAR power limit specs
 *
 * @NL80211_SAR_ATTR_SPECS_POWER: Required (s32)value to specify the actual
 *	power limit value in units of 0.25 dBm if type is
 *	NL80211_SAR_TYPE_POWER. (i.e., a value of 44 represents 11 dBm).
 *	0 means userspace doesn't have SAR limitation on this associated range.
 *
 * @NL80211_SAR_ATTR_SPECS_RANGE_INDEX: Required (u32) value to specify the
 *	index of exported freq range table and the associated power limitation
 *	is applied to this range.
 *
 *	Userspace isn't required to set all the ranges advertised by WLAN driver,
 *	and userspace can skip some certain ranges. These skipped ranges don't
 *	have SAR limitations, and they are same as setting the
 *	%NL80211_SAR_ATTR_SPECS_POWER to any unreasonable high value because any
 *	value higher than regulatory allowed value just means SAR power
 *	limitation is removed, but it's required to set at least one range.
 *	It's not allowed to set duplicated range in one SET operation.
 *
 *	Every SET operation overwrites previous SET operation.
 *
 * @NL80211_SAR_ATTR_SPECS_START_FREQ: Required (u32) value to specify the start
 *	frequency of this range edge when registering SAR capability to wiphy.
 *	It's not a channel center frequency. The unit is kHz.
 *
 * @NL80211_SAR_ATTR_SPECS_END_FREQ: Required (u32) value to specify the end
 *	frequency of this range edge when registering SAR capability to wiphy.
 *	It's not a channel center frequency. The unit is kHz.
 *
 * @__NL80211_SAR_ATTR_SPECS_LAST: Internal
 * @NL80211_SAR_ATTR_SPECS_MAX: highest sar specs attribute
 */
enum nl80211_sar_specs_attrs {
	__NL80211_SAR_ATTR_SPECS_INVALID,

	NL80211_SAR_ATTR_SPECS_POWER,
	NL80211_SAR_ATTR_SPECS_RANGE_INDEX,
	NL80211_SAR_ATTR_SPECS_START_FREQ,
	NL80211_SAR_ATTR_SPECS_END_FREQ,

	__NL80211_SAR_ATTR_SPECS_LAST,
	NL80211_SAR_ATTR_SPECS_MAX = __NL80211_SAR_ATTR_SPECS_LAST - 1,
};

#endif /* __LINUX_NL80211_H */
Loading