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:

committed by
Madan Koyyalamudi

parent
e088b5ba70
commit
5f647b19ba
@@ -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
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user