cfg80211: add KHz variants of frame RX API
Drivers may wish to report the RX frequency in units of KHz. Provide cfg80211_rx_mgmt_khz() and wrap it with cfg80211_rx_mgmt() so exisiting drivers which can't report KHz anyway don't need to change. Add a similar wrapper for cfg80211_report_obss_beacon() so the frequency units stay somewhat consistent. This doesn't actually change the nl80211 API yet. Signed-off-by: Thomas Pedersen <thomas@adapt-ip.com> Link: https://lore.kernel.org/r/20200430172554.18383-2-thomas@adapt-ip.com [fix mac80211 calling the non-khz version of obss beacon report, drop trace point name changes] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:

committed by
Johannes Berg

parent
c03369558c
commit
e76fede8bf
@@ -6988,6 +6988,26 @@ void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
|
||||
enum nl80211_connect_failed_reason reason,
|
||||
gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_rx_mgmt_khz - notification of received, unprocessed management frame
|
||||
* @wdev: wireless device receiving the frame
|
||||
* @freq: Frequency on which the frame was received in KHz
|
||||
* @sig_dbm: signal strength in dBm, or 0 if unknown
|
||||
* @buf: Management frame (header + body)
|
||||
* @len: length of the frame data
|
||||
* @flags: flags, as defined in enum nl80211_rxmgmt_flags
|
||||
*
|
||||
* This function is called whenever an Action frame is received for a station
|
||||
* mode interface, but is not processed in kernel.
|
||||
*
|
||||
* Return: %true if a user space application has registered for this frame.
|
||||
* For action frames, that makes it responsible for rejecting unrecognized
|
||||
* action frames; %false otherwise, in which case for action frames the
|
||||
* driver is responsible for rejecting the frame.
|
||||
*/
|
||||
bool cfg80211_rx_mgmt_khz(struct wireless_dev *wdev, int freq, int sig_dbm,
|
||||
const u8 *buf, size_t len, u32 flags);
|
||||
|
||||
/**
|
||||
* cfg80211_rx_mgmt - notification of received, unprocessed management frame
|
||||
* @wdev: wireless device receiving the frame
|
||||
@@ -7005,8 +7025,13 @@ void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
|
||||
* action frames; %false otherwise, in which case for action frames the
|
||||
* driver is responsible for rejecting the frame.
|
||||
*/
|
||||
bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
|
||||
const u8 *buf, size_t len, u32 flags);
|
||||
static inline bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq,
|
||||
int sig_dbm, const u8 *buf, size_t len,
|
||||
u32 flags)
|
||||
{
|
||||
return cfg80211_rx_mgmt_khz(wdev, MHZ_TO_KHZ(freq), sig_dbm, buf, len,
|
||||
flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* cfg80211_mgmt_tx_status - notification of TX status for management frame
|
||||
@@ -7204,6 +7229,21 @@ void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
|
||||
u64 cookie, bool acked, s32 ack_signal,
|
||||
bool is_valid_ack_signal, gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_report_obss_beacon_khz - report beacon from other APs
|
||||
* @wiphy: The wiphy that received the beacon
|
||||
* @frame: the frame
|
||||
* @len: length of the frame
|
||||
* @freq: frequency the frame was received on in KHz
|
||||
* @sig_dbm: signal strength in dBm, or 0 if unknown
|
||||
*
|
||||
* Use this function to report to userspace when a beacon was
|
||||
* received. It is not useful to call this when there is no
|
||||
* netdev that is in AP/GO mode.
|
||||
*/
|
||||
void cfg80211_report_obss_beacon_khz(struct wiphy *wiphy, const u8 *frame,
|
||||
size_t len, int freq, int sig_dbm);
|
||||
|
||||
/**
|
||||
* cfg80211_report_obss_beacon - report beacon from other APs
|
||||
* @wiphy: The wiphy that received the beacon
|
||||
@@ -7216,9 +7256,13 @@ void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
|
||||
* received. It is not useful to call this when there is no
|
||||
* netdev that is in AP/GO mode.
|
||||
*/
|
||||
void cfg80211_report_obss_beacon(struct wiphy *wiphy,
|
||||
const u8 *frame, size_t len,
|
||||
int freq, int sig_dbm);
|
||||
static inline void cfg80211_report_obss_beacon(struct wiphy *wiphy,
|
||||
const u8 *frame, size_t len,
|
||||
int freq, int sig_dbm)
|
||||
{
|
||||
cfg80211_report_obss_beacon_khz(wiphy, frame, len, MHZ_TO_KHZ(freq),
|
||||
sig_dbm);
|
||||
}
|
||||
|
||||
/**
|
||||
* cfg80211_reg_can_beacon - check if beaconing is allowed
|
||||
|
Reference in New Issue
Block a user