diff --git a/core/mac/src/pe/include/lim_session.h b/core/mac/src/pe/include/lim_session.h index 223e9acebfed..47aa22702de7 100644 --- a/core/mac/src/pe/include/lim_session.h +++ b/core/mac/src/pe/include/lim_session.h @@ -136,6 +136,9 @@ struct obss_detection_cfg { * @ap_ecsa_wakelock: wakelock to complete CSA operation. * @ap_ecsa_runtime_lock: runtime lock to complete SAP CSA operation. * to Adaptive 11R network + * @prev_auth_seq_num: Sequence number of previously received auth frame to + * detect duplicate frames. + * @prev_auth_mac_addr: mac_addr of the sta correspond to @prev_auth_seq_num */ struct pe_session { /* To check session table is in use or free */ @@ -548,6 +551,7 @@ struct pe_session { #endif /* previous auth frame's sequence number */ uint16_t prev_auth_seq_num; + tSirMacAddr prev_auth_mac_addr; struct obss_detection_cfg obss_offload_cfg; struct obss_detection_cfg current_obss_detection; bool is_session_obss_offload_enabled; diff --git a/core/mac/src/pe/lim/lim_process_auth_frame.c b/core/mac/src/pe/lim/lim_process_auth_frame.c index cce1bfd0396b..35bbdeebefb2 100644 --- a/core/mac/src/pe/lim/lim_process_auth_frame.c +++ b/core/mac/src/pe/lim/lim_process_auth_frame.c @@ -1319,14 +1319,17 @@ lim_process_auth_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info, (mac_hdr->seqControl.seqNumLo); if (pe_session->prev_auth_seq_num == curr_seq_num && + !qdf_mem_cmp(pe_session->prev_auth_mac_addr, &mac_hdr->sa, + ETH_ALEN) && mac_hdr->fc.retry) { pe_debug("auth frame, seq num: %d is already processed, drop it", curr_seq_num); return; } - /* save seq number in pe_session */ + /* save seq number and mac_addr in pe_session */ pe_session->prev_auth_seq_num = curr_seq_num; + qdf_mem_copy(pe_session->prev_auth_mac_addr, mac_hdr->sa, ETH_ALEN); body_ptr = WMA_GET_RX_MPDU_DATA(rx_pkt_info);