1

wifi: cfg80211: refactor regulatory beaconing checking

There are two functions exported now, with different settings,
refactor to just export a single function that take a struct
with different settings. This will make it easier to add more
parameters.

Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Link: https://msgid.link/20240523120945.d44c34dadfc2.I59b4403108e0dbf7fc6ae8f7522e1af520cffb1c@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Johannes Berg 2024-05-23 12:09:48 +02:00
parent 459662e83d
commit 9fd171a71b
2 changed files with 60 additions and 24 deletions

View File

@ -8800,6 +8800,31 @@ static inline void cfg80211_report_obss_beacon(struct wiphy *wiphy,
sig_dbm);
}
/**
* struct cfg80211_beaconing_check_config - beacon check configuration
* @iftype: the interface type to check for
* @relax: allow IR-relaxation conditions to apply (e.g. another
* interface connected already on the same channel)
* NOTE: If this is set, wiphy mutex must be held.
*/
struct cfg80211_beaconing_check_config {
enum nl80211_iftype iftype;
bool relax;
};
/**
* cfg80211_reg_check_beaconing - check if beaconing is allowed
* @wiphy: the wiphy
* @chandef: the channel definition
* @cfg: additional parameters for the checking
*
* Return: %true if there is no secondary channel or the secondary channel(s)
* can be used for beaconing (i.e. is not a radar channel etc.)
*/
bool cfg80211_reg_check_beaconing(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
struct cfg80211_beaconing_check_config *cfg);
/**
* cfg80211_reg_can_beacon - check if beaconing is allowed
* @wiphy: the wiphy
@ -8809,9 +8834,17 @@ static inline void cfg80211_report_obss_beacon(struct wiphy *wiphy,
* Return: %true if there is no secondary channel or the secondary channel(s)
* can be used for beaconing (i.e. is not a radar channel etc.)
*/
bool cfg80211_reg_can_beacon(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype);
static inline bool
cfg80211_reg_can_beacon(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype)
{
struct cfg80211_beaconing_check_config config = {
.iftype = iftype,
};
return cfg80211_reg_check_beaconing(wiphy, chandef, &config);
}
/**
* cfg80211_reg_can_beacon_relax - check if beaconing is allowed with relaxation
@ -8826,9 +8859,18 @@ bool cfg80211_reg_can_beacon(struct wiphy *wiphy,
*
* Context: Requires the wiphy mutex to be held.
*/
bool cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype);
static inline bool
cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype)
{
struct cfg80211_beaconing_check_config config = {
.iftype = iftype,
.relax = true,
};
return cfg80211_reg_check_beaconing(wiphy, chandef, &config);
}
/**
* cfg80211_ch_switch_notify - update wdev channel and notify userspace

View File

@ -1550,22 +1550,12 @@ static bool _cfg80211_reg_can_beacon(struct wiphy *wiphy,
return res;
}
bool cfg80211_reg_can_beacon(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype)
{
return _cfg80211_reg_can_beacon(wiphy, chandef, iftype, true);
}
EXPORT_SYMBOL(cfg80211_reg_can_beacon);
bool cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype)
bool cfg80211_reg_check_beaconing(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
struct cfg80211_beaconing_check_config *cfg)
{
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
bool check_no_ir;
lockdep_assert_held(&rdev->wiphy.mtx);
bool check_no_ir = true;
/*
* Under certain conditions suggested by some regulatory bodies a
@ -1573,12 +1563,16 @@ bool cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
* only if such relaxations are not enabled and the conditions are not
* met.
*/
check_no_ir = !cfg80211_ir_permissive_chan(wiphy, iftype,
chandef->chan);
if (cfg->relax) {
lockdep_assert_held(&rdev->wiphy.mtx);
check_no_ir = !cfg80211_ir_permissive_chan(wiphy, cfg->iftype,
chandef->chan);
}
return _cfg80211_reg_can_beacon(wiphy, chandef, iftype, check_no_ir);
return _cfg80211_reg_can_beacon(wiphy, chandef, cfg->iftype,
check_no_ir);
}
EXPORT_SYMBOL(cfg80211_reg_can_beacon_relax);
EXPORT_SYMBOL(cfg80211_reg_check_beaconing);
int cfg80211_set_monitor_channel(struct cfg80211_registered_device *rdev,
struct cfg80211_chan_def *chandef)