Revert "[wpa_supplicant] Cumulative patch from b8491ae5a"
This reverts commit 878cf7bcbf2d7d8f08c3d060b8c5fbfcf0743eda.
Reason for revert: git_master/sdk_phone_armv7-sdk
Change-Id: I6070fc5c1f9c20867f6dfce90e529e35578d572e
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 8a5cdb8..e7c8f31 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -102,20 +102,6 @@
};
/**
- * struct hostapd_wmm_rule - WMM regulatory rule
- * @min_cwmin: Lower bound of CW_min value
- * @min_cwmax: Lower bound of CW_max value
- * @min_aifs: Lower bound of AIFS value
- * @max_txop: Upper bound of TXOP, value in units of 32 usec
- */
-struct hostapd_wmm_rule {
- int min_cwmin;
- int min_cwmax;
- int min_aifs;
- int max_txop;
-};
-
-/**
* struct hostapd_channel_data - Channel information
*/
struct hostapd_channel_data {
@@ -170,48 +156,34 @@
* dfs_cac_ms - DFS CAC time in milliseconds
*/
unsigned int dfs_cac_ms;
-
- /**
- * wmm_rules_valid - Indicates wmm_rules state
- */
- int wmm_rules_valid;
-
- /**
- * wmm_rules - WMM regulatory rules
- */
- struct hostapd_wmm_rule wmm_rules[WMM_AC_NUM];
};
-#define HE_MAX_MAC_CAPAB_SIZE 6
-#define HE_MAX_PHY_CAPAB_SIZE 11
-#define HE_MAX_MCS_CAPAB_SIZE 12
-#define HE_MAX_PPET_CAPAB_SIZE 25
+#define HE_MAX_NUM_SS 8
+#define HE_MAX_PHY_CAPAB_SIZE 3
+
+/**
+ * struct he_ppe_threshold - IEEE 802.11ax HE PPE Threshold
+ */
+struct he_ppe_threshold {
+ u32 numss_m1;
+ u32 ru_count;
+ u32 ppet16_ppet8_ru3_ru0[HE_MAX_NUM_SS];
+};
/**
* struct he_capabilities - IEEE 802.11ax HE capabilities
*/
struct he_capabilities {
u8 he_supported;
- u8 phy_cap[HE_MAX_PHY_CAPAB_SIZE];
- u8 mac_cap[HE_MAX_MAC_CAPAB_SIZE];
- u8 mcs[HE_MAX_MCS_CAPAB_SIZE];
- u8 ppet[HE_MAX_PPET_CAPAB_SIZE];
+ u32 phy_cap[HE_MAX_PHY_CAPAB_SIZE];
+ u32 mac_cap;
+ u32 mcs;
+ struct he_ppe_threshold ppet;
};
#define HOSTAPD_MODE_FLAG_HT_INFO_KNOWN BIT(0)
#define HOSTAPD_MODE_FLAG_VHT_INFO_KNOWN BIT(1)
-
-enum ieee80211_op_mode {
- IEEE80211_MODE_INFRA = 0,
- IEEE80211_MODE_IBSS = 1,
- IEEE80211_MODE_AP = 2,
- IEEE80211_MODE_MESH = 5,
-
- /* only add new entries before IEEE80211_MODE_NUM */
- IEEE80211_MODE_NUM
-};
-
/**
* struct hostapd_hw_modes - Supported hardware mode information
*/
@@ -271,10 +243,15 @@
/**
* he_capab - HE (IEEE 802.11ax) capabilities
*/
- struct he_capabilities he_capab[IEEE80211_MODE_NUM];
+ struct he_capabilities he_capab;
};
+#define IEEE80211_MODE_INFRA 0
+#define IEEE80211_MODE_IBSS 1
+#define IEEE80211_MODE_AP 2
+#define IEEE80211_MODE_MESH 5
+
#define IEEE80211_CAP_ESS 0x0001
#define IEEE80211_CAP_IBSS 0x0002
#define IEEE80211_CAP_PRIVACY 0x0010
@@ -722,11 +699,6 @@
int vht_enabled;
/**
- * he_enabled - Whether HE is enabled
- */
- int he_enabled;
-
- /**
* center_freq1 - Segment 0 center frequency in MHz
*
* Valid for both HT and VHT.
@@ -1150,11 +1122,6 @@
HIDDEN_SSID_ZERO_CONTENTS
};
-enum ch_switch_state {
- CH_SW_STARTED,
- CH_SW_FINISHED
-};
-
struct wowlan_triggers {
u8 any;
u8 disconnect;
@@ -1785,7 +1752,6 @@
struct hostap_sta_driver_data {
unsigned long rx_packets, tx_packets;
unsigned long long rx_bytes, tx_bytes;
- unsigned long long rx_airtime, tx_airtime;
int bytes_64bit; /* whether 64-bit byte counters are supported */
unsigned long current_tx_rate;
unsigned long current_rx_rate;
@@ -1795,8 +1761,6 @@
unsigned long tx_retry_failed;
unsigned long tx_retry_count;
s8 last_ack_rssi;
- unsigned long backlog_packets;
- unsigned long backlog_bytes;
s8 signal;
u8 rx_vhtmcs;
u8 tx_vhtmcs;
@@ -1817,8 +1781,6 @@
const struct ieee80211_vht_capabilities *vht_capabilities;
int vht_opmode_enabled;
u8 vht_opmode;
- const struct ieee80211_he_capabilities *he_capab;
- size_t he_capab_len;
u32 flags; /* bitmask of WPA_STA_* flags */
u32 flags_mask; /* unset bits in flags */
#ifdef CONFIG_MESH
@@ -2375,7 +2337,7 @@
*
* Returns: 0 on success, -1 on failure
*/
- int (*deauthenticate)(void *priv, const u8 *addr, u16 reason_code);
+ int (*deauthenticate)(void *priv, const u8 *addr, int reason_code);
/**
* associate - Request driver to associate
@@ -2844,7 +2806,7 @@
* a Deauthentication frame to be sent to it.
*/
int (*sta_deauth)(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason);
+ int reason);
/**
* sta_disassoc - Disassociate a station (AP only)
@@ -2858,7 +2820,7 @@
* a Disassociation frame to be sent to it.
*/
int (*sta_disassoc)(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason);
+ int reason);
/**
* sta_remove - Remove a station entry (AP only)
@@ -2976,16 +2938,6 @@
unsigned int flags_and);
/**
- * sta_set_airtime_weight - Set station airtime weight (AP only)
- * @priv: Private driver interface data
- * @addr: Station address
- * @weight: New weight for station airtime assignment
- * Returns: 0 on success, -1 on failure
- */
- int (*sta_set_airtime_weight)(void *priv, const u8 *addr,
- unsigned int weight);
-
- /**
* set_tx_queue_params - Set TX queue parameters
* @priv: Private driver interface data
* @queue: Queue number (0 = VO, 1 = VI, 2 = BE, 3 = BK)
@@ -4023,18 +3975,6 @@
int (*leave_mesh)(void *priv);
/**
- * probe_mesh_link - Inject a frame over direct mesh link to a given
- * peer skipping the next_hop lookup from mpath table.
- * @priv: Private driver interface data
- * @addr: Peer MAC address
- * @eth: Ethernet frame to be sent
- * @len: Ethernet frame lengtn in bytes
- * Returns 0 on success, -1 on failure
- */
- int (*probe_mesh_link)(void *priv, const u8 *addr, const u8 *eth,
- size_t len);
-
- /**
* do_acs - Automatically select channel
* @priv: Private driver interface data
* @params: Parameters for ACS
@@ -4227,21 +4167,6 @@
* Returns: 0 on success, < 0 on failure
*/
int (*set_4addr_mode)(void *priv, const char *bridge_ifname, int val);
-
- /**
- * update_dh_ie - Update DH IE
- * @priv: Private driver interface data
- * @peer_mac: Peer MAC address
- * @reason_code: Reacon code
- * @ie: DH IE
- * @ie_len: DH IE length in bytes
- * Returns: 0 on success, -1 on failure
- *
- * This callback is used to let the driver know the DH processing result
- * and DH IE for a pending association.
- */
- int (*update_dh_ie)(void *priv, const u8 *peer_mac, u16 reason_code,
- const u8 *ie, size_t ie_len);
};
/**
@@ -4616,15 +4541,6 @@
EVENT_CH_SWITCH,
/**
- * EVENT_CH_SWITCH_STARTED - AP or GO started to switch channels
- *
- * This is a pre-switch event indicating the shortly following switch
- * of operating channels.
- *
- * Described in wpa_event_data.ch_switch
- */
- EVENT_CH_SWITCH_STARTED,
- /**
* EVENT_WNM - Request WNM operation
*
* This event can be used to request a WNM operation to be performed.
@@ -4787,11 +4703,6 @@
* This event is emitted when an interface is added/removed for WDS STA.
*/
EVENT_WDS_STA_INTERFACE_STATUS,
-
- /**
- * EVENT_UPDATE_DH - Notification of updated DH information
- */
- EVENT_UPDATE_DH,
};
@@ -5625,15 +5536,6 @@
INTERFACE_REMOVED
} istatus;
} wds_sta_interface;
-
- /**
- * struct update_dh - Data for EVENT_UPDATE_DH
- */
- struct update_dh {
- const u8 *peer;
- const u8 *ie;
- size_t ie_len;
- } update_dh;
};
/**
diff --git a/src/drivers/driver_atheros.c b/src/drivers/driver_atheros.c
index 840d4ff..807cd94 100644
--- a/src/drivers/driver_atheros.c
+++ b/src/drivers/driver_atheros.c
@@ -86,7 +86,7 @@
};
static int atheros_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason_code);
+ int reason_code);
static int atheros_set_privacy(void *priv, int enabled);
static const char * athr_get_ioctl_name(int op)
@@ -761,7 +761,7 @@
static int
atheros_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason_code)
+ int reason_code)
{
struct atheros_driver_data *drv = priv;
struct ieee80211req_mlme mlme;
@@ -785,7 +785,7 @@
static int
atheros_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason_code)
+ int reason_code)
{
struct atheros_driver_data *drv = priv;
struct ieee80211req_mlme mlme;
diff --git a/src/drivers/driver_bsd.c b/src/drivers/driver_bsd.c
index 82ca061..4675496 100644
--- a/src/drivers/driver_bsd.c
+++ b/src/drivers/driver_bsd.c
@@ -663,7 +663,7 @@
#undef WPA_OUI_TYPE
static int bsd_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason_code);
+ int reason_code);
static const char *
ether_sprintf(const u8 *addr)
@@ -755,7 +755,7 @@
}
static int
-bsd_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr, u16 reason_code)
+bsd_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr, int reason_code)
{
return bsd_send_mlme_param(priv, IEEE80211_MLME_DEAUTH, reason_code,
addr);
@@ -763,7 +763,7 @@
static int
bsd_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason_code)
+ int reason_code)
{
return bsd_send_mlme_param(priv, IEEE80211_MLME_DISASSOC, reason_code,
addr);
@@ -1026,7 +1026,7 @@
}
static int
-wpa_driver_bsd_deauthenticate(void *priv, const u8 *addr, u16 reason_code)
+wpa_driver_bsd_deauthenticate(void *priv, const u8 *addr, int reason_code)
{
return bsd_send_mlme_param(priv, IEEE80211_MLME_DEAUTH, reason_code,
addr);
diff --git a/src/drivers/driver_common.c b/src/drivers/driver_common.c
index 731c6a3..e55e6cd 100644
--- a/src/drivers/driver_common.c
+++ b/src/drivers/driver_common.c
@@ -67,7 +67,6 @@
E2S(DRIVER_CLIENT_POLL_OK);
E2S(EAPOL_TX_STATUS);
E2S(CH_SWITCH);
- E2S(CH_SWITCH_STARTED);
E2S(WNM);
E2S(CONNECT_FAILED_REASON);
E2S(DFS_RADAR_DETECTED);
@@ -88,7 +87,6 @@
E2S(STATION_OPMODE_CHANGED);
E2S(INTERFACE_MAC_CHANGED);
E2S(WDS_STA_INTERFACE_STATUS);
- E2S(UPDATE_DH);
}
return "UNKNOWN";
diff --git a/src/drivers/driver_hostap.c b/src/drivers/driver_hostap.c
index 186eccb..61b39b1 100644
--- a/src/drivers/driver_hostap.c
+++ b/src/drivers/driver_hostap.c
@@ -1028,7 +1028,7 @@
static int hostap_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason)
+ int reason)
{
struct hostap_driver_data *drv = priv;
struct ieee80211_mgmt mgmt;
@@ -1076,7 +1076,7 @@
static int hostap_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason)
+ int reason)
{
struct hostap_driver_data *drv = priv;
struct ieee80211_mgmt mgmt;
diff --git a/src/drivers/driver_macsec_linux.c b/src/drivers/driver_macsec_linux.c
index e922503..9d981bb 100644
--- a/src/drivers/driver_macsec_linux.c
+++ b/src/drivers/driver_macsec_linux.c
@@ -1,7 +1,6 @@
/*
* Driver interaction with Linux MACsec kernel module
* Copyright (c) 2016, Sabrina Dubroca <sd@queasysnail.net> and Red Hat, Inc.
- * Copyright (c) 2019, The Linux Foundation
*
* This software may be distributed under the terms of the BSD license.
* See README for more details.
@@ -23,7 +22,6 @@
#include "utils/common.h"
#include "utils/eloop.h"
-#include "common/eapol_common.h"
#include "pae/ieee802_1x_kay.h"
#include "driver.h"
#include "driver_wired_common.h"
@@ -59,7 +57,6 @@
char ifname[IFNAMSIZ + 1];
int ifi;
int parent_ifi;
- int use_pae_group_addr;
Boolean created_link;
@@ -1402,214 +1399,6 @@
}
-#ifdef __linux__
-
-static void macsec_drv_handle_data(void *ctx, unsigned char *buf, size_t len)
-{
-#ifdef HOSTAPD
- struct ieee8023_hdr *hdr;
- u8 *pos, *sa;
- size_t left;
- union wpa_event_data event;
-
- /* must contain at least ieee8023_hdr 6 byte source, 6 byte dest,
- * 2 byte ethertype */
- if (len < 14) {
- wpa_printf(MSG_MSGDUMP, "%s: too short (%lu)",
- __func__, (unsigned long) len);
- return;
- }
-
- hdr = (struct ieee8023_hdr *) buf;
-
- switch (ntohs(hdr->ethertype)) {
- case ETH_P_PAE:
- wpa_printf(MSG_MSGDUMP, "Received EAPOL packet");
- sa = hdr->src;
- os_memset(&event, 0, sizeof(event));
- event.new_sta.addr = sa;
- wpa_supplicant_event(ctx, EVENT_NEW_STA, &event);
-
- pos = (u8 *) (hdr + 1);
- left = len - sizeof(*hdr);
- drv_event_eapol_rx(ctx, sa, pos, left);
- break;
-
- default:
- wpa_printf(MSG_DEBUG, "Unknown ethertype 0x%04x in data frame",
- ntohs(hdr->ethertype));
- break;
- }
-#endif /* HOSTAPD */
-}
-
-
-static void macsec_drv_handle_read(int sock, void *eloop_ctx, void *sock_ctx)
-{
- int len;
- unsigned char buf[3000];
-
- len = recv(sock, buf, sizeof(buf), 0);
- if (len < 0) {
- wpa_printf(MSG_ERROR, "macsec_linux: recv: %s",
- strerror(errno));
- return;
- }
-
- macsec_drv_handle_data(eloop_ctx, buf, len);
-}
-
-#endif /* __linux__ */
-
-
-static int macsec_drv_init_sockets(struct macsec_drv_data *drv, u8 *own_addr)
-{
-#ifdef __linux__
- struct ifreq ifr;
- struct sockaddr_ll addr;
-
- drv->common.sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_PAE));
- if (drv->common.sock < 0) {
- wpa_printf(MSG_ERROR, "socket[PF_PACKET,SOCK_RAW]: %s",
- strerror(errno));
- return -1;
- }
-
- if (eloop_register_read_sock(drv->common.sock, macsec_drv_handle_read,
- drv->common.ctx, NULL)) {
- wpa_printf(MSG_INFO, "Could not register read socket");
- return -1;
- }
-
- os_memset(&ifr, 0, sizeof(ifr));
- os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name));
- if (ioctl(drv->common.sock, SIOCGIFINDEX, &ifr) != 0) {
- wpa_printf(MSG_ERROR, "ioctl(SIOCGIFINDEX): %s",
- strerror(errno));
- return -1;
- }
-
- os_memset(&addr, 0, sizeof(addr));
- addr.sll_family = AF_PACKET;
- addr.sll_ifindex = ifr.ifr_ifindex;
- wpa_printf(MSG_DEBUG, "Opening raw packet socket for ifindex %d",
- addr.sll_ifindex);
-
- if (bind(drv->common.sock, (struct sockaddr *) &addr, sizeof(addr)) < 0)
- {
- wpa_printf(MSG_ERROR, "bind: %s", strerror(errno));
- return -1;
- }
-
- /* filter multicast address */
- if (wired_multicast_membership(drv->common.sock, ifr.ifr_ifindex,
- pae_group_addr, 1) < 0) {
- wpa_printf(MSG_ERROR, "wired: Failed to add multicast group "
- "membership");
- return -1;
- }
-
- os_memset(&ifr, 0, sizeof(ifr));
- os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name));
- if (ioctl(drv->common.sock, SIOCGIFHWADDR, &ifr) != 0) {
- wpa_printf(MSG_ERROR, "ioctl(SIOCGIFHWADDR): %s",
- strerror(errno));
- return -1;
- }
-
- if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
- wpa_printf(MSG_INFO, "Invalid HW-addr family 0x%04x",
- ifr.ifr_hwaddr.sa_family);
- return -1;
- }
- os_memcpy(own_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
-
- return 0;
-#else /* __linux__ */
- return -1;
-#endif /* __linux__ */
-}
-
-
-static void * macsec_drv_hapd_init(struct hostapd_data *hapd,
- struct wpa_init_params *params)
-{
- struct macsec_drv_data *drv;
-
- drv = os_zalloc(sizeof(struct macsec_drv_data));
- if (drv == NULL) {
- wpa_printf(MSG_INFO,
- "Could not allocate memory for wired driver data");
- return NULL;
- }
-
- drv->common.ctx = hapd;
- os_strlcpy(drv->common.ifname, params->ifname,
- sizeof(drv->common.ifname));
- drv->use_pae_group_addr = params->use_pae_group_addr;
-
- if (macsec_drv_init_sockets(drv, params->own_addr)) {
- os_free(drv);
- return NULL;
- }
-
- return drv;
-}
-
-
-static void macsec_drv_hapd_deinit(void *priv)
-{
- struct macsec_drv_data *drv = priv;
-
- if (drv->common.sock >= 0) {
- eloop_unregister_read_sock(drv->common.sock);
- close(drv->common.sock);
- }
-
- os_free(drv);
-}
-
-
-static int macsec_drv_send_eapol(void *priv, const u8 *addr,
- const u8 *data, size_t data_len, int encrypt,
- const u8 *own_addr, u32 flags)
-{
- struct macsec_drv_data *drv = priv;
- struct ieee8023_hdr *hdr;
- size_t len;
- u8 *pos;
- int res;
-
- len = sizeof(*hdr) + data_len;
- hdr = os_zalloc(len);
- if (hdr == NULL) {
- wpa_printf(MSG_INFO,
- "%s: malloc() failed (len=%lu)",
- __func__, (unsigned long) len);
- return -1;
- }
-
- os_memcpy(hdr->dest, drv->use_pae_group_addr ? pae_group_addr : addr,
- ETH_ALEN);
- os_memcpy(hdr->src, own_addr, ETH_ALEN);
- hdr->ethertype = htons(ETH_P_PAE);
-
- pos = (u8 *) (hdr + 1);
- os_memcpy(pos, data, data_len);
-
- res = send(drv->common.sock, (u8 *) hdr, len, 0);
- os_free(hdr);
-
- if (res < 0) {
- wpa_printf(MSG_ERROR,
- "%s: packet len: %lu - failed: send: %s",
- __func__, (unsigned long) len, strerror(errno));
- }
-
- return res;
-}
-
-
const struct wpa_driver_ops wpa_driver_macsec_linux_ops = {
.name = "macsec_linux",
.desc = "MACsec Ethernet driver for Linux",
@@ -1618,9 +1407,6 @@
.get_capa = driver_wired_get_capa,
.init = macsec_drv_wpa_init,
.deinit = macsec_drv_wpa_deinit,
- .hapd_init = macsec_drv_hapd_init,
- .hapd_deinit = macsec_drv_hapd_deinit,
- .hapd_send_eapol = macsec_drv_send_eapol,
.macsec_init = macsec_drv_macsec_init,
.macsec_deinit = macsec_drv_macsec_deinit,
diff --git a/src/drivers/driver_macsec_qca.c b/src/drivers/driver_macsec_qca.c
index f4e55d5..8372393 100644
--- a/src/drivers/driver_macsec_qca.c
+++ b/src/drivers/driver_macsec_qca.c
@@ -3,7 +3,6 @@
* Copyright (c) 2005-2009, Jouni Malinen <j@w1.fi>
* Copyright (c) 2004, Gunter Burchardt <tira@isx.de>
* Copyright (c) 2013-2014, Qualcomm Atheros, Inc.
- * Copyright (c) 2019, The Linux Foundation
*
* This software may be distributed under the terms of the BSD license.
* See README for more details.
@@ -30,7 +29,6 @@
#include "utils/eloop.h"
#include "common/defs.h"
#include "common/ieee802_1x_defs.h"
-#include "common/eapol_common.h"
#include "pae/ieee802_1x_kay.h"
#include "driver.h"
#include "driver_wired_common.h"
@@ -66,7 +64,6 @@
struct macsec_qca_data {
struct driver_wired_common_data common;
- int use_pae_group_addr;
u32 secy_id;
/* shadow */
@@ -129,134 +126,6 @@
}
-#ifdef __linux__
-
-static void macsec_qca_handle_data(void *ctx, unsigned char *buf, size_t len)
-{
-#ifdef HOSTAPD
- struct ieee8023_hdr *hdr;
- u8 *pos, *sa;
- size_t left;
- union wpa_event_data event;
-
- /* at least 6 bytes src macaddress, 6 bytes dst macaddress
- * and 2 bytes ethertype
- */
- if (len < 14) {
- wpa_printf(MSG_MSGDUMP,
- "macsec_qca_handle_data: too short (%lu)",
- (unsigned long) len);
- return;
- }
- hdr = (struct ieee8023_hdr *) buf;
-
- switch (ntohs(hdr->ethertype)) {
- case ETH_P_PAE:
- wpa_printf(MSG_MSGDUMP, "Received EAPOL packet");
- sa = hdr->src;
- os_memset(&event, 0, sizeof(event));
- event.new_sta.addr = sa;
- wpa_supplicant_event(ctx, EVENT_NEW_STA, &event);
-
- pos = (u8 *) (hdr + 1);
- left = len - sizeof(*hdr);
- drv_event_eapol_rx(ctx, sa, pos, left);
- break;
- default:
- wpa_printf(MSG_DEBUG, "Unknown ethertype 0x%04x in data frame",
- ntohs(hdr->ethertype));
- break;
- }
-#endif /* HOSTAPD */
-}
-
-
-static void macsec_qca_handle_read(int sock, void *eloop_ctx, void *sock_ctx)
-{
- int len;
- unsigned char buf[3000];
-
- len = recv(sock, buf, sizeof(buf), 0);
- if (len < 0) {
- wpa_printf(MSG_ERROR, "macsec_qca: recv: %s", strerror(errno));
- return;
- }
-
- macsec_qca_handle_data(eloop_ctx, buf, len);
-}
-
-#endif /* __linux__ */
-
-
-static int macsec_qca_init_sockets(struct macsec_qca_data *drv, u8 *own_addr)
-{
-#ifdef __linux__
- struct ifreq ifr;
- struct sockaddr_ll addr;
-
- drv->common.sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_PAE));
- if (drv->common.sock < 0) {
- wpa_printf(MSG_ERROR, "socket[PF_PACKET,SOCK_RAW]: %s",
- strerror(errno));
- return -1;
- }
-
- if (eloop_register_read_sock(drv->common.sock, macsec_qca_handle_read,
- drv->common.ctx, NULL)) {
- wpa_printf(MSG_INFO, "Could not register read socket");
- return -1;
- }
-
- os_memset(&ifr, 0, sizeof(ifr));
- os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name));
- if (ioctl(drv->common.sock, SIOCGIFINDEX, &ifr) != 0) {
- wpa_printf(MSG_ERROR, "ioctl(SIOCGIFINDEX): %s",
- strerror(errno));
- return -1;
- }
-
- os_memset(&addr, 0, sizeof(addr));
- addr.sll_family = AF_PACKET;
- addr.sll_ifindex = ifr.ifr_ifindex;
- wpa_printf(MSG_DEBUG, "Opening raw packet socket for ifindex %d",
- addr.sll_ifindex);
-
- if (bind(drv->common.sock, (struct sockaddr *) &addr,
- sizeof(addr)) < 0) {
- wpa_printf(MSG_ERROR, "macsec_qca: bind: %s", strerror(errno));
- return -1;
- }
-
- /* filter multicast address */
- if (wired_multicast_membership(drv->common.sock, ifr.ifr_ifindex,
- pae_group_addr, 1) < 0) {
- wpa_printf(MSG_ERROR,
- "macsec_qca_init_sockets: Failed to add multicast group membership");
- return -1;
- }
-
- os_memset(&ifr, 0, sizeof(ifr));
- os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name));
- if (ioctl(drv->common.sock, SIOCGIFHWADDR, &ifr) != 0) {
- wpa_printf(MSG_ERROR, "ioctl(SIOCGIFHWADDR): %s",
- strerror(errno));
- return -1;
- }
-
- if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
- wpa_printf(MSG_INFO, "Invalid HW-addr family 0x%04x",
- ifr.ifr_hwaddr.sa_family);
- return -1;
- }
- os_memcpy(own_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
-
- return 0;
-#else /* __linux__ */
- return -1;
-#endif /* __linux__ */
-}
-
-
static void * macsec_qca_init(void *ctx, const char *ifname)
{
struct macsec_qca_data *drv;
@@ -291,97 +160,6 @@
}
-static void * macsec_qca_hapd_init(struct hostapd_data *hapd,
- struct wpa_init_params *params)
-{
- struct macsec_qca_data *drv;
-
- drv = os_zalloc(sizeof(struct macsec_qca_data));
- if (!drv) {
- wpa_printf(MSG_INFO,
- "Could not allocate memory for macsec_qca driver data");
- return NULL;
- }
-
- /* Board specific settings */
- if (os_memcmp("eth2", params->ifname, 4) == 0)
- drv->secy_id = 1;
- else if (os_memcmp("eth3", params->ifname, 4) == 0)
- drv->secy_id = 2;
- else if (os_memcmp("eth4", params->ifname, 4) == 0)
- drv->secy_id = 0;
- else if (os_memcmp("eth5", params->ifname, 4) == 0)
- drv->secy_id = 1;
- else
- drv->secy_id = -1;
-
- drv->common.ctx = hapd;
- os_strlcpy(drv->common.ifname, params->ifname,
- sizeof(drv->common.ifname));
- drv->use_pae_group_addr = params->use_pae_group_addr;
-
- if (macsec_qca_init_sockets(drv, params->own_addr)) {
- os_free(drv);
- return NULL;
- }
-
- return drv;
-}
-
-
-static void macsec_qca_hapd_deinit(void *priv)
-{
- struct macsec_qca_data *drv = priv;
-
- if (drv->common.sock >= 0) {
- eloop_unregister_read_sock(drv->common.sock);
- close(drv->common.sock);
- }
-
- os_free(drv);
-}
-
-
-static int macsec_qca_send_eapol(void *priv, const u8 *addr,
- const u8 *data, size_t data_len, int encrypt,
- const u8 *own_addr, u32 flags)
-{
- struct macsec_qca_data *drv = priv;
- struct ieee8023_hdr *hdr;
- size_t len;
- u8 *pos;
- int res;
-
- len = sizeof(*hdr) + data_len;
- hdr = os_zalloc(len);
- if (!hdr) {
- wpa_printf(MSG_INFO,
- "malloc() failed for macsec_qca_send_eapol(len=%lu)",
- (unsigned long) len);
- return -1;
- }
-
- os_memcpy(hdr->dest, drv->use_pae_group_addr ? pae_group_addr : addr,
- ETH_ALEN);
- os_memcpy(hdr->src, own_addr, ETH_ALEN);
- hdr->ethertype = htons(ETH_P_PAE);
-
- pos = (u8 *) (hdr + 1);
- os_memcpy(pos, data, data_len);
-
- res = send(drv->common.sock, (u8 *) hdr, len, 0);
- os_free(hdr);
-
- if (res < 0) {
- wpa_printf(MSG_ERROR,
- "macsec_qca_send_eapol - packet len: %lu - failed: send: %s",
- (unsigned long) len, strerror(errno));
- }
-
- return res;
-}
-
-
static int macsec_qca_macsec_init(void *priv, struct macsec_init_params *params)
{
struct macsec_qca_data *drv = priv;
@@ -1022,9 +800,6 @@
.get_capa = driver_wired_get_capa,
.init = macsec_qca_init,
.deinit = macsec_qca_deinit,
- .hapd_init = macsec_qca_hapd_init,
- .hapd_deinit = macsec_qca_hapd_deinit,
- .hapd_send_eapol = macsec_qca_send_eapol,
.macsec_init = macsec_qca_macsec_init,
.macsec_deinit = macsec_qca_macsec_deinit,
diff --git a/src/drivers/driver_ndis.c b/src/drivers/driver_ndis.c
index 5b4b924..614c452 100644
--- a/src/drivers/driver_ndis.c
+++ b/src/drivers/driver_ndis.c
@@ -719,7 +719,7 @@
static int wpa_driver_ndis_deauthenticate(void *priv, const u8 *addr,
- u16 reason_code)
+ int reason_code)
{
struct wpa_driver_ndis_data *drv = priv;
return wpa_driver_ndis_disconnect(drv);
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 45835a2..21d1398 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -236,7 +236,7 @@
struct wpa_driver_mesh_bss_params *params);
#endif /* CONFIG_MESH */
static int i802_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason);
+ int reason);
/* Converts nl80211_chan_width to a common format */
@@ -2010,8 +2010,9 @@
*/
drv->set_rekey_offload = 1;
- drv->num_if_indices = ARRAY_SIZE(drv->default_if_indices);
+ drv->num_if_indices = sizeof(drv->default_if_indices) / sizeof(int);
drv->if_indices = drv->default_if_indices;
+ drv->if_indices_reason = drv->default_if_indices_reason;
drv->first_bss = os_zalloc(sizeof(*drv->first_bss));
if (!drv->first_bss) {
@@ -2788,6 +2789,9 @@
if (drv->if_indices != drv->default_if_indices)
os_free(drv->if_indices);
+ if (drv->if_indices_reason != drv->default_if_indices_reason)
+ os_free(drv->if_indices_reason);
+
if (drv->disabled_11b_rates)
nl80211_disable_11b_rates(drv, drv->ifindex, 0);
@@ -3278,7 +3282,7 @@
static int wpa_driver_nl80211_disconnect(struct wpa_driver_nl80211_data *drv,
- u16 reason_code,
+ int reason_code,
struct nl_handle *nl_connect)
{
int ret;
@@ -3300,7 +3304,7 @@
static int wpa_driver_nl80211_deauthenticate(struct i802_bss *bss,
- const u8 *addr, u16 reason_code)
+ const u8 *addr, int reason_code)
{
struct wpa_driver_nl80211_data *drv = bss->drv;
int ret;
@@ -4167,10 +4171,8 @@
nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT)))
goto fail;
- if (drv->device_ap_sme &&
- (params->key_mgmt_suites & WPA_KEY_MGMT_SAE) &&
- nla_put_flag(msg, NL80211_ATTR_EXTERNAL_AUTH_SUPPORT))
- goto fail;
+ if (drv->device_ap_sme && (params->key_mgmt_suites & WPA_KEY_MGMT_SAE))
+ nla_put_flag(msg, NL80211_ATTR_EXTERNAL_AUTH_SUPPORT);
wpa_printf(MSG_DEBUG, "nl80211: pairwise_ciphers=0x%x",
params->pairwise_ciphers);
@@ -4348,11 +4350,10 @@
if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq->freq))
return -ENOBUFS;
- wpa_printf(MSG_DEBUG, " * he_enabled=%d", freq->he_enabled);
wpa_printf(MSG_DEBUG, " * vht_enabled=%d", freq->vht_enabled);
wpa_printf(MSG_DEBUG, " * ht_enabled=%d", freq->ht_enabled);
- if (freq->vht_enabled || freq->he_enabled) {
+ if (freq->vht_enabled) {
enum nl80211_chan_width cw;
wpa_printf(MSG_DEBUG, " * bandwidth=%d", freq->bandwidth);
@@ -4427,8 +4428,8 @@
int ret;
wpa_printf(MSG_DEBUG,
- "nl80211: Set freq %d (ht_enabled=%d, vht_enabled=%d, he_enabled=%d, bandwidth=%d MHz, cf1=%d MHz, cf2=%d MHz)",
- freq->freq, freq->ht_enabled, freq->vht_enabled, freq->he_enabled,
+ "nl80211: Set freq %d (ht_enabled=%d, vht_enabled=%d, bandwidth=%d MHz, cf1=%d MHz, cf2=%d MHz)",
+ freq->freq, freq->ht_enabled, freq->vht_enabled,
freq->bandwidth, freq->center_freq1, freq->center_freq2);
msg = nl80211_drv_msg(drv, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
@@ -4560,14 +4561,6 @@
goto fail;
}
- if (params->he_capab) {
- wpa_hexdump(MSG_DEBUG, " * he_capab",
- params->he_capab, params->he_capab_len);
- if (nla_put(msg, NL80211_ATTR_HE_CAPABILITY,
- params->he_capab_len, params->he_capab))
- goto fail;
- }
-
if (params->ext_capab) {
wpa_hexdump(MSG_DEBUG, " * ext_capab",
params->ext_capab, params->ext_capab_len);
@@ -5192,28 +5185,6 @@
}
-static int driver_nl80211_sta_set_airtime_weight(void *priv, const u8 *addr,
- unsigned int weight)
-{
- struct i802_bss *bss = priv;
- struct nl_msg *msg;
-
- wpa_printf(MSG_DEBUG,
- "nl80211: Set STA airtime weight - ifname=%s addr=" MACSTR
- " weight=%u", bss->ifname, MAC2STR(addr), weight);
-
- if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_STATION)) ||
- nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) ||
- nla_put_u16(msg, NL80211_ATTR_AIRTIME_WEIGHT, weight))
- goto fail;
-
- return send_and_recv_msgs(bss->drv, msg, NULL, NULL);
-fail:
- nlmsg_free(msg);
- return -ENOBUFS;
-}
-
-
static int wpa_driver_nl80211_ap(struct wpa_driver_nl80211_data *drv,
struct wpa_driver_associate_params *params)
{
@@ -6293,36 +6264,6 @@
}
-static void get_sta_tid_stats(struct hostap_sta_driver_data *data,
- struct nlattr *attr)
-{
- struct nlattr *tid_stats[NL80211_TID_STATS_MAX + 1], *tidattr;
- struct nlattr *txq_stats[NL80211_TXQ_STATS_MAX + 1];
- static struct nla_policy txq_stats_policy[NL80211_TXQ_STATS_MAX + 1] = {
- [NL80211_TXQ_STATS_BACKLOG_BYTES] = { .type = NLA_U32 },
- [NL80211_TXQ_STATS_BACKLOG_PACKETS] = { .type = NLA_U32 },
- };
- int rem;
-
- nla_for_each_nested(tidattr, attr, rem) {
- if (nla_parse_nested(tid_stats, NL80211_TID_STATS_MAX,
- tidattr, NULL) != 0 ||
- !tid_stats[NL80211_TID_STATS_TXQ_STATS] ||
- nla_parse_nested(txq_stats, NL80211_TXQ_STATS_MAX,
- tid_stats[NL80211_TID_STATS_TXQ_STATS],
- txq_stats_policy) != 0)
- continue;
- /* sum the backlogs over all TIDs for station */
- if (txq_stats[NL80211_TXQ_STATS_BACKLOG_BYTES])
- data->backlog_bytes += nla_get_u32(
- txq_stats[NL80211_TXQ_STATS_BACKLOG_BYTES]);
- if (txq_stats[NL80211_TXQ_STATS_BACKLOG_PACKETS])
- data->backlog_bytes += nla_get_u32(
- txq_stats[NL80211_TXQ_STATS_BACKLOG_PACKETS]);
- }
-}
-
-
static int get_sta_handler(struct nl_msg *msg, void *arg)
{
struct nlattr *tb[NL80211_ATTR_MAX + 1];
@@ -6340,8 +6281,6 @@
[NL80211_STA_INFO_TX_BYTES64] = { .type = NLA_U64 },
[NL80211_STA_INFO_SIGNAL] = { .type = NLA_U8 },
[NL80211_STA_INFO_ACK_SIGNAL] = { .type = NLA_U8 },
- [NL80211_STA_INFO_RX_DURATION] = { .type = NLA_U64 },
- [NL80211_STA_INFO_TX_DURATION] = { .type = NLA_U64 },
};
struct nlattr *rate[NL80211_RATE_INFO_MAX + 1];
static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = {
@@ -6399,12 +6338,6 @@
if (stats[NL80211_STA_INFO_TX_PACKETS])
data->tx_packets =
nla_get_u32(stats[NL80211_STA_INFO_TX_PACKETS]);
- if (stats[NL80211_STA_INFO_RX_DURATION])
- data->rx_airtime =
- nla_get_u64(stats[NL80211_STA_INFO_RX_DURATION]);
- if (stats[NL80211_STA_INFO_TX_DURATION])
- data->tx_airtime =
- nla_get_u64(stats[NL80211_STA_INFO_TX_DURATION]);
if (stats[NL80211_STA_INFO_TX_FAILED])
data->tx_retry_failed =
nla_get_u32(stats[NL80211_STA_INFO_TX_FAILED]);
@@ -6475,9 +6408,6 @@
}
}
- if (stats[NL80211_STA_INFO_TID_STATS])
- get_sta_tid_stats(data, stats[NL80211_STA_INFO_TID_STATS]);
-
return NL_SKIP;
}
@@ -6618,7 +6548,7 @@
static int i802_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason)
+ int reason)
{
struct i802_bss *bss = priv;
struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -6653,7 +6583,7 @@
static int i802_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
- u16 reason)
+ int reason)
{
struct i802_bss *bss = priv;
struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -6688,11 +6618,11 @@
end = pos + sizeof(buf);
for (i = 0; i < drv->num_if_indices; i++) {
- if (!drv->if_indices[i].ifindex)
+ if (!drv->if_indices[i])
continue;
res = os_snprintf(pos, end - pos, " %d(%d)",
- drv->if_indices[i].ifindex,
- drv->if_indices[i].reason);
+ drv->if_indices[i],
+ drv->if_indices_reason[i]);
if (os_snprintf_error(end - pos, res))
break;
pos += res;
@@ -6708,7 +6638,7 @@
int ifidx_reason)
{
int i;
- struct drv_nl80211_if_info *old;
+ int *old, *old_reason;
wpa_printf(MSG_DEBUG,
"nl80211: Add own interface ifindex %d (ifidx_reason %d)",
@@ -6719,9 +6649,9 @@
return;
}
for (i = 0; i < drv->num_if_indices; i++) {
- if (drv->if_indices[i].ifindex == 0) {
- drv->if_indices[i].ifindex = ifidx;
- drv->if_indices[i].reason = ifidx_reason;
+ if (drv->if_indices[i] == 0) {
+ drv->if_indices[i] = ifidx;
+ drv->if_indices_reason[i] = ifidx_reason;
dump_ifidx(drv);
return;
}
@@ -6732,13 +6662,29 @@
else
old = NULL;
+ if (drv->if_indices_reason != drv->default_if_indices_reason)
+ old_reason = drv->if_indices_reason;
+ else
+ old_reason = NULL;
+
drv->if_indices = os_realloc_array(old, drv->num_if_indices + 1,
- sizeof(*old));
+ sizeof(int));
+ drv->if_indices_reason = os_realloc_array(old_reason,
+ drv->num_if_indices + 1,
+ sizeof(int));
if (!drv->if_indices) {
if (!old)
drv->if_indices = drv->default_if_indices;
else
drv->if_indices = old;
+ }
+ if (!drv->if_indices_reason) {
+ if (!old_reason)
+ drv->if_indices_reason = drv->default_if_indices_reason;
+ else
+ drv->if_indices_reason = old_reason;
+ }
+ if (!drv->if_indices || !drv->if_indices_reason) {
wpa_printf(MSG_ERROR, "Failed to reallocate memory for "
"interfaces");
wpa_printf(MSG_ERROR, "Ignoring EAPOL on interface %d", ifidx);
@@ -6747,8 +6693,12 @@
if (!old)
os_memcpy(drv->if_indices, drv->default_if_indices,
sizeof(drv->default_if_indices));
- drv->if_indices[drv->num_if_indices].ifindex = ifidx;
- drv->if_indices[drv->num_if_indices].reason = ifidx_reason;
+ if (!old_reason)
+ os_memcpy(drv->if_indices_reason,
+ drv->default_if_indices_reason,
+ sizeof(drv->default_if_indices_reason));
+ drv->if_indices[drv->num_if_indices] = ifidx;
+ drv->if_indices_reason[drv->num_if_indices] = ifidx_reason;
drv->num_if_indices++;
dump_ifidx(drv);
}
@@ -6760,12 +6710,10 @@
int i;
for (i = 0; i < drv->num_if_indices; i++) {
- if ((drv->if_indices[i].ifindex == ifidx ||
- ifidx == IFIDX_ANY) &&
- (drv->if_indices[i].reason == ifidx_reason ||
+ if ((drv->if_indices[i] == ifidx || ifidx == IFIDX_ANY) &&
+ (drv->if_indices_reason[i] == ifidx_reason ||
ifidx_reason == IFIDX_ANY)) {
- drv->if_indices[i].ifindex = 0;
- drv->if_indices[i].reason = 0;
+ drv->if_indices[i] = 0;
break;
}
}
@@ -6779,8 +6727,8 @@
int i;
for (i = 0; i < drv->num_if_indices; i++)
- if (drv->if_indices[i].ifindex == ifidx &&
- (drv->if_indices[i].reason == ifidx_reason ||
+ if (drv->if_indices[i] == ifidx &&
+ (drv->if_indices_reason[i] == ifidx_reason ||
ifidx_reason == IFIDX_ANY))
return 1;
@@ -8422,8 +8370,8 @@
struct nl_msg *msg;
int ret;
- wpa_printf(MSG_DEBUG, "nl80211: Start radar detection (CAC) %d MHz (ht_enabled=%d, vht_enabled=%d, he_enabled=%d, bandwidth=%d MHz, cf1=%d MHz, cf2=%d MHz)",
- freq->freq, freq->ht_enabled, freq->vht_enabled, freq->he_enabled,
+ wpa_printf(MSG_DEBUG, "nl80211: Start radar detection (CAC) %d MHz (ht_enabled=%d, vht_enabled=%d, bandwidth=%d MHz, cf1=%d MHz, cf2=%d MHz)",
+ freq->freq, freq->ht_enabled, freq->vht_enabled,
freq->bandwidth, freq->center_freq1, freq->center_freq2);
if (!(drv->capa.flags & WPA_DRIVER_FLAGS_RADAR)) {
@@ -8635,7 +8583,7 @@
static int driver_nl80211_deauthenticate(void *priv, const u8 *addr,
- u16 reason_code)
+ int reason_code)
{
struct i802_bss *bss = priv;
return wpa_driver_nl80211_deauthenticate(bss, addr, reason_code);
@@ -8750,35 +8698,6 @@
}
-static int nl80211_update_dh_ie(void *priv, const u8 *peer_mac,
- u16 reason_code, const u8 *ie, size_t ie_len)
-{
- int ret;
- struct nl_msg *msg;
- struct i802_bss *bss = priv;
- struct wpa_driver_nl80211_data *drv = bss->drv;
-
- wpa_printf(MSG_DEBUG, "nl80211: Updating DH IE peer: " MACSTR
- " reason %u", MAC2STR(peer_mac), reason_code);
- if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_UPDATE_OWE_INFO)) ||
- nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer_mac) ||
- nla_put_u16(msg, NL80211_ATTR_STATUS_CODE, reason_code) ||
- (ie && nla_put(msg, NL80211_ATTR_IE, ie_len, ie))) {
- nlmsg_free(msg);
- return -ENOBUFS;
- }
-
- ret = send_and_recv_msgs(drv, msg, NULL, NULL);
- if (ret) {
- wpa_printf(MSG_DEBUG,
- "nl80211: update_dh_ie failed err=%d (%s)",
- ret, strerror(-ret));
- }
-
- return ret;
-}
-
-
static const u8 * wpa_driver_nl80211_get_macaddr(void *priv)
{
struct i802_bss *bss = priv;
@@ -9727,36 +9646,6 @@
return ret;
}
-
-static int nl80211_probe_mesh_link(void *priv, const u8 *addr, const u8 *eth,
- size_t len)
-{
- struct i802_bss *bss = priv;
- struct wpa_driver_nl80211_data *drv = bss->drv;
- struct nl_msg *msg;
- int ret;
-
- msg = nl80211_drv_msg(drv, 0, NL80211_CMD_PROBE_MESH_LINK);
- if (!msg ||
- nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) ||
- nla_put(msg, NL80211_ATTR_FRAME, len, eth)) {
- nlmsg_free(msg);
- return -ENOBUFS;
- }
-
- ret = send_and_recv_msgs(drv, msg, NULL, NULL);
- if (ret) {
- wpa_printf(MSG_DEBUG, "nl80211: mesh link probe to " MACSTR
- " failed: ret=%d (%s)",
- MAC2STR(addr), ret, strerror(-ret));
- } else {
- wpa_printf(MSG_DEBUG, "nl80211: Mesh link to " MACSTR
- " probed successfully", MAC2STR(addr));
- }
-
- return ret;
-}
-
#endif /* CONFIG_MESH */
@@ -10928,7 +10817,7 @@
* SAE) to hostapd/wpa_supplicant. Do nott send the status to drivers
* which do not support AP SME or use wpa_supplicant/hostapd SME.
*/
- if ((is_ap_interface(drv->nlmode) && !bss->drv->device_ap_sme) ||
+ if (!bss->drv->device_ap_sme ||
(drv->capa.flags & WPA_DRIVER_FLAGS_SME))
return -1;
@@ -11035,7 +10924,6 @@
.sta_remove = driver_nl80211_sta_remove,
.hapd_send_eapol = wpa_driver_nl80211_hapd_send_eapol,
.sta_set_flags = wpa_driver_nl80211_sta_set_flags,
- .sta_set_airtime_weight = driver_nl80211_sta_set_airtime_weight,
.hapd_init = i802_init,
.hapd_deinit = i802_deinit,
.set_wds_sta = i802_set_wds_sta,
@@ -11081,7 +10969,6 @@
.tdls_disable_channel_switch = nl80211_tdls_disable_channel_switch,
#endif /* CONFIG_TDLS */
.update_ft_ies = wpa_driver_nl80211_update_ft_ies,
- .update_dh_ie = nl80211_update_dh_ie,
.get_mac_addr = wpa_driver_nl80211_get_macaddr,
.get_survey = wpa_driver_nl80211_get_survey,
.status = wpa_driver_nl80211_status,
@@ -11104,7 +10991,6 @@
.init_mesh = wpa_driver_nl80211_init_mesh,
.join_mesh = wpa_driver_nl80211_join_mesh,
.leave_mesh = wpa_driver_nl80211_leave_mesh,
- .probe_mesh_link = nl80211_probe_mesh_link,
#endif /* CONFIG_MESH */
.br_add_ip_neigh = wpa_driver_br_add_ip_neigh,
.br_delete_ip_neigh = wpa_driver_br_delete_ip_neigh,
diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h
index 7498269..1e7fe7a 100644
--- a/src/drivers/driver_nl80211.h
+++ b/src/drivers/driver_nl80211.h
@@ -83,12 +83,6 @@
u8 rand_addr[ETH_ALEN];
};
-struct drv_nl80211_if_info {
- int ifindex;
- /* the AP/AP_VLAN iface that is in this bridge */
- int reason;
-};
-
struct wpa_driver_nl80211_data {
struct nl80211_global *global;
struct dl_list list;
@@ -169,6 +163,7 @@
unsigned int scan_vendor_cmd_avail:1;
unsigned int connect_reassoc:1;
unsigned int set_wifi_conf_vendor_cmd_avail:1;
+ unsigned int he_capab_vendor_cmd_avail:1;
unsigned int fetch_bss_trans_status:1;
unsigned int roam_vendor_cmd_avail:1;
unsigned int get_supported_akm_suites_avail:1;
@@ -193,8 +188,11 @@
struct nl_handle *rtnl_sk; /* nl_sock for NETLINK_ROUTE */
- struct drv_nl80211_if_info default_if_indices[16];
- struct drv_nl80211_if_info *if_indices;
+ int default_if_indices[16];
+ /* the AP/AP_VLAN iface that is in this bridge */
+ int default_if_indices_reason[16];
+ int *if_indices;
+ int *if_indices_reason;
int num_if_indices;
/* From failed authentication command */
@@ -217,6 +215,8 @@
* (NL80211_CMD_VENDOR). 0 if no pending scan request.
*/
int last_scan_cmd;
+
+ struct he_capabilities he_capab;
};
struct nl_msg;
diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
index 8318b10..37eeb5e 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -778,6 +778,9 @@
case QCA_NL80211_VENDOR_SUBCMD_SET_WIFI_CONFIGURATION:
drv->set_wifi_conf_vendor_cmd_avail = 1;
break;
+ case QCA_NL80211_VENDOR_SUBCMD_GET_HE_CAPABILITIES:
+ drv->he_capab_vendor_cmd_avail = 1;
+ break;
case QCA_NL80211_VENDOR_SUBCMD_FETCH_BSS_TRANSITION_STATUS:
drv->fetch_bss_trans_status = 1;
break;
@@ -1079,6 +1082,100 @@
}
+static int qca_nl80211_he_capab_handler(struct nl_msg *msg, void *arg)
+{
+ struct nlattr *tb[NL80211_ATTR_MAX + 1];
+ struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
+ struct he_capabilities *he_capab = arg;
+ struct nlattr *nl_vend;
+ struct nlattr *tb_vendor[QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_MAX + 1];
+ size_t len;
+
+ nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
+ genlmsg_attrlen(gnlh, 0), NULL);
+
+ if (!tb[NL80211_ATTR_VENDOR_DATA])
+ return NL_SKIP;
+
+ nl_vend = tb[NL80211_ATTR_VENDOR_DATA];
+ nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_MAX,
+ nla_data(nl_vend), nla_len(nl_vend), NULL);
+
+ if (tb_vendor[QCA_WLAN_VENDOR_ATTR_HE_SUPPORTED]) {
+ u8 he_supported;
+
+ he_supported = nla_get_u8(
+ tb_vendor[QCA_WLAN_VENDOR_ATTR_HE_SUPPORTED]);
+ wpa_printf(MSG_DEBUG, "nl80211: HE capabilities supported: %u",
+ he_supported);
+ he_capab->he_supported = he_supported;
+ if (!he_supported)
+ return NL_SKIP;
+ }
+
+ if (tb_vendor[QCA_WLAN_VENDOR_ATTR_PHY_CAPAB]) {
+ len = nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_PHY_CAPAB]);
+
+ if (len > sizeof(he_capab->phy_cap))
+ len = sizeof(he_capab->phy_cap);
+ os_memcpy(he_capab->phy_cap,
+ nla_data(tb_vendor[QCA_WLAN_VENDOR_ATTR_PHY_CAPAB]),
+ len);
+ }
+
+ if (tb_vendor[QCA_WLAN_VENDOR_ATTR_MAC_CAPAB])
+ he_capab->mac_cap =
+ nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_MAC_CAPAB]);
+
+ if (tb_vendor[QCA_WLAN_VENDOR_ATTR_HE_MCS])
+ he_capab->mcs =
+ nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_HE_MCS]);
+
+ if (tb_vendor[QCA_WLAN_VENDOR_ATTR_NUM_SS])
+ he_capab->ppet.numss_m1 =
+ nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NUM_SS]);
+
+ if (tb_vendor[QCA_WLAN_VENDOR_ATTR_RU_IDX_MASK])
+ he_capab->ppet.ru_count =
+ nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_RU_IDX_MASK]);
+
+ if (tb_vendor[QCA_WLAN_VENDOR_ATTR_PPE_THRESHOLD]) {
+ len = nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_PPE_THRESHOLD]);
+
+ if (len > sizeof(he_capab->ppet.ppet16_ppet8_ru3_ru0))
+ len = sizeof(he_capab->ppet.ppet16_ppet8_ru3_ru0);
+ os_memcpy(he_capab->ppet.ppet16_ppet8_ru3_ru0,
+ nla_data(tb_vendor[QCA_WLAN_VENDOR_ATTR_PPE_THRESHOLD]),
+ len);
+ }
+
+ return NL_SKIP;
+}
+
+
+static void qca_nl80211_check_he_capab(struct wpa_driver_nl80211_data *drv)
+{
+ struct nl_msg *msg;
+ int ret;
+
+ if (!drv->he_capab_vendor_cmd_avail)
+ return;
+
+ if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) ||
+ nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, OUI_QCA) ||
+ nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD,
+ QCA_NL80211_VENDOR_SUBCMD_GET_HE_CAPABILITIES)) {
+ nlmsg_free(msg);
+ return;
+ }
+
+ ret = send_and_recv_msgs(drv, msg, qca_nl80211_he_capab_handler,
+ &drv->he_capab);
+ if (!ret && drv->he_capab.he_supported)
+ drv->capa.flags |= WPA_DRIVER_FLAGS_HE_CAPABILITIES;
+}
+
+
struct features_info {
u8 *flags;
size_t flags_len;
@@ -1276,6 +1373,7 @@
if (!(info.capa->flags & WPA_DRIVER_FLAGS_DFS_OFFLOAD))
qca_nl80211_check_dfs_capa(drv);
qca_nl80211_get_features(drv);
+ qca_nl80211_check_he_capab(drv);
/*
* To enable offchannel simultaneous support in wpa_supplicant, the
@@ -1394,57 +1492,6 @@
chan->dfs_cac_ms = nla_get_u32(
tb_freq[NL80211_FREQUENCY_ATTR_DFS_CAC_TIME]);
}
-
- chan->wmm_rules_valid = 0;
- if (tb_freq[NL80211_FREQUENCY_ATTR_WMM]) {
- static struct nla_policy wmm_policy[NL80211_WMMR_MAX + 1] = {
- [NL80211_WMMR_CW_MIN] = { .type = NLA_U16 },
- [NL80211_WMMR_CW_MAX] = { .type = NLA_U16 },
- [NL80211_WMMR_AIFSN] = { .type = NLA_U8 },
- [NL80211_WMMR_TXOP] = { .type = NLA_U16 },
- };
- struct nlattr *nl_wmm;
- struct nlattr *tb_wmm[NL80211_WMMR_MAX + 1];
- int rem_wmm, ac, count = 0;
-
- nla_for_each_nested(nl_wmm, tb_freq[NL80211_FREQUENCY_ATTR_WMM],
- rem_wmm) {
- if (nla_parse_nested(tb_wmm, NL80211_WMMR_MAX, nl_wmm,
- wmm_policy)) {
- wpa_printf(MSG_DEBUG,
- "nl80211: Failed to parse WMM rules attribute");
- return;
- }
- if (!tb_wmm[NL80211_WMMR_CW_MIN] ||
- !tb_wmm[NL80211_WMMR_CW_MAX] ||
- !tb_wmm[NL80211_WMMR_AIFSN] ||
- !tb_wmm[NL80211_WMMR_TXOP]) {
- wpa_printf(MSG_DEBUG,
- "nl80211: Channel is missing WMM rule attribute");
- return;
- }
- ac = nl_wmm->nla_type;
- if (ac < 0 || ac >= WMM_AC_NUM) {
- wpa_printf(MSG_DEBUG,
- "nl80211: Invalid AC value %d", ac);
- return;
- }
-
- chan->wmm_rules[ac].min_cwmin =
- nla_get_u16(tb_wmm[NL80211_WMMR_CW_MIN]);
- chan->wmm_rules[ac].min_cwmax =
- nla_get_u16(tb_wmm[NL80211_WMMR_CW_MAX]);
- chan->wmm_rules[ac].min_aifs =
- nla_get_u8(tb_wmm[NL80211_WMMR_AIFSN]);
- chan->wmm_rules[ac].max_txop =
- nla_get_u16(tb_wmm[NL80211_WMMR_TXOP]) / 32;
- count++;
- }
-
- /* Set valid flag if all the AC rules are present */
- if (count == WMM_AC_NUM)
- chan->wmm_rules_valid = 1;
- }
}
@@ -1551,101 +1598,6 @@
}
-static void phy_info_iftype_copy(struct he_capabilities *he_capab,
- enum ieee80211_op_mode opmode,
- struct nlattr **tb, struct nlattr **tb_flags)
-{
- enum nl80211_iftype iftype;
- size_t len;
-
- switch (opmode) {
- case IEEE80211_MODE_INFRA:
- iftype = NL80211_IFTYPE_STATION;
- break;
- case IEEE80211_MODE_IBSS:
- iftype = NL80211_IFTYPE_ADHOC;
- break;
- case IEEE80211_MODE_AP:
- iftype = NL80211_IFTYPE_AP;
- break;
- case IEEE80211_MODE_MESH:
- iftype = NL80211_IFTYPE_MESH_POINT;
- break;
- default:
- return;
- }
-
- if (!nla_get_flag(tb_flags[iftype]))
- return;
-
- he_capab->he_supported = 1;
-
- if (tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY]) {
- len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY]);
-
- if (len > sizeof(he_capab->phy_cap))
- len = sizeof(he_capab->phy_cap);
- os_memcpy(he_capab->phy_cap,
- nla_data(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY]),
- len);
- }
-
- if (tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC]) {
- len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC]);
-
- if (len > sizeof(he_capab->mac_cap))
- len = sizeof(he_capab->mac_cap);
- os_memcpy(he_capab->mac_cap,
- nla_data(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC]),
- len);
- }
-
- if (tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET]) {
- len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET]);
-
- if (len > sizeof(he_capab->mcs))
- len = sizeof(he_capab->mcs);
- os_memcpy(he_capab->mcs,
- nla_data(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET]),
- len);
- }
-
- if (tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE]) {
- len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE]);
-
- if (len > sizeof(he_capab->ppet))
- len = sizeof(he_capab->ppet);
- os_memcpy(&he_capab->ppet,
- nla_data(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE]),
- len);
- }
-}
-
-
-static int phy_info_iftype(struct hostapd_hw_modes *mode,
- struct nlattr *nl_iftype)
-{
- struct nlattr *tb[NL80211_BAND_IFTYPE_ATTR_MAX + 1];
- struct nlattr *tb_flags[NL80211_IFTYPE_MAX + 1];
- unsigned int i;
-
- nla_parse(tb, NL80211_BAND_IFTYPE_ATTR_MAX,
- nla_data(nl_iftype), nla_len(nl_iftype), NULL);
-
- if (!tb[NL80211_BAND_IFTYPE_ATTR_IFTYPES])
- return NL_STOP;
-
- if (nla_parse_nested(tb_flags, NL80211_IFTYPE_MAX,
- tb[NL80211_BAND_IFTYPE_ATTR_IFTYPES], NULL))
- return NL_STOP;
-
- for (i = 0; i < IEEE80211_MODE_NUM; i++)
- phy_info_iftype_copy(&mode->he_capab[i], i, tb, tb_flags);
-
- return NL_OK;
-}
-
-
static int phy_info_band(struct phy_info_arg *phy_info, struct nlattr *nl_band)
{
struct nlattr *tb_band[NL80211_BAND_ATTR_MAX + 1];
@@ -1702,19 +1654,6 @@
return ret;
}
- if (tb_band[NL80211_BAND_ATTR_IFTYPE_DATA]) {
- struct nlattr *nl_iftype;
- int rem_band;
-
- nla_for_each_nested(nl_iftype,
- tb_band[NL80211_BAND_ATTR_IFTYPE_DATA],
- rem_band) {
- ret = phy_info_iftype(mode, nl_iftype);
- if (ret != NL_OK)
- return ret;
- }
- }
-
return NL_OK;
}
diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c
index 7c16330..ee7b4da 100644
--- a/src/drivers/driver_nl80211_event.c
+++ b/src/drivers/driver_nl80211_event.c
@@ -136,7 +136,6 @@
C2S(NL80211_CMD_EXTERNAL_AUTH)
C2S(NL80211_CMD_STA_OPMODE_CHANGED)
C2S(NL80211_CMD_CONTROL_PORT_FRAME)
- C2S(NL80211_CMD_UPDATE_OWE_INFO)
default:
return "NL80211_CMD_UNKNOWN";
}
@@ -535,8 +534,7 @@
static void mlme_event_ch_switch(struct wpa_driver_nl80211_data *drv,
struct nlattr *ifindex, struct nlattr *freq,
struct nlattr *type, struct nlattr *bw,
- struct nlattr *cf1, struct nlattr *cf2,
- int finished)
+ struct nlattr *cf1, struct nlattr *cf2)
{
struct i802_bss *bss;
union wpa_event_data data;
@@ -544,8 +542,7 @@
int chan_offset = 0;
int ifidx;
- wpa_printf(MSG_DEBUG, "nl80211: Channel switch%s event",
- finished ? "" : " started");
+ wpa_printf(MSG_DEBUG, "nl80211: Channel switch event");
if (!freq)
return;
@@ -596,12 +593,10 @@
if (cf2)
data.ch_switch.cf2 = nla_get_u32(cf2);
- if (finished)
- bss->freq = data.ch_switch.freq;
+ bss->freq = data.ch_switch.freq;
drv->assoc_freq = data.ch_switch.freq;
- wpa_supplicant_event(bss->ctx, finished ?
- EVENT_CH_SWITCH : EVENT_CH_SWITCH_STARTED, &data);
+ wpa_supplicant_event(bss->ctx, EVENT_CH_SWITCH, &data);
}
@@ -1106,29 +1101,6 @@
}
-static void mlme_event_dh_event(struct wpa_driver_nl80211_data *drv,
- struct i802_bss *bss,
- struct nlattr *tb[])
-{
- union wpa_event_data data;
-
- if (!is_ap_interface(drv->nlmode))
- return;
- if (!tb[NL80211_ATTR_MAC] || !tb[NL80211_ATTR_IE])
- return;
-
- os_memset(&data, 0, sizeof(data));
- data.update_dh.peer = nla_data(tb[NL80211_ATTR_MAC]);
- data.update_dh.ie = nla_data(tb[NL80211_ATTR_IE]);
- data.update_dh.ie_len = nla_len(tb[NL80211_ATTR_IE]);
-
- wpa_printf(MSG_DEBUG, "nl80211: DH event - peer " MACSTR,
- MAC2STR(data.update_dh.peer));
-
- wpa_supplicant_event(bss->ctx, EVENT_UPDATE_DH, &data);
-}
-
-
static void send_scan_event(struct wpa_driver_nl80211_data *drv, int aborted,
struct nlattr *tb[], int external_scan)
{
@@ -2536,16 +2508,6 @@
tb[NL80211_ATTR_PMK],
tb[NL80211_ATTR_PMKID]);
break;
- case NL80211_CMD_CH_SWITCH_STARTED_NOTIFY:
- mlme_event_ch_switch(drv,
- tb[NL80211_ATTR_IFINDEX],
- tb[NL80211_ATTR_WIPHY_FREQ],
- tb[NL80211_ATTR_WIPHY_CHANNEL_TYPE],
- tb[NL80211_ATTR_CHANNEL_WIDTH],
- tb[NL80211_ATTR_CENTER_FREQ1],
- tb[NL80211_ATTR_CENTER_FREQ2],
- 0);
- break;
case NL80211_CMD_CH_SWITCH_NOTIFY:
mlme_event_ch_switch(drv,
tb[NL80211_ATTR_IFINDEX],
@@ -2553,8 +2515,7 @@
tb[NL80211_ATTR_WIPHY_CHANNEL_TYPE],
tb[NL80211_ATTR_CHANNEL_WIDTH],
tb[NL80211_ATTR_CENTER_FREQ1],
- tb[NL80211_ATTR_CENTER_FREQ2],
- 1);
+ tb[NL80211_ATTR_CENTER_FREQ2]);
break;
case NL80211_CMD_DISCONNECT:
mlme_event_disconnect(drv, tb[NL80211_ATTR_REASON_CODE],
@@ -2625,9 +2586,6 @@
case NL80211_CMD_STA_OPMODE_CHANGED:
nl80211_sta_opmode_change_event(drv, tb);
break;
- case NL80211_CMD_UPDATE_OWE_INFO:
- mlme_event_dh_event(drv, bss, tb);
- break;
default:
wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Ignored unknown event "
"(cmd=%d)", cmd);
@@ -2676,9 +2634,8 @@
}
}
wpa_printf(MSG_DEBUG,
- "nl80211: Ignored event %d (%s) for foreign interface (ifindex %d wdev 0x%llx)",
- gnlh->cmd, nl80211_command_to_string(gnlh->cmd),
- ifidx, (long long unsigned int) wdev_id);
+ "nl80211: Ignored event (cmd=%d) for foreign interface (ifindex %d wdev 0x%llx)",
+ gnlh->cmd, ifidx, (long long unsigned int) wdev_id);
}
return NL_SKIP;
diff --git a/src/drivers/driver_privsep.c b/src/drivers/driver_privsep.c
index 55cf618..a3f0837 100644
--- a/src/drivers/driver_privsep.c
+++ b/src/drivers/driver_privsep.c
@@ -368,7 +368,7 @@
static int wpa_driver_privsep_deauthenticate(void *priv, const u8 *addr,
- u16 reason_code)
+ int reason_code)
{
//struct wpa_driver_privsep_data *drv = priv;
wpa_printf(MSG_DEBUG, "%s addr=" MACSTR " reason_code=%d",
diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
index 4d4a05d..f7755cc 100644
--- a/src/drivers/driver_wext.c
+++ b/src/drivers/driver_wext.c
@@ -1915,7 +1915,7 @@
static int wpa_driver_wext_mlme(struct wpa_driver_wext_data *drv,
- const u8 *addr, int cmd, u16 reason_code)
+ const u8 *addr, int cmd, int reason_code)
{
struct iwreq iwr;
struct iw_mlme mlme;
@@ -1998,7 +1998,7 @@
static int wpa_driver_wext_deauthenticate(void *priv, const u8 *addr,
- u16 reason_code)
+ int reason_code)
{
struct wpa_driver_wext_data *drv = priv;
int ret;
diff --git a/src/drivers/nl80211_copy.h b/src/drivers/nl80211_copy.h
index 6f09d15..dd4f86e 100644
--- a/src/drivers/nl80211_copy.h
+++ b/src/drivers/nl80211_copy.h
@@ -11,7 +11,7 @@
* Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>
* Copyright 2008 Colin McCabe <colin@cozybit.com>
* Copyright 2015-2017 Intel Deutschland GmbH
- * Copyright (C) 2018-2019 Intel Corporation
+ * Copyright (C) 2018 Intel Corporation
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -1065,26 +1065,6 @@
* indicated by %NL80211_ATTR_WIPHY_FREQ and other attributes
* determining the width and type.
*
- * @NL80211_CMD_UPDATE_OWE_INFO: This interface allows the host driver to
- * offload OWE processing to user space. This intends to support
- * OWE AKM by the host drivers that implement SME but rely
- * on the user space for the cryptographic/DH IE processing in AP mode.
- *
- * @NL80211_CMD_PROBE_MESH_LINK: The requirement for mesh link metric
- * refreshing, is that from one mesh point we be able to send some data
- * frames to other mesh points which are not currently selected as a
- * primary traffic path, but which are only 1 hop away. The absence of
- * the primary path to the chosen node makes it necessary to apply some
- * form of marking on a chosen packet stream so that the packets can be
- * properly steered to the selected node for testing, and not by the
- * regular mesh path lookup. Further, the packets must be of type data
- * so that the rate control (often embedded in firmware) is used for
- * rate selection.
- *
- * Here attribute %NL80211_ATTR_MAC is used to specify connected mesh
- * peer MAC address and %NL80211_ATTR_FRAME is used to specify the frame
- * content. The frame is ethernet data.
- *
* @NL80211_CMD_MAX: highest used command number
* @__NL80211_CMD_AFTER_LAST: internal use
*/
@@ -1305,10 +1285,6 @@
NL80211_CMD_NOTIFY_RADAR,
- NL80211_CMD_UPDATE_OWE_INFO,
-
- NL80211_CMD_PROBE_MESH_LINK,
-
/* add new commands above here */
/* used to define NL80211_CMD_MAX below */
@@ -2332,15 +2308,6 @@
* @NL80211_ATTR_AIRTIME_WEIGHT: Station's weight when scheduled by the airtime
* scheduler.
*
- * @NL80211_ATTR_STA_TX_POWER_SETTING: Transmit power setting type (u8) for
- * station associated with the AP. See &enum nl80211_tx_power_setting for
- * possible values.
- * @NL80211_ATTR_STA_TX_POWER: Transmit power level (s16) in dBm units. This
- * allows to set Tx power for a station. If this attribute is not included,
- * the default per-interface tx power setting will be overriding. Driver
- * should be picking up the lowest tx power, either tx power per-interface
- * or per-station.
- *
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2791,8 +2758,6 @@
NL80211_ATTR_PEER_MEASUREMENTS,
NL80211_ATTR_AIRTIME_WEIGHT,
- NL80211_ATTR_STA_TX_POWER_SETTING,
- NL80211_ATTR_STA_TX_POWER,
/* add attributes here, update the policy in nl80211.c */
@@ -2837,7 +2802,7 @@
#define NL80211_MAX_SUPP_RATES 32
#define NL80211_MAX_SUPP_HT_RATES 77
-#define NL80211_MAX_SUPP_REG_RULES 128
+#define NL80211_MAX_SUPP_REG_RULES 64
#define NL80211_TKIP_DATA_OFFSET_ENCR_KEY 0
#define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY 16
#define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24
@@ -3174,7 +3139,6 @@
* @NL80211_STA_INFO_TX_DURATION: aggregate PPDU duration for all frames
* sent to the station (u64, usec)
* @NL80211_STA_INFO_AIRTIME_WEIGHT: current airtime weight for station (u16)
- * @NL80211_STA_INFO_AIRTIME_LINK_METRIC: airtime link metric for mesh station
* @__NL80211_STA_INFO_AFTER_LAST: internal
* @NL80211_STA_INFO_MAX: highest possible station info attribute
*/
@@ -3220,7 +3184,6 @@
NL80211_STA_INFO_CONNECTED_TO_GATE,
NL80211_STA_INFO_TX_DURATION,
NL80211_STA_INFO_AIRTIME_WEIGHT,
- NL80211_STA_INFO_AIRTIME_LINK_METRIC,
/* keep last */
__NL80211_STA_INFO_AFTER_LAST,
@@ -3675,14 +3638,6 @@
* value as specified by &struct nl80211_bss_select_rssi_adjust.
* @NL80211_SCHED_SCAN_MATCH_ATTR_BSSID: BSSID to be used for matching
* (this cannot be used together with SSID).
- * @NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI: Nested attribute that carries the
- * band specific minimum rssi thresholds for the bands defined in
- * enum nl80211_band. The minimum rssi threshold value(s32) specific to a
- * band shall be encapsulated in attribute with type value equals to one
- * of the NL80211_BAND_* defined in enum nl80211_band. For example, the
- * minimum rssi threshold value for 2.4GHZ band shall be encapsulated
- * within an attribute of type NL80211_BAND_2GHZ. And one or more of such
- * attributes will be nested within this attribute.
* @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter
* attribute number currently defined
* @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use
@@ -3695,7 +3650,6 @@
NL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI,
NL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST,
NL80211_SCHED_SCAN_MATCH_ATTR_BSSID,
- NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI,
/* keep last */
__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST,
@@ -4181,27 +4135,6 @@
};
/**
- * enum nl80211_key_mode - Key mode
- *
- * @NL80211_KEY_RX_TX: (Default)
- * Key can be used for Rx and Tx immediately
- *
- * The following modes can only be selected for unicast keys and when the
- * driver supports @NL80211_EXT_FEATURE_EXT_KEY_ID:
- *
- * @NL80211_KEY_NO_TX: Only allowed in combination with @NL80211_CMD_NEW_KEY:
- * Unicast key can only be used for Rx, Tx not allowed, yet
- * @NL80211_KEY_SET_TX: Only allowed in combination with @NL80211_CMD_SET_KEY:
- * The unicast key identified by idx and mac is cleared for Tx and becomes
- * the preferred Tx key for the station.
- */
-enum nl80211_key_mode {
- NL80211_KEY_RX_TX,
- NL80211_KEY_NO_TX,
- NL80211_KEY_SET_TX
-};
-
-/**
* enum nl80211_chan_width - channel width definitions
*
* These values are used with the %NL80211_ATTR_CHANNEL_WIDTH
@@ -4444,9 +4377,6 @@
* @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags
* attributes, specifying what a key should be set as default as.
* See &enum nl80211_key_default_types.
- * @NL80211_KEY_MODE: the mode from enum nl80211_key_mode.
- * Defaults to @NL80211_KEY_RX_TX.
- *
* @__NL80211_KEY_AFTER_LAST: internal
* @NL80211_KEY_MAX: highest key attribute
*/
@@ -4460,7 +4390,6 @@
NL80211_KEY_DEFAULT_MGMT,
NL80211_KEY_TYPE,
NL80211_KEY_DEFAULT_TYPES,
- NL80211_KEY_MODE,
/* keep last */
__NL80211_KEY_AFTER_LAST,
@@ -5406,8 +5335,6 @@
* able to rekey an in-use key correctly. Userspace must not rekey PTK keys
* if this flag is not set. Ignoring this can leak clear text packets and/or
* freeze the connection.
- * @NL80211_EXT_FEATURE_EXT_KEY_ID: Driver supports "Extended Key ID for
- * Individually Addressed Frames" from IEEE802.11-2016.
*
* @NL80211_EXT_FEATURE_AIRTIME_FAIRNESS: Driver supports getting airtime
* fairness for transmitted packets and has enabled airtime fairness
@@ -5416,12 +5343,6 @@
* @NL80211_EXT_FEATURE_AP_PMKSA_CACHING: Driver/device supports PMKSA caching
* (set/del PMKSA operations) in AP mode.
*
- * @NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD: Driver supports
- * filtering of sched scan results using band specific RSSI thresholds.
- *
- * @NL80211_EXT_FEATURE_STA_TX_PWR: This driver supports controlling tx power
- * to a station.
- *
* @NUM_NL80211_EXT_FEATURES: number of extended features.
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
*/
@@ -5463,9 +5384,6 @@
NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER,
NL80211_EXT_FEATURE_AIRTIME_FAIRNESS,
NL80211_EXT_FEATURE_AP_PMKSA_CACHING,
- NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD,
- NL80211_EXT_FEATURE_EXT_KEY_ID,
- NL80211_EXT_FEATURE_STA_TX_PWR,
/* add new features before the definition below */
NUM_NL80211_EXT_FEATURES,