--- a/net/wireless/core.h +++ b/net/wireless/core.h @@ -76,6 +76,7 @@ struct cfg80211_registered_device { /* current channel */ struct ieee80211_channel *channel; + enum nl80211_channel_type channel_type; /* must be last because of the way we do wiphy_priv(), * and it should at least be aligned to NETDEV_ALIGN */ --- a/net/wireless/chan.c +++ b/net/wireless/chan.c @@ -97,6 +97,7 @@ int rdev_set_freq(struct cfg80211_regist return result; rdev->channel = chan; + rdev->channel_type = channel_type; return 0; } --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -886,6 +886,11 @@ static int nl80211_send_iface(struct sk_ NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); NLA_PUT_STRING(msg, NL80211_ATTR_IFNAME, dev->name); NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, dev->ieee80211_ptr->iftype); + if (rdev->channel) { + NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, rdev->channel->center_freq); + NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, rdev->channel_type); + } + NLA_PUT_U32(msg, NL80211_ATTR_GENERATION, rdev->devlist_generation ^