Переглянути джерело

qcacld-3.0: Set peer state to associate state after connection

Currently in STA mode, host do not change the peer state to
associate state after successful connection. Hence other
components always find peer state as not associate.

As a part of this fix, move peer state to associate state.

Change-Id: Idf85e7f7b916c8c8ee19b117deb14696de8216e5
CRs-Fixed: 1115161
Mukul Sharma 8 роки тому
батько
коміт
5678be4c02

+ 5 - 0
core/hdd/src/wlan_hdd_assoc.c

@@ -1278,6 +1278,11 @@ static void hdd_send_association_event(struct net_device *dev,
 		if (ret)
 			hdd_err("Peer object "MAC_ADDRESS_STR" add fails!",
 					MAC_ADDR_ARRAY(peerMacAddr.bytes));
+		ret = hdd_set_peer_mlme_state(pAdapter->hdd_vdev,
+						WLAN_ASSOC_STATE);
+		if (ret)
+			hdd_err("Peer object %pM fail to set associated state",
+					peerMacAddr.bytes);
 
 		/* send peer status indication to oem app */
 		hdd_send_peer_status_ind_to_oem_app(&peerMacAddr,

+ 22 - 0
core/hdd/src/wlan_hdd_object_manager.c

@@ -226,3 +226,25 @@ int hdd_remove_peer_object(struct wlan_objmgr_vdev *vdev,
 
 	return -EINVAL;
 }
+
+int hdd_set_peer_mlme_state(struct wlan_objmgr_vdev *vdev,
+	enum wlan_peer_state peer_state)
+{
+	struct wlan_objmgr_peer *peer;
+
+	wlan_vdev_obj_lock(vdev);
+	peer = wlan_vdev_get_bsspeer(vdev);
+	wlan_vdev_obj_unlock(vdev);
+
+	if (peer) {
+		wlan_peer_obj_lock(peer);
+		wlan_peer_mlme_set_state(peer, WLAN_ASSOC_STATE);
+		wlan_peer_obj_unlock(peer);
+		return 0;
+	} else {
+		hdd_err("peer is null");
+		return -EINVAL;
+	}
+
+}
+

+ 13 - 0
core/hdd/src/wlan_hdd_object_manager.h

@@ -157,4 +157,17 @@ int hdd_add_peer_object(struct wlan_objmgr_vdev *vdev,
  */
 int hdd_remove_peer_object(struct wlan_objmgr_vdev *vdev,
 			   uint8_t *mac_addr);
+
+/**
+ * hdd_set_peer_mlme_state() - set the peer mlme state
+ * @vdev: vdev pointer
+ * @peer_state: Peer mlme state
+ *
+ * This API set the peer mlme state
+ *
+ * Return: 0 for success, negative error code for failure
+ */
+int hdd_set_peer_mlme_state(struct wlan_objmgr_vdev *vdev,
+	enum wlan_peer_state peer_state);
+
 #endif /* end #if !defined(WLAN_HDD_OBJECT_MANAGER_H) */