1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
|
import zigpy_znp.types as t
class BaseNvIds(t.enum16):
pass
class ZclPortNvIds(BaseNvIds):
# ZCL Port NV IDs (Application Layer NV Items)
SCENE_TABLE = 0x0001
PROXY_TABLE = 0x0002
SINK_TABLE = 0x0003
class NvSysIds(t.enum8):
NVDRVR = 0 # Refrain from use
ZSTACK = 1
TIMAC = 2
REMOTI = 3
BLE = 4
_6MESH = 5
TIOP = 6
APP = 7
class ExNvIds(BaseNvIds):
# OSAL NV Item IDs
LEGACY = 0x0000
ADDRMGR = 0x0001
BINDING_TABLE = 0x0002
DEVICE_LIST = 0x0003
TCLK_TABLE = 0x0004
TCLK_IC_TABLE = 0x0005
APS_KEY_DATA_TABLE = 0x0006
NWK_SEC_MATERIAL_TABLE = 0x0007
class OsalNvIds(BaseNvIds):
# Introduced by zigbeer/zigbee-shepherd and now used by Zigbee2MQTT
HAS_CONFIGURED_ZSTACK1 = 0x0F00
HAS_CONFIGURED_ZSTACK3 = 0x0060
# Although the docs say "IDs reserved for applications range from 0x0401 to 0x0FFF",
# no OSAL NVID beyond 0x03FF is writable with the MT interface when using Z-Stack 3.
ZIGPY_ZNP_MIGRATION_ID = 0x005F
# OSAL NV item IDs
EXTADDR = 0x0001
BOOTCOUNTER = 0x0002
STARTUP_OPTION = 0x0003
START_DELAY = 0x0004
# NWK Layer NV item IDs
NIB = 0x0021
DEVICE_LIST = 0x0022
ADDRMGR = 0x0023
POLL_RATE_OLD16 = 0x0024 # Deprecated when poll rate changed from 16 to 32 bits
QUEUED_POLL_RATE = 0x0025
RESPONSE_POLL_RATE = 0x0026
REJOIN_POLL_RATE = 0x0027
DATA_RETRIES = 0x0028
POLL_FAILURE_RETRIES = 0x0029
STACK_PROFILE = 0x002A
INDIRECT_MSG_TIMEOUT = 0x002B
ROUTE_EXPIRY_TIME = 0x002C
EXTENDED_PAN_ID = 0x002D
BCAST_RETRIES = 0x002E
PASSIVE_ACK_TIMEOUT = 0x002F
BCAST_DELIVERY_TIME = 0x0030
NWK_MODE = 0x0031 # Deprecated, as this will always be Mesh
CONCENTRATOR_ENABLE = 0x0032
CONCENTRATOR_DISCOVERY = 0x0033
CONCENTRATOR_RADIUS = 0x0034
POLL_RATE = 0x0035
CONCENTRATOR_RC = 0x0036
NWK_MGR_MODE = 0x0037
SRC_RTG_EXPIRY_TIME = 0x0038
ROUTE_DISCOVERY_TIME = 0x0039
NWK_ACTIVE_KEY_INFO = 0x003A
NWK_ALTERN_KEY_INFO = 0x003B
ROUTER_OFF_ASSOC_CLEANUP = 0x003C
NWK_LEAVE_REQ_ALLOWED = 0x003D
NWK_CHILD_AGE_ENABLE = 0x003E
DEVICE_LIST_KA_TIMEOUT = 0x003F
# APS Layer NV item IDs
BINDING_TABLE = 0x0041
GROUP_TABLE = 0x0042
APS_FRAME_RETRIES = 0x0043
APS_ACK_WAIT_DURATION = 0x0044
APS_ACK_WAIT_MULTIPLIER = 0x0045
BINDING_TIME = 0x0046
APS_USE_EXT_PANID = 0x0047
APS_USE_INSECURE_JOIN = 0x0048
COMMISSIONED_NWK_ADDR = 0x0049
APS_NONMEMBER_RADIUS = 0x004B # Multicast non_member radius
APS_LINK_KEY_TABLE = 0x004C
APS_DUPREJ_TIMEOUT_INC = 0x004D
APS_DUPREJ_TIMEOUT_COUNT = 0x004E
APS_DUPREJ_TABLE_SIZE = 0x004F
# System statistics and metrics NV ID
DIAGNOSTIC_STATS = 0x0050
# Additional NWK Layer NV item IDs
NWK_PARENT_INFO = 0x0051
NWK_ENDDEV_TIMEOUT_DEF = 0x0052
END_DEV_TIMEOUT_VALUE = 0x0053
END_DEV_CONFIGURATION = 0x0054
BDBNODEISONANETWORK = 0x0055 # bdbNodeIsOnANetwork attribute
BDBREPORTINGCONFIG = 0x0056
# Security NV Item IDs
SECURITY_LEVEL = 0x0061
PRECFGKEY = 0x0062
PRECFGKEYS_ENABLE = 0x0063
# Deprecated Item as there is only one security mode supported now Z3.0
SECURITY_MODE = 0x0064
SECURE_PERMIT_JOIN = 0x0065
APS_LINK_KEY_TYPE = 0x0066
APS_ALLOW_R19_SECURITY = 0x0067
DISTRIBUTED_KEY = 0x0068 # Default distributed nwk key Id. Nv ID not in use
IMPLICIT_CERTIFICATE = 0x0069
DEVICE_PRIVATE_KEY = 0x006A
CA_PUBLIC_KEY = 0x006B
KE_MAX_DEVICES = 0x006C
USE_DEFAULT_TCLK = 0x006D
# deprecated: TRUSTCENTER_ADDR (16-bit) 0x006E
RNG_COUNTER = 0x006F
RANDOM_SEED = 0x0070
TRUSTCENTER_ADDR = 0x0071
CERT_283 = 0x0072
PRIVATE_KEY_283 = 0x0073
PUBLIC_KEY_283 = 0x0074
LEGACY_NWK_SEC_MATERIAL_TABLE_START = 0x0075
LEGACY_NWK_SEC_MATERIAL_TABLE_END = 0x0080
# ZDO NV Item IDs
USERDESC = 0x0081
NWKKEY = 0x0082
PANID = 0x0083
CHANLIST = 0x0084
LEAVE_CTRL = 0x0085
SCAN_DURATION = 0x0086
LOGICAL_TYPE = 0x0087
NWKMGR_MIN_TX = 0x0088
NWKMGR_ADDR = 0x0089
ZDO_DIRECT_CB = 0x008F
# ZCL NV item IDs
SCENE_TABLE = 0x0091
MIN_FREE_NWK_ADDR = 0x0092
MAX_FREE_NWK_ADDR = 0x0093
MIN_FREE_GRP_ID = 0x0094
MAX_FREE_GRP_ID = 0x0095
MIN_GRP_IDS = 0x0096
MAX_GRP_IDS = 0x0097
OTA_BLOCK_REQ_DELAY = 0x0098
# Non-standard NV item IDs
SAPI_ENDPOINT = 0x00A1
# NV Items Reserved for Commissioning Cluster Startup Attribute Set (SAS):
# 0x00B1 - 0x00BF: Parameters related to APS and NWK layers
SAS_SHORT_ADDR = 0x00B1
SAS_EXT_PANID = 0x00B2
SAS_PANID = 0x00B3
SAS_CHANNEL_MASK = 0x00B4
SAS_PROTOCOL_VER = 0x00B5
SAS_STACK_PROFILE = 0x00B6
SAS_STARTUP_CTRL = 0x00B7
# 0x00C1 - 0x00CF: Parameters related to Security
SAS_TC_ADDR = 0x00C1
SAS_TC_MASTER_KEY = 0x00C2
SAS_NWK_KEY = 0x00C3
SAS_USE_INSEC_JOIN = 0x00C4
SAS_PRECFG_LINK_KEY = 0x00C5
SAS_NWK_KEY_SEQ_NUM = 0x00C6
SAS_NWK_KEY_TYPE = 0x00C7
SAS_NWK_MGR_ADDR = 0x00C8
# 0x00D1 - 0x00DF: Current key parameters
SAS_CURR_TC_MASTER_KEY = 0x00D1
SAS_CURR_NWK_KEY = 0x00D2
SAS_CURR_PRECFG_LINK_KEY = 0x00D3
USE_NVOCMP = 0x00FF
# NV Items Reserved for Trust Center Link Key Table entries
# 0x0101 - 0x01FF
TCLK_SEED = 0x0101 # Seed
TCLK_JOIN_DEV = (
0x0102 # Nv Id where Joining device store their APS key. Key is in plain text.
)
TCLK_DEFAULT = 0x0103 # Not accually a Nv Item but Id used by SecMgr
LEGACY_TCLK_IC_TABLE_START = 0x0104 # Deprecated. Refer to EX_TCLK_IC_TABLE
LEGACY_TCLK_IC_TABLE_END = 0x0110 # IC keys, referred with shift byte
LEGACY_TCLK_TABLE_START = 0x0111 # Deprecated. Refer to EX_TCLK_TABLE
LEGACY_TCLK_TABLE_END = 0x01FF
# NV Items Reserved for APS Link Key Table entries
# 0x0201 - 0x02FF
LEGACY_APS_LINK_KEY_DATA_START = 0x0201 # Deprecated. Refer to EX_APS_KEY_TABLE
LEGACY_APS_LINK_KEY_DATA_END = 0x02FF
# NV items used to duplicate system elements
DUPLICATE_BINDING_TABLE = 0x0300
DUPLICATE_DEVICE_LIST = 0x0301
DUPLICATE_DEVICE_LIST_KA_TIMEOUT = 0x0302
# NV Items Reserved for Proxy Table entries
# 0x0310 - 0x031F
LEGACY_PROXY_TABLE_START = 0x0310 # Deprecated. Refer to EX_GP_PROXY_TABLE
LEGACY_PROXY_TABLE_END = 0x031F
# NV Items Reserved for Sink Table entries
# 0x0320 - 0x032F
LEGACY_SINK_TABLE_START = 0x0320 # Deprecated. Refer to EX_GP_SINK_TABLE
LEGACY_SINK_TABLE_END = 0x032F
APP_ITEM_1 = 0x0F01
APP_ITEM_2 = 0x0F02
APP_ITEM_3 = 0x0F03
APP_ITEM_4 = 0x0F04
APP_ITEM_5 = 0x0F05
APP_ITEM_6 = 0x0F06
RF_TEST_PARMS = 0x0F07
UNKNOWN = 0x0F08
INVALID_INDEX = 0xFFFF
NWK_NVID_TABLES = {
OsalNvIds.LEGACY_NWK_SEC_MATERIAL_TABLE_START: (
OsalNvIds.LEGACY_NWK_SEC_MATERIAL_TABLE_END
),
OsalNvIds.LEGACY_TCLK_IC_TABLE_START: OsalNvIds.LEGACY_TCLK_IC_TABLE_END,
OsalNvIds.LEGACY_TCLK_TABLE_START: OsalNvIds.LEGACY_TCLK_TABLE_END,
OsalNvIds.LEGACY_APS_LINK_KEY_DATA_START: OsalNvIds.LEGACY_APS_LINK_KEY_DATA_END,
OsalNvIds.LEGACY_PROXY_TABLE_START: OsalNvIds.LEGACY_PROXY_TABLE_END,
OsalNvIds.LEGACY_SINK_TABLE_START: OsalNvIds.LEGACY_SINK_TABLE_END,
}
NWK_NVID_TABLE_KEYS = set(NWK_NVID_TABLES.keys()) | set(NWK_NVID_TABLES.values())
def is_secure_nvid(nvid: OsalNvIds) -> bool:
"""
Returns whether or not an nvid may be prevented from being read from NVRAM.
"""
if nvid in (
OsalNvIds.IMPLICIT_CERTIFICATE,
OsalNvIds.CA_PUBLIC_KEY,
OsalNvIds.DEVICE_PRIVATE_KEY,
OsalNvIds.NWK_ACTIVE_KEY_INFO,
OsalNvIds.NWK_ALTERN_KEY_INFO,
OsalNvIds.PRECFGKEY,
OsalNvIds.TCLK_SEED,
):
return True
if OsalNvIds.LEGACY_TCLK_TABLE_START <= nvid <= OsalNvIds.LEGACY_TCLK_TABLE_END:
return True
if (
OsalNvIds.LEGACY_APS_LINK_KEY_DATA_START
<= nvid
<= OsalNvIds.LEGACY_APS_LINK_KEY_DATA_END
):
return True
return False
|