qcacld-3.0: Handle peer kickout event for STA role
This is qcacld-2.0 to qcacld-3.0 propagation Till now kickout event was only handled for SAP role. The patch handles wmi event for peer kickout due to inactivity in STA role. Change-Id: I437dc3e07737bb653e969406b64cd9dad56fbbcd CRs-Fixed: 861917
Этот коммит содержится в:

коммит произвёл
Gerrit - the friendly Code Review server

родитель
6de4645864
Коммит
9801ac0282
@@ -216,23 +216,41 @@ void lim_delete_sta_context(tpAniSirGlobal mac_ctx, tpSirMsgQ lim_msg)
|
||||
{
|
||||
tpDeleteStaContext msg = (tpDeleteStaContext) lim_msg->bodyptr;
|
||||
tpPESession session_entry;
|
||||
uint8_t session_id;
|
||||
tpDphHashNode sta_ds;
|
||||
|
||||
if (NULL == msg) {
|
||||
lim_log(mac_ctx, LOGE, FL("Invalid body pointer in message"));
|
||||
return;
|
||||
}
|
||||
session_entry = pe_find_session_by_bssid(mac_ctx, msg->bssId,
|
||||
&session_id);
|
||||
session_entry = pe_find_session_by_sme_session_id(mac_ctx, msg->vdev_id);
|
||||
if (NULL == session_entry) {
|
||||
lim_log(mac_ctx, LOGE, FL("session does not exist"));
|
||||
lim_log(mac_ctx, LOGE,
|
||||
FL("session not found for given sme session"));
|
||||
qdf_mem_free(msg);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (msg->reasonCode) {
|
||||
case HAL_DEL_STA_REASON_CODE_KEEP_ALIVE:
|
||||
case HAL_DEL_STA_REASON_CODE_TIM_BASED:
|
||||
if (LIM_IS_STA_ROLE(session_entry) && !msg->is_tdls) {
|
||||
sta_ds = dph_get_hash_entry(mac_ctx,
|
||||
DPH_STA_HASH_INDEX_PEER,
|
||||
&session_entry->dph.dphHashTable);
|
||||
if (NULL == sta_ds) {
|
||||
lim_log(mac_ctx, LOGE,
|
||||
FL("Dph entry not found."));
|
||||
qdf_mem_free(msg);
|
||||
return;
|
||||
}
|
||||
lim_send_deauth_mgmt_frame(mac_ctx,
|
||||
eSIR_MAC_DISASSOC_DUE_TO_INACTIVITY_REASON,
|
||||
msg->addr2, session_entry, false);
|
||||
lim_tear_down_link_with_ap(mac_ctx,
|
||||
session_entry->peSessionId,
|
||||
eSIR_MAC_UNSPEC_FAILURE_REASON);
|
||||
/* only break for STA role (non TDLS) */
|
||||
break;
|
||||
}
|
||||
lim_delete_sta_util(mac_ctx, msg, session_entry);
|
||||
break;
|
||||
|
||||
|
@@ -595,6 +595,8 @@ typedef enum eSmpsModeValue {
|
||||
* @rssi: rssi value during disconnection
|
||||
*/
|
||||
typedef struct {
|
||||
bool is_tdls;
|
||||
uint8_t vdev_id;
|
||||
uint16_t assocId;
|
||||
uint16_t staId;
|
||||
tSirMacAddr bssId;
|
||||
|
@@ -346,6 +346,8 @@ int wma_peer_sta_kickout_event_handler(void *handle, u8 *event, u32 len)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
del_sta_ctx->is_tdls = true;
|
||||
del_sta_ctx->vdev_id = vdev_id;
|
||||
del_sta_ctx->staId = peer_id;
|
||||
qdf_mem_copy(del_sta_ctx->addr2, macaddr, IEEE80211_ADDR_LEN);
|
||||
qdf_mem_copy(del_sta_ctx->bssId, wma->interfaces[vdev_id].bssid,
|
||||
@@ -407,7 +409,10 @@ int wma_peer_sta_kickout_event_handler(void *handle, u8 *event, u32 len)
|
||||
break;
|
||||
|
||||
case WMI_PEER_STA_KICKOUT_REASON_INACTIVITY:
|
||||
/* Handle SA query kickout is same as inactivity kickout */
|
||||
/*
|
||||
* Handle SA query kickout is same as inactivity kickout.
|
||||
* This could be for STA or SAP role
|
||||
*/
|
||||
case WMI_PEER_STA_KICKOUT_REASON_SA_QUERY_TIMEOUT:
|
||||
default:
|
||||
break;
|
||||
@@ -423,6 +428,8 @@ int wma_peer_sta_kickout_event_handler(void *handle, u8 *event, u32 len)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
del_sta_ctx->is_tdls = false;
|
||||
del_sta_ctx->vdev_id = vdev_id;
|
||||
del_sta_ctx->staId = peer_id;
|
||||
qdf_mem_copy(del_sta_ctx->addr2, macaddr, IEEE80211_ADDR_LEN);
|
||||
qdf_mem_copy(del_sta_ctx->bssId, wma->interfaces[vdev_id].addr,
|
||||
|
Ссылка в новой задаче
Block a user