hostapd: Initial IEEE 802.11ax (HE) definitions

Add IEEE 802.11ax definitions for config, IEEE structures, and
constants. These are still subject to change in the IEEE process.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Peng Xu 2017-02-07 15:16:52 -08:00 committed by Jouni Malinen
parent 5972dc73c1
commit 94380cb40a
10 changed files with 182 additions and 0 deletions

View file

@ -281,6 +281,10 @@ ifdef CONFIG_IEEE80211AC
L_CFLAGS += -DCONFIG_IEEE80211AC L_CFLAGS += -DCONFIG_IEEE80211AC
endif endif
ifdef CONFIG_IEEE80211AX
L_CFLAGS += -DCONFIG_IEEE80211AX
endif
ifdef CONFIG_MBO ifdef CONFIG_MBO
L_CFLAGS += -DCONFIG_MBO L_CFLAGS += -DCONFIG_MBO
OBJS += src/ap/mbo_ap.c OBJS += src/ap/mbo_ap.c

View file

@ -325,6 +325,10 @@ ifdef CONFIG_IEEE80211AC
CFLAGS += -DCONFIG_IEEE80211AC CFLAGS += -DCONFIG_IEEE80211AC
endif endif
ifdef CONFIG_IEEE80211AX
CFLAGS += -DCONFIG_IEEE80211AX
endif
ifdef CONFIG_MBO ifdef CONFIG_MBO
CFLAGS += -DCONFIG_MBO CFLAGS += -DCONFIG_MBO
OBJS += ../src/ap/mbo_ap.o OBJS += ../src/ap/mbo_ap.o

View file

@ -3008,6 +3008,24 @@ static int hostapd_config_fill(struct hostapd_config *conf,
} else if (os_strcmp(buf, "use_sta_nsts") == 0) { } else if (os_strcmp(buf, "use_sta_nsts") == 0) {
bss->use_sta_nsts = atoi(pos); bss->use_sta_nsts = atoi(pos);
#endif /* CONFIG_IEEE80211AC */ #endif /* CONFIG_IEEE80211AC */
#ifdef CONFIG_IEEE80211AX
} else if (os_strcmp(buf, "ieee80211ax") == 0) {
conf->ieee80211ax = atoi(pos);
} else if (os_strcmp(buf, "he_su_beamformer") == 0) {
conf->he_phy_capab.he_su_beamformer = atoi(pos);
} else if (os_strcmp(buf, "he_su_beamformee") == 0) {
conf->he_phy_capab.he_su_beamformee = atoi(pos);
} else if (os_strcmp(buf, "he_mu_beamformer") == 0) {
conf->he_phy_capab.he_mu_beamformer = atoi(pos);
} else if (os_strcmp(buf, "he_bss_color") == 0) {
conf->he_op.he_bss_color = atoi(pos);
} else if (os_strcmp(buf, "he_default_pe_duration") == 0) {
conf->he_op.he_default_pe_duration = atoi(pos);
} else if (os_strcmp(buf, "he_twt_required") == 0) {
conf->he_op.he_twt_required = atoi(pos);
} else if (os_strcmp(buf, "he_rts_threshold") == 0) {
conf->he_op.he_rts_threshold = atoi(pos);
#endif /* CONFIG_IEEE80211AX */
} else if (os_strcmp(buf, "max_listen_interval") == 0) { } else if (os_strcmp(buf, "max_listen_interval") == 0) {
bss->max_listen_interval = atoi(pos); bss->max_listen_interval = atoi(pos);
} else if (os_strcmp(buf, "disable_pmksa_caching") == 0) { } else if (os_strcmp(buf, "disable_pmksa_caching") == 0) {

View file

@ -157,6 +157,12 @@ CONFIG_IPV6=y
# IEEE 802.11ac (Very High Throughput) support # IEEE 802.11ac (Very High Throughput) support
#CONFIG_IEEE80211AC=y #CONFIG_IEEE80211AC=y
# IEEE 802.11ax HE support
# Note: This is experimental and work in progress. The definitions are still
# subject to change and this should not be expected to interoperate with the
# final IEEE 802.11ax version.
#CONFIG_IEEE80211AX=y
# Remove debugging code that is printing out debug messages to stdout. # Remove debugging code that is printing out debug messages to stdout.
# This can be used to reduce the size of the hostapd considerably if debugging # This can be used to reduce the size of the hostapd considerably if debugging
# code is not needed. # code is not needed.

View file

@ -721,6 +721,47 @@ wmm_ac_vo_acm=0
# setting use_sta_nsts=1. # setting use_sta_nsts=1.
#use_sta_nsts=0 #use_sta_nsts=0
##### IEEE 802.11ax related configuration #####################################
#ieee80211ax: Whether IEEE 802.11ax (HE) is enabled
# 0 = disabled (default)
# 1 = enabled
#ieee80211ax=1
#he_su_beamformer: HE single user beamformer support
# 0 = not supported (default)
# 1 = supported
#he_su_beamformer=1
#he_su_beamformee: HE single user beamformee support
# 0 = not supported (default)
# 1 = supported
#he_su_beamformee=1
#he_mu_beamformer: HE multiple user beamformer support
# 0 = not supported (default)
# 1 = supported
#he_mu_beamformer=1
# he_bss_color: BSS color
# 0 = no BSS color (default)
# unsigned integer = BSS color
#he_bss_color=0
#he_default_pe_duration: The duration of PE field in an HE PPDU in us
# Possible values are 0 us (default), 4 us, 8 us, 12 us, and 16 us
#he_default_pe_duration=0
#he_twt_required: Whether TWT is required
# 0 = not required (default)
# 1 = required
#he_twt_required=0
#he_rts_threshold: Duration of STA transmission
# 0 = not set (default)
# unsigned integer = duration in units of 16 us
#he_rts_threshold=0
##### IEEE 802.1X-2004 related configuration ################################## ##### IEEE 802.1X-2004 related configuration ##################################
# Require IEEE 802.1X authorization # Require IEEE 802.1X authorization

View file

@ -619,6 +619,24 @@ struct hostapd_bss_config {
int multicast_to_unicast; int multicast_to_unicast;
}; };
/**
* struct he_phy_capabilities_info - HE PHY capabilities
*/
struct he_phy_capabilities_info {
Boolean he_su_beamformer;
Boolean he_su_beamformee;
Boolean he_mu_beamformer;
};
/**
* struct he_operation - HE operation
*/
struct he_operation {
u8 he_bss_color;
u8 he_default_pe_duration;
u8 he_twt_required;
u8 he_rts_threshold;
};
/** /**
* struct hostapd_config - Per-radio interface configuration * struct hostapd_config - Per-radio interface configuration
@ -732,6 +750,12 @@ struct hostapd_config {
struct wpabuf *lci; struct wpabuf *lci;
struct wpabuf *civic; struct wpabuf *civic;
int stationary_ap; int stationary_ap;
int ieee80211ax;
#ifdef CONFIG_IEEE80211AX
struct he_phy_capabilities_info he_phy_capab;
struct he_operation he_op;
#endif /* CONFIG_IEEE80211AX */
}; };

View file

@ -1960,4 +1960,53 @@ enum nr_chan_width {
NR_CHAN_WIDTH_80P80 = 4, NR_CHAN_WIDTH_80P80 = 4,
}; };
struct ieee80211_he_capabilities {
u8 he_mac_capab_info[5];
u8 he_phy_capab_info[9];
u16 he_txrx_mcs_support;
/* possibly followed by Tx Rx MCS NSS descriptor */
u8 variable[];
/* PPE Thresholds (optional) */
} STRUCT_PACKED;
struct ieee80211_he_operation {
u32 he_oper_params;
u8 he_mcs_nss_set[3];
u8 vht_op_info_chwidth;
u8 vht_op_info_chan_center_freq_seg0_idx;
u8 vht_op_info_chan_center_freq_seg1_idx;
} STRUCT_PACKED;
/* HE Capabilities Information defines */
#define HE_PHYCAP_SU_BEAMFORMER_CAPAB_IDX 3
#define HE_PHYCAP_SU_BEAMFORMER_CAPAB ((u8) BIT(7))
#define HE_PHYCAP_SU_BEAMFORMEE_CAPAB_IDX 4
#define HE_PHYCAP_SU_BEAMFORMEE_CAPAB ((u8) BIT(0))
#define HE_PHYCAP_MU_BEAMFORMER_CAPAB_IDX 4
#define HE_PHYCAP_MU_BEAMFORMER_CAPAB ((u8) BIT(1))
/* HE Operation defines */
#define HE_OPERATION_BSS_COLOR_MASK ((u32) (BIT(0) | BIT(1) | \
BIT(2) | BIT(3) | \
BIT(4) | BIT(5)))
#define HE_OPERATION_DFLT_PE_DURATION_MASK ((u32) (BIT(6) | BIT(7) | \
BIT(8)))
#define HE_OPERATION_DFLT_PE_DURATION_OFFSET 6
#define HE_OPERATION_TWT_REQUIRED ((u32) BIT(9))
#define HE_OPERATION_RTS_THRESHOLD_MASK ((u32) (BIT(10) | BIT(11) | \
BIT(12) | BIT(13) | \
BIT(14) | BIT(15) | \
BIT(16) | BIT(17) | \
BIT(18) | BIT(19)))
#define HE_OPERATION_RTS_THRESHOLD_OFFSET 10
#define HE_OPERATION_PARTIAL_BSS_COLOR ((u32) BIT(20))
#define HE_OPERATION_MAX_BSSID_INDICATOR_MASK ((u32) (BIT(21) | BIT(22) | \
BIT(23) | BIT(24) | \
BIT(25) | BIT(26) | \
BIT(27) | BIT(28)))
#define HE_OPERATION_MAX_BSSID_INDICATOR_OFFSET 21
#define HE_OPERATION_TX_BSSID_INDICATOR ((u32) BIT(29))
#define HE_OPERATION_BSS_COLOR_DISABLED ((u32) BIT(30))
#define HE_OPERATION_BSS_DUAL_BEACON ((u32) BIT(31))
#endif /* IEEE802_11_DEFS_H */ #endif /* IEEE802_11_DEFS_H */

View file

@ -136,6 +136,29 @@ struct hostapd_channel_data {
unsigned int dfs_cac_ms; unsigned int dfs_cac_ms;
}; };
#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;
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_HT_INFO_KNOWN BIT(0)
#define HOSTAPD_MODE_FLAG_VHT_INFO_KNOWN BIT(1) #define HOSTAPD_MODE_FLAG_VHT_INFO_KNOWN BIT(1)
@ -194,6 +217,11 @@ struct hostapd_hw_modes {
u8 vht_mcs_set[8]; u8 vht_mcs_set[8];
unsigned int flags; /* HOSTAPD_MODE_FLAG_* */ unsigned int flags; /* HOSTAPD_MODE_FLAG_* */
/**
* he_capab - HE (IEEE 802.11ax) capabilities
*/
struct he_capabilities he_capab;
}; };
@ -1429,6 +1457,8 @@ struct wpa_driver_capa {
#define WPA_DRIVER_FLAGS_MGMT_TX_RANDOM_TA_CONNECTED 0x0000800000000000ULL #define WPA_DRIVER_FLAGS_MGMT_TX_RANDOM_TA_CONNECTED 0x0000800000000000ULL
/** Driver supports better BSS reporting with sched_scan in connected mode */ /** Driver supports better BSS reporting with sched_scan in connected mode */
#define WPA_DRIVER_FLAGS_SCHED_SCAN_RELATIVE_RSSI 0x0001000000000000ULL #define WPA_DRIVER_FLAGS_SCHED_SCAN_RELATIVE_RSSI 0x0001000000000000ULL
/** Driver supports HE capabilities */
#define WPA_DRIVER_FLAGS_HE_CAPABILITIES 0x0002000000000000ULL
u64 flags; u64 flags;
#define FULL_AP_CLIENT_STATE_SUPP(drv_flags) \ #define FULL_AP_CLIENT_STATE_SUPP(drv_flags) \

View file

@ -851,6 +851,9 @@ L_CFLAGS += -DCONFIG_IEEE80211N
ifdef CONFIG_IEEE80211AC ifdef CONFIG_IEEE80211AC
L_CFLAGS += -DCONFIG_IEEE80211AC L_CFLAGS += -DCONFIG_IEEE80211AC
endif endif
ifdef CONFIG_IEEE80211AX
L_CFLAGS += -DCONFIG_IEEE80211AX
endif
endif endif
ifdef NEED_AP_MLME ifdef NEED_AP_MLME

View file

@ -892,6 +892,9 @@ CFLAGS += -DCONFIG_IEEE80211N
ifdef CONFIG_IEEE80211AC ifdef CONFIG_IEEE80211AC
CFLAGS += -DCONFIG_IEEE80211AC CFLAGS += -DCONFIG_IEEE80211AC
endif endif
ifdef CONFIG_IEEE80211AX
CFLAGS += -DCONFIG_IEEE80211AX
endif
endif endif
ifdef NEED_AP_MLME ifdef NEED_AP_MLME