wpa_supplicant: remove old version
This commit is contained in:
@@ -1,65 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2008 The Android Open Source Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
ifeq ($(WPA_SUPPLICANT_VERSION),VER_0_8_X)
|
||||
$(warning Build wpa_supplicant_lib...)
|
||||
ifneq ($(BOARD_WPA_SUPPLICANT_DRIVER),)
|
||||
CONFIG_DRIVER_$(BOARD_WPA_SUPPLICANT_DRIVER) := y
|
||||
endif
|
||||
|
||||
WPA_SUPPL_DIR = external/wpa_supplicant_8
|
||||
WPA_SRC_FILE :=
|
||||
|
||||
include $(WPA_SUPPL_DIR)/wpa_supplicant/android.config
|
||||
|
||||
WPA_SUPPL_DIR_INCLUDE = $(WPA_SUPPL_DIR)/src \
|
||||
$(WPA_SUPPL_DIR)/src/common \
|
||||
$(WPA_SUPPL_DIR)/src/drivers \
|
||||
$(WPA_SUPPL_DIR)/src/l2_packet \
|
||||
$(WPA_SUPPL_DIR)/src/utils \
|
||||
$(WPA_SUPPL_DIR)/src/wps \
|
||||
$(WPA_SUPPL_DIR)/wpa_supplicant
|
||||
|
||||
ifdef CONFIG_DRIVER_NL80211
|
||||
WPA_SUPPL_DIR_INCLUDE += external/libnl/include
|
||||
WPA_SRC_FILE += mediatek_driver_cmd_nl80211.c
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DRIVER_WEXT
|
||||
#error doesn't support CONFIG_DRIVER_WEXT
|
||||
endif
|
||||
|
||||
# To force sizeof(enum) = 4
|
||||
L_CFLAGS += -mabi=aapcs-linux
|
||||
|
||||
ifdef CONFIG_ANDROID_LOG
|
||||
L_CFLAGS += -DCONFIG_ANDROID_LOG
|
||||
endif
|
||||
|
||||
########################
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := lib_driver_cmd_mt66xx
|
||||
LOCAL_SHARED_LIBRARIES := libc libcutils
|
||||
LOCAL_CFLAGS := $(L_CFLAGS)
|
||||
LOCAL_SRC_FILES := $(WPA_SRC_FILE)
|
||||
LOCAL_C_INCLUDES := $(WPA_SUPPL_DIR_INCLUDE)
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
########################
|
||||
|
||||
endif
|
||||
@@ -1,439 +0,0 @@
|
||||
/*
|
||||
* Driver interaction with extended Linux CFG8021
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Alternatively, this software may be distributed under the terms of BSD
|
||||
* license.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "mediatek_driver_nl80211.h"
|
||||
#include "wpa_supplicant_i.h"
|
||||
#include "config.h"
|
||||
#include "driver_i.h"
|
||||
|
||||
#ifdef ANDROID
|
||||
#include "android_drv.h"
|
||||
#endif
|
||||
|
||||
/*int send_and_recv_msgs(struct wpa_driver_nl80211_data *drv, struct nl_msg *msg,
|
||||
int (*valid_handler)(struct nl_msg *, void *),
|
||||
void *valid_data);*/
|
||||
|
||||
static int testmode_sta_statistics_handler(struct nl_msg *msg, void *arg)
|
||||
{
|
||||
struct nlattr *tb[NL80211_ATTR_MAX + 1];
|
||||
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
|
||||
struct nlattr *sinfo[NL80211_TESTMODE_STA_STATISTICS_NUM];
|
||||
struct wpa_driver_sta_statistics_s *sta_statistics = (struct wpa_driver_sta_statistics_s *)arg;
|
||||
unsigned char i = 0;
|
||||
static struct nla_policy policy[NL80211_TESTMODE_STA_STATISTICS_NUM] = {
|
||||
[NL80211_TESTMODE_STA_STATISTICS_VERSION] = { .type = NLA_U8 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_MAC] = { .type = NLA_UNSPEC },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_LINK_SCORE] = { .type = NLA_U8 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_FLAG] = { .type = NLA_U32 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_PER] = { .type = NLA_U8 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_RSSI] = { .type = NLA_U8 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_PHY_MODE] = { .type = NLA_U32 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_TX_RATE] = { .type = NLA_U16 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_FAIL_CNT] = { .type = NLA_U32 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_TIMEOUT_CNT] = { .type = NLA_U32 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_AVG_AIR_TIME] = { .type = NLA_U32 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_TOTAL_CNT] = { .type = NLA_U32 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_THRESHOLD_CNT] = { .type = NLA_U32 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_AVG_PROCESS_TIME] = { .type = NLA_U32 },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_TC_EMPTY_CNT_ARRAY] = { .type = NLA_UNSPEC },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_TC_QUE_LEN_ARRAY] = { .type = NLA_UNSPEC },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_TC_AVG_QUE_LEN_ARRAY] = { .type = NLA_UNSPEC },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_TC_CUR_QUE_LEN_ARRAY] = { .type = NLA_UNSPEC },
|
||||
[NL80211_TESTMODE_STA_STATISTICS_RESERVED_ARRAY] = { .type = NLA_UNSPEC }
|
||||
};
|
||||
|
||||
nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
|
||||
genlmsg_attrlen(gnlh, 0), NULL);
|
||||
|
||||
if (!tb[NL80211_ATTR_TESTDATA] ||
|
||||
nla_parse_nested(sinfo, NL80211_TESTMODE_STA_STATISTICS_MAX, tb[NL80211_ATTR_TESTDATA], policy))
|
||||
return NL_SKIP;
|
||||
|
||||
for(i=1; i < NL80211_TESTMODE_STA_STATISTICS_NUM; i++) {
|
||||
if(sinfo[i]) {
|
||||
switch(i) {
|
||||
case NL80211_TESTMODE_STA_STATISTICS_VERSION:
|
||||
sta_statistics->version = nla_get_u8(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_MAC:
|
||||
nla_memcpy(sta_statistics->addr, sinfo[i], ETH_ALEN);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_LINK_SCORE:
|
||||
sta_statistics->link_score = nla_get_u8(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_FLAG:
|
||||
sta_statistics->flag = nla_get_u32(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_PER:
|
||||
sta_statistics->per = nla_get_u8(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_RSSI:
|
||||
sta_statistics->rssi = (((int)nla_get_u8(sinfo[i]) - 220) / 2);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_PHY_MODE:
|
||||
sta_statistics->phy_mode = nla_get_u32(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_TX_RATE:
|
||||
sta_statistics->tx_rate = (((double)nla_get_u16(sinfo[i])) / 2);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_FAIL_CNT:
|
||||
sta_statistics->tx_fail_cnt = nla_get_u32(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_TIMEOUT_CNT:
|
||||
sta_statistics->tx_timeout_cnt = nla_get_u32(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_AVG_AIR_TIME:
|
||||
sta_statistics->tx_avg_air_time = nla_get_u32(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_TOTAL_CNT:
|
||||
sta_statistics->tx_total_cnt = nla_get_u32(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_THRESHOLD_CNT:
|
||||
sta_statistics->tx_exc_threshold_cnt = nla_get_u32(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_AVG_PROCESS_TIME:
|
||||
sta_statistics->tx_avg_process_time = nla_get_u32(sinfo[i]);
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_TC_EMPTY_CNT_ARRAY:
|
||||
nla_memcpy(sta_statistics->tc_buf_full_cnt, sinfo[i], sizeof(sta_statistics->tc_buf_full_cnt));
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_TC_QUE_LEN_ARRAY:
|
||||
nla_memcpy(sta_statistics->tc_que_len, sinfo[i], sizeof(sta_statistics->tc_que_len));
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_TC_AVG_QUE_LEN_ARRAY:
|
||||
nla_memcpy(sta_statistics->tc_avg_que_len, sinfo[i], sizeof(sta_statistics->tc_avg_que_len));
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_TC_CUR_QUE_LEN_ARRAY:
|
||||
nla_memcpy(sta_statistics->tc_cur_que_len, sinfo[i], sizeof(sta_statistics->tc_cur_que_len));
|
||||
break;
|
||||
case NL80211_TESTMODE_STA_STATISTICS_RESERVED_ARRAY:
|
||||
nla_memcpy(sta_statistics->reserved, sinfo[i], sizeof(sta_statistics->reserved));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NL_SKIP;
|
||||
}
|
||||
|
||||
static void * nl80211_cmd(struct wpa_driver_nl80211_data *drv,
|
||||
struct nl_msg *msg, int flags, uint8_t cmd)
|
||||
{
|
||||
return genlmsg_put(msg, 0, 0, drv->global->nl80211_id,
|
||||
0, flags, cmd, 0);
|
||||
}
|
||||
|
||||
static int wpa_driver_nl80211_testmode(void *priv, const u8 *data,
|
||||
size_t data_len)
|
||||
{
|
||||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
struct nl_msg *msg, *cqm = NULL;
|
||||
struct wpa_driver_testmode_params *params;
|
||||
int index;
|
||||
|
||||
msg = nlmsg_alloc();
|
||||
if (!msg)
|
||||
return -1;
|
||||
|
||||
wpa_printf(MSG_DEBUG, "nl80211: Test Mode buflen = %d", data_len);
|
||||
|
||||
nl80211_cmd(drv, msg, 0, NL80211_CMD_TESTMODE);
|
||||
|
||||
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, drv->ifindex);
|
||||
NLA_PUT(msg, NL80211_ATTR_TESTDATA, data_len, data);
|
||||
|
||||
params = (struct wpa_driver_testmode_params *)data;
|
||||
|
||||
/* Mask version field */
|
||||
index = params->hdr.index & BITS(0, 23);
|
||||
|
||||
switch(index) {
|
||||
case 0x10:
|
||||
{
|
||||
struct wpa_driver_get_sta_statistics_params *sta_params = data;
|
||||
|
||||
return 0;// send_and_recv_msgs(drv, msg, testmode_sta_statistics_handler, sta_params->buf);
|
||||
}
|
||||
default:
|
||||
return 0;// send_and_recv_msgs(drv, msg, NULL, NULL);
|
||||
}
|
||||
|
||||
nla_put_failure:
|
||||
return -ENOBUFS;
|
||||
|
||||
}
|
||||
|
||||
static int wpa_driver_nl80211_driver_sw_cmd(void *priv,
|
||||
int set, unsigned long *adr, unsigned long *dat)
|
||||
{
|
||||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
struct wpa_driver_sw_cmd_params params;
|
||||
struct nl_msg *msg, *cqm = NULL;
|
||||
int ret = 0;
|
||||
|
||||
os_memset(¶ms, 0, sizeof(params));
|
||||
|
||||
params.hdr.index = 1;
|
||||
params.hdr.index = params.hdr.index | (0x01 << 24);
|
||||
params.hdr.buflen = sizeof(struct wpa_driver_sw_cmd_params);
|
||||
|
||||
params.adr = *adr;
|
||||
params.data = *dat;
|
||||
|
||||
if(set)
|
||||
params.set = 1;
|
||||
else
|
||||
params.set = 0;
|
||||
|
||||
wpa_driver_nl80211_testmode(priv, (u8 *)¶ms, sizeof(struct wpa_driver_sw_cmd_params));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*************************************************************
|
||||
OVERLAPPED functins, previous defination is in driver_nl80211.c,
|
||||
it will be modified
|
||||
**************************************************************/
|
||||
|
||||
/**************************************************************************/
|
||||
extern int wpa_config_write(const char *name, struct wpa_config *config);
|
||||
|
||||
static int wpa_driver_mediatek_set_country(void *priv, const char *alpha2_arg)
|
||||
{
|
||||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
int ioctl_sock=-1;
|
||||
struct iwreq iwr;
|
||||
int ret=-1;
|
||||
char buf[11];
|
||||
|
||||
wpa_printf(MSG_DEBUG, "wpa_driver_nl80211_set_country");
|
||||
ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
if (ioctl_sock < 0) {
|
||||
wpa_printf(MSG_ERROR, "%s: socket(PF_INET,SOCK_DGRAM)", __func__);
|
||||
return -1;
|
||||
}
|
||||
os_memset(&iwr, 0, sizeof(iwr));
|
||||
os_strncpy(iwr.ifr_name, drv->first_bss.ifname, IFNAMSIZ);
|
||||
sprintf(buf,"COUNTRY %s",alpha2_arg);
|
||||
iwr.u.data.pointer = buf;
|
||||
iwr.u.data.length = strlen(buf);
|
||||
if ((ret = ioctl(ioctl_sock, 0x8B0C, &iwr)) < 0) {//SIOCSIWPRIV
|
||||
wpa_printf(MSG_DEBUG, "ioctl[SIOCSIWPRIV]: %s",buf);
|
||||
close(ioctl_sock);
|
||||
return ret;
|
||||
}
|
||||
else {
|
||||
close(ioctl_sock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extern const struct wpa_driver_ops wpa_driver_nl80211_ops;
|
||||
int wpa_driver_nl80211_driver_cmd(void *priv, char *cmd, char *buf,
|
||||
size_t buf_len )
|
||||
{
|
||||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
struct wpa_supplicant *wpa_s;
|
||||
int ret = -1;
|
||||
|
||||
if (drv == NULL) {
|
||||
wpa_printf(MSG_ERROR, "%s: drv is NULL. Exiting", __func__);
|
||||
return -1;
|
||||
}
|
||||
if (drv->ctx == NULL) {
|
||||
wpa_printf(MSG_ERROR, "%s: drv->ctx is NULL. Exiting", __func__);
|
||||
return -1;
|
||||
}
|
||||
wpa_s = (struct wpa_supplicant *)(drv->ctx);
|
||||
if (wpa_s->conf == NULL) {
|
||||
wpa_printf(MSG_ERROR, "%s: wpa_s->conf is NULL. Exiting", __func__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
wpa_printf(MSG_DEBUG, "iface %s recv cmd %s ignored", bss->ifname, cmd);
|
||||
|
||||
if (os_strncasecmp(cmd, "POWERMODE ", 10) == 0) {
|
||||
int state;
|
||||
state = atoi(cmd + 10);
|
||||
wpa_printf(MSG_DEBUG, "POWERMODE=%d", state);
|
||||
} else if (os_strncmp(cmd, "MACADDR", os_strlen("MACADDR"))==0) {
|
||||
u8 macaddr[ETH_ALEN] = {};
|
||||
os_memcpy(&macaddr, wpa_s->own_addr, ETH_ALEN);
|
||||
ret = snprintf(buf, buf_len, "Macaddr = " MACSTR "\n", MAC2STR(macaddr));
|
||||
wpa_printf(MSG_DEBUG, "%s", buf);
|
||||
} else if(os_strncasecmp(cmd, "COUNTRY", os_strlen("COUNTRY"))==0) {
|
||||
wpa_printf(MSG_DEBUG, "set country: %s", cmd+8);
|
||||
//ret = wpa_drv_set_country(wpa_s, cmd+8);
|
||||
if(ret == 0) {
|
||||
//os_memcpy(wpa_s->conf->country,cmd+8,2);
|
||||
//ret = wpa_config_write(wpa_s->confname, wpa_s->conf);
|
||||
}
|
||||
wpa_printf(MSG_DEBUG, "skip cmd %s", cmd);
|
||||
} else if (os_strcasecmp(cmd, "start") == 0) {
|
||||
wpa_printf(MSG_DEBUG,"skip cmd %s", cmd);
|
||||
} else if (os_strcasecmp(cmd, "stop") == 0) {
|
||||
// [Android4.3] remove disassociate function
|
||||
// ret = wpa_driver_nl80211_ops.disassociate(bss, drv->bssid, WLAN_REASON_DEAUTH_LEAVING);
|
||||
//ret = wpa_driver_wext_driver_start(drv, 1);
|
||||
if (ret == 0)
|
||||
wpa_msg(drv->ctx, MSG_INFO, "CTRL-EVENT-DRIVER-STATE STOPPED");
|
||||
wpa_printf(MSG_DEBUG,"DRIVER-STOP: %d", ret);
|
||||
if (linux_set_iface_flags(drv->global->ioctl_sock,
|
||||
drv->first_bss.ifname, 0)) {
|
||||
wpa_printf(MSG_INFO, "nl80211: Could not set interface Down \n");
|
||||
}
|
||||
} else if (os_strncasecmp(cmd, "getpower", 8) == 0) {
|
||||
u32 mode;
|
||||
// ret = wpa_driver_wext_driver_get_power(drv, &mode);
|
||||
if (ret == 0) {
|
||||
ret = snprintf(buf, buf_len, "powermode = %u\n", mode);
|
||||
wpa_printf(MSG_DEBUG, "%s", buf);
|
||||
if (ret < (int)buf_len) {
|
||||
return( ret );
|
||||
}
|
||||
}
|
||||
} else if (os_strncasecmp(cmd, "get-rts-threshold", 17) == 0) {
|
||||
u32 thd;
|
||||
// ret = wpa_driver_wext_driver_get_rts(drv, &thd);
|
||||
if (ret == 0) {
|
||||
ret = snprintf(buf, buf_len, "rts-threshold = %u\n", thd);
|
||||
wpa_printf(MSG_DEBUG, "%s", buf);
|
||||
if (ret < (int)buf_len)
|
||||
return ret;
|
||||
}
|
||||
} else if (os_strncasecmp(cmd, "set-rts-threshold", 17) == 0) {
|
||||
u32 thd = 0;
|
||||
char *cp = cmd + 17;
|
||||
char *endp;
|
||||
if (*cp != '\0') {
|
||||
thd = (u32)strtol(cp, &endp, 0);
|
||||
// if (endp != cp)
|
||||
// ret = wpa_driver_wext_driver_set_rts(drv, thd);
|
||||
}
|
||||
} else if (os_strncasecmp(cmd, "rxfilter-add", 12) == 0 ) {
|
||||
unsigned long sw_cmd = 0x9F000000;
|
||||
unsigned long idx = 0;
|
||||
char *cp = cmd + 12;
|
||||
char *endp;
|
||||
|
||||
if (*cp != '\0') {
|
||||
idx = (u32)strtol(cp, &endp, 0);
|
||||
if (endp != cp) {
|
||||
idx += 0x00900200;
|
||||
wpa_driver_nl80211_driver_sw_cmd(priv, 1, &sw_cmd, &idx);
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
} else if (os_strncasecmp(cmd, "rxfilter-remove", 15) == 0 ) {
|
||||
unsigned long sw_cmd = 0x9F000000;
|
||||
unsigned long idx = 0;
|
||||
char *cp = cmd + 15;
|
||||
char *endp;
|
||||
|
||||
if (*cp != '\0') {
|
||||
idx = (u32)strtol(cp, &endp, 0);
|
||||
if (endp != cp) {
|
||||
idx += 0x00900300;
|
||||
wpa_driver_nl80211_driver_sw_cmd(priv, 1, &sw_cmd, &idx);
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
} else if (os_strncasecmp(cmd, "rxfilter-stop", 13) == 0 ) {
|
||||
unsigned long sw_cmd = 0x9F000000;
|
||||
unsigned long idx = 0x00900000;
|
||||
wpa_driver_nl80211_driver_sw_cmd(priv, 1, &sw_cmd, &idx);
|
||||
ret = 0;
|
||||
} else if (os_strncasecmp(cmd, "rxfilter-start", 14) == 0 ) {
|
||||
unsigned long sw_cmd = 0x9F000000;
|
||||
unsigned long idx = 0x00900100;
|
||||
wpa_driver_nl80211_driver_sw_cmd(priv, 1, &sw_cmd, &idx);
|
||||
ret = 0;
|
||||
} else if (os_strcasecmp(cmd, "btcoexscan-start") == 0) {
|
||||
ret = 0; /* mt5921 linux driver not implement yet */
|
||||
} else if (os_strcasecmp(cmd, "btcoexscan-stop") == 0) {
|
||||
ret = 0; /* mt5921 linux driver not implement yet */
|
||||
} else if( os_strncasecmp(cmd, "btcoexmode", 10) == 0 ) {
|
||||
ret = 0; /* mt5921 linux driver not implement yet */
|
||||
} else if (os_strncasecmp(cmd, "smt-rate", 8) == 0 ) {
|
||||
unsigned long sw_cmd = 0xFFFF0123;
|
||||
unsigned long idx = 0;
|
||||
char *cp = cmd + 8;
|
||||
char *endp;
|
||||
|
||||
if (*cp != '\0') {
|
||||
idx = (u32)strtol(cp, &endp, 0);
|
||||
if (endp != cp) {
|
||||
wpa_driver_nl80211_driver_sw_cmd(priv, 1, &sw_cmd, &idx);
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
} else if (os_strncasecmp(cmd, "smt-test-on", 11) == 0 ) {
|
||||
unsigned long sw_cmd = 0xFFFF1234;
|
||||
unsigned long idx = 0;
|
||||
wpa_driver_nl80211_driver_sw_cmd(priv, 1, &sw_cmd, &idx);
|
||||
ret = 0;
|
||||
} else if (os_strncasecmp(cmd, "smt-test-off", 12) == 0 ) {
|
||||
unsigned long sw_cmd = 0xFFFF1235;
|
||||
unsigned long idx = 0;
|
||||
wpa_driver_nl80211_driver_sw_cmd(priv, 1, &sw_cmd, &idx);
|
||||
ret = 0;
|
||||
} else {
|
||||
wpa_printf(MSG_DEBUG,"Unsupported command");
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int wpa_driver_set_p2p_noa(void *priv, u8 count, int start, int duration)
|
||||
{
|
||||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
|
||||
wpa_printf(MSG_DEBUG, "iface %s P2P_SET_NOA %d %d %d, ignored", bss->ifname, count, start, duration);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int wpa_driver_get_p2p_noa(void *priv, u8 *buf, size_t len)
|
||||
{
|
||||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
|
||||
wpa_printf(MSG_DEBUG, "iface %s P2P_GET_NOA, ignored");
|
||||
return -1;
|
||||
}
|
||||
|
||||
int wpa_driver_set_p2p_ps(void *priv, int legacy_ps, int opp_ps, int ctwindow)
|
||||
{
|
||||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
|
||||
wpa_printf(MSG_DEBUG, "iface %s P2P_SET_PS, ignored");
|
||||
return -1;
|
||||
}
|
||||
|
||||
int wpa_driver_set_ap_wps_p2p_ie(void *priv, const struct wpabuf *beacon,
|
||||
const struct wpabuf *proberesp,
|
||||
const struct wpabuf *assocresp)
|
||||
{
|
||||
struct i802_bss *bss = priv;
|
||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||
|
||||
wpa_printf(MSG_DEBUG, "iface %s set_ap_wps_p2p_ie, ignored");
|
||||
return -1;
|
||||
}
|
||||
@@ -1,467 +0,0 @@
|
||||
/*
|
||||
* Driver interaction with Linux nl80211/cfg80211
|
||||
* Copyright (c) 2002-2010, Jouni Malinen <j@w1.fi>
|
||||
* Copyright (c) 2003-2004, Instant802 Networks, Inc.
|
||||
* Copyright (c) 2005-2006, Devicescape Software, Inc.
|
||||
* Copyright (c) 2007, Johannes Berg <johannes@sipsolutions.net>
|
||||
* Copyright (c) 2009-2010, Atheros Communications
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Alternatively, this software may be distributed under the terms of BSD
|
||||
* license.
|
||||
*
|
||||
* See README and COPYING for more details.
|
||||
*/
|
||||
|
||||
#ifndef _DRIVER_NL80211_H_
|
||||
#define _DRIVER_NL80211_H_
|
||||
|
||||
#include "includes.h"
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <net/if.h>
|
||||
#include <netlink/genl/genl.h>
|
||||
#include <netlink/genl/family.h>
|
||||
#include <netlink/genl/ctrl.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
#include <netpacket/packet.h>
|
||||
#include <linux/filter.h>
|
||||
#include "nl80211_copy.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "eloop.h"
|
||||
#include "utils/list.h"
|
||||
#include "common/ieee802_11_defs.h"
|
||||
#include "netlink.h"
|
||||
#include "linux_ioctl.h"
|
||||
#include "radiotap.h"
|
||||
#include "radiotap_iter.h"
|
||||
#include "rfkill.h"
|
||||
#include "driver.h"
|
||||
|
||||
#ifdef CONFIG_LIBNL20
|
||||
/* libnl 2.0 compatibility code */
|
||||
#define nl_handle nl_sock
|
||||
#define nl80211_handle_alloc nl_socket_alloc_cb
|
||||
#define nl80211_handle_destroy nl_socket_free
|
||||
#endif /* CONFIG_LIBNL20 */
|
||||
|
||||
#ifndef IFF_LOWER_UP
|
||||
#define IFF_LOWER_UP 0x10000 /* driver signals L1 up */
|
||||
#endif
|
||||
#ifndef IFF_DORMANT
|
||||
#define IFF_DORMANT 0x20000 /* driver signals dormant */
|
||||
#endif
|
||||
|
||||
#ifndef IF_OPER_DORMANT
|
||||
#define IF_OPER_DORMANT 5
|
||||
#endif
|
||||
#ifndef IF_OPER_UP
|
||||
#define IF_OPER_UP 6
|
||||
#endif
|
||||
|
||||
#ifndef BITS
|
||||
/* Eddie */
|
||||
/* bits range: for example BITS(16,23) = 0xFF0000
|
||||
* ==> (BIT(m)-1) = 0x0000FFFF ~(BIT(m)-1) => 0xFFFF0000
|
||||
* ==> (BIT(n+1)-1) = 0x00FFFFFF
|
||||
*/
|
||||
#define BITS(m,n) (~(BIT(m)-1) & ((BIT(n) - 1) | BIT(n)))
|
||||
#endif /* BIT */
|
||||
|
||||
struct iw_point
|
||||
{
|
||||
void __user *pointer; /* Pointer to the data (in user space) */
|
||||
__u16 length; /* number of fields or size in bytes */
|
||||
__u16 flags; /* Optional params */
|
||||
};
|
||||
struct iw_param
|
||||
{
|
||||
__s32 value; /* The value of the parameter itself */
|
||||
__u8 fixed; /* Hardware should not use auto select */
|
||||
__u8 disabled; /* Disable the feature */
|
||||
__u16 flags; /* Various specifc flags (if any) */
|
||||
};
|
||||
struct iw_freq
|
||||
{
|
||||
__s32 m; /* Mantissa */
|
||||
__s16 e; /* Exponent */
|
||||
__u8 i; /* List index (when in range struct) */
|
||||
__u8 flags; /* Flags (fixed/auto) */
|
||||
};
|
||||
struct iw_quality
|
||||
{
|
||||
__u8 qual; /* link quality (%retries, SNR,
|
||||
%missed beacons or better...) */
|
||||
__u8 level; /* signal level (dBm) */
|
||||
__u8 noise; /* noise level (dBm) */
|
||||
__u8 updated; /* Flags to know if updated */
|
||||
};
|
||||
|
||||
union iwreq_data
|
||||
{
|
||||
/* Config - generic */
|
||||
char name[IFNAMSIZ];
|
||||
/* Name : used to verify the presence of wireless extensions.
|
||||
* Name of the protocol/provider... */
|
||||
|
||||
struct iw_point essid; /* Extended network name */
|
||||
struct iw_param nwid; /* network id (or domain - the cell) */
|
||||
struct iw_freq freq; /* frequency or channel :
|
||||
* 0-1000 = channel
|
||||
* > 1000 = frequency in Hz */
|
||||
|
||||
struct iw_param sens; /* signal level threshold */
|
||||
struct iw_param bitrate; /* default bit rate */
|
||||
struct iw_param txpower; /* default transmit power */
|
||||
struct iw_param rts; /* RTS threshold threshold */
|
||||
struct iw_param frag; /* Fragmentation threshold */
|
||||
__u32 mode; /* Operation mode */
|
||||
struct iw_param retry; /* Retry limits & lifetime */
|
||||
|
||||
struct iw_point encoding; /* Encoding stuff : tokens */
|
||||
struct iw_param power; /* PM duration/timeout */
|
||||
struct iw_quality qual; /* Quality part of statistics */
|
||||
|
||||
struct sockaddr ap_addr; /* Access point address */
|
||||
struct sockaddr addr; /* Destination address (hw/mac) */
|
||||
|
||||
struct iw_param param; /* Other small parameters */
|
||||
struct iw_point data; /* Other large parameters */
|
||||
};
|
||||
struct iwreq
|
||||
{
|
||||
union
|
||||
{
|
||||
char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
|
||||
} ifr_ifrn;
|
||||
|
||||
/* Data part (defined just above) */
|
||||
union iwreq_data u;
|
||||
};
|
||||
|
||||
struct nl80211_global {
|
||||
struct dl_list interfaces;
|
||||
int if_add_ifindex;
|
||||
struct netlink_data *netlink;
|
||||
struct nl_cb *nl_cb;
|
||||
struct nl_handle *nl;
|
||||
int nl80211_id;
|
||||
int ioctl_sock; /* socket for ioctl() use */
|
||||
|
||||
struct nl_handle *nl_event;
|
||||
};
|
||||
|
||||
struct nl80211_wiphy_data {
|
||||
struct dl_list list;
|
||||
struct dl_list bsss;
|
||||
struct dl_list drvs;
|
||||
|
||||
struct nl_handle *nl_beacons;
|
||||
struct nl_cb *nl_cb;
|
||||
|
||||
int wiphy_idx;
|
||||
};
|
||||
|
||||
struct i802_bss {
|
||||
struct wpa_driver_nl80211_data *drv;
|
||||
struct i802_bss *next;
|
||||
int ifindex;
|
||||
char ifname[IFNAMSIZ + 1];
|
||||
char brname[IFNAMSIZ];
|
||||
unsigned int beacon_set:1;
|
||||
unsigned int added_if_into_bridge:1;
|
||||
unsigned int added_bridge:1;
|
||||
unsigned int in_deinit:1;
|
||||
|
||||
u8 addr[ETH_ALEN];
|
||||
|
||||
int freq;
|
||||
|
||||
struct nl_handle *nl_preq, *nl_mgmt;
|
||||
struct nl_cb *nl_cb;
|
||||
|
||||
struct nl80211_wiphy_data *wiphy_data;
|
||||
struct dl_list wiphy_list;
|
||||
};
|
||||
|
||||
struct wpa_driver_test_mode_info {
|
||||
u32 index;
|
||||
u32 buflen;
|
||||
};
|
||||
|
||||
|
||||
/* P2P Sigma*/
|
||||
struct wpa_driver_p2p_sigma_params {
|
||||
struct wpa_driver_test_mode_info hdr;
|
||||
u32 idx;
|
||||
u32 value;
|
||||
};
|
||||
|
||||
struct wpa_driver_testmode_params {
|
||||
struct wpa_driver_test_mode_info hdr;
|
||||
u8 *buf;
|
||||
};
|
||||
|
||||
struct wpa_driver_get_sta_statistics_params {
|
||||
struct wpa_driver_test_mode_info hdr;
|
||||
u32 version;
|
||||
u32 flag;
|
||||
u8 addr[ETH_ALEN];
|
||||
|
||||
u8 *buf;
|
||||
};
|
||||
|
||||
|
||||
/* Hotspot Client Management */
|
||||
struct wpa_driver_hotspot_params {
|
||||
struct wpa_driver_test_mode_info hdr;
|
||||
u8 blocked;
|
||||
u8 bssid[ETH_ALEN];
|
||||
};
|
||||
|
||||
|
||||
/* SW CMD */
|
||||
struct wpa_driver_sw_cmd_params {
|
||||
struct wpa_driver_test_mode_info hdr;
|
||||
u8 set;
|
||||
unsigned long adr;
|
||||
unsigned long data;
|
||||
};
|
||||
|
||||
/* CONFIG_MTK_WFD */
|
||||
struct wpa_driver_wfd_data_s {
|
||||
struct wpa_driver_test_mode_info hdr;
|
||||
u32 WfdCmdType;
|
||||
u8 WfdEnable;
|
||||
u8 WfdCoupleSinkStatus;
|
||||
u8 WfdSessionAvailable;
|
||||
u8 WfdSigmaMode;
|
||||
u16 WfdDevInfo;
|
||||
u16 WfdControlPort;
|
||||
u16 WfdMaximumTp;
|
||||
u16 WfdExtendCap;
|
||||
u8 WfdCoupleSinkAddress[ETH_ALEN];
|
||||
u8 WfdAssociatedBssid[ETH_ALEN];
|
||||
u8 WfdVideoIp[4];
|
||||
u8 WfdAudioIp[4];
|
||||
u16 WfdVideoPort;
|
||||
u16 WfdAudioPort;
|
||||
u32 WfdFlag;
|
||||
u32 WfdPolicy;
|
||||
u32 WfdState;
|
||||
u8 WfdSessionInformationIE[24*8]; // Include Subelement ID, length
|
||||
u16 WfdSessionInformationIELen;
|
||||
u8 Reverved1[2];
|
||||
u8 WfdPrimarySinkMac[ETH_ALEN];
|
||||
u8 WfdSecondarySinkMac[ETH_ALEN];
|
||||
u32 WfdAdvancedFlag;
|
||||
/* Group 1 64 bytes */
|
||||
u8 WfdLocalIp[4];
|
||||
u16 WfdLifetimeAc2; /* Unit is 2 TU */
|
||||
u16 WfdLifetimeAc3; /* Unit is 2 TU */
|
||||
u16 WfdCounterThreshold; /* Unit is ms */
|
||||
u8 Reverved2[54];
|
||||
/* Group 2 64 bytes */
|
||||
u8 Reverved3[64];
|
||||
/* Group 3 64 bytes */
|
||||
u8 Reverved4[64];
|
||||
}wfd_data;
|
||||
|
||||
enum nl80211_testmode_sta_link_statistics_attr{
|
||||
__NL80211_TESTMODE_STA_STATISTICS_INVALID = 0,
|
||||
NL80211_TESTMODE_STA_STATISTICS_VERSION,
|
||||
NL80211_TESTMODE_STA_STATISTICS_MAC,
|
||||
NL80211_TESTMODE_STA_STATISTICS_LINK_SCORE,
|
||||
NL80211_TESTMODE_STA_STATISTICS_FLAG,
|
||||
|
||||
NL80211_TESTMODE_STA_STATISTICS_PER,
|
||||
NL80211_TESTMODE_STA_STATISTICS_RSSI,
|
||||
NL80211_TESTMODE_STA_STATISTICS_PHY_MODE,
|
||||
NL80211_TESTMODE_STA_STATISTICS_TX_RATE,
|
||||
|
||||
NL80211_TESTMODE_STA_STATISTICS_TOTAL_CNT,
|
||||
NL80211_TESTMODE_STA_STATISTICS_THRESHOLD_CNT,
|
||||
NL80211_TESTMODE_STA_STATISTICS_AVG_PROCESS_TIME,
|
||||
|
||||
NL80211_TESTMODE_STA_STATISTICS_FAIL_CNT,
|
||||
NL80211_TESTMODE_STA_STATISTICS_TIMEOUT_CNT,
|
||||
NL80211_TESTMODE_STA_STATISTICS_AVG_AIR_TIME,
|
||||
|
||||
NL80211_TESTMODE_STA_STATISTICS_TC_EMPTY_CNT_ARRAY,
|
||||
NL80211_TESTMODE_STA_STATISTICS_TC_QUE_LEN_ARRAY,
|
||||
|
||||
NL80211_TESTMODE_STA_STATISTICS_TC_AVG_QUE_LEN_ARRAY,
|
||||
NL80211_TESTMODE_STA_STATISTICS_TC_CUR_QUE_LEN_ARRAY,
|
||||
|
||||
NL80211_TESTMODE_STA_STATISTICS_RESERVED_ARRAY,
|
||||
|
||||
NL80211_TESTMODE_STA_STATISTICS_NUM,
|
||||
NL80211_TESTMODE_STA_STATISTICS_MAX = NL80211_TESTMODE_STA_STATISTICS_NUM - 1
|
||||
};
|
||||
|
||||
typedef enum _ENUM_TRAFFIC_CLASS_INDEX_T {
|
||||
TC0_INDEX = 0,
|
||||
TC1_INDEX,
|
||||
TC2_INDEX,
|
||||
TC3_INDEX,
|
||||
TC_DATA_NUM,
|
||||
TC4_INDEX = TC_DATA_NUM,
|
||||
TC5_INDEX,
|
||||
TC_NUM
|
||||
} ENUM_TRAFFIC_CLASS_INDEX_T;
|
||||
|
||||
struct wpa_driver_sta_statistics_s {
|
||||
u8 version;
|
||||
u8 addr[ETH_ALEN];
|
||||
u32 flag;
|
||||
|
||||
u8 link_score;
|
||||
u8 per;
|
||||
int rssi;
|
||||
u32 phy_mode;
|
||||
double tx_rate;
|
||||
|
||||
u32 tx_total_cnt;
|
||||
u32 tx_exc_threshold_cnt;
|
||||
u32 tx_avg_process_time;
|
||||
u32 tx_fail_cnt;
|
||||
u32 tx_timeout_cnt;
|
||||
u32 tx_avg_air_time;
|
||||
|
||||
u32 tc_buf_full_cnt[TC_DATA_NUM];
|
||||
u32 tc_que_len[TC_DATA_NUM];
|
||||
|
||||
u32 tc_avg_que_len[TC_DATA_NUM];
|
||||
u32 tc_cur_que_len[TC_DATA_NUM];
|
||||
|
||||
u8 reserved[32];
|
||||
};
|
||||
|
||||
#ifdef CONFIG_WAPI_SUPPORT
|
||||
/* SIOCSIWENCODEEXT definitions */
|
||||
#define IW_ENCODE_SEQ_MAX_SIZE 8
|
||||
/* struct iw_encode_ext ->alg */
|
||||
#define IW_ENCODE_ALG_NONE 0
|
||||
#define IW_ENCODE_ALG_WEP 1
|
||||
#define IW_ENCODE_ALG_TKIP 2
|
||||
#define IW_ENCODE_ALG_CCMP 3
|
||||
#define IW_ENCODE_ALG_PMK 4
|
||||
#define IW_ENCODE_ALG_AES_CMAC 5
|
||||
/* struct iw_encode_ext ->ext_flags */
|
||||
#define IW_ENCODE_EXT_TX_SEQ_VALID 0x00000001
|
||||
#define IW_ENCODE_EXT_RX_SEQ_VALID 0x00000002
|
||||
#define IW_ENCODE_EXT_GROUP_KEY 0x00000004
|
||||
#define IW_ENCODE_EXT_SET_TX_KEY 0x00000008
|
||||
|
||||
/* WAPI */
|
||||
struct iw_encode_ext
|
||||
{
|
||||
u32 ext_flags; /* IW_ENCODE_EXT_* */
|
||||
u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
|
||||
u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */
|
||||
u8 addr[ETH_ALEN]; /* ff:ff:ff:ff:ff:ff for broadcast/multicast
|
||||
* (group) keys or unicast address for
|
||||
* individual keys */
|
||||
u16 alg; /* IW_ENCODE_ALG_* */
|
||||
u16 key_len;
|
||||
u8 key[32];
|
||||
};
|
||||
|
||||
struct wpa_driver_wapi_key_params {
|
||||
struct wpa_driver_test_mode_info hdr;
|
||||
u8 key_index;
|
||||
u8 key_len;
|
||||
struct iw_encode_ext extparams;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/*-----------------------------------------------*/
|
||||
struct wpa_driver_nl80211_data {
|
||||
struct nl80211_global *global;
|
||||
struct dl_list list;
|
||||
struct dl_list wiphy_list;
|
||||
char phyname[32];
|
||||
void *ctx;
|
||||
int ifindex;
|
||||
int if_removed;
|
||||
int if_disabled;
|
||||
int ignore_if_down_event;
|
||||
struct rfkill_data *rfkill;
|
||||
struct wpa_driver_capa capa;
|
||||
int has_capability;
|
||||
|
||||
int operstate;
|
||||
|
||||
int scan_complete_events;
|
||||
|
||||
struct nl_cb *nl_cb;
|
||||
|
||||
u8 auth_bssid[ETH_ALEN];
|
||||
u8 bssid[ETH_ALEN];
|
||||
int associated;
|
||||
u8 ssid[32];
|
||||
size_t ssid_len;
|
||||
enum nl80211_iftype nlmode;
|
||||
enum nl80211_iftype ap_scan_as_station;
|
||||
unsigned int assoc_freq;
|
||||
|
||||
int monitor_sock;
|
||||
int monitor_ifidx;
|
||||
int monitor_refcount;
|
||||
|
||||
unsigned int disabled_11b_rates:1;
|
||||
unsigned int pending_remain_on_chan:1;
|
||||
unsigned int in_interface_list:1;
|
||||
unsigned int device_ap_sme:1;
|
||||
unsigned int poll_command_supported:1;
|
||||
unsigned int data_tx_status:1;
|
||||
unsigned int scan_for_auth:1;
|
||||
unsigned int retry_auth:1;
|
||||
unsigned int use_monitor:1;
|
||||
|
||||
u64 remain_on_chan_cookie;
|
||||
u64 send_action_cookie;
|
||||
|
||||
unsigned int last_mgmt_freq;
|
||||
|
||||
struct wpa_driver_scan_filter *filter_ssids;
|
||||
size_t num_filter_ssids;
|
||||
|
||||
struct i802_bss first_bss;
|
||||
|
||||
int eapol_tx_sock;
|
||||
|
||||
#ifdef HOSTAPD
|
||||
int eapol_sock; /* socket for EAPOL frames */
|
||||
|
||||
int default_if_indices[16];
|
||||
int *if_indices;
|
||||
int num_if_indices;
|
||||
|
||||
int last_freq;
|
||||
int last_freq_ht;
|
||||
#endif /* HOSTAPD */
|
||||
|
||||
/* From failed authentication command */
|
||||
int auth_freq;
|
||||
u8 auth_bssid_[ETH_ALEN];
|
||||
u8 auth_ssid[32];
|
||||
size_t auth_ssid_len;
|
||||
int auth_alg;
|
||||
u8 *auth_ie;
|
||||
size_t auth_ie_len;
|
||||
u8 auth_wep_key[4][16];
|
||||
size_t auth_wep_key_len[4];
|
||||
int auth_wep_tx_keyidx;
|
||||
int auth_local_state_change;
|
||||
int auth_p2p;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user