diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index fce711959325..9078975e943d 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -1353,22 +1353,8 @@ static void hdd_send_association_event(struct net_device *dev, adapter->session_id); memcpy(wrqu.ap_addr.sa_data, sta_ctx->conn_info.bssId.bytes, ETH_ALEN); - hdd_debug("wlan: new IBSS connection to " MAC_ADDRESS_STR, + hdd_debug("wlan: new IBSS peer connection to BSSID " MAC_ADDRESS_STR, MAC_ADDR_ARRAY(sta_ctx->conn_info.bssId.bytes)); - - ret = hdd_objmgr_add_peer_object(adapter->hdd_vdev, - QDF_IBSS_MODE, - pCsrRoamInfo->bssid.bytes, - false); - if (ret) - hdd_err("Peer object "MAC_ADDRESS_STR" add fails!", - MAC_ADDR_ARRAY(pCsrRoamInfo->bssid.bytes)); - ret = hdd_objmgr_set_peer_mlme_state(adapter->hdd_vdev, - WLAN_ASSOC_STATE); - if (ret) - hdd_err("Peer object %pM fail to set associated state", - peerMacAddr.bytes); - } else { /* Not Associated */ hdd_debug("wlan: disconnected"); memset(wrqu.ap_addr.sa_data, '\0', ETH_ALEN); @@ -1390,13 +1376,12 @@ static void hdd_send_association_event(struct net_device *dev, adapter->session_id, NULL, adapter->device_mode); - } - - ret = hdd_objmgr_remove_peer_object(adapter->hdd_vdev, - peerMacAddr.bytes); - if (ret) - hdd_err("Peer obj "MAC_ADDRESS_STR" delete fails", + ret = hdd_objmgr_remove_peer_object(adapter->hdd_vdev, + peerMacAddr.bytes); + if (ret) + hdd_err("Peer obj "MAC_ADDRESS_STR" delete fails", MAC_ADDR_ARRAY(peerMacAddr.bytes)); + } hdd_lpass_notify_disconnect(adapter); /* Update tdls module about the disconnection event */ @@ -1480,7 +1465,7 @@ QDF_STATUS hdd_roam_deregister_sta(struct hdd_adapter *adapter, uint8_t staid) QDF_STATUS qdf_status; struct hdd_station_ctx *sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter); int ret = 0; - uint8_t *peer_mac = NULL; + struct qdf_mac_addr *peer_mac = NULL; struct qdf_mac_addr broadcastMacAddr = QDF_MAC_ADDR_BROADCAST_INITIALIZER; if (eConnectionState_IbssDisconnected == @@ -1500,16 +1485,20 @@ QDF_STATUS hdd_roam_deregister_sta(struct hdd_adapter *adapter, uint8_t staid) } if (adapter->device_mode == QDF_STA_MODE) { - peer_mac = sta_ctx->conn_info.bssId.bytes; + peer_mac = &sta_ctx->conn_info.bssId; } else if (adapter->device_mode == QDF_IBSS_MODE) { if (sta_ctx->broadcast_staid == staid) - peer_mac = broadcastMacAddr.bytes; + peer_mac = &broadcastMacAddr; else - peer_mac = sta_ctx->conn_info. - peerMacAddress[staid].bytes; + peer_mac = + hdd_wlan_get_ibss_mac_addr_from_staid(adapter, staid); } - - ret = hdd_objmgr_remove_peer_object(adapter->hdd_vdev, peer_mac); + if (!peer_mac) { + hdd_err("Coudnt find peer MAC for staid %d, delete fails", + staid); + return QDF_STATUS_E_FAILURE; + } + ret = hdd_objmgr_remove_peer_object(adapter->hdd_vdev, peer_mac->bytes); if (ret) { hdd_err("Peer obj %pM delete fails", peer_mac); return QDF_STATUS_E_FAILURE; @@ -3270,6 +3259,7 @@ static void hdd_roam_ibss_indication_handler(struct hdd_adapter *adapter, WLAN_HDD_GET_STATION_CTX_PTR(adapter); struct qdf_mac_addr broadcastMacAddr = QDF_MAC_ADDR_BROADCAST_INITIALIZER; + int ret; if (NULL == roam_info) { QDF_ASSERT(0); @@ -3293,10 +3283,18 @@ static void hdd_roam_ibss_indication_handler(struct hdd_adapter *adapter, adapter; else hdd_debug("invalid sta id %d", roam_info->staId); + hdd_roam_register_sta(adapter, roam_info, roam_info->staId, &broadcastMacAddr, roam_info->pBssDesc); + ret = hdd_objmgr_add_peer_object(adapter->hdd_vdev, + QDF_IBSS_MODE, + broadcastMacAddr.bytes, + false); + if (ret) + hdd_err("Peer object "MAC_ADDRESS_STR" add fails!", + MAC_ADDR_ARRAY(roam_info->peerMac.bytes)); if (roam_info->pBssDesc) { struct cfg80211_bss *bss; @@ -3591,6 +3589,7 @@ roam_roam_connect_status_update_handler(struct hdd_adapter *adapter, { struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); QDF_STATUS qdf_status; + int ret; switch (roamResult) { case eCSR_ROAM_RESULT_IBSS_NEW_PEER: @@ -3633,6 +3632,13 @@ roam_roam_connect_status_update_handler(struct hdd_adapter *adapter, hdd_err("Cannot register STA with TL for IBSS. qdf_status: %d [%08X]", qdf_status, qdf_status); } + ret = hdd_objmgr_add_peer_object(adapter->hdd_vdev, + QDF_IBSS_MODE, + roam_info->peerMac.bytes, + false); + if (ret) + hdd_err("Peer object "MAC_ADDRESS_STR" add fails!", + MAC_ADDR_ARRAY(roam_info->peerMac.bytes)); sta_ctx->ibss_sta_generation++; stainfo = qdf_mem_malloc(sizeof(*stainfo)); if (stainfo == NULL) {