diff options
Diffstat (limited to 'net/ieee80211/softmac/ieee80211softmac_assoc.c')
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_assoc.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/net/ieee80211/softmac/ieee80211softmac_assoc.c b/net/ieee80211/softmac/ieee80211softmac_assoc.c index 44215ce64d4e..589f6d2c548a 100644 --- a/net/ieee80211/softmac/ieee80211softmac_assoc.c +++ b/net/ieee80211/softmac/ieee80211softmac_assoc.c | |||
@@ -96,7 +96,7 @@ ieee80211softmac_disassoc(struct ieee80211softmac_device *mac) | |||
96 | mac->associated = 0; | 96 | mac->associated = 0; |
97 | mac->associnfo.bssvalid = 0; | 97 | mac->associnfo.bssvalid = 0; |
98 | mac->associnfo.associating = 0; | 98 | mac->associnfo.associating = 0; |
99 | ieee80211softmac_init_txrates(mac); | 99 | ieee80211softmac_init_bss(mac); |
100 | ieee80211softmac_call_events_locked(mac, IEEE80211SOFTMAC_EVENT_DISASSOCIATED, NULL); | 100 | ieee80211softmac_call_events_locked(mac, IEEE80211SOFTMAC_EVENT_DISASSOCIATED, NULL); |
101 | spin_unlock_irqrestore(&mac->lock, flags); | 101 | spin_unlock_irqrestore(&mac->lock, flags); |
102 | } | 102 | } |
@@ -334,11 +334,19 @@ ieee80211softmac_associated(struct ieee80211softmac_device *mac, | |||
334 | struct ieee80211_assoc_response * resp, | 334 | struct ieee80211_assoc_response * resp, |
335 | struct ieee80211softmac_network *net) | 335 | struct ieee80211softmac_network *net) |
336 | { | 336 | { |
337 | u16 cap = le16_to_cpu(resp->capability); | ||
338 | u8 erp_value = net->erp_value; | ||
339 | |||
337 | mac->associnfo.associating = 0; | 340 | mac->associnfo.associating = 0; |
338 | mac->associnfo.supported_rates = net->supported_rates; | 341 | mac->bssinfo.supported_rates = net->supported_rates; |
339 | ieee80211softmac_recalc_txrates(mac); | 342 | ieee80211softmac_recalc_txrates(mac); |
340 | 343 | ||
341 | mac->associated = 1; | 344 | mac->associated = 1; |
345 | |||
346 | mac->associnfo.short_preamble_available = | ||
347 | (cap & WLAN_CAPABILITY_SHORT_PREAMBLE) != 0; | ||
348 | ieee80211softmac_process_erp(mac, erp_value); | ||
349 | |||
342 | if (mac->set_bssid_filter) | 350 | if (mac->set_bssid_filter) |
343 | mac->set_bssid_filter(mac->dev, net->bssid); | 351 | mac->set_bssid_filter(mac->dev, net->bssid); |
344 | memcpy(mac->ieee->bssid, net->bssid, ETH_ALEN); | 352 | memcpy(mac->ieee->bssid, net->bssid, ETH_ALEN); |
@@ -351,9 +359,9 @@ ieee80211softmac_associated(struct ieee80211softmac_device *mac, | |||
351 | int | 359 | int |
352 | ieee80211softmac_handle_assoc_response(struct net_device * dev, | 360 | ieee80211softmac_handle_assoc_response(struct net_device * dev, |
353 | struct ieee80211_assoc_response * resp, | 361 | struct ieee80211_assoc_response * resp, |
354 | struct ieee80211_network * _ieee80211_network_do_not_use) | 362 | struct ieee80211_network * _ieee80211_network) |
355 | { | 363 | { |
356 | /* NOTE: the network parameter has to be ignored by | 364 | /* NOTE: the network parameter has to be mostly ignored by |
357 | * this code because it is the ieee80211's pointer | 365 | * this code because it is the ieee80211's pointer |
358 | * to the struct, not ours (we made a copy) | 366 | * to the struct, not ours (we made a copy) |
359 | */ | 367 | */ |
@@ -385,6 +393,11 @@ ieee80211softmac_handle_assoc_response(struct net_device * dev, | |||
385 | /* now that we know it was for us, we can cancel the timeout */ | 393 | /* now that we know it was for us, we can cancel the timeout */ |
386 | cancel_delayed_work(&mac->associnfo.timeout); | 394 | cancel_delayed_work(&mac->associnfo.timeout); |
387 | 395 | ||
396 | /* if the association response included an ERP IE, update our saved | ||
397 | * copy */ | ||
398 | if (_ieee80211_network->flags & NETWORK_HAS_ERP_VALUE) | ||
399 | network->erp_value = _ieee80211_network->erp_value; | ||
400 | |||
388 | switch (status) { | 401 | switch (status) { |
389 | case 0: | 402 | case 0: |
390 | dprintk(KERN_INFO PFX "associated!\n"); | 403 | dprintk(KERN_INFO PFX "associated!\n"); |