| #!/usr/bin/env python3 |
| # |
| # Copyright 2022 The Fuchsia Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import itertools |
| from enum import Enum, StrEnum, auto, unique |
| from typing import TypedDict |
| |
| # TODO(http://b/286584981): Replace with BandType |
| BAND_2G = "2g" |
| BAND_5G = "5g" |
| |
| |
| @unique |
| class BandType(StrEnum): |
| BAND_2G = "2g" |
| BAND_5G = "5g" |
| |
| def default_channel(self) -> int: |
| match self: |
| case BandType.BAND_2G: |
| return 6 |
| case BandType.BAND_5G: |
| return 36 |
| |
| |
| CHANNEL_BANDWIDTH_20MHZ = 20 |
| CHANNEL_BANDWIDTH_40MHZ = 40 |
| CHANNEL_BANDWIDTH_80MHZ = 80 |
| CHANNEL_BANDWIDTH_160MHZ = 160 |
| |
| # TODO(http://b/286584981): Replace with SecurityModeInt |
| WEP = 0 |
| WPA1 = 1 |
| WPA2 = 2 |
| WPA3 = 2 # same as wpa2 and wpa2/wpa3, distinguished by wpa_key_mgmt |
| MIXED = 3 # applies to wpa/wpa2, and wpa/wpa2/wpa3, distinguished by wpa_key_mgmt |
| ENT = 4 # get the correct constant |
| |
| MAX_WPA_PSK_LENGTH = 64 |
| MIN_WPA_PSK_LENGTH = 8 |
| MAX_WPA_PASSWORD_LENGTH = 63 |
| WPA_STRICT_REKEY = 1 |
| WPA_DEFAULT_CIPHER = "TKIP" |
| WPA2_DEFAULT_CIPER = "CCMP" |
| WPA_GROUP_KEY_ROTATION_TIME = 600 |
| WPA_STRICT_REKEY_DEFAULT = True |
| |
| # TODO(http://b/286584981): Replace these with SecurityMode enum |
| WEP_STRING = "wep" |
| WPA_STRING = "wpa" |
| WPA2_STRING = "wpa2" |
| WPA_MIXED_STRING = "wpa/wpa2" |
| WPA3_STRING = "wpa3" |
| WPA2_WPA3_MIXED_STRING = "wpa2/wpa3" |
| WPA_WPA2_WPA3_MIXED_STRING = "wpa/wpa2/wpa3" |
| ENT_STRING = "ent" |
| |
| # TODO(http://b/286584981): Replace with KeyManagement |
| ENT_KEY_MGMT = "WPA-EAP" |
| WPA_PSK_KEY_MGMT = "WPA-PSK" |
| SAE_KEY_MGMT = "SAE" |
| DUAL_WPA_PSK_SAE_KEY_MGMT = "WPA-PSK SAE" |
| |
| # TODO(http://b/286584981): Replace with SecurityMode.security_mode_int |
| SECURITY_STRING_TO_SECURITY_MODE_INT = { |
| WPA_STRING: WPA1, |
| WPA2_STRING: WPA2, |
| WPA_MIXED_STRING: MIXED, |
| WPA3_STRING: WPA3, |
| WPA2_WPA3_MIXED_STRING: WPA3, |
| WPA_WPA2_WPA3_MIXED_STRING: MIXED, |
| WEP_STRING: WEP, |
| ENT_STRING: ENT, |
| } |
| |
| # TODO(http://b/286584981): Replace with SecurityMode.key_management |
| SECURITY_STRING_TO_WPA_KEY_MGMT = { |
| WPA_STRING: WPA_PSK_KEY_MGMT, |
| WPA2_STRING: WPA_PSK_KEY_MGMT, |
| WPA_MIXED_STRING: WPA_PSK_KEY_MGMT, |
| WPA3_STRING: SAE_KEY_MGMT, |
| WPA2_WPA3_MIXED_STRING: DUAL_WPA_PSK_SAE_KEY_MGMT, |
| WPA_WPA2_WPA3_MIXED_STRING: DUAL_WPA_PSK_SAE_KEY_MGMT, |
| } |
| |
| # TODO(http://b/286584981): Replace with SecurityMode.fuchsia_security_type |
| SECURITY_STRING_TO_DEFAULT_TARGET_SECURITY = { |
| WEP_STRING: WEP_STRING, |
| WPA_STRING: WPA_STRING, |
| WPA2_STRING: WPA2_STRING, |
| WPA_MIXED_STRING: WPA2_STRING, |
| WPA3_STRING: WPA3_STRING, |
| WPA2_WPA3_MIXED_STRING: WPA3_STRING, |
| WPA_WPA2_WPA3_MIXED_STRING: WPA3_STRING, |
| } |
| |
| IEEE8021X = 1 |
| WLAN0_STRING = "wlan0" |
| WLAN1_STRING = "wlan1" |
| WLAN2_STRING = "wlan2" |
| WLAN3_STRING = "wlan3" |
| WLAN0_GALE = "wlan-2400mhz" |
| WLAN1_GALE = "wlan-5000mhz" |
| WEP_DEFAULT_KEY = 0 |
| WEP_HEX_LENGTH = [10, 26, 32, 58] |
| WEP_STR_LENGTH = [5, 13, 16] |
| WEP_DEFAULT_STR_LENGTH = 13 |
| |
| # TODO(http://b/286584981): Replace with BandType.default_channel() |
| AP_DEFAULT_CHANNEL_2G = 6 |
| AP_DEFAULT_CHANNEL_5G = 36 |
| |
| AP_DEFAULT_MAX_SSIDS_2G = 8 |
| AP_DEFAULT_MAX_SSIDS_5G = 8 |
| AP_SSID_LENGTH_2G = 8 |
| AP_SSID_MIN_LENGTH_2G = 1 |
| AP_SSID_MAX_LENGTH_2G = 32 |
| AP_PASSPHRASE_LENGTH_2G = 10 |
| AP_SSID_LENGTH_5G = 8 |
| AP_SSID_MIN_LENGTH_5G = 1 |
| AP_SSID_MAX_LENGTH_5G = 32 |
| AP_PASSPHRASE_LENGTH_5G = 10 |
| INTERFACE_2G_LIST = [WLAN0_STRING, WLAN0_GALE] |
| INTERFACE_5G_LIST = [WLAN1_STRING, WLAN1_GALE] |
| HIGH_BEACON_INTERVAL = 300 |
| LOW_BEACON_INTERVAL = 100 |
| HIGH_DTIM = 3 |
| LOW_DTIM = 1 |
| |
| # A mapping of frequency to channel number. This includes some |
| # frequencies used outside the US. |
| CHANNEL_MAP = { |
| 2412: 1, |
| 2417: 2, |
| 2422: 3, |
| 2427: 4, |
| 2432: 5, |
| 2437: 6, |
| 2442: 7, |
| 2447: 8, |
| 2452: 9, |
| 2457: 10, |
| 2462: 11, |
| # 12, 13 are only legitimate outside the US. |
| 2467: 12, |
| 2472: 13, |
| # 14 is for Japan, DSSS and CCK only. |
| 2484: 14, |
| # 34 valid in Japan. |
| 5170: 34, |
| # 36-116 valid in the US, except 38, 42, and 46, which have |
| # mixed international support. |
| 5180: 36, |
| 5190: 38, |
| 5200: 40, |
| 5210: 42, |
| 5220: 44, |
| 5230: 46, |
| 5240: 48, |
| # DFS channels. |
| 5260: 52, |
| 5280: 56, |
| 5300: 60, |
| 5320: 64, |
| 5500: 100, |
| 5520: 104, |
| 5540: 108, |
| 5560: 112, |
| 5580: 116, |
| # 120, 124, 128 valid in Europe/Japan. |
| 5600: 120, |
| 5620: 124, |
| 5640: 128, |
| # 132+ valid in US. |
| 5660: 132, |
| 5680: 136, |
| 5700: 140, |
| # 144 is supported by a subset of WiFi chips |
| # (e.g. bcm4354, but not ath9k). |
| 5720: 144, |
| # End DFS channels. |
| 5745: 149, |
| 5755: 151, |
| 5765: 153, |
| 5775: 155, |
| 5795: 159, |
| 5785: 157, |
| 5805: 161, |
| 5825: 165, |
| } |
| FREQUENCY_MAP = {v: k for k, v in CHANNEL_MAP.items()} |
| |
| US_CHANNELS_2G = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] |
| US_CHANNELS_5G = [ |
| 36, |
| 40, |
| 44, |
| 48, |
| 52, |
| 56, |
| 60, |
| 64, |
| 100, |
| 104, |
| 108, |
| 112, |
| 116, |
| 120, |
| 124, |
| 128, |
| 132, |
| 136, |
| 140, |
| 144, |
| 149, |
| 153, |
| 157, |
| 161, |
| 165, |
| ] |
| |
| LOWEST_5G_CHANNEL = 36 |
| |
| MODE_11A = "a" |
| MODE_11B = "b" |
| MODE_11G = "g" |
| MODE_11N_MIXED = "n-mixed" |
| MODE_11N_PURE = "n-only" |
| MODE_11AC_MIXED = "ac-mixed" |
| MODE_11AC_PURE = "ac-only" |
| |
| N_CAPABILITY_LDPC = object() |
| N_CAPABILITY_HT20 = object() |
| N_CAPABILITY_HT40_PLUS = object() |
| N_CAPABILITY_HT40_MINUS = object() |
| N_CAPABILITY_GREENFIELD = object() |
| N_CAPABILITY_SGI20 = object() |
| N_CAPABILITY_SGI40 = object() |
| N_CAPABILITY_TX_STBC = object() |
| N_CAPABILITY_RX_STBC1 = object() |
| N_CAPABILITY_RX_STBC12 = object() |
| N_CAPABILITY_RX_STBC123 = object() |
| N_CAPABILITY_DSSS_CCK_40 = object() |
| N_CAPABILITY_LSIG_TXOP_PROT = object() |
| N_CAPABILITY_40_INTOLERANT = object() |
| N_CAPABILITY_MAX_AMSDU_7935 = object() |
| N_CAPABILITY_DELAY_BLOCK_ACK = object() |
| N_CAPABILITY_SMPS_STATIC = object() |
| N_CAPABILITY_SMPS_DYNAMIC = object() |
| N_CAPABILITIES_MAPPING = { |
| N_CAPABILITY_LDPC: "[LDPC]", |
| N_CAPABILITY_HT20: "[HT20]", |
| N_CAPABILITY_HT40_PLUS: "[HT40+]", |
| N_CAPABILITY_HT40_MINUS: "[HT40-]", |
| N_CAPABILITY_GREENFIELD: "[GF]", |
| N_CAPABILITY_SGI20: "[SHORT-GI-20]", |
| N_CAPABILITY_SGI40: "[SHORT-GI-40]", |
| N_CAPABILITY_TX_STBC: "[TX-STBC]", |
| N_CAPABILITY_RX_STBC1: "[RX-STBC1]", |
| N_CAPABILITY_RX_STBC12: "[RX-STBC12]", |
| N_CAPABILITY_RX_STBC123: "[RX-STBC123]", |
| N_CAPABILITY_DSSS_CCK_40: "[DSSS_CCK-40]", |
| N_CAPABILITY_LSIG_TXOP_PROT: "[LSIG-TXOP-PROT]", |
| N_CAPABILITY_40_INTOLERANT: "[40-INTOLERANT]", |
| N_CAPABILITY_MAX_AMSDU_7935: "[MAX-AMSDU-7935]", |
| N_CAPABILITY_DELAY_BLOCK_ACK: "[DELAYED-BA]", |
| N_CAPABILITY_SMPS_STATIC: "[SMPS-STATIC]", |
| N_CAPABILITY_SMPS_DYNAMIC: "[SMPS-DYNAMIC]", |
| } |
| N_CAPABILITIES_MAPPING_INVERSE = {v: k for k, v in N_CAPABILITIES_MAPPING.items()} |
| N_CAPABILITY_HT40_MINUS_CHANNELS = object() |
| N_CAPABILITY_HT40_PLUS_CHANNELS = object() |
| AC_CAPABILITY_VHT160 = object() |
| AC_CAPABILITY_VHT160_80PLUS80 = object() |
| AC_CAPABILITY_RXLDPC = object() |
| AC_CAPABILITY_SHORT_GI_80 = object() |
| AC_CAPABILITY_SHORT_GI_160 = object() |
| AC_CAPABILITY_TX_STBC_2BY1 = object() |
| AC_CAPABILITY_RX_STBC_1 = object() |
| AC_CAPABILITY_RX_STBC_12 = object() |
| AC_CAPABILITY_RX_STBC_123 = object() |
| AC_CAPABILITY_RX_STBC_1234 = object() |
| AC_CAPABILITY_SU_BEAMFORMER = object() |
| AC_CAPABILITY_SU_BEAMFORMEE = object() |
| AC_CAPABILITY_BF_ANTENNA_2 = object() |
| AC_CAPABILITY_BF_ANTENNA_3 = object() |
| AC_CAPABILITY_BF_ANTENNA_4 = object() |
| AC_CAPABILITY_SOUNDING_DIMENSION_2 = object() |
| AC_CAPABILITY_SOUNDING_DIMENSION_3 = object() |
| AC_CAPABILITY_SOUNDING_DIMENSION_4 = object() |
| AC_CAPABILITY_MU_BEAMFORMER = object() |
| AC_CAPABILITY_MU_BEAMFORMEE = object() |
| AC_CAPABILITY_VHT_TXOP_PS = object() |
| AC_CAPABILITY_HTC_VHT = object() |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP0 = object() |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP1 = object() |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP2 = object() |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP3 = object() |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP4 = object() |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP5 = object() |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP6 = object() |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP7 = object() |
| AC_CAPABILITY_VHT_LINK_ADAPT2 = object() |
| AC_CAPABILITY_VHT_LINK_ADAPT3 = object() |
| AC_CAPABILITY_RX_ANTENNA_PATTERN = object() |
| AC_CAPABILITY_TX_ANTENNA_PATTERN = object() |
| AC_CAPABILITY_MAX_MPDU_7991 = object() |
| AC_CAPABILITY_MAX_MPDU_11454 = object() |
| AC_CAPABILITIES_MAPPING = { |
| AC_CAPABILITY_VHT160: "[VHT160]", |
| AC_CAPABILITY_VHT160_80PLUS80: "[VHT160-80PLUS80]", |
| AC_CAPABILITY_RXLDPC: "[RXLDPC]", |
| AC_CAPABILITY_SHORT_GI_80: "[SHORT-GI-80]", |
| AC_CAPABILITY_SHORT_GI_160: "[SHORT-GI-160]", |
| AC_CAPABILITY_TX_STBC_2BY1: "[TX-STBC-2BY1]", |
| AC_CAPABILITY_RX_STBC_1: "[RX-STBC-1]", |
| AC_CAPABILITY_RX_STBC_12: "[RX-STBC-12]", |
| AC_CAPABILITY_RX_STBC_123: "[RX-STBC-123]", |
| AC_CAPABILITY_RX_STBC_1234: "[RX-STBC-1234]", |
| AC_CAPABILITY_SU_BEAMFORMER: "[SU-BEAMFORMER]", |
| AC_CAPABILITY_SU_BEAMFORMEE: "[SU-BEAMFORMEE]", |
| AC_CAPABILITY_BF_ANTENNA_2: "[BF-ANTENNA-2]", |
| AC_CAPABILITY_BF_ANTENNA_3: "[BF-ANTENNA-3]", |
| AC_CAPABILITY_BF_ANTENNA_4: "[BF-ANTENNA-4]", |
| AC_CAPABILITY_SOUNDING_DIMENSION_2: "[SOUNDING-DIMENSION-2]", |
| AC_CAPABILITY_SOUNDING_DIMENSION_3: "[SOUNDING-DIMENSION-3]", |
| AC_CAPABILITY_SOUNDING_DIMENSION_4: "[SOUNDING-DIMENSION-4]", |
| AC_CAPABILITY_MU_BEAMFORMER: "[MU-BEAMFORMER]", |
| AC_CAPABILITY_MU_BEAMFORMEE: "[MU-BEAMFORMEE]", |
| AC_CAPABILITY_VHT_TXOP_PS: "[VHT-TXOP-PS]", |
| AC_CAPABILITY_HTC_VHT: "[HTC-VHT]", |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP0: "[MAX-A-MPDU-LEN-EXP0]", |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP1: "[MAX-A-MPDU-LEN-EXP1]", |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP2: "[MAX-A-MPDU-LEN-EXP2]", |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP3: "[MAX-A-MPDU-LEN-EXP3]", |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP4: "[MAX-A-MPDU-LEN-EXP4]", |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP5: "[MAX-A-MPDU-LEN-EXP5]", |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP6: "[MAX-A-MPDU-LEN-EXP6]", |
| AC_CAPABILITY_MAX_A_MPDU_LEN_EXP7: "[MAX-A-MPDU-LEN-EXP7]", |
| AC_CAPABILITY_VHT_LINK_ADAPT2: "[VHT-LINK-ADAPT2]", |
| AC_CAPABILITY_VHT_LINK_ADAPT3: "[VHT-LINK-ADAPT3]", |
| AC_CAPABILITY_RX_ANTENNA_PATTERN: "[RX-ANTENNA-PATTERN]", |
| AC_CAPABILITY_TX_ANTENNA_PATTERN: "[TX-ANTENNA-PATTERN]", |
| AC_CAPABILITY_MAX_MPDU_11454: "[MAX-MPDU-11454]", |
| AC_CAPABILITY_MAX_MPDU_7991: "[MAX-MPDU-7991]", |
| } |
| AC_CAPABILITIES_MAPPING_INVERSE = {v: k for k, v in AC_CAPABILITIES_MAPPING.items()} |
| VHT_CHANNEL_WIDTH_40 = 0 |
| VHT_CHANNEL_WIDTH_80 = 1 |
| VHT_CHANNEL_WIDTH_160 = 2 |
| VHT_CHANNEL_WIDTH_80_80 = 3 |
| |
| VHT_CHANNEL = { |
| 40: VHT_CHANNEL_WIDTH_40, |
| 80: VHT_CHANNEL_WIDTH_80, |
| 160: VHT_CHANNEL_WIDTH_160, |
| } |
| |
| # This is a loose merging of the rules for US and EU regulatory |
| # domains as taken from IEEE Std 802.11-2012 Appendix E. For instance, |
| # we tolerate HT40 in channels 149-161 (not allowed in EU), but also |
| # tolerate HT40+ on channel 7 (not allowed in the US). We take the loose |
| # definition so that we don't prohibit testing in either domain. |
| HT40_ALLOW_MAP = { |
| N_CAPABILITY_HT40_MINUS_CHANNELS: tuple( |
| itertools.chain(range(6, 14), range(40, 65, 8), range(104, 145, 8), [153, 161]) |
| ), |
| N_CAPABILITY_HT40_PLUS_CHANNELS: tuple( |
| itertools.chain(range(1, 8), range(36, 61, 8), range(100, 141, 8), [149, 157]) |
| ), |
| } |
| |
| PMF_SUPPORT_DISABLED = 0 |
| PMF_SUPPORT_ENABLED = 1 |
| PMF_SUPPORT_REQUIRED = 2 |
| PMF_SUPPORT_VALUES = (PMF_SUPPORT_DISABLED, PMF_SUPPORT_ENABLED, PMF_SUPPORT_REQUIRED) |
| |
| DRIVER_NAME = "nl80211" |
| |
| |
| class VHTChannelWidth(TypedDict): |
| delta: int |
| channels: list[tuple[int, int]] |
| |
| |
| CENTER_CHANNEL_MAP = { |
| VHT_CHANNEL_WIDTH_40: VHTChannelWidth( |
| delta=2, |
| channels=[ |
| (36, 40), |
| (44, 48), |
| (52, 56), |
| (60, 64), |
| (100, 104), |
| (108, 112), |
| (116, 120), |
| (124, 128), |
| (132, 136), |
| (140, 144), |
| (149, 153), |
| (157, 161), |
| ], |
| ), |
| VHT_CHANNEL_WIDTH_80: VHTChannelWidth( |
| delta=6, |
| channels=[ |
| (36, 48), |
| (52, 64), |
| (100, 112), |
| (116, 128), |
| (132, 144), |
| (149, 161), |
| ], |
| ), |
| VHT_CHANNEL_WIDTH_160: VHTChannelWidth( |
| delta=14, |
| channels=[(36, 64), (100, 128)], |
| ), |
| } |
| |
| OFDM_DATA_RATES = {"supported_rates": "60 90 120 180 240 360 480 540"} |
| |
| CCK_DATA_RATES = {"supported_rates": "10 20 55 110"} |
| |
| CCK_AND_OFDM_DATA_RATES = { |
| "supported_rates": "10 20 55 110 60 90 120 180 240 360 480 540" |
| } |
| |
| OFDM_ONLY_BASIC_RATES = {"basic_rates": "60 120 240"} |
| |
| CCK_AND_OFDM_BASIC_RATES = {"basic_rates": "10 20 55 110"} |
| |
| WEP_AUTH = { |
| "open": {"auth_algs": 1}, |
| "shared": {"auth_algs": 2}, |
| "open_and_shared": {"auth_algs": 3}, |
| } |
| |
| WMM_11B_DEFAULT_PARAMS = { |
| "wmm_ac_bk_cwmin": 5, |
| "wmm_ac_bk_cwmax": 10, |
| "wmm_ac_bk_aifs": 7, |
| "wmm_ac_bk_txop_limit": 0, |
| "wmm_ac_be_aifs": 3, |
| "wmm_ac_be_cwmin": 5, |
| "wmm_ac_be_cwmax": 7, |
| "wmm_ac_be_txop_limit": 0, |
| "wmm_ac_vi_aifs": 2, |
| "wmm_ac_vi_cwmin": 4, |
| "wmm_ac_vi_cwmax": 5, |
| "wmm_ac_vi_txop_limit": 188, |
| "wmm_ac_vo_aifs": 2, |
| "wmm_ac_vo_cwmin": 3, |
| "wmm_ac_vo_cwmax": 4, |
| "wmm_ac_vo_txop_limit": 102, |
| } |
| |
| WMM_PHYS_11A_11G_11N_11AC_DEFAULT_PARAMS = { |
| "wmm_ac_bk_cwmin": 4, |
| "wmm_ac_bk_cwmax": 10, |
| "wmm_ac_bk_aifs": 7, |
| "wmm_ac_bk_txop_limit": 0, |
| "wmm_ac_be_aifs": 3, |
| "wmm_ac_be_cwmin": 4, |
| "wmm_ac_be_cwmax": 10, |
| "wmm_ac_be_txop_limit": 0, |
| "wmm_ac_vi_aifs": 2, |
| "wmm_ac_vi_cwmin": 3, |
| "wmm_ac_vi_cwmax": 4, |
| "wmm_ac_vi_txop_limit": 94, |
| "wmm_ac_vo_aifs": 2, |
| "wmm_ac_vo_cwmin": 2, |
| "wmm_ac_vo_cwmax": 3, |
| "wmm_ac_vo_txop_limit": 47, |
| } |
| |
| WMM_NON_DEFAULT_PARAMS = { |
| "wmm_ac_bk_cwmin": 5, |
| "wmm_ac_bk_cwmax": 9, |
| "wmm_ac_bk_aifs": 3, |
| "wmm_ac_bk_txop_limit": 94, |
| "wmm_ac_be_aifs": 2, |
| "wmm_ac_be_cwmin": 2, |
| "wmm_ac_be_cwmax": 8, |
| "wmm_ac_be_txop_limit": 0, |
| "wmm_ac_vi_aifs": 1, |
| "wmm_ac_vi_cwmin": 7, |
| "wmm_ac_vi_cwmax": 10, |
| "wmm_ac_vi_txop_limit": 47, |
| "wmm_ac_vo_aifs": 1, |
| "wmm_ac_vo_cwmin": 6, |
| "wmm_ac_vo_cwmax": 10, |
| "wmm_ac_vo_txop_limit": 94, |
| } |
| |
| WMM_DEGRADED_VO_PARAMS = { |
| "wmm_ac_bk_cwmin": 7, |
| "wmm_ac_bk_cwmax": 15, |
| "wmm_ac_bk_aifs": 2, |
| "wmm_ac_bk_txop_limit": 0, |
| "wmm_ac_be_aifs": 2, |
| "wmm_ac_be_cwmin": 7, |
| "wmm_ac_be_cwmax": 15, |
| "wmm_ac_be_txop_limit": 0, |
| "wmm_ac_vi_aifs": 2, |
| "wmm_ac_vi_cwmin": 7, |
| "wmm_ac_vi_cwmax": 15, |
| "wmm_ac_vi_txop_limit": 94, |
| "wmm_ac_vo_aifs": 10, |
| "wmm_ac_vo_cwmin": 7, |
| "wmm_ac_vo_cwmax": 15, |
| "wmm_ac_vo_txop_limit": 47, |
| } |
| |
| WMM_DEGRADED_VI_PARAMS = { |
| "wmm_ac_bk_cwmin": 7, |
| "wmm_ac_bk_cwmax": 15, |
| "wmm_ac_bk_aifs": 2, |
| "wmm_ac_bk_txop_limit": 0, |
| "wmm_ac_be_aifs": 2, |
| "wmm_ac_be_cwmin": 7, |
| "wmm_ac_be_cwmax": 15, |
| "wmm_ac_be_txop_limit": 0, |
| "wmm_ac_vi_aifs": 10, |
| "wmm_ac_vi_cwmin": 7, |
| "wmm_ac_vi_cwmax": 15, |
| "wmm_ac_vi_txop_limit": 94, |
| "wmm_ac_vo_aifs": 2, |
| "wmm_ac_vo_cwmin": 7, |
| "wmm_ac_vo_cwmax": 15, |
| "wmm_ac_vo_txop_limit": 47, |
| } |
| |
| WMM_IMPROVE_BE_PARAMS = { |
| "wmm_ac_bk_cwmin": 7, |
| "wmm_ac_bk_cwmax": 15, |
| "wmm_ac_bk_aifs": 10, |
| "wmm_ac_bk_txop_limit": 0, |
| "wmm_ac_be_aifs": 2, |
| "wmm_ac_be_cwmin": 7, |
| "wmm_ac_be_cwmax": 15, |
| "wmm_ac_be_txop_limit": 0, |
| "wmm_ac_vi_aifs": 10, |
| "wmm_ac_vi_cwmin": 7, |
| "wmm_ac_vi_cwmax": 15, |
| "wmm_ac_vi_txop_limit": 94, |
| "wmm_ac_vo_aifs": 10, |
| "wmm_ac_vo_cwmin": 7, |
| "wmm_ac_vo_cwmax": 15, |
| "wmm_ac_vo_txop_limit": 47, |
| } |
| |
| WMM_IMPROVE_BK_PARAMS = { |
| "wmm_ac_bk_cwmin": 7, |
| "wmm_ac_bk_cwmax": 15, |
| "wmm_ac_bk_aifs": 2, |
| "wmm_ac_bk_txop_limit": 0, |
| "wmm_ac_be_aifs": 10, |
| "wmm_ac_be_cwmin": 7, |
| "wmm_ac_be_cwmax": 15, |
| "wmm_ac_be_txop_limit": 0, |
| "wmm_ac_vi_aifs": 10, |
| "wmm_ac_vi_cwmin": 7, |
| "wmm_ac_vi_cwmax": 15, |
| "wmm_ac_vi_txop_limit": 94, |
| "wmm_ac_vo_aifs": 10, |
| "wmm_ac_vo_cwmin": 7, |
| "wmm_ac_vo_cwmax": 15, |
| "wmm_ac_vo_txop_limit": 47, |
| } |
| |
| WMM_ACM_BK = {"wmm_ac_bk_acm": 1} |
| WMM_ACM_BE = {"wmm_ac_be_acm": 1} |
| WMM_ACM_VI = {"wmm_ac_vi_acm": 1} |
| WMM_ACM_VO = {"wmm_ac_vo_acm": 1} |
| |
| UAPSD_ENABLED = {"uapsd_advertisement_enabled": 1} |
| |
| UTF_8_SSID = {"utf8_ssid": 1} |
| |
| ENABLE_RRM_BEACON_REPORT = {"rrm_beacon_report": 1} |
| ENABLE_RRM_NEIGHBOR_REPORT = {"rrm_neighbor_report": 1} |
| |
| # Wireless Network Management (AKA 802.11v) features. |
| ENABLE_WNM_TIME_ADVERTISEMENT = {"time_advertisement": 2, "time_zone": "EST5"} |
| ENABLE_WNM_SLEEP_MODE = {"wnm_sleep_mode": 1} |
| ENABLE_WNM_BSS_TRANSITION_MANAGEMENT = {"bss_transition": 1} |
| ENABLE_WNM_PROXY_ARP = {"proxy_arp": 1} |
| ENABLE_WNM_IPV6_NEIGHBOR_ADVERTISEMENT_MULTICAST_TO_UNICAST = {"na_mcast_to_ucast": 1} |
| |
| VENDOR_IE = { |
| "correct_length_beacon": {"vendor_elements": "dd0411223301"}, |
| "too_short_length_beacon": {"vendor_elements": "dd0311223301"}, |
| "too_long_length_beacon": {"vendor_elements": "dd0511223301"}, |
| "zero_length_beacon_with_data": {"vendor_elements": "dd0011223301"}, |
| "zero_length_beacon_without_data": {"vendor_elements": "dd00"}, |
| "simliar_to_wpa": {"vendor_elements": "dd040050f203"}, |
| "correct_length_association_response": {"assocresp_elements": "dd0411223301"}, |
| "too_short_length_association_response": {"assocresp_elements": "dd0311223301"}, |
| "too_long_length_association_response": {"assocresp_elements": "dd0511223301"}, |
| "zero_length_association_response_with_data": { |
| "assocresp_elements": "dd0011223301" |
| }, |
| "zero_length_association_response_without_data": {"assocresp_elements": "dd00"}, |
| } |
| |
| ENABLE_IEEE80211D = {"ieee80211d": 1} |
| |
| COUNTRY_STRING = { |
| "ALL": {"country3": "0x20"}, |
| "OUTDOOR": {"country3": "0x4f"}, |
| "INDOOR": {"country3": "0x49"}, |
| "NONCOUNTRY": {"country3": "0x58"}, |
| "GLOBAL": {"country3": "0x04"}, |
| } |
| |
| COUNTRY_CODE = { |
| "AFGHANISTAN": {"country_code": "AF"}, |
| "ALAND_ISLANDS": {"country_code": "AX"}, |
| "ALBANIA": {"country_code": "AL"}, |
| "ALGERIA": {"country_code": "DZ"}, |
| "AMERICAN_SAMOA": {"country_code": "AS"}, |
| "ANDORRA": {"country_code": "AD"}, |
| "ANGOLA": {"country_code": "AO"}, |
| "ANGUILLA": {"country_code": "AI"}, |
| "ANTARCTICA": {"country_code": "AQ"}, |
| "ANTIGUA_AND_BARBUDA": {"country_code": "AG"}, |
| "ARGENTINA": {"country_code": "AR"}, |
| "ARMENIA": {"country_code": "AM"}, |
| "ARUBA": {"country_code": "AW"}, |
| "AUSTRALIA": {"country_code": "AU"}, |
| "AUSTRIA": {"country_code": "AT"}, |
| "AZERBAIJAN": {"country_code": "AZ"}, |
| "BAHAMAS": {"country_code": "BS"}, |
| "BAHRAIN": {"country_code": "BH"}, |
| "BANGLADESH": {"country_code": "BD"}, |
| "BARBADOS": {"country_code": "BB"}, |
| "BELARUS": {"country_code": "BY"}, |
| "BELGIUM": {"country_code": "BE"}, |
| "BELIZE": {"country_code": "BZ"}, |
| "BENIN": {"country_code": "BJ"}, |
| "BERMUDA": {"country_code": "BM"}, |
| "BHUTAN": {"country_code": "BT"}, |
| "BOLIVIA": {"country_code": "BO"}, |
| "BONAIRE": {"country_code": "BQ"}, |
| "BOSNIA_AND_HERZEGOVINA": {"country_code": "BA"}, |
| "BOTSWANA": {"country_code": "BW"}, |
| "BOUVET_ISLAND": {"country_code": "BV"}, |
| "BRAZIL": {"country_code": "BR"}, |
| "BRITISH_INDIAN_OCEAN_TERRITORY": {"country_code": "IO"}, |
| "BRUNEI_DARUSSALAM": {"country_code": "BN"}, |
| "BULGARIA": {"country_code": "BG"}, |
| "BURKINA_FASO": {"country_code": "BF"}, |
| "BURUNDI": {"country_code": "BI"}, |
| "CAMBODIA": {"country_code": "KH"}, |
| "CAMEROON": {"country_code": "CM"}, |
| "CANADA": {"country_code": "CA"}, |
| "CAPE_VERDE": {"country_code": "CV"}, |
| "CAYMAN_ISLANDS": {"country_code": "KY"}, |
| "CENTRAL_AFRICAN_REPUBLIC": {"country_code": "CF"}, |
| "CHAD": {"country_code": "TD"}, |
| "CHILE": {"country_code": "CL"}, |
| "CHINA": {"country_code": "CN"}, |
| "CHRISTMAS_ISLAND": {"country_code": "CX"}, |
| "COCOS_ISLANDS": {"country_code": "CC"}, |
| "COLOMBIA": {"country_code": "CO"}, |
| "COMOROS": {"country_code": "KM"}, |
| "CONGO": {"country_code": "CG"}, |
| "DEMOCRATIC_REPUBLIC_CONGO": {"country_code": "CD"}, |
| "COOK_ISLANDS": {"country_code": "CK"}, |
| "COSTA_RICA": {"country_code": "CR"}, |
| "COTE_D_IVOIRE": {"country_code": "CI"}, |
| "CROATIA": {"country_code": "HR"}, |
| "CUBA": {"country_code": "CU"}, |
| "CURACAO": {"country_code": "CW"}, |
| "CYPRUS": {"country_code": "CY"}, |
| "CZECH_REPUBLIC": {"country_code": "CZ"}, |
| "DENMARK": {"country_code": "DK"}, |
| "DJIBOUTI": {"country_code": "DJ"}, |
| "DOMINICA": {"country_code": "DM"}, |
| "DOMINICAN_REPUBLIC": {"country_code": "DO"}, |
| "ECUADOR": {"country_code": "EC"}, |
| "EGYPT": {"country_code": "EG"}, |
| "EL_SALVADOR": {"country_code": "SV"}, |
| "EQUATORIAL_GUINEA": {"country_code": "GQ"}, |
| "ERITREA": {"country_code": "ER"}, |
| "ESTONIA": {"country_code": "EE"}, |
| "ETHIOPIA": {"country_code": "ET"}, |
| "FALKLAND_ISLANDS_(MALVINAS)": {"country_code": "FK"}, |
| "FAROE_ISLANDS": {"country_code": "FO"}, |
| "FIJI": {"country_code": "FJ"}, |
| "FINLAND": {"country_code": "FI"}, |
| "FRANCE": {"country_code": "FR"}, |
| "FRENCH_GUIANA": {"country_code": "GF"}, |
| "FRENCH_POLYNESIA": {"country_code": "PF"}, |
| "FRENCH_SOUTHERN_TERRITORIES": {"country_code": "TF"}, |
| "GABON": {"country_code": "GA"}, |
| "GAMBIA": {"country_code": "GM"}, |
| "GEORGIA": {"country_code": "GE"}, |
| "GERMANY": {"country_code": "DE"}, |
| "GHANA": {"country_code": "GH"}, |
| "GIBRALTAR": {"country_code": "GI"}, |
| "GREECE": {"country_code": "GR"}, |
| "GREENLAND": {"country_code": "GL"}, |
| "GRENADA": {"country_code": "GD"}, |
| "GUADELOUPE": {"country_code": "GP"}, |
| "GUAM": {"country_code": "GU"}, |
| "GUATEMALA": {"country_code": "GT"}, |
| "GUERNSEY": {"country_code": "GG"}, |
| "GUINEA": {"country_code": "GN"}, |
| "GUINEA-BISSAU": {"country_code": "GW"}, |
| "GUYANA": {"country_code": "GY"}, |
| "HAITI": {"country_code": "HT"}, |
| "HEARD_ISLAND_AND_MCDONALD_ISLANDS": {"country_code": "HM"}, |
| "VATICAN_CITY_STATE": {"country_code": "VA"}, |
| "HONDURAS": {"country_code": "HN"}, |
| "HONG_KONG": {"country_code": "HK"}, |
| "HUNGARY": {"country_code": "HU"}, |
| "ICELAND": {"country_code": "IS"}, |
| "INDIA": {"country_code": "IN"}, |
| "INDONESIA": {"country_code": "ID"}, |
| "IRAN": {"country_code": "IR"}, |
| "IRAQ": {"country_code": "IQ"}, |
| "IRELAND": {"country_code": "IE"}, |
| "ISLE_OF_MAN": {"country_code": "IM"}, |
| "ISRAEL": {"country_code": "IL"}, |
| "ITALY": {"country_code": "IT"}, |
| "JAMAICA": {"country_code": "JM"}, |
| "JAPAN": {"country_code": "JP"}, |
| "JERSEY": {"country_code": "JE"}, |
| "JORDAN": {"country_code": "JO"}, |
| "KAZAKHSTAN": {"country_code": "KZ"}, |
| "KENYA": {"country_code": "KE"}, |
| "KIRIBATI": {"country_code": "KI"}, |
| "DEMOCRATIC_PEOPLE_S_REPUBLIC_OF_KOREA": {"country_code": "KP"}, |
| "REPUBLIC_OF_KOREA": {"country_code": "KR"}, |
| "KUWAIT": {"country_code": "KW"}, |
| "KYRGYZSTAN": {"country_code": "KG"}, |
| "LAO": {"country_code": "LA"}, |
| "LATVIA": {"country_code": "LV"}, |
| "LEBANON": {"country_code": "LB"}, |
| "LESOTHO": {"country_code": "LS"}, |
| "LIBERIA": {"country_code": "LR"}, |
| "LIBYA": {"country_code": "LY"}, |
| "LIECHTENSTEIN": {"country_code": "LI"}, |
| "LITHUANIA": {"country_code": "LT"}, |
| "LUXEMBOURG": {"country_code": "LU"}, |
| "MACAO": {"country_code": "MO"}, |
| "MACEDONIA": {"country_code": "MK"}, |
| "MADAGASCAR": {"country_code": "MG"}, |
| "MALAWI": {"country_code": "MW"}, |
| "MALAYSIA": {"country_code": "MY"}, |
| "MALDIVES": {"country_code": "MV"}, |
| "MALI": {"country_code": "ML"}, |
| "MALTA": {"country_code": "MT"}, |
| "MARSHALL_ISLANDS": {"country_code": "MH"}, |
| "MARTINIQUE": {"country_code": "MQ"}, |
| "MAURITANIA": {"country_code": "MR"}, |
| "MAURITIUS": {"country_code": "MU"}, |
| "MAYOTTE": {"country_code": "YT"}, |
| "MEXICO": {"country_code": "MX"}, |
| "MICRONESIA": {"country_code": "FM"}, |
| "MOLDOVA": {"country_code": "MD"}, |
| "MONACO": {"country_code": "MC"}, |
| "MONGOLIA": {"country_code": "MN"}, |
| "MONTENEGRO": {"country_code": "ME"}, |
| "MONTSERRAT": {"country_code": "MS"}, |
| "MOROCCO": {"country_code": "MA"}, |
| "MOZAMBIQUE": {"country_code": "MZ"}, |
| "MYANMAR": {"country_code": "MM"}, |
| "NAMIBIA": {"country_code": "NA"}, |
| "NAURU": {"country_code": "NR"}, |
| "NEPAL": {"country_code": "NP"}, |
| "NETHERLANDS": {"country_code": "NL"}, |
| "NEW_CALEDONIA": {"country_code": "NC"}, |
| "NEW_ZEALAND": {"country_code": "NZ"}, |
| "NICARAGUA": {"country_code": "NI"}, |
| "NIGER": {"country_code": "NE"}, |
| "NIGERIA": {"country_code": "NG"}, |
| "NIUE": {"country_code": "NU"}, |
| "NORFOLK_ISLAND": {"country_code": "NF"}, |
| "NORTHERN_MARIANA_ISLANDS": {"country_code": "MP"}, |
| "NORWAY": {"country_code": "NO"}, |
| "OMAN": {"country_code": "OM"}, |
| "PAKISTAN": {"country_code": "PK"}, |
| "PALAU": {"country_code": "PW"}, |
| "PALESTINE": {"country_code": "PS"}, |
| "PANAMA": {"country_code": "PA"}, |
| "PAPUA_NEW_GUINEA": {"country_code": "PG"}, |
| "PARAGUAY": {"country_code": "PY"}, |
| "PERU": {"country_code": "PE"}, |
| "PHILIPPINES": {"country_code": "PH"}, |
| "PITCAIRN": {"country_code": "PN"}, |
| "POLAND": {"country_code": "PL"}, |
| "PORTUGAL": {"country_code": "PT"}, |
| "PUERTO_RICO": {"country_code": "PR"}, |
| "QATAR": {"country_code": "QA"}, |
| "RÉUNION": {"country_code": "RE"}, |
| "ROMANIA": {"country_code": "RO"}, |
| "RUSSIAN_FEDERATION": {"country_code": "RU"}, |
| "RWANDA": {"country_code": "RW"}, |
| "SAINT_BARTHELEMY": {"country_code": "BL"}, |
| "SAINT_KITTS_AND_NEVIS": {"country_code": "KN"}, |
| "SAINT_LUCIA": {"country_code": "LC"}, |
| "SAINT_MARTIN": {"country_code": "MF"}, |
| "SAINT_PIERRE_AND_MIQUELON": {"country_code": "PM"}, |
| "SAINT_VINCENT_AND_THE_GRENADINES": {"country_code": "VC"}, |
| "SAMOA": {"country_code": "WS"}, |
| "SAN_MARINO": {"country_code": "SM"}, |
| "SAO_TOME_AND_PRINCIPE": {"country_code": "ST"}, |
| "SAUDI_ARABIA": {"country_code": "SA"}, |
| "SENEGAL": {"country_code": "SN"}, |
| "SERBIA": {"country_code": "RS"}, |
| "SEYCHELLES": {"country_code": "SC"}, |
| "SIERRA_LEONE": {"country_code": "SL"}, |
| "SINGAPORE": {"country_code": "SG"}, |
| "SINT_MAARTEN": {"country_code": "SX"}, |
| "SLOVAKIA": {"country_code": "SK"}, |
| "SLOVENIA": {"country_code": "SI"}, |
| "SOLOMON_ISLANDS": {"country_code": "SB"}, |
| "SOMALIA": {"country_code": "SO"}, |
| "SOUTH_AFRICA": {"country_code": "ZA"}, |
| "SOUTH_GEORGIA": {"country_code": "GS"}, |
| "SOUTH_SUDAN": {"country_code": "SS"}, |
| "SPAIN": {"country_code": "ES"}, |
| "SRI_LANKA": {"country_code": "LK"}, |
| "SUDAN": {"country_code": "SD"}, |
| "SURINAME": {"country_code": "SR"}, |
| "SVALBARD_AND_JAN_MAYEN": {"country_code": "SJ"}, |
| "SWAZILAND": {"country_code": "SZ"}, |
| "SWEDEN": {"country_code": "SE"}, |
| "SWITZERLAND": {"country_code": "CH"}, |
| "SYRIAN_ARAB_REPUBLIC": {"country_code": "SY"}, |
| "TAIWAN": {"country_code": "TW"}, |
| "TAJIKISTAN": {"country_code": "TJ"}, |
| "TANZANIA": {"country_code": "TZ"}, |
| "THAILAND": {"country_code": "TH"}, |
| "TIMOR-LESTE": {"country_code": "TL"}, |
| "TOGO": {"country_code": "TG"}, |
| "TOKELAU": {"country_code": "TK"}, |
| "TONGA": {"country_code": "TO"}, |
| "TRINIDAD_AND_TOBAGO": {"country_code": "TT"}, |
| "TUNISIA": {"country_code": "TN"}, |
| "TURKEY": {"country_code": "TR"}, |
| "TURKMENISTAN": {"country_code": "TM"}, |
| "TURKS_AND_CAICOS_ISLANDS": {"country_code": "TC"}, |
| "TUVALU": {"country_code": "TV"}, |
| "UGANDA": {"country_code": "UG"}, |
| "UKRAINE": {"country_code": "UA"}, |
| "UNITED_ARAB_EMIRATES": {"country_code": "AE"}, |
| "UNITED_KINGDOM": {"country_code": "GB"}, |
| "UNITED_STATES": {"country_code": "US"}, |
| "UNITED_STATES_MINOR_OUTLYING_ISLANDS": {"country_code": "UM"}, |
| "URUGUAY": {"country_code": "UY"}, |
| "UZBEKISTAN": {"country_code": "UZ"}, |
| "VANUATU": {"country_code": "VU"}, |
| "VENEZUELA": {"country_code": "VE"}, |
| "VIETNAM": {"country_code": "VN"}, |
| "VIRGIN_ISLANDS_BRITISH": {"country_code": "VG"}, |
| "VIRGIN_ISLANDS_US": {"country_code": "VI"}, |
| "WALLIS_AND_FUTUNA": {"country_code": "WF"}, |
| "WESTERN_SAHARA": {"country_code": "EH"}, |
| "YEMEN": {"country_code": "YE"}, |
| "ZAMBIA": {"country_code": "ZM"}, |
| "ZIMBABWE": {"country_code": "ZW"}, |
| "NON_COUNTRY": {"country_code": "XX"}, |
| } |
| |
| ALL_CHANNELS_2G = { |
| 1: {20, 40}, |
| 2: {20, 40}, |
| 3: {20, 40}, |
| 4: {20, 40}, |
| 5: {20, 40}, |
| 6: {20, 40}, |
| 7: {20, 40}, |
| 8: {20, 40}, |
| 9: {20, 40}, |
| 10: {20, 40}, |
| 11: {20, 40}, |
| 12: {20, 40}, |
| 13: {20, 40}, |
| 14: {20}, |
| } |
| |
| ALL_CHANNELS_5G = { |
| 36: {20, 40, 80}, |
| 40: {20, 40, 80}, |
| 44: {20, 40, 80}, |
| 48: {20, 40, 80}, |
| 52: {20, 40, 80}, |
| 56: {20, 40, 80}, |
| 60: {20, 40, 80}, |
| 64: {20, 40, 80}, |
| 100: {20, 40, 80}, |
| 104: {20, 40, 80}, |
| 108: {20, 40, 80}, |
| 112: {20, 40, 80}, |
| 116: {20, 40, 80}, |
| 120: {20, 40, 80}, |
| 124: {20, 40, 80}, |
| 128: {20, 40, 80}, |
| 132: {20, 40, 80}, |
| 136: {20, 40, 80}, |
| 140: {20, 40, 80}, |
| 144: {20, 40, 80}, |
| 149: {20, 40, 80}, |
| 153: {20, 40, 80}, |
| 157: {20, 40, 80}, |
| 161: {20, 40, 80}, |
| 165: {20}, |
| } |
| |
| ALL_CHANNELS = ALL_CHANNELS_2G | ALL_CHANNELS_5G |
| |
| |
| @unique |
| class WnmFeature(Enum): |
| """Wireless Network Management (AKA 802.11v) features hostapd supports.""" |
| |
| TIME_ADVERTISEMENT = auto() |
| WNM_SLEEP_MODE = auto() |
| BSS_TRANSITION_MANAGEMENT = auto() |
| PROXY_ARP = auto() |
| IPV6_NEIGHBOR_ADVERTISEMENT_MULTICAST_TO_UNICAST = auto() |