Design
WiFi 6E opens up the 6 GHz wireless spectrum for unlicensed WiFi operation. WiFi 6 introduced the high-efficiency 11ax technology, while Wi-Fi 6E supports the 11ax technology in the unlicensed 6 GHz spectrum.
The ability to use the 6 GHz band has opened a vast range of WiFi frequencies. In total, the 6 GHz WiFi 6E band includes a total of 1200 MHz, which doubles the range available in the 5 GHz WiFi 6 band.
Despite the 5 GHz band still being pretty unclogged, the situation is already changing. The number of devices on 5 GHz is rising fast and in urban environments such vast growth is already causing issues.
The 6 GHz spectrum is continuous, allowing for easy formation of wide channels. This promotes the use of 160 MHz channels. The doubled channel bandwidth also doubles the data traffic capacity.
The complete list of 6 GHz PSC channels; 5, 21, 37, 53, 69, 85, 101, 117, 133, 149, 165, 181, 197, 213, 229:
Channels Configuration
Hostap Channels Configuration (6 GHz)
.... ieee80211ac=1 ieee80211n=1 ieee80211ax=1 channel=X he_oper_chwidth=2 op_class=131 he_oper_centr_freq_seg0_idx=79 he_oper_centr_freq_seg1_idx=0 vht_oper_chwidth=2 vht_oper_centr_freq_seg0_idx=79 vht_oper_centr_freq_seg1_idx=0 ..... |
The following OVSDB tables define and show the channels configuration: Wifi_Radio_Config and Wifi_Radio_State, Wifi_VIF_State.
$ ovsh s Wifi_VIF_Config -w if_name==home-ap-u50 -------------------------------------------------------------------------------------------- _uuid | f2f8~cdcf | _version | ba16~4b56 | ap_bridge | false | bridge | br-home | btm | 1 | credential_configs | ["set",[]] | default_oftag | ["set",[]] | dpp_connector | ["set",[]] | dpp_csign_hex | ["set",[]] | dpp_netaccesskey_hex | ["set",[]] | dynamic_beacon | ["set",[]] | enabled | true | ft_mobility_domain | ["set",[]] | ft_psk | 0 | group_rekey | 86400 | if_name | home-ap-u50 | mac_list | ["set",[]] | mac_list_type | ["set",[]] | mcast2ucast | true | min_hw_mode | ["set",[]] | mode | ap | multi_ap | ["set",[]] | parent | ["set",[]] | radius_srv_addr | ["set",[]] | radius_srv_port | ["set",[]] | radius_srv_secret | ["set",[]] | rrm | 1 | security | ["map",[["encryption","WPA-PSK"],["key","password"],["mode","2"], | : ["oftag","home--1"]]] : ssid | opensync-wifi | ssid_broadcast | enabled | uapsd_enable | true | vif_dbg_lvl | ["set",[]] | vif_radio_idx | 2 | vlan_id | ["set",[]] | wds | ["set",[]] | wpa | ["set",[]] | wpa_key_mgmt | ["set",[]] | wpa_oftags | ["map",[]] | wpa_psks | ["map",[]] | wps | true | wps_pbc | ["set",[]] | wps_pbc_key_id | | ------------------------------------------------------------------------------------------- $ ovsh s Wifi_VIF_State -w if_name==home-ap-u50 -------------------------------------------------------------------------------------------- _uuid | cdee~fa18 | _version | 6acd~b8d2 | ap_bridge | false | ap_vlan_sta_addr | ["set",[]] | associated_clients | ["set",[]] | bridge | br-home | btm | 1 | channel | 157 | dpp_connector | ["set",[]] | dpp_csign_hex | ["set",[]] | dpp_netaccesskey_hex | ["set",[]] | dynamic_beacon | false | enabled | true | ft_mobility_domain | ["set",[]] | ft_psk | 0 | group_rekey | 86400 | if_name | home-ap-u50 | mac | e2:b4:f7:f0:0f:2a | mac_list | ["set",[]] | mac_list_type | none | mcast2ucast | true | min_hw_mode | 11a | mode | ap | multi_ap | none | parent | ["set",[]] | radius_srv_addr | ["set",[]] | radius_srv_port | ["set",[]] | radius_srv_secret | ["set",[]] | rrm | 1 | security | ["map",[["encryption","WPA-PSK"],["key","password"],["mode","2"], | : ["oftag","home--1"]]] : ssid | opensync-wifi | ssid_broadcast | enabled | state | ["set",[]] | uapsd_enable | true | vif_config | f2f8~cdcf | vif_radio_idx | 2 | vlan_id | ["set",[]] | wds | false | wpa | ["set",[]] | wpa_key_mgmt | ["set",[]] | wpa_psks | ["map",[]] | wps | true | wps_pbc | false | wps_pbc_key_id | | -------------------------------------------------------------------------------------------- |
Actions needed:
Wifi_VIF_State::channels → extend the available channels list
$ ovsh s Wifi_Radio_Config -w if_name==wl0 ---------------------------------------------------------- _uuid | a834~3163 | _version | 4fda~93c5 | bcn_int | ["set",[]] | channel | 44 | channel_mode | cloud | channel_sync | 0 | country | ["set",[]] | dfs_demo | false | enabled | true | fallback_parents | ["map",[]] | freq_band | 5GL | ht_mode | HT80 | hw_config | ["map",[]] | hw_mode | 11ax | hw_type | bcm43684 | if_name | wl0 | temperature_control | ["map",[]] | thermal_downgrade_temp | ["set",[]] | thermal_integration | ["set",[]] | thermal_shutdown | ["set",[]] | thermal_tx_chainmask | ["set",[]] | thermal_upgrade_temp | ["set",[]] | tx_chainmask | 15 | tx_power | ["set",[]] | vif_configs | [616b~fc52,eeed~c7c8,f206~a75d] | zero_wait_dfs | disable | ---------------------------------------------------------- |
$ ovsh s Wifi_Radio_Config -------------------------------------------------------------------------------------------------- _uuid | 4ee5~88c1 | ca70~4c8f | 2d7e~1394 | _version | 1f38~81a2 | a900~fb16 | c3c0~23ce | bcn_int | ["set",[]] | ["set",[]] | ["set",[]] | channel | 1 | 44 | 157 | channel_mode | cloud | cloud | cloud | channel_sync | 0 | 0 | 0 | country | ["set",[]] | ["set",[]] | ["set",[]] | dfs_demo | ["set",[]] | ["set",[]] | ["set",[]] | enabled | true | true | true | fallback_parents | ["map",[]] | ["map",[]] | ["map",[]] | freq_band | 2.4G | 5GL | 5GU | ht_mode | HT40 | HT80 | HT80 | hw_config | ["map",[]] | ["map",[["dfs_enable", | ["map",[["dfs_enable", | : : "1"],["dfs_ignorecac", : "1"],["dfs_ignorecac", : : : "0"],["dfs_usenol", : "0"],["dfs_usenol", : : : "1"]]] : "1"]]] : hw_mode | 11n | 11ac | 11ac | hw_type | qca4019 | qca4019 | qca9984 | if_name | wifi0 | wifi1 | wifi2 | temperature_control | ["map",[]] | ["map",[]] | ["map",[]] | thermal_downgrade_temp | ["set",[]] | ["set",[]] | ["set",[]] | thermal_integration | ["set",[]] | ["set",[]] | ["set",[]] | thermal_shutdown | ["set",[]] | ["set",[]] | ["set",[]] | thermal_tx_chainmask | ["set",[]] | ["set",[]] | ["set",[]] | thermal_upgrade_temp | ["set",[]] | ["set",[]] | ["set",[]] | tx_chainmask | 3 | 3 | 15 | tx_power | ["set",[]] | ["set",[]] | ["set",[]] | vif_configs | [2d6c~14d5,733d~23a2, | [83c7~f57e,fcb8~e1d6] | [768d~3780,d8bf~1b3e, | : 98ab~04ad] : : f2f8~cdcf] : zero_wait_dfs | ["set",[]] | ["set",[]] | ["set",[]] | -------------------------------------------------------------------------------------------------- $ ovsh s Wifi_Radio_State -------------------------------------------------------------------------------------------------------------------------------- _uuid | be10~4c9a | 10d9~59d5 | 9444~c947 | _version | 2d07~e2eb | d987~fe31 | f974~6a59 | allowed_channels | ["set",[1,2,3,4,5,6,7,8,9, | ["set",[36,40,44,48,52,56,60,64]] | ["set",[100,104,108,112,116,120, | : 10,11]] : : 124,128,132,136,140,149,153,157, : : : : 161,165]] : bcn_int | 200 | 200 | 200 | channel | 1 | 44 | 157 | channel_mode | cloud | cloud | cloud | channel_sync | ["set",[]] | ["set",[]] | ["set",[]] | channels | ["map",[["1", | ["map",[["36", | ["map",[["100", | : "{\"state\":\"allowed\"}"], : "{\"state\":\"allowed\"}"],["40", : "{\"state\": \"nop_finished\"}"], : : ["10", : "{\"state\":\"allowed\"}"],["44", : ["104", : : "{\"state\":\"allowed\"}"], : "{\"state\":\"allowed\"}"],["48", : "{\"state\": \"nop_finished\"}"], : : ["11", : "{\"state\":\"allowed\"}"],["52", : ["108", : : "{\"state\":\"allowed\"}"], : "{\"state\": \"nop_finished\"}"], : "{\"state\": \"nop_finished\"}"], : : ["2", : ["56", : ["112", : : "{\"state\":\"allowed\"}"], : "{\"state\": \"nop_finished\"}"], : "{\"state\": \"nop_finished\"}"], : : ["3", : ["60", : ["116", : : "{\"state\":\"allowed\"}"], : "{\"state\": \"nop_finished\"}"], : "{\"state\": \"nop_finished\"}"], : : ["4", : ["64", : ["120", : : "{\"state\":\"allowed\"}"], : "{\"state\": \"nop_finished\"}"]]] : "{\"state\": \"nop_finished\"}"], : : ["5", : : ["124", : : "{\"state\":\"allowed\"}"], : : "{\"state\": \"nop_finished\"}"], : : ["6", : : ["128", : : "{\"state\":\"allowed\"}"], : : "{\"state\": \"nop_finished\"}"], : : ["7", : : ["132", : : "{\"state\":\"allowed\"}"], : : "{\"state\": \"nop_finished\"}"], : : ["8", : : ["136", : : "{\"state\":\"allowed\"}"], : : "{\"state\": \"nop_finished\"}"], : : ["9", : : ["140", : : "{\"state\":\"allowed\"}"]]] : : "{\"state\": \"nop_finished\"}"], : : : : ["149", : : : : "{\"state\":\"allowed\"}"], : : : : ["153", : : : : "{\"state\":\"allowed\"}"], : : : : ["157", : : : : "{\"state\":\"allowed\"}"], : : : : ["161", : : : : "{\"state\":\"allowed\"}"], : : : : ["165", : : : : "{\"state\":\"allowed\"}"]]] : country | ["set",[]] | ["set",[]] | ["set",[]] | dfs_demo | ["set",[]] | ["set",[]] | ["set",[]] | enabled | true | true | true | fallback_parents | ["map",[]] | ["map",[]] | ["map",[]] | freq_band | 2.4G | 5GL | 5GU | ht_mode | HT40 | HT80 | HT80 | hw_config | ["map",[]] | ["map",[["dfs_enable","1"], | ["map",[["dfs_enable","1"], | : : ["dfs_ignorecac","0"], : ["dfs_ignorecac","0"], : : : ["dfs_usenol","1"]]] : ["dfs_usenol","1"]]] : hw_mode | 11n | 11ac | 11ac | hw_params | ["map",[["country_id","0"], | ["map",[["country_id","0"], | ["map",[["country_id","0"], | : ["reg_domain","58"]]] : ["reg_domain","58"]]] : ["reg_domain","58"]]] : hw_type | qca4019 | qca4019 | qca9984 | if_name | wifi0 | wifi1 | wifi2 | mac | 60:b4:f7:f0:0f:28 | 60:b4:f7:f0:0f:29 | 60:b4:f7:f0:0f:2a | radar | ["map",[]] | ["map",[]] | ["map",[]] | radio_config | 4ee5~88c1 | ca70~4c8f | 2d7e~1394 | temperature_control | ["map",[]] | ["map",[]] | ["map",[]] | thermal_downgrade_temp | ["set",[]] | ["set",[]] | ["set",[]] | thermal_downgraded | ["set",[]] | ["set",[]] | ["set",[]] | thermal_integration | ["set",[]] | ["set",[]] | ["set",[]] | thermal_shutdown | 0 | 0 | 0 | thermal_tx_chainmask | ["set",[]] | ["set",[]] | ["set",[]] | thermal_upgrade_temp | ["set",[]] | ["set",[]] | ["set",[]] | tx_chainmask | 3 | 3 | 15 | tx_power | 23 | 24 | 24 | vif_states | [093d~d5ef,37c7~1bb6, | [26e7~365b,a89d~32ae] | [84f0~2a2f,98f0~ed93,cdee~fa18] | : 7edc~fb01] : : : zero_wait_dfs | ["set",[]] | ["set",[]] | ["set",[]] | -------------------------------------------------------------------------------------------------------------------------------- |
Actions needed:
Wifi_Radio_Config/State::channel → extend the available channel list
Wifi_Radio_State::allowed_channels → extend the available channel list
Wifi_Radio_State::fallback_parents → extend the available channel list
Wifi_VIF_State::channel_list → extend the available channel list
Wifi_VIF_State::freq_band → add a new freq band: 6G
Wifi_Stats_Config::radio_type → add a new radio type: 6G
Wifi_Stats_Config::channel_list → extend the available channel list
Wifi_VIF_Neighbors::channel →extend the available channel list
Wifi_VIF_Neighbors::freq_band → add a new freq band: 6G
New Schema Changes
"Wifi_Radio_Config": { ... "freq_band": { "type": { "key": { "type": "string", "enum": [ "set", [ "2.4G", "5G", "5GL", "5GU", "6G" ] ] } } }, ... "channel": { "type": { "key": { "type": "integer", "minInteger": 1, "maxInteger": 233 }, "min": 0, "max": 1 } }, ... "Wifi_Radio_State": { ... "freq_band": { "type": { "key": { "type": "string", "enum": [ "set", [ "2.4G", "5G", "5GL", "5GU", "6G" ] ] } } }, ... "channel": { "type": { "key": { "type": "integer", "minInteger": 1, "maxInteger": 233 }, "min": 0, "max": 1 } }, ... "allowed_channels": { "type": { "key": { "type": "integer", "minInteger": 1, "maxInteger": 233 }, "min": 0, "max": 64 } }, ... "fallback_parents": { "type": { "key": { "type": "string", "maxLength": 17 }, "value": { "type": "integer", "minInteger": 1, "maxInteger": 233 }, "min": 0, "max": 8 } }, ... "Wifi_VIF_State": { ... "channel": { "type": { "key": { "type": "integer", "minInteger": 1, "maxInteger": 233 }, "min": 0, "max": 1 } }, ... "channel_list": { "type": { "key": { "type": "integer", "minInteger": 1, "maxInteger": 233 }, "min": 0, "max": 64 } }, ... "Wifi_VIF_Neighbors": { ... "channel": { "type": { "key": { "type": "integer", "minInteger": 1, "maxInteger": 233 }, "min": 0, "max": 1 } }, ... "freq_band": { "type": { "key": { "type": "string", "enum": [ "set", [ "2.4G", "5G", "6G" ] ] }, "min": 0, "max": 1 } }, ... "Wifi_Stats_Config": { ... "radio_type": { "type": { "key": { "type": "string", "enum": [ "set", [ "2.4G", "5G", "5GL", "5GU", "6G" ] ] } } }, ... "channel_list": { "type": { "key": { "type": "integer", "minInteger": 1, "maxInteger": 233 }, "min": 0, "max": 64 } }, ... |
Steering at 6 GHz
Actions needed (Band_Steering_Config):
Band_Steering_Config::if_name_2g → deprecate field, use Band_Steering_Config::ifnames instead
Band_Steering_Config::if_name_5g → deprecate field, use Band_Steering_Config::ifnames instead
Actions needed (Band_Steering_Clients):
Band_Steering_Clients::max_rejects → deprecate field; a timer-based pre-assoc 5 GHz steering will be used instead.
Band_Steering_Clients::rejects_tmout_secs → deprecate field; a timer-based pre-assoc 5 GHz steering will be used instead.
Band_Steering_Clients::pref_5g_reject_timeout_msecs → new field, specifying for how long a STA should be blocked
Band_Steering_Clients::pref_6g → introduce new enumeration field (values: "never", "always"). This field will control the pre-assoc 6 GHz steering policy.
Band Steering Manager (BM)
Actions needed:
Switch from Band_Steering_Config::(if_name_2g,if_name_5g)
to Band_Steering_Config::ifnames
.
Support 6 GHz in code maintaining the BTM neighbors table.
Implement a timer-based 5 GHz HWM pre-assoc steering policy.
Implement 6 GHz steering pre-assoc steering.
Implement 6 GHz steering post-assoc steering.
BSAL API
Actions needed:
Updated functions and structures with newly introduced fields (mainly reflecting changes in schema discussed above).
Requirements
Hardware Dependencies
To implement WiFi 6E on an OpenSync-enabled node, hardware support is mandatory. OpenSync was focusing on the following chipsets:
Qualcomm:
IPQ8074 (SoC), QCN9074 (radio)
IPQ5018 (SoC), QCN9074 (radio)
Broadcom:
BCM6755 (SoC), BCM943684MCH6 (radio)
OpenSync FW and Cloud OVSDB Table Settings
Support for channel selection in UNII 5, UNII 6, UNII 7 and UNII 8
Ability to select any primary channel in each UNII x band (e.g., any 20 MHz channel)
Ability to operate in 20 MHz, 40 MHz, 80 MHz, 160 MHz channels
Will be handled by Channels configuration chapter.
Power Level Settings
OpenSync and OVSDB must support a power level setting to operate in standard power mode.
AFC System
AFC system is currently not supported.
The AFC system requires inputs per AP of geolocation, including location confidence, antenna height, FCC ID and device serial number to an AFC operator.
The AFC will return the allowed power levels per frequency.
The cloud should maintain a list of allowed channel power levels for each AP along with the information about when the power levels were last updated.
The AFC values should be updated at least 1x per calendar day.
Operation of the AFC is not a necessity for OpenSync, thus use of a 3rd party vendor is allowed. However, the cloud should manage this relationship with the AFC vendor with a cloud-to-cloud interface.
Off-Channel Scan
The controller must support enabling and setting a time interval for off-channel scanning using a non-intrusive channel scanning method with a single radio chain.
The dwell time for the off-channel scan must be configurable.
The off-channel scan must be configurable only to PSC channels or all 20 MHz channels.
The off-channel scan must be configurable in bandwidth size (e.g., 20 MHz, 40 MHz, 80 MHz and 160 MHz)
SM Changes to Support a New Radio
The changes depend on WiFi chipset possibilities. Currently, only 20 MHz can be set for off-channel.
The AP may be able to cancel the off-channel scan request if the radio is busy beyond a configurable threshold.
BSSID Use in Multi-radio Designs
Since many devices do not yet support the 6 GHz band, it is required to support simultaneous operation on 5 GHz and 6 GHz for device compatibility.
When the AP supports both 5 GHz and 6 GHz radios, both are available for use as backhaul and client connections.
When 5 GHz and 6 GHz radios are available, both 5 GHz and 6 GHz radios must present the Home SSID at a minimum for device connections.
The 6 GHz band will also be available only for 11ax devices (HE mode is a requirement to operate in the 6 GHz band). It is expected that 11ac clients will be prevalent for many years, so 5 GHz radio SHOULD be available in WiFi 6E APs.
Onboarding
Upon initial boot up, the device shall enable the 6 GHz interface in low power mode.
The AP with 6 GHz shall be able to scan and connect to another 6 GHz backhaul connection for initial connection to the network.
The onboarding network flow shall be the same as for 2.4 GHz or 5 GHz radios.
Reporting and APIs
Node Part in Reporting
WiFi statistics
Steering driver events handling
Support for WPA3
WiFi 6E uses WPA3 for authentication. WPA2 authentication is not allowed by the WiFi 6E standard.
Requirements
6GHz radio supports many VAPs, STA and AP mode, M-BSSID
SDK
The following SDKs support WiFi 6E:
Qualcomm: SPF 11.4
Broadcom: 5.02L.07p1, 5.02L.07p2, 5.04L.02p1