Message ID | 1607312195-3583-3-git-send-email-wgong@codeaurora.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 22df5e1bec25e8b321165b4707192fefbe9e0ba1 |
Delegated to: | Kalle Valo |
Headers | show |
Series | mac80211/ath10k: save ssid info for STATION mode | expand |
Wen Gong <wgong@codeaurora.org> wrote: > When connect to an AP with WPA mode, ath10k need to set need_ptk_4_way to > firmware in WMI_PEER_ASSOC_CMD, then the data path is disallow in > firmware, it will be allowed untill firmware finish the 4 way handshake. > > It failed with a test case with below steps: > 1. configure AP with WPA mode with ssid1 SimpleConnect_a_orbvt_ch1, > bssid1 and channel 1. > 2. connect to ssid1 and ping success. > 3. wait 10 seconds which is less than > IEEE80211_SCAN_RESULT_EXPIRE(30 seconds). > 4. configure AP with OPEN mode with ssid2 SimpleConnect_b_z3a00_ch1, > but use same bssid1 and channel 1 of step 1. > 5. disconnect ssid1. > 6. connect to ssid2 and ping fail. > > Fail reason: > When run step 6, ath10k_peer_assoc_h_crypto() called cfg80211_get_bss() > with bssid and chan info, but ssid1 and ssid2 have the same bssid and > channel, then there have 2 entry for ssid1 and ssid2 in cfg80211. The > ssid1's order is before ssid2 in bss_list, and ssid1's age is less than > the expire time which is IEEE80211_SCAN_RESULT_EXPIRE(30 seconds). Then > ssid1's entry is selected and ath10k_peer_assoc_h_crypto() parsed it and > get the rsnie and then need_ptk_4_way is set to firmware, so data path > is disallowed and it will not receive 4 way handshake for OPEN mode, > so ping fail in step 6. > > This patch is to pass the ssid info to cfg80211_get_bss() as same as > cfg80211_mlme_assoc() and cfg80211_mlme_auth(), then it will find the > correct bss entry in above test case, then case success. > > For AP mode, the ssid info is filled in ieee80211_start_ap(), for STATION > mode, it is filled in ieee80211_mgd_assoc(). Tested for both AP/STATION > mode with QCA6174 hw3.2 PCI, it is success start/connect/ping for > WPA/OPEN mode. > > Tested-on: QCA6174 hw3.2 PCI WLAN.RM.4.4.1-00110-QCARMSWP-1 > > Signed-off-by: Wen Gong <wgong@codeaurora.org> > Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Patch applied to ath-next branch of ath.git, thanks. 22df5e1bec25 ath10k: pass the ssid info to get the correct bss entity
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index 82b4bf5ba612..67cb2efc72d9 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -2177,7 +2177,8 @@ static void ath10k_peer_assoc_h_crypto(struct ath10k *ar, if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) return; - bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid, NULL, 0, + bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid, + info->ssid_len ? info->ssid : NULL, info->ssid_len, IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY); if (bss) { const struct cfg80211_bss_ies *ies;
When connect to an AP with WPA mode, ath10k need to set need_ptk_4_way to firmware in WMI_PEER_ASSOC_CMD, then the data path is disallow in firmware, it will be allowed untill firmware finish the 4 way handshake. It failed with a test case with below steps: 1. configure AP with WPA mode with ssid1 SimpleConnect_a_orbvt_ch1, bssid1 and channel 1. 2. connect to ssid1 and ping success. 3. wait 10 seconds which is less than IEEE80211_SCAN_RESULT_EXPIRE(30 seconds). 4. configure AP with OPEN mode with ssid2 SimpleConnect_b_z3a00_ch1, but use same bssid1 and channel 1 of step 1. 5. disconnect ssid1. 6. connect to ssid2 and ping fail. Fail reason: When run step 6, ath10k_peer_assoc_h_crypto() called cfg80211_get_bss() with bssid and chan info, but ssid1 and ssid2 have the same bssid and channel, then there have 2 entry for ssid1 and ssid2 in cfg80211. The ssid1's order is before ssid2 in bss_list, and ssid1's age is less than the expire time which is IEEE80211_SCAN_RESULT_EXPIRE(30 seconds). Then ssid1's entry is selected and ath10k_peer_assoc_h_crypto() parsed it and get the rsnie and then need_ptk_4_way is set to firmware, so data path is disallowed and it will not receive 4 way handshake for OPEN mode, so ping fail in step 6. This patch is to pass the ssid info to cfg80211_get_bss() as same as cfg80211_mlme_assoc() and cfg80211_mlme_auth(), then it will find the correct bss entry in above test case, then case success. For AP mode, the ssid info is filled in ieee80211_start_ap(), for STATION mode, it is filled in ieee80211_mgd_assoc(). Tested for both AP/STATION mode with QCA6174 hw3.2 PCI, it is success start/connect/ping for WPA/OPEN mode. Tested-on: QCA6174 hw3.2 PCI WLAN.RM.4.4.1-00110-QCARMSWP-1 Signed-off-by: Wen Gong <wgong@codeaurora.org> --- drivers/net/wireless/ath/ath10k/mac.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)