ソースを参照

qcacld-3.0: ARP response dropped at host driver

ARP response dropped at OSIF due to non-availability
of sta entry with MLD address.
Added sta entry in OSIF/HDD context with MLD address.

Change-Id: Iff70197ca5707b88ea80b42a60a2b1fb383f00a9
CRs-Fixed: 3017249
Bing Sun 3 年 前
コミット
5a436dd523

+ 30 - 0
core/hdd/src/wlan_hdd_hostapd.c

@@ -2348,6 +2348,21 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
 				hdd_err("Failed to register STA %d "
 					QDF_MAC_ADDR_FMT, qdf_status,
 					QDF_MAC_ADDR_REF(wrqu.addr.sa_data));
+#ifdef WLAN_FEATURE_11BE_MLO
+			hdd_debug("Registering STA MLD :" QDF_MAC_ADDR_FMT,
+				  QDF_MAC_ADDR_REF(event->sta_mld.bytes));
+			qdf_status = hdd_softap_register_sta(
+						adapter,
+						true,
+						ap_ctx->privacy,
+						(struct qdf_mac_addr *)
+						&event->sta_mld,
+						event);
+			if (!QDF_IS_STATUS_SUCCESS(qdf_status))
+				hdd_err("Failed to register STA MLD %d "
+					QDF_MAC_ADDR_FMT, qdf_status,
+					QDF_MAC_ADDR_REF(event->sta_mld.bytes));
+#endif
 		} else {
 			qdf_status = hdd_softap_register_sta(
 						adapter,
@@ -2360,6 +2375,21 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
 				hdd_err("Failed to register STA %d "
 					QDF_MAC_ADDR_FMT, qdf_status,
 					QDF_MAC_ADDR_REF(wrqu.addr.sa_data));
+#ifdef WLAN_FEATURE_11BE_MLO
+			hdd_debug("Registering STA MLD :" QDF_MAC_ADDR_FMT,
+				  QDF_MAC_ADDR_REF(event->sta_mld.bytes));
+			qdf_status = hdd_softap_register_sta(
+						adapter,
+						false,
+						ap_ctx->privacy,
+						(struct qdf_mac_addr *)
+						&event->sta_mld,
+						event);
+			if (!QDF_IS_STATUS_SUCCESS(qdf_status))
+				hdd_err("Failed to register STA MLD %d "
+					QDF_MAC_ADDR_FMT, qdf_status,
+					QDF_MAC_ADDR_REF(event->sta_mld.bytes));
+#endif
 		}
 
 		sta_id = event->staId;

+ 1 - 0
core/mac/inc/sir_api.h

@@ -1077,6 +1077,7 @@ struct assoc_ind {
 	uint32_t owe_ie_len;
 	uint16_t owe_status;
 	bool need_assoc_rsp_tx_cb;
+	tSirMacAddr peer_mld_addr;
 };
 
 /**

+ 4 - 0
core/mac/src/pe/lim/lim_process_assoc_req_frame.c

@@ -2951,6 +2951,10 @@ bool lim_fill_lim_assoc_ind_params(
 
 	qdf_mem_copy((uint8_t *)assoc_ind->peerMacAddr,
 		     (uint8_t *)sta_ds->staAddr, sizeof(tSirMacAddr));
+#ifdef WLAN_FEATURE_11BE_MLO
+	qdf_mem_copy((uint8_t *)assoc_ind->peer_mld_addr,
+		     (uint8_t *)sta_ds->mld_addr, sizeof(tSirMacAddr));
+#endif
 	assoc_ind->aid = sta_ds->assocId;
 	qdf_mem_copy((uint8_t *)&assoc_ind->ssId,
 		     (uint8_t *)&assoc_req->ssId,

+ 4 - 1
core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c

@@ -724,7 +724,10 @@ lim_fill_sme_assoc_ind_params(
 	/* Fill in peerMacAddr */
 	qdf_mem_copy(sme_assoc_ind->peerMacAddr, assoc_ind->peerMacAddr,
 		sizeof(tSirMacAddr));
-
+#ifdef WLAN_FEATURE_11BE_MLO
+	qdf_mem_copy(sme_assoc_ind->peer_mld_addr, assoc_ind->peer_mld_addr,
+		     sizeof(tSirMacAddr));
+#endif
 	/* Fill in aid */
 	sme_assoc_ind->aid = assoc_ind->aid;
 	/* Fill in bssId */

+ 3 - 0
core/mac/src/pe/lim/lim_types.h

@@ -245,6 +245,9 @@ typedef struct sLimMlmAssocInd {
 	tDot11fIEVHTCaps vht_caps;
 	bool he_caps_present;
 	bool is_sae_authenticated;
+#ifdef WLAN_FEATURE_11BE_MLO
+	tSirMacAddr peer_mld_addr;
+#endif
 } tLimMlmAssocInd, *tpLimMlmAssocInd;
 
 typedef struct sLimMlmReassocReq {

+ 1 - 0
core/sap/inc/sap_api.h

@@ -281,6 +281,7 @@ typedef struct sap_StationAssocReassocCompleteEvent_s {
 	tDot11fIEVHTCaps vht_caps;
 	tSirMacCapabilityInfo capability_info;
 	bool he_caps_present;
+	struct qdf_mac_addr sta_mld;
 } tSap_StationAssocReassocCompleteEvent;
 
 typedef struct sap_StationDisassocCompleteEvent_s {

+ 6 - 0
core/sap/src/sap_fsm.c

@@ -1805,6 +1805,12 @@ QDF_STATUS sap_signal_hdd_event(struct sap_context *sap_ctx,
 
 		qdf_copy_macaddr(&reassoc_complete->staMac,
 				 &csr_roaminfo->peerMac);
+#ifdef WLAN_FEATURE_11BE_MLO
+		qdf_copy_macaddr(&reassoc_complete->sta_mld,
+				 &csr_roaminfo->peer_mld);
+		sap_debug("reassoc_complete->staMld: " QDF_MAC_ADDR_FMT,
+			  QDF_MAC_ADDR_REF(reassoc_complete->sta_mld.bytes));
+#endif
 		reassoc_complete->staId = csr_roaminfo->staId;
 		reassoc_complete->status_code = csr_roaminfo->status_code;
 

+ 4 - 0
core/sme/inc/csr_api.h

@@ -591,6 +591,7 @@ struct csr_roam_info {
 	struct sir_sae_info *sae_info;
 #endif
 	struct assoc_ind *owe_pending_assoc_ind;
+	struct qdf_mac_addr peer_mld;
 };
 
 typedef struct sSirSmeAssocIndToUpperLayerCnf {
@@ -630,6 +631,9 @@ typedef struct sSirSmeAssocIndToUpperLayerCnf {
 	tDot11fIEVHTCaps vht_caps;
 	tSirMacCapabilityInfo capability_info;
 	bool he_caps_present;
+#ifdef WLAN_FEATURE_11BE_MLO
+	tSirMacAddr peer_mld_addr;
+#endif
 } tSirSmeAssocIndToUpperLayerCnf, *tpSirSmeAssocIndToUpperLayerCnf;
 
 typedef struct tagCsrSummaryStatsInfo {

+ 9 - 0
core/sme/src/csr/csr_api_roam.c

@@ -3661,6 +3661,11 @@ void csr_roam_joined_state_msg_processor(struct mac_context *mac, void *msg_buf)
 		qdf_mem_copy(roam_info->peerMac.bytes,
 			     pUpperLayerAssocCnf->peerMacAddr,
 			     sizeof(tSirMacAddr));
+#ifdef WLAN_FEATURE_11BE_MLO
+		qdf_mem_copy(roam_info->peer_mld.bytes,
+			     pUpperLayerAssocCnf->peer_mld_addr,
+			     sizeof(tSirMacAddr));
+#endif
 		qdf_mem_copy(&roam_info->bssid,
 			     pUpperLayerAssocCnf->bssId,
 			     sizeof(struct qdf_mac_addr));
@@ -4190,6 +4195,10 @@ csr_send_assoc_ind_to_upper_layer_cnf_msg(struct mac_context *mac,
 	qdf_mem_copy(&cnf->bssId, &ind->bssId, sizeof(cnf->bssId));
 	qdf_mem_copy(&cnf->peerMacAddr, &ind->peerMacAddr,
 		     sizeof(cnf->peerMacAddr));
+#ifdef WLAN_FEATURE_11BE_MLO
+	qdf_mem_copy(&cnf->peer_mld_addr, &ind->peer_mld_addr,
+		     sizeof(cnf->peer_mld_addr));
+#endif
 	cnf->aid = ind->staId;
 	cnf->wmmEnabledSta = ind->wmmEnabledSta;
 	cnf->rsnIE = ind->rsnIE;