diff options
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/driver-ops.h | 2 | ||||
-rw-r--r-- | net/mac80211/iface.c | 7 | ||||
-rw-r--r-- | net/mac80211/main.c | 20 | ||||
-rw-r--r-- | net/mac80211/mesh.c | 3 | ||||
-rw-r--r-- | net/mac80211/pm.c | 3 |
5 files changed, 15 insertions, 20 deletions
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index cccc486ae3d0..0c07f94c5378 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h | |||
@@ -212,6 +212,8 @@ static inline void drv_bss_info_changed(struct ieee80211_local *local, | |||
212 | sdata->vif.type != NL80211_IFTYPE_AP && | 212 | sdata->vif.type != NL80211_IFTYPE_AP && |
213 | sdata->vif.type != NL80211_IFTYPE_ADHOC && | 213 | sdata->vif.type != NL80211_IFTYPE_ADHOC && |
214 | sdata->vif.type != NL80211_IFTYPE_MESH_POINT); | 214 | sdata->vif.type != NL80211_IFTYPE_MESH_POINT); |
215 | WARN_ON_ONCE(sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE && | ||
216 | changed & ~BSS_CHANGED_IDLE); | ||
215 | 217 | ||
216 | check_sdata_in_driver(sdata); | 218 | check_sdata_in_driver(sdata); |
217 | 219 | ||
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 1ab7d8e57d39..06fac2991d40 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -1227,6 +1227,7 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata, | |||
1227 | case NL80211_IFTYPE_AP: | 1227 | case NL80211_IFTYPE_AP: |
1228 | skb_queue_head_init(&sdata->u.ap.ps.bc_buf); | 1228 | skb_queue_head_init(&sdata->u.ap.ps.bc_buf); |
1229 | INIT_LIST_HEAD(&sdata->u.ap.vlans); | 1229 | INIT_LIST_HEAD(&sdata->u.ap.vlans); |
1230 | sdata->vif.bss_conf.bssid = sdata->vif.addr; | ||
1230 | break; | 1231 | break; |
1231 | case NL80211_IFTYPE_P2P_CLIENT: | 1232 | case NL80211_IFTYPE_P2P_CLIENT: |
1232 | type = NL80211_IFTYPE_STATION; | 1233 | type = NL80211_IFTYPE_STATION; |
@@ -1234,9 +1235,11 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata, | |||
1234 | sdata->vif.p2p = true; | 1235 | sdata->vif.p2p = true; |
1235 | /* fall through */ | 1236 | /* fall through */ |
1236 | case NL80211_IFTYPE_STATION: | 1237 | case NL80211_IFTYPE_STATION: |
1238 | sdata->vif.bss_conf.bssid = sdata->u.mgd.bssid; | ||
1237 | ieee80211_sta_setup_sdata(sdata); | 1239 | ieee80211_sta_setup_sdata(sdata); |
1238 | break; | 1240 | break; |
1239 | case NL80211_IFTYPE_ADHOC: | 1241 | case NL80211_IFTYPE_ADHOC: |
1242 | sdata->vif.bss_conf.bssid = sdata->u.ibss.bssid; | ||
1240 | ieee80211_ibss_setup_sdata(sdata); | 1243 | ieee80211_ibss_setup_sdata(sdata); |
1241 | break; | 1244 | break; |
1242 | case NL80211_IFTYPE_MESH_POINT: | 1245 | case NL80211_IFTYPE_MESH_POINT: |
@@ -1250,8 +1253,12 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata, | |||
1250 | MONITOR_FLAG_OTHER_BSS; | 1253 | MONITOR_FLAG_OTHER_BSS; |
1251 | break; | 1254 | break; |
1252 | case NL80211_IFTYPE_WDS: | 1255 | case NL80211_IFTYPE_WDS: |
1256 | sdata->vif.bss_conf.bssid = NULL; | ||
1257 | break; | ||
1253 | case NL80211_IFTYPE_AP_VLAN: | 1258 | case NL80211_IFTYPE_AP_VLAN: |
1259 | break; | ||
1254 | case NL80211_IFTYPE_P2P_DEVICE: | 1260 | case NL80211_IFTYPE_P2P_DEVICE: |
1261 | sdata->vif.bss_conf.bssid = sdata->vif.addr; | ||
1255 | break; | 1262 | break; |
1256 | case NL80211_IFTYPE_UNSPECIFIED: | 1263 | case NL80211_IFTYPE_UNSPECIFIED: |
1257 | case NUM_NL80211_IFTYPES: | 1264 | case NUM_NL80211_IFTYPES: |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index b719a16eabde..e6514f240fce 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -207,30 +207,10 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata, | |||
207 | u32 changed) | 207 | u32 changed) |
208 | { | 208 | { |
209 | struct ieee80211_local *local = sdata->local; | 209 | struct ieee80211_local *local = sdata->local; |
210 | static const u8 zero[ETH_ALEN] = { 0 }; | ||
211 | 210 | ||
212 | if (!changed) | 211 | if (!changed) |
213 | return; | 212 | return; |
214 | 213 | ||
215 | if (sdata->vif.type == NL80211_IFTYPE_STATION) { | ||
216 | sdata->vif.bss_conf.bssid = sdata->u.mgd.bssid; | ||
217 | } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) | ||
218 | sdata->vif.bss_conf.bssid = sdata->u.ibss.bssid; | ||
219 | else if (sdata->vif.type == NL80211_IFTYPE_AP) | ||
220 | sdata->vif.bss_conf.bssid = sdata->vif.addr; | ||
221 | else if (sdata->vif.type == NL80211_IFTYPE_WDS) | ||
222 | sdata->vif.bss_conf.bssid = NULL; | ||
223 | else if (ieee80211_vif_is_mesh(&sdata->vif)) { | ||
224 | sdata->vif.bss_conf.bssid = zero; | ||
225 | } else if (sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) { | ||
226 | sdata->vif.bss_conf.bssid = sdata->vif.addr; | ||
227 | WARN_ONCE(changed & ~(BSS_CHANGED_IDLE), | ||
228 | "P2P Device BSS changed %#x", changed); | ||
229 | } else { | ||
230 | WARN_ON(1); | ||
231 | return; | ||
232 | } | ||
233 | |||
234 | drv_bss_info_changed(local, sdata, &sdata->vif.bss_conf, changed); | 214 | drv_bss_info_changed(local, sdata, &sdata->vif.bss_conf, changed); |
235 | } | 215 | } |
236 | 216 | ||
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index fcfa7ef9af98..245885841c8d 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c | |||
@@ -810,6 +810,7 @@ void ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local) | |||
810 | void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) | 810 | void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) |
811 | { | 811 | { |
812 | struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; | 812 | struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; |
813 | static u8 zero_addr[ETH_ALEN] = {}; | ||
813 | 814 | ||
814 | setup_timer(&ifmsh->housekeeping_timer, | 815 | setup_timer(&ifmsh->housekeeping_timer, |
815 | ieee80211_mesh_housekeeping_timer, | 816 | ieee80211_mesh_housekeeping_timer, |
@@ -835,4 +836,6 @@ void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) | |||
835 | INIT_LIST_HEAD(&ifmsh->preq_queue.list); | 836 | INIT_LIST_HEAD(&ifmsh->preq_queue.list); |
836 | spin_lock_init(&ifmsh->mesh_preq_queue_lock); | 837 | spin_lock_init(&ifmsh->mesh_preq_queue_lock); |
837 | spin_lock_init(&ifmsh->sync_offset_lock); | 838 | spin_lock_init(&ifmsh->sync_offset_lock); |
839 | |||
840 | sdata->vif.bss_conf.bssid = zero_addr; | ||
838 | } | 841 | } |
diff --git a/net/mac80211/pm.c b/net/mac80211/pm.c index 8a67d7e982f7..f81fd30581d9 100644 --- a/net/mac80211/pm.c +++ b/net/mac80211/pm.c | |||
@@ -121,6 +121,7 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) | |||
121 | 121 | ||
122 | /* remove all interfaces */ | 122 | /* remove all interfaces */ |
123 | list_for_each_entry(sdata, &local->interfaces, list) { | 123 | list_for_each_entry(sdata, &local->interfaces, list) { |
124 | static u8 zero_addr[ETH_ALEN] = {}; | ||
124 | u32 changed = 0; | 125 | u32 changed = 0; |
125 | 126 | ||
126 | if (!ieee80211_sdata_running(sdata)) | 127 | if (!ieee80211_sdata_running(sdata)) |
@@ -152,6 +153,8 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan) | |||
152 | sdata->suspend_bss_conf = sdata->vif.bss_conf; | 153 | sdata->suspend_bss_conf = sdata->vif.bss_conf; |
153 | memset(&sdata->vif.bss_conf, 0, sizeof(sdata->vif.bss_conf)); | 154 | memset(&sdata->vif.bss_conf, 0, sizeof(sdata->vif.bss_conf)); |
154 | sdata->vif.bss_conf.idle = true; | 155 | sdata->vif.bss_conf.idle = true; |
156 | if (sdata->suspend_bss_conf.bssid) | ||
157 | sdata->vif.bss_conf.bssid = zero_addr; | ||
155 | 158 | ||
156 | /* disable beaconing or remove association */ | 159 | /* disable beaconing or remove association */ |
157 | ieee80211_bss_info_change_notify(sdata, changed); | 160 | ieee80211_bss_info_change_notify(sdata, changed); |