Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 315575
b: refs/heads/master
c: 5b7ccaf
h: refs/heads/master
i:
  315573: a7207df
  315571: 54ec2e6
  315567: b0c635a
v: v3
  • Loading branch information
Johannes Berg committed Jul 13, 2012
1 parent bd16166 commit 9f0163a
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 075e08477d51709ae1998a05c35aadf59ef823b9
refs/heads/master: 5b7ccaf3fc7446e42b83a77fd7aa7ad92850acdd
9 changes: 9 additions & 0 deletions trunk/include/net/cfg80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -1612,6 +1612,10 @@ struct cfg80211_gtk_rekey_data {
* @get_et_strings: Ethtool API to get a set of strings to describe stats
* and perhaps other supported types of ethtool data-sets.
* See @ethtool_ops.get_strings
*
* @get_channel: Get the current operating channel for the virtual interface.
* For monitor interfaces, it should return %NULL unless there's a single
* current monitoring channel.
*/
struct cfg80211_ops {
int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
Expand Down Expand Up @@ -1821,6 +1825,11 @@ struct cfg80211_ops {
u32 sset, u8 *data);

void (*set_monitor_enabled)(struct wiphy *wiphy, bool enabled);

struct ieee80211_channel *
(*get_channel)(struct wiphy *wiphy,
struct wireless_dev *wdev,
enum nl80211_channel_type *type);
};

/*
Expand Down
11 changes: 11 additions & 0 deletions trunk/net/mac80211/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -2982,6 +2982,16 @@ static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev,
return 0;
}

static struct ieee80211_channel *
ieee80211_cfg_get_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
enum nl80211_channel_type *type)
{
struct ieee80211_local *local = wiphy_priv(wiphy);

*type = local->_oper_channel_type;
return local->oper_channel;
}

#ifdef CONFIG_PM
static void ieee80211_set_wakeup(struct wiphy *wiphy, bool enabled)
{
Expand Down Expand Up @@ -3062,4 +3072,5 @@ struct cfg80211_ops mac80211_config_ops = {
.get_et_sset_count = ieee80211_get_et_sset_count,
.get_et_stats = ieee80211_get_et_stats,
.get_et_strings = ieee80211_get_et_strings,
.get_channel = ieee80211_cfg_get_channel,
};
16 changes: 11 additions & 5 deletions trunk/net/wireless/nl80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -1759,11 +1759,17 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 pid, u32 seq, int flags,
(cfg80211_rdev_list_generation << 2)))
goto nla_put_failure;

if (rdev->monitor_channel) {
if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ,
rdev->monitor_channel->center_freq) ||
nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE,
rdev->monitor_channel_type))
if (rdev->ops->get_channel) {
struct ieee80211_channel *chan;
enum nl80211_channel_type channel_type;

chan = rdev->ops->get_channel(&rdev->wiphy, wdev,
&channel_type);
if (chan &&
(nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ,
chan->center_freq) ||
nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE,
channel_type)))
goto nla_put_failure;
}

Expand Down
9 changes: 7 additions & 2 deletions trunk/net/wireless/wext-compat.c
Original file line number Diff line number Diff line change
Expand Up @@ -827,17 +827,22 @@ static int cfg80211_wext_giwfreq(struct net_device *dev,
{
struct wireless_dev *wdev = dev->ieee80211_ptr;
struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
struct ieee80211_channel *chan;
enum nl80211_channel_type channel_type;

switch (wdev->iftype) {
case NL80211_IFTYPE_STATION:
return cfg80211_mgd_wext_giwfreq(dev, info, freq, extra);
case NL80211_IFTYPE_ADHOC:
return cfg80211_ibss_wext_giwfreq(dev, info, freq, extra);
case NL80211_IFTYPE_MONITOR:
if (!rdev->monitor_channel)
if (!rdev->ops->get_channel)
return -EINVAL;

freq->m = rdev->monitor_channel->center_freq;
chan = rdev->ops->get_channel(wdev->wiphy, wdev, &channel_type);
if (!chan)
return -EINVAL;
freq->m = chan->center_freq;
freq->e = 6;
return 0;
default:
Expand Down

0 comments on commit 9f0163a

Please sign in to comment.