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:

Broadcom:

OpenSync FW and Cloud OVSDB Table Settings

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.

Off-Channel Scan

SM Changes to Support a New Radio

The changes depend on WiFi chipset possibilities. Currently, only 20 MHz can be set for off-channel.

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.

Onboarding

Reporting and APIs

Node Part in Reporting

Support for WPA3

WiFi 6E uses WPA3 for authentication. WPA2 authentication is not allowed by the WiFi 6E standard.

Requirements

SDK

The following SDKs support WiFi 6E: