瀏覽代碼

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
共有 3 個文件被更改,包括 40 次插入0 次删除
  1. 5 0
      core/hdd/src/wlan_hdd_assoc.c
  2. 22 0
      core/hdd/src/wlan_hdd_object_manager.c
  3. 13 0
      core/hdd/src/wlan_hdd_object_manager.h

+ 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) */