]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
hostapd: Initial IEEE 802.11ax (HE) definitions
authorPeng Xu <pxu@qca.qualcomm.com>
Tue, 7 Feb 2017 23:16:52 +0000 (15:16 -0800)
committerJouni Malinen <j@w1.fi>
Sun, 19 Feb 2017 15:37:52 +0000 (17:37 +0200)
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>
hostapd/Android.mk
hostapd/Makefile
hostapd/config_file.c
hostapd/defconfig
hostapd/hostapd.conf
src/ap/ap_config.h
src/common/ieee802_11_defs.h
src/drivers/driver.h
wpa_supplicant/Android.mk
wpa_supplicant/Makefile

index 2118c8b0c4d691da62e65cc189a9746b2f6616cb..102172c8a41f5c984decd47cc1a7367065d4ab4f 100644 (file)
@@ -281,6 +281,10 @@ ifdef CONFIG_IEEE80211AC
 L_CFLAGS += -DCONFIG_IEEE80211AC
 endif
 
+ifdef CONFIG_IEEE80211AX
+L_CFLAGS += -DCONFIG_IEEE80211AX
+endif
+
 ifdef CONFIG_MBO
 L_CFLAGS += -DCONFIG_MBO
 OBJS += src/ap/mbo_ap.c
index d4dde89d7df181e25febb4fc67cbcc1a8ba6f257..ca17c8484adcf98a7a28997de2046bb7c0b27f56 100644 (file)
@@ -325,6 +325,10 @@ ifdef CONFIG_IEEE80211AC
 CFLAGS += -DCONFIG_IEEE80211AC
 endif
 
+ifdef CONFIG_IEEE80211AX
+CFLAGS += -DCONFIG_IEEE80211AX
+endif
+
 ifdef CONFIG_MBO
 CFLAGS += -DCONFIG_MBO
 OBJS += ../src/ap/mbo_ap.o
index 02693a5b18c8219c2ef686423a186205b81bf129..9e954400e795d3e0e24f936480a9f95350c7915c 100644 (file)
@@ -3008,6 +3008,24 @@ static int hostapd_config_fill(struct hostapd_config *conf,
        } else if (os_strcmp(buf, "use_sta_nsts") == 0) {
                bss->use_sta_nsts = atoi(pos);
 #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) {
                bss->max_listen_interval = atoi(pos);
        } else if (os_strcmp(buf, "disable_pmksa_caching") == 0) {
index bf6e646639b4b37b5297cd1bc4013bcb2f0ee895..9ade580a3d8411c6c66bb61311edee3ca484e1d6 100644 (file)
@@ -157,6 +157,12 @@ CONFIG_IPV6=y
 # IEEE 802.11ac (Very High Throughput) support
 #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.
 # This can be used to reduce the size of the hostapd considerably if debugging
 # code is not needed.
index 9e15615ec2dd0b243903cb228499ff3f26770b80..c4eebff82e1715e4fde28fc5b40abf117701900b 100644 (file)
@@ -721,6 +721,47 @@ wmm_ac_vo_acm=0
 # setting use_sta_nsts=1.
 #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 ##################################
 
 # Require IEEE 802.1X authorization
index 7495dc96f2f7261bef2ed1a4df69ce6ba42a5d80..fdd5a1abccd645964f7317849ab5b6e064ac3f76 100644 (file)
@@ -619,6 +619,24 @@ struct hostapd_bss_config {
        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
@@ -732,6 +750,12 @@ struct hostapd_config {
        struct wpabuf *lci;
        struct wpabuf *civic;
        int stationary_ap;
+
+       int ieee80211ax;
+#ifdef CONFIG_IEEE80211AX
+       struct he_phy_capabilities_info he_phy_capab;
+       struct he_operation he_op;
+#endif /* CONFIG_IEEE80211AX */
 };
 
 
index 55eaa822ba61f86895cec52cf370f9111d4267a1..15f6d42cd1ea037b94a62ae94cb36846d4a42836 100644 (file)
@@ -1960,4 +1960,53 @@ enum nr_chan_width {
        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 */
index 27cb6cc894f8d74dcaf0820583ce2c3e0eeeea9b..80c464289745a36793cd4e8d1c07f0af75c83b3e 100644 (file)
@@ -136,6 +136,29 @@ struct hostapd_channel_data {
        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_VHT_INFO_KNOWN BIT(1)
 
@@ -194,6 +217,11 @@ struct hostapd_hw_modes {
        u8 vht_mcs_set[8];
 
        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
 /** Driver supports better BSS reporting with sched_scan in connected mode */
 #define WPA_DRIVER_FLAGS_SCHED_SCAN_RELATIVE_RSSI      0x0001000000000000ULL
+/** Driver supports HE capabilities */
+#define WPA_DRIVER_FLAGS_HE_CAPABILITIES       0x0002000000000000ULL
        u64 flags;
 
 #define FULL_AP_CLIENT_STATE_SUPP(drv_flags) \
index f150ef2bfabe266fa8aed4a36d10b5c81e41e44d..448f954a28018949b4500ab6da88d4e438a65251 100644 (file)
@@ -851,6 +851,9 @@ L_CFLAGS += -DCONFIG_IEEE80211N
 ifdef CONFIG_IEEE80211AC
 L_CFLAGS += -DCONFIG_IEEE80211AC
 endif
+ifdef CONFIG_IEEE80211AX
+L_CFLAGS += -DCONFIG_IEEE80211AX
+endif
 endif
 
 ifdef NEED_AP_MLME
index 91ea4d294278fc5ddd1949ec006b07c4a9e7b4f0..65b55c208e61736c8b5296b791a82ab8032b2ede 100644 (file)
@@ -892,6 +892,9 @@ CFLAGS += -DCONFIG_IEEE80211N
 ifdef CONFIG_IEEE80211AC
 CFLAGS += -DCONFIG_IEEE80211AC
 endif
+ifdef CONFIG_IEEE80211AX
+CFLAGS += -DCONFIG_IEEE80211AX
+endif
 endif
 
 ifdef NEED_AP_MLME