Browse Source

qcacmn: Handle decrypt error packets for invalid peers

Packets from STAs that are not associated are sometimes indicated
as Decrypt error.
Process these packets by sending a unicast Deauth packet to them.
This is also required to trigger unicast Deauth, if the STA
ignores broadcast Deauth and later send packets to AP in Deauthed
state

Change-Id: I6ebf848d4b9409931ae1750b5ff0617839b04105
Vinay Adella 5 years ago
parent
commit
5c1b7881a1
1 changed files with 20 additions and 3 deletions
  1. 20 3
      dp/wifi3.0/dp_rx_err.c

+ 20 - 3
dp/wifi3.0/dp_rx_err.c

@@ -1405,7 +1405,8 @@ done:
 	while (nbuf) {
 		struct dp_peer *peer;
 		uint16_t peer_id;
-
+		uint8_t e_code;
+		uint8_t *tlv_hdr;
 		rx_tlv_hdr = qdf_nbuf_data(nbuf);
 
 		peer_id = hal_rx_mpdu_start_sw_peer_id_get(rx_tlv_hdr);
@@ -1506,8 +1507,24 @@ done:
 					continue;
 
 				case HAL_RXDMA_ERR_DECRYPT:
-					if (peer)
-						DP_STATS_INC(peer, rx.err.decrypt_err, 1);
+					pool_id = wbm_err_info.pool_id;
+					e_code = wbm_err_info.rxdma_err_code;
+					tlv_hdr = rx_tlv_hdr;
+					if (peer) {
+						DP_STATS_INC(peer, rx.err.
+							     decrypt_err, 1);
+					} else {
+						dp_rx_process_rxdma_err(soc,
+									nbuf,
+									tlv_hdr,
+									NULL,
+									e_code,
+									pool_id
+									);
+						nbuf = next;
+						continue;
+					}
+
 					QDF_TRACE(QDF_MODULE_ID_DP,
 						QDF_TRACE_LEVEL_DEBUG,
 					"Packet received with Decrypt error");