Skip to main content

sig_net/
constants.rs

1pub const COAP_VERSION: u8 = 1;
2pub const COAP_TYPE_CON: u8 = 0;
3pub const COAP_TYPE_NON: u8 = 1;
4pub const COAP_TYPE_ACK: u8 = 2;
5pub const COAP_TYPE_RST: u8 = 3;
6pub const COAP_CODE_EMPTY: u8 = 0x00;
7pub const COAP_CODE_GET: u8 = 0x01;
8pub const COAP_CODE_POST: u8 = 0x02;
9pub const COAP_CODE_PUT: u8 = 0x03;
10pub const COAP_CODE_DELETE: u8 = 0x04;
11pub const COAP_OPTION_URI_PATH: u16 = 11;
12pub const COAP_OPTION_INLINE_MAX: u8 = 12;
13pub const COAP_OPTION_EXT8_NIBBLE: u8 = 13;
14pub const COAP_OPTION_EXT16_NIBBLE: u8 = 14;
15pub const COAP_OPTION_EXT8_BASE: u16 = 13;
16pub const COAP_OPTION_EXT16_BASE: u16 = 269;
17pub const COAP_PAYLOAD_MARKER: u8 = 0xFF;
18
19pub const SIGNET_OPTION_SECURITY_MODE: u16 = 2076;
20pub const SIGNET_OPTION_SENDER_ID: u16 = 2108;
21pub const SIGNET_OPTION_MFG_CODE: u16 = 2140;
22pub const SIGNET_OPTION_SESSION_ID: u16 = 2172;
23pub const SIGNET_OPTION_SEQ_NUM: u16 = 2204;
24pub const SIGNET_OPTION_HMAC: u16 = 2236;
25pub const SECURITY_MODE_HMAC_SHA256: u8 = 0x00;
26pub const SECURITY_MODE_OPEN_MODE: u8 = 0x01;
27pub const SECURITY_MODE_UNPROVISIONED: u8 = 0xFF;
28
29pub const TID_POLL: u16 = 0x0001;
30pub const TID_POLL_REPLY: u16 = 0x0002;
31/// TID_POLL value length: 3×TUID(6) + soem_code(4) + endpoint(2) + query(1) = 25
32pub const TID_POLL_VALUE_LEN: u16 = 25;
33/// TID_POLL_REPLY value length: TUID(6) + soem_code(4) + change_count(2) = 12
34pub const TID_POLL_REPLY_VALUE_LEN: u16 = 12;
35pub const TID_LEVEL: u16 = 0x0101;
36pub const TID_PRIORITY: u16 = 0x0102;
37pub const TID_PREVIEW: u16 = 0x0103;
38pub const TID_SYNC: u16 = 0x0201;
39pub const TID_TIMECODE: u16 = 0x0202;
40pub const TID_UNIVERSE: u16 = 0x0203;
41pub const TID_RDM_COMMAND: u16 = 0x0301;
42pub const TID_RDM_RESPONSE: u16 = 0x0302;
43pub const TID_RDM_TOD_CONTROL: u16 = 0x0303;
44pub const TID_RDM_TOD_DATA: u16 = 0x0304;
45pub const TID_RDM_TOD_BACKGROUND: u16 = 0x0305;
46pub const TID_RDM_FLOW_CONTROL: u16 = 0x0306;
47pub const TID_RT_OFFBOARD: u16 = 0x0401;
48pub const TID_NW_MAC_ADDRESS: u16 = 0x0501;
49pub const TID_NW_IPV4_MODE: u16 = 0x0502;
50pub const TID_NW_IPV4_ADDRESS: u16 = 0x0503;
51pub const TID_NW_IPV4_NETMASK: u16 = 0x0504;
52pub const TID_NW_IPV4_GATEWAY: u16 = 0x0505;
53pub const TID_NW_IPV4_CURRENT: u16 = 0x0506;
54pub const TID_NW_IPV6_MODE: u16 = 0x0581;
55pub const TID_NW_IPV6_ADDRESS: u16 = 0x0582;
56pub const TID_NW_IPV6_PREFIX: u16 = 0x0583;
57pub const TID_NW_IPV6_GATEWAY: u16 = 0x0584;
58pub const TID_NW_IPV6_CURRENT: u16 = 0x0585;
59pub const TID_RT_SUPPORTED_TIDS: u16 = 0x0601;
60pub const TID_RT_ENDPOINT_COUNT: u16 = 0x0602;
61pub const TID_RT_PROTOCOL_VERSION: u16 = 0x0603;
62pub const TID_RT_FIRMWARE_VERSION: u16 = 0x0604;
63pub const TID_RT_DEVICE_LABEL: u16 = 0x0605;
64pub const TID_RT_MULT_OVERRIDE: u16 = 0x0606;
65pub const TID_RT_IDENTIFY: u16 = 0x0607;
66pub const TID_RT_STATUS: u16 = 0x0608;
67pub const TID_RT_ROLE_CAPABILITY: u16 = 0x0609;
68pub const TID_RT_REBOOT: u16 = 0x060A;
69pub const TID_RT_MODEL_NAME: u16 = 0x060B;
70pub const TID_RT_SCOPE: u16 = 0x060C;
71pub const TID_RT_OTW_CAPABILITY: u16 = 0x060D;
72pub const TID_EP_UNIVERSE: u16 = 0x0901;
73pub const TID_EP_LABEL: u16 = 0x0902;
74pub const TID_EP_MULT_OVERRIDE: u16 = 0x0903;
75pub const TID_EP_CAPABILITY: u16 = 0x0904;
76pub const TID_EP_DIRECTION: u16 = 0x0905;
77pub const TID_EP_INPUT_PRIORITY: u16 = 0x0906;
78pub const TID_EP_STATUS: u16 = 0x0907;
79pub const TID_EP_FAILOVER: u16 = 0x0908;
80pub const TID_EP_DMX_TIMING: u16 = 0x0909;
81pub const TID_EP_REFRESH_CAPABILITY: u16 = 0x090A;
82pub const TID_DG_SECURITY_EVENT: u16 = 0xFF01;
83pub const TID_DG_MESSAGE: u16 = 0xFF02;
84pub const TID_DG_LEVEL_FOLDBACK: u16 = 0xFF03;
85
86pub const QUERY_HEARTBEAT: u8 = 0x00;
87pub const QUERY_CONFIG: u8 = 0x01;
88pub const QUERY_FULL: u8 = 0x02;
89pub const QUERY_EXTENDED: u8 = 0x03;
90
91pub const SIGNET_UDP_PORT: u16 = 5683;
92pub const MULTICAST_BASE_OCTET_0: u8 = 239;
93pub const MULTICAST_BASE_OCTET_1: u8 = 254;
94pub const MULTICAST_BASE_OCTET_2: u8 = 0;
95pub const MULTICAST_MIN_INDEX: u8 = 1;
96pub const MULTICAST_MAX_INDEX: u8 = 100;
97pub const MULTICAST_TTL: u8 = 32;
98
99pub const MAX_DMX_SLOTS: u16 = 512;
100pub const MIN_UNIVERSE: u16 = 1;
101pub const MAX_UNIVERSE: u16 = 63999;
102pub const MAX_UDP_PAYLOAD: u16 = 1400;
103pub const COAP_HEADER_SIZE: u16 = 4;
104pub const URI_STRING_MIN_BUFFER: u16 = 96;
105
106pub const MAX_ACTIVE_RATE_HZ: u32 = 44;
107pub const KEEPALIVE_RATE_HZ: u32 = 1;
108pub const STREAM_LOSS_TIMEOUT_MS: u32 = 3000;
109
110// Protocol timing constants (§16 Appendix B)
111pub const POLL_BACKOFF_MAX_MS: u32 = 1000;
112pub const POLL_TIME_SECS: u32 = 3;
113pub const NODE_LOST_TIMEOUT_POLLS: u32 = 3;
114pub const UNIVERSE_LOST_TIMEOUT_SECS: u32 = 3;
115pub const OFFBOARD_LOCKOUT_SECS: u32 = 300;
116pub const SYNC_LOST_TIMEOUT_MS: u32 = 250;
117pub const IP_ROLLBACK_TIMER_SECS: u32 = 60;
118pub const TIMECODE_LOST_TIMEOUT_SECS: u32 = 1;
119pub const MANAGER_POLL_JITTER_MS: u32 = 500;
120pub const BEACON_MIN_INTERVAL_SECS: u32 = 5;
121pub const BEACON_TIMEOUT_SECS: u32 = 30;
122pub const NODE_PROCESSING_MAX_MS: u32 = 500;
123pub const ENDPOINT_SPACING_DELAY_MS: u32 = 1;
124pub const UNIVERSE_ANNOUNCE_INTERVAL_SECS: u32 = 5;
125pub const STATUS_PUBLISH_RATE_SECS: u32 = 1;
126
127pub const K0_KEY_LENGTH: usize = 32;
128pub const DERIVED_KEY_LENGTH: usize = 32;
129pub const HMAC_SHA256_LENGTH: usize = 32;
130pub const TUID_LENGTH: usize = 6;
131pub const TUID_HEX_LENGTH: usize = 12;
132pub const SOEM_CODE_LENGTH: usize = 4;
133pub const SENDER_ID_LENGTH: usize = 8;
134pub const HKDF_INFO_INPUT_MAX: usize = 63;
135/// Maximum HMAC input size: URI(96) + options(19) + MAX_UDP_PAYLOAD(1400) = 1515
136pub const HMAC_INPUT_MAX: usize = 1600;
137
138pub const SIGNET_URI_PREFIX: &str = "sig-net";
139pub const SIGNET_URI_VERSION: &str = "v1";
140pub const SIGNET_URI_SCOPE_DEFAULT: &str = "local";
141pub const SIGNET_URI_LEVEL: &str = "level";
142pub const SIGNET_URI_PRIORITY: &str = "priority";
143pub const SIGNET_URI_SYNC: &str = "sync";
144pub const SIGNET_URI_NODE: &str = "node";
145pub const SIGNET_URI_POLL: &str = "poll";
146
147pub const MULTICAST_NODE_SEND_IP: &str = "239.254.255.253";
148pub const MULTICAST_MANAGER_POLL_IP: &str = "239.254.255.252";
149pub const MULTICAST_MANAGER_SEND_IP: &str = "239.254.255.251";
150pub const MULTICAST_TIME_IP: &str = "239.254.255.250";
151pub const MULTICAST_NODE_BEACON_IP: &str = "239.254.255.255";
152pub const MULTICAST_NODE_LOST_IP: &str = "239.254.255.254";
153pub const MULTICAST_PREVIEW_IP: &str = "239.254.255.249";
154
155pub const HKDF_INFO_SENDER: &[u8] = b"Sig-Net-Sender-v1";
156pub const HKDF_INFO_CITIZEN: &[u8] = b"Sig-Net-Citizen-v1";
157pub const HKDF_INFO_MANAGER_GLOBAL: &[u8] = b"Sig-Net-Manager-v1";
158pub const HKDF_INFO_MANAGER_LOCAL_PREFIX: &[u8] = b"Sig-Net-Manager-v1-";
159
160pub const PBKDF2_SALT: &[u8] = b"Sig-Net-K0-Salt-v1";
161pub const PBKDF2_ITERATIONS: u32 = 100_000;
162pub const PASSPHRASE_MIN_LENGTH: usize = 10;
163pub const PASSPHRASE_MAX_LENGTH: usize = 64;
164pub const PASSPHRASE_GENERATED_LENGTH: usize = 10;
165
166pub const TEST_K0: &str = "52fcc2e7749f40358ba00b1d557dc11861e89868e139f23014f6a0cfe59cf173";
167pub const TEST_PASSPHRASE: &str = "Ge2p$E$4*A";
168pub const TEST_TUID: &str = "534C00000001";
169
170pub const ROLE_CAP_NODE: u8 = 0x01;
171pub const ROLE_CAP_SENDER: u8 = 0x02;
172pub const ROLE_CAP_MANAGER: u8 = 0x04;
173pub const ROLE_VISUALISER: u8 = 0x08;
174
175pub const UNPROVISION_MAGIC_WORD: u32 = 0x57495045;
176pub const REBOOT_MAGIC_WORD: u32 = 0x424F4F54;
177
178pub const PASSPHRASE_SYMBOLS: &[u8] = b"!@#$%^&*()-_=+[]{}|;:',.<>?/";
179pub const PASSPHRASE_GEN_UPPERCASE: &[u8] = b"ABCDEFGHJKLMNPQRSTUVWXYZ";
180pub const PASSPHRASE_GEN_LOWERCASE: &[u8] = b"abcdefghjkmnpqrstuvwxyz";
181pub const PASSPHRASE_GEN_DIGITS: &[u8] = b"23456789";
182pub const PASSPHRASE_GEN_SYMBOLS: &[u8] = b"!@#$%^&*-_=+";
183
184// Deprecated aliases (backward compatibility)
185#[deprecated(since = "0.18.0", note = "renamed to TID_RT_OFFBOARD per spec §11.4.1")]
186pub use TID_RT_OFFBOARD as TID_RT_UNPROVISION;
187#[deprecated(since = "0.18.0", note = "renamed to TID_RT_MULT_OVERRIDE per spec §11.6.6")]
188pub use TID_RT_MULT_OVERRIDE as TID_RT_MULT;
189#[deprecated(since = "0.19.0", note = "renamed to TID_UNIVERSE per spec")]
190pub use TID_UNIVERSE as TID_PATCH;