qcacmn: Deliver EAP frames to stack from REO exception path
Revert "qcacmn: drop duplicated EAP frames from REO exception path", allow all EAP frame delivering to stack including retried ones. Change-Id: I73733841c1feb21d5b5fd160856a8fe9c21168fc CRs-Fixed: 2959701
This commit is contained in:

committed by
Madan Koyyalamudi

parent
78124d2ec7
commit
12a999bc58
@@ -2667,6 +2667,8 @@ bool dp_rx_deliver_special_frame(struct dp_soc *soc, struct dp_peer *peer,
|
|||||||
qdf_nbuf_pull_head(nbuf, skip_len);
|
qdf_nbuf_pull_head(nbuf, skip_len);
|
||||||
|
|
||||||
if (dp_rx_is_special_frame(nbuf, frame_mask)) {
|
if (dp_rx_is_special_frame(nbuf, frame_mask)) {
|
||||||
|
dp_info("special frame, mpdu sn 0x%x",
|
||||||
|
hal_rx_get_rx_sequence(soc->hal_soc, rx_tlv_hdr));
|
||||||
qdf_nbuf_set_exc_frame(nbuf, 1);
|
qdf_nbuf_set_exc_frame(nbuf, 1);
|
||||||
dp_rx_deliver_to_stack(soc, peer->vdev, peer,
|
dp_rx_deliver_to_stack(soc, peer->vdev, peer,
|
||||||
nbuf, NULL);
|
nbuf, NULL);
|
||||||
|
@@ -466,10 +466,8 @@ dp_rx_pn_error_handle(struct dp_soc *soc, hal_ring_desc_t ring_desc,
|
|||||||
*
|
*
|
||||||
* @soc: core txrx main context
|
* @soc: core txrx main context
|
||||||
* @nbuf: pointer to msdu skb
|
* @nbuf: pointer to msdu skb
|
||||||
* @rx_tlv_hdr: start of rx tlv header
|
|
||||||
* @mpdu_desc_info: pointer to mpdu level description info
|
|
||||||
* @peer_id: dp peer ID
|
* @peer_id: dp peer ID
|
||||||
* @tid: dp tid
|
* @rx_tlv_hdr: start of rx tlv header
|
||||||
*
|
*
|
||||||
* This function process the msdu delivered from REO2TCL
|
* This function process the msdu delivered from REO2TCL
|
||||||
* ring with error type OOR
|
* ring with error type OOR
|
||||||
@@ -479,34 +477,19 @@ dp_rx_pn_error_handle(struct dp_soc *soc, hal_ring_desc_t ring_desc,
|
|||||||
static void
|
static void
|
||||||
dp_rx_oor_handle(struct dp_soc *soc,
|
dp_rx_oor_handle(struct dp_soc *soc,
|
||||||
qdf_nbuf_t nbuf,
|
qdf_nbuf_t nbuf,
|
||||||
uint8_t *rx_tlv_hdr,
|
|
||||||
struct hal_rx_mpdu_desc_info *mpdu_desc_info,
|
|
||||||
uint16_t peer_id,
|
uint16_t peer_id,
|
||||||
uint8_t tid)
|
uint8_t *rx_tlv_hdr)
|
||||||
{
|
{
|
||||||
uint32_t frame_mask = FRAME_MASK_IPV4_ARP | FRAME_MASK_IPV4_DHCP |
|
uint32_t frame_mask = FRAME_MASK_IPV4_ARP | FRAME_MASK_IPV4_DHCP |
|
||||||
FRAME_MASK_IPV4_EAPOL | FRAME_MASK_IPV6_DHCP;
|
FRAME_MASK_IPV4_EAPOL | FRAME_MASK_IPV6_DHCP;
|
||||||
struct dp_peer *peer = NULL;
|
struct dp_peer *peer = NULL;
|
||||||
|
|
||||||
peer = dp_peer_get_ref_by_id(soc, peer_id, DP_MOD_ID_RX_ERR);
|
peer = dp_peer_get_ref_by_id(soc, peer_id, DP_MOD_ID_RX_ERR);
|
||||||
if (!peer || tid >= DP_MAX_TIDS) {
|
if (!peer) {
|
||||||
dp_info_rl("peer or tid %d not valid", tid);
|
dp_info_rl("peer not found");
|
||||||
goto free_nbuf;
|
goto free_nbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* For REO error 7 OOR, if it is retry frame under BA session,
|
|
||||||
* then it is likely SN duplicated frame, do not deliver EAPOL
|
|
||||||
* to stack in this case since the connection might fail due to
|
|
||||||
* duplicated EAP response.
|
|
||||||
*/
|
|
||||||
if (mpdu_desc_info &&
|
|
||||||
mpdu_desc_info->mpdu_flags & HAL_MPDU_F_RETRY_BIT &&
|
|
||||||
peer->rx_tid[tid].ba_status == DP_RX_BA_ACTIVE) {
|
|
||||||
frame_mask &= ~FRAME_MASK_IPV4_EAPOL;
|
|
||||||
DP_STATS_INC(soc, rx.err.reo_err_oor_eapol_drop, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dp_rx_deliver_special_frame(soc, peer, nbuf, frame_mask,
|
if (dp_rx_deliver_special_frame(soc, peer, nbuf, frame_mask,
|
||||||
rx_tlv_hdr)) {
|
rx_tlv_hdr)) {
|
||||||
DP_STATS_INC(soc, rx.err.reo_err_oor_to_stack, 1);
|
DP_STATS_INC(soc, rx.err.reo_err_oor_to_stack, 1);
|
||||||
@@ -627,24 +610,24 @@ more_msdu_link_desc:
|
|||||||
DP_STATS_INC(soc, rx.err.reo_err_oor_sg_count, 1);
|
DP_STATS_INC(soc, rx.err.reo_err_oor_sg_count, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (err_code) {
|
||||||
|
case HAL_REO_ERR_REGULAR_FRAME_2K_JUMP:
|
||||||
/*
|
/*
|
||||||
* only first msdu, mpdu start description tlv valid?
|
* only first msdu, mpdu start description tlv valid?
|
||||||
* and use it for following msdu.
|
* and use it for following msdu.
|
||||||
*/
|
*/
|
||||||
if (hal_rx_msdu_end_first_msdu_get(soc->hal_soc,
|
if (hal_rx_msdu_end_first_msdu_get(soc->hal_soc,
|
||||||
rx_tlv_hdr_last))
|
rx_tlv_hdr_last))
|
||||||
tid = hal_rx_mpdu_start_tid_get(soc->hal_soc,
|
tid = hal_rx_mpdu_start_tid_get(
|
||||||
|
soc->hal_soc,
|
||||||
rx_tlv_hdr_first);
|
rx_tlv_hdr_first);
|
||||||
|
|
||||||
switch (err_code) {
|
|
||||||
case HAL_REO_ERR_REGULAR_FRAME_2K_JUMP:
|
|
||||||
dp_2k_jump_handle(soc, nbuf, rx_tlv_hdr_last,
|
dp_2k_jump_handle(soc, nbuf, rx_tlv_hdr_last,
|
||||||
peer_id, tid);
|
peer_id, tid);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HAL_REO_ERR_REGULAR_FRAME_OOR:
|
case HAL_REO_ERR_REGULAR_FRAME_OOR:
|
||||||
dp_rx_oor_handle(soc, nbuf, rx_tlv_hdr_last,
|
dp_rx_oor_handle(soc, nbuf, peer_id, rx_tlv_hdr_last);
|
||||||
mpdu_desc_info, peer_id, tid);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dp_err_rl("Non-support error code %d", err_code);
|
dp_err_rl("Non-support error code %d", err_code);
|
||||||
@@ -2321,9 +2304,8 @@ done:
|
|||||||
soc->hal_soc, rx_tlv_hdr);
|
soc->hal_soc, rx_tlv_hdr);
|
||||||
nbuf->next = NULL;
|
nbuf->next = NULL;
|
||||||
dp_rx_oor_handle(soc, nbuf,
|
dp_rx_oor_handle(soc, nbuf,
|
||||||
rx_tlv_hdr,
|
peer_id,
|
||||||
NULL,
|
rx_tlv_hdr);
|
||||||
peer_id, tid);
|
|
||||||
break;
|
break;
|
||||||
case HAL_REO_ERR_BAR_FRAME_2K_JUMP:
|
case HAL_REO_ERR_BAR_FRAME_2K_JUMP:
|
||||||
case HAL_REO_ERR_BAR_FRAME_OOR:
|
case HAL_REO_ERR_BAR_FRAME_OOR:
|
||||||
|
@@ -6024,8 +6024,6 @@ void dp_txrx_path_stats(struct dp_soc *soc)
|
|||||||
pdev->soc->stats.rx.err.reo_err_oor_to_stack);
|
pdev->soc->stats.rx.err.reo_err_oor_to_stack);
|
||||||
DP_PRINT_STATS("REO err oor msdu drop: %u",
|
DP_PRINT_STATS("REO err oor msdu drop: %u",
|
||||||
pdev->soc->stats.rx.err.reo_err_oor_drop);
|
pdev->soc->stats.rx.err.reo_err_oor_drop);
|
||||||
DP_PRINT_STATS("REO err oor eapol drop: %u",
|
|
||||||
pdev->soc->stats.rx.err.reo_err_oor_eapol_drop);
|
|
||||||
DP_PRINT_STATS("Rx err msdu rejected: %d",
|
DP_PRINT_STATS("Rx err msdu rejected: %d",
|
||||||
soc->stats.rx.err.rejected);
|
soc->stats.rx.err.rejected);
|
||||||
DP_PRINT_STATS("Rx raw frame dropped: %d",
|
DP_PRINT_STATS("Rx raw frame dropped: %d",
|
||||||
@@ -6617,9 +6615,6 @@ dp_print_soc_rx_stats(struct dp_soc *soc)
|
|||||||
DP_PRINT_STATS("REO err oor msdu drop: %d",
|
DP_PRINT_STATS("REO err oor msdu drop: %d",
|
||||||
soc->stats.rx.err.reo_err_oor_drop);
|
soc->stats.rx.err.reo_err_oor_drop);
|
||||||
|
|
||||||
DP_PRINT_STATS("REO err oor eapol drop: %d",
|
|
||||||
soc->stats.rx.err.reo_err_oor_eapol_drop);
|
|
||||||
|
|
||||||
DP_PRINT_STATS("Rx err msdu rejected: %d",
|
DP_PRINT_STATS("Rx err msdu rejected: %d",
|
||||||
soc->stats.rx.err.rejected);
|
soc->stats.rx.err.rejected);
|
||||||
|
|
||||||
|
@@ -1041,8 +1041,6 @@ struct dp_soc_stats {
|
|||||||
uint32_t dup_refill_link_desc;
|
uint32_t dup_refill_link_desc;
|
||||||
/* Incorrect msdu continuation bit in MSDU desc */
|
/* Incorrect msdu continuation bit in MSDU desc */
|
||||||
uint32_t msdu_continuation_err;
|
uint32_t msdu_continuation_err;
|
||||||
/* REO OOR eapol drop count */
|
|
||||||
uint32_t reo_err_oor_eapol_drop;
|
|
||||||
/* Non Eapol packet drop count due to peer not authorized */
|
/* Non Eapol packet drop count due to peer not authorized */
|
||||||
uint32_t peer_unauth_rx_pkt_drop;
|
uint32_t peer_unauth_rx_pkt_drop;
|
||||||
/* count of start sequence (ssn) updates */
|
/* count of start sequence (ssn) updates */
|
||||||
|
Reference in New Issue
Block a user