Bläddra i källkod

qcacmn: Fix mesh no ecryption frame issue

Send no encryption frame only to the firmware and do not duplicate
the frame.

Change-Id: Ie601126b59027d33808db27b18ec23efbab564c0
CRs-Fixed: 2186526
Venkateswara Swamy Bandaru 7 år sedan
förälder
incheckning
6523a02ecc
1 ändrade filer med 20 tillägg och 3 borttagningar
  1. 20 3
      dp/wifi3.0/dp_tx.c

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

@@ -1542,6 +1542,7 @@ qdf_nbuf_t dp_tx_extract_mesh_meta_data(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
 	if (mhdr->flags & METAHDR_FLAG_NOENCRYPT) {
 		meta_data->encrypt_type = 0;
 		meta_data->valid_encrypt_type = 1;
+		meta_data->learning_frame = 0;
 	}
 
 	meta_data->valid_key_flags = 1;
@@ -1788,6 +1789,7 @@ qdf_nbuf_t dp_tx_send_mesh(void *vap_dev, qdf_nbuf_t nbuf)
 	qdf_nbuf_t nbuf_mesh = NULL;
 	qdf_nbuf_t nbuf_clone = NULL;
 	struct dp_vdev *vdev = (struct dp_vdev *) vap_dev;
+	uint8_t no_enc_frame = 0;
 
 	nbuf_mesh = qdf_nbuf_unshare(nbuf);
 	if (nbuf_mesh == NULL) {
@@ -1798,7 +1800,13 @@ qdf_nbuf_t dp_tx_send_mesh(void *vap_dev, qdf_nbuf_t nbuf)
 	nbuf = nbuf_mesh;
 
 	mhdr = (struct meta_hdr_s *)qdf_nbuf_data(nbuf);
-	if (mhdr->flags & METAHDR_FLAG_INFO_UPDATED) {
+
+	if ((vdev->sec_type != cdp_sec_type_none) &&
+			(mhdr->flags & METAHDR_FLAG_NOENCRYPT))
+		no_enc_frame = 1;
+
+	if ((mhdr->flags & METAHDR_FLAG_INFO_UPDATED) &&
+		       !no_enc_frame) {
 		nbuf_clone = qdf_nbuf_clone(nbuf);
 		if (nbuf_clone == NULL) {
 			QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
@@ -1815,8 +1823,17 @@ qdf_nbuf_t dp_tx_send_mesh(void *vap_dev, qdf_nbuf_t nbuf)
 			qdf_nbuf_free(nbuf_clone);
 	}
 
-	qdf_nbuf_set_tx_ftype(nbuf, CB_FTYPE_INVALID);
-	return dp_tx_send(vap_dev, nbuf);
+	if (no_enc_frame)
+		qdf_nbuf_set_tx_ftype(nbuf, CB_FTYPE_MESH_TX_INFO);
+	else
+		qdf_nbuf_set_tx_ftype(nbuf, CB_FTYPE_INVALID);
+
+	nbuf = dp_tx_send(vap_dev, nbuf);
+	if ((nbuf == NULL) && no_enc_frame) {
+		DP_STATS_INC(vdev, tx_i.mesh.exception_fw, 1);
+	}
+
+	return nbuf;
 }
 
 #else