diff --git a/wlan/wpa/interfaces/hdi_service/service_common/wpa_common_cmd.c b/wlan/wpa/interfaces/hdi_service/service_common/wpa_common_cmd.c index 426f2eff70489c92647e32a0c23c31478a4e5cc7..97ab3812da02608c9b5536157ffbdb06049c06cf 100644 --- a/wlan/wpa/interfaces/hdi_service/service_common/wpa_common_cmd.c +++ b/wlan/wpa/interfaces/hdi_service/service_common/wpa_common_cmd.c @@ -42,6 +42,7 @@ const int QUOTATION_MARKS_FLAG_YES = 0; const int QUOTATION_MARKS_FLAG_NO = 1; const int MAX_NETWORKS_NUM = 100; +const int MAX_MLO_LINK_NUM = 2; pthread_mutex_t g_interfaceLock = PTHREAD_MUTEX_INITIALIZER; static WpaSsidField g_wpaSsidFields[] = { @@ -1967,3 +1968,33 @@ void ClearHdfWpaRemoteObj(void) } (void)OsalMutexUnlock(&HdfWpaStubDriver()->mutex); } + +int32_t WpaInterfaceGetWpaStaData(struct IWpaInterface *self, const char *ifName, const char *staParam, + char *staData, uint32_t staDataLen) +{ + (void)self; + HDF_LOGI("enter %{public}s ", __func__); + pthread_mutex_lock(&g_interfaceLock); + if (ifName == NULL || staParam == NULL || staData == NULL) { + pthread_mutex_unlock(&g_interfaceLock); + HDF_LOGE("%{public}s: input parameter invalid!", __func__); + return HDF_ERR_INVALID_PARAM; + } + WifiWpaStaInterface *pStaIfc = GetWifiStaInterface(ifName); + if (pStaIfc == NULL) { + pthread_mutex_unlock(&g_interfaceLock); + HDF_LOGE("%{public}s: pStaIfc = NULL", __func__); + return HDF_FAILURE; + } + + int ret = pStaIfc->wpaCliCmdGetWpaStaData(pStaIfc, staParam, staData, staDataLen); + if (ret < 0) { + pthread_mutex_unlock(&g_interfaceLock); + HDF_LOGE("%{public}s: wpaCliCmdGetWpaStaData fail! ret = %{public}d", __func__, ret); + return HDF_FAILURE; + } + + pthread_mutex_unlock(&g_interfaceLock); + HDF_LOGI("%{public}s: wpaCliCmdGetWpaStaData success ret = %{public}d", __func__, ret); + return HDF_SUCCESS; +} diff --git a/wlan/wpa/interfaces/hdi_service/service_common/wpa_common_cmd.h b/wlan/wpa/interfaces/hdi_service/service_common/wpa_common_cmd.h index 424656bef9ce69c788d2c2d0cd7a8dd1a191b4cf..e4f6fa10b2dd31a294e1f644ed15c9519c1a39db 100644 --- a/wlan/wpa/interfaces/hdi_service/service_common/wpa_common_cmd.h +++ b/wlan/wpa/interfaces/hdi_service/service_common/wpa_common_cmd.h @@ -104,6 +104,8 @@ int32_t WpaInterfaceGetRequirePmf(struct IWpaInterface *self, const char *ifName int32_t WpaInterfaceSetCountryCode(struct IWpaInterface *self, const char *ifName, const char *countryCode); int32_t WpaInterfaceReassociate(struct IWpaInterface *self, const char *ifName); int32_t WpaInterfaceStaShellCmd(struct IWpaInterface *self, const char *ifName, const char *cmd); +int32_t WpaInterfaceGetWpaStaData(struct IWpaInterface *self, const char *ifName, const char *staParam, + char *staData, uint32_t staDataLen); void HdfWpaDelRemoteObj(struct IWpaCallback *self); void ClearHdfWpaRemoteObj(void); diff --git a/wlan/wpa/interfaces/hdi_service/service_common/wpa_supplicant_hal.c b/wlan/wpa/interfaces/hdi_service/service_common/wpa_supplicant_hal.c index c80affdf0c3eff446c255edbb3de76ca6516c972..b9ab43019cd0470597576a701e623e9b496a9674 100644 --- a/wlan/wpa/interfaces/hdi_service/service_common/wpa_supplicant_hal.c +++ b/wlan/wpa/interfaces/hdi_service/service_common/wpa_supplicant_hal.c @@ -1552,6 +1552,29 @@ static int WpaCliCmdStaShellCmd(WifiWpaStaInterface *this, const char *params) return WpaCliCmd(cmd, buf, sizeof(buf)); } +static int WpaCliCmdGetWpaStaData(WifiWpaStaInterface *this, const char *argv, char *staData, unsigned int size) +{ + if (this == NULL || argv == NULL || staData == NULL) { + HDF_LOGE("WpaCliCmdGetWpaStaData, interface null ir wpaMloInfo null"); + return -1; + } + char cmd[CMD_BUFFER_SIZE] = {0}; + char buf[REPLY_BUF_LENGTH] = {0}; + if (snprintf_s(cmd, sizeof(cmd), sizeof(cmd) - 1, "IFNAME=%s %s", this->ifname, argv) < 0) { + HDF_LOGE("WpaCliCmdGetWpaStaData, snprintf_s err"); + return -1; + } + if (WpaCliCmd(cmd, buf, sizeof(buf)) != 0) { + HDF_LOGE("WpaCliCmdGetWpaStaData, err"); + return -1; + } + if (strncpy_s(staData, size, buf, sizeof(buf)) != EOK) { + HDF_LOGE("WpaCliCmdGetWpaStaData, copy res err"); + return -1; + } + return 0; +} + WifiWpaStaInterface *GetWifiStaInterface(const char *name) { WifiWpaStaInterface *p = g_wpaStaInterface; @@ -1614,6 +1637,7 @@ WifiWpaStaInterface *GetWifiStaInterface(const char *name) p->wpaCliCmdGetRequirePmf = WpaCliCmdGetRequirePmf; p->wpaCliCmdGetConnectionCapabilities = WpaCliCmdGetConnectionCapabilities; p->wpaCliCmdStaShellCmd = WpaCliCmdStaShellCmd; + p->wpaCliCmdGetWpaStaData = WpaCliCmdGetWpaStaData; p->next = g_wpaStaInterface; g_wpaStaInterface = p; diff --git a/wlan/wpa/interfaces/hdi_service/service_common/wpa_supplicant_hal.h b/wlan/wpa/interfaces/hdi_service/service_common/wpa_supplicant_hal.h index ab5ec8d0c5f63231249ceae11a2a1167107fba4a..ffe09763a76e4ecab8475f303308d6fd64ecc52a 100644 --- a/wlan/wpa/interfaces/hdi_service/service_common/wpa_supplicant_hal.h +++ b/wlan/wpa/interfaces/hdi_service/service_common/wpa_supplicant_hal.h @@ -118,6 +118,7 @@ struct WifiWpaStaInterface { int (*wpaCliCmdGetRequirePmf)(WifiWpaStaInterface *this, int *enable); int (*wpaCliCmdGetConnectionCapabilities)(WifiWpaStaInterface *this, struct ConnectionCapabilities *connectionCap); int (*wpaCliCmdStaShellCmd)(WifiWpaStaInterface *this, const char *params); + int (*wpaCliCmdGetWpaStaData)(WifiWpaStaInterface *this, const char *argv, char *staData, unsigned int size); }; WifiWpaStaInterface *GetWifiStaInterface(const char *name); diff --git a/wlan/wpa/interfaces/hdi_service/wpa_interface_service.c b/wlan/wpa/interfaces/hdi_service/wpa_interface_service.c index ea99099239bb2f88531682e13e055f5cb6ab17e3..90220f9cc8a3d6810e9bdf89bfc5f24b1fa223d1 100644 --- a/wlan/wpa/interfaces/hdi_service/wpa_interface_service.c +++ b/wlan/wpa/interfaces/hdi_service/wpa_interface_service.c @@ -122,6 +122,7 @@ struct IWpaInterface *WpaInterfaceImplGetInstance(void) service->interface.P2pSaveConfig = WpaInterfaceP2pSaveConfig; service->interface.VendorProcessCmd = WpaInterfaceVendorExtProcessCmd; + service->interface.GetWpaStaData = WpaInterfaceGetWpaStaData; return &service->interface; }