Loading net/mac80211/rx.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -3056,6 +3056,9 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx, case NL80211_IFTYPE_ADHOC: case NL80211_IFTYPE_ADHOC: if (!bssid) if (!bssid) return 0; return 0; if (ether_addr_equal(sdata->vif.addr, hdr->addr2) || ether_addr_equal(sdata->u.ibss.bssid, hdr->addr2)) return 0; if (ieee80211_is_beacon(hdr->frame_control)) { if (ieee80211_is_beacon(hdr->frame_control)) { return 1; return 1; } else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) { } else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) { Loading net/mac80211/util.c +1 −4 Original line number Original line Diff line number Diff line Loading @@ -2103,7 +2103,7 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata, { { struct ieee80211_local *local = sdata->local; struct ieee80211_local *local = sdata->local; struct ieee80211_supported_band *sband; struct ieee80211_supported_band *sband; int rate, skip, shift; int rate, shift; u8 i, exrates, *pos; u8 i, exrates, *pos; u32 basic_rates = sdata->vif.bss_conf.basic_rates; u32 basic_rates = sdata->vif.bss_conf.basic_rates; u32 rate_flags; u32 rate_flags; Loading Loading @@ -2131,14 +2131,11 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata, pos = skb_put(skb, exrates + 2); pos = skb_put(skb, exrates + 2); *pos++ = WLAN_EID_EXT_SUPP_RATES; *pos++ = WLAN_EID_EXT_SUPP_RATES; *pos++ = exrates; *pos++ = exrates; skip = 0; for (i = 8; i < sband->n_bitrates; i++) { for (i = 8; i < sband->n_bitrates; i++) { u8 basic = 0; u8 basic = 0; if ((rate_flags & sband->bitrates[i].flags) if ((rate_flags & sband->bitrates[i].flags) != rate_flags) != rate_flags) continue; continue; if (skip++ < 8) continue; if (need_basic && basic_rates & BIT(i)) if (need_basic && basic_rates & BIT(i)) basic = 0x80; basic = 0x80; rate = DIV_ROUND_UP(sband->bitrates[i].bitrate, rate = DIV_ROUND_UP(sband->bitrates[i].bitrate, Loading net/wireless/core.c +13 −8 Original line number Original line Diff line number Diff line Loading @@ -566,18 +566,13 @@ int wiphy_register(struct wiphy *wiphy) /* check and set up bitrates */ /* check and set up bitrates */ ieee80211_set_bitrate_flags(wiphy); ieee80211_set_bitrate_flags(wiphy); rtnl_lock(); res = device_add(&rdev->wiphy.dev); res = device_add(&rdev->wiphy.dev); if (res) return res; res = rfkill_register(rdev->rfkill); if (res) { if (res) { device_del(&rdev->wiphy.dev); rtnl_unlock(); return res; return res; } } rtnl_lock(); /* set up regulatory info */ /* set up regulatory info */ wiphy_regulatory_register(wiphy); wiphy_regulatory_register(wiphy); Loading Loading @@ -606,6 +601,15 @@ int wiphy_register(struct wiphy *wiphy) rdev->wiphy.registered = true; rdev->wiphy.registered = true; rtnl_unlock(); rtnl_unlock(); res = rfkill_register(rdev->rfkill); if (res) { rfkill_destroy(rdev->rfkill); rdev->rfkill = NULL; wiphy_unregister(&rdev->wiphy); return res; } return 0; return 0; } } EXPORT_SYMBOL(wiphy_register); EXPORT_SYMBOL(wiphy_register); Loading Loading @@ -640,6 +644,7 @@ void wiphy_unregister(struct wiphy *wiphy) rtnl_unlock(); rtnl_unlock(); __count == 0; })); __count == 0; })); if (rdev->rfkill) rfkill_unregister(rdev->rfkill); rfkill_unregister(rdev->rfkill); rtnl_lock(); rtnl_lock(); Loading net/wireless/ibss.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -263,6 +263,8 @@ int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev, if (chan->flags & IEEE80211_CHAN_DISABLED) if (chan->flags & IEEE80211_CHAN_DISABLED) continue; continue; wdev->wext.ibss.chandef.chan = chan; wdev->wext.ibss.chandef.chan = chan; wdev->wext.ibss.chandef.center_freq1 = chan->center_freq; break; break; } } Loading Loading @@ -347,6 +349,7 @@ int cfg80211_ibss_wext_siwfreq(struct net_device *dev, if (chan) { if (chan) { wdev->wext.ibss.chandef.chan = chan; wdev->wext.ibss.chandef.chan = chan; wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT; wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT; wdev->wext.ibss.chandef.center_freq1 = freq; wdev->wext.ibss.channel_fixed = true; wdev->wext.ibss.channel_fixed = true; } else { } else { /* cfg80211_ibss_wext_join will pick one if needed */ /* cfg80211_ibss_wext_join will pick one if needed */ Loading net/wireless/nl80211.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -2421,7 +2421,7 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info) change = true; change = true; } } if (flags && (*flags & NL80211_MNTR_FLAG_ACTIVE) && if (flags && (*flags & MONITOR_FLAG_ACTIVE) && !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) return -EOPNOTSUPP; return -EOPNOTSUPP; Loading Loading @@ -2483,7 +2483,7 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info) info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL, info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL, &flags); &flags); if (!err && (flags & NL80211_MNTR_FLAG_ACTIVE) && if (!err && (flags & MONITOR_FLAG_ACTIVE) && !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) return -EOPNOTSUPP; return -EOPNOTSUPP; Loading Loading
net/mac80211/rx.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -3056,6 +3056,9 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx, case NL80211_IFTYPE_ADHOC: case NL80211_IFTYPE_ADHOC: if (!bssid) if (!bssid) return 0; return 0; if (ether_addr_equal(sdata->vif.addr, hdr->addr2) || ether_addr_equal(sdata->u.ibss.bssid, hdr->addr2)) return 0; if (ieee80211_is_beacon(hdr->frame_control)) { if (ieee80211_is_beacon(hdr->frame_control)) { return 1; return 1; } else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) { } else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) { Loading
net/mac80211/util.c +1 −4 Original line number Original line Diff line number Diff line Loading @@ -2103,7 +2103,7 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata, { { struct ieee80211_local *local = sdata->local; struct ieee80211_local *local = sdata->local; struct ieee80211_supported_band *sband; struct ieee80211_supported_band *sband; int rate, skip, shift; int rate, shift; u8 i, exrates, *pos; u8 i, exrates, *pos; u32 basic_rates = sdata->vif.bss_conf.basic_rates; u32 basic_rates = sdata->vif.bss_conf.basic_rates; u32 rate_flags; u32 rate_flags; Loading Loading @@ -2131,14 +2131,11 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata, pos = skb_put(skb, exrates + 2); pos = skb_put(skb, exrates + 2); *pos++ = WLAN_EID_EXT_SUPP_RATES; *pos++ = WLAN_EID_EXT_SUPP_RATES; *pos++ = exrates; *pos++ = exrates; skip = 0; for (i = 8; i < sband->n_bitrates; i++) { for (i = 8; i < sband->n_bitrates; i++) { u8 basic = 0; u8 basic = 0; if ((rate_flags & sband->bitrates[i].flags) if ((rate_flags & sband->bitrates[i].flags) != rate_flags) != rate_flags) continue; continue; if (skip++ < 8) continue; if (need_basic && basic_rates & BIT(i)) if (need_basic && basic_rates & BIT(i)) basic = 0x80; basic = 0x80; rate = DIV_ROUND_UP(sband->bitrates[i].bitrate, rate = DIV_ROUND_UP(sband->bitrates[i].bitrate, Loading
net/wireless/core.c +13 −8 Original line number Original line Diff line number Diff line Loading @@ -566,18 +566,13 @@ int wiphy_register(struct wiphy *wiphy) /* check and set up bitrates */ /* check and set up bitrates */ ieee80211_set_bitrate_flags(wiphy); ieee80211_set_bitrate_flags(wiphy); rtnl_lock(); res = device_add(&rdev->wiphy.dev); res = device_add(&rdev->wiphy.dev); if (res) return res; res = rfkill_register(rdev->rfkill); if (res) { if (res) { device_del(&rdev->wiphy.dev); rtnl_unlock(); return res; return res; } } rtnl_lock(); /* set up regulatory info */ /* set up regulatory info */ wiphy_regulatory_register(wiphy); wiphy_regulatory_register(wiphy); Loading Loading @@ -606,6 +601,15 @@ int wiphy_register(struct wiphy *wiphy) rdev->wiphy.registered = true; rdev->wiphy.registered = true; rtnl_unlock(); rtnl_unlock(); res = rfkill_register(rdev->rfkill); if (res) { rfkill_destroy(rdev->rfkill); rdev->rfkill = NULL; wiphy_unregister(&rdev->wiphy); return res; } return 0; return 0; } } EXPORT_SYMBOL(wiphy_register); EXPORT_SYMBOL(wiphy_register); Loading Loading @@ -640,6 +644,7 @@ void wiphy_unregister(struct wiphy *wiphy) rtnl_unlock(); rtnl_unlock(); __count == 0; })); __count == 0; })); if (rdev->rfkill) rfkill_unregister(rdev->rfkill); rfkill_unregister(rdev->rfkill); rtnl_lock(); rtnl_lock(); Loading
net/wireless/ibss.c +3 −0 Original line number Original line Diff line number Diff line Loading @@ -263,6 +263,8 @@ int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev, if (chan->flags & IEEE80211_CHAN_DISABLED) if (chan->flags & IEEE80211_CHAN_DISABLED) continue; continue; wdev->wext.ibss.chandef.chan = chan; wdev->wext.ibss.chandef.chan = chan; wdev->wext.ibss.chandef.center_freq1 = chan->center_freq; break; break; } } Loading Loading @@ -347,6 +349,7 @@ int cfg80211_ibss_wext_siwfreq(struct net_device *dev, if (chan) { if (chan) { wdev->wext.ibss.chandef.chan = chan; wdev->wext.ibss.chandef.chan = chan; wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT; wdev->wext.ibss.chandef.width = NL80211_CHAN_WIDTH_20_NOHT; wdev->wext.ibss.chandef.center_freq1 = freq; wdev->wext.ibss.channel_fixed = true; wdev->wext.ibss.channel_fixed = true; } else { } else { /* cfg80211_ibss_wext_join will pick one if needed */ /* cfg80211_ibss_wext_join will pick one if needed */ Loading
net/wireless/nl80211.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -2421,7 +2421,7 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info) change = true; change = true; } } if (flags && (*flags & NL80211_MNTR_FLAG_ACTIVE) && if (flags && (*flags & MONITOR_FLAG_ACTIVE) && !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) return -EOPNOTSUPP; return -EOPNOTSUPP; Loading Loading @@ -2483,7 +2483,7 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info) info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL, info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL, &flags); &flags); if (!err && (flags & NL80211_MNTR_FLAG_ACTIVE) && if (!err && (flags & MONITOR_FLAG_ACTIVE) && !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) return -EOPNOTSUPP; return -EOPNOTSUPP; Loading