diff options
Diffstat (limited to 'net/mac80211')
| -rw-r--r-- | net/mac80211/ieee80211_i.h | 2 | ||||
| -rw-r--r-- | net/mac80211/key.c | 7 | ||||
| -rw-r--r-- | net/mac80211/mesh_pathtbl.c | 2 | ||||
| -rw-r--r-- | net/mac80211/rc80211_minstrel_ht.c | 27 | ||||
| -rw-r--r-- | net/mac80211/rc80211_pid.h | 2 | ||||
| -rw-r--r-- | net/mac80211/rx.c | 7 | ||||
| -rw-r--r-- | net/mac80211/sta_info.c | 5 | ||||
| -rw-r--r-- | net/mac80211/sta_info.h | 2 |
8 files changed, 34 insertions, 20 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index a40401701424..c18396c248d7 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
| @@ -97,7 +97,7 @@ struct ieee80211_bss { | |||
| 97 | size_t supp_rates_len; | 97 | size_t supp_rates_len; |
| 98 | 98 | ||
| 99 | /* | 99 | /* |
| 100 | * During assocation, we save an ERP value from a probe response so | 100 | * During association, we save an ERP value from a probe response so |
| 101 | * that we can feed ERP info to the driver when handling the | 101 | * that we can feed ERP info to the driver when handling the |
| 102 | * association completes. these fields probably won't be up-to-date | 102 | * association completes. these fields probably won't be up-to-date |
| 103 | * otherwise, you probably don't want to use them. | 103 | * otherwise, you probably don't want to use them. |
diff --git a/net/mac80211/key.c b/net/mac80211/key.c index 8c02469b7176..af3c56482c80 100644 --- a/net/mac80211/key.c +++ b/net/mac80211/key.c | |||
| @@ -342,7 +342,7 @@ struct ieee80211_key *ieee80211_key_alloc(u32 cipher, int idx, size_t key_len, | |||
| 342 | if (IS_ERR(key->u.ccmp.tfm)) { | 342 | if (IS_ERR(key->u.ccmp.tfm)) { |
| 343 | err = PTR_ERR(key->u.ccmp.tfm); | 343 | err = PTR_ERR(key->u.ccmp.tfm); |
| 344 | kfree(key); | 344 | kfree(key); |
| 345 | key = ERR_PTR(err); | 345 | return ERR_PTR(err); |
| 346 | } | 346 | } |
| 347 | break; | 347 | break; |
| 348 | case WLAN_CIPHER_SUITE_AES_CMAC: | 348 | case WLAN_CIPHER_SUITE_AES_CMAC: |
| @@ -360,7 +360,7 @@ struct ieee80211_key *ieee80211_key_alloc(u32 cipher, int idx, size_t key_len, | |||
| 360 | if (IS_ERR(key->u.aes_cmac.tfm)) { | 360 | if (IS_ERR(key->u.aes_cmac.tfm)) { |
| 361 | err = PTR_ERR(key->u.aes_cmac.tfm); | 361 | err = PTR_ERR(key->u.aes_cmac.tfm); |
| 362 | kfree(key); | 362 | kfree(key); |
| 363 | key = ERR_PTR(err); | 363 | return ERR_PTR(err); |
| 364 | } | 364 | } |
| 365 | break; | 365 | break; |
| 366 | } | 366 | } |
| @@ -400,11 +400,12 @@ int ieee80211_key_link(struct ieee80211_key *key, | |||
| 400 | { | 400 | { |
| 401 | struct ieee80211_key *old_key; | 401 | struct ieee80211_key *old_key; |
| 402 | int idx, ret; | 402 | int idx, ret; |
| 403 | bool pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE; | 403 | bool pairwise; |
| 404 | 404 | ||
| 405 | BUG_ON(!sdata); | 405 | BUG_ON(!sdata); |
| 406 | BUG_ON(!key); | 406 | BUG_ON(!key); |
| 407 | 407 | ||
| 408 | pairwise = key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE; | ||
| 408 | idx = key->conf.keyidx; | 409 | idx = key->conf.keyidx; |
| 409 | key->local = sdata->local; | 410 | key->local = sdata->local; |
| 410 | key->sdata = sdata; | 411 | key->sdata = sdata; |
diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c index 8d65b47d9837..336ca9d0c5c4 100644 --- a/net/mac80211/mesh_pathtbl.c +++ b/net/mac80211/mesh_pathtbl.c | |||
| @@ -628,7 +628,7 @@ void mesh_path_discard_frame(struct sk_buff *skb, | |||
| 628 | * | 628 | * |
| 629 | * @mpath: mesh path whose queue has to be freed | 629 | * @mpath: mesh path whose queue has to be freed |
| 630 | * | 630 | * |
| 631 | * Locking: the function must me called withing a rcu_read_lock region | 631 | * Locking: the function must me called within a rcu_read_lock region |
| 632 | */ | 632 | */ |
| 633 | void mesh_path_flush_pending(struct mesh_path *mpath) | 633 | void mesh_path_flush_pending(struct mesh_path *mpath) |
| 634 | { | 634 | { |
diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c index 8212a8bebf06..c06aa3ac6b9d 100644 --- a/net/mac80211/rc80211_minstrel_ht.c +++ b/net/mac80211/rc80211_minstrel_ht.c | |||
| @@ -259,7 +259,7 @@ minstrel_ht_update_stats(struct minstrel_priv *mp, struct minstrel_ht_sta *mi) | |||
| 259 | } | 259 | } |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | /* try to sample up to half of the availble rates during each interval */ | 262 | /* try to sample up to half of the available rates during each interval */ |
| 263 | mi->sample_count *= 4; | 263 | mi->sample_count *= 4; |
| 264 | 264 | ||
| 265 | cur_prob = 0; | 265 | cur_prob = 0; |
| @@ -659,18 +659,14 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband, | |||
| 659 | struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs; | 659 | struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs; |
| 660 | struct ieee80211_local *local = hw_to_local(mp->hw); | 660 | struct ieee80211_local *local = hw_to_local(mp->hw); |
| 661 | u16 sta_cap = sta->ht_cap.cap; | 661 | u16 sta_cap = sta->ht_cap.cap; |
| 662 | int n_supported = 0; | ||
| 662 | int ack_dur; | 663 | int ack_dur; |
| 663 | int stbc; | 664 | int stbc; |
| 664 | int i; | 665 | int i; |
| 665 | 666 | ||
| 666 | /* fall back to the old minstrel for legacy stations */ | 667 | /* fall back to the old minstrel for legacy stations */ |
| 667 | if (!sta->ht_cap.ht_supported) { | 668 | if (!sta->ht_cap.ht_supported) |
| 668 | msp->is_ht = false; | 669 | goto use_legacy; |
| 669 | memset(&msp->legacy, 0, sizeof(msp->legacy)); | ||
| 670 | msp->legacy.r = msp->ratelist; | ||
| 671 | msp->legacy.sample_table = msp->sample_table; | ||
| 672 | return mac80211_minstrel.rate_init(priv, sband, sta, &msp->legacy); | ||
| 673 | } | ||
| 674 | 670 | ||
| 675 | BUILD_BUG_ON(ARRAY_SIZE(minstrel_mcs_groups) != | 671 | BUILD_BUG_ON(ARRAY_SIZE(minstrel_mcs_groups) != |
| 676 | MINSTREL_MAX_STREAMS * MINSTREL_STREAM_GROUPS); | 672 | MINSTREL_MAX_STREAMS * MINSTREL_STREAM_GROUPS); |
| @@ -725,7 +721,22 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband, | |||
| 725 | 721 | ||
| 726 | mi->groups[i].supported = | 722 | mi->groups[i].supported = |
| 727 | mcs->rx_mask[minstrel_mcs_groups[i].streams - 1]; | 723 | mcs->rx_mask[minstrel_mcs_groups[i].streams - 1]; |
| 724 | |||
| 725 | if (mi->groups[i].supported) | ||
| 726 | n_supported++; | ||
| 728 | } | 727 | } |
| 728 | |||
| 729 | if (!n_supported) | ||
| 730 | goto use_legacy; | ||
| 731 | |||
| 732 | return; | ||
| 733 | |||
| 734 | use_legacy: | ||
| 735 | msp->is_ht = false; | ||
| 736 | memset(&msp->legacy, 0, sizeof(msp->legacy)); | ||
| 737 | msp->legacy.r = msp->ratelist; | ||
| 738 | msp->legacy.sample_table = msp->sample_table; | ||
| 739 | return mac80211_minstrel.rate_init(priv, sband, sta, &msp->legacy); | ||
| 729 | } | 740 | } |
| 730 | 741 | ||
| 731 | static void | 742 | static void |
diff --git a/net/mac80211/rc80211_pid.h b/net/mac80211/rc80211_pid.h index 6510f8ee738e..19111c7bf454 100644 --- a/net/mac80211/rc80211_pid.h +++ b/net/mac80211/rc80211_pid.h | |||
| @@ -77,7 +77,7 @@ union rc_pid_event_data { | |||
| 77 | }; | 77 | }; |
| 78 | 78 | ||
| 79 | struct rc_pid_event { | 79 | struct rc_pid_event { |
| 80 | /* The time when the event occured */ | 80 | /* The time when the event occurred */ |
| 81 | unsigned long timestamp; | 81 | unsigned long timestamp; |
| 82 | 82 | ||
| 83 | /* Event ID number */ | 83 | /* Event ID number */ |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 5c1930ba8ebe..c5d4530d8284 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
| @@ -381,7 +381,7 @@ static void ieee80211_parse_qos(struct ieee80211_rx_data *rx) | |||
| 381 | * specs were sane enough this time around to require padding each A-MSDU | 381 | * specs were sane enough this time around to require padding each A-MSDU |
| 382 | * subframe to a length that is a multiple of four. | 382 | * subframe to a length that is a multiple of four. |
| 383 | * | 383 | * |
| 384 | * Padding like Atheros hardware adds which is inbetween the 802.11 header and | 384 | * Padding like Atheros hardware adds which is between the 802.11 header and |
| 385 | * the payload is not supported, the driver is required to move the 802.11 | 385 | * the payload is not supported, the driver is required to move the 802.11 |
| 386 | * header to be directly in front of the payload in that case. | 386 | * header to be directly in front of the payload in that case. |
| 387 | */ | 387 | */ |
| @@ -612,7 +612,8 @@ static void ieee80211_sta_reorder_release(struct ieee80211_hw *hw, | |||
| 612 | skipped++; | 612 | skipped++; |
| 613 | continue; | 613 | continue; |
| 614 | } | 614 | } |
| 615 | if (!time_after(jiffies, tid_agg_rx->reorder_time[j] + | 615 | if (skipped && |
| 616 | !time_after(jiffies, tid_agg_rx->reorder_time[j] + | ||
| 616 | HT_RX_REORDER_BUF_TIMEOUT)) | 617 | HT_RX_REORDER_BUF_TIMEOUT)) |
| 617 | goto set_release_timer; | 618 | goto set_release_timer; |
| 618 | 619 | ||
| @@ -2540,7 +2541,6 @@ static void ieee80211_rx_handlers(struct ieee80211_rx_data *rx) | |||
| 2540 | * same TID from the same station | 2541 | * same TID from the same station |
| 2541 | */ | 2542 | */ |
| 2542 | rx->skb = skb; | 2543 | rx->skb = skb; |
| 2543 | rx->flags = 0; | ||
| 2544 | 2544 | ||
| 2545 | CALL_RXH(ieee80211_rx_h_decrypt) | 2545 | CALL_RXH(ieee80211_rx_h_decrypt) |
| 2546 | CALL_RXH(ieee80211_rx_h_check_more_data) | 2546 | CALL_RXH(ieee80211_rx_h_check_more_data) |
| @@ -2611,6 +2611,7 @@ void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid) | |||
| 2611 | .sdata = sta->sdata, | 2611 | .sdata = sta->sdata, |
| 2612 | .local = sta->local, | 2612 | .local = sta->local, |
| 2613 | .queue = tid, | 2613 | .queue = tid, |
| 2614 | .flags = 0, | ||
| 2614 | }; | 2615 | }; |
| 2615 | struct tid_ampdu_rx *tid_agg_rx; | 2616 | struct tid_ampdu_rx *tid_agg_rx; |
| 2616 | 2617 | ||
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 5a11078827ab..13e8c30adf01 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c | |||
| @@ -47,9 +47,9 @@ | |||
| 47 | * Station entries are added by mac80211 when you establish a link with a | 47 | * Station entries are added by mac80211 when you establish a link with a |
| 48 | * peer. This means different things for the different type of interfaces | 48 | * peer. This means different things for the different type of interfaces |
| 49 | * we support. For a regular station this mean we add the AP sta when we | 49 | * we support. For a regular station this mean we add the AP sta when we |
| 50 | * receive an assocation response from the AP. For IBSS this occurs when | 50 | * receive an association response from the AP. For IBSS this occurs when |
| 51 | * get to know about a peer on the same IBSS. For WDS we add the sta for | 51 | * get to know about a peer on the same IBSS. For WDS we add the sta for |
| 52 | * the peer imediately upon device open. When using AP mode we add stations | 52 | * the peer immediately upon device open. When using AP mode we add stations |
| 53 | * for each respective station upon request from userspace through nl80211. | 53 | * for each respective station upon request from userspace through nl80211. |
| 54 | * | 54 | * |
| 55 | * In order to remove a STA info structure, various sta_info_destroy_*() | 55 | * In order to remove a STA info structure, various sta_info_destroy_*() |
| @@ -243,6 +243,7 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata, | |||
| 243 | memcpy(sta->sta.addr, addr, ETH_ALEN); | 243 | memcpy(sta->sta.addr, addr, ETH_ALEN); |
| 244 | sta->local = local; | 244 | sta->local = local; |
| 245 | sta->sdata = sdata; | 245 | sta->sdata = sdata; |
| 246 | sta->last_rx = jiffies; | ||
| 246 | 247 | ||
| 247 | ewma_init(&sta->avg_signal, 1024, 8); | 248 | ewma_init(&sta->avg_signal, 1024, 8); |
| 248 | 249 | ||
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index 57681149e37f..b2f95966c7f4 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h | |||
| @@ -173,7 +173,7 @@ struct sta_ampdu_mlme { | |||
| 173 | /** | 173 | /** |
| 174 | * enum plink_state - state of a mesh peer link finite state machine | 174 | * enum plink_state - state of a mesh peer link finite state machine |
| 175 | * | 175 | * |
| 176 | * @PLINK_LISTEN: initial state, considered the implicit state of non existant | 176 | * @PLINK_LISTEN: initial state, considered the implicit state of non existent |
| 177 | * mesh peer links | 177 | * mesh peer links |
| 178 | * @PLINK_OPN_SNT: mesh plink open frame has been sent to this mesh peer | 178 | * @PLINK_OPN_SNT: mesh plink open frame has been sent to this mesh peer |
| 179 | * @PLINK_OPN_RCVD: mesh plink open frame has been received from this mesh peer | 179 | * @PLINK_OPN_RCVD: mesh plink open frame has been received from this mesh peer |
