mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 21:59:12 -04:00
qcacld-3.0: send deauth if recevie data from non-assoc STA
If SAP receive unicast data from a non-assoc STA, SAP should send deauth mgmt frame to this STA, add this part logic to serve data path. Change-Id: I47346e751b89eda77f6d6450218e2b70fe6b4953 CRs-Fixed: 2298550
This commit is contained in:
parent
6521466f63
commit
1850d9ca80
7 changed files with 97 additions and 1 deletions
|
|
@ -87,7 +87,8 @@ static struct ol_if_ops dp_ol_if_ops = {
|
|||
.peer_rx_reorder_queue_remove = target_if_peer_rx_reorder_queue_remove,
|
||||
.is_hw_dbs_2x2_capable = policy_mgr_is_hw_dbs_2x2_capable,
|
||||
.lro_hash_config = target_if_lro_hash_config,
|
||||
.rx_mic_error = wma_rx_mic_error_ind
|
||||
.rx_mic_error = wma_rx_mic_error_ind,
|
||||
.rx_invalid_peer = wma_rx_invalid_peer_ind
|
||||
/* TODO: Add any other control path calls required to OL_IF/WMA layer */
|
||||
};
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -727,6 +727,8 @@ struct sir_mgmt_msg {
|
|||
#define SIR_LIM_DELETE_STA_CONTEXT_IND (SIR_LIM_ITC_MSG_TYPES_BEGIN + 0x11)
|
||||
/* Indication from HAL to delete BA */
|
||||
#define SIR_LIM_UPDATE_BEACON (SIR_LIM_ITC_MSG_TYPES_BEGIN + 0x13)
|
||||
/* Indication from HAL to handle RX invalid peer */
|
||||
#define SIR_LIM_RX_INVALID_PEER (SIR_LIM_ITC_MSG_TYPES_BEGIN + 0x15)
|
||||
|
||||
/* LIM Timeout messages */
|
||||
#define SIR_LIM_TIMEOUT_MSG_START ((SIR_LIM_MODULE_ID << 8) + 0xD0)
|
||||
|
|
|
|||
|
|
@ -561,3 +561,39 @@ hb_handler_fail:
|
|||
WLAN_WAKE_ALL_NETIF_QUEUE,
|
||||
WLAN_CONTROL_PATH);
|
||||
}
|
||||
|
||||
void lim_rx_invalid_peer_process(tpAniSirGlobal mac_ctx,
|
||||
struct scheduler_msg *lim_msg)
|
||||
{
|
||||
struct ol_rx_inv_peer_params *msg =
|
||||
(struct ol_rx_inv_peer_params *)lim_msg->bodyptr;
|
||||
tpPESession session_entry;
|
||||
uint16_t reason_code =
|
||||
eSIR_MAC_CLASS3_FRAME_FROM_NON_ASSOC_STA_REASON;
|
||||
|
||||
if (NULL == msg) {
|
||||
pe_err("Invalid body pointer in message");
|
||||
return;
|
||||
}
|
||||
|
||||
session_entry = pe_find_session_by_sme_session_id(mac_ctx,
|
||||
msg->vdev_id);
|
||||
if (NULL == session_entry) {
|
||||
pe_err("session not found for given sme session");
|
||||
qdf_mem_free(msg);
|
||||
return;
|
||||
}
|
||||
|
||||
/* only if SAP mode */
|
||||
if (session_entry->operMode == BSS_OPERATIONAL_MODE_AP) {
|
||||
pe_debug("send deauth frame to non-assoc STA");
|
||||
lim_send_deauth_mgmt_frame(mac_ctx,
|
||||
reason_code,
|
||||
msg->ta,
|
||||
session_entry,
|
||||
false);
|
||||
}
|
||||
|
||||
qdf_mem_free(msg);
|
||||
lim_msg->bodyptr = NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1786,6 +1786,9 @@ static void lim_process_messages(tpAniSirGlobal mac_ctx,
|
|||
case SIR_LIM_DELETE_STA_CONTEXT_IND:
|
||||
lim_delete_sta_context(mac_ctx, msg);
|
||||
break;
|
||||
case SIR_LIM_RX_INVALID_PEER:
|
||||
lim_rx_invalid_peer_process(mac_ctx, msg);
|
||||
break;
|
||||
case SIR_LIM_JOIN_FAIL_TIMEOUT:
|
||||
case SIR_LIM_PERIODIC_JOIN_PROBE_REQ_TIMEOUT:
|
||||
case SIR_LIM_AUTH_FAIL_TIMEOUT:
|
||||
|
|
|
|||
|
|
@ -1442,4 +1442,17 @@ static inline void lim_set_peer_twt_cap(tpPESession session,
|
|||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* lim_rx_invalid_peer_process() - process rx invalid peer indication
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
* @lim_msg: Pointer to scheduler message
|
||||
*
|
||||
* This function will process the rx data invalid peer indication,
|
||||
* if the vdev operation mode is SAP, then send the deauth mgmt frame
|
||||
* to STA.
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void lim_rx_invalid_peer_process(tpAniSirGlobal mac_ctx,
|
||||
struct scheduler_msg *lim_msg);
|
||||
#endif /* __LIM_UTILS_H */
|
||||
|
|
|
|||
|
|
@ -2542,4 +2542,15 @@ QDF_STATUS wma_config_bmiss_bcnt_params(uint32_t vdev_id, uint32_t first_cnt,
|
|||
*/
|
||||
void wma_check_and_set_wake_timer(uint32_t time);
|
||||
|
||||
/**
|
||||
* wma_rx_invalid_peer_ind(): the callback for DP to notify WMA layer
|
||||
* invalid peer data is received, this function will send message to
|
||||
* lim module.
|
||||
* @vdev_id: virtual device ID
|
||||
* @wh: Pointer to 802.11 frame header
|
||||
*
|
||||
* Return: 0 for success or non-zero on failure
|
||||
*/
|
||||
uint8_t wma_rx_invalid_peer_ind(uint8_t vdev_id, void *wh);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -3194,3 +3194,33 @@ void wma_rx_mic_error_ind(void *scn_handle, uint16_t vdev_id, void *wh)
|
|||
|
||||
wma_indicate_err(OL_RX_ERR_TKIP_MIC, &err_info);
|
||||
}
|
||||
|
||||
uint8_t wma_rx_invalid_peer_ind(uint8_t vdev_id, void *wh)
|
||||
{
|
||||
struct ol_rx_inv_peer_params *rx_inv_msg;
|
||||
struct ieee80211_frame *wh_l = (struct ieee80211_frame *)wh;
|
||||
tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA);
|
||||
|
||||
rx_inv_msg = (struct ol_rx_inv_peer_params *)
|
||||
qdf_mem_malloc(sizeof(struct ol_rx_inv_peer_params));
|
||||
if (NULL == rx_inv_msg) {
|
||||
WMA_LOGE("%s: mem alloc failed for rx_data_msg", __func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
rx_inv_msg->vdev_id = vdev_id;
|
||||
qdf_mem_copy(rx_inv_msg->ra, wh_l->i_addr1, OL_TXRX_MAC_ADDR_LEN);
|
||||
qdf_mem_copy(rx_inv_msg->ta, wh_l->i_addr2, OL_TXRX_MAC_ADDR_LEN);
|
||||
|
||||
WMA_LOGD("%s: vdev_id %d", __func__, vdev_id);
|
||||
WMA_LOGD("%s: RA:" MAC_ADDRESS_STR,
|
||||
__func__,
|
||||
MAC_ADDR_ARRAY(rx_inv_msg->ra));
|
||||
WMA_LOGD("%s: TA:" MAC_ADDRESS_STR,
|
||||
__func__,
|
||||
MAC_ADDR_ARRAY(rx_inv_msg->ta));
|
||||
|
||||
wma_send_msg(wma, SIR_LIM_RX_INVALID_PEER, (void *)rx_inv_msg, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue