Przeglądaj źródła

qcacld-3.0: Consider PMF capa of peer also for rmf frame processing

Cache the PMF capability of peer in peer_mlme_priv_obj while
adding bss for both station and AP modes. Process the mgmt frames
received from the peer as rmf frames only if the peer is of PMF
capable.
Move mlme_peer_object creation and deletion out of the define
CRYPTO_SET_KEY_CONVERGED to make it generic.
Remove the check where WEP bit is validated and modified based on
PMF capability of the peer. This is already taken care while
setting WEP bit in lim.

Change-Id: I0c93bb25db6a866e4c1793c9ba4c60773c0f019d
CRs-Fixed: 2520249
Srinivas Dasari 5 lat temu
rodzic
commit
cdfa75bb89
2 zmienionych plików z 50 dodań i 15 usunięć
  1. 21 0
      mlme/core/inc/wlan_mlme_main.h
  2. 29 15
      mlme/core/src/wlan_mlme_main.c

+ 21 - 0
mlme/core/inc/wlan_mlme_main.h

@@ -56,9 +56,11 @@ struct wlan_ies {
 /**
  * struct peer_mlme_priv_obj - peer MLME component object
  * @ucast_key_cipher: unicast crypto type.
+ * @is_pmf_enabled: True if PMF is enabled
  */
 struct peer_mlme_priv_obj {
 	uint32_t ucast_key_cipher;
+	bool is_pmf_enabled;
 };
 
 /**
@@ -341,4 +343,23 @@ void mlme_free_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev);
  * Return: Returns a pointer to the peer disconnect IEs present in vdev object
  */
 struct wlan_ies *mlme_get_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev);
+
+/**
+ * mlme_set_peer_pmf_status() - set pmf status of peer
+ * @peer: PEER object
+ * @is_pmf_enabled: Carries if PMF is enabled or not
+ *
+ * is_pmf_enabled will be set to true if PMF is enabled by peer
+ *
+ * Return: void
+ */
+void mlme_set_peer_pmf_status(struct wlan_objmgr_peer *peer,
+			      bool is_pmf_enabled);
+/**
+ * mlme_get_peer_pmf_status() - get if peer is of pmf capable
+ * @peer: PEER object
+ *
+ * Return: Value of is_pmf_enabled; True if PMF is enabled by peer
+ */
+bool mlme_get_peer_pmf_status(struct wlan_objmgr_peer *peer);
 #endif

+ 29 - 15
mlme/core/src/wlan_mlme_main.c

@@ -187,20 +187,6 @@ QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
 	return QDF_STATUS_SUCCESS;
 }
 
-QDF_STATUS
-mlme_peer_object_created_notification(struct wlan_objmgr_peer *peer,
-				      void *arg)
-{
-	return QDF_STATUS_SUCCESS;
-}
-
-QDF_STATUS
-mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer,
-					void *arg)
-{
-	return QDF_STATUS_SUCCESS;
-}
-
 #else
 
 QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
@@ -236,6 +222,7 @@ QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
 
 	return QDF_STATUS_SUCCESS;
 }
+#endif
 
 QDF_STATUS
 mlme_peer_object_created_notification(struct wlan_objmgr_peer *peer,
@@ -298,7 +285,6 @@ mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer,
 
 	return status;
 }
-#endif
 
 static void mlme_init_chainmask_cfg(struct wlan_objmgr_psoc *psoc,
 				    struct wlan_mlme_chainmask *chainmask_info)
@@ -2496,3 +2482,31 @@ struct wlan_ies *mlme_get_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev)
 
 	return &mlme_priv->peer_disconnect_ies;
 }
+
+void mlme_set_peer_pmf_status(struct wlan_objmgr_peer *peer,
+			      bool is_pmf_enabled)
+{
+	struct peer_mlme_priv_obj *peer_priv;
+
+	peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
+							  WLAN_UMAC_COMP_MLME);
+	if (!peer_priv) {
+		mlme_legacy_err(" peer mlme component object is NULL");
+		return;
+	}
+	peer_priv->is_pmf_enabled = is_pmf_enabled;
+}
+
+bool mlme_get_peer_pmf_status(struct wlan_objmgr_peer *peer)
+{
+	struct peer_mlme_priv_obj *peer_priv;
+
+	peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
+							  WLAN_UMAC_COMP_MLME);
+	if (!peer_priv) {
+		mlme_legacy_err("peer mlme component object is NULL");
+		return false;
+	}
+
+	return peer_priv->is_pmf_enabled;
+}