mac80211: allow user space to query the current operating frequency
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19178 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
de1350d8d9
commit
c011667b62
|
@ -0,0 +1,47 @@
|
|||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -954,6 +954,8 @@ struct cfg80211_pmksa {
|
||||
*
|
||||
* @set_txq_params: Set TX queue parameters
|
||||
*
|
||||
+ * @get_channel: Get operating channel
|
||||
+ *
|
||||
* @set_channel: Set channel
|
||||
*
|
||||
* @scan: Request to do a scan. If returning zero, the scan request is given
|
||||
@@ -1079,6 +1081,10 @@ struct cfg80211_ops {
|
||||
int (*set_txq_params)(struct wiphy *wiphy,
|
||||
struct ieee80211_txq_params *params);
|
||||
|
||||
+ int (*get_channel)(struct wiphy *wiphy,
|
||||
+ struct ieee80211_channel **chan,
|
||||
+ enum nl80211_channel_type *channel_type);
|
||||
+
|
||||
int (*set_channel)(struct wiphy *wiphy,
|
||||
struct ieee80211_channel *chan,
|
||||
enum nl80211_channel_type channel_type);
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -427,7 +427,8 @@ static int nl80211_send_wiphy(struct sk_
|
||||
struct nlattr *nl_modes;
|
||||
struct nlattr *nl_cmds;
|
||||
enum ieee80211_band band;
|
||||
- struct ieee80211_channel *chan;
|
||||
+ struct ieee80211_channel *chan = NULL;
|
||||
+ enum nl80211_channel_type chan_type;
|
||||
struct ieee80211_rate *rate;
|
||||
int i;
|
||||
u16 ifmodes = dev->wiphy.interface_modes;
|
||||
@@ -465,6 +466,12 @@ static int nl80211_send_wiphy(struct sk_
|
||||
NLA_PUT_U8(msg, NL80211_ATTR_MAX_NUM_PMKIDS,
|
||||
dev->wiphy.max_num_pmkids);
|
||||
|
||||
+ if (dev->ops->get_channel &&
|
||||
+ dev->ops->get_channel(&dev->wiphy, &chan, &chan_type) == 0) {
|
||||
+ NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, chan->center_freq);
|
||||
+ NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, chan_type);
|
||||
+ }
|
||||
+
|
||||
nl_modes = nla_nest_start(msg, NL80211_ATTR_SUPPORTED_IFTYPES);
|
||||
if (!nl_modes)
|
||||
goto nla_put_failure;
|
|
@ -0,0 +1,29 @@
|
|||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -1154,6 +1154,18 @@ static int ieee80211_set_txq_params(stru
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int ieee80211_get_oper_channel(struct wiphy *wiphy,
|
||||
+ struct ieee80211_channel **chan,
|
||||
+ enum nl80211_channel_type *channel_type)
|
||||
+{
|
||||
+ struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
+
|
||||
+ *chan = local->oper_channel;
|
||||
+ *channel_type = local->oper_channel_type;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int ieee80211_set_channel(struct wiphy *wiphy,
|
||||
struct ieee80211_channel *chan,
|
||||
enum nl80211_channel_type channel_type)
|
||||
@@ -1494,6 +1506,7 @@ struct cfg80211_ops mac80211_config_ops
|
||||
#endif
|
||||
.change_bss = ieee80211_change_bss,
|
||||
.set_txq_params = ieee80211_set_txq_params,
|
||||
+ .get_channel = ieee80211_get_oper_channel,
|
||||
.set_channel = ieee80211_set_channel,
|
||||
.suspend = ieee80211_suspend,
|
||||
.resume = ieee80211_resume,
|
Loading…
Reference in New Issue