qcacld-3.0: send peer authorize for the non assoc link

Send the peer authorize command for the non-assoc link.

Change-Id: I888f104ba549b738ca0bb7f8d50df04bcbf6328b
CRs-Fixed: 3056817
This commit is contained in:
Arun Kumar Khandavalli
2021-10-19 16:05:13 +05:30
committed by Madan Koyyalamudi
parent e088b5ba70
commit 5f647b19ba
2 changed files with 98 additions and 28 deletions

View File

@@ -1918,7 +1918,9 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
struct sap_config *sap_config;
struct sap_context *sap_ctx = NULL;
uint8_t pdev_id;
#ifdef WLAN_FEATURE_11BE_MLO
struct wlan_objmgr_peer *peer;
#endif
dev = context;
if (!dev) {
hdd_err("context is null");
@@ -2432,6 +2434,21 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
hdd_err("Failed to register STA MLD %d "
QDF_MAC_ADDR_FMT, qdf_status,
QDF_MAC_ADDR_REF(event->sta_mld.bytes));
peer = wlan_objmgr_get_peer_by_mac(hdd_ctx->psoc,
event->staMac.bytes,
WLAN_OSIF_ID);
if (!peer) {
hdd_err("Peer object not found");
return QDF_STATUS_E_INVAL;
}
if (!qdf_is_macaddr_zero((struct qdf_mac_addr *)peer->mldaddr)
&& !wlan_peer_mlme_is_assoc_peer(peer)) {
wlan_objmgr_peer_release_ref(peer, WLAN_OSIF_ID);
break;
}
wlan_objmgr_peer_release_ref(peer, WLAN_OSIF_ID);
#endif
}

View File

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -1769,6 +1770,78 @@ sap_update_cac_history(struct mac_context *mac_ctx,
}
#endif
#ifdef WLAN_FEATURE_11BE_MLO
static inline
bool sap_check_peer_for_peer_null_mldaddr(struct wlan_objmgr_peer *peer)
{
if (qdf_is_macaddr_zero((struct qdf_mac_addr *)peer->mldaddr))
return true;
else
return false;
}
#else
static inline
bool sap_check_peer_for_peer_null_mldaddr(struct wlan_objmgr_peer *peer)
{
return true;
}
#endif
static
QDF_STATUS sap_populate_peer_assoc_info(struct mac_context *mac_ctx,
struct csr_roam_info *csr_roaminfo,
struct sap_event *sap_ap_event)
{
struct wlan_objmgr_peer *peer;
tSap_StationAssocReassocCompleteEvent *reassoc_complete;
reassoc_complete =
&sap_ap_event->sapevt.sapStationAssocReassocCompleteEvent;
peer = wlan_objmgr_get_peer_by_mac(mac_ctx->psoc,
csr_roaminfo->peerMac.bytes,
WLAN_LEGACY_MAC_ID);
if (!peer) {
sap_err("Peer object not found");
return QDF_STATUS_E_FAILURE;
}
sap_debug("mlo peer assoc:%d", wlan_peer_mlme_is_assoc_peer(peer));
if (sap_check_peer_for_peer_null_mldaddr(peer) ||
wlan_peer_mlme_is_assoc_peer(peer)) {
if (csr_roaminfo->assocReqLength < ASSOC_REQ_IE_OFFSET) {
sap_err("Invalid assoc request length:%d",
csr_roaminfo->assocReqLength);
wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID);
return QDF_STATUS_E_INVAL;
}
reassoc_complete->ies_len = (csr_roaminfo->assocReqLength -
ASSOC_REQ_IE_OFFSET);
reassoc_complete->ies = (csr_roaminfo->assocReqPtr +
ASSOC_REQ_IE_OFFSET);
/* skip current AP address in reassoc frame */
if (csr_roaminfo->fReassocReq) {
reassoc_complete->ies_len -= QDF_MAC_ADDR_SIZE;
reassoc_complete->ies += QDF_MAC_ADDR_SIZE;
}
}
if (csr_roaminfo->addIELen) {
if (wlan_get_vendor_ie_ptr_from_oui(
SIR_MAC_P2P_OUI, SIR_MAC_P2P_OUI_SIZE,
csr_roaminfo->paddIE, csr_roaminfo->addIELen)) {
reassoc_complete->staType = eSTA_TYPE_P2P_CLI;
} else {
reassoc_complete->staType = eSTA_TYPE_INFRA;
}
}
wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID);
return QDF_STATUS_SUCCESS;
}
/**
* sap_signal_hdd_event() - send event notification
* @sap_ctx: Sap Context
@@ -1932,6 +2005,13 @@ QDF_STATUS sap_signal_hdd_event(struct sap_context *sap_ctx,
return QDF_STATUS_E_ABORTED;
}
qdf_status = sap_populate_peer_assoc_info(mac_ctx, csr_roaminfo,
sap_ap_event);
if (QDF_IS_STATUS_ERROR(qdf_status)) {
qdf_mem_free(sap_ap_event);
return QDF_STATUS_E_INVAL;
}
reassoc_complete =
&sap_ap_event->sapevt.sapStationAssocReassocCompleteEvent;
@@ -1951,33 +2031,6 @@ QDF_STATUS sap_signal_hdd_event(struct sap_context *sap_ctx,
reassoc_complete->staId = csr_roaminfo->staId;
reassoc_complete->status_code = csr_roaminfo->status_code;
if (csr_roaminfo->assocReqLength < ASSOC_REQ_IE_OFFSET) {
sap_err("Invalid assoc request length:%d",
csr_roaminfo->assocReqLength);
qdf_mem_free(sap_ap_event);
return QDF_STATUS_E_INVAL;
}
reassoc_complete->ies_len = (csr_roaminfo->assocReqLength -
ASSOC_REQ_IE_OFFSET);
reassoc_complete->ies = (csr_roaminfo->assocReqPtr +
ASSOC_REQ_IE_OFFSET);
/* skip current AP address in reassoc frame */
if (csr_roaminfo->fReassocReq) {
reassoc_complete->ies_len -= QDF_MAC_ADDR_SIZE;
reassoc_complete->ies += QDF_MAC_ADDR_SIZE;
}
if (csr_roaminfo->addIELen) {
if (wlan_get_vendor_ie_ptr_from_oui(
SIR_MAC_P2P_OUI, SIR_MAC_P2P_OUI_SIZE,
csr_roaminfo->paddIE, csr_roaminfo->addIELen)) {
reassoc_complete->staType = eSTA_TYPE_P2P_CLI;
} else {
reassoc_complete->staType = eSTA_TYPE_INFRA;
}
}
/* also fill up the channel info from the csr_roamInfo */
chaninfo = &reassoc_complete->chan_info;