diff options
| -rw-r--r-- | include/net/regulatory.h | 2 | ||||
| -rw-r--r-- | net/mac80211/chan.c | 2 | ||||
| -rw-r--r-- | net/mac80211/debugfs_sta.c | 2 | ||||
| -rw-r--r-- | net/mac80211/iface.c | 4 | ||||
| -rw-r--r-- | net/mac80211/mesh_plink.c | 7 | ||||
| -rw-r--r-- | net/mac80211/mlme.c | 3 | ||||
| -rw-r--r-- | net/mac80211/sta_info.c | 7 |
7 files changed, 18 insertions, 9 deletions
diff --git a/include/net/regulatory.h b/include/net/regulatory.h index 259992444e80..dad7ab20a8cb 100644 --- a/include/net/regulatory.h +++ b/include/net/regulatory.h | |||
| @@ -167,7 +167,7 @@ struct ieee80211_reg_rule { | |||
| 167 | struct ieee80211_regdomain { | 167 | struct ieee80211_regdomain { |
| 168 | struct rcu_head rcu_head; | 168 | struct rcu_head rcu_head; |
| 169 | u32 n_reg_rules; | 169 | u32 n_reg_rules; |
| 170 | char alpha2[2]; | 170 | char alpha2[3]; |
| 171 | enum nl80211_dfs_regions dfs_region; | 171 | enum nl80211_dfs_regions dfs_region; |
| 172 | struct ieee80211_reg_rule reg_rules[]; | 172 | struct ieee80211_reg_rule reg_rules[]; |
| 173 | }; | 173 | }; |
diff --git a/net/mac80211/chan.c b/net/mac80211/chan.c index 0375009ddc0d..399ad82c997f 100644 --- a/net/mac80211/chan.c +++ b/net/mac80211/chan.c | |||
| @@ -541,6 +541,8 @@ static void ieee80211_recalc_chanctx_chantype(struct ieee80211_local *local, | |||
| 541 | continue; | 541 | continue; |
| 542 | if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf) | 542 | if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf) |
| 543 | continue; | 543 | continue; |
| 544 | if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | ||
| 545 | continue; | ||
| 544 | 546 | ||
| 545 | if (!compat) | 547 | if (!compat) |
| 546 | compat = &sdata->vif.bss_conf.chandef; | 548 | compat = &sdata->vif.bss_conf.chandef; |
diff --git a/net/mac80211/debugfs_sta.c b/net/mac80211/debugfs_sta.c index 3db96648b45a..86173c0de40e 100644 --- a/net/mac80211/debugfs_sta.c +++ b/net/mac80211/debugfs_sta.c | |||
| @@ -167,7 +167,7 @@ static ssize_t sta_agg_status_read(struct file *file, char __user *userbuf, | |||
| 167 | p += scnprintf(p, sizeof(buf) + buf - p, "next dialog_token: %#02x\n", | 167 | p += scnprintf(p, sizeof(buf) + buf - p, "next dialog_token: %#02x\n", |
| 168 | sta->ampdu_mlme.dialog_token_allocator + 1); | 168 | sta->ampdu_mlme.dialog_token_allocator + 1); |
| 169 | p += scnprintf(p, sizeof(buf) + buf - p, | 169 | p += scnprintf(p, sizeof(buf) + buf - p, |
| 170 | "TID\t\tRX active\tDTKN\tSSN\t\tTX\tDTKN\tpending\n"); | 170 | "TID\t\tRX\tDTKN\tSSN\t\tTX\tDTKN\tpending\n"); |
| 171 | 171 | ||
| 172 | for (i = 0; i < IEEE80211_NUM_TIDS; i++) { | 172 | for (i = 0; i < IEEE80211_NUM_TIDS; i++) { |
| 173 | tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[i]); | 173 | tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[i]); |
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 01eede7406a5..f75e5f132c5a 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
| @@ -1175,8 +1175,8 @@ static void ieee80211_iface_work(struct work_struct *work) | |||
| 1175 | if (sta) { | 1175 | if (sta) { |
| 1176 | u16 last_seq; | 1176 | u16 last_seq; |
| 1177 | 1177 | ||
| 1178 | last_seq = le16_to_cpu( | 1178 | last_seq = IEEE80211_SEQ_TO_SN(le16_to_cpu( |
| 1179 | sta->last_seq_ctrl[rx_agg->tid]); | 1179 | sta->last_seq_ctrl[rx_agg->tid])); |
| 1180 | 1180 | ||
| 1181 | __ieee80211_start_rx_ba_session(sta, | 1181 | __ieee80211_start_rx_ba_session(sta, |
| 1182 | 0, 0, | 1182 | 0, 0, |
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c index 63b874101b27..c47194d27149 100644 --- a/net/mac80211/mesh_plink.c +++ b/net/mac80211/mesh_plink.c | |||
| @@ -959,7 +959,8 @@ mesh_plink_get_event(struct ieee80211_sub_if_data *sdata, | |||
| 959 | if (!matches_local) | 959 | if (!matches_local) |
| 960 | event = CNF_RJCT; | 960 | event = CNF_RJCT; |
| 961 | if (!mesh_plink_free_count(sdata) || | 961 | if (!mesh_plink_free_count(sdata) || |
| 962 | (sta->llid != llid || sta->plid != plid)) | 962 | sta->llid != llid || |
| 963 | (sta->plid && sta->plid != plid)) | ||
| 963 | event = CNF_IGNR; | 964 | event = CNF_IGNR; |
| 964 | else | 965 | else |
| 965 | event = CNF_ACPT; | 966 | event = CNF_ACPT; |
| @@ -1080,6 +1081,10 @@ mesh_process_plink_frame(struct ieee80211_sub_if_data *sdata, | |||
| 1080 | goto unlock_rcu; | 1081 | goto unlock_rcu; |
| 1081 | } | 1082 | } |
| 1082 | 1083 | ||
| 1084 | /* 802.11-2012 13.3.7.2 - update plid on CNF if not set */ | ||
| 1085 | if (!sta->plid && event == CNF_ACPT) | ||
| 1086 | sta->plid = plid; | ||
| 1087 | |||
| 1083 | changed |= mesh_plink_fsm(sdata, sta, event); | 1088 | changed |= mesh_plink_fsm(sdata, sta, event); |
| 1084 | 1089 | ||
| 1085 | unlock_rcu: | 1090 | unlock_rcu: |
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 31a8afaf7332..b82a12a9f0f1 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
| @@ -4376,8 +4376,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata, | |||
| 4376 | rcu_read_unlock(); | 4376 | rcu_read_unlock(); |
| 4377 | 4377 | ||
| 4378 | if (bss->wmm_used && bss->uapsd_supported && | 4378 | if (bss->wmm_used && bss->uapsd_supported && |
| 4379 | (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD) && | 4379 | (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD)) { |
| 4380 | sdata->wmm_acm != 0xff) { | ||
| 4381 | assoc_data->uapsd = true; | 4380 | assoc_data->uapsd = true; |
| 4382 | ifmgd->flags |= IEEE80211_STA_UAPSD_ENABLED; | 4381 | ifmgd->flags |= IEEE80211_STA_UAPSD_ENABLED; |
| 4383 | } else { | 4382 | } else { |
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index c6ee2139fbc5..441875f03750 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c | |||
| @@ -1094,8 +1094,11 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta) | |||
| 1094 | unsigned long flags; | 1094 | unsigned long flags; |
| 1095 | struct ps_data *ps; | 1095 | struct ps_data *ps; |
| 1096 | 1096 | ||
| 1097 | if (sdata->vif.type == NL80211_IFTYPE_AP || | 1097 | if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) |
| 1098 | sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | 1098 | sdata = container_of(sdata->bss, struct ieee80211_sub_if_data, |
| 1099 | u.ap); | ||
| 1100 | |||
| 1101 | if (sdata->vif.type == NL80211_IFTYPE_AP) | ||
| 1099 | ps = &sdata->bss->ps; | 1102 | ps = &sdata->bss->ps; |
| 1100 | else if (ieee80211_vif_is_mesh(&sdata->vif)) | 1103 | else if (ieee80211_vif_is_mesh(&sdata->vif)) |
| 1101 | ps = &sdata->u.mesh.ps; | 1104 | ps = &sdata->u.mesh.ps; |
