qcacmn: Bring Up STA without dissociation when AP switches to DFS Channel
AP is configured to operate in Channel 100(HT80), and Zero Wait DFS is enabled. Once PreCAC is complete on DFS Channels,inject radar in Channel 100 and AP moves to another DFS channel 116 and beacons immediately but station associated to AP still does a scan again. When the station receives the Channel Switch Announcement from AP, it dissociates from the AP and scans again. Maximum Switch time Information Element can be used by the Station to to know if the AP has done PreCAC on target channel. Maximum Switch Time IE is part of AP's beacon and is the sum of CAC timeout on the target channel and 1 beacon interval. If PreCAC is done on target channel, the CAC timeout is zero and Maximum Switch time IE is equal to 1 beacon interval. This element is sent to Station along with Channel Switch Announcement. The Station receives the maximum channel switch time element. If the value of maximum channel switch time element is less then or equal to beacon interval, the station associates with the AP seamlessly without dissociation. If the value of the Maximum Channel Switch Time IE is greater than 1 beacon interval, then, the Station has to dissociate from the AP since, ZeroCAC has not been done by the AP. Change-Id: I0301a68c1731cc268b9a6900258261034476446b CRs-Fixed: 2330817
Cette révision appartient à :

révisé par
nshrivas

Parent
268579c204
révision
738320eef9
@@ -127,6 +127,7 @@ struct element_info {
|
||||
* @ds_param: pointer to ds params
|
||||
* @csa: pointer to csa ie
|
||||
* @xcsa: pointer to extended csa ie
|
||||
* @mcst: pointer to maximum channel switch time ie
|
||||
* @wpa: pointer to wpa ie
|
||||
* @wcn: pointer to wcn ie
|
||||
* @rsn: pointer to rsn ie
|
||||
@@ -167,6 +168,7 @@ struct ie_list {
|
||||
uint8_t *ds_param;
|
||||
uint8_t *csa;
|
||||
uint8_t *xcsa;
|
||||
uint8_t *mcst;
|
||||
uint8_t *wpa;
|
||||
uint8_t *wcn;
|
||||
uint8_t *rsn;
|
||||
|
@@ -636,6 +636,7 @@ util_scan_copy_beacon_data(struct scan_cache_entry *new_entry,
|
||||
ie_lst->ds_param = conv_ptr(ie_lst->ds_param, old_ptr, new_ptr);
|
||||
ie_lst->csa = conv_ptr(ie_lst->csa, old_ptr, new_ptr);
|
||||
ie_lst->xcsa = conv_ptr(ie_lst->xcsa, old_ptr, new_ptr);
|
||||
ie_lst->mcst = conv_ptr(ie_lst->mcst, old_ptr, new_ptr);
|
||||
ie_lst->secchanoff = conv_ptr(ie_lst->secchanoff, old_ptr, new_ptr);
|
||||
ie_lst->wpa = conv_ptr(ie_lst->wpa, old_ptr, new_ptr);
|
||||
ie_lst->wcn = conv_ptr(ie_lst->wcn, old_ptr, new_ptr);
|
||||
@@ -1356,6 +1357,20 @@ util_scan_entry_mlme_info(struct scan_cache_entry *scan_entry)
|
||||
return &(scan_entry->mlme_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* util_scan_entry_mcst() - function to read mcst IE
|
||||
* @scan_entry:scan entry
|
||||
*
|
||||
* API, function to read mcst IE
|
||||
*
|
||||
* Return: mcst or NULL if ie is not present
|
||||
*/
|
||||
static inline uint8_t*
|
||||
util_scan_entry_mcst(struct scan_cache_entry *scan_entry)
|
||||
{
|
||||
return scan_entry->ie_list.mcst;
|
||||
}
|
||||
|
||||
/**
|
||||
* util_scan_entry_hecap() - function to read he caps vendor ie
|
||||
* @scan_entry: scan entry
|
||||
|
@@ -358,6 +358,9 @@ util_scan_parse_extn_ie(struct scan_cache_entry *scan_params,
|
||||
struct extn_ie_header *extn_ie = (struct extn_ie_header *) ie;
|
||||
|
||||
switch (extn_ie->ie_extn_id) {
|
||||
case WLAN_EXTN_ELEMID_MAX_CHAN_SWITCH_TIME:
|
||||
scan_params->ie_list.mcst = (uint8_t *)ie;
|
||||
break;
|
||||
case WLAN_EXTN_ELEMID_SRP:
|
||||
scan_params->ie_list.srp = (uint8_t *)ie;
|
||||
break;
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur