Commit 645f3d85 authored by Mukesh Sisodiya's avatar Mukesh Sisodiya Committed by Johannes Berg
Browse files

wifi: cfg80211: handle UHB AP and STA power type



UHB AP send supported power type(LPI, SP, VLP)
in beacon and probe response IE and STA should
connect to these AP only if their regulatory support
the AP power type.

Beacon/Probe response are reported to userspace
with reason "STA regulatory not supporting to connect to AP
based on transmitted power type" and it should
not connect to AP.

Signed-off-by: default avatarMukesh Sisodiya <mukesh.sisodiya@intel.com>
Reviewed-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20231220133549.cbfbef9170a9.I432f78438de18aa9f5c9006be12e41dc34cc47c5@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 99b6877d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2720,6 +2720,7 @@ static inline bool ieee80211_he_capa_size_ok(const u8 *data, u8 len)

#define IEEE80211_6GHZ_CTRL_REG_LPI_AP	0
#define IEEE80211_6GHZ_CTRL_REG_SP_AP	1
#define IEEE80211_6GHZ_CTRL_REG_VLP_AP	2

/**
 * struct ieee80211_he_6ghz_oper - HE 6 GHz operation Information field
+6 −0
Original line number Diff line number Diff line
@@ -118,6 +118,10 @@ struct wiphy;
 *	restrictions.
 * @IEEE80211_CHAN_NO_EHT: EHT operation is not permitted on this channel.
 * @IEEE80211_CHAN_DFS_CONCURRENT: See %NL80211_RRF_DFS_CONCURRENT
 * @IEEE80211_CHAN_NO_UHB_VLP_CLIENT: Client connection with VLP AP
 *	not permitted using this channel
 * @IEEE80211_CHAN_NO_UHB_AFC_CLIENT: Client connection with AFC AP
 *	not permitted using this channel
 */
enum ieee80211_channel_flags {
	IEEE80211_CHAN_DISABLED		= 1<<0,
@@ -142,6 +146,8 @@ enum ieee80211_channel_flags {
	IEEE80211_CHAN_NO_320MHZ	= 1<<19,
	IEEE80211_CHAN_NO_EHT		= 1<<20,
	IEEE80211_CHAN_DFS_CONCURRENT	= 1<<21,
	IEEE80211_CHAN_NO_UHB_VLP_CLIENT= 1<<22,
	IEEE80211_CHAN_NO_UHB_AFC_CLIENT= 1<<23,
};

#define IEEE80211_CHAN_NO_HT40 \
+13 −0
Original line number Diff line number Diff line
@@ -4260,6 +4260,10 @@ enum nl80211_wmm_rule {
 *	allowed for peer-to-peer or adhoc communication under the control
 *	of a DFS master which operates on the same channel (FCC-594280 D01
 *	Section B.3). Should be used together with %NL80211_RRF_DFS only.
 * @NL80211_FREQUENCY_ATTR_NO_UHB_VLP_CLIENT: Client connection to VLP AP
 *	not allowed using this channel
 * @NL80211_FREQUENCY_ATTR_NO_UHB_AFC_CLIENT: Client connection to AFC AP
 *	not allowed using this channel
 * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
 *	currently defined
 * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
@@ -4300,6 +4304,8 @@ enum nl80211_frequency_attr {
	NL80211_FREQUENCY_ATTR_NO_EHT,
	NL80211_FREQUENCY_ATTR_PSD,
	NL80211_FREQUENCY_ATTR_DFS_CONCURRENT,
	NL80211_FREQUENCY_ATTR_NO_UHB_VLP_CLIENT,
	NL80211_FREQUENCY_ATTR_NO_UHB_AFC_CLIENT,

	/* keep last */
	__NL80211_FREQUENCY_ATTR_AFTER_LAST,
@@ -4509,6 +4515,8 @@ enum nl80211_sched_scan_match_attr {
	peer-to-peer or adhoc communication under the control of a DFS master
	which operates on the same channel (FCC-594280 D01 Section B.3).
	Should be used together with %NL80211_RRF_DFS only.
 * @NL80211_RRF_NO_UHB_VLP_CLIENT: Client connection to VLP AP not allowed
 * @NL80211_RRF_NO_UHB_AFC_CLIENT: Client connection to AFC AP not allowed
 */
enum nl80211_reg_rule_flags {
	NL80211_RRF_NO_OFDM		= 1<<0,
@@ -4531,6 +4539,8 @@ enum nl80211_reg_rule_flags {
	NL80211_RRF_NO_EHT		= 1<<19,
	NL80211_RRF_PSD			= 1<<20,
	NL80211_RRF_DFS_CONCURRENT	= 1<<21,
	NL80211_RRF_NO_UHB_VLP_CLIENT	= 1<<22,
	NL80211_RRF_NO_UHB_AFC_CLIENT	= 1<<23,
};

#define NL80211_RRF_PASSIVE_SCAN	NL80211_RRF_NO_IR
@@ -5086,9 +5096,12 @@ enum nl80211_bss_use_for {
 *	BSS isn't possible
 * @NL80211_BSS_CANNOT_USE_NSTR_NONPRIMARY: NSTR nonprimary links aren't
 *	supported by the device, and this BSS entry represents one.
 * @NL80211_BSS_CANNOT_USE_UHB_PWR_MISMATCH: STA is not supporting
 *	the AP power type (SP, VLP, AP) that the AP uses.
 */
enum nl80211_bss_cannot_use_reasons {
	NL80211_BSS_CANNOT_USE_NSTR_NONPRIMARY	= 1 << 0,
	NL80211_BSS_CANNOT_USE_UHB_PWR_MISMATCH	= 1 << 1,
};

/**
+6 −0
Original line number Diff line number Diff line
@@ -1204,6 +1204,12 @@ static int nl80211_msg_put_channel(struct sk_buff *msg, struct wiphy *wiphy,
		if ((chan->flags & IEEE80211_CHAN_DFS_CONCURRENT) &&
		    nla_put_flag(msg, NL80211_FREQUENCY_ATTR_DFS_CONCURRENT))
			goto nla_put_failure;
		if ((chan->flags & IEEE80211_CHAN_NO_UHB_VLP_CLIENT) &&
		    nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_UHB_VLP_CLIENT))
			goto nla_put_failure;
		if ((chan->flags & IEEE80211_CHAN_NO_UHB_AFC_CLIENT) &&
		    nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_UHB_AFC_CLIENT))
			goto nla_put_failure;
	}
	if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_MAX_TX_POWER,
+4 −0
Original line number Diff line number Diff line
@@ -1595,6 +1595,10 @@ static u32 map_regdom_flags(u32 rd_flags)
		channel_flags |= IEEE80211_CHAN_NO_EHT;
	if (rd_flags & NL80211_RRF_DFS_CONCURRENT)
		channel_flags |= IEEE80211_CHAN_DFS_CONCURRENT;
	if (rd_flags & NL80211_RRF_NO_UHB_VLP_CLIENT)
		channel_flags |= IEEE80211_CHAN_NO_UHB_VLP_CLIENT;
	if (rd_flags & NL80211_RRF_NO_UHB_AFC_CLIENT)
		channel_flags |= IEEE80211_CHAN_NO_UHB_AFC_CLIENT;
	if (rd_flags & NL80211_RRF_PSD)
		channel_flags |= IEEE80211_CHAN_PSD;
	return channel_flags;
Loading