cfg80211: Add channel information to NL80211_CMD_GET_INTERFACE
authorPontus Fuchs <pontus.fuchs@gmail.com>
Tue, 3 Apr 2012 14:39:58 +0000 (16:39 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 13 Apr 2012 18:32:49 +0000 (14:32 -0400)
If the current channel is known, add frequency and channel type to
NL80211_CMD_GET_INTERFACE.

Signed-off-by: Pontus Fuchs <pontus.fuchs@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
include/net/cfg80211.h
net/mac80211/cfg.c
net/wireless/nl80211.c
net/wireless/wext-compat.c

index a587867375b2712bc3717be734f1e530bb331880..d17ad5f2b603f754d19e9b9a700c5d64a7744141 100644 (file)
@@ -1710,7 +1710,8 @@ struct cfg80211_ops {
                                  struct net_device *dev,
                                  u16 noack_map);
 
-       struct ieee80211_channel *(*get_channel)(struct wiphy *wiphy);
+       struct ieee80211_channel *(*get_channel)(struct wiphy *wiphy,
+                                              enum nl80211_channel_type *type);
 };
 
 /*
index 355735491252a53a4701f5bda3d291cdd19bff9f..510a745c31082c129fcc453a9212f29627b50252 100644 (file)
@@ -2688,10 +2688,12 @@ static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev,
 }
 
 static struct ieee80211_channel *
-ieee80211_wiphy_get_channel(struct wiphy *wiphy)
+ieee80211_wiphy_get_channel(struct wiphy *wiphy,
+                           enum nl80211_channel_type *type)
 {
        struct ieee80211_local *local = wiphy_priv(wiphy);
 
+       *type = local->_oper_channel_type;
        return local->oper_channel;
 }
 
index 5e261234d2718fbd452ada23dbab3d41d3be3ed3..bcf6f70e518db6654349fcaf852fb33720c76179 100644 (file)
@@ -1501,6 +1501,19 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 pid, u32 seq, int flags,
                    rdev->devlist_generation ^
                        (cfg80211_rdev_list_generation << 2));
 
+       if (rdev->ops->get_channel) {
+               struct ieee80211_channel *chan;
+               enum nl80211_channel_type channel_type;
+
+               chan = rdev->ops->get_channel(&rdev->wiphy, &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);
+               }
+       }
+
        return genlmsg_end(msg, hdr);
 
  nla_put_failure:
index 3c24eb97e9d7f0eaf60cff02f2372967f29e5284..6a6181a673ca07a378a4b524f88249de78b661e4 100644 (file)
@@ -821,6 +821,7 @@ 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:
@@ -831,7 +832,7 @@ static int cfg80211_wext_giwfreq(struct net_device *dev,
                if (!rdev->ops->get_channel)
                        return -EINVAL;
 
-               chan = rdev->ops->get_channel(wdev->wiphy);
+               chan = rdev->ops->get_channel(wdev->wiphy, &channel_type);
                if (!chan)
                        return -EINVAL;
                freq->m = chan->center_freq;