提交 05c86954 编写于 作者: D d00388217 提交者: public tcshversion

TicketNo:DTS2020062703140

Description:switch  message
Team:OTHERS
Feature or Bugfix:Bugfix
Binary Source:No
PrivateCode(Yes/No):No

Change-Id: I025126b0bdddfa47e47e0673f6d0dda6502aa800
Reviewed-on: http://mgit-tm.rnd.huawei.com/9900529Tested-by: Npublic jenkins <public_jenkins@notesmail.huawei.com>
Reviewed-by: Nfengyonghui 00506037 <fengyonghui@huawei.com>
Reviewed-by: Ngonghui 00223882 <Allenhui.gonghui@huawei.com>
上级 cf4c14d8
......@@ -11,7 +11,7 @@ action("wpa_supplicant-2.9"){
"--command=$cmd"
]
outputs = [ "$target_out_dir/wpa_supplicant_build_file_log.txt" ]
deps = ["//drivers/hdf/lite/message:message_engine_shared"]
deps = ["//drivers/hdf/lite/manager:hdf_core"]
script = "//build/lite/build_ext_components.py"
}
......
......@@ -32,10 +32,13 @@ CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/include)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/include/utils)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/include/osal)
CFLAGS += -I$(abspath ../../../../third_party/bounds_checking_function/include)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/ability/message/include)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/ability/sbuf/include)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/include/core)
CFLAGS += -I$(abspath ../../../../drivers/hdf/lite/adapter/syscall/include)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/core/shared/include)
CFLAGS += -shared -fPIC
CFLAGS += -DUSERSPACE_CLIENT_SUPPORT
LIBS += -L$(DEPDIR) -lmessage_engine -lhdf_osal -lsec_shared
LIBS += -L$(DEPDIR) -lhdf_core -lhdf_osal -lsec_shared
export BINDIR ?= /usr/local/bin/
......
......@@ -227,8 +227,8 @@ static inline int32_t IsApInterface(int32_t mode)
return ((mode) == WIFI_IFTYPE_AP || (mode) == WIFI_IFTYPE_P2P_GO);
}
static int32_t WifiWpaSetKey(const char *ifname, void *priv, enum wpa_alg alg, const uint8_t *addr,
int32_t keyIdx, int32_t setTx, const uint8_t *seq, size_t seqLen, const uint8_t *key, size_t keyLen)
static int32_t WifiWpaSetKey(const char *ifname, void *priv, enum wpa_alg alg, const uint8_t *addr, int32_t keyIdx,
int32_t setTx, const uint8_t *seq, size_t seqLen, const uint8_t *key, size_t keyLen)
{
int32_t ret;
WifiKeyExt *keyExt = NULL;
......@@ -288,7 +288,6 @@ static void WifiWpaReceiveEapol(void *ctx, const uint8_t *srcAddr, const uint8_t
static void WifiWpaPreInit(const WifiDriverData *drv)
{
int32_t ret;
WifiSetMode setMode;
WifiSetNewDev info;
......@@ -390,8 +389,7 @@ failed:
WifiWpaDeinit(drv);
return NULL;
}
static int32_t WifiWpaDeauthenticate(void *priv, const uint8_t *addr, int32_t reasonCode)
static int32_t WifiWpaDeauthenticate(void *priv, const uint8_t *addr, uint16_t reasonCode)
{
int32_t ret;
WifiDriverData *drv = priv;
......@@ -516,8 +514,7 @@ static int32_t WifiWpaAssocParamCryptoSet(const struct wpa_driver_associate_para
assocParams->crypto->cipherGroup = WifiCipherToCipherSuite(params->group_suite);
}
if (params->key_mgmt_suite == WPA_KEY_MGMT_PSK ||
params->key_mgmt_suite == WPA_KEY_MGMT_SAE ||
if (params->key_mgmt_suite == WPA_KEY_MGMT_PSK || params->key_mgmt_suite == WPA_KEY_MGMT_SAE ||
params->key_mgmt_suite == WPA_KEY_MGMT_PSK_SHA256) {
switch (params->key_mgmt_suite) {
case WPA_KEY_MGMT_PSK_SHA256:
......@@ -698,10 +695,9 @@ static int32_t WifiWpaDisconnet(WifiDriverData *drv, uint16_t reasonCode)
wpa_printf(MSG_INFO, "WifiWpaDisconnet done ret=%d", ret);
return ret;
}
static int32_t WifiWpaAssociate(void *priv, struct wpa_driver_associate_params *params)
static int WifiWpaAssociate(void *priv, struct wpa_driver_associate_params *params)
{
int32_t ret;
int ret;
WifiDriverData *drv = priv;
if ((drv == NULL) || (params == NULL)) {
......@@ -728,8 +724,7 @@ static const uint8_t *WifiWpaGetMacAddr(void *priv)
return drv->ownAddr;
}
int32_t WifiWpaWpaSendEapol(void *priv, const uint8_t *dest, uint16_t proto, const uint8_t *data,
uint32_t dataLen)
int32_t WifiWpaWpaSendEapol(void *priv, const uint8_t *dest, uint16_t proto, const uint8_t *data, uint32_t dataLen)
{
WifiDriverData *drv = priv;
int32_t ret;
......@@ -799,14 +794,14 @@ static void WifiWpaHwFeatureDataFree(struct hostapd_hw_modes **modes, uint16_t n
*modes = NULL;
}
static struct hostapd_hw_modes *WifiWpaGetHwFeatureData(void *priv, uint16_t *numModes, uint16_t *flags)
static struct hostapd_hw_modes *WifiWpaGetHwFeatureData(void *priv, uint16_t *numModes, uint16_t *flags, uint8_t *dfs)
{
WifiModes modesData[] = {{12, HOSTAPD_MODE_IEEE80211G}, {4, HOSTAPD_MODE_IEEE80211B}};
size_t loop;
uint32_t index;
WifiHwFeatureData hwFeatureData;
WifiDriverData *drv = (WifiDriverData *)priv;
(void)dfs;
if ((priv == NULL) || (numModes == NULL) || (flags == NULL)) {
return NULL;
}
......@@ -854,8 +849,8 @@ static struct hostapd_hw_modes *WifiWpaGetHwFeatureData(void *priv, uint16_t *nu
return modes;
}
static int32_t WifiWpaSendMlme(void *priv, const uint8_t *data, size_t dataLen, int32_t noack,
uint32_t freq, const uint16_t *csaOffs, size_t csaOffsLen)
static int32_t WifiWpaSendMlme(void *priv, const uint8_t *data, size_t dataLen, int32_t noack, uint32_t freq,
const uint16_t *csaOffs, size_t csaOffsLen)
{
int32_t ret;
WifiDriverData *drv = priv;
......@@ -930,8 +925,8 @@ static struct wpa_scan_results *WifiWpaGetScanResults2(void *priv)
results = NULL;
return NULL;
}
rc = memcpy_s(results->res, results->num * sizeof(struct wpa_scan_res *),
drv->scanRes, results->num * sizeof(struct wpa_scan_res *));
rc = memcpy_s(results->res, results->num * sizeof(struct wpa_scan_res *), drv->scanRes,
results->num * sizeof(struct wpa_scan_res *));
if (rc != EOK) {
os_free(results->res);
os_free(results);
......@@ -973,8 +968,7 @@ static int32_t WifiWpaScanProcessSsid(struct wpa_driver_scan_params *params, Wif
params->ssids[loop].ssid_len = MAX_SSID_LEN;
}
if (params->ssids[loop].ssid_len) {
rc = memcpy_s(scan->ssids[loop].ssid, MAX_SSID_LEN,
params->ssids[loop].ssid, params->ssids[loop].ssid_len);
rc = memcpy_s(scan->ssids[loop].ssid, MAX_SSID_LEN, params->ssids[loop].ssid, params->ssids[loop].ssid_len);
if (rc != EOK) {
return -EFAIL;
}
......@@ -1100,10 +1094,8 @@ static int32_t WifiWpaScan2(void *priv, struct wpa_driver_scan_params *params)
if (scan == NULL) {
return -EFAIL;
}
if ((WifiWpaScanProcessSsid(params, scan) != SUCC) ||
(WifiWpaScanProcessBssid(params, scan) != SUCC) ||
(WifiWpaScanProcessExtraIes(params, scan) != SUCC) ||
(WifiWpaScanProcessFreq(params, scan) != SUCC)) {
if ((WifiWpaScanProcessSsid(params, scan) != SUCC) || (WifiWpaScanProcessBssid(params, scan) != SUCC) ||
(WifiWpaScanProcessExtraIes(params, scan) != SUCC) || (WifiWpaScanProcessFreq(params, scan) != SUCC)) {
WifiWpaScanFree(&scan);
return -EFAIL;
}
......@@ -1146,8 +1138,8 @@ static int WifiSetApBeaconData(WifiApSetting *apsettings, const struct wpa_drive
if (apsettings->beaconData.head == NULL) {
return -EFAIL;
}
if (memcpy_s(apsettings->beaconData.head, apsettings->beaconData.headLen,
params->head, params->head_len) != EOK) {
if (memcpy_s(apsettings->beaconData.head, apsettings->beaconData.headLen, params->head, params->head_len) !=
EOK) {
return -EFAIL;
}
}
......@@ -1158,8 +1150,8 @@ static int WifiSetApBeaconData(WifiApSetting *apsettings, const struct wpa_drive
if (apsettings->beaconData.tail == NULL) {
return -EFAIL;
}
if (memcpy_s(apsettings->beaconData.tail, apsettings->beaconData.tailLen,
params->tail, params->tail_len) != EOK) {
if (memcpy_s(apsettings->beaconData.tail, apsettings->beaconData.tailLen, params->tail, params->tail_len) !=
EOK) {
return -EFAIL;
}
}
......@@ -1407,8 +1399,8 @@ static void WifiWpaHapdDeinit(void *priv)
wpa_printf(MSG_INFO, "WifiWpaHapdDeinit done");
}
static int32_t WifiWpaHapdSendEapol(void *priv, const uint8_t *addr, const uint8_t *data, size_t dataLen,
int encrypt, const uint8_t *ownAddr, uint32_t flags)
static int32_t WifiWpaHapdSendEapol(void *priv, const uint8_t *addr, const uint8_t *data, size_t dataLen, int encrypt,
const uint8_t *ownAddr, uint32_t flags)
{
WifiDriverData *drv = priv;
int32_t ret;
......@@ -1502,10 +1494,10 @@ static void WifiActionDataBufFree(WifiActionData *actionData)
}
}
static int32_t WifiWpaSendAction(void *priv, uint32_t freq, uint32_t wait, const uint8_t *dst,
const uint8_t *src, const uint8_t *bssid, const uint8_t *data, size_t dataLen, int32_t noCck)
static int32_t WifiWpaSendAction(void *priv, uint32_t freq, uint32_t wait, const uint8_t *dst, const uint8_t *src,
const uint8_t *bssid, const uint8_t *data, size_t dataLen, int32_t noCck)
{
WifiActionData actionData = {0};
WifiActionData actionData = { 0 };
WifiDriverData *drv = NULL;
int32_t ret;
......
......@@ -33,7 +33,6 @@ extern "C" {
#define MAX_SSID_LEN 32
#define MAX_NR_CIPHER_SUITES 5
#define MAX_NR_AKM_SUITES 2
#define WPAS_MAX_SCAN_SSIDS 2
#define IFNAMSIZ 16
#define WEP_KEY_NUM 4
#define DEFAULT_NUM_MODES 2
......
......@@ -17,6 +17,7 @@
#include "driver.h"
#include "common.h"
#include "eloop.h"
#include "utils/hdf_base.h"
#include "l2_packet/l2_packet.h"
#include "wpa_hal.h"
#include "securec.h"
......@@ -36,25 +37,23 @@ static inline int IsZeroAddr(const uint8_t *addr, const uint8_t len)
return !(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
}
static void WifiWpaEventNewStaProcess(const WifiDriverData *drv, const DataBlock *reqData)
static void WifiWpaEventNewStaProcess(const WifiDriverData *drv, struct HdfSBuf *reqData)
{
WifiNewStaInfo staInfo;
union wpa_event_data event;
uint32_t len = 0;
int32_t rc;
(void)memset_s(&event, sizeof(union wpa_event_data), 0, sizeof(union wpa_event_data));
if (PopNextU32Segment(reqData, &staInfo.reassoc) != ME_SUCCESS) {
if (!HdfSbufReadInt32(reqData, &staInfo.reassoc)) {
wpa_printf(MSG_ERROR, "%s: fail to get reassoc", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (PopNextSegment(reqData, &staInfo.ie, &staInfo.ieLen) != ME_SUCCESS) {
if (!HdfSbufReadBuffer(reqData, (const void **)(&staInfo.ie), &staInfo.ieLen)) {
wpa_printf(MSG_ERROR, "%s: fail to get ie", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if ((PopNextSegment(reqData, &staInfo.macAddr, &len) != ME_SUCCESS) || (len != ETH_ADDR_LEN)) {
if (!HdfSbufReadBuffer(reqData, (const void **)(&staInfo.macAddr), &len) || (len != ETH_ADDR_LEN)) {
wpa_printf(MSG_ERROR, "%s: fail to get macAddr", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (IsZeroAddr(staInfo.macAddr, ETH_ADDR_LEN)) {
......@@ -69,15 +68,15 @@ static void WifiWpaEventNewStaProcess(const WifiDriverData *drv, const DataBlock
wpa_printf(MSG_INFO, "WifiWpaEventNewStaProcess done");
}
static void WifiWpaEventDelStaProcess(const WifiDriverData *drv, const DataBlock *reqData)
static void WifiWpaEventDelStaProcess(const WifiDriverData *drv, struct HdfSBuf *reqData)
{
union wpa_event_data event;
uint32_t len = 0;
(void)memset_s(&event, sizeof(union wpa_event_data), 0, sizeof(union wpa_event_data));
if ((PopNextSegment(reqData, &event.disassoc_info.addr, &len) != ME_SUCCESS) || (len != ETH_ADDR_LEN)) {
if ((!HdfSbufReadBuffer(reqData, (const void **)(&event.disassoc_info.addr), &len)) || (len != ETH_ADDR_LEN)) {
wpa_printf(MSG_ERROR, "%s: fail to get macAddr", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (drv->ctx != NULL) {
wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, &event);
......@@ -85,23 +84,23 @@ static void WifiWpaEventDelStaProcess(const WifiDriverData *drv, const DataBlock
}
}
static void WifiWpaEventRxMgmtProcess(const WifiDriverData *drv, const DataBlock *reqData)
static void WifiWpaEventRxMgmtProcess(const WifiDriverData *drv, struct HdfSBuf *reqData)
{
WifiRxMgmt rxMgmt;
union wpa_event_data event;
(void)memset_s(&event, sizeof(union wpa_event_data), 0, sizeof(union wpa_event_data));
if (PopNextU32Segment(reqData, &rxMgmt.freq) != ME_SUCCESS) {
if (!HdfSbufReadInt32(reqData, &rxMgmt.freq)) {
wpa_printf(MSG_ERROR, "%s: fail to get freq", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (PopNextU32Segment(reqData, &rxMgmt.sigMbm) != ME_SUCCESS) {
if (!HdfSbufReadInt32(reqData, &rxMgmt.sigMbm)) {
wpa_printf(MSG_ERROR, "%s: fail to get sigMbm", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (PopNextSegment(reqData, &rxMgmt.buf, &rxMgmt.len) != ME_SUCCESS) {
if (!HdfSbufReadBuffer(reqData, (const void **)(&rxMgmt.buf), &rxMgmt.len)) {
wpa_printf(MSG_ERROR, "%s: fail to get buf", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
event.rx_mgmt.frame = rxMgmt.buf;
......@@ -113,21 +112,21 @@ static void WifiWpaEventRxMgmtProcess(const WifiDriverData *drv, const DataBlock
wpa_printf(MSG_INFO, "WifiWpaEventRxMgmtProcess done");
}
static void WifiWpaEventTxStatusProcess(const WifiDriverData *drv, const DataBlock *reqData)
static void WifiWpaEventTxStatusProcess(const WifiDriverData *drv, struct HdfSBuf *reqData)
{
uint16_t fc;
struct ieee80211_hdr *hdr = NULL;
WifiTxStatus txStatus = {0};
WifiTxStatus txStatus = { 0 };
union wpa_event_data event;
(void)memset_s(&event, sizeof(union wpa_event_data), 0, sizeof(union wpa_event_data));
if (PopNextU8Segment(reqData, &txStatus.ack) != ME_SUCCESS) {
if (!HdfSbufReadUint8(reqData, &txStatus.ack)) {
wpa_printf(MSG_ERROR, "%s: fail to get ack", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (PopNextSegment(reqData, &txStatus.buf, &txStatus.len) != ME_SUCCESS) {
if (!HdfSbufReadBuffer(reqData, (const void **)(&txStatus.buf), &txStatus.len)) {
wpa_printf(MSG_ERROR, "%s: fail to get buf", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
hdr = (struct ieee80211_hdr *)txStatus.buf;
......@@ -144,7 +143,7 @@ static void WifiWpaEventTxStatusProcess(const WifiDriverData *drv, const DataBlo
}
static void WifiWpaEventScanDoneProcess(WifiDriverData *drv, const DataBlock *reqData)
static void WifiWpaEventScanDoneProcess(WifiDriverData *drv, struct HdfSBuf *reqData)
{
uint32_t status = 0;
......@@ -152,7 +151,7 @@ static void WifiWpaEventScanDoneProcess(WifiDriverData *drv, const DataBlock *re
wpa_printf(MSG_ERROR, "%s: ctx is null", __func__);
return;
}
if (PopNextU32Segment(reqData, &status) != ME_SUCCESS) {
if (!HdfSbufReadUint32(reqData, &status)) {
wpa_printf(MSG_ERROR, "%s: fail to get status", __func__);
return;
}
......@@ -166,54 +165,52 @@ static void WifiWpaEventScanDoneProcess(WifiDriverData *drv, const DataBlock *re
}
static int32_t WifiScanResultParse(WifiScanResult *scanResult, uint8_t **ie, uint8_t **beaconIe,
const DataBlock *reqData)
struct HdfSBuf *reqData)
{
uint32_t len = 0;
errno_t rc;
if (scanResult == NULL || ie == NULL || beaconIe == NULL) {
return -EFAIL;
}
if (PopNextU16Segment(reqData, &(scanResult->beaconInt)) != ME_SUCCESS) {
if (!HdfSbufReadInt16(reqData, &(scanResult->beaconInt))) {
wpa_printf(MSG_ERROR, "%s: fail to get beaconInt", __func__);
return ME_ERROR_PARA_WRONG;
return HDF_FAILURE;
}
if (PopNextU16Segment(reqData, &(scanResult->caps)) != ME_SUCCESS) {
if (!HdfSbufReadInt16(reqData, &(scanResult->caps))) {
wpa_printf(MSG_ERROR, "%s: fail to get caps", __func__);
return ME_ERROR_PARA_WRONG;
return HDF_FAILURE;
}
if (PopNextU32Segment(reqData, &(scanResult->level)) != ME_SUCCESS) {
if (!HdfSbufReadInt32(reqData, &(scanResult->level))) {
wpa_printf(MSG_ERROR, "%s: fail to get level", __func__);
return ME_ERROR_PARA_WRONG;
return HDF_FAILURE;
}
if (PopNextU32Segment(reqData, &(scanResult->freq)) != ME_SUCCESS) {
if (!HdfSbufReadInt32(reqData, &(scanResult->freq))) {
wpa_printf(MSG_ERROR, "%s: fail to get freq", __func__);
return ME_ERROR_PARA_WRONG;
return HDF_FAILURE;
}
if (PopNextU32Segment(reqData, &(scanResult->flags)) != ME_SUCCESS) {
if (!HdfSbufReadInt32(reqData, &(scanResult->flags))) {
wpa_printf(MSG_ERROR, "%s: fail to get flags", __func__);
return ME_ERROR_PARA_WRONG;
return HDF_FAILURE;
}
if ((PopNextSegment(reqData, &(scanResult->bssid), &len) != ME_SUCCESS) || len != ETH_ADDR_LEN) {
if ((!HdfSbufReadBuffer(reqData, (const void **)(&(scanResult->bssid)), &len)) || len != ETH_ADDR_LEN) {
wpa_printf(MSG_ERROR, "%s: fail to get bssid", __func__);
return ME_ERROR_PARA_WRONG;
return HDF_FAILURE;
}
if (PopNextSegment(reqData, ie, &(scanResult->ieLen)) != ME_SUCCESS) {
if (!HdfSbufReadBuffer(reqData, (const void **)ie, &(scanResult->ieLen))) {
wpa_printf(MSG_ERROR, "%s: fail to get ie", __func__);
return ME_ERROR_PARA_WRONG;
return HDF_FAILURE;
}
if (PopNextSegment(reqData, beaconIe, &(scanResult->beaconIeLen)) != ME_SUCCESS) {
if (!HdfSbufReadBuffer(reqData, (const void **)beaconIe, &(scanResult->beaconIeLen))) {
wpa_printf(MSG_ERROR, "%s: fail to get beaconIe", __func__);
return ME_ERROR_PARA_WRONG;
return HDF_FAILURE;
}
return SUCC;
}
static void WifiWpaEventScanResultProcess(WifiDriverData *drv, const DataBlock *reqData)
static void WifiWpaEventScanResultProcess(WifiDriverData *drv, struct HdfSBuf *reqData)
{
WifiScanResult scanResult = {0};
WifiScanResult scanResult = { 0 };
uint8_t *ie = NULL;
uint8_t *beaconIe = NULL;
struct wpa_scan_res *res = NULL;
......@@ -265,33 +262,33 @@ failed:
}
}
static void WifiWpaEventConnectResultProcess(WifiDriverData *drv, const DataBlock *reqData)
static void WifiWpaEventConnectResultProcess(WifiDriverData *drv, struct HdfSBuf *reqData)
{
WifiConnectResult result = {0};
WifiConnectResult result = { 0 };
union wpa_event_data event;
uint32_t len = 0;
errno_t rc;
(void)memset_s(&event, sizeof(union wpa_event_data), 0, sizeof(union wpa_event_data));
if (PopNextU16Segment(reqData, &(result.status)) != ME_SUCCESS) {
if (!HdfSbufReadUint16(reqData, &(result.status))) {
wpa_printf(MSG_ERROR, "%s: fail to get status", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (PopNextU16Segment(reqData, &(result.freq)) != ME_SUCCESS) {
if (!HdfSbufReadUint16(reqData, &(result.freq))) {
wpa_printf(MSG_ERROR, "%s: fail to get freq", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if ((PopNextSegment(reqData, &(result.bssid), &len) != ME_SUCCESS) || len != ETH_ADDR_LEN) {
if ((!HdfSbufReadBuffer(reqData, (const void **)(&(result.bssid)), &len)) || len != ETH_ADDR_LEN) {
wpa_printf(MSG_ERROR, "%s: fail to get bssid", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (PopNextSegment(reqData, &(result.reqIe), &(result.reqIeLen)) != ME_SUCCESS) {
if (!HdfSbufReadBuffer(reqData, (const void **)(&(result.reqIe)), &(result.reqIeLen))) {
wpa_printf(MSG_ERROR, "%s: fail to get reqIe", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (PopNextSegment(reqData, &(result.respIe), &(result.respIeLen)) != ME_SUCCESS) {
if (!HdfSbufReadBuffer(reqData, (const void **)(&(result.respIe)), &(result.respIeLen))) {
wpa_printf(MSG_ERROR, "%s: fail to get respIe", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (result.status != 0) {
......@@ -314,19 +311,19 @@ static void WifiWpaEventConnectResultProcess(WifiDriverData *drv, const DataBloc
wpa_printf(MSG_INFO, "WifiWpaEventConnectResultProcess done");
}
static void WifiWpaEventDisconnectProcess(WifiDriverData *drv, const DataBlock *reqData)
static void WifiWpaEventDisconnectProcess(WifiDriverData *drv, struct HdfSBuf *reqData)
{
WifiDisconnect result = {0};
WifiDisconnect result = { 0 };
union wpa_event_data event;
(void)memset_s(&event, sizeof(union wpa_event_data), 0, sizeof(union wpa_event_data));
if (PopNextU16Segment(reqData, &(result.reason)) != ME_SUCCESS) {
if (!HdfSbufReadUint16(reqData, &(result.reason))) {
wpa_printf(MSG_ERROR, "%s: fail to get reason", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
if (PopNextSegment(reqData, &(result.ie), &(result.ieLen)) != ME_SUCCESS) {
if (!HdfSbufReadBuffer(reqData, (const void **)(&(result.ie)), &(result.ieLen))) {
wpa_printf(MSG_ERROR, "%s: fail to get bssid", __func__);
return ME_ERROR_PARA_WRONG;
return;
}
drv->associated = WIFI_DISCONNECT;
......@@ -337,15 +334,16 @@ static void WifiWpaEventDisconnectProcess(WifiDriverData *drv, const DataBlock *
wpa_printf(MSG_INFO, "WifiWpaEventDisconnectProcess done");
}
static inline void WifiWpaDriverEventEapolRecvProcess(WifiDriverData *drv, const DataBlock *reqData)
extern void l2_packet_receive(void *eloop_ctx, void *sock_ctx);
static inline void WifiWpaDriverEventEapolRecvProcess(WifiDriverData *drv, struct HdfSBuf *reqData)
{
wpa_printf(MSG_INFO, "WifiWpaDriverEventEapolRecvProcess call");
l2_packet_receive(drv->eapolSock, NULL);
}
int32_t WifiWpaDriverEventProcess(const char *ifname, uint8_t event, const DataBlock *reqData)
int32_t WifiWpaDriverEventProcess(const char *ifname, uint32_t event, struct HdfSBuf *reqData)
{
WifiDriverData *drv = GetDrvData();
WifiDriverData *drv = GetDrvData();
int32_t ret = SUCC;
if (ifname == NULL || drv == NULL || reqData == NULL) {
......
......@@ -12,12 +12,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _WPA_HAL_EVENT_H_
#define _WPA_HAL_EVENT_H_
#include <stdint.h>
#include "message_datablock.h"
#include "hdf_sbuf.h"
#ifdef __cplusplus
#if __cplusplus
......@@ -47,7 +47,7 @@ typedef enum {
WPA_ELOOP_EVENT_BUTT
} WpaEloopEventType;
int32_t WifiWpaDriverEventProcess(const char *ifname, uint8_t event, const DataBlock *reqData);
int32_t WifiWpaDriverEventProcess(const char *ifname, uint32_t event, struct HdfSBuf *reqData);
#ifdef __cplusplus
#if __cplusplus
......
......@@ -15,9 +15,12 @@
#include "wpa_hal_service.h"
#include "wpa_hal_event.h"
#include "sidecar.h"
#include "message_router.h"
#include "hdf_log.h"
#include "hdf_sbuf.h"
#include "utils/hdf_base.h"
#include "hdf_remote_service.h"
#include "hdf_syscall_adapter.h"
#ifdef __cplusplus
#if __cplusplus
......@@ -25,93 +28,73 @@ extern "C" {
#endif
#endif
ErrorCode WifiWpaEventMsg(const RequestContext *context, const DataBlock *reqData, DataBlock *rspData)
int OnWiFiEvents(void *priv, uint32_t id, struct HdfSBuf *data)
{
uint32_t ret;
uint8_t event;
char *ifname = NULL;
uint32_t ifnameLen = 0;
(void)context;
(void)rspData;
if (reqData == NULL) {
(void)priv;
if (data == NULL) {
HDF_LOGE("%s: params is NULL", __func__);
return ME_ERROR_PARA_WRONG;
return HDF_FAILURE;
}
if (PopNextStringSegment(reqData, &ifname, &ifnameLen) != ME_SUCCESS) {
const char *ifname = HdfSbufReadString(data);
if (ifname == NULL) {
HDF_LOGE("%s: fail to get ifname", __func__);
return ME_ERROR_PARA_WRONG;
}
if (PopNextU8Segment(reqData, &event) != ME_SUCCESS) {
HDF_LOGE("%s: fail to get event", __func__);
return ME_ERROR_PARA_WRONG;
return HDF_FAILURE;
}
ret = WifiWpaDriverEventProcess(ifname, event, reqData);
uint32_t ret = WifiWpaDriverEventProcess(ifname, id, data);
if (ret != HDF_SUCCESS) {
HDF_LOGE("WifiWpaEventMsg failed cmd=%u, ret=%d", event, ret);
HDF_LOGE("WifiWpaEventMsg failed cmd=%u, ret=%d", id, ret);
}
return ret;
}
ServiceDefStart(WPAMsg, WPA_MSG_SERVICE_ID)
DUEMessage(WIFI_WPA_EVENT_MSG, WifiWpaEventMsg, 2)
ServiceDefEnd;
static struct HdfRemoteService *g_wifiService = NULL;
const char *DRIVER_SERVICE_NAME = "hdfwifi";
Service *g_wpaService;
static struct HdfDevEventlistener g_wifiEventListener = {
.callBack = OnWiFiEvents,
.priv = NULL
};
int32_t WpaMsgServiceInit(void)
{
int32_t rc;
rc = StartMessageRouter(MESSAGE_NODE_LOCAL | MESSAGE_NODE_REMOTE_USERSPACE_CLIENT);
if (rc != 0) {
HDF_LOGE("%s StartMessageRouter failed rc=%d", __func__, rc);
return rc;
g_wifiService = HdfRemoteServiceBind(DRIVER_SERVICE_NAME, 0);
if (g_wifiService == NULL) {
HDF_LOGE("%s: fail to get remote service!", __func__);
return HDF_FAILURE;
}
ServiceCfg cfg = {
.dispatcherID = DEFAULT_DISPATCHER_ID
};
g_wpaService = CreateService(WPAMsg, &cfg);
if (g_wpaService == NULL) {
HDF_LOGE("%s Create WPAMsg service failed.", __func__);
if (HdfDeviceRegisterEventListener(g_wifiService, &g_wifiEventListener) != HDF_SUCCESS) {
HDF_LOGE("%s: fail to register event listener", __func__);
return HDF_FAILURE;
}
return HDF_SUCCESS;
}
void WpaMsgServiceDeinit(void)
{
if (ShutdownMessageRouter() != HDF_SUCCESS) {
HDF_LOGE("%s failed.", __func__);
if (HdfDeviceUnregisterEventListener(g_wifiService, &g_wifiEventListener)) {
HDF_LOGE("fail to unregister listener");
return;
}
}
int32_t WifiWpaCmdSyncSend(const uint32_t cmd, void *buf, uint32_t len, DataBlock *respData)
{
int32_t ret = HDF_FAILURE;
if (buf == NULL) {
return ret;
}
if (g_wpaService != NULL && g_wpaService->SendSyncMessage != NULL) {
ret = g_wpaService->SendSyncMessage(g_wpaService, WAL_MSG_SERVICE_ID, cmd, buf, len, respData);
}
HDF_LOGI("WifiWpaCmdSyncSend info cmd=%d, ret=%d", cmd, ret);
return ret;
HdfRemoteServiceRecycle(g_wifiService);
}
int32_t WifiWpaCmdBlockSyncSend(const uint32_t cmd, DataBlock *data, DataBlock *respData)
int32_t WifiWpaCmdBlockSyncSend(const uint32_t cmd, struct HdfSBuf *reqData, struct HdfSBuf *respData)
{
if (data == NULL) {
if (reqData == NULL) {
HDF_LOGE("%s params is NULL", __func__);
return HDF_FAILURE;
}
return WifiWpaCmdSyncSend(cmd, data->data, data->size, respData);
if (g_wifiService == NULL || g_wifiService->dispatcher == NULL || g_wifiService->dispatcher->Dispatch == NULL) {
HDF_LOGE("%s:bad remote service found!", __func__);
return HDF_FAILURE;
}
int32_t ret = g_wifiService->dispatcher->Dispatch(&g_wifiService->object, cmd, reqData, respData);
HDF_LOGI("%s: cmd=%d, ret=%d", __func__, cmd, ret);
return ret;
}
#ifdef __cplusplus
......
......@@ -17,7 +17,7 @@
#define _WPA_MSG_SERVICE_H_
#include <stdlib.h>
#include "message_datablock.h"
#include "hdf_sbuf.h"
#ifdef __cplusplus
#if __cplusplus
......@@ -32,8 +32,7 @@ extern "C" {
int32_t WpaMsgServiceInit(void);
void WpaMsgServiceDeinit(void);
int32_t WifiWpaCmdSyncSend(const uint32_t cmd, void *buf, uint32_t len, DataBlock *respData);
int32_t WifiWpaCmdBlockSyncSend(const uint32_t cmd, DataBlock *data, DataBlock *respData);
int32_t WifiWpaCmdBlockSyncSend(const uint32_t cmd, struct HdfSBuf *data, struct HdfSBuf *respData);
#ifdef __cplusplus
#if __cplusplus
......
......@@ -32,11 +32,14 @@ CFLAGS += -I$(abspath ../os_dep/include)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/include)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/include/utils)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/include/osal)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/ability/message/include)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/ability/sbuf/include)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/core/shared/include)
CFLAGS += -I$(abspath ../../../../drivers/hdf/frameworks/include/core)
CFLAGS += -I$(abspath ../../../../drivers/hdf/lite/adapter/syscall/include)
CFLAGS += -I$(abspath ../../../../third_party/bounds_checking_function/include)
CFLAGS += -shared -fPIC
CFLAGS += -DUSERSPACE_CLIENT_SUPPORT
LIBS += -L$(DEPDIR) -lmessage_engine -lhdf_osal -lsec_shared
LIBS += -L$(DEPDIR) -lhdf_core -lhdf_osal -lsec_shared
-include .config
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册