epan/dissectors/pidl/samr/samr.cnf cnf_dissect_lsa_BinaryString => lsarpc_dissect_str...
[wireshark-sm.git] / epan / dissectors / packet-docsis-macmgmt.c
blob09ccf02ae889cff2a1831ceae6a11a9bbe966be2
1 /* packet-macmgmt.c
3 * Relevant DOCSIS specifications:
4 * - DOCSIS MAC and Upper Layer Protocols Interface:
5 * - CM-SP-MULPIv4.0: https://www.cablelabs.com/specifications/CM-SP-MULPIv4.0
6 * - CM-SP-MULPIv3.1: https://www.cablelabs.com/specifications/CM-SP-MULPIv3.1
7 * - CM-SP-MULPIv3.0: https://www.cablelabs.com/specifications/CM-SP-MULPIv3.0
8 * - CM-SP-RFIv2.0 : https://www.cablelabs.com/specifications/radio-frequency-interface-specification-2
9 * - CM-SP-RFIv1.1 : https://www.cablelabs.com/specifications/radio-frequency-interface-specification
10 * - SP-RFI : https://www.cablelabs.com/specifications/radio-frequency-interface-specification-3
12 * - DOCSIS Security (BPKM):
13 * - CM-SP-SECv4.0: https://www.cablelabs.com/specifications/CM-SP-SECv4.0
14 * - CM-SP-SECv3.1: https://www.cablelabs.com/specifications/CM-SP-SECv3.1
15 * - CM-SP-SECv3.0: https://www.cablelabs.com/specifications/CM-SP-SECv3.0
16 * - CM-SP-BPI+ : https://www.cablelabs.com/specifications/baseline-privacy-plus-interface-specification
18 * Routines for DOCSIS MAC Management Header dissection
19 * Routines for Upstream Channel Change dissection
20 * Routines for Ranging Message dissection
21 * Routines for Registration Message dissection
22 * Routines for Baseline Privacy Key Management Message dissection
23 * Routines for Dynamic Service Addition Message dissection
24 * Routines for Dynamic Service Change Request dissection
25 * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
27 * Routines for Type 2 UCD Message dissection
28 * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
29 * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
31 * Routines for Sync Message dissection
32 * Routines for REG-REQ-MP dissection
33 * Copyright 2007, Bruno Verstuyft <bruno.verstuyft@excentis.com>
35 * Routines for DOCSIS 3.1 OFDM Channel Descriptor dissection.
36 * Routines for DOCSIS 3.1 Downstream Profile Descriptor dissection.
37 * Routines for Type 51 UCD - DOCSIS 3.1 only - Message dissection
38 * Copyright 2016, Bruno Verstuyft <bruno.verstuyft@excentis.com>
40 * Routines for DCC Message dissection
41 * Routines for DCD Message dissection
42 * Copyright 2004, Darryl Hymel <darryl.hymel[AT]arrisi.com>
44 * Routines for Type 29 UCD - DOCSIS 2.0 only - Message dissection
45 * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
46 * Copyright 2003, Brian Wheeler <brian.wheeler[AT]arrisi.com>
48 * Routines for Initial Ranging Request Message dissection
49 * Copyright 2003, Brian Wheeler <brian.wheeler[AT]arrisi.com>
51 * Routines for Baseline Privacy Key Management Attributes dissection
52 * Copyright 2017, Adrian Simionov <daniel.simionov@gmail.com>
53 * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
55 * Routines for MDD Message dissection
56 * Copyright 2014, Adrian Simionov <adrian.simionov@arrisi.com>
57 * Copyright 2007, Bruno Verstuyft <bruno.verstuyft@excentis.com>
59 * Routines for DOCSIS 3.0 Bonded Initial Ranging Request Message dissection.
60 * Copyright 2009, Geoffrey Kimball <gekimbal[AT]cisco.com>
62 * Routines for Type 35 UCD - DOCSIS 3.0 only - Message dissection
63 * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
65 * Routines for DOCSIS 3.0 Dynamic Bonding Change Message dissection.
66 * Routines for DOCSIS 3.0 DOCSIS Path Verify Message dissection.
67 * Routines for DOCSIS 3.0 CM Control Message dissection.
68 * Copyright 2010, Guido Reismueller <g.reismueller[AT]avm.de>
70 * Routines for DOCSIS 4.0 TLVs dissection
71 * Copyright 2023, Andrii Vladyka <andrii.vladyka@harmonicinc.com>
73 * Wireshark - Network traffic analyzer
74 * By Gerald Combs <gerald@wireshark.org>
75 * Copyright 1998 Gerald Combs
77 * SPDX-License-Identifier: GPL-2.0-or-later
80 #include "config.h"
82 #include <epan/packet.h>
83 #include <epan/expert.h>
84 #include <wsutil/utf8_entities.h>
85 #include "packet-docsis-tlv.h"
86 #include <epan/addr_resolv.h>
87 #include <epan/asn1.h>
88 #include "packet-cms.h"
89 #include "packet-ocsp.h"
90 #include "packet-pkcs1.h"
91 #include "packet-x509af.h"
92 #include <epan/reassemble.h>
93 #include <epan/proto_data.h>
94 #include <epan/tfs.h>
95 #include <epan/unit_strings.h>
96 #include <wsutil/array.h>
98 void proto_register_docsis_mgmt(void);
99 void proto_reg_handoff_docsis_mgmt(void);
101 #define MGT_SYNC 1
102 #define MGT_UCD 2
103 #define MGT_MAP 3
104 #define MGT_RNG_REQ 4
105 #define MGT_RNG_RSP 5
106 #define MGT_REG_REQ 6
107 #define MGT_REG_RSP 7
108 #define MGT_UCC_REQ 8
109 #define MGT_UCC_RSP 9
110 #define MGT_TRI_TCD 10
111 #define MGT_TRI_TSI 11
112 #define MGT_BPKM_REQ 12
113 #define MGT_BPKM_RSP 13
114 #define MGT_REG_ACK 14
115 #define MGT_DSA_REQ 15
116 #define MGT_DSA_RSP 16
117 #define MGT_DSA_ACK 17
118 #define MGT_DSC_REQ 18
119 #define MGT_DSC_RSP 19
120 #define MGT_DSC_ACK 20
121 #define MGT_DSD_REQ 21
122 #define MGT_DSD_RSP 22
123 #define MGT_DCC_REQ 23
124 #define MGT_DCC_RSP 24
125 #define MGT_DCC_ACK 25
126 #define MGT_DCI_REQ 26
127 #define MGT_DCI_RSP 27
128 #define MGT_UP_DIS 28
129 #define MGT_TYPE29UCD 29
130 #define MGT_INIT_RNG_REQ 30
131 #define MGT_TEST_REQ 31
132 #define MGT_DS_CH_DESC 32
133 #define MGT_MDD 33
134 #define MGT_B_INIT_RNG_REQ 34
135 #define MGT_TYPE35UCD 35
136 #define MGT_DBC_REQ 36
137 #define MGT_DBC_RSP 37
138 #define MGT_DBC_ACK 38
139 #define MGT_DPV_REQ 39
140 #define MGT_DPV_RSP 40
141 #define MGT_CM_STATUS 41
142 #define MGT_CM_CTRL_REQ 42
143 #define MGT_CM_CTRL_RSP 43
144 #define MGT_REG_REQ_MP 44
145 #define MGT_REG_RSP_MP 45
146 #define MGT_EM_REQ 46
147 #define MGT_EM_RSP 47
148 #define MGT_CM_STATUS_ACK 48
149 #define MGT_OCD 49
150 #define MGT_DPD 50
151 #define MGT_TYPE51UCD 51
152 #define MGT_ODS_REQ 52
153 #define MGT_ODS_RSP 53
154 #define MGT_OPT_REQ 54
155 #define MGT_OPT_RSP 55
156 #define MGT_OPT_ACK 56
157 #define MGT_DPT_REQ 57
158 #define MGT_DPT_RSP 58
159 #define MGT_DPT_ACK 59
160 #define MGT_DPT_INFO 60
161 #define MGT_RBA_SW 61
162 #define MGT_RBA_HW 62
163 #define MGT_CWT_REQ 63
164 #define MGT_CWT_RSP 64
165 #define MGT_ECT_REQ 65
166 #define MGT_ECT_RSP 66
167 #define MGT_EXT_RNG_REQ 67
168 #define MGT_DPR 68
169 #define MGT_BPKM_REQ_V5 69
170 #define MGT_BPKM_RSP_V5 70
172 #define UCD_SYMBOL_RATE 1
173 #define UCD_FREQUENCY 2
174 #define UCD_PREAMBLE 3
175 #define UCD_BURST_DESCR 4
176 #define UCD_BURST_DESCR5 5
177 #define UCD_EXT_PREAMBLE 6
178 #define UCD_SCDMA_MODE_ENABLED 7
179 #define UCD_SCDMA_SPREADING_INTERVAL 8
180 #define UCD_SCDMA_CODES_PER_MINI_SLOT 9
181 #define UCD_SCDMA_ACTIVE_CODES 10
182 #define UCD_SCDMA_CODE_HOPPING_SEED 11
183 #define UCD_SCDMA_US_RATIO_NUM 12
184 #define UCD_SCDMA_US_RATIO_DENOM 13
185 #define UCD_SCDMA_TIMESTAMP_SNAPSHOT 14
186 #define UCD_MAINTAIN_POWER_SPECTRAL_DENSITY 15
187 #define UCD_RANGING_REQUIRED 16
188 #define UCD_MAX_SCHEDULED_CODES 17
189 #define UCD_RANGING_HOLD_OFF_PRIORITY_FIELD 18
190 #define UCD_RANGING_CHANNEL_CLASS_ID 19
191 #define UCD_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING 20
192 #define UCD_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES 21
193 #define UCD_HIGHER_UCD_FOR_SAME_UCID 22
194 #define UCD_BURST_DESCR23 23
195 #define UCD_CHANGE_IND_BITMASK 24
196 #define UCD_OFDMA_TIMESTAMP_SNAPSHOT 25
197 #define UCD_OFDMA_CYCLIC_PREFIX_SIZE 26
198 #define UCD_OFDMA_ROLLOFF_PERIOD_SIZE 27
199 #define UCD_SUBCARRIER_SPACING 28
200 #define UCD_CENTER_FREQ_SUBC_0 29
201 #define UCD_SUBC_EXCL_BAND 30
202 #define UCD_UNUSED_SUBC_SPEC 31
203 #define UCD_SYMB_IN_OFDMA_FRAME 32
204 #define UCD_RAND_SEED 33
205 #define EXTENDED_US_CHANNEL 34
207 #define UCD_MODULATION 1
208 #define UCD_DIFF_ENCODING 2
209 #define UCD_PREAMBLE_LEN 3
210 #define UCD_PREAMBLE_VAL_OFF 4
211 #define UCD_FEC 5
212 #define UCD_FEC_CODEWORD 6
213 #define UCD_SCRAMBLER_SEED 7
214 #define UCD_MAX_BURST 8
215 #define UCD_GUARD_TIME 9
216 #define UCD_LAST_CW_LEN 10
217 #define UCD_SCRAMBLER_ONOFF 11
218 #define UCD_RS_INT_DEPTH 12
219 #define UCD_RS_INT_BLOCK 13
220 #define UCD_PREAMBLE_TYPE 14
221 #define UCD_SCMDA_SCRAMBLER_ONOFF 15
222 #define UCD_SCDMA_CODES_PER_SUBFRAME 16
223 #define UCD_SCDMA_FRAMER_INT_STEP_SIZE 17
224 #define UCD_TCM_ENABLED 18
225 #define UCD_SUBC_INIT_RANG 19
226 #define UCD_SUBC_FINE_RANG 20
227 #define UCD_OFDMA_PROFILE 21
228 #define UCD_OFDMA_IR_POWER_CONTROL 22
230 #define IUC_REQUEST 1
231 #define IUC_REQ_DATA 2
232 #define IUC_INIT_MAINT 3
233 #define IUC_STATION_MAINT 4
234 #define IUC_SHORT_DATA_GRANT 5
235 #define IUC_LONG_DATA_GRANT 6
236 #define IUC_NULL_IE 7
237 #define IUC_DATA_ACK 8
238 #define IUC_ADV_PHY_SHORT_DATA_GRANT 9
239 #define IUC_ADV_PHY_LONG_DATA_GRANT 10
240 #define IUC_ADV_PHY_UGS 11
241 #define IUC_DATA_PROFILE_IUC12 12
242 #define IUC_DATA_PROFILE_IUC13 13
243 #define IUC_RESERVED14 14
244 #define IUC_EXPANSION 15
246 #define MAP_v1 1
247 #define MAP_v5 5
248 #define MAP_PROBE_IE_PW_MASK 0x00010000
249 #define MAP_PROBE_IE_ST_MASK 0x00004000
251 #define RNGRSP_TIMING 1
252 #define RNGRSP_PWR_LEVEL_ADJ 2
253 #define RNGRSP_OFFSET_FREQ_ADJ 3
254 #define RNGRSP_TRANSMIT_EQ_ADJ 4
255 #define RNGRSP_RANGING_STATUS 5
256 #define RNGRSP_DOWN_FREQ_OVER 6
257 #define RNGRSP_UP_CHID_OVER 7
258 #define RNGRSP_TRANSMIT_EQ_SET 9
259 #define RNGRSP_T4_TIMEOUT_MULTIPLIER 13
260 #define RNGRSP_DYNAMIC_RANGE_WINDOW_UPPER_EDGE 14
261 #define RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS 15
262 #define RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS 16
263 #define RNGRSP_COMMANDED_POWER 17
264 #define RNGRSP_EXT_US_COMMANDED_POWER 18
266 /* Commanded Power Sub-TLVs */
267 #define RNGRSP_COMMANDED_POWER_DYNAMIC_RANGE_WINDOW 1
268 #define RNGRSP_COMMANDED_POWER_UCID_AND_POWER_LEVEL_LIST 2
272 /* BPKM Attributes */
273 #define BPKM_RESERVED 0
274 #define BPKM_SERIAL_NUM 1
275 #define BPKM_MANUFACTURER_ID 2
276 #define BPKM_MAC_ADDR 3
277 #define BPKM_RSA_PUB_KEY 4
278 #define BPKM_CM_ID 5
279 #define BPKM_DISPLAY_STR 6
280 #define BPKM_AUTH_KEY 7
281 #define BPKM_TEK 8
282 #define BPKM_KEY_LIFETIME 9
283 #define BPKM_KEY_SEQ_NUM 10
284 #define BPKM_HMAC_DIGEST 11
285 #define BPKM_SAID 12
286 #define BPKM_TEK_PARAM 13
287 #define BPKM_OBSOLETED 14
288 #define BPKM_CBC_IV 15
289 #define BPKM_ERROR_CODE 16
290 #define BPKM_CA_CERT 17
291 #define BPKM_CM_CERT 18
292 #define BPKM_SEC_CAPABILITIES 19
293 #define BPKM_CRYPTO_SUITE 20
294 #define BPKM_CRYPTO_SUITE_LIST 21
295 #define BPKM_BPI_VERSION 22
296 #define BPKM_SA_DESCRIPTOR 23
297 #define BPKM_SA_TYPE 24
298 #define BPKM_SA_QUERY 25
299 #define BPKM_SA_QUERY_TYPE 26
300 #define BPKM_IP_ADDRESS 27
301 #define BPKM_DNLD_PARAMS 28
302 #define BPKM_CVC_ROOT_CA_CERT 51
303 #define BPKM_CVC_CA_CERT 52
304 #define BPKM_DEV_CA_CERT 53
305 #define BPKM_ROOT_CA_CERT 54
306 #define BPKM_CM_NONCE 61
307 #define BPKM_MSG_SIGNATURE 62
308 #define BPKM_KEY_EXCHANGE_SHARE 63
309 #define BPKM_ALLOWED_BPI_VERSIONS 64
310 #define BPKM_OCSP_RSP 65
311 #define BPKM_CMTS_DESIGNATION 66
312 #define BPKM_CM_STATUS_CODE 67
313 #define BPKM_DETECTED_ERRORS 68
314 #define BPKM_VENDOR_DEFINED 127
316 #define DCCREQ_UP_CHAN_ID 1
317 #define DCCREQ_DS_PARAMS 2
318 #define DCCREQ_INIT_TECH 3
319 #define DCCREQ_UCD_SUB 4
320 #define DCCREQ_SAID_SUB 6
321 #define DCCREQ_SF_SUB 7
322 #define DCCREQ_CMTS_MAC_ADDR 8
323 #define DCCREQ_KEY_SEQ_NUM 31
324 #define DCCREQ_HMAC_DIGEST 27
326 /* Define Downstrean Parameters subtypes
327 * These are subtype of DCCREQ_DS_PARAMS (2)
330 #define DCCREQ_DS_FREQ 1
331 #define DCCREQ_DS_MOD_TYPE 2
332 #define DCCREQ_DS_SYM_RATE 3
333 #define DCCREQ_DS_INTLV_DEPTH 4
334 #define DCCREQ_DS_CHAN_ID 5
335 #define DCCREQ_DS_SYNC_SUB 6
336 #define DCCREQ_DS_OFDM_BLOCK_FREQ 7
338 /* Define Service Flow Substitution subtypes
339 * These are subtypes of DCCREQ_SF_SUB (7)
341 #define DCCREQ_SF_SFID 1
342 #define DCCREQ_SF_SID 2
343 #define DCCREQ_SF_UNSOL_GRANT_TREF 5
345 #define DCCRSP_CM_JUMP_TIME 1
346 #define DCCRSP_KEY_SEQ_NUM 31
347 #define DCCRSP_HMAC_DIGEST 27
349 /* Define DCC-RSP CM Jump Time subtypes
350 * These are subtype of DCCRSP_CM_JUMP_TIME (1)
352 #define DCCRSP_CM_JUMP_TIME_LENGTH 1
353 #define DCCRSP_CM_JUMP_TIME_START 2
355 #define DCCACK_KEY_SEQ_NUM 31
356 #define DCCACK_HMAC_DIGEST 27
358 #define DCD_DOWN_CLASSIFIER 23
359 #define DCD_DSG_RULE 50
360 #define DCD_DSG_CONFIG 51
362 /* Define Downstrean Classifier subtypes
363 * These are subtype of DCD_DOWN_CLASSIFIER (23)
366 #define DCD_CFR_ID 2
367 #define DCD_CFR_RULE_PRI 5
368 #define DCD_CFR_IP_CLASSIFIER 9
370 /* Define IP Classifier sub-subtypes
371 * These are subtypes of DCD_CFR_IP_CLASSIFIER (23.9)
373 #define DCD_CFR_IP_SOURCE_ADDR 3
374 #define DCD_CFR_IP_SOURCE_MASK 4
375 #define DCD_CFR_IP_DEST_ADDR 5
376 #define DCD_CFR_IP_DEST_MASK 6
377 #define DCD_CFR_TCPUDP_SRCPORT_START 7
378 #define DCD_CFR_TCPUDP_SRCPORT_END 8
379 #define DCD_CFR_TCPUDP_DSTPORT_START 9
380 #define DCD_CFR_TCPUDP_DSTPORT_END 10
382 /* Define DSG Rule subtypes
383 * These are subtype of DCD_DSG_RULE (50)
386 #define DCD_RULE_ID 1
387 #define DCD_RULE_PRI 2
388 #define DCD_RULE_UCID_RNG 3
389 #define DCD_RULE_CLIENT_ID 4
390 #define DCD_RULE_TUNL_ADDR 5
391 #define DCD_RULE_CFR_ID 6
392 #define DCD_RULE_VENDOR_SPEC 43
393 /* Define DSG Rule Client ID sub-subtypes
394 * These are subtypes of DCD_RULE_CLIENT_ID (50.4)
396 #define DCD_CLID_BCAST_ID 1
397 #define DCD_CLID_KNOWN_MAC_ADDR 2
398 #define DCD_CLID_CA_SYS_ID 3
399 #define DCD_CLID_APP_ID 4
401 /* Define DSG Configuration subtypes
402 * These are subtype of DCD_DSG_CONFIG (51)
405 #define DCD_CFG_CHAN_LST 1
406 #define DCD_CFG_TDSG1 2
407 #define DCD_CFG_TDSG2 3
408 #define DCD_CFG_TDSG3 4
409 #define DCD_CFG_TDSG4 5
410 #define DCD_CFG_VENDOR_SPEC 43
412 /* EM TLVs
415 #define EM_HOLDOFF_TIMER 1
417 /* MDD TLVs */
418 #define DOWNSTREAM_ACTIVE_CHANNEL_LIST 1
419 #define MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP 2
420 #define DOWNSTREAM_AMBIGUITY_RESOLUTION_FREQUENCY_LIST 3
421 #define RECEIVE_CHANNEL_PROFILE_REPORTING_CONTROL 4
422 #define IP_INITIALIZATION_PARAMETERS 5
423 #define EARLY_AUTHENTICATION_AND_ENCRYPTION 6
424 #define UPSTREAM_ACTIVE_CHANNEL_LIST 7
425 #define UPSTREAM_AMBIGUITY_RESOLUTION_CHANNEL_LIST 8
426 #define UPSTREAM_FREQUENCY_RANGE 9
427 #define SYMBOL_CLOCK_LOCKING_INDICATOR 10
428 #define CM_STATUS_EVENT_CONTROL 11
429 #define UPSTREAM_TRANSMIT_POWER_REPORTING 12
430 #define DSG_DA_TO_DSID_ASSOCIATION_ENTRY 13
431 #define CM_STATUS_EVENT_ENABLE_NON_CHANNEL_SPECIFIC_EVENTS 15
432 #define EXTENDED_UPSTREAM_TRANSMIT_POWER_SUPPORT 16
433 #define CMTS_DOCSIS_VERSION 17
434 #define CM_PERIODIC_MAINTENANCE_TIMEOUT_INDICATOR 18
435 #define DLS_BROADCAST_AND_MULTICAST_DELIVERY_METHOD 19
436 #define CM_STATUS_EVENT_ENABLE_FOR_DOCSIS_3_1_EVENTS 20
437 #define DIPLEXER_BAND_EDGE 21
438 #define ADVANCED_BAND_PLAN 22
439 #define MDD_BPI_PLUS 23
442 /* Downstream Active Channel List */
443 #define DOWNSTREAM_ACTIVE_CHANNEL_LIST_CHANNEL_ID 1
444 #define DOWNSTREAM_ACTIVE_CHANNEL_LIST_FREQUENCY 2
445 #define DOWNSTREAM_ACTIVE_CHANNEL_LIST_MODULATION_ORDER_ANNEX 3
446 #define DOWNSTREAM_ACTIVE_CHANNEL_LIST_PRIMARY_CAPABLE 4
447 #define DOWNSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK 5
448 #define DOWNSTREAM_ACTIVE_CHANNEL_LIST_MAP_UCD_TRANSPORT_INDICATOR 6
449 #define DOWNSTREAM_ACTIVE_CHANNEL_LIST_OFDM_PLC_PARAMETERS 7
450 #define DOWNSTREAM_ACTIVE_CHANNEL_LIST_FDX_SUB_BAND_ID 8
451 #define DOWNSTREAM_ACTIVE_CHANNEL_LIST_FDX_DS 9
453 /* MAC Domain Downstream Service Group */
454 #define MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_MD_DS_SG_IDENTIFIER 1
455 #define MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_CHANNEL_IDS 2
457 /* Modulation Orders */
458 #define QAM64 0
459 #define QAM256 1
461 /* Annexes */
462 #define J83_ANNEX_A 0
463 #define J83_ANNEX_B 1
464 #define J83_ANNEX_C 2
466 /* Primary Capable */
467 #define NOT_PRIMARY_CAPABLE 0
468 #define PRIMARY_CAPABLE 1
470 /* Can carry MAP and UCD */
471 #define CANNOT_CARRY_MAP_UCD 0
472 #define CAN_CARRY_MAP_UCD 1
474 /* Receive Channel Profile Reporting Control */
475 #define RCP_CENTER_FREQUENCY_SPACING 1
476 #define VERBOSE_RCP_REPORTING 2
477 #define FRAGMENTED_RCP_TRANSMISSION 3
479 /* Frequency spacing */
480 #define ASSUME_6MHZ_CENTER_FREQUENCY_SPACING 0
481 #define ASSUME_8MHZ_CENTER_FREQUENCY_SPACING 1
483 /* Verbose RCP reporting */
484 #define RCP_NO_VERBOSE_REPORTING 0
485 #define RCP_VERBOSE_REPORTING 1
487 /* Sub-TLVs for IP Initialization Parameters */
488 #define IP_PROVISIONING_MODE 1
489 #define PRE_REGISTRATION_DSID 2
491 /* IP Provisioning Modes */
492 #define IPv4_ONLY 0
493 #define IPv6_ONLY 1
494 #define IP_ALTERNATE 2
495 #define DUAL_STACK 3
497 /* Early authentication and encryption */
498 #define EAE_DISABLED 0
499 #define EAE_ENABLED 1
501 /* Upstream Active Channel List */
502 #define UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_ID 1
503 #define UPSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK 2
504 #define UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_PRIORITY 3
505 #define UPSTREAM_ACTIVE_CHANNEL_LIST_DSCHIDS_MAPS_UCDS 4
506 #define UPSTREAM_ACTIVE_CHANNEL_LIST_FDX_UPSTREAM_CHANNEL 5
507 #define UPSTREAM_ACTIVE_CHANNEL_LIST_FDX_SUBBAND_ID 6
509 /* Upstream Frequency Range */
510 #define STANDARD_UPSTREAM_FREQUENCY_RANGE 0
511 #define EXTENDED_UPSTREAM_FREQUENCY_RANGE 1
513 /* Symbol Clock Locking Indicator */
514 #define NOT_LOCKED_TO_MASTER_CLOCK 0
515 #define LOCKED_TO_MASTER_CLOCK 1
517 /* CM-STATUS Event Control */
518 #define EVENT_TYPE_CODE 1
519 #define MAXIMUM_EVENT_HOLDOFF_TIMER 2
520 #define MAXIMUM_NUMBER_OF_REPORTS_PER_EVENT 3
522 /* CM-STATUS Events */
523 #define SECONDARY_CHANNEL_MDD_TIMEOUT 1
524 #define QAM_FEC_LOCK_FAILURE 2
525 #define SEQUENCE_OUT_OF_RANGE 3
526 #define MDD_RECOVERY 4
527 #define QAM_FEC_LOCK_RECOVERY 5
528 #define T4_TIMEOUT 6
529 #define T3_RETRIES_EXCEEDED 7
530 #define SUCCESFUL_RANGING_AFTER_T3_RETRIES_EXCEEDED 8
531 #define CM_OPERATING_ON_BATTERY_BACKUP 9
532 #define CM_RETURNED_TO_AC_POWER 10
533 #define MAC_REMOVAL_EVENT 11
534 #define DS_OFDM_PROFILE_FAILURE 16
535 #define PRIMARY_DS_CHANGE 17
536 #define DPD_MISMATCH 18
537 #define DEPRECATED 19
538 #define NCP_PROFILE_FAILURE 20
539 #define PLC_FAILURE 21
540 #define NCP_PROFILE_RECOVERY 22
541 #define PLC_RECOVERY 23
542 #define OFDM_PROFILE_RECOVERY 24
543 #define OFDMA_FAILURE 25
544 #define MAP_STORAGE_OVERFLOW 26
545 #define MAP_STORAGE_ALMOST_FULL 27
547 /* Upstream Transmit Power Reporting */
548 #define CM_DOESNT_REPORT_TRANSMIT_POWER 0
549 #define CM_REPORTS_TRANSMIT_POWER 1
551 /* DSG DA to DSID association entry */
552 #define DSG_DA_TO_DSID_ASSOCIATION_DA 1
553 #define DSG_DA_TO_DSID_ASSOCIATION_DSID 2
555 /* CMTS DOCSIS VERSION */
556 #define CMTS_DOCSIS_VERSION_MAJOR_PRE_40 1
557 #define CMTS_DOCSIS_VERSION_MINOR_PRE_40 2
558 #define CMTS_DOCSIS_VERSION_MAJOR 3
559 #define CMTS_DOCSIS_VERSION_MINOR 4
560 #define CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE 5
561 #define CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDD 0x01
562 #define CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDX 0x02
564 /* Define Tukey raised cosine window */
565 #define TUKEY_0TS 0
566 #define TUKEY_64TS 1
567 #define TUKEY_128TS 2
568 #define TUKEY_192TS 3
569 #define TUKEY_256TS 4
571 /* Define Cyclic prefix */
572 #define CYCLIC_PREFIX_192_TS 0
573 #define CYCLIC_PREFIX_256_TS 1
574 #define CYCLIC_PREFIX_512_TS 2
575 #define CYCLIC_PREFIX_768_TS 3
576 #define CYCLIC_PREFIX_1024_TS 4
578 /* Define Sub carrier spacing */
579 #define SPACING_25KHZ 0
580 #define SPACING_50KHZ 1
582 #define SEC_CH_MDD_TIMEOUT 1
583 #define QAM_FEC_LOCK_FAILURE 2
584 #define SEQ_OUT_OF_RANGE 3
585 #define SEC_CH_MDD_RECOVERY 4
586 #define QAM_FEC_LOCK_RECOVERY 5
587 #define T4_TIMEOUT 6
588 #define T3_RETRIES_EXCEEDED 7
589 #define SUCCESS_RANGING_AFTER_T3_RETRIES_EXCEEDED 8
590 #define CM_ON_BATTERY 9
591 #define CM_ON_AC_POWER 10
592 #define MAC_REMOVAL_EVENT 11
593 #define DS_OFDM_PROFILE_FAILURE 16
594 #define PRIMARY_DOWNSTREAM_CHANGE 17
595 #define DPD_MISMATCH 18
596 #define NCP_PROFILE_FAILURE 20
597 #define PLC_FAILURE 21
598 #define NCP_PROFILE_RECOVERY 22
599 #define PLC_RECOVERY 23
600 #define OFDM_PROFILE_RECOVERY 24
601 #define OFDMA_PROFILE_FAILURE 25
602 #define MAP_STORAGE_OVERFLOW_INDICATOR 26
603 #define MAP_STORAGE_ALMOST_FULL_INDICATOR 27
605 #define STATUS_EVENT 1
607 #define EVENT_DESCR 2
608 #define EVENT_DS_CH_ID 4
609 #define EVENT_US_CH_ID 5
610 #define EVENT_DSID 6
611 #define EVENT_MAC_ADDRESS 7
612 #define EVENT_DS_OFDM_PROFILE_ID 8
613 #define EVENT_US_OFDMA_PROFILE_ID 9
615 #define CM_CTRL_MUTE 1
616 #define CM_CTRL_MUTE_TIMEOUT 2
617 #define CM_CTRL_REINIT 3
618 #define CM_CTRL_DISABLE_FWD 4
619 #define CM_CTRL_DS_EVENT 5
620 #define CM_CTRL_US_EVENT 6
621 #define CM_CTRL_EVENT 7
623 #define DS_EVENT_CH_ID 1
624 #define DS_EVENT_MASK 2
626 #define US_EVENT_CH_ID 1
627 #define US_EVENT_MASK 2
629 /* OCD */
630 #define DISCRETE_FOURIER_TRANSFORM_SIZE 0
631 #define CYCLIC_PREFIX 1
632 #define ROLL_OFF 2
633 #define OFDM_SPECTRUM_LOCATION 3
634 #define TIME_INTERLEAVING_DEPTH 4
635 #define SUBCARRIER_ASSIGNMENT_RANGE_LIST 5
636 #define PRIMARY_CAPABILITY_INDICATOR 6
637 #define FDX_INDICATOR 7
639 /* DPD */
640 #define SUBCARRIER_ASSIGNMENT_VECTOR 6
642 #define SUBCARRIER_ASSIGNMENT_RANGE_CONT 0
643 #define SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1 1
644 #define SUBCARRIER_ASSIGNMENT_LIST 2
646 #define OPT_REQ_REQ_STAT 1
647 #define OPT_REQ_RXMER_THRESH_PARAMS 2
648 #define OPT_REQ_RXMER_THRESH_PARAMS_MODULATION_ORDER 1
649 #define OPT_REQ_TRIGGER_DEFINITION 7
650 #define OPT_REQ_TRIGGER_DEFINITION_TRIGGER_TYPE 1
651 #define OPT_REQ_TRIGGER_DEFINITION_MEASUREMENT_DURATION 2
652 #define OPT_REQ_TRIGGER_DEFINITION_TRIGGERING_SID 3
653 #define OPT_REQ_TRIGGER_DEFINITION_US_CHANNEL_ID 4
654 #define OPT_REQ_TRIGGER_DEFINITION_OUDP_SOUND_AMBIG_OFFSET 5
655 #define OPT_REQ_TRIGGER_DEFINITION_RXMER_TO_REPORT 6
656 #define OPT_REQ_TRIGGER_DEFINITION_START_TIME 7
658 #define OPT_RSP_RXMER 1
659 #define OPT_RSP_DATA_CW 2
660 #define OPT_RSP_NCP_FIELDS 3
662 #define OPT_RSP_RXMER_SUBCARRIER 1
663 #define OPT_RSP_RXMER_SUBCARRIER_THRESHOLD 2
664 #define OPT_RSP_RXMER_SUBCARRIER_THRESHOLD_COUNT 3
665 #define OPT_RSP_RXMER_SNR_MARGIN 4
666 #define OPT_RSP_RXMER_AVG 5
667 #define OPT_RSP_RXMER_ECT_RBA_SUBBAND_DIRECTION 6
669 #define OPT_RSP_DATA_CW_COUNT 1
670 #define OPT_RSP_DATA_CW_CORRECTED 2
671 #define OPT_RSP_DATA_CW_UNCORRECTABLE 3
672 #define OPT_RSP_DATA_CW_THRESHOLD_COMPARISON 4
674 #define OPT_RSP_NCP_FIELDS_COUNT 1
675 #define OPT_RSP_NCP_FIELDS_FAILURE 2
676 #define OPT_RSP_NCP_FIELDS_THRESHOLD_COMPARISON 3
678 #define DIPLEXER_US_UPPER_BAND_EDGE 1
679 #define DIPLEXER_DS_LOWER_BAND_EDGE 2
680 #define DIPLEXER_DS_UPPER_BAND_EDGE 3
681 #define DIPLEXER_US_UPPER_BAND_EDGE_OVERRIDE 4
682 #define DIPLEXER_DS_LOWER_BAND_EDGE_OVERRIDE 5
683 #define DIPLEXER_DS_UPPER_BAND_EDGE_OVERRIDE 6
685 /* MDD Advanced Band Plan */
686 #define MDD_ABP_SUB_BAND_COUNT 2
687 #define MDD_ABP_SUB_BAND_WIDTH 3
689 /* MDD BPI+ */
690 #define MDD_BPI_PLUS_VERSION 1
691 #define MDD_BPI_PLUS_CFG 2
693 #define KEY_MGMT_VERSION 0
694 #define KEY_MGMT_MULTIPART 1
696 /* CWT-REQ and CWT-RSP */
697 #define CWT_PHASE_ROTATION 1
698 #define CWT_MAX_DURATION 2
699 #define CWT_US_ENCODINGS 3
700 #define CWT_US_ENCODINGS_CID 1
701 #define CWT_US_ENCODINGS_SC_INDEX 2
702 #define CWT_US_ENCODINGS_POWER_BOOST 3
704 /* ECT-REQ and ECT-RSP */
705 #define ECT_CONTROL 87
706 #define ECT_CONTROL_SUBBAND_DIRECTION 1
707 #define ECT_CONTROL_STATUS 2
708 #define ECT_CONTROL_METHOD 3
709 #define ECT_CONTROL_METHOD_FG 1
710 #define ECT_CONTROL_METHOD_FG_DURATION 1
711 #define ECT_CONTROL_METHOD_FG_PERIODICITY 2
712 #define ECT_CONTROL_METHOD_FG_EXPIRATION_TIME 3
713 #define ECT_CONTROL_METHOD_FG_DS_ZBL 4
714 #define ECT_CONTROL_METHOD_BG 2
715 #define ECT_CONTROL_METHOD_BG_DURATION 1
716 #define ECT_CONTROL_METHOD_BG_PERIODICITY 2
717 #define ECT_CONTROL_METHOD_BG_EXPIRATION_TIME 3
718 #define ECT_CONTROL_METHOD_BG_START_TIME 4
719 #define ECT_CONTROL_PARTIAL_SERVICE 4
720 #define ECT_CONTROL_PARTIAL_SERVICE_DCID 1
721 #define ECT_CONTROL_PARTIAL_SERVICE_UCID 2
722 #define ECT_CONTROL_DEFERRAL_TIME 5
723 #define ECT_CONTROL_RXMER_DURATION 6
725 /* BPKM CMTS Designation */
726 #define BPKMATTR_CMTS_DESIGNATION_CERTIFICATE_FINGERPRINT 0
727 #define BPKMATTR_CMTS_DESIGNATION_COMMON_NAME 1
728 #define BPKMATTR_CMTS_DESIGNATION_ORG_UNIT 2
729 #define BPKMATTR_CMTS_DESIGNATION_ORG_NAME 3
730 #define BPKMATTR_CMTS_DESIGNATION_SERIAL_NUMBER 4
731 #define BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_FINGERPRINT 5
732 #define BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_COMMON_NAME 6
733 #define BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_ORG_UNIT 7
734 #define BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_ORG_NAME 8
735 #define BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_SERIAL_NUMBER 9
737 static int proto_docsis_mgmt;
738 static int proto_docsis_sync;
739 static int proto_docsis_ucd;
740 static int proto_docsis_map_v1;
741 static int proto_docsis_map_v5;
742 static int proto_docsis_rngreq;
743 static int proto_docsis_rngrsp;
744 static int proto_docsis_regreq;
745 static int proto_docsis_regrsp;
746 static int proto_docsis_uccreq;
747 static int proto_docsis_uccrsp;
748 static int proto_docsis_bpkmreq;
749 static int proto_docsis_bpkmrsp;
750 static int proto_docsis_regack;
751 static int proto_docsis_dsareq;
752 static int proto_docsis_dsarsp;
753 static int proto_docsis_dsaack;
754 static int proto_docsis_dscreq;
755 static int proto_docsis_dscrsp;
756 static int proto_docsis_dscack;
757 static int proto_docsis_dsdreq;
758 static int proto_docsis_dsdrsp;
759 static int proto_docsis_dccreq;
760 static int proto_docsis_dccrsp;
761 static int proto_docsis_dccack;
762 static int proto_docsis_type29ucd;
763 static int proto_docsis_intrngreq;
764 static int proto_docsis_dcd;
765 static int proto_docsis_mdd;
766 static int proto_docsis_bintrngreq;
767 static int proto_docsis_type35ucd;
768 static int proto_docsis_dbcreq;
769 static int proto_docsis_dbcrsp;
770 static int proto_docsis_dbcack;
771 static int proto_docsis_dpvreq;
772 static int proto_docsis_dpvrsp;
773 static int proto_docsis_cmstatus;
774 static int proto_docsis_cmstatusack;
775 static int proto_docsis_cmctrlreq;
776 static int proto_docsis_cmctrlrsp;
777 static int proto_docsis_regreqmp;
778 static int proto_docsis_regrspmp;
779 static int proto_docsis_emreq;
780 static int proto_docsis_emrsp;
781 static int proto_docsis_ocd;
782 static int proto_docsis_dpd;
783 static int proto_docsis_type51ucd;
784 static int proto_docsis_optreq;
785 static int proto_docsis_optrsp;
786 static int proto_docsis_optack;
787 static int proto_docsis_rba;
788 static int proto_docsis_cwt_req;
789 static int proto_docsis_cwt_rsp;
790 static int proto_docsis_ect_req;
791 static int proto_docsis_ect_rsp;
792 static int proto_docsis_ext_rngreq;
793 static int proto_docsis_dpr;
795 static int hf_docsis_sync_cmts_timestamp;
797 static int hf_docsis_ucd_config_ch_cnt;
798 static int hf_docsis_ucd_mini_slot_size;
799 static int hf_docsis_ucd_type;
800 static int hf_docsis_ucd_length;
801 static int hf_docsis_ucd_burst_type;
802 static int hf_docsis_ucd_burst_length;
803 static int hf_docsis_ucd_symbol_rate;
804 static int hf_docsis_ucd_frequency;
805 static int hf_docsis_ucd_preamble_pat;
806 static int hf_docsis_ucd_ext_preamble_pat;
807 static int hf_docsis_ucd_scdma_mode_enabled;
808 static int hf_docsis_ucd_scdma_spreading_interval;
809 static int hf_docsis_ucd_scdma_codes_per_mini_slot;
810 static int hf_docsis_ucd_scdma_active_codes;
811 static int hf_docsis_ucd_scdma_code_hopping_seed;
812 static int hf_docsis_ucd_scdma_us_ratio_num;
813 static int hf_docsis_ucd_scdma_us_ratio_denom;
814 static int hf_docsis_ucd_scdma_timestamp_snapshot;
815 static int hf_docsis_ucd_maintain_power_spectral_density;
816 static int hf_docsis_ucd_ranging_required;
817 static int hf_docsis_ucd_max_scheduled_codes;
818 static int hf_docsis_ucd_rnghoff_cm;
819 static int hf_docsis_ucd_rnghoff_erouter;
820 static int hf_docsis_ucd_rnghoff_emta;
821 static int hf_docsis_ucd_rnghoff_estb;
822 static int hf_docsis_ucd_rnghoff_rsvd;
823 static int hf_docsis_ucd_rnghoff_id_ext;
824 static int hf_docsis_ucd_chan_class_id_cm;
825 static int hf_docsis_ucd_chan_class_id_erouter;
826 static int hf_docsis_ucd_chan_class_id_emta;
827 static int hf_docsis_ucd_chan_class_id_estb;
828 static int hf_docsis_ucd_chan_class_id_rsvd;
829 static int hf_docsis_ucd_chan_class_id_id_ext;
830 static int hf_docsis_ucd_scdma_scrambler_onoff;
831 static int hf_docsis_ucd_scdma_codes_per_subframe;
832 static int hf_docsis_ucd_scdma_framer_int_step_size;
833 static int hf_docsis_ucd_tcm_enabled;
834 static int hf_docsis_ucd_active_code_hopping;
835 static int hf_docsis_ucd_higher_ucd_for_same_ucid;
836 static int hf_docsis_ucd_higher_ucd_for_same_ucid_resv;
837 static int hf_docsis_ucd_scdma_selection_active_codes;
838 static int hf_docsis_ucd_iuc;
839 static int hf_docsis_ucd_change_ind_bitmask_subc_excl_band;
840 static int hf_docsis_ucd_change_ind_bitmask_unused_subc;
841 static int hf_docsis_ucd_change_ind_bitmask_other_subc;
842 static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc5;
843 static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc6;
844 static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc9;
845 static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc10;
846 static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc11;
847 static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc12;
848 static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc13;
849 static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc3_or_4;
850 static int hf_docsis_ucd_change_ind_bitmask_reserved;
851 static int hf_docsis_ucd_ofdma_timestamp_snapshot;
852 static int hf_docsis_ucd_ofdma_timestamp_snapshot_reserved;
853 static int hf_docsis_ucd_ofdma_timestamp_snapshot_d30timestamp;
854 static int hf_docsis_ucd_ofdma_timestamp_snapshot_4msbits_of_div20;
855 static int hf_docsis_ucd_ofdma_timestamp_snapshot_minislot_count;
856 static int hf_docsis_ucd_ofdma_cyclic_prefix_size;
857 static int hf_docsis_ucd_ofdma_rolloff_period_size;
858 static int hf_docsis_ucd_subc_spacing;
859 static int hf_docsis_ucd_cent_freq_subc0;
860 static int hf_docsis_ucd_subcarrier_range;
861 static int hf_docsis_ucd_symb_ofdma_frame;
862 static int hf_docsis_ucd_rand_seed;
863 static int hf_docsis_ucd_extended_us_channel;
865 static int hf_docsis_burst_mod_type;
866 static int hf_docsis_burst_diff_encoding;
867 static int hf_docsis_burst_preamble_len;
868 static int hf_docsis_burst_preamble_val_off;
869 static int hf_docsis_burst_fec;
870 static int hf_docsis_burst_fec_codeword;
871 static int hf_docsis_burst_scrambler_seed;
872 static int hf_docsis_burst_max_burst;
873 static int hf_docsis_burst_guard_time;
874 static int hf_docsis_burst_last_cw_len;
875 static int hf_docsis_burst_scrambler_onoff;
876 static int hf_docsis_rs_int_depth;
877 static int hf_docsis_rs_int_block;
878 static int hf_docsis_preamble_type;
879 static int hf_docsis_subc_init_rang;
880 static int hf_docsis_subc_fine_rang;
881 static int hf_docsis_ofdma_prof_mod_order;
882 static int hf_docsis_ofdma_prof_pilot_pattern;
883 static int hf_docsis_ofdma_prof_num_add_minislots;
884 static int hf_docsis_ofdma_ir_pow_ctrl_start_pow;
885 static int hf_docsis_ofdma_ir_pow_ctrl_step_size;
887 static int hf_docsis_map_ucd_count;
888 static int hf_docsis_map_numie;
889 static int hf_docsis_map_numie_v5;
890 static int hf_docsis_map_alloc_start;
891 static int hf_docsis_map_ack_time;
892 static int hf_docsis_map_rng_start;
893 static int hf_docsis_map_rng_end;
894 static int hf_docsis_map_data_start;
895 static int hf_docsis_map_data_end;
896 static int hf_docsis_map_ie;
897 static int hf_docsis_map_probe_ie;
899 static int hf_docsis_map_rsvd;
900 static int hf_docsis_map_rsvd_v5;
901 static int hf_docsis_map_cat;
903 static int hf_docsis_map_sid;
904 static int hf_docsis_map_iuc;
905 static int hf_docsis_map_offset;
906 static int hf_docsis_map_mer;
907 static int hf_docsis_map_pw;
908 static int hf_docsis_map_eq;
909 static int hf_docsis_map_st;
910 static int hf_docsis_map_probe_frame;
911 static int hf_docsis_map_symbol_in_frame;
912 static int hf_docsis_map_start_subc;
913 static int hf_docsis_map_subc_skip;
914 static int hf_docsis_map_ect;
917 static int hf_docsis_rngreq_sid_field_bit15;
918 static int hf_docsis_rngreq_sid_field_bit14;
919 static int hf_docsis_rngreq_sid_field_bit15_14;
920 static int hf_docsis_rngreq_sid;
921 static int hf_docsis_rngreq_pend_compl;
923 static int hf_docsis_rngrsp_type;
924 static int hf_docsis_rngrsp_length;
925 static int hf_docsis_rngrsp_sid;
926 static int hf_docsis_rngrsp_timing_adj;
927 static int hf_docsis_rngrsp_power_adj;
928 static int hf_docsis_rngrsp_freq_adj;
929 static int hf_docsis_rngrsp_xmit_eq_adj;
930 static int hf_docsis_rngrsp_ranging_status;
931 static int hf_docsis_rngrsp_down_freq_over;
932 static int hf_docsis_rngrsp_upstream_ch_over;
933 static int hf_docsis_rngrsp_xmit_eq_set;
934 static int hf_docsis_rngrsp_rngrsp_t4_timeout_multiplier;
935 static int hf_docsis_rngrsp_dynamic_range_window_upper_edge;
936 static int hf_docsis_rngrsp_tlv_unknown;
937 static int hf_docsis_rngrsp_trans_eq_data;
938 static int hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_main_tap_location;
939 static int hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_number_of_forward_taps_per_symbol;
940 static int hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_number_of_forward_taps_n;
941 static int hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_reserved;
942 static int hf_docsis_rngrsp_trans_eq_enc_lowest_subc;
943 static int hf_docsis_rngrsp_trans_eq_enc_highest_subc;
944 static int hf_docsis_rngrsp_trans_eq_enc_coef_real;
945 static int hf_docsis_rngrsp_trans_eq_enc_coef_imag;
946 static int hf_docsis_rngrsp_commanded_power_data;
947 static int hf_docsis_rngrsp_commanded_power_dynamic_range_window;
948 static int hf_docsis_rngrsp_commanded_power_ucid;
949 static int hf_docsis_rngrsp_commanded_power_trans_pow_lvl;
952 static int hf_docsis_regreq_sid;
953 static int hf_docsis_regrsp_sid;
954 static int hf_docsis_regrsp_response;
956 static int hf_docsis_bpkm_code;
957 static int hf_docsis_bpkm_length;
958 static int hf_docsis_bpkm_ident;
959 static int hf_docsis_bpkmattr;
960 static int hf_docsis_bpkmattr_tlv;
961 static int hf_docsis_bpkmattr_tlv_type;
962 static int hf_docsis_bpkmattr_tlv_length;
963 static int hf_docsis_bpkmattr_serial_num;
964 static int hf_docsis_bpkmattr_manf_id;
965 static int hf_docsis_bpkmattr_mac_addr;
966 static int hf_docsis_bpkmattr_rsa_pub_key;
967 static int hf_docsis_bpkmattr_cm_id;
968 static int hf_docsis_bpkmattr_display_str;
969 static int hf_docsis_bpkmattr_auth_key;
970 static int hf_docsis_bpkmattr_tek;
971 static int hf_docsis_bpkmattr_key_life;
972 static int hf_docsis_bpkmattr_key_seq;
973 static int hf_docsis_bpkmattr_hmac_digest;
974 static int hf_docsis_bpkmattr_said;
975 static int hf_docsis_bpkmattr_tek_params;
976 static int hf_docsis_bpkmattr_cbc_iv;
977 static int hf_docsis_bpkmattr_error_code;
978 static int hf_docsis_bpkmattr_ca_cert;
979 static int hf_docsis_bpkmattr_cm_cert;
980 static int hf_docsis_bpkmattr_security_cap;
981 static int hf_docsis_bpkmattr_crypto_suite;
982 static int hf_docsis_bpkmattr_crypto_suite_encr;
983 static int hf_docsis_bpkmattr_crypto_suite_auth;
984 static int hf_docsis_bpkmattr_crypto_suite_list;
985 static int hf_docsis_bpkmattr_bpi_version;
986 static int hf_docsis_bpkmattr_sa_descr;
987 static int hf_docsis_bpkmattr_sa_type;
988 static int hf_docsis_bpkmattr_sa_query;
989 static int hf_docsis_bpkmattr_sa_query_type;
990 static int hf_docsis_bpkmattr_ip_address;
991 static int hf_docsis_bpkmattr_download_param;
992 static int hf_docsis_bpkmattr_cvc_root_ca_cert;
993 static int hf_docsis_bpkmattr_cvc_ca_cert;
994 static int hf_docsis_bpkmattr_dev_ca_cert;
995 static int hf_docsis_bpkmattr_root_ca_cert;
996 static int hf_docsis_bpkmattr_cm_nonce;
997 static int hf_docsis_bpkmattr_msg_signature;
998 static int hf_docsis_bpkmattr_key_exchange_share_field_id;
999 static int hf_docsis_bpkmattr_key_exchange_share_key_share;
1000 static int hf_docsis_bpkmattr_allowed_bpi_versions;
1001 static int hf_docsis_bpkmattr_allowed_bpi_version;
1002 static int hf_docsis_bpkmattr_ocsp_responses;
1003 static int hf_docsis_bpkmattr_ocsp_response;
1004 static int hf_docsis_bpkmattr_cmts_designation;
1005 static int hf_docsis_bpkmattr_cmts_designation_data_type;
1006 static int hf_docsis_bpkmattr_cmts_designation_certificate_fingerprint;
1007 static int hf_docsis_bpkmattr_cmts_designation_common_name;
1008 static int hf_docsis_bpkmattr_cmts_designation_org_unit;
1009 static int hf_docsis_bpkmattr_cmts_designation_org_name;
1010 static int hf_docsis_bpkmattr_cmts_designation_serial_number;
1011 static int hf_docsis_bpkmattr_cmts_designation_issuing_ca_fingerprint;
1012 static int hf_docsis_bpkmattr_cmts_designation_issuing_ca_common_name;
1013 static int hf_docsis_bpkmattr_cmts_designation_issuing_ca_org_unit;
1014 static int hf_docsis_bpkmattr_cmts_designation_issuing_ca_org_name;
1015 static int hf_docsis_bpkmattr_cmts_designation_issuing_ca_serial_number;
1016 static int hf_docsis_bpkmattr_cm_status_code;
1017 static int hf_docsis_bpkmattr_detected_errors;
1018 static int hf_docsis_bpkmattr_vendor_def;
1020 static int hf_docsis_regack_sid;
1021 static int hf_docsis_regack_response;
1023 static int hf_docsis_dsarsp_response;
1024 static int hf_docsis_dsaack_response;
1026 static int hf_docsis_dscrsp_response;
1027 static int hf_docsis_dscack_response;
1029 static int hf_docsis_dsdreq_rsvd;
1030 static int hf_docsis_dsdreq_sfid;
1032 static int hf_docsis_dsdrsp_confcode;
1033 static int hf_docsis_dsdrsp_rsvd;
1035 static int hf_docsis_dccreq_type;
1036 static int hf_docsis_dccreq_length;
1037 static int hf_docsis_dccreq_tran_id;
1038 static int hf_docsis_dccreq_up_chan_id;
1039 static int hf_docsis_dcc_ds_params_subtype;
1040 static int hf_docsis_dcc_ds_params_length;
1041 static int hf_docsis_dccreq_ds_freq;
1042 static int hf_docsis_dccreq_ds_mod_type;
1043 static int hf_docsis_dccreq_ds_sym_rate;
1044 static int hf_docsis_dccreq_ds_intlv_depth_i;
1045 static int hf_docsis_dccreq_ds_intlv_depth_j;
1046 static int hf_docsis_dccreq_ds_chan_id;
1047 static int hf_docsis_dccreq_ds_sync_sub;
1048 static int hf_docsis_dccreq_ds_ofdm_block_freq;
1049 static int hf_docsis_dccreq_init_tech;
1050 static int hf_docsis_dccreq_ucd_sub;
1051 static int hf_docsis_dccreq_said_sub_cur;
1052 static int hf_docsis_dccreq_said_sub_new;
1053 static int hf_docsis_dcc_sf_sub_subtype;
1054 static int hf_docsis_dcc_sf_sub_length;
1055 static int hf_docsis_dccreq_sf_sfid_cur;
1056 static int hf_docsis_dccreq_sf_sfid_new;
1057 static int hf_docsis_dccreq_sf_sid_cur;
1058 static int hf_docsis_dccreq_sf_sid_new;
1059 static int hf_docsis_dccreq_sf_unsol_grant_tref;
1060 static int hf_docsis_dccreq_cmts_mac_addr;
1061 static int hf_docsis_dccreq_key_seq_num;
1062 static int hf_docsis_dccreq_hmac_digest;
1063 static int hf_docsis_dccrsp_conf_code;
1064 static int hf_docsis_dccrsp_type;
1065 static int hf_docsis_dccrsp_length;
1066 static int hf_docsis_dcc_cm_jump_subtype;
1067 static int hf_docsis_dcc_cm_jump_length;
1068 static int hf_docsis_dccrsp_cm_jump_time_length;
1069 static int hf_docsis_dccrsp_cm_jump_time_start;
1070 static int hf_docsis_dccrsp_key_seq_num;
1071 static int hf_docsis_dccrsp_hmac_digest;
1072 static int hf_docsis_dccack_type;
1073 static int hf_docsis_dccack_length;
1074 static int hf_docsis_dccack_key_seq_num;
1075 static int hf_docsis_dccack_hmac_digest;
1077 static int hf_docsis_intrngreq_sid;
1079 static int hf_docsis_dcd_config_ch_cnt;
1080 static int hf_docsis_dcd_num_of_frag;
1081 static int hf_docsis_dcd_frag_sequence_num;
1082 static int hf_docsis_dcd_type;
1083 static int hf_docsis_dcd_length;
1084 static int hf_docsis_dcd_down_classifier_subtype;
1085 static int hf_docsis_dcd_down_classifier_length;
1086 static int hf_docsis_dcd_cfr_id;
1087 static int hf_docsis_dcd_cfr_rule_pri;
1088 static int hf_docsis_dcd_cfr_ip_subtype;
1089 static int hf_docsis_dcd_cfr_ip_length;
1090 static int hf_docsis_dcd_cfr_ip_source_addr;
1091 static int hf_docsis_dcd_cfr_ip_source_mask;
1092 static int hf_docsis_dcd_cfr_ip_dest_addr;
1093 static int hf_docsis_dcd_cfr_ip_dest_mask;
1094 static int hf_docsis_dcd_cfr_tcpudp_srcport_start;
1095 static int hf_docsis_dcd_cfr_tcpudp_srcport_end;
1096 static int hf_docsis_dcd_cfr_tcpudp_dstport_start;
1097 static int hf_docsis_dcd_cfr_tcpudp_dstport_end;
1098 static int hf_docsis_dcd_rule_id;
1099 static int hf_docsis_dcd_rule_pri;
1100 static int hf_docsis_dcd_rule_ucid_list;
1101 static int hf_docsis_dcd_clid_subtype;
1102 static int hf_docsis_dcd_clid_length;
1103 static int hf_docsis_dcd_clid_bcast_id;
1104 static int hf_docsis_dcd_clid_known_mac_addr;
1105 static int hf_docsis_dcd_clid_ca_sys_id;
1106 static int hf_docsis_dcd_clid_app_id;
1107 static int hf_docsis_dcd_dsg_rule_subtype;
1108 static int hf_docsis_dcd_dsg_rule_length;
1109 static int hf_docsis_dcd_rule_tunl_addr;
1110 static int hf_docsis_dcd_rule_cfr_id;
1111 static int hf_docsis_dcd_rule_vendor_spec;
1112 static int hf_docsis_dcd_cfg_subtype;
1113 static int hf_docsis_dcd_cfg_length;
1114 static int hf_docsis_dcd_cfg_chan;
1115 static int hf_docsis_dcd_cfg_tdsg1;
1116 static int hf_docsis_dcd_cfg_tdsg2;
1117 static int hf_docsis_dcd_cfg_tdsg3;
1118 static int hf_docsis_dcd_cfg_tdsg4;
1119 static int hf_docsis_dcd_cfg_vendor_spec;
1121 static int hf_docsis_mdd_ccc;
1122 static int hf_docsis_mdd_number_of_fragments;
1123 static int hf_docsis_mdd_fragment_sequence_number;
1124 static int hf_docsis_mdd_current_channel_dcid;
1125 static int hf_docsis_mdd_tlv;
1126 static int hf_docsis_mdd_tlv_type;
1127 static int hf_docsis_mdd_tlv_length;
1128 static int hf_docsis_mdd_ds_active_channel_list_subtype;
1129 static int hf_docsis_mdd_ds_active_channel_list_length;
1130 static int hf_docsis_mdd_downstream_active_channel_list_channel_id;
1131 static int hf_docsis_mdd_downstream_active_channel_list_frequency;
1132 static int hf_docsis_mdd_downstream_active_channel_list_annex;
1133 static int hf_docsis_mdd_downstream_active_channel_list_modulation_order;
1134 static int hf_docsis_mdd_downstream_active_channel_list_primary_capable;
1135 static int hf_docsis_mdd_downstream_active_channel_list_map_ucd_transport_indicator;
1136 static int hf_docsis_mdd_downstream_active_channel_list_fdx_sub_band_id;
1137 static int hf_docsis_mdd_downstream_active_channel_list_fdx_ds;
1138 static int hf_docsis_mdd_cm_status_event_enable_bitmask;
1139 static int hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_timeout;
1140 static int hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_failure;
1141 static int hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_recovery;
1142 static int hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_recovery;
1143 static int hf_docsis_mdd_ofdm_plc_parameters;
1144 static int hf_docsis_mdd_ofdm_plc_parameters_tukey_raised_cosine_window;
1145 static int hf_docsis_mdd_ofdm_plc_parameters_cyclic_prefix;
1146 static int hf_docsis_mdd_ofdm_plc_parameters_sub_carrier_spacing;
1147 static int hf_docsis_mdd_up_active_channel_list_subtype;
1148 static int hf_docsis_mdd_up_active_channel_list_length;
1149 static int hf_docsis_mdd_cm_status_event_enable_bitmask_t4_timeout;
1150 static int hf_docsis_mdd_cm_status_event_enable_bitmask_t3_retries_exceeded;
1151 static int hf_docsis_mdd_cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded;
1152 static int hf_docsis_mdd_ds_service_group_subtype;
1153 static int hf_docsis_mdd_ds_service_group_length;
1154 static int hf_docsis_mdd_mac_domain_downstream_service_group_md_ds_sg_identifier;
1155 static int hf_docsis_mdd_mac_domain_downstream_service_group_channel_id;
1156 static int hf_docsis_mdd_downstream_ambiguity_resolution_frequency;
1157 static int hf_docsis_mdd_channel_profile_reporting_control_subtype;
1158 static int hf_docsis_mdd_channel_profile_reporting_control_length;
1159 static int hf_docsis_mdd_rcp_center_frequency_spacing;
1160 static int hf_docsis_mdd_verbose_rcp_reporting;
1161 static int hf_docsis_mdd_fragmented_rcp_transmission;
1162 static int hf_docsis_mdd_ip_init_param_subtype;
1163 static int hf_docsis_mdd_ip_init_param_length;
1164 static int hf_docsis_mdd_ip_provisioning_mode;
1165 static int hf_docsis_mdd_pre_registration_dsid;
1166 static int hf_docsis_mdd_early_authentication_and_encryption;
1167 static int hf_docsis_mdd_upstream_active_channel_list_upstream_channel_id;
1168 static int hf_docsis_mdd_upstream_active_channel_list_upstream_channel_priority;
1169 static int hf_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds;
1170 static int hf_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds_dschid;
1171 static int hf_docsis_mdd_upstream_active_channel_list_fdx_upstream_channel;
1172 static int hf_docsis_mdd_upstream_active_channel_list_fdx_subband_id;
1173 static int hf_docsis_mdd_upstream_ambiguity_resolution_channel_list_channel_id;
1174 static int hf_docsis_mdd_upstream_frequency_range;
1175 static int hf_docsis_mdd_symbol_clock_locking_indicator;
1176 static int hf_docsis_mdd_cm_status_event_control_subtype;
1177 static int hf_docsis_mdd_cm_status_event_control_length;
1178 static int hf_docsis_mdd_event_type;
1179 static int hf_docsis_mdd_maximum_event_holdoff_timer;
1180 static int hf_docsis_mdd_maximum_number_of_reports_per_event;
1181 static int hf_docsis_mdd_upstream_transmit_power_reporting;
1182 static int hf_docsis_mdd_dsg_da_to_dsid_subtype;
1183 static int hf_docsis_mdd_dsg_da_to_dsid_length;
1184 static int hf_docsis_mdd_dsg_da_to_dsid_association_da;
1185 static int hf_docsis_mdd_dsg_da_to_dsid_association_dsid;
1186 static int hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events;
1187 static int hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_sequence_out_of_range;
1188 static int hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup;
1189 static int hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power;
1190 static int hf_docsis_mdd_extended_upstream_transmit_power_support;
1192 static int hf_docsis_mdd_cmts_major_docsis_version;
1193 static int hf_docsis_mdd_cmts_minor_docsis_version;
1194 static int hf_docsis_mdd_docsis_version_tlv;
1195 static int hf_docsis_mdd_docsis_version_tlv_type;
1196 static int hf_docsis_mdd_docsis_version_tlv_length;
1197 static int hf_docsis_mdd_docsis_version_major_pre_40;
1198 static int hf_docsis_mdd_docsis_version_minor_pre_40;
1199 static int hf_docsis_mdd_docsis_version_major;
1200 static int hf_docsis_mdd_docsis_version_minor;
1201 static int hf_docsis_mdd_docsis_version_ext_spectrum_mode;
1202 static int hf_docsis_mdd_docsis_version_ext_spectrum_mode_fdd;
1203 static int hf_docsis_mdd_docsis_version_ext_spectrum_mode_fdx;
1205 static int hf_docsis_mdd_cm_periodic_maintenance_timeout_indicator;
1206 static int hf_docsis_mdd_dls_broadcast_and_multicast_delivery_method;
1207 static int hf_docsis_mdd_cm_status_event_d31_ofdm_prof_fail;
1208 static int hf_docsis_mdd_cm_status_event_d31_prim_down_chan_change;
1209 static int hf_docsis_mdd_cm_status_event_d31_dpd_mismatch;
1210 static int hf_docsis_mdd_cm_status_event_d31_deprecated;
1211 static int hf_docsis_mdd_cm_status_event_d31_ncp_prof_fail;
1212 static int hf_docsis_mdd_cm_status_event_d31_loss_fec_plc;
1213 static int hf_docsis_mdd_cm_status_event_d31_ncp_prof_recover;
1214 static int hf_docsis_mdd_cm_status_event_d31_fec_recover_on_plc;
1215 static int hf_docsis_mdd_cm_status_event_d31_fec_recover_on_ofdm_prof;
1216 static int hf_docsis_mdd_cm_status_event_d31_ofdma_prof_fail;
1217 static int hf_docsis_mdd_cm_status_event_d31_map_stor_overflow_ind;
1218 static int hf_docsis_mdd_cm_status_event_d31_ofdm_map_stor_almost_full_ind;
1219 static int hf_docsis_mdd_cm_status_event_d31_reserved;
1221 static int hf_docsis_mdd_diplexer_band_edge;
1222 static int hf_docsis_mdd_diplexer_band_edge_length;
1223 static int hf_docsis_mdd_diplexer_us_upper_band_edge;
1224 static int hf_docsis_mdd_diplexer_ds_lower_band_edge;
1225 static int hf_docsis_mdd_diplexer_ds_upper_band_edge;
1226 static int hf_docsis_mdd_diplexer_us_upper_band_edge_override;
1227 static int hf_docsis_mdd_diplexer_ds_lower_band_edge_override;
1228 static int hf_docsis_mdd_diplexer_ds_upper_band_edge_override;
1230 static int hf_docsis_mdd_abp_tlv;
1231 static int hf_docsis_mdd_abp_tlv_type;
1232 static int hf_docsis_mdd_abp_tlv_length;
1233 static int hf_docsis_mdd_abp_sub_band_count;
1234 static int hf_docsis_mdd_abp_sub_band_width;
1236 static int hf_docsis_mdd_bpi_plus_tlv;
1237 static int hf_docsis_mdd_bpi_plus_tlv_type;
1238 static int hf_docsis_mdd_bpi_plus_tlv_length;
1239 static int hf_docsis_mdd_bpi_plus_version;
1240 static int hf_docsis_mdd_bpi_plus_cfg;
1241 static int hf_docsis_mdd_bpi_plus_cfg_eae;
1243 static int hf_docsis_bintrngreq_mddsgid;
1244 static int hf_docsis_bintrngreq_capflags;
1245 static int hf_docsis_bintrngreq_capflags_frag;
1246 static int hf_docsis_bintrngreq_capflags_encrypt;
1248 static int hf_docsis_dbcreq_number_of_fragments;
1249 static int hf_docsis_dbcreq_fragment_sequence_number;
1251 static int hf_docsis_dbcrsp_conf_code;
1253 static int hf_docsis_dpv_flags;
1254 static int hf_docsis_dpv_us_sf;
1255 static int hf_docsis_dpv_n;
1256 static int hf_docsis_dpv_start;
1257 static int hf_docsis_dpv_end;
1258 static int hf_docsis_dpv_ts_start;
1259 static int hf_docsis_dpv_ts_end;
1261 static int hf_docsis_cmstatus_e_t_mdd_t;
1262 static int hf_docsis_cmstatus_e_t_qfl_f;
1263 static int hf_docsis_cmstatus_e_t_s_o;
1264 static int hf_docsis_cmstatus_e_t_mdd_r;
1265 static int hf_docsis_cmstatus_e_t_qfl_r;
1266 static int hf_docsis_cmstatus_e_t_t4_t;
1267 static int hf_docsis_cmstatus_e_t_t3_e;
1268 static int hf_docsis_cmstatus_e_t_rng_s;
1269 static int hf_docsis_cmstatus_e_t_cm_b;
1270 static int hf_docsis_cmstatus_e_t_cm_a;
1271 static int hf_docsis_cmstatus_e_t_mac_removal;
1272 static int hf_docsis_cmstatus_e_t_ds_ofdm_profile_failure;
1273 static int hf_docsis_cmstatus_e_t_prim_ds_change;
1274 static int hf_docsis_cmstatus_e_t_dpd_mismatch;
1275 static int hf_docsis_cmstatus_e_t_ncp_profile_failure;
1276 static int hf_docsis_cmstatus_e_t_plc_failure;
1277 static int hf_docsis_cmstatus_e_t_ncp_profile_recovery;
1278 static int hf_docsis_cmstatus_e_t_plc_recovery;
1279 static int hf_docsis_cmstatus_e_t_ofdm_profile_recovery;
1280 static int hf_docsis_cmstatus_e_t_ofdma_profile_failure;
1281 static int hf_docsis_cmstatus_e_t_map_storage_overflow_indicator;
1282 static int hf_docsis_cmstatus_e_t_map_storage_almost_full_indicator;
1283 static int hf_docsis_cmstatus_e_t_unknown;
1284 static int hf_docsis_cmstatus_status_event_ds_ch_id;
1285 static int hf_docsis_cmstatus_status_event_us_ch_id;
1286 static int hf_docsis_cmstatus_status_event_dsid;
1287 static int hf_docsis_cmstatus_status_event_mac_address;
1288 static int hf_docsis_cmstatus_status_event_ds_ofdm_profile_id;
1289 static int hf_docsis_cmstatus_status_event_us_ofdma_profile_id;
1290 static int hf_docsis_cmstatus_status_event_descr;
1291 static int hf_docsis_cmstatus_tlv_data;
1292 static int hf_docsis_cmstatus_type;
1293 static int hf_docsis_cmstatus_length;
1294 static int hf_docsis_cmstatus_status_event_tlv_data;
1295 static int hf_docsis_cmstatus_status_event_type;
1296 static int hf_docsis_cmstatus_status_event_length;
1298 static int hf_docsis_cmctrl_tlv_mute;
1299 static int hf_docsis_cmctrl_tlv_mute_timeout;
1300 static int hf_docsis_cmctrl_tlv_reinit;
1301 static int hf_docsis_cmctrl_tlv_disable_fwd;
1302 static int hf_docsis_cmctrl_tlv_ds_event;
1303 static int hf_docsis_cmctrl_tlv_us_event;
1304 static int hf_docsis_cmctrl_tlv_event;
1305 static int hf_docsis_cmctrlreq_tlv_data;
1306 static int hf_docsis_cmctrlreq_type;
1307 static int hf_docsis_cmctrlreq_length;
1308 static int hf_docsis_cmctrlreq_us_type;
1309 static int hf_docsis_cmctrlreq_us_length;
1310 static int hf_docsis_cmctrl_us_event_ch_id;
1311 static int hf_docsis_cmctrl_us_event_mask;
1312 static int hf_docsis_cmctrl_ds_type;
1313 static int hf_docsis_cmctrl_ds_length;
1314 static int hf_docsis_cmctrl_ds_event_ch_id;
1315 static int hf_docsis_cmctrl_ds_event_mask;
1317 static int hf_docsis_regreqmp_sid;
1318 static int hf_docsis_regreqmp_number_of_fragments;
1319 static int hf_docsis_regreqmp_fragment_sequence_number;
1320 static int hf_docsis_regrspmp_sid;
1321 static int hf_docsis_regrspmp_response;
1322 static int hf_docsis_regrspmp_number_of_fragments;
1323 static int hf_docsis_regrspmp_fragment_sequence_number;
1325 static int hf_docsis_emrsp_tlv_data;
1326 static int hf_docsis_emrsp_tlv_type;
1327 static int hf_docsis_emrsp_tlv_length;
1328 static int hf_docsis_emrsp_tlv_holdoff_timer;
1329 static int hf_docsis_emreq_req_power_mode;
1330 static int hf_docsis_emreq_reserved;
1331 static int hf_docsis_emrsp_rsp_code;
1332 static int hf_docsis_emrsp_reserved;
1333 static int hf_docsis_emrsp_tlv_unknown;
1335 static int hf_docsis_ocd_tlv_unknown;
1336 static int hf_docsis_ocd_ccc;
1337 static int hf_docsis_ocd_tlv_four_trans_size;
1338 static int hf_docsis_ocd_tlv_cycl_pref;
1339 static int hf_docsis_ocd_tlv_roll_off;
1340 static int hf_docsis_ocd_tlv_ofdm_spec_loc;
1341 static int hf_docsis_ocd_tlv_time_int_depth;
1342 static int hf_docsis_ocd_tlv_prim_cap_ind;
1343 static int hf_docsis_ocd_tlv_fdx_ind;
1344 static int hf_docsis_ocd_tlv_subc_assign_type;
1345 static int hf_docsis_ocd_tlv_subc_assign_value;
1346 static int hf_docsis_ocd_subc_assign_subc_type;
1347 static int hf_docsis_ocd_subc_assign_range;
1348 static int hf_docsis_ocd_subc_assign_index;
1349 static int hf_docsis_ocd_tlv_data;
1350 static int hf_docsis_ocd_type;
1351 static int hf_docsis_ocd_length;
1353 static int hf_docsis_dpd_tlv_unknown;
1354 static int hf_docsis_dpd_prof_id;
1355 static int hf_docsis_dpd_ccc;
1356 static int hf_docsis_dpd_tlv_subc_assign_type;
1357 static int hf_docsis_dpd_tlv_subc_assign_value;
1358 static int hf_docsis_dpd_subc_assign_range;
1359 static int hf_docsis_dpd_tlv_subc_assign_reserved;
1360 static int hf_docsis_dpd_tlv_subc_assign_modulation;
1361 static int hf_docsis_dpd_subc_assign_index;
1362 static int hf_docsis_dpd_tlv_subc_assign_vector_oddness;
1363 static int hf_docsis_dpd_tlv_subc_assign_vector_reserved;
1364 static int hf_docsis_dpd_tlv_subc_assign_vector_subc_start;
1365 static int hf_docsis_dpd_tlv_subc_assign_vector_modulation_odd;
1366 static int hf_docsis_dpd_tlv_subc_assign_vector_modulation_even;
1367 static int hf_docsis_dpd_tlv_data;
1368 static int hf_docsis_dpd_type;
1369 static int hf_docsis_dpd_length;
1371 static int hf_docsis_optreq_tlv_unknown;
1372 static int hf_docsis_optreq_prof_id;
1373 static int hf_docsis_optreq_opcode;
1374 static int hf_docsis_optreq_reserved;
1375 static int hf_docsis_optreq_tlv_data;
1376 static int hf_docsis_optreq_type;
1377 static int hf_docsis_optreq_length;
1378 static int hf_docsis_optreq_reqstat_rxmer_stat_subc;
1379 static int hf_docsis_optreq_reqstat_rxmer_subc_threshold_comp;
1380 static int hf_docsis_optreq_reqstat_snr_marg_cand_prof;
1381 static int hf_docsis_optreq_reqstat_codew_stat_cand_prof;
1382 static int hf_docsis_optreq_reqstat_codew_thresh_comp_cand_prof;
1383 static int hf_docsis_optreq_reqstat_ncp_field_stat;
1384 static int hf_docsis_optreq_reqstat_ncp_crc_thresh_comp;
1385 static int hf_docsis_optreq_reqstat_reserved;
1386 static int hf_docsis_optreq_tlv_rxmer_thresh_data;
1387 static int hf_docsis_optreq_xmer_thresh_params_type;
1388 static int hf_docsis_optreq_xmer_thresh_params_length;
1389 static int hf_docsis_optreq_tlv_rxmer_thresh_data_mod_order;
1390 static int hf_docsis_optreq_tlv_trigger_definition_data;
1391 static int hf_docsis_optreq_tlv_trigger_definition_data_type;
1392 static int hf_docsis_optreq_tlv_trigger_definition_data_length;
1393 static int hf_docsis_optreq_tlv_trigger_definition_trigger_type;
1394 static int hf_docsis_optreq_tlv_trigger_definition_measure_duration;
1395 static int hf_docsis_optreq_tlv_trigger_definition_triggering_sid;
1396 static int hf_docsis_optreq_tlv_trigger_definition_us_chan_id;
1397 static int hf_docsis_optreq_tlv_trigger_definition_sound_ambig_offset;
1398 static int hf_docsis_optreq_tlv_trigger_definition_rx_mer_to_report;
1399 static int hf_docsis_optreq_tlv_trigger_definition_start_time;
1401 static int hf_docsis_optrsp_reserved;
1402 static int hf_docsis_optrsp_prof_id;
1403 static int hf_docsis_optrsp_status;
1404 static int hf_docsis_optrsp_tlv;
1405 static int hf_docsis_optrsp_tlv_type;
1406 static int hf_docsis_optrsp_tlv_length;
1407 static int hf_docsis_optrsp_rxmer_tlv;
1408 static int hf_docsis_optrsp_rxmer_tlv_type;
1409 static int hf_docsis_optrsp_rxmer_tlv_length;
1410 static int hf_docsis_optrsp_rxmer_subcarrier;
1411 static int hf_docsis_optrsp_rxmer_subcarrier_threshold;
1412 static int hf_docsis_optrsp_rxmer_subcarrier_threshold_count;
1413 static int hf_docsis_optrsp_rxmer_snr_margin;
1414 static int hf_docsis_optrsp_rxmer_avg;
1415 static int hf_docsis_optrsp_rxmer_ect_rba_subband_direction;
1416 static int hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb0;
1417 static int hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb1;
1418 static int hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb2;
1419 static int hf_docsis_optrsp_data_cw_tlv;
1420 static int hf_docsis_optrsp_data_cw_tlv_type;
1421 static int hf_docsis_optrsp_data_cw_tlv_length;
1422 static int hf_docsis_optrsp_data_cw_count;
1423 static int hf_docsis_optrsp_data_cw_corrected;
1424 static int hf_docsis_optrsp_data_cw_uncorrectable;
1425 static int hf_docsis_optrsp_data_cw_threshold_comparison;
1426 static int hf_docsis_optrsp_ncp_fields_tlv;
1427 static int hf_docsis_optrsp_ncp_fields_tlv_type;
1428 static int hf_docsis_optrsp_ncp_fields_tlv_length;
1429 static int hf_docsis_optrsp_ncp_fields_count;
1430 static int hf_docsis_optrsp_ncp_fields_failure;
1431 static int hf_docsis_optrsp_ncp_fields_threshold_comparison;
1433 static int hf_docsis_optack_prof_id;
1434 static int hf_docsis_optack_reserved;
1436 static int hf_docsis_rba_tg_id;
1437 static int hf_docsis_rba_ccc;
1438 static int hf_docsis_rba_dcid;
1439 static int hf_docsis_rba_control_byte_bitmask;
1440 static int hf_docsis_rba_resource_block_change_bit;
1441 static int hf_docsis_rba_expiration_time_valid_bit;
1442 static int hf_docsis_rba_control_byte_bitmask_rsvd;
1443 static int hf_docsis_rba_rba_time;
1444 static int hf_docsis_rba_rba_expiration_time;
1445 static int hf_docsis_rba_number_of_subbands;
1446 static int hf_docsis_rba_subband_direction;
1448 /* CWT-REQ and CWT-RSP */
1449 static int hf_docsis_cwt_trans_id;
1450 static int hf_docsis_cwt_sub_band_id;
1451 static int hf_docsis_cwt_op_code;
1452 static int hf_docsis_cwt_status;
1453 static int hf_docsis_cwt_tlv;
1454 static int hf_docsis_cwt_tlv_type;
1455 static int hf_docsis_cwt_tlv_length;
1456 static int hf_docsis_cwt_phase_rotation;
1457 static int hf_docsis_cwt_max_duration;
1458 static int hf_docsis_cwt_us_encodings_tlv;
1459 static int hf_docsis_cwt_us_encodings_tlv_type;
1460 static int hf_docsis_cwt_us_encodings_tlv_length;
1461 static int hf_docsis_cwt_us_encodings_cid;
1462 static int hf_docsis_cwt_us_encodings_sc_index;
1463 static int hf_docsis_cwt_us_encodings_power_boost;
1465 /* ECT-REQ and ECT-RSP */
1466 static int hf_docsis_ect_trans_id;
1467 static int hf_docsis_ect_rsp_code;
1468 static int hf_docsis_ect_tlv;
1469 static int hf_docsis_ect_tlv_type;
1470 static int hf_docsis_ect_tlv_length;
1471 static int hf_docsis_ect_control_tlv;
1472 static int hf_docsis_ect_control_tlv_type;
1473 static int hf_docsis_ect_control_tlv_length;
1474 static int hf_docsis_ect_control_subband_direction;
1475 static int hf_docsis_ect_control_status;
1476 static int hf_docsis_ect_control_method_tlv;
1477 static int hf_docsis_ect_control_method_tlv_type;
1478 static int hf_docsis_ect_control_method_tlv_length;
1479 static int hf_docsis_ect_control_method_fg_tlv;
1480 static int hf_docsis_ect_control_method_fg_tlv_type;
1481 static int hf_docsis_ect_control_method_fg_tlv_length;
1482 static int hf_docsis_ect_control_method_fg_duration;
1483 static int hf_docsis_ect_control_method_fg_periodicity;
1484 static int hf_docsis_ect_control_method_fg_expiration_time;
1485 static int hf_docsis_ect_control_method_fg_ds_zbl;
1486 static int hf_docsis_ect_control_method_bg_tlv;
1487 static int hf_docsis_ect_control_method_bg_tlv_type;
1488 static int hf_docsis_ect_control_method_bg_tlv_length;
1489 static int hf_docsis_ect_control_method_bg_duration;
1490 static int hf_docsis_ect_control_method_bg_periodicity;
1491 static int hf_docsis_ect_control_method_bg_expiration_time;
1492 static int hf_docsis_ect_control_method_bg_start_time;
1493 static int hf_docsis_ect_control_partial_service_tlv;
1494 static int hf_docsis_ect_control_partial_service_tlv_type;
1495 static int hf_docsis_ect_control_partial_service_tlv_length;
1496 static int hf_docsis_ect_control_partial_service_dcid;
1497 static int hf_docsis_ect_control_partial_service_ucid;
1498 static int hf_docsis_ect_control_deferral_time;
1499 static int hf_docsis_ect_control_rxmer_duration;
1501 /* DPR */
1502 static int hf_docsis_dpr_carrier;
1503 static int hf_docsis_dpr_dcid;
1504 static int hf_docsis_dpr_tg_id;
1505 static int hf_docsis_dpr_reserved;
1506 static int hf_docsis_dpr_start_time;
1507 static int hf_docsis_dpr_duration;
1509 static int hf_docsis_mgt_upstream_chid;
1510 static int hf_docsis_mgt_down_chid;
1511 static int hf_docsis_mgt_tranid;
1512 static int hf_docsis_mgt_dst_addr;
1513 static int hf_docsis_mgt_src_addr;
1514 static int hf_docsis_mgt_msg_len;
1515 static int hf_docsis_mgt_dsap;
1516 static int hf_docsis_mgt_ssap;
1517 static int hf_docsis_mgt_30_transmit_power;
1518 static int hf_docsis_mgt_31_transmit_power;
1519 static int hf_docsis_mgt_40_transmit_power;
1520 static int hf_docsis_mgt_control;
1521 static int hf_docsis_mgt_version;
1522 static int hf_docsis_mgt_type;
1523 static int hf_docsis_mgt_rsvd;
1524 static int hf_docsis_mgt_multipart;
1525 static int hf_docsis_mgt_multipart_number_of_fragments;
1526 static int hf_docsis_mgt_multipart_fragment_sequence_number;
1528 static int hf_docsis_tlv_fragments;
1529 static int hf_docsis_tlv_fragment;
1530 static int hf_docsis_tlv_fragment_overlap;
1531 static int hf_docsis_tlv_fragment_overlap_conflict;
1532 static int hf_docsis_tlv_fragment_multiple_tails;
1533 static int hf_docsis_tlv_fragment_too_long_fragment;
1534 static int hf_docsis_tlv_fragment_error;
1535 static int hf_docsis_tlv_fragment_count;
1536 static int hf_docsis_tlv_reassembled_in;
1537 static int hf_docsis_tlv_reassembled_length;
1538 static int hf_docsis_tlv_reassembled_data;
1540 static int hf_docsis_tlv_reassembled;
1542 static int ett_docsis_sync;
1544 static int ett_docsis_ucd;
1545 static int ett_docsis_tlv;
1546 static int ett_docsis_burst_tlv;
1548 static int ett_docsis_map;
1549 static int ett_docsis_map_ie;
1550 static int ett_docsis_map_probe_ie;
1553 static int ett_docsis_rngreq;
1555 static int ett_docsis_rngrsp;
1556 static int ett_docsis_rngrsptlv;
1557 static int ett_docsis_rngrsp_tlv_transmit_equalization_encodings;
1558 static int ett_docsis_rngrsp_tlv_transmit_equalization_encodings_coef;
1559 static int ett_docsis_rngrsp_tlv_commanded_power_subtlv;
1560 static int ett_docsis_rngrsp_tlv_commanded_power;
1563 static int ett_docsis_regreq;
1564 static int ett_docsis_regrsp;
1566 static int ett_docsis_emreq;
1567 static int ett_docsis_emrsp;
1568 static int ett_docsis_emrsp_tlv;
1569 static int ett_docsis_emrsp_tlvtlv;
1571 static int ett_docsis_uccreq;
1572 static int ett_docsis_uccrsp;
1574 static int ett_docsis_bpkmreq;
1575 static int ett_docsis_bpkmrsp;
1576 static int ett_docsis_bpkmattr;
1577 static int ett_docsis_bpkmattr_tlv;
1578 static int ett_docsis_bpkmattr_cmid;
1579 static int ett_docsis_bpkmattr_scap;
1580 static int ett_docsis_bpkmattr_crypto_suite;
1581 static int ett_docsis_bpkmattr_crypto_suite_list;
1582 static int ett_docsis_bpkmattr_allowed_bpi_versions;
1583 static int ett_docsis_bpkmattr_ocsp_responses;
1584 static int ett_docsis_bpkmattr_cmts_designation;
1585 static int ett_docsis_bpkmattr_tekp;
1586 static int ett_docsis_bpkmattr_sadsc;
1587 static int ett_docsis_bpkmattr_saqry;
1588 static int ett_docsis_bpkmattr_dnld;
1590 static int ett_docsis_regack;
1592 static int ett_docsis_dsareq;
1593 static int ett_docsis_dsarsp;
1594 static int ett_docsis_dsaack;
1596 static int ett_docsis_dscreq;
1597 static int ett_docsis_dscrsp;
1598 static int ett_docsis_dscack;
1600 static int ett_docsis_dsdreq;
1601 static int ett_docsis_dsdrsp;
1603 static int ett_docsis_dccreq;
1604 static int ett_docsis_dccreq_tlv;
1605 static int ett_docsis_dccreq_ds_params;
1606 static int ett_docsis_dccreq_sf_sub;
1607 static int ett_docsis_dccrsp;
1608 static int ett_docsis_dccrsp_cm_jump_time;
1609 static int ett_docsis_dccrsp_tlv;
1610 static int ett_docsis_dccack;
1611 static int ett_docsis_dccack_tlv;
1613 static int ett_docsis_intrngreq;
1615 static int ett_docsis_dcd;
1616 static int ett_docsis_dcd_cfr;
1617 static int ett_docsis_dcd_cfr_ip;
1618 static int ett_docsis_dcd_rule;
1619 static int ett_docsis_dcd_clid;
1620 static int ett_docsis_dcd_cfg;
1621 static int ett_docsis_dcd_tlv;
1623 static int ett_docsis_mdd;
1624 static int ett_tlv;
1625 static int ett_sub_tlv;
1626 static int ett_docsis_mdd_cm_status_ev_en_for_docsis31;
1627 static int ett_docsis_mdd_ds_active_channel_list;
1628 static int ett_docsis_mdd_ds_service_group;
1629 static int ett_docsis_mdd_channel_profile_reporting_control;
1630 static int ett_docsis_mdd_ip_init_param;
1631 static int ett_docsis_mdd_up_active_channel_list;
1632 static int ett_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds_dschids;
1633 static int ett_docsis_mdd_cm_status_event_control;
1634 static int ett_docsis_mdd_dsg_da_to_dsid;
1635 static int ett_docsis_mdd_docsis_version;
1636 static int ett_docsis_mdd_docsis_version_tlv;
1637 static int ett_docsis_mdd_diplexer_band_edge;
1638 static int ett_docsis_mdd_advanced_band_plan;
1639 static int ett_docsis_mdd_bpi_plus;
1641 static int ett_docsis_bintrngreq;
1643 static int ett_docsis_dbcreq;
1644 static int ett_docsis_dbcrsp;
1645 static int ett_docsis_dbcack;
1647 static int ett_docsis_dpvreq;
1648 static int ett_docsis_dpvrsp;
1650 static int ett_docsis_cmstatus;
1651 static int ett_docsis_cmstatus_tlv;
1652 static int ett_docsis_cmstatus_tlvtlv;
1653 static int ett_docsis_cmstatus_status_event_tlv;
1654 static int ett_docsis_cmstatus_status_event_tlvtlv;
1656 static int ett_docsis_cmstatusack;
1658 static int ett_docsis_cmctrlreq;
1659 static int ett_docsis_cmctrlreq_tlv;
1660 static int ett_docsis_cmctrlreq_tlvtlv;
1661 static int ett_docsis_cmctrl_tlv_us_event;
1662 static int ett_docsis_cmctrl_tlv_ds_event;
1663 static int ett_docsis_cmctrlrsp;
1665 static int ett_docsis_regreqmp;
1666 static int ett_docsis_regrspmp;
1668 static int ett_docsis_ocd;
1669 static int ett_docsis_ocd_tlv;
1670 static int ett_docsis_ocd_tlvtlv;
1672 static int ett_docsis_dpd;
1673 static int ett_docsis_dpd_tlv;
1674 static int ett_docsis_dpd_tlvtlv;
1675 static int ett_docsis_dpd_tlv_subcarrier_assignment;
1676 static int ett_docsis_dpd_tlv_subcarrier_assignment_vector;
1678 static int ett_docsis_optreq;
1679 static int ett_docsis_optreq_tlv;
1680 static int ett_docsis_optreq_tlvtlv;
1681 static int ett_docsis_optreq_tlv_rxmer_thresh_params;
1682 static int ett_docsis_optreq_tlv_rxmer_thresh_params_tlv;
1683 static int ett_docsis_optreq_tlv_trigger_definition_params;
1684 static int ett_docsis_optreq_tlv_trigger_definition_params_tlv;
1686 static int ett_docsis_optrsp;
1687 static int ett_docsis_optrsp_tlv;
1688 static int ett_docsis_optrsp_rxmer_tlv;
1689 static int ett_docsis_optrsp_rxmer_subcarrier_tlv;
1690 static int ett_docsis_optrsp_data_cw_tlv;
1691 static int ett_docsis_optrsp_ncp_fields_tlv;
1693 static int ett_docsis_optack;
1695 static int ett_docsis_rba;
1696 static int ett_docsis_rba_control_byte;
1697 static int ett_docsis_cwt_req;
1698 static int ett_docsis_cwt_rsp;
1699 static int ett_docsis_cwt_tlv;
1700 static int ett_docsis_cwt_subtlv;
1701 static int ett_docsis_ect_req;
1702 static int ett_docsis_ect_rsp;
1703 static int ett_docsis_ect_tlv;
1704 static int ett_docsis_ext_rngreq;
1705 static int ett_docsis_dpr;
1707 static int ett_docsis_mgmt;
1708 static int ett_mgmt_pay;
1710 static int ett_docsis_tlv_fragments;
1711 static int ett_docsis_tlv_fragment;
1712 static int ett_docsis_tlv_reassembled;
1714 static expert_field ei_docsis_mgmt_tlvlen_bad;
1715 static expert_field ei_docsis_mgmt_tlvtype_unknown;
1716 static expert_field ei_docsis_mgmt_version_unknown;
1717 static expert_field ei_docsis_mgmt_opt_req_trigger_def_measure_duration;
1718 static expert_field ei_docsis_cwt_out_of_range;
1719 static expert_field ei_docsis_ect_control_out_of_range;
1720 static expert_field ei_docsis_dpr_out_of_range;
1722 static dissector_table_t docsis_mgmt_dissector_table;
1723 static dissector_handle_t docsis_tlv_handle;
1724 static dissector_handle_t docsis_ucd_handle;
1725 static dissector_handle_t docsis_rba_handle;
1727 static const value_string channel_tlv_vals[] = {
1728 {UCD_SYMBOL_RATE, "Symbol Rate"},
1729 {UCD_FREQUENCY, "Frequency"},
1730 {UCD_PREAMBLE, "Preamble Pattern"},
1731 {UCD_BURST_DESCR, "Burst Descriptor Type 4"},
1732 {UCD_BURST_DESCR5, "Burst Descriptor Type 5"},
1733 {UCD_EXT_PREAMBLE, "Extended Preamble Pattern"},
1734 {UCD_SCDMA_MODE_ENABLED, "S-CDMA Mode Enabled"},
1735 {UCD_SCDMA_SPREADING_INTERVAL, "S-CDMA Spreading Intervals per Frame"},
1736 {UCD_SCDMA_CODES_PER_MINI_SLOT, "S-CDMA Codes per Mini-slot"},
1737 {UCD_SCDMA_ACTIVE_CODES, "S-CDMA Number of Active Codes"},
1738 {UCD_SCDMA_CODE_HOPPING_SEED, "S-CDMA Code Hopping Seed"},
1739 {UCD_SCDMA_US_RATIO_NUM, "S-CDMA US ratio numerator M"},
1740 {UCD_SCDMA_US_RATIO_DENOM, "S-CDMA US ratio denominator N"},
1741 {UCD_SCDMA_TIMESTAMP_SNAPSHOT, "S-CDMA Timestamp Snapshot"},
1742 {UCD_MAINTAIN_POWER_SPECTRAL_DENSITY, "Maintain Power Spectral Density"},
1743 {UCD_RANGING_REQUIRED, "Ranging Required"},
1744 {UCD_MAX_SCHEDULED_CODES, "S-CDMA Maximum Scheduled Codes"},
1745 {UCD_RANGING_HOLD_OFF_PRIORITY_FIELD, "Ranging Hold-Off Priority Field"},
1746 {UCD_RANGING_CHANNEL_CLASS_ID, "Ranging Channel Class ID"},
1747 {UCD_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING, "S-CDMA Selection Mode for Active Codes and Code Hopping"},
1748 {UCD_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES, "S-CDMA Selection String for Active Codes"},
1749 {UCD_HIGHER_UCD_FOR_SAME_UCID, "Higher UCD for the same UCID present bitmap"},
1750 {UCD_BURST_DESCR23, "Burst Descriptor Type 23"},
1751 {UCD_CHANGE_IND_BITMASK, "UCD Change Indicator Bitmask"},
1752 {UCD_OFDMA_TIMESTAMP_SNAPSHOT, "OFDMA Timestamp Snapshot"},
1753 {UCD_OFDMA_CYCLIC_PREFIX_SIZE, "OFDMA Cyclic Prefix Size"},
1754 {UCD_OFDMA_ROLLOFF_PERIOD_SIZE, "OFDMA Rolloff Period Size"},
1755 {UCD_SUBCARRIER_SPACING, "Subcarrier Spacing"},
1756 {UCD_CENTER_FREQ_SUBC_0, "Center Frequency of Subcarrier 0"},
1757 {UCD_SUBC_EXCL_BAND, "Subcarrier Exclusion Band"},
1758 {UCD_UNUSED_SUBC_SPEC, "Unused Subcarrier Specification"},
1759 {UCD_SYMB_IN_OFDMA_FRAME, "Symbols in OFDMA frame"},
1760 {UCD_RAND_SEED, "Randomization Seed"},
1761 {EXTENDED_US_CHANNEL, "Extended Upstream Channel"},
1762 {0, NULL}
1765 static const value_string burst_tlv_vals[] = {
1766 {UCD_MODULATION, "Modulation Type"},
1767 {UCD_DIFF_ENCODING, "Differential Encoding"},
1768 {UCD_PREAMBLE_LEN, "Preamble Length"},
1769 {UCD_PREAMBLE_VAL_OFF, "Preamble Value Offset"},
1770 {UCD_FEC, "FEC Error Correction (T)"},
1771 {UCD_FEC_CODEWORD, "FEC Codeword Information Bytes (k)"},
1772 {UCD_SCRAMBLER_SEED, "Scrambler Seed"},
1773 {UCD_MAX_BURST, "Maximum Burst Size"},
1774 {UCD_GUARD_TIME, "Guard Time Size"},
1775 {UCD_LAST_CW_LEN, "Last Codeword Length"},
1776 {UCD_SCRAMBLER_ONOFF, "Scrambler on/off"},
1777 {UCD_RS_INT_DEPTH, "R-S Interleaver Depth (Ir)"},
1778 {UCD_RS_INT_BLOCK, "R-S Interleaver Block Size (Br)"},
1779 {UCD_PREAMBLE_TYPE, "Preamble Type"},
1780 {UCD_SCMDA_SCRAMBLER_ONOFF, "S-CDMA Spreader on/off"},
1781 {UCD_SCDMA_CODES_PER_SUBFRAME, "S-CDMA Codes per Subframe"},
1782 {UCD_SCDMA_FRAMER_INT_STEP_SIZE, "S-CDMA Framer Interleaving Step Size"},
1783 {UCD_TCM_ENABLED, "TCM Encoding"},
1784 {UCD_SUBC_INIT_RANG, "Subcarriers (Nir) Initial Ranging"},
1785 {UCD_SUBC_FINE_RANG, "Subcarriers (Nfr) Fine Ranging"},
1786 {UCD_OFDMA_PROFILE, "OFDMA Profile"},
1787 {UCD_OFDMA_IR_POWER_CONTROL, "OFDMA Power Control (Ir)"},
1788 {0, NULL}
1791 static const value_string mgmt_type_vals[] = {
1792 {MGT_SYNC, "Timing Synchronisation"},
1793 {MGT_UCD, "Upstream Channel Descriptor"},
1794 {MGT_TYPE29UCD, "Upstream Channel Descriptor Type 29"},
1795 {MGT_TYPE35UCD, "Upstream Channel Descriptor Type 35"},
1796 {MGT_MAP, "Upstream Bandwidth Allocation"},
1797 {MGT_RNG_REQ, "Ranging Request"},
1798 {MGT_RNG_RSP, "Ranging Response"},
1799 {MGT_REG_REQ, "Registration Request"},
1800 {MGT_REG_RSP, "Registration Response"},
1801 {MGT_UCC_REQ, "Upstream Channel Change Request"},
1802 {MGT_UCC_RSP, "Upstream Channel Change Response"},
1803 {MGT_TRI_TCD, "Telephony Channel Descriptor"},
1804 {MGT_TRI_TSI, "Termination System Information"},
1805 {MGT_BPKM_REQ, "Privacy Key Management Request"},
1806 {MGT_BPKM_RSP, "Privacy Key Management Response"},
1807 {MGT_REG_ACK, "Registration Acknowledge"},
1808 {MGT_DSA_REQ, "Dynamic Service Addition Request"},
1809 {MGT_DSA_RSP, "Dynamic Service Addition Response"},
1810 {MGT_DSA_ACK, "Dynamic Service Addition Acknowledge"},
1811 {MGT_DSC_REQ, "Dynamic Service Change Request"},
1812 {MGT_DSC_RSP, "Dynamic Service Change Response"},
1813 {MGT_DSC_ACK, "Dynamic Service Change Acknowledge"},
1814 {MGT_DSD_REQ, "Dynamic Service Delete Request"},
1815 {MGT_DSD_RSP, "Dynamic Service Delete Response"},
1816 {MGT_DCC_REQ, "Dynamic Channel Change Request"},
1817 {MGT_DCC_RSP, "Dynamic Channel Change Response"},
1818 {MGT_DCC_ACK, "Dynamic Channel Change Acknowledge"},
1819 {MGT_DCI_REQ, "Device Class Identification Request"},
1820 {MGT_DCI_RSP, "Device Class Identification Response"},
1821 {MGT_UP_DIS, "Upstream Channel Disable"},
1822 {MGT_INIT_RNG_REQ, "Initial Ranging Request"},
1823 {MGT_TEST_REQ, "Test Request Message"},
1824 {MGT_DS_CH_DESC, "Downstream Channel Descriptor"},
1825 {MGT_MDD, "MAC Domain Descriptor"},
1826 {MGT_B_INIT_RNG_REQ, "Bonded Initial Ranging Request"},
1827 {MGT_DBC_REQ, "Dynamic Bonding Change Request"},
1828 {MGT_DBC_RSP, "Dynamic Bonding Change Response"},
1829 {MGT_DBC_ACK, "Dynamic Bonding Change Acknowledge"},
1830 {MGT_DPV_REQ, "DOCSIS Path Verify Request"},
1831 {MGT_DPV_RSP, "DOCSIS Path Verify Response"},
1832 {MGT_CM_STATUS, "CM Status Report"},
1833 {MGT_CM_CTRL_REQ, "CM Control Request"},
1834 {MGT_CM_CTRL_RSP, "CM Control Response"},
1835 {MGT_REG_REQ_MP, "Multipart Registration Request"},
1836 {MGT_REG_RSP_MP, "Multipart Registration Response"},
1837 {MGT_EM_REQ, "Energy Management Request"},
1838 {MGT_EM_RSP, "Energy Management Response"},
1839 {MGT_CM_STATUS_ACK, "Status Report Acknowledge"},
1840 {MGT_OCD, "OFDM Channel Descriptor"},
1841 {MGT_DPD, "Downstream Profile Descriptor"},
1842 {MGT_TYPE51UCD, "Upstream Channel Descriptor Type 51"},
1843 {MGT_ODS_REQ, "ODS-REQ"},
1844 {MGT_ODS_RSP, "ODS-RSP"},
1845 {MGT_OPT_REQ, "OFDM Downstream Profile Test Request"},
1846 {MGT_OPT_RSP, "OFDM Downstream Profile Test Response"},
1847 {MGT_OPT_ACK, "OFDM Downstream Profile Test Acknowledge"},
1848 {MGT_DPT_REQ, "DOCSIS Time Protocol Request"},
1849 {MGT_DPT_RSP, "DOCSIS Time Protocol Response"},
1850 {MGT_DPT_ACK, "DOCSIS Time Protocol Acknowledge"},
1851 {MGT_DPT_INFO, "DOCSIS Time Protocol Information"},
1852 {MGT_RBA_SW, "DOCSIS SW-Friendly Resource Block Assignment"},
1853 {MGT_RBA_HW, "DOCSIS HW-Friendly Resource Block Assignment"},
1854 {MGT_CWT_REQ, "IG Discovery CW Test Request"},
1855 {MGT_CWT_RSP, "IG Discovery CW Test Response"},
1856 {MGT_ECT_REQ, "CM Echo Cancellation Training Request"},
1857 {MGT_ECT_RSP, "CM Echo Cancellation Training Response"},
1858 {MGT_EXT_RNG_REQ, "Extended Upstream Range Request"},
1859 {MGT_DPR, "Downstream Protection"},
1860 {MGT_BPKM_REQ_V5, "Privacy Key Management Request v5"},
1861 {MGT_BPKM_RSP_V5, "Privacy Key Management Response v5"},
1862 {0, NULL}
1865 static const value_string on_off_vals[] = {
1866 {1, "On"},
1867 {2, "Off"},
1868 {0, NULL}
1871 static const value_string inhibit_allow_vals[] = {
1872 {0, "Inhibit Initial Ranging"},
1873 {1, "Ranging Allowed"},
1874 {0, NULL},
1877 static const value_string mod_vals[] = {
1878 {1, "QPSK"},
1879 {2, "16-QAM"},
1880 {3, "8-QAM"},
1881 {4, "32-QAM"},
1882 {5, "64-QAM"},
1883 {6, "128-QAM (SCDMA-only)"},
1884 {7, "Reserved for C-DOCSIS"},
1885 {0, NULL}
1888 static const value_string iuc_vals[] = {
1889 {IUC_REQUEST, "Request"},
1890 {IUC_REQ_DATA, "REQ/Data"},
1891 {IUC_INIT_MAINT, "Initial Maintenance"},
1892 {IUC_STATION_MAINT, "Station Maintenance"},
1893 {IUC_SHORT_DATA_GRANT, "Short Data Grant"},
1894 {IUC_LONG_DATA_GRANT, "Long Data Grant"},
1895 {IUC_NULL_IE, "NULL IE"},
1896 {IUC_DATA_ACK, "Data Ack"},
1897 {IUC_ADV_PHY_SHORT_DATA_GRANT, "Advanced Phy Short Data Grant"},
1898 {IUC_ADV_PHY_LONG_DATA_GRANT, "Advanced Phy Long Data Grant"},
1899 {IUC_ADV_PHY_UGS, "Advanced Phy UGS"},
1900 {IUC_DATA_PROFILE_IUC12, "Data Profile IUC12"},
1901 {IUC_DATA_PROFILE_IUC13, "Data Profile IUC13"},
1902 {IUC_RESERVED14, "Reserved"},
1903 {IUC_EXPANSION, "Expanded IUC"},
1904 {0, NULL}
1907 static const true_false_string pw_vals = {"transmit using alternate power setting specified by the Start Subc field.", "transmit using normal power settings"};
1909 static const value_string map_ect_vals[] = {
1910 {0, "Ranging probe"},
1911 {1, "ECT probe"},
1912 {2, "ECT RxMER probe"},
1913 {3, "First ECT probe"},
1914 {4, "First ECT RxMER probe"},
1915 {0, NULL}
1918 static const value_string last_cw_len_vals[] = {
1919 {1, "Fixed"},
1920 {2, "Shortened"},
1921 {0, NULL}
1924 static const value_string ranging_req_vals[] = {
1925 {0, "No ranging required"},
1926 {1, "Unicast initial ranging required"},
1927 {2, "Broadcast initial ranging required"},
1928 {0, NULL}
1931 static const value_string rng_stat_vals[] = {
1932 {1, "Continue"},
1933 {2, "Abort"},
1934 {3, "Success"},
1935 {0, NULL}
1938 static void
1939 two_compl_frac(
1940 char *buf,
1941 int16_t value)
1943 int16_t frac = value;
1946 snprintf(buf, ITEM_LABEL_LENGTH,
1947 "%f",
1948 frac/16384.0);
1951 static const value_string rngrsp_tlv_vals[] = {
1952 {RNGRSP_TIMING, "Timing Adjust (6.25us/64)"},
1953 {RNGRSP_PWR_LEVEL_ADJ, "Power Level Adjust (0.25dB units)"},
1954 {RNGRSP_OFFSET_FREQ_ADJ, "Offset Freq Adjust (Hz)"},
1955 {RNGRSP_TRANSMIT_EQ_ADJ, "Transmit Equalization Adjust"},
1956 {RNGRSP_RANGING_STATUS, "Ranging Status"},
1957 {RNGRSP_DOWN_FREQ_OVER, "Downstream Frequency Override (Hz)"},
1958 {RNGRSP_UP_CHID_OVER, "Upstream Channel ID Override"},
1959 {RNGRSP_TRANSMIT_EQ_SET, "Transmit Equalization Set"},
1960 {RNGRSP_T4_TIMEOUT_MULTIPLIER, "T4 Timeout Multiplier"},
1961 {RNGRSP_DYNAMIC_RANGE_WINDOW_UPPER_EDGE, "Dynamic Range Window Upper Edge"},
1962 {RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS, "Transmit Equalization Adjust for OFDMA Channels"},
1963 {RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS, "Transmit Equalization Set for OFDMA Channels"},
1964 {RNGRSP_COMMANDED_POWER, "Commanded Power"},
1965 {RNGRSP_EXT_US_COMMANDED_POWER, "Extended Upstream Commanded Power"},
1966 {0, NULL}
1970 static const value_string rngrsp_tlv_commanded_power_subtlv_vals[] = {
1971 {RNGRSP_COMMANDED_POWER_DYNAMIC_RANGE_WINDOW, "Dynamic Range Window"},
1972 {RNGRSP_COMMANDED_POWER_UCID_AND_POWER_LEVEL_LIST, "List of Upstream Channel IDs and Corresponding Transmit Power Levels"},
1973 {0, NULL}
1976 static const value_string code_field_vals[] = {
1977 { 4, "Auth Request"},
1978 { 5, "Auth Reply"},
1979 { 6, "Auth Reject"},
1980 { 7, "Key Request"},
1981 { 8, "Key Reply"},
1982 { 9, "Key Reject"},
1983 {10, "Auth Invalid"},
1984 {11, "TEK Invalid"},
1985 {12, "Auth Info"},
1986 {13, "Map Request"},
1987 {14, "Map Reply"},
1988 {15, "Map Reject"},
1989 {16, "Auth Status Info"},
1990 {0, NULL},
1993 static const value_string ds_mod_type_vals[] = {
1994 {0 , "64 QAM"},
1995 {1 , "256 QAM"},
1996 {0, NULL}
1999 static const value_string ds_sym_rate_vals[] = {
2000 {0 , "5.056941 Msym/sec"},
2001 {1 , "5.360537 Msym/sec"},
2002 {2 , "6.952 Msym/sec"},
2003 {0, NULL}
2005 static const value_string init_tech_vals[] = {
2006 {0 , "Reinitialize MAC"},
2007 {1 , "Broadcast Init RNG on new chanbefore normal op"},
2008 {2 , "Unicast RNG on new chan before normal op"},
2009 {3 , "Either Unicast or broadcast RNG on new chan before normal op"},
2010 {4 , "Use new chan directly without re-init or RNG"},
2011 {0, NULL}
2014 static const value_string dcc_tlv_vals[] = {
2015 {DCCREQ_UP_CHAN_ID, "Up Channel ID"},
2016 {DCCREQ_DS_PARAMS, "Downstream Params Encodings"},
2017 {DCCREQ_INIT_TECH, "Initialization Technique"},
2018 {DCCREQ_UCD_SUB, "UCD Substitution"},
2019 {DCCREQ_SAID_SUB, "SAID Sub"},
2020 {DCCREQ_SF_SUB, "Service Flow Substitution Encodings"},
2021 {DCCREQ_CMTS_MAC_ADDR, "CMTS MAC Address"},
2022 {DCCREQ_KEY_SEQ_NUM, "Auth Key Sequence Number"},
2023 {DCCREQ_HMAC_DIGEST, "HMAC-DigestNumber"},
2024 {0, NULL}
2027 static const value_string ds_param_subtlv_vals[] = {
2028 {DCCREQ_DS_FREQ, "Frequency"},
2029 {DCCREQ_DS_MOD_TYPE, "Modulation Type"},
2030 {DCCREQ_DS_SYM_RATE, "Symbol Rate"},
2031 {DCCREQ_DS_INTLV_DEPTH, "Interleaver Depth"},
2032 {DCCREQ_DS_CHAN_ID, "Downstream Channel ID"},
2033 {DCCREQ_DS_SYNC_SUB, "SYNC Substitution"},
2034 {DCCREQ_DS_OFDM_BLOCK_FREQ, "OFDM Block Frequency"},
2035 {0, NULL}
2038 static const value_string sf_sub_subtlv_vals[] = {
2039 {DCCREQ_SF_SFID, "SFID"},
2040 {DCCREQ_SF_SID, "SID"},
2041 {DCCREQ_SF_UNSOL_GRANT_TREF, "Unsolicited Grant Time Reference"},
2042 {0, NULL}
2045 static const value_string dccrsp_tlv_vals[] = {
2046 {DCCRSP_CM_JUMP_TIME, "CM Jump Time Encodings"},
2047 {DCCRSP_KEY_SEQ_NUM, "Auth Key Sequence Number"},
2048 {DCCRSP_HMAC_DIGEST, "HMAC-Digest Number"},
2049 {0, NULL}
2052 static const value_string cm_jump_subtlv_vals[] = {
2053 {DCCRSP_CM_JUMP_TIME_LENGTH, "Length of Jump"},
2054 {DCCRSP_CM_JUMP_TIME_START, "Start Time of Jump"},
2055 {0, NULL}
2058 static const value_string dccack_tlv_vals[] = {
2059 {DCCACK_HMAC_DIGEST, "HMAC-DigestNumber"},
2060 {DCCACK_KEY_SEQ_NUM, "Auth Key Sequence Number"},
2061 {0, NULL}
2064 static const value_string max_scheduled_codes_vals[] = {
2065 {1, "Enabled"},
2066 {2, "Disabled"},
2067 {0, NULL}
2070 static const value_string dcd_tlv_vals[] = {
2071 {DCD_DOWN_CLASSIFIER, "DCD_CFR Encodings"},
2072 {DCD_DSG_RULE, "DCD DSG Rule Encodings"},
2073 {DCD_DSG_CONFIG, "DCD DSG Config Encodings"},
2074 {0, NULL}
2077 static const value_string dcd_down_classifier_vals[] = {
2078 {DCD_CFR_ID, "Downstream Classifier ID"},
2079 {DCD_CFR_RULE_PRI, "Downstream Classifier Rule Priority"},
2080 {DCD_CFR_IP_CLASSIFIER, "DCD_CFR_IP Encodings"},
2081 {0, NULL}
2084 static const value_string dcd_dsg_rule_vals[] = {
2085 {DCD_RULE_ID, "DSG Rule ID"},
2086 {DCD_RULE_PRI, "DSG Rule Priority"},
2087 {DCD_RULE_UCID_RNG, "DSG Rule UCID Range"},
2088 {DCD_RULE_CLIENT_ID, "DCD Rule ClientID Encodings"},
2089 {DCD_RULE_TUNL_ADDR, "DSG Rule Tunnel MAC Address"},
2090 {DCD_RULE_CFR_ID, "DSG Rule Classifier ID"},
2091 {DCD_RULE_VENDOR_SPEC, "DSG Rule Vendor Specific Parameters"},
2092 {0, NULL}
2095 static const value_string dcd_clid_vals[] = {
2096 {DCD_CLID_BCAST_ID, "DSG Rule Client ID Broadcast ID"},
2097 {DCD_CLID_KNOWN_MAC_ADDR, "DSG Rule Client ID Known MAC Address"},
2098 {DCD_CLID_CA_SYS_ID, "DSG Rule Client ID CA System ID"},
2099 {DCD_CLID_APP_ID, "DSG Rule Client ID Application ID"},
2100 {0, NULL}
2103 static const value_string dcd_cfr_ip_vals[] = {
2104 {DCD_CFR_IP_SOURCE_ADDR, "Downstream Classifier IP Source Address"},
2105 {DCD_CFR_IP_SOURCE_MASK, "Downstream Classifier IP Source Mask"},
2106 {DCD_CFR_IP_DEST_ADDR, "Downstream Classifier IP Destination Address"},
2107 {DCD_CFR_IP_DEST_MASK, "Downstream Classifier IP Destination Mask"},
2108 {DCD_CFR_TCPUDP_SRCPORT_START, "Downstream Classifier IP TCP/UDP Source Port Start"},
2109 {DCD_CFR_TCPUDP_SRCPORT_END, "Downstream Classifier IP TCP/UDP Source Port End"},
2110 {DCD_CFR_TCPUDP_DSTPORT_START, "Downstream Classifier IP TCP/UDP Destination Port Start"},
2111 {DCD_CFR_TCPUDP_DSTPORT_END, "Downstream Classifier IP TCP/UDP Destination Port End"},
2112 {0, NULL}
2115 static const value_string dcd_cfg_vals[] = {
2116 {DCD_CFG_CHAN_LST, "DSG Configuration Channel"},
2117 {DCD_CFG_TDSG1, "DSG Initialization Timeout (Tdsg1)"},
2118 {DCD_CFG_TDSG2, "DSG Initialization Timeout (Tdsg2)"},
2119 {DCD_CFG_TDSG3, "DSG Initialization Timeout (Tdsg3)"},
2120 {DCD_CFG_TDSG4, "DSG Initialization Timeout (Tdsg4)"},
2121 {DCD_CFG_VENDOR_SPEC, "DSG Configuration Vendor Specific Parameters"},
2122 {0, NULL}
2125 static const value_string J83_annex_vals[] = {
2126 {J83_ANNEX_A, "J.83 Annex A"},
2127 {J83_ANNEX_B, "J.83 Annex B"},
2128 {J83_ANNEX_C, "J.83 Annex C"},
2129 {0, NULL}
2132 static const value_string modulation_order_vals[] = {
2133 {QAM64, "64-QAM"},
2134 {QAM256, "256-QAM"},
2135 {0, NULL}
2138 static const value_string primary_capable_vals[] = {
2139 {NOT_PRIMARY_CAPABLE, "Channel is not primary-capable"},
2140 {PRIMARY_CAPABLE, "Channel is primary-capable"},
2141 {2, "Reserved (was FDX downstream channel)"},
2142 {0, NULL}
2145 static const value_string map_ucd_transport_indicator_vals[] = {
2146 {CANNOT_CARRY_MAP_UCD, "Channel cannot carry MAPs and UCDs for the MAC domain for which the MDD is sent"},
2147 {CAN_CARRY_MAP_UCD, "Channel can carry MAPs and UCDs for the MAC domain for which the MDD is sent"},
2148 {0, NULL}
2151 static const value_string mdd_downstream_active_channel_list_fdx_vals[] = {
2152 {0, "Not an FDX Downstream Channel"},
2153 {1, "FDX Downstream Channel"},
2154 {0, NULL}
2157 static const value_string tukey_raised_cosine_vals[] = {
2158 {TUKEY_0TS, "0 "UTF8_MICRO_SIGN"s (0 * Ts)"},
2159 {TUKEY_64TS, "0.3125 "UTF8_MICRO_SIGN"s (64 * Ts)"},
2160 {TUKEY_128TS, "0.625 "UTF8_MICRO_SIGN"s (128 * Ts)"},
2161 {TUKEY_192TS, "0.9375 "UTF8_MICRO_SIGN"s (192 * Ts)"},
2162 {TUKEY_256TS, "1.25 "UTF8_MICRO_SIGN"s (256 * Ts)"},
2163 {0, NULL}
2166 static const value_string cyclic_prefix_vals[] = {
2167 {CYCLIC_PREFIX_192_TS, "0.9375 "UTF8_MICRO_SIGN"s (192 * Ts)"},
2168 {CYCLIC_PREFIX_256_TS, "1.25 "UTF8_MICRO_SIGN"s (256 * Ts)"},
2169 {CYCLIC_PREFIX_512_TS, "2.5 "UTF8_MICRO_SIGN"s (512 * Ts) 3"},
2170 {CYCLIC_PREFIX_768_TS, "3.75 "UTF8_MICRO_SIGN"s (768 * Ts)"},
2171 {CYCLIC_PREFIX_1024_TS, "5 "UTF8_MICRO_SIGN"s (1024 * Ts)"},
2172 {0, NULL}
2175 static const value_string spacing_vals[] = {
2176 {SPACING_25KHZ, "25kHz"},
2177 {SPACING_50KHZ, "50kHz"},
2178 {0, NULL}
2181 static const value_string bpkmattr_tlv_vals[] = {
2182 {BPKM_RESERVED, "Reserved"},
2183 {BPKM_SERIAL_NUM, "Serial Number"},
2184 {BPKM_MANUFACTURER_ID, "Manufacturer ID"},
2185 {BPKM_MAC_ADDR, "MAC Address"},
2186 {BPKM_RSA_PUB_KEY, "RSA Public Key"},
2187 {BPKM_CM_ID, "CM Identification"},
2188 {BPKM_DISPLAY_STR, "Display String"},
2189 {BPKM_AUTH_KEY, "Auth Key (encrypted)"},
2190 {BPKM_TEK, "Traffic Encryption Key"},
2191 {BPKM_KEY_LIFETIME, "Key Lifetime"},
2192 {BPKM_KEY_SEQ_NUM, "Key Sequence Number"},
2193 {BPKM_HMAC_DIGEST, "HMAC Digest"},
2194 {BPKM_SAID, "SAID"},
2195 {BPKM_TEK_PARAM, "TEK Parameters"},
2196 {BPKM_OBSOLETED, "Obsoleted"},
2197 {BPKM_CBC_IV, "CBC IV"},
2198 {BPKM_ERROR_CODE, "Error Code"},
2199 {BPKM_CA_CERT, "CA Certificate"},
2200 {BPKM_CM_CERT, "CM Certificate"},
2201 {BPKM_SEC_CAPABILITIES, "Security Capabilities"},
2202 {BPKM_CRYPTO_SUITE, "Cryptographic Suite"},
2203 {BPKM_CRYPTO_SUITE_LIST, "Cryptographic Suite List"},
2204 {BPKM_BPI_VERSION, "BPI Version"},
2205 {BPKM_SA_DESCRIPTOR, "SA Descriptor"},
2206 {BPKM_SA_TYPE, "SA Type"},
2207 {BPKM_SA_QUERY, "SA Query"},
2208 {BPKM_SA_QUERY_TYPE, "SA Query Type"},
2209 {BPKM_IP_ADDRESS, "IP Address"},
2210 {BPKM_DNLD_PARAMS, "Download Parameters"},
2211 {BPKM_CVC_ROOT_CA_CERT, "CVC Root CA Certificate"},
2212 {BPKM_CVC_CA_CERT, "CVC CA Certificate"},
2213 {BPKM_DEV_CA_CERT, "Device CA Certificate"},
2214 {BPKM_ROOT_CA_CERT, "Root CA Certificate"},
2215 {BPKM_CM_NONCE, "CM Nonce"},
2216 {BPKM_MSG_SIGNATURE, "Message Signature"},
2217 {BPKM_KEY_EXCHANGE_SHARE, "Key Exchange Share"},
2218 {BPKM_ALLOWED_BPI_VERSIONS, "Allowed BPI Versions"},
2219 {BPKM_OCSP_RSP, "OCSP Responses"},
2220 {BPKM_CMTS_DESIGNATION, "CMTS Designation"},
2221 {BPKM_CM_STATUS_CODE, "CM-Status Code"},
2222 {BPKM_DETECTED_ERRORS, "Detected Errors"},
2223 {BPKM_VENDOR_DEFINED, "Vendor Defined"},
2224 {0, NULL}
2227 static const value_string error_code_vals[] = {
2228 {0, "No Information"},
2229 {1, "Unauthorized CM"},
2230 {2, "Unauthorized SAID"},
2231 {3, "Unsolicited"},
2232 {4, "Invalid Key Sequence Number"},
2233 {5, "Message (Key Request) authentication failure"},
2234 {6, "Permanent Authorization Failure"},
2235 {7, "Not authorized for requested downstream traffic flow"},
2236 {8, "Downstream traffic flow not mapped to SAID"},
2237 {9, "Time of day not acquired"},
2238 {10, "EAE Disabled"},
2239 {11, "BPI+ Version not supported"},
2240 {0, NULL},
2243 static const value_string bpkm_crypto_suite_encr_vals[] = {
2244 {0x01, "CBC-Mode 56-bit DES"},
2245 {0x02, "CBC-Mode 40-bit DES"},
2246 {0x03, "CBC-Mode 128-bit AES"},
2247 {0x04, "CBC-Mode 256-bit AES"},
2248 {0, NULL}
2251 static const value_string bpkm_crypto_suite_auth_vals[] = {
2252 {0x00, "No"},
2253 {0, NULL}
2256 static const value_string bpkmattr_key_exchange_share_field_id_vals[] = {
2257 {0x0017, "secp256r1"},
2258 {0x0018, "secp384r1"},
2259 {0x0019, "secp521r1"},
2260 {0x001D, "x25519"},
2261 {0x001E, "x448"},
2262 {0, NULL}
2265 static const value_string bpi_ver_vals[] = {
2266 {0, "Reserved"},
2267 {1, "BPI+ v1"},
2268 {2, "BPI+ v2"},
2269 {0, NULL}
2272 static const value_string bpi_sa_vals[] = {
2273 {0, "Primary"},
2274 {1, "Static"},
2275 {2, "Dynamic"},
2276 {0, NULL}
2279 static const range_string bpi_sa_query_type_vals[] = {
2280 {1, 1, "IP Multicast"},
2281 {128, 255, "Vendor Specific"},
2282 {0, 0, NULL}
2285 static const value_string bpkm_cmts_binding_vals[] = {
2286 {BPKMATTR_CMTS_DESIGNATION_CERTIFICATE_FINGERPRINT, "Certificate Fingerprint"},
2287 {BPKMATTR_CMTS_DESIGNATION_COMMON_NAME, "Common Name"},
2288 {BPKMATTR_CMTS_DESIGNATION_ORG_UNIT, "Organizational Unit"},
2289 {BPKMATTR_CMTS_DESIGNATION_ORG_NAME, "Organization Name"},
2290 {BPKMATTR_CMTS_DESIGNATION_SERIAL_NUMBER, "Serial Number"},
2291 {BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_FINGERPRINT, "Issuing CA Fingerprint"},
2292 {BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_COMMON_NAME, "Issuing CA Common Name"},
2293 {BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_ORG_UNIT, "Issuing CA Organizational Unit"},
2294 {BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_ORG_NAME, "Issuing CA Organization Name"},
2295 {BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_SERIAL_NUMBER, "Issuing CA Serial Number"},
2296 {0, NULL}
2299 static const value_string bpkm_cm_status_code_vals[] = {
2300 {0, "No error"},
2301 {1, "Generic error"},
2302 {2, "Auth Reply not received"},
2303 {3, "Missing Auth Reply required attribute"},
2304 {4, "BPI-Version mismatch"},
2305 {5, "NONCE mismatch"},
2306 {11, "Signature Format Error"},
2307 {12, "Signature Algorithm not supported"},
2308 {13, "Public Key Algorithm not supported"},
2309 {14, "Incomplete Certificate Chain"},
2310 {15, "Certificate Not Trusted"},
2311 {16, "Missing EE certificate revocation information"},
2312 {17, "Missing CA certificate revocation information"},
2313 {18, "EE certificate Expired"},
2314 {19, "CA certificate Expired"},
2315 {20, "CMTS-designation fingerprint (SHA-256) mismatch"},
2316 {21, "CMTS-designation Common-Name mismatch"},
2317 {22, "CMTS-designation Organizational-Unit mismatch"},
2318 {23, "CMTS-designation Organization-Name mismatch"},
2319 {24, "CMTS-designation Serial-Number mismatch"},
2320 {25, "CMTS-designation Issuing-CA-fingerprint (SHA-256) mismatch"},
2321 {26, "CMTS-designation Issuing-CA-Common-Name mismatch"},
2322 {27, "CMTS-designation Issuing-CA-Organizational-Unit mismatch"},
2323 {28, "CMTS-designation Issuing-CA-Organization mismatch"},
2324 {29, "CMTS-designation Issuing-CA-Serial-umber mismatch"},
2325 {30, "Missing Key-Derivation required parameters"},
2326 {31, "Key-Derivation parameters field mismatch"},
2327 {32, "Key-Derivation error"},
2328 {0, NULL}
2331 static const value_string mdd_tlv_vals[] = {
2332 {DOWNSTREAM_ACTIVE_CHANNEL_LIST, "Downstream Active Channel List"},
2333 {MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP, "MAC Domain Downstream Service Group"},
2334 {DOWNSTREAM_AMBIGUITY_RESOLUTION_FREQUENCY_LIST, "Downstream Ambiguity Resolution Frequency List "},
2335 {RECEIVE_CHANNEL_PROFILE_REPORTING_CONTROL , "Receive Channel Profile Reporting Control"},
2336 {IP_INITIALIZATION_PARAMETERS , "IP Initialization Parameters"},
2337 {EARLY_AUTHENTICATION_AND_ENCRYPTION , "Early Authentication and Encryption"},
2338 {UPSTREAM_ACTIVE_CHANNEL_LIST , "Upstream Active Channel List"},
2339 {UPSTREAM_AMBIGUITY_RESOLUTION_CHANNEL_LIST , "Upstream Ambiguity Resolution Channel List"},
2340 {UPSTREAM_FREQUENCY_RANGE , "Upstream Frequency Range"},
2341 {SYMBOL_CLOCK_LOCKING_INDICATOR , "Symbol Clock Locking Indicator"},
2342 {CM_STATUS_EVENT_CONTROL , "CM-STATUS Event Control"},
2343 {UPSTREAM_TRANSMIT_POWER_REPORTING , "Upstream Transmit Power Reporting"},
2344 {DSG_DA_TO_DSID_ASSOCIATION_ENTRY , "DSG DA-to-DSID Association Entry"},
2345 {CM_STATUS_EVENT_ENABLE_NON_CHANNEL_SPECIFIC_EVENTS , "CM-STATUS Event Enable for Non-Channel-Specific-Events"},
2346 {EXTENDED_UPSTREAM_TRANSMIT_POWER_SUPPORT , "Extended Upstream Transmit Power Support"},
2347 {CMTS_DOCSIS_VERSION , "CMTS DOCSIS Version"},
2348 {CM_PERIODIC_MAINTENANCE_TIMEOUT_INDICATOR , "CM Periodic Maintenance Timeout Indicator"},
2349 {DLS_BROADCAST_AND_MULTICAST_DELIVERY_METHOD , "DLS Broadcast and Multicast Delivery Method"},
2350 {CM_STATUS_EVENT_ENABLE_FOR_DOCSIS_3_1_EVENTS , "CM-STATUS Event Enable for DOCSIS 3.1 Specific Events"},
2351 {DIPLEXER_BAND_EDGE , "Diplexer Band Edge"},
2352 {ADVANCED_BAND_PLAN, "Advanced Band Plan Descriptor"},
2353 {MDD_BPI_PLUS, "BPI+ Enabled Version and Configuration"},
2354 {0, NULL}
2358 static const value_string rcp_center_frequency_spacing_vals[] = {
2359 {ASSUME_6MHZ_CENTER_FREQUENCY_SPACING , "CM MUST report only Receive Channel Profiles assuming 6 MHz center frequency spacing"},
2360 {ASSUME_8MHZ_CENTER_FREQUENCY_SPACING , "CM MUST report only Receive Channel Profiles assuming 8 MHz center frequency spacing"},
2361 {0, NULL}
2364 static const value_string verbose_rcp_reporting_vals[] = {
2365 {RCP_NO_VERBOSE_REPORTING , "CM MUST NOT provide verbose reporting of all its Receive Channel Profile(s) (both standard profiles and manufacturers profiles)."},
2366 {RCP_VERBOSE_REPORTING , "CM MUST provide verbose reporting of Receive Channel Profile(s) (both standard profiles and manufacturers profiles)."},
2367 {0, NULL}
2370 static const value_string fragmented_rcp_transmission_vals[] = {
2371 {1, "CM optionally transmits Receive Channel Profile (s) requiring fragmentation (RCPs in excess of 255 bytes) in addition to those that do not."},
2372 {0, NULL}
2375 static const value_string ip_provisioning_mode_vals[] = {
2376 {IPv4_ONLY , "IPv4 Only"},
2377 {IPv6_ONLY , "IPv6 Only"},
2378 {IP_ALTERNATE, "Alternate"},
2379 {DUAL_STACK , "Dual Stack"},
2380 {0, NULL}
2383 static const value_string eae_vals[] = {
2384 {EAE_DISABLED , "early authentication and encryption disabled"},
2385 {EAE_ENABLED , "early authentication and encryption enabled"},
2386 {0, NULL}
2389 static const value_string upstream_frequency_range_vals[] = {
2390 {STANDARD_UPSTREAM_FREQUENCY_RANGE, "Standard Upstream Frequency Range"},
2391 {EXTENDED_UPSTREAM_FREQUENCY_RANGE, "Extended Upstream Frequency Range"},
2392 {0, NULL}
2395 static const value_string symbol_clock_locking_indicator_vals[] = {
2396 {NOT_LOCKED_TO_MASTER_CLOCK, "Symbol Clock is not locked to Master Clock"},
2397 {LOCKED_TO_MASTER_CLOCK, "Symbol Clock is locked to Master Clock"},
2398 {0, NULL}
2401 static const value_string symbol_cm_status_event_vals[] = {
2402 {SECONDARY_CHANNEL_MDD_TIMEOUT, "Secondary Channel MDD timeout"},
2403 {QAM_FEC_LOCK_FAILURE, "Qam FEC Lock Failure"},
2404 {SEQUENCE_OUT_OF_RANGE, "Sequence out of Range"},
2405 {MDD_RECOVERY, "MDD Recovery"},
2406 {QAM_FEC_LOCK_RECOVERY, "Qam FEC Lock Recovery"},
2407 {T4_TIMEOUT, "T4 Timeout"},
2408 {T3_RETRIES_EXCEEDED, "T3 Retries Exceeded"},
2409 {SUCCESFUL_RANGING_AFTER_T3_RETRIES_EXCEEDED, "Successful ranging after T3 Retries Exceeded"},
2410 {CM_OPERATING_ON_BATTERY_BACKUP, "CM Operating on Battery Backup"},
2411 {CM_RETURNED_TO_AC_POWER, "CM Returned to AC Power"},
2412 {MAC_REMOVAL_EVENT, "MAC Removal Event"},
2413 {DS_OFDM_PROFILE_FAILURE, "DS OFDM Profile Failure"},
2414 {PRIMARY_DS_CHANGE, "Primary Downstream Change"},
2415 {DPD_MISMATCH, "DPD Mismatch"},
2416 {DEPRECATED, "Deprecated"},
2417 {NCP_PROFILE_FAILURE, "NCP Profile Failure"},
2418 {PLC_FAILURE, "PLC Failure"},
2419 {NCP_PROFILE_RECOVERY, "NCP Profile Recovery"},
2420 {PLC_RECOVERY, "PLC Recovery"},
2421 {OFDM_PROFILE_RECOVERY, "OFDM Profile Recovery"},
2422 {OFDMA_FAILURE, "OFDMA Failure"},
2423 {MAP_STORAGE_OVERFLOW, "MAP Storage Overflow"},
2424 {MAP_STORAGE_ALMOST_FULL, "MAP Storage Almost Full"},
2425 {0, NULL}
2428 static const value_string upstream_transmit_power_reporting_vals[] = {
2429 {CM_DOESNT_REPORT_TRANSMIT_POWER, "CM does not report transmit power in RNG-REQ, INIT-RNG-REQ, and B-INIT-RNG-REQ messages"},
2430 {CM_REPORTS_TRANSMIT_POWER, "CM reports transmit power in RNG-REQ, INIT-RNG-REQ, and B-INIT-RNG-REQ messages"},
2431 {0, NULL}
2434 static const value_string cm_periodic_maintenance_timeout_indicator_vals[] = {
2435 {0, "use Unicast Ranging opportunity"},
2436 {1, "use Probe opportunity"},
2437 {2, "use Unicast Ranging or Probe opportunity"},
2438 {0, NULL}
2441 static const value_string dls_broadcast_and_multicast_delivery_method_vals[] = {
2442 {1, "delayed selected multicast method"},
2443 {2, "selectively replicated multicast method"},
2444 {0, NULL}
2448 static const value_string mdd_ds_active_channel_list_vals[] = {
2449 {DOWNSTREAM_ACTIVE_CHANNEL_LIST_CHANNEL_ID, "Channel ID"},
2450 {DOWNSTREAM_ACTIVE_CHANNEL_LIST_FREQUENCY, "Frequency"},
2451 {DOWNSTREAM_ACTIVE_CHANNEL_LIST_MODULATION_ORDER_ANNEX, "Annex/Modulation Order"},
2452 {DOWNSTREAM_ACTIVE_CHANNEL_LIST_PRIMARY_CAPABLE, "Primary Capable"},
2453 {DOWNSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK, "CM-STATUS Event Enable Bitmask"},
2454 {DOWNSTREAM_ACTIVE_CHANNEL_LIST_MAP_UCD_TRANSPORT_INDICATOR, "MAP and UCD transport indicator"},
2455 {DOWNSTREAM_ACTIVE_CHANNEL_LIST_OFDM_PLC_PARAMETERS, "OFDM PLC Parameters"},
2456 {DOWNSTREAM_ACTIVE_CHANNEL_LIST_FDX_SUB_BAND_ID, "Full Duplex Sub-band ID"},
2457 {DOWNSTREAM_ACTIVE_CHANNEL_LIST_FDX_DS, "Full Duplex Downstream"},
2458 {0, NULL}
2461 static const value_string mdd_ds_service_group_vals[] = {
2462 {MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_MD_DS_SG_IDENTIFIER, "MD-DS-SG Identifier"},
2463 {MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_CHANNEL_IDS, "Channel Ids"},
2464 {0, NULL}
2467 static const value_string mdd_channel_profile_reporting_control_vals[] = {
2468 {RCP_CENTER_FREQUENCY_SPACING, "RCP Center Frequency Spacing"},
2469 {VERBOSE_RCP_REPORTING, "Verbose RCP reporting"},
2470 {FRAGMENTED_RCP_TRANSMISSION, "Fragmented RCP transmission"},
2471 {0, NULL}
2474 static const value_string mdd_ip_init_param_vals[] = {
2475 {IP_PROVISIONING_MODE, "IP Provisioning Mode"},
2476 {PRE_REGISTRATION_DSID, "Pre-registration DSID"},
2477 {0, NULL}
2480 static const value_string mdd_up_active_channel_list_vals[] = {
2481 {UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_ID, "Upstream Channel ID"},
2482 {UPSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK, "CM-STATUS Event Enable Bitmask"},
2483 {UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_PRIORITY, "Upstream Channel Priority"},
2484 {UPSTREAM_ACTIVE_CHANNEL_LIST_DSCHIDS_MAPS_UCDS, "Downstream Channel(s) on which MAPs and UCDs for this Upstream Channel are sent"},
2485 {UPSTREAM_ACTIVE_CHANNEL_LIST_FDX_UPSTREAM_CHANNEL, "FDX Upstream Channel"},
2486 {UPSTREAM_ACTIVE_CHANNEL_LIST_FDX_SUBBAND_ID, "FDX Sub-band ID"},
2487 {0, NULL}
2490 static const value_string mdd_cm_status_event_control_vals[] = {
2491 {EVENT_TYPE_CODE, "Event Type"},
2492 {MAXIMUM_EVENT_HOLDOFF_TIMER, "Maximum Event Holdoff Timer"},
2493 {MAXIMUM_NUMBER_OF_REPORTS_PER_EVENT, "Maximum Number of Reports per Event"},
2494 {0, NULL}
2497 static const value_string mdd_cm_dsg_da_to_dsid_vals[] = {
2498 {DSG_DA_TO_DSID_ASSOCIATION_DA, "Destination Address"},
2499 {DSG_DA_TO_DSID_ASSOCIATION_DSID, "DSID"},
2500 {0, NULL}
2503 static const value_string tlv20_vals[] = {
2504 {0, "Selectable active codes mode 1 enabled and code hopping disabled"},
2505 {1, "Selectable active codes mode 1 enabled and code hopping mode 1 enabled"},
2506 {2, "Selectable active codes mode 2 enabled and code hopping mode 2 enabled"},
2507 {3, "Selectable active codes mode 2 enabled and code hopping disabled"},
2508 {0, NULL}
2511 static const value_string mdd_diplexer_band_edge_vals[] = {
2512 {DIPLEXER_US_UPPER_BAND_EDGE, "Diplexer Upstream Upper Band Edge"},
2513 {DIPLEXER_DS_LOWER_BAND_EDGE, "Diplexer Downstream Lower Band Edge"},
2514 {DIPLEXER_DS_UPPER_BAND_EDGE, "Diplexer Downstream Upper Band Edge"},
2515 {DIPLEXER_US_UPPER_BAND_EDGE_OVERRIDE, "Diplexer Upstream Upper Band Edge Override"},
2516 {DIPLEXER_DS_LOWER_BAND_EDGE_OVERRIDE, "Diplexer Downstream Lower Band Edge Override"},
2517 {DIPLEXER_DS_UPPER_BAND_EDGE_OVERRIDE, "Diplexer Downstream Upper Band Edge Override"},
2518 {0, NULL}
2521 static const value_string mdd_diplexer_us_upper_band_edge_vals[] = {
2522 {0, "Upstream Frequency Range up to 42 MHz"},
2523 {1, "Upstream Frequency Range up to 65 MHz"},
2524 {2, "Upstream Frequency Range up to 85 MHz"},
2525 {3, "Upstream Frequency Range up to 117 MHz"},
2526 {4, "Upstream Frequency Range up to 204 MHz"},
2527 {0, NULL}
2530 static const value_string mdd_diplexer_ds_lower_band_edge_vals[] = {
2531 {0, "Downstream Frequency Range starting from 108 MHz"},
2532 {1, "Downstream Frequency Range starting from 258 MHz"},
2533 {0, NULL}
2536 static const value_string mdd_diplexer_ds_upper_band_edge_vals[] = {
2537 {0, "Downstream Frequency Range up to 1218 MHz"},
2538 {1, "Downstream Frequency Range up to 1794 MHz"},
2539 {2, "Downstream Frequency Range up to 1002 MHz"},
2540 {0, NULL}
2543 static const value_string mdd_abp_vals[] = {
2544 {1, "Deprecated"},
2545 {MDD_ABP_SUB_BAND_COUNT, "Total number of sub-bands"},
2546 {MDD_ABP_SUB_BAND_WIDTH, "Full Duplex Sub-band Width"},
2547 {0, NULL}
2550 static const value_string mdd_abp_sub_band_vals[] = {
2551 {0, "FDD Enabled"},
2552 {1, "1 FDX sub-band"},
2553 {2, "2 FDX sub-bands"},
2554 {3, "3 FDX sub-bands"},
2555 {0, NULL}
2558 static const value_string mdd_abp_sub_band_width_vals[] = {
2559 {0, "96 MHz"},
2560 {1, "192 MHz"},
2561 {0, NULL}
2564 static const value_string mdd_docsis_version_vals[] = {
2565 {CMTS_DOCSIS_VERSION_MAJOR_PRE_40, "CMTS Pre-DOCSIS 4.0 Major DOCSIS Version"},
2566 {CMTS_DOCSIS_VERSION_MINOR_PRE_40, "CMTS Pre-DOCSIS 4.0 Minor DOCSIS Version"},
2567 {CMTS_DOCSIS_VERSION_MAJOR, "CMTS Major DOCSIS Version"},
2568 {CMTS_DOCSIS_VERSION_MINOR, "CMTS Minor DOCSIS Version"},
2569 {CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE, "CMTS Extended Spectrum Mode of Operation"},
2570 {0, NULL}
2573 static const value_string mdd_bpi_plus_vals[] = {
2574 {MDD_BPI_PLUS_VERSION, "BPI+ Version Number"},
2575 {MDD_BPI_PLUS_CFG, "BPI+ Configuration Bitmask"},
2576 {0, NULL}
2579 static const value_string cmstatus_tlv_vals[] = {
2580 {STATUS_EVENT, "Status Event"},
2581 {0, NULL}
2584 static const value_string cmstatus_status_event_tlv_vals[] = {
2585 {EVENT_DS_CH_ID, "Downstream Channel ID"},
2586 {EVENT_US_CH_ID, "Upstream Channel ID"},
2587 {EVENT_DSID, "DSID"},
2588 {EVENT_DESCR, "Description"},
2589 {EVENT_MAC_ADDRESS, "MAC Address"},
2590 {EVENT_DS_OFDM_PROFILE_ID, "Downstream OFDM Profile ID"},
2591 {EVENT_US_OFDMA_PROFILE_ID, "Upstream OFDMA Profile ID"},
2592 {0, NULL}
2595 static const value_string cmctrlreq_tlv_vals[] = {
2596 {CM_CTRL_MUTE, "Upstream Channel RF Mute"},
2597 {CM_CTRL_MUTE_TIMEOUT, "RF Mute Timeout Interval"},
2598 {CM_CTRL_REINIT, "CM Reinitialize"},
2599 {CM_CTRL_DISABLE_FWD, "Disable Forwarding"},
2600 {CM_CTRL_DS_EVENT, "Override Downstream Events"},
2601 {CM_CTRL_US_EVENT, "Override Upstream Events"},
2602 {CM_CTRL_EVENT, "Override Non-Channel-Specific Events"},
2603 {0, NULL}
2606 static const value_string cmctrlreq_us_tlv_vals[] = {
2607 {US_EVENT_CH_ID, "Upstream Channel ID"},
2608 {US_EVENT_MASK, "Upstream Status Event Enable Bitmask"},
2609 {0, NULL}
2612 static const value_string cmctrlreq_ds_tlv_vals[] = {
2613 {DS_EVENT_CH_ID, "Downstream Channel ID"},
2614 {DS_EVENT_MASK, "Downstream Status Event Enable Bitmask"},
2615 {0, NULL}
2618 static const value_string emrsp_tlv_vals[] = {
2619 {EM_HOLDOFF_TIMER, "Hold-Off Timer"},
2620 {0, NULL}
2623 static const value_string emreq_req_power_mode_vals[] = {
2624 {0, "Normal Operation"},
2625 {1, "Energy Management 1x1 Mode"},
2626 {2, "DOCSIS Light Sleep Mode"},
2627 {0, NULL}
2630 static const value_string emrsp_rsp_code_vals[] = {
2631 {0, "OK"},
2632 {1, "Reject Temporary"},
2633 {2, "Reject Permanent, Requested Low Power Mode(s) Not Supported"},
2634 {3, "Reject Permanent, Requested Low Power Mode(s) Disabled"},
2635 {4, "Reject Permanent, Other"},
2636 {0, NULL}
2639 static const value_string docsis_ocd_subc_assign_type_str[] = {
2640 {0, "range, continuous"},
2641 {1, "range, skip by 1"},
2642 {2, "list"},
2643 {3, "reserved"},
2644 {0, NULL}
2647 static const value_string docsis_ocd_subc_assign_value_str[] = {
2648 {0, "specific value"},
2649 {1, "default value"},
2650 {0, NULL}
2653 static const value_string docsis_ocd_subc_assign_subc_type_str[] = {
2654 {1, "continuous pilot"},
2655 {16, "excluded subcarriers"},
2656 {20, "PLC, 16-QAM"},
2657 {0, NULL}
2660 static const value_string docsis_ocd_four_trans_size[] = {
2661 {0, "4096 subcarriers at 50 kHz spacing"},
2662 {1, "8192 subcarriers at 25 kHz spacing"},
2663 {0, NULL}
2666 static const value_string docsis_ocd_cyc_prefix[] = {
2667 {0, "0.9375 "UTF8_MICRO_SIGN"s with 192 samples"},
2668 {1, "1.25 "UTF8_MICRO_SIGN"s with 256 samples"},
2669 {2, "2.5 "UTF8_MICRO_SIGN"s with 512 samples"},
2670 {3, "3.75 "UTF8_MICRO_SIGN"s with 768 samples"},
2671 {4, "5.0 "UTF8_MICRO_SIGN"s with 1024 samples"},
2672 {0, NULL}
2675 static const value_string docsis_ocd_roll_off[] = {
2676 {0, "0 "UTF8_MICRO_SIGN"s with 0 samples"},
2677 {1, "0.3125 "UTF8_MICRO_SIGN"s with 64 samples"},
2678 {2, "0.625 "UTF8_MICRO_SIGN"s with 128 samples"},
2679 {3, "0.9375 "UTF8_MICRO_SIGN"s with 192 samples"},
2680 {4, "1.25 "UTF8_MICRO_SIGN"s with 256 samples"},
2681 {0, NULL}
2684 static const value_string docsis_ocd_prim_cap_ind_str[] = {
2685 {0, "channel is not primary capable"},
2686 {1, "channel is primary capable"},
2687 {0, NULL}
2690 static const value_string docsis_ocd_fdx_ind_str[] = {
2691 {1, "FDX Channel"},
2692 {0, NULL}
2695 static const value_string ocd_tlv_vals[] = {
2696 {DISCRETE_FOURIER_TRANSFORM_SIZE, "Discrete Fourier Transform Size"},
2697 {CYCLIC_PREFIX, "Cyclic Prefix"},
2698 {ROLL_OFF, "Roll Off"},
2699 {OFDM_SPECTRUM_LOCATION, "OFDM Spectrum Location"},
2700 {TIME_INTERLEAVING_DEPTH, "Time Interleaving Depth"},
2701 {SUBCARRIER_ASSIGNMENT_RANGE_LIST, "Subcarrier Assignment Range/List"},
2702 {PRIMARY_CAPABILITY_INDICATOR, "Primary Capable Indicator"},
2703 {FDX_INDICATOR, "FDX Indicator"},
2704 {0, NULL}
2707 static const value_string docsis_dpd_subc_assign_type_str[] = {
2708 {0, "range, continuous"},
2709 {1, "range, skip by 1"},
2710 {2, "list"},
2711 {3, "reserved"},
2712 {0, NULL}
2715 static const value_string docsis_dpd_subc_assign_value_str[] = {
2716 {0, "specific value"},
2717 {1, "default value"},
2718 {0, NULL}
2721 static const value_string docsis_dpd_subc_assign_modulation_str[] = {
2722 {0, "zero-bit loaded"},
2723 {1, "reserved"},
2724 {2, "QPSK (for NCP profile only)"},
2725 {3, "reserved"},
2726 {4, "16-QAM"},
2727 {5, "reserved"},
2728 {6, "64-QAM"},
2729 {7, "128-QAM"},
2730 {8, "256-QAM"},
2731 {9, "512-QAM"},
2732 {10, "1024-QAM"},
2733 {11, "2048-QAM"},
2734 {12, "4096-QAM"},
2735 {13, "8192-QAM"},
2736 {14, "16384-QAM"},
2737 {15, "reserved"},
2738 {0, NULL}
2741 static const value_string docsis_dpd_tlv_subc_assign_vector_oddness_str[] = {
2742 {0, "N is even"},
2743 {1, "N is odd"},
2744 {0, NULL}
2747 static const value_string docsis_dpd_tlv_subc_assign_vector_modulation_str[] = {
2748 {0, "zero-bit loaded"},
2749 {1, "continuous pilot"},
2750 {2, "QPSK (for NCP profile only)"},
2751 {3, "reserved"},
2752 {4, "16-QAM"},
2753 {5, "reserved"},
2754 {6, "64-QAM"},
2755 {7, "128-QAM"},
2756 {8, "256-QAM"},
2757 {9, "512-QAM"},
2758 {10, "1024-QAM"},
2759 {11, "2048-QAM"},
2760 {12, "4096-QAM"},
2761 {13, "8192-QAM"},
2762 {14, "16384-QAM"},
2763 {15, "reserved"},
2764 {0, NULL}
2767 static const value_string dpd_tlv_vals[] = {
2768 {SUBCARRIER_ASSIGNMENT_RANGE_LIST, "Subcarrier Assignment Range/List"},
2769 {SUBCARRIER_ASSIGNMENT_VECTOR, "Subcarrier Assignment Vector"},
2770 {0, NULL}
2773 static const value_string ofdma_cyclic_prefix_size_vals[] = {
2774 {1, "96 samples"},
2775 {2, "128 samples"},
2776 {3, "160 samples"},
2777 {4, "192 samples"},
2778 {5, "224 samples"},
2779 {6, "256 samples"},
2780 {7, "288 samples"},
2781 {8, "320 samples"},
2782 {9, "384 samples"},
2783 {10, "512 samples"},
2784 {11, "640 samples"},
2785 {0, NULL}
2788 static const value_string ofdma_rolloff_period_size_vals[] = {
2789 {1, "0 samples"},
2790 {2, "32 samples"},
2791 {3, "64 samples"},
2792 {4, "96 samples"},
2793 {5, "128 samples"},
2794 {6, "160 samples"},
2795 {7, "192 samples"},
2796 {8, "224 samples"},
2797 {0, NULL}
2800 static const value_string subc_spacing_vals[] = {
2801 {1, "25 kHz (corresponds to 4096 subcarriers and 16 subcarriers per minislot)"},
2802 {2, "50 kHz (corresponds to 2048 subcarriers and 8 subcarriers per minislot)"},
2803 {0, NULL}
2806 static const value_string ofdma_prof_mod_order[] = {
2807 {0, "no bit-loading"},
2808 {1, "BPSK"},
2809 {2, "QPSK"},
2810 {3, "8-QAM"},
2811 {4, "16-QAM"},
2812 {5, "32-QAM"},
2813 {6, "64-QAM"},
2814 {7, "128-QAM"},
2815 {8, "256-QAM"},
2816 {9, "512-QAM"},
2817 {10, "1024-QAM"},
2818 {11, "2048-QAM"},
2819 {12, "4096-QAM"},
2820 {0, NULL}
2823 static const value_string profile_id_vals[] = {
2824 {0, "Profile A"},
2825 {1, "Profile B"},
2826 {2, "Profile C"},
2827 {3, "Profile D"},
2828 {4, "Profile E"},
2829 {5, "Profile F"},
2830 {6, "Profile G"},
2831 {7, "Profile H"},
2832 {8, "Profile I"},
2833 {9, "Profile J"},
2834 {10, "Profile K"},
2835 {11, "Profile L"},
2836 {12, "Profile M"},
2837 {13, "Profile N"},
2838 {14, "Profile O"},
2839 {15, "Profile P"},
2840 {254, "Profile for RxMER statistics only"},
2841 {255, "NCP Profile"},
2842 {0, NULL}
2845 static const value_string opt_opcode_vals[] = {
2846 {1, "Start"},
2847 {2, "Abort"},
2848 {3, "FDX Triggered Start"},
2849 {0, NULL}
2852 static const value_string opt_status_vals[] = {
2853 {1, "Testing"},
2854 {2, "Profile already testing from another request"},
2855 {3, "No free profile resource on CM"},
2856 {4, "Maximum duration expired"},
2857 {5, "Aborted"},
2858 {6, "Complete"},
2859 {7, "Profile already assigned to the CM"},
2860 {8, "DS Lock Lost"},
2861 {0, NULL}
2864 static const value_string optreq_tlv_vals[] = {
2865 {OPT_REQ_REQ_STAT, "Requested Statistics"},
2866 {OPT_REQ_RXMER_THRESH_PARAMS, "RxMER Thresholding Parameters"},
2867 {OPT_REQ_TRIGGER_DEFINITION, "Trigger Definition"},
2868 {0, NULL}
2871 static const value_string optreq_tlv_rxmer_thresh_params_vals[] = {
2872 {OPT_REQ_RXMER_THRESH_PARAMS_MODULATION_ORDER, "Modulation Order"},
2873 {0, NULL}
2876 static const value_string opreq_tlv_rxmer_thresh_params_mod_order[] = {
2877 {0, "reserved"},
2878 {1, "reserved"},
2879 {2, "QPSK"},
2880 {3, "reserved"},
2881 {4, "16-QAM"},
2882 {5, "reserved"},
2883 {6, "64-QAM"},
2884 {7, "128-QAM"},
2885 {8, "256-QAM"},
2886 {9, "512-QAM"},
2887 {10, "1024-QAM"},
2888 {11, "2048-QAM"},
2889 {12, "4096-QAM"},
2890 {13, "8192-QAM"},
2891 {14, "16384-QAM"},
2892 {15, "reserved"},
2893 {0, NULL}
2896 static const value_string optreq_tlv_trigger_definition_vals[] = {
2897 {OPT_REQ_TRIGGER_DEFINITION_TRIGGER_TYPE, "Trigger Type"},
2898 {OPT_REQ_TRIGGER_DEFINITION_MEASUREMENT_DURATION, "Measurement Duration"},
2899 {OPT_REQ_TRIGGER_DEFINITION_TRIGGERING_SID, "Triggering SID"},
2900 {OPT_REQ_TRIGGER_DEFINITION_US_CHANNEL_ID, "US channel ID"},
2901 {OPT_REQ_TRIGGER_DEFINITION_OUDP_SOUND_AMBIG_OFFSET, "OUDP Sounding Ambiguity Offset"},
2902 {OPT_REQ_TRIGGER_DEFINITION_RXMER_TO_REPORT, "RxMER Measurement to Report"},
2903 {OPT_REQ_TRIGGER_DEFINITION_START_TIME, "Time-Triggered Start Time"},
2904 {0, NULL}
2907 static const value_string optreq_tlv_triggered_definition_trigger_type_vals[] = {
2908 {0, "OUDP Sounding Triggered"},
2909 {1, "ECT RxMER Probe Triggered"},
2910 {2, "Time Triggered"},
2911 {0, NULL}
2914 static const value_string optreq_tlv_triggered_definition_rx_mer_to_report_vals[] = {
2915 {0, "Report RxMER per Subcarrier for all subcarriers"},
2916 {1, "Report Average RxMER over all subcarriers"},
2917 {2, "Report both RxMER per Subcarrier and Average RxMER for all subcarriers"},
2918 {0, NULL}
2921 static const value_string optrsp_tlv_vals [] = {
2922 {OPT_RSP_RXMER, "RxMER and SNR Margin Data"},
2923 {OPT_RSP_DATA_CW, "Data Profile Codeword Data"},
2924 {OPT_RSP_NCP_FIELDS, "NCP Fields Data"},
2925 {0, NULL}
2928 static const value_string optrsp_rxmer_vals [] = {
2929 {OPT_RSP_RXMER_SUBCARRIER, "RxMER per Subcarrier"},
2930 {OPT_RSP_RXMER_SUBCARRIER_THRESHOLD, "RxMER per Subcarrier Threshold Comparison Result"},
2931 {OPT_RSP_RXMER_SUBCARRIER_THRESHOLD_COUNT, "Number of Subcarriers whose RxMER is RxMER Margin below the RxMER Target"},
2932 {OPT_RSP_RXMER_SNR_MARGIN, "SNR Margin"},
2933 {OPT_RSP_RXMER_AVG, "Average RxMER"},
2934 {OPT_RSP_RXMER_ECT_RBA_SUBBAND_DIRECTION, "ECT RxMER Probe-Triggered RBA Sub-band Direction Set"},
2935 {0, NULL}
2938 static const value_string optrsp_data_cw_vals [] = {
2939 {OPT_RSP_DATA_CW_COUNT, "Codeword Count"},
2940 {OPT_RSP_DATA_CW_CORRECTED, "Corrected Codeword Count"},
2941 {OPT_RSP_DATA_CW_UNCORRECTABLE, "Uncorrectable Codeword Count"},
2942 {OPT_RSP_DATA_CW_THRESHOLD_COMPARISON, "Codeword Threshold Comparison Result for Candidate Profile"},
2943 {0, NULL}
2946 static const value_string optrsp_data_cw_threshold_comparison_vals [] = {
2947 {0, "Uncorrectable Codeword Count (N_e) reached"},
2948 {1, "Codeword Count (N_c) reached"},
2949 {0, NULL}
2952 static const value_string optrsp_ncp_fields_vals [] = {
2953 {OPT_RSP_NCP_FIELDS_COUNT, "NCP Fields Count"},
2954 {OPT_RSP_NCP_FIELDS_FAILURE, "NCP CRC Failure Count"},
2955 {OPT_RSP_NCP_FIELDS_THRESHOLD_COMPARISON, "NCP CRC Threshold Comparison Result"},
2956 {0, NULL}
2959 static const value_string optrsp_ncp_fields_threshold_comparison_vals [] = {
2960 {0, "NCP CRC Failure Count (NF_e) reached"},
2961 {1, "NCP Fields Count (NF_c) reached"},
2962 {0, NULL}
2965 static const value_string sid_field_bit15_14_vals [] = {
2966 {0, "No error condition"},
2967 {1, "Power Adjustment not applied"},
2968 {2, "The current value for Pr is more than 3dB below the top of the dynamic range window for all channels"},
2969 {3, "Maximum Scheduled Codes Unnecessary"},
2970 {0, NULL}
2973 static const value_string rba_subband_direction_vals [] = {
2974 {0, "Downstream"},
2975 {1, "Upstream"},
2976 {2, "Undefined for this RBA"},
2977 {0, NULL}
2980 static const value_string extended_us_channel_vals [] = {
2981 {0, "Channel is not an Extended Upstream Channel"},
2982 {1, "Channel is an Extended Upstream Channel"},
2983 {0, NULL}
2986 static const value_string cwt_op_code_vals [] = {
2987 {1, "Start"},
2988 {2, "Stop"},
2989 {0, NULL}
2992 static const value_string cwt_status_vals [] = {
2993 {1, "CWT-REQ accepted"},
2994 {2, "CWT-REQ rejected, invalid request"},
2995 {3, "CWT-REQ rejected, no-op"},
2996 {4, "CW aborted, transaction mismatch"},
2997 {5, "CW aborted, max duration timeout"},
2998 {0, NULL}
3000 static const value_string cwt_tlv_vals [] = {
3001 {1, "Phase Rotation"},
3002 {2, "Maximum Duration"},
3003 {3, "Upstream Encodings"},
3004 {0, NULL}
3007 static const value_string cwt_phase_rotation_vals [] = {
3008 {1, "pi/2"},
3009 {2, "2pi/3"},
3010 {3, "pi"},
3011 {0, NULL}
3014 static const value_string cwt_us_encodings_tlv_vals [] = {
3015 {1, "Extended Upstream Channel ID"},
3016 {2, "Upstream Subcarrier Index"},
3017 {3, "Power Boost"},
3018 {0, NULL}
3021 static void ect_trans_id_val(char *buf, uint16_t value)
3023 if (value == 255)
3024 snprintf(buf, ITEM_LABEL_LENGTH, "unsolicited ECT-RSP message");
3025 else
3026 snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
3029 static const value_string ect_rsp_code_vals [] = {
3030 {0, "OK"},
3031 {1, "Reject, invalid parameters"},
3032 {2, "Reject, RBA not currently active"},
3033 {3, "Reject, Defer EC Training"},
3034 {0, NULL}
3037 /* ECT TLVs */
3038 static const value_string ect_tlv_vals [] = {
3039 {87, "Control Encodings"},
3040 {0, NULL}
3043 /* TLV 87.* */
3044 static const value_string ect_control_tlv_vals [] = {
3045 {1, "Sub-band Direction Set"},
3046 {2, "Training Status"},
3047 {3, "Training Method"},
3048 {4, "Partial Service Indicator"},
3049 {5, "Training Deferral Time"},
3050 {6, "RxMER Duration"},
3051 {0, NULL}
3054 /* TLV 87.2 */
3055 static const value_string ect_control_status_vals [] = {
3056 {0, "Converged"},
3057 {1, "Not yet converged"},
3058 {2, "No longer converged"},
3059 {3, "N/A"},
3060 {0, NULL}
3063 /* TLV 87.3.* */
3064 static const value_string ect_control_method_tlv_vals [] = {
3065 {1, "Foreground Training Parameters"},
3066 {2, "Background Training Parameters"},
3067 {3, "Training Method"},
3068 {4, "Partial Service Indicator"},
3069 {5, "Training Deferral Time"},
3070 {0, NULL}
3073 /* TLV 87.3.1.* */
3074 static const value_string ect_control_method_fg_tlv_vals [] = {
3075 {1, "Duration"},
3076 {2, "Periodicity"},
3077 {3, "Expiration Time"},
3078 {4, "Downstream Zero Bit Loading"},
3079 {0, NULL}
3082 /* TLV 87.3.1.1, 8.6 */
3083 static const unit_name_string units_symbols = { " symbol", " symbols" };
3085 /* TLV 87.3.1.4 */
3086 static const value_string ect_ds_zbl_vals [] = {
3087 {0, "Not required"},
3088 {1, "Required"},
3089 {0, NULL}
3092 /* TLV 87.3.2.* */
3093 static const value_string ect_control_method_bg_tlv_vals [] = {
3094 {1, "Duration"},
3095 {2, "Periodicity"},
3096 {3, "Expiration Time"},
3097 {4, "Window Start Time"},
3098 {0, NULL}
3101 /* TLV 87.4.* */
3102 static const value_string ect_control_partial_service_tlv_vals [] = {
3103 {1, "Downstream Channel List"},
3104 {2, "Upstream Channel List"},
3105 {0, NULL}
3108 /* TLV 87.3.1.4 */
3109 static void ect_deferral_time_val(char *buf, uint16_t value)
3111 switch(value)
3113 case 0:
3114 snprintf(buf, ITEM_LABEL_LENGTH, "Next time the RBA sub-band direction set is active");
3115 break;
3116 case 1:
3117 snprintf(buf, ITEM_LABEL_LENGTH, "When the channel(s) in the RBA on which partial service occurred have recovered");
3118 break;
3119 default:
3120 snprintf(buf, ITEM_LABEL_LENGTH, "%d ms", value);
3124 static const range_string dpr_tg_id_vals [] = {
3125 {0x01, 0xff, "TG ID"},
3126 {0x00, 0x00, "All Transmission Groups"},
3127 {0, 0, NULL}
3130 static const true_false_string tfs_ucd_change_ind_vals = {"Changes", "No changes"};
3132 static const true_false_string tfs_allow_inhibit = { "Inhibit Initial Ranging", "Ranging Allowed" };
3133 static const true_false_string type35ucd_tfs_present_not_present = { "UCD35 is present for this UCID",
3134 "UCD35 is not present for this UCID" };
3136 static const true_false_string sid_field_bit15_tfs = {
3137 "The commanded power level P1.6r_n is higher than the value corresponding to the top of the DRW.",
3138 "The commanded power level P1.6r_n is not higher than the value corresponding to the top of the DRW."
3141 static const true_false_string sid_field_bit14_tfs = {
3142 "The commanded power level P1.6r_n is in excess of 6 dB below the value corresponding to the top of the DRW.",
3143 "The commanded power level P1.6r_n is not in excess of 6 dB below the value corresponding to the top of the DRW."
3146 static const value_string unique_unlimited[] = {
3147 { 0, "Unlimited" },
3148 {0, NULL}
3151 static void
3152 ofdma_ir_pow_ctrl_start_pow(char *buf, uint32_t value)
3154 snprintf(buf, ITEM_LABEL_LENGTH, "%.2f dBmV/1.6MHz", value/4.0);
3157 static void
3158 ofdma_ir_pow_ctrl_step_size(char *buf, uint32_t value)
3160 snprintf(buf, ITEM_LABEL_LENGTH, "%.2f dB", value/4.0);
3163 static void
3164 fourth_db(char *buf, uint32_t value)
3166 snprintf(buf, ITEM_LABEL_LENGTH, "%.2f dB", value/4.0);
3169 static void
3170 d30_time_ticks(char *buf, uint32_t value)
3172 snprintf(buf, ITEM_LABEL_LENGTH, "%u 10.24 MHz time ticks (%.3f "UTF8_MICRO_SIGN"s)",
3173 value, value/10.24);
3176 static void
3177 subc_assign_range(char *buf, uint32_t value)
3179 snprintf(buf, ITEM_LABEL_LENGTH, "%u - %u", value >> 16, value &0xFFFF);
3182 static void
3183 multipart_number_of_fragments(char *buf, uint32_t value)
3185 snprintf(buf, ITEM_LABEL_LENGTH, "%u (Actual Number of Fragments: %u)", value, value + 1);
3188 /* table with an ID consisting of MMM Type as MSB and 3 type-specific LSB */
3189 static reassembly_table docsis_tlv_reassembly_table;
3191 static const fragment_items docsis_tlv_frag_items = {
3192 &ett_docsis_tlv_fragment,
3193 &ett_docsis_tlv_fragments,
3194 &hf_docsis_tlv_fragments,
3195 &hf_docsis_tlv_fragment,
3196 &hf_docsis_tlv_fragment_overlap,
3197 &hf_docsis_tlv_fragment_overlap_conflict,
3198 &hf_docsis_tlv_fragment_multiple_tails,
3199 &hf_docsis_tlv_fragment_too_long_fragment,
3200 &hf_docsis_tlv_fragment_error,
3201 &hf_docsis_tlv_fragment_count,
3202 &hf_docsis_tlv_reassembled_in,
3203 &hf_docsis_tlv_reassembled_length,
3204 &hf_docsis_tlv_reassembled_data,
3205 "TLV fragments"
3208 static tvbuff_t *
3209 dissect_multipart(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_,
3210 const uint32_t mmm_type, uint32_t id, const int fixed_byte_count)
3212 /* Multipart MMM messages from version 5 onwards */
3213 unsigned version, multipart = 0, fragment, last_fragment, tlv_byte_count;
3214 address save_src, save_dst;
3216 version = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_docsis_mgmt, KEY_MGMT_VERSION));
3217 if (version > 4)
3218 multipart = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_docsis_mgmt, KEY_MGMT_MULTIPART));
3219 if (!multipart)
3220 return tvb_new_subset_remaining(tvb, fixed_byte_count);
3222 id += mmm_type << 24;
3223 fragment = multipart & 0x0F;
3224 last_fragment = multipart >> 4;
3225 tlv_byte_count = tvb_reported_length_remaining(tvb, fixed_byte_count);
3227 /* DOCSIS MAC management messages do not have network (IP) address. Use link (MAC) address instead. Same workflow as in wimax. */
3228 /* Save address pointers. */
3229 copy_address_shallow(&save_src, &pinfo->src);
3230 copy_address_shallow(&save_dst, &pinfo->dst);
3231 /* Use dl_src and dl_dst in defragmentation. */
3232 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
3233 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
3235 fragment_head *fh = fragment_add_seq_check(&docsis_tlv_reassembly_table, tvb, fixed_byte_count, pinfo, id, NULL,
3236 fragment, tlv_byte_count, (fragment != last_fragment));
3238 /* Restore address pointers. */
3239 copy_address_shallow(&pinfo->src, &save_src);
3240 copy_address_shallow(&pinfo->dst, &save_dst);
3242 if (fh)
3243 return process_reassembled_data(tvb, fixed_byte_count, pinfo, "Reassembled TLVs", fh, &docsis_tlv_frag_items,
3244 NULL, tree);
3245 return NULL;
3248 static int
3249 dissect_sync (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
3251 proto_item *it;
3252 proto_tree *sync_tree;
3254 col_set_str(pinfo->cinfo, COL_INFO, "Sync Message");
3256 it = proto_tree_add_item(tree, proto_docsis_sync, tvb, 0, -1, ENC_NA);
3257 sync_tree = proto_item_add_subtree (it, ett_docsis_sync);
3259 proto_tree_add_item (sync_tree, hf_docsis_sync_cmts_timestamp, tvb, 0, 4, ENC_BIG_ENDIAN);
3261 return tvb_captured_length(tvb);
3264 static void
3265 dissect_ucd_burst_descr(tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, proto_item * item, int pos, uint16_t len)
3267 int tlvpos, endtlvpos;
3268 uint8_t tlvtype;
3269 uint32_t i, tlvlen;
3270 proto_tree *burst_tree;
3271 proto_item *burst_item, *burst_len_item;
3272 unsigned iuc;
3274 tlvpos = pos;
3275 endtlvpos = tlvpos + len;
3276 proto_tree_add_item_ret_uint (tree, hf_docsis_ucd_iuc, tvb, tlvpos++, 1, ENC_BIG_ENDIAN, &iuc);
3277 proto_item_append_text(item, ": IUC %d (%s)", iuc, val_to_str_const(iuc,iuc_vals, "Unknown IUC"));
3278 while (tlvpos < endtlvpos)
3280 tlvtype = tvb_get_uint8 (tvb, tlvpos);
3281 burst_tree = proto_tree_add_subtree (tree, tvb, tlvpos, -1,
3282 ett_docsis_burst_tlv, &burst_item,
3283 val_to_str(tlvtype, burst_tlv_vals,
3284 "Unknown TLV (%u)"));
3285 proto_tree_add_uint (burst_tree, hf_docsis_ucd_burst_type, tvb, tlvpos++, 1, tlvtype);
3286 burst_len_item = proto_tree_add_item_ret_uint (burst_tree, hf_docsis_ucd_burst_length, tvb, tlvpos++, 1, ENC_NA, &tlvlen);
3287 proto_item_set_len(burst_item, tlvlen + 2);
3288 switch (tlvtype)
3290 case UCD_MODULATION:
3291 if (tlvlen == 1)
3293 proto_tree_add_item (burst_tree, hf_docsis_burst_mod_type, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3295 else
3297 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3299 break;
3300 case UCD_DIFF_ENCODING:
3301 if (tlvlen == 1)
3303 proto_tree_add_item (burst_tree, hf_docsis_burst_diff_encoding, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3305 else
3307 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3309 break;
3310 case UCD_PREAMBLE_LEN:
3311 if (tlvlen == 2)
3313 proto_tree_add_item (burst_tree, hf_docsis_burst_preamble_len, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3315 else
3317 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3319 break;
3320 case UCD_PREAMBLE_VAL_OFF:
3321 if (tlvlen == 2)
3323 proto_tree_add_item (burst_tree, hf_docsis_burst_preamble_val_off, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3325 else
3327 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3329 break;
3330 case UCD_FEC:
3331 if (tlvlen == 1)
3333 proto_tree_add_item (burst_tree, hf_docsis_burst_fec, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3335 else
3337 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3339 break;
3340 case UCD_FEC_CODEWORD:
3341 if (tlvlen == 1)
3343 proto_tree_add_item (burst_tree, hf_docsis_burst_fec_codeword, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3345 else
3347 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3349 break;
3350 case UCD_SCRAMBLER_SEED:
3351 if (tlvlen == 2)
3353 proto_tree_add_item (burst_tree, hf_docsis_burst_scrambler_seed, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3355 else
3357 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3359 break;
3360 case UCD_MAX_BURST:
3361 if (tlvlen == 1)
3363 proto_tree_add_item (burst_tree, hf_docsis_burst_max_burst, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3365 else
3367 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3369 break;
3370 case UCD_GUARD_TIME:
3371 if (tlvlen == 1)
3373 proto_tree_add_item (burst_tree, hf_docsis_burst_guard_time, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3375 else
3377 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3379 break;
3380 case UCD_LAST_CW_LEN:
3381 if (tlvlen == 1)
3383 proto_tree_add_item (burst_tree, hf_docsis_burst_last_cw_len, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3385 else
3387 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3389 break;
3390 case UCD_SCRAMBLER_ONOFF:
3391 if (tlvlen == 1)
3393 proto_tree_add_item (burst_tree, hf_docsis_burst_scrambler_onoff, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3395 else
3397 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3399 break;
3400 case UCD_RS_INT_DEPTH:
3401 if (tlvlen == 1)
3403 proto_tree_add_item (burst_tree, hf_docsis_rs_int_depth, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3405 else
3407 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3409 break;
3410 case UCD_RS_INT_BLOCK:
3411 if (tlvlen == 2)
3413 proto_tree_add_item (burst_tree, hf_docsis_rs_int_block, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3415 else
3417 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3419 break;
3420 case UCD_PREAMBLE_TYPE:
3421 if (tlvlen == 1)
3423 proto_tree_add_item (burst_tree, hf_docsis_preamble_type, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3425 else
3427 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3429 break;
3430 case UCD_SCMDA_SCRAMBLER_ONOFF:
3431 if (tlvlen == 1)
3433 proto_tree_add_item (burst_tree, hf_docsis_ucd_scdma_scrambler_onoff, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3435 else
3437 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3439 break;
3440 case UCD_SCDMA_CODES_PER_SUBFRAME:
3441 if (tlvlen == 1)
3443 proto_tree_add_item (burst_tree, hf_docsis_ucd_scdma_codes_per_subframe, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3445 else
3447 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3449 break;
3450 case UCD_SCDMA_FRAMER_INT_STEP_SIZE:
3451 if (tlvlen == 1)
3453 proto_tree_add_item (burst_tree, hf_docsis_ucd_scdma_framer_int_step_size, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3455 else
3457 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3459 break;
3460 case UCD_TCM_ENABLED:
3461 if (tlvlen == 1)
3463 proto_tree_add_item (burst_tree, hf_docsis_ucd_tcm_enabled, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3465 else
3467 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3469 break;
3470 case UCD_SUBC_INIT_RANG:
3471 if (tlvlen == 2)
3473 proto_tree_add_item (burst_tree, hf_docsis_subc_init_rang, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3475 else
3477 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3479 break;
3480 case UCD_SUBC_FINE_RANG:
3481 if (tlvlen == 2)
3483 proto_tree_add_item (burst_tree, hf_docsis_subc_fine_rang, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3485 else
3487 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3489 break;
3490 case UCD_OFDMA_PROFILE:
3491 if ((tlvlen % 2) == 0)
3493 for(i =0; i < tlvlen; i+=2) {
3494 proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_mod_order, tvb, tlvpos + i, 1, ENC_BIG_ENDIAN);
3495 proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_pilot_pattern, tvb, tlvpos + i, 1, ENC_BIG_ENDIAN);
3496 proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_num_add_minislots, tvb, tlvpos + i + 1, 1, ENC_BIG_ENDIAN);
3499 else
3501 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u (even length expected)", tlvlen);
3503 break;
3504 case UCD_OFDMA_IR_POWER_CONTROL:
3505 if (tlvlen == 2)
3507 proto_tree_add_item (burst_tree, hf_docsis_ofdma_ir_pow_ctrl_start_pow, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3508 proto_tree_add_item (burst_tree, hf_docsis_ofdma_ir_pow_ctrl_step_size, tvb, tlvpos + 1, tlvlen, ENC_BIG_ENDIAN);
3510 else
3512 expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3514 break;
3516 } /* switch(tlvtype) */
3518 tlvpos += tlvlen;
3519 } /* while (tlvpos < endtlvpos) */
3523 static int
3524 dissect_any_ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, int proto_id, int type_number)
3526 int pos;
3527 uint32_t i, upchid, length;
3528 uint8_t type, symrate;
3529 proto_tree *ucd_tree, *tlv_tree;
3530 proto_item *ucd_item, *tlv_item, *tlv_len_item;
3532 ucd_item = proto_tree_add_item(tree, proto_id, tvb, 0, -1, ENC_NA);
3533 ucd_tree = proto_item_add_subtree (ucd_item, ett_docsis_ucd);
3534 proto_tree_add_item_ret_uint (ucd_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &upchid);
3535 proto_tree_add_item (ucd_tree, hf_docsis_ucd_config_ch_cnt, tvb, 1, 1, ENC_BIG_ENDIAN);
3536 proto_tree_add_item (ucd_tree, hf_docsis_ucd_mini_slot_size, tvb, 2, 1, ENC_BIG_ENDIAN);
3537 proto_tree_add_item (ucd_tree, hf_docsis_mgt_down_chid, tvb, 3, 1, ENC_BIG_ENDIAN);
3539 /* if the upstream Channel ID is 0 then this is for Telephony Return) */
3540 if (upchid > 0)
3541 col_add_fstr (pinfo->cinfo, COL_INFO,
3542 "Type %d UCD Message: Channel ID = %u (U%u)", type_number, upchid,
3543 upchid - 1);
3544 else
3545 col_add_fstr (pinfo->cinfo, COL_INFO,
3546 "Type %d UCD Message: Channel ID = %u (Telephony Return)",
3547 type_number, upchid);
3549 pos = 4;
3550 while (tvb_reported_length_remaining(tvb, pos) > 0)
3552 type = tvb_get_uint8 (tvb, pos);
3553 tlv_tree = proto_tree_add_subtree(ucd_tree, tvb, pos, -1,
3554 ett_docsis_tlv, &tlv_item,
3555 val_to_str(type, channel_tlv_vals,
3556 "Unknown TLV (%u)"));
3557 proto_tree_add_uint (tlv_tree, hf_docsis_ucd_type, tvb, pos, 1, type);
3558 pos++;
3559 tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_ucd_length, tvb, pos, 1, ENC_NA, &length);
3560 pos++;
3561 proto_item_set_len(tlv_item, length + 2);
3563 switch (type)
3565 case UCD_SYMBOL_RATE:
3566 if (length == 1)
3568 symrate = tvb_get_uint8 (tvb, pos);
3569 proto_tree_add_uint (tlv_tree, hf_docsis_ucd_symbol_rate, tvb, pos, length, symrate * 160);
3571 else
3573 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3575 break;
3576 case UCD_FREQUENCY:
3577 if (length == 4)
3579 proto_tree_add_item (tlv_tree, hf_docsis_ucd_frequency, tvb, pos, length, ENC_BIG_ENDIAN);
3581 else
3583 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3585 break;
3586 case UCD_PREAMBLE:
3587 proto_tree_add_item (tlv_tree, hf_docsis_ucd_preamble_pat, tvb, pos, length, ENC_NA);
3588 break;
3589 case UCD_BURST_DESCR:
3590 case UCD_BURST_DESCR5: /* DOCSIS 2.0 Upstream Channel Descriptor */
3591 case UCD_BURST_DESCR23:
3592 dissect_ucd_burst_descr(tvb, pinfo, tlv_tree, tlv_item, pos, length);
3593 break;
3594 case UCD_EXT_PREAMBLE:
3595 proto_tree_add_item (tlv_tree, hf_docsis_ucd_ext_preamble_pat, tvb, pos, length, ENC_NA);
3596 break;
3597 case UCD_SCDMA_MODE_ENABLED:
3598 if (length == 1)
3600 proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_mode_enabled, tvb, pos, length, ENC_BIG_ENDIAN);
3602 else
3604 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3606 break;
3607 case UCD_SCDMA_SPREADING_INTERVAL:
3608 if (length == 1)
3610 proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_spreading_interval, tvb, pos, length, ENC_NA);
3612 else
3614 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3616 break;
3617 case UCD_SCDMA_CODES_PER_MINI_SLOT:
3618 if (length == 1)
3620 proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_codes_per_mini_slot, tvb, pos, length, ENC_NA);
3622 else
3624 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3626 break;
3627 case UCD_SCDMA_ACTIVE_CODES:
3628 if (length == 1)
3630 proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_active_codes, tvb, pos, length, ENC_NA);
3632 else
3634 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3636 break;
3637 case UCD_SCDMA_CODE_HOPPING_SEED:
3638 if (length == 2)
3640 proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_code_hopping_seed, tvb, pos, length, ENC_NA);
3642 else
3644 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3646 break;
3647 case UCD_SCDMA_US_RATIO_NUM:
3648 if (length == 2)
3650 proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_us_ratio_num, tvb, pos, length, ENC_NA);
3652 else
3654 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3656 break;
3657 case UCD_SCDMA_US_RATIO_DENOM:
3658 if (length == 2)
3660 proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_us_ratio_denom, tvb, pos, length, ENC_NA);
3662 else
3664 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3666 break;
3667 case UCD_SCDMA_TIMESTAMP_SNAPSHOT:
3668 if (length == 9)
3670 proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_timestamp_snapshot, tvb, pos, length, ENC_NA);
3672 else
3674 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3676 break;
3677 case UCD_MAINTAIN_POWER_SPECTRAL_DENSITY:
3678 if (length == 1)
3680 proto_tree_add_item (tlv_tree, hf_docsis_ucd_maintain_power_spectral_density, tvb, pos, length, ENC_BIG_ENDIAN);
3682 else
3684 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3686 break;
3687 case UCD_RANGING_REQUIRED:
3688 if (length == 1)
3690 proto_tree_add_item (tlv_tree, hf_docsis_ucd_ranging_required, tvb, pos, length, ENC_BIG_ENDIAN);
3692 else
3694 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3696 break;
3697 case UCD_MAX_SCHEDULED_CODES:
3698 if (length == 1)
3700 proto_tree_add_item (tlv_tree, hf_docsis_ucd_max_scheduled_codes, tvb, pos, length, ENC_NA);
3702 else
3704 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3706 break;
3707 case UCD_RANGING_HOLD_OFF_PRIORITY_FIELD:
3708 if (length == 4)
3710 static int * const ucd_rnghoff[] = {
3711 &hf_docsis_ucd_rnghoff_cm,
3712 &hf_docsis_ucd_rnghoff_erouter,
3713 &hf_docsis_ucd_rnghoff_emta,
3714 &hf_docsis_ucd_rnghoff_estb,
3715 &hf_docsis_ucd_rnghoff_rsvd,
3716 &hf_docsis_ucd_rnghoff_id_ext,
3717 NULL
3720 proto_tree_add_bitmask_list(tlv_tree, tvb, pos, length, ucd_rnghoff, ENC_BIG_ENDIAN);
3722 else
3724 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3726 break;
3727 case UCD_RANGING_CHANNEL_CLASS_ID:
3728 if (length == 4)
3730 static int * const ucd_chan_class_id[] = {
3731 &hf_docsis_ucd_chan_class_id_cm,
3732 &hf_docsis_ucd_chan_class_id_erouter,
3733 &hf_docsis_ucd_chan_class_id_emta,
3734 &hf_docsis_ucd_chan_class_id_estb,
3735 &hf_docsis_ucd_chan_class_id_rsvd,
3736 &hf_docsis_ucd_chan_class_id_id_ext,
3737 NULL
3740 proto_tree_add_bitmask_list(tlv_tree, tvb, pos, length, ucd_chan_class_id, ENC_BIG_ENDIAN);
3742 else
3744 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3746 break;
3747 case UCD_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING:
3748 if (length == 1)
3750 proto_tree_add_item (tlv_tree, hf_docsis_ucd_active_code_hopping, tvb, pos, length, ENC_NA);
3752 else
3754 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3756 break;
3757 case UCD_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES:
3758 if (length == 16)
3760 proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_selection_active_codes, tvb, pos, length, ENC_NA);
3762 else
3764 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3766 break;
3767 case UCD_HIGHER_UCD_FOR_SAME_UCID:
3768 if (length == 1)
3770 proto_tree_add_item (tlv_tree, hf_docsis_ucd_higher_ucd_for_same_ucid, tvb, pos, length, ENC_NA);
3771 proto_tree_add_item (tlv_tree, hf_docsis_ucd_higher_ucd_for_same_ucid_resv, tvb, pos, length, ENC_BIG_ENDIAN);
3773 else
3775 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3777 break;
3778 case UCD_CHANGE_IND_BITMASK:
3779 if (length == 2)
3781 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_subc_excl_band, tvb, pos + 1, 1, ENC_NA);
3782 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_unused_subc, tvb, pos + 1, 1, ENC_NA);
3783 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_other_subc, tvb, pos + 1, 1, ENC_NA);
3784 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc5, tvb, pos + 1, 1, ENC_NA);
3785 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc6, tvb, pos + 1, 1, ENC_NA);
3786 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc9, tvb, pos + 1, 1, ENC_NA);
3787 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc10, tvb, pos + 1, 1, ENC_NA);
3788 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc11, tvb, pos + 1, 1, ENC_NA);
3789 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc12, tvb, pos, 1, ENC_NA);
3790 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc13, tvb, pos, 1, ENC_NA);
3791 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc3_or_4, tvb, pos, 1, ENC_NA);
3792 proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_reserved, tvb, pos, 1, ENC_NA);
3794 else
3796 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3798 break;
3799 case UCD_OFDMA_TIMESTAMP_SNAPSHOT:
3800 if (length == 9)
3802 static int* const timestamp_snapshot_parts[] = {
3803 &hf_docsis_ucd_ofdma_timestamp_snapshot_reserved,
3804 &hf_docsis_ucd_ofdma_timestamp_snapshot_d30timestamp,
3805 &hf_docsis_ucd_ofdma_timestamp_snapshot_4msbits_of_div20,
3806 NULL
3808 proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_timestamp_snapshot, tvb, pos, length, ENC_NA);
3809 proto_tree_add_bitmask_list(tlv_tree, tvb, pos, 5, timestamp_snapshot_parts, ENC_BIG_ENDIAN);
3810 proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_timestamp_snapshot_minislot_count, tvb, pos+5, length-5, ENC_NA);
3812 else
3814 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3816 break;
3817 case UCD_OFDMA_CYCLIC_PREFIX_SIZE:
3818 if (length == 1)
3820 proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_cyclic_prefix_size, tvb, pos, length, ENC_NA);
3822 else
3824 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3826 break;
3827 case UCD_OFDMA_ROLLOFF_PERIOD_SIZE:
3828 if (length == 1)
3830 proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_rolloff_period_size, tvb, pos, length, ENC_NA);
3832 else
3834 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3836 break;
3837 case UCD_SUBCARRIER_SPACING:
3838 if (length == 1)
3840 proto_tree_add_item (tlv_tree, hf_docsis_ucd_subc_spacing, tvb, pos, length, ENC_NA);
3842 else
3844 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3846 break;
3847 case UCD_CENTER_FREQ_SUBC_0:
3848 if (length == 4)
3850 proto_tree_add_item (tlv_tree, hf_docsis_ucd_cent_freq_subc0, tvb, pos, length, ENC_NA);
3852 else
3854 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3856 break;
3857 case UCD_SUBC_EXCL_BAND:
3858 if ((length % 4) == 0)
3860 for(i = 0; i < length; i+=4) {
3861 proto_tree_add_item (tlv_tree, hf_docsis_ucd_subcarrier_range, tvb, pos+i, 4, ENC_NA);
3864 else
3866 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3868 break;
3869 case UCD_UNUSED_SUBC_SPEC:
3870 if ((length % 4) == 0)
3872 for(i = 0; i < length; i+=4) {
3873 proto_tree_add_item (tlv_tree, hf_docsis_ucd_subcarrier_range, tvb, pos+i, 4, ENC_NA);
3876 else
3878 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3880 break;
3881 case UCD_SYMB_IN_OFDMA_FRAME:
3882 if (length == 1)
3884 proto_tree_add_item (tlv_tree, hf_docsis_ucd_symb_ofdma_frame, tvb, pos, length, ENC_NA);
3886 else
3888 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3890 break;
3891 case UCD_RAND_SEED:
3892 if (length == 3)
3894 proto_tree_add_item (tlv_tree, hf_docsis_ucd_rand_seed, tvb, pos, length, ENC_NA);
3896 else
3898 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3900 break;
3901 case EXTENDED_US_CHANNEL:
3902 if (length == 1)
3904 proto_tree_add_item (tlv_tree, hf_docsis_ucd_extended_us_channel, tvb, pos, length, ENC_NA);
3906 else
3908 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3910 break;
3911 } /* switch(type) */
3912 pos += length;
3913 } /* tvb_reported_length_remaining(tvb, pos) > 0 */
3915 return tvb_captured_length(tvb);
3918 static int
3919 dissect_ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
3921 return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_ucd, MGT_UCD);
3924 static int
3925 dissect_any_map (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, uint8_t version, void* data _U_)
3927 uint32_t i, numie, upchid, ucd_count, cat = 0, ie;
3928 int pos;
3929 proto_item *it;
3930 proto_tree *map_tree;
3931 static int * const ies[] = {
3932 &hf_docsis_map_sid,
3933 &hf_docsis_map_iuc,
3934 &hf_docsis_map_offset,
3935 NULL
3938 static int * const probe_ies[] = {
3939 &hf_docsis_map_sid,
3940 &hf_docsis_map_mer,
3941 &hf_docsis_map_pw,
3942 &hf_docsis_map_eq,
3943 &hf_docsis_map_st,
3944 &hf_docsis_map_probe_frame,
3945 &hf_docsis_map_symbol_in_frame,
3946 &hf_docsis_map_start_subc,
3947 &hf_docsis_map_subc_skip,
3948 NULL
3951 static int * const probe_ies_ect[] = {
3952 &hf_docsis_map_sid,
3953 &hf_docsis_map_mer,
3954 &hf_docsis_map_pw,
3955 &hf_docsis_map_eq,
3956 &hf_docsis_map_st,
3957 &hf_docsis_map_probe_frame,
3958 &hf_docsis_map_symbol_in_frame,
3959 &hf_docsis_map_start_subc,
3960 &hf_docsis_map_ect,
3961 NULL
3964 switch (version) {
3965 case 1:
3966 it = proto_tree_add_item(tree, proto_docsis_map_v1, tvb, 0, -1, ENC_NA);
3967 break;
3968 case 5:
3969 it = proto_tree_add_item(tree, proto_docsis_map_v5, tvb, 0, -1, ENC_NA);
3970 break;
3971 default:
3972 it = proto_tree_add_item(tree, proto_docsis_map_v1, tvb, 0, -1, ENC_NA);
3973 expert_add_info_format(pinfo, it, &ei_docsis_mgmt_version_unknown, "Unknown MAP MAC Management version: %u", version);
3974 return tvb_captured_length(tvb);
3977 map_tree = proto_item_add_subtree (it, ett_docsis_map);
3979 proto_tree_add_item_ret_uint (map_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &upchid);
3980 proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_ucd_count, tvb, 1, 1, ENC_BIG_ENDIAN, &ucd_count);
3981 switch (version) {
3982 case 1:
3983 proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_numie, tvb, 2, 1, ENC_BIG_ENDIAN, &numie);
3984 proto_tree_add_item (map_tree, hf_docsis_map_rsvd, tvb, 3, 1, ENC_BIG_ENDIAN);
3985 break;
3986 case 5:
3987 proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_numie_v5, tvb, 2, 2, ENC_BIG_ENDIAN, &numie);
3988 proto_tree_add_item (map_tree, hf_docsis_map_rsvd_v5, tvb, 3, 1, ENC_BIG_ENDIAN);
3989 proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_cat, tvb, 3, 1, ENC_BIG_ENDIAN, &cat);
3990 break;
3991 default:
3992 it = proto_tree_add_item(tree, proto_docsis_map_v1, tvb, 0, -1, ENC_NA);
3993 expert_add_info_format(pinfo, it, &ei_docsis_mgmt_version_unknown, "Unknown MAP MAC Management version: %u", version);
3994 return tvb_captured_length(tvb);
3997 if (upchid > 0)
3998 col_add_fstr (pinfo->cinfo, COL_INFO,
3999 "Map Message: Version: %d, Channel ID = %u (U%u), UCD Count = %u, # IE's = %u",
4000 version, upchid, upchid - 1, ucd_count, numie);
4001 else
4002 col_add_fstr (pinfo->cinfo, COL_INFO,
4003 "Map Message: Version: %d, Channel ID = %u (Telephony Return), UCD Count = %u, # IE's = %u",
4004 version, upchid, ucd_count, numie);
4006 proto_tree_add_item (map_tree, hf_docsis_map_alloc_start, tvb, 4, 4, ENC_BIG_ENDIAN);
4007 if (cat == 0) {
4008 proto_tree_add_item (map_tree, hf_docsis_map_ack_time, tvb, 8, 4, ENC_BIG_ENDIAN);
4009 proto_tree_add_item (map_tree, hf_docsis_map_rng_start, tvb, 12, 1, ENC_BIG_ENDIAN);
4010 proto_tree_add_item (map_tree, hf_docsis_map_rng_end, tvb, 13, 1, ENC_BIG_ENDIAN);
4011 proto_tree_add_item (map_tree, hf_docsis_map_data_start, tvb, 14, 1, ENC_BIG_ENDIAN);
4012 proto_tree_add_item (map_tree, hf_docsis_map_data_end, tvb, 15, 1, ENC_BIG_ENDIAN);
4014 pos = 16;
4015 for (i = 0; i < numie; i++)
4017 proto_tree_add_bitmask_with_flags(map_tree, tvb, pos, hf_docsis_map_ie, ett_docsis_map_ie, ies, ENC_BIG_ENDIAN, BMT_NO_FLAGS);
4018 pos = pos + 4;
4021 if (cat == 1) {
4022 pos = 8;
4023 for (i = 0; i < numie; i++)
4025 ie = tvb_get_uint32(tvb, pos, ENC_BIG_ENDIAN);
4026 if ((ie & (MAP_PROBE_IE_PW_MASK | MAP_PROBE_IE_ST_MASK)) == 0)
4027 proto_tree_add_bitmask_with_flags(map_tree, tvb, pos, hf_docsis_map_probe_ie, ett_docsis_map_probe_ie, probe_ies_ect, ENC_BIG_ENDIAN, BMT_NO_FLAGS);
4028 else
4029 proto_tree_add_bitmask_with_flags(map_tree, tvb, pos, hf_docsis_map_probe_ie, ett_docsis_map_probe_ie, probe_ies, ENC_BIG_ENDIAN, BMT_NO_FLAGS);
4030 pos = pos + 4;
4034 return tvb_captured_length(tvb);
4038 static int dissect_map_v1 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_) {
4039 return dissect_any_map(tvb, pinfo, tree, MAP_v1, data);
4042 static int dissect_map_v5 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_) {
4043 return dissect_any_map(tvb, pinfo, tree, MAP_v5, data);
4046 static int
4047 dissect_rngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4049 proto_item *it;
4050 proto_tree *rngreq_tree;
4051 uint32_t sid;
4052 uint8_t version;
4054 it = proto_tree_add_item(tree, proto_docsis_rngreq, tvb, 0, -1, ENC_NA);
4055 rngreq_tree = proto_item_add_subtree (it, ett_docsis_rngreq);
4057 version = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_docsis_mgmt, KEY_MGMT_VERSION));
4058 if (version == 1) {
4059 proto_tree_add_item (rngreq_tree, hf_docsis_rngreq_sid_field_bit15_14, tvb, 0, 1, ENC_BIG_ENDIAN);
4061 if (version == 5) {
4062 //RNG-REQ sent to 3.1 CMTS
4063 proto_tree_add_item (rngreq_tree, hf_docsis_rngreq_sid_field_bit15, tvb, 0, 1, ENC_BIG_ENDIAN);
4064 proto_tree_add_item (rngreq_tree, hf_docsis_rngreq_sid_field_bit14, tvb, 0, 1, ENC_BIG_ENDIAN);
4066 proto_tree_add_item_ret_uint (rngreq_tree, hf_docsis_rngreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
4068 if (sid > 0)
4069 col_add_fstr (pinfo->cinfo, COL_INFO, "Ranging Request: SID = %u",
4070 sid);
4071 else
4072 col_set_str(pinfo->cinfo, COL_INFO, "Initial Ranging Request SID = 0");
4074 proto_tree_add_item (rngreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN);
4075 proto_tree_add_item (rngreq_tree, hf_docsis_rngreq_pend_compl, tvb, 3, 1, ENC_BIG_ENDIAN);
4077 return tvb_captured_length(tvb);
4080 static void
4081 dissect_rngrsp_transmit_equalization_encodings_scdma_tdma(tvbuff_t * tvb, proto_item * it, unsigned start, uint16_t len)
4083 uint16_t i;
4084 proto_tree *transmit_equalization_encodings_tree, *coef_tree;
4086 transmit_equalization_encodings_tree = proto_item_add_subtree (it, ett_docsis_rngrsp_tlv_transmit_equalization_encodings);
4088 proto_tree_add_item (transmit_equalization_encodings_tree, hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_main_tap_location, tvb, start, 1, ENC_BIG_ENDIAN);
4089 proto_tree_add_item (transmit_equalization_encodings_tree, hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_number_of_forward_taps_per_symbol, tvb, start + 1, 1, ENC_BIG_ENDIAN);
4090 proto_tree_add_item (transmit_equalization_encodings_tree, hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_number_of_forward_taps_n, tvb, start + 2, 1, ENC_BIG_ENDIAN);
4091 proto_tree_add_item (transmit_equalization_encodings_tree, hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_reserved, tvb, start + 3, 1, ENC_BIG_ENDIAN);
4093 for(i=4; i < len; i+=4) {
4094 int real, imag;
4095 coef_tree = proto_tree_add_subtree_format (transmit_equalization_encodings_tree, tvb, start + i, 4, ett_docsis_rngrsp_tlv_transmit_equalization_encodings_coef, NULL, "Tap %d: ", i/4);
4096 proto_tree_add_item_ret_int (coef_tree, hf_docsis_rngrsp_trans_eq_enc_coef_real, tvb, start + i, 2, ENC_BIG_ENDIAN, &real);
4097 proto_tree_add_item_ret_int (coef_tree, hf_docsis_rngrsp_trans_eq_enc_coef_imag, tvb, start + i + 2, 2, ENC_BIG_ENDIAN, &imag);
4098 proto_item_append_text(coef_tree, "real: %f, imag: %f", (int16_t) real/16384.0, (int16_t) imag/16384.0);
4102 static void
4103 dissect_rngrsp_transmit_equalization_encodings_ofdma(tvbuff_t * tvb, proto_tree * tree, unsigned start, uint16_t len)
4105 uint16_t i;
4106 proto_item *it;
4107 proto_tree *transmit_equalization_encodings_tree, *coef_tree;
4108 unsigned lowest_subc;
4110 it = proto_tree_add_item(tree, hf_docsis_rngrsp_trans_eq_data, tvb, start, len, ENC_NA);
4111 transmit_equalization_encodings_tree = proto_item_add_subtree (it, ett_docsis_rngrsp_tlv_transmit_equalization_encodings);
4113 proto_tree_add_item_ret_uint (transmit_equalization_encodings_tree, hf_docsis_rngrsp_trans_eq_enc_lowest_subc, tvb, start, 3, ENC_BIG_ENDIAN, &lowest_subc);
4114 proto_tree_add_item (transmit_equalization_encodings_tree, hf_docsis_rngrsp_trans_eq_enc_highest_subc, tvb, start, 3, ENC_BIG_ENDIAN);
4115 for(i=3; i < len; i+=4) {
4116 int real, imag;
4117 coef_tree = proto_tree_add_subtree_format (transmit_equalization_encodings_tree, tvb, start + i, 4, ett_docsis_rngrsp_tlv_transmit_equalization_encodings_coef, NULL, "Subcarrier %d: ", lowest_subc + (i-3)/4);
4118 proto_tree_add_item_ret_int (coef_tree, hf_docsis_rngrsp_trans_eq_enc_coef_real, tvb, start + i, 2, ENC_BIG_ENDIAN, &real);
4119 proto_tree_add_item_ret_int (coef_tree, hf_docsis_rngrsp_trans_eq_enc_coef_imag, tvb, start + i + 2, 2, ENC_BIG_ENDIAN, &imag);
4120 proto_item_append_text(coef_tree, "real: %f, imag: %f", (int16_t) real/16384.0, (int16_t) imag/16384.0);
4124 static void
4125 dissect_rngrsp_commanded_power(tvbuff_t * tvb, proto_tree * tree, unsigned start, uint16_t len)
4127 uint16_t pos;
4128 uint16_t i;
4129 uint8_t tlvtype, tlvlen;
4130 proto_item *it;
4131 proto_tree *commanded_power_tree;
4132 proto_tree *commanded_power_subtlv_tree;
4133 proto_item *rngrsptlv_commanded_power_subtlv;
4136 it = proto_tree_add_item(tree, hf_docsis_rngrsp_commanded_power_data, tvb, start-2, len+2, ENC_NA);
4137 commanded_power_tree = proto_item_add_subtree (it, ett_docsis_rngrsp_tlv_commanded_power);
4140 pos = start;
4141 while (pos < start + len)
4143 tlvtype = tvb_get_uint8 (tvb, pos);
4144 commanded_power_subtlv_tree = proto_tree_add_subtree(commanded_power_tree, tvb, pos, -1,
4145 ett_docsis_rngrsp_tlv_commanded_power_subtlv, &rngrsptlv_commanded_power_subtlv,
4146 val_to_str(tlvtype, rngrsp_tlv_commanded_power_subtlv_vals,
4147 "Unknown TLV (%u)"));
4148 pos++;
4149 tlvlen = tvb_get_uint8 (tvb, pos);
4150 pos++;
4152 switch (tlvtype)
4154 case RNGRSP_COMMANDED_POWER_DYNAMIC_RANGE_WINDOW:
4155 if (tlvlen == 1)
4157 proto_tree_add_item (commanded_power_subtlv_tree,
4158 hf_docsis_rngrsp_commanded_power_dynamic_range_window, tvb, pos,
4159 tlvlen, ENC_BIG_ENDIAN);
4161 break;
4162 case RNGRSP_COMMANDED_POWER_UCID_AND_POWER_LEVEL_LIST:
4163 if ((tlvlen %3)== 0)
4165 for(i=0; i < tlvlen; i+=3)
4167 proto_tree_add_item (commanded_power_subtlv_tree,
4168 hf_docsis_rngrsp_commanded_power_ucid, tvb, pos + i,
4169 1, ENC_BIG_ENDIAN);
4170 proto_tree_add_item (commanded_power_subtlv_tree,
4171 hf_docsis_rngrsp_commanded_power_trans_pow_lvl, tvb, pos + i +1,
4172 2, ENC_BIG_ENDIAN);
4175 break;
4177 pos += tlvlen;
4181 static void
4182 dissect_rngrsp_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * rngrsp_tree)
4184 proto_item *rngrsptlv_item, *it;
4185 proto_tree *rngrsptlv_tree;
4186 unsigned pos = 0;
4187 unsigned tlvlen;
4188 uint8_t tlvtype;
4191 while (tvb_reported_length_remaining(tvb, pos) > 0)
4193 tlvtype = tvb_get_uint8 (tvb, pos);
4194 rngrsptlv_tree = proto_tree_add_subtree(rngrsp_tree, tvb, pos, -1,
4195 ett_docsis_rngrsptlv, &rngrsptlv_item,
4196 val_to_str(tlvtype, rngrsp_tlv_vals,
4197 "Unknown TLV (%u)"));
4198 proto_tree_add_uint (rngrsptlv_tree, hf_docsis_rngrsp_type, tvb, pos, 1, tlvtype);
4199 pos++;
4200 tlvlen = tvb_get_uint8 (tvb, pos);
4201 if (tlvtype == RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS || tlvtype == RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS) {
4202 proto_tree_add_item_ret_uint (rngrsptlv_tree, hf_docsis_rngrsp_length, tvb, pos, 2, ENC_NA, &tlvlen);
4203 pos += 2;
4204 } else {
4205 proto_tree_add_item_ret_uint (rngrsptlv_tree, hf_docsis_rngrsp_length, tvb, pos, 1, ENC_NA, &tlvlen);
4206 pos++;
4208 proto_item_set_len(rngrsptlv_item, tlvlen + 2);
4209 switch (tlvtype)
4211 case RNGRSP_TIMING:
4212 if (tlvlen == 4)
4214 proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_timing_adj, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4216 break;
4217 case RNGRSP_PWR_LEVEL_ADJ:
4218 if (tlvlen == 1)
4220 proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_power_adj, tvb, pos, tlvlen, ENC_NA);
4222 break;
4223 case RNGRSP_OFFSET_FREQ_ADJ:
4224 if (tlvlen == 2)
4226 proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_freq_adj, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4228 break;
4229 case RNGRSP_TRANSMIT_EQ_ADJ:
4230 it = proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_xmit_eq_adj, tvb, pos, tlvlen, ENC_NA);
4231 dissect_rngrsp_transmit_equalization_encodings_scdma_tdma(tvb, it, pos, tlvlen);
4232 break;
4233 case RNGRSP_RANGING_STATUS:
4234 if (tlvlen == 1)
4236 proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_ranging_status, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4238 break;
4239 case RNGRSP_DOWN_FREQ_OVER:
4240 if (tlvlen == 4)
4242 proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_down_freq_over, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4244 break;
4245 case RNGRSP_UP_CHID_OVER:
4246 if (tlvlen == 1)
4248 proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_upstream_ch_over, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4250 break;
4251 case RNGRSP_TRANSMIT_EQ_SET:
4252 it = proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_xmit_eq_set, tvb, pos, tlvlen, ENC_NA);
4253 dissect_rngrsp_transmit_equalization_encodings_scdma_tdma(tvb, it, pos, tlvlen);
4254 break;
4255 case RNGRSP_T4_TIMEOUT_MULTIPLIER:
4256 if (tlvlen == 1)
4257 proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_rngrsp_t4_timeout_multiplier, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4258 else
4260 expert_add_info_format(pinfo, rngrsptlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
4262 break;
4263 case RNGRSP_DYNAMIC_RANGE_WINDOW_UPPER_EDGE:
4264 if (tlvlen == 1)
4265 proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_dynamic_range_window_upper_edge, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4266 else
4268 expert_add_info_format(pinfo, rngrsptlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
4270 break;
4271 case RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS:
4272 dissect_rngrsp_transmit_equalization_encodings_ofdma(tvb, rngrsptlv_tree, pos, tlvlen);
4273 break;
4274 case RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS:
4275 dissect_rngrsp_transmit_equalization_encodings_ofdma(tvb, rngrsptlv_tree, pos, tlvlen);
4276 break;
4277 case RNGRSP_COMMANDED_POWER:
4278 case RNGRSP_EXT_US_COMMANDED_POWER:
4279 dissect_rngrsp_commanded_power(tvb, rngrsptlv_tree, pos, tlvlen);
4280 break;
4282 default:
4283 proto_tree_add_item (rngrsp_tree, hf_docsis_rngrsp_tlv_unknown, tvb, pos, tlvlen, ENC_NA);
4284 } /* switch(tlvtype) */
4285 pos += tlvlen;
4286 } /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
4289 static int
4290 dissect_rngrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4292 proto_item *it;
4293 proto_tree *rngrsp_tree;
4294 tvbuff_t *tlv_tvb = NULL;
4295 uint32_t sid, upchid, id;
4297 it = proto_tree_add_item(tree, proto_docsis_rngrsp, tvb, 0, -1, ENC_NA);
4298 rngrsp_tree = proto_item_add_subtree (it, ett_docsis_rngrsp);
4300 proto_tree_add_item_ret_uint (rngrsp_tree, hf_docsis_rngrsp_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
4301 proto_tree_add_item_ret_uint (rngrsp_tree, hf_docsis_mgt_upstream_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &upchid);
4303 if (upchid > 0)
4304 col_add_fstr (pinfo->cinfo, COL_INFO,
4305 "Ranging Response: SID = %u, Upstream Channel = %u (U%u)",
4306 sid, upchid, upchid - 1);
4307 else
4308 col_add_fstr (pinfo->cinfo, COL_INFO,
4309 "Ranging Response: SID = %u, Telephony Return", sid);
4312 id = (upchid << 16) + sid;
4313 tlv_tvb = dissect_multipart(tvb, pinfo, rngrsp_tree, data, MGT_RNG_RSP, id, 3);
4314 if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
4315 dissect_rngrsp_tlv(tlv_tvb, pinfo, rngrsp_tree);
4316 return tvb_captured_length(tvb);
4319 static int
4320 dissect_regreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4322 proto_item *it;
4323 proto_tree *regreq_tree;
4324 uint32_t sid;
4325 tvbuff_t *next_tvb;
4327 it = proto_tree_add_item(tree, proto_docsis_regreq, tvb, 0, -1, ENC_NA);
4328 regreq_tree = proto_item_add_subtree (it, ett_docsis_regreq);
4330 proto_tree_add_item_ret_uint (regreq_tree, hf_docsis_regreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
4332 col_add_fstr (pinfo->cinfo, COL_INFO, "Registration Request SID = %u", sid);
4334 /* Call Dissector for Appendix C TlV's */
4335 next_tvb = tvb_new_subset_remaining (tvb, 2);
4336 call_dissector (docsis_tlv_handle, next_tvb, pinfo, regreq_tree);
4337 return tvb_captured_length(tvb);
4340 static int
4341 dissect_regrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4343 proto_item *it;
4344 proto_tree *regrsp_tree;
4345 uint32_t sid, response;
4346 tvbuff_t *next_tvb;
4348 it = proto_tree_add_item(tree, proto_docsis_regrsp, tvb, 0, -1, ENC_NA);
4349 regrsp_tree = proto_item_add_subtree (it, ett_docsis_regrsp);
4350 proto_tree_add_item_ret_uint (regrsp_tree, hf_docsis_regrsp_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
4351 proto_tree_add_item_ret_uint (regrsp_tree, hf_docsis_regrsp_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4353 col_add_fstr (pinfo->cinfo, COL_INFO,
4354 "Registration Response SID = %u (%s)", sid,
4355 val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
4357 /* Call Dissector for Appendix C TLVs */
4358 next_tvb = tvb_new_subset_remaining (tvb, 3);
4359 call_dissector (docsis_tlv_handle, next_tvb, pinfo, regrsp_tree);
4360 return tvb_captured_length(tvb);
4363 static int
4364 dissect_uccreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4366 proto_item *it;
4367 proto_tree *uccreq_tree;
4368 uint32_t chid;
4370 it = proto_tree_add_item (tree, proto_docsis_uccreq, tvb, 0, -1, ENC_NA);
4371 uccreq_tree = proto_item_add_subtree (it, ett_docsis_uccreq);
4373 proto_tree_add_item_ret_uint (uccreq_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &chid);
4375 col_add_fstr (pinfo->cinfo, COL_INFO,
4376 "Upstream Channel Change request: Channel ID = %u (U%u)",
4377 chid, (chid > 0 ? chid - 1 : chid));
4379 return tvb_captured_length(tvb);
4382 static int
4383 dissect_uccrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4385 proto_item *it;
4386 proto_tree *uccrsp_tree;
4387 uint32_t chid;
4389 it = proto_tree_add_item(tree, proto_docsis_uccrsp, tvb, 0, -1, ENC_NA);
4390 uccrsp_tree = proto_item_add_subtree (it, ett_docsis_uccrsp);
4392 proto_tree_add_item_ret_uint (uccrsp_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &chid);
4394 col_add_fstr (pinfo->cinfo, COL_INFO,
4395 "Upstream Channel Change response: Channel ID = %u (U%u)",
4396 chid, (chid > 0 ? chid - 1 : chid));
4398 return tvb_captured_length(tvb);
4401 /* The dissect_attrs() function does the actual work to dissect the
4402 * attributes. It's called recursively, to dissect embedded attributes
4404 static void
4405 // NOLINTNEXTLINE(misc-no-recursion)
4406 dissect_attrs(tvbuff_t * tvb, packet_info * pinfo, proto_item *item _U_, proto_tree *tree, int pos, int length)
4408 proto_item *tlv_item, *tlv_subitem;
4409 proto_tree *tlv_tree, *tlv_subtree;
4410 uint32_t tlv_type, tlv_subtype;
4411 int tlv_length, end = pos + length, i, attr_end;
4413 uint32_t value;
4414 const char * label;
4415 asn1_ctx_t asn1_ctx;
4417 static int *const bpkmattr_crypto_suite[] = {
4418 &hf_docsis_bpkmattr_crypto_suite_encr,
4419 &hf_docsis_bpkmattr_crypto_suite_auth,
4420 NULL
4423 increment_dissection_depth(pinfo);
4424 while (pos + 2 < end)
4426 tlv_type = tvb_get_uint8(tvb, pos);
4427 tlv_length = tvb_get_ntohs(tvb, pos + 1);
4428 tlv_item = proto_tree_add_item(tree, hf_docsis_bpkmattr_tlv, tvb, pos, tlv_length + 3, ENC_NA);
4429 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, bpkmattr_tlv_vals, "Unknown TLV: %u"));
4430 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_bpkmattr_tlv);
4431 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
4432 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_tlv_length, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
4433 pos += 3;
4435 if (tlv_length > 1487)
4436 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "TLV length too big: %i", tlv_length);
4438 switch (tlv_type)
4440 case BPKM_SERIAL_NUM:
4441 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_serial_num, tvb, pos, tlv_length, ENC_ASCII);
4442 if (tlv_length > 255)
4443 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "TLV length too big: %i", tlv_length);
4444 break;
4445 case BPKM_MANUFACTURER_ID:
4446 if (tlv_length == 3) {
4447 tlv_subitem = proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_bpkmattr_manf_id, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
4448 label = uint_get_manuf_name_if_known(value);
4449 proto_item_append_text(tlv_subitem, " (%s)", label ? label : "unknown OUI");
4450 } else
4451 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4452 break;
4453 case BPKM_MAC_ADDR:
4454 if (tlv_length == 6)
4455 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_mac_addr, tvb, pos, tlv_length, ENC_NA);
4456 else
4457 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4458 break;
4459 case BPKM_RSA_PUB_KEY:
4460 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4461 dissect_pkcs1_RSAPublicKey(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_rsa_pub_key);
4462 break;
4463 case BPKM_CM_ID:
4464 tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_cm_id, tvb, pos, tlv_length, ENC_NA);
4465 tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_cmid);
4466 dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4467 if (tlv_length < 126)
4468 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "TLV length too small: %i", tlv_length);
4469 break;
4470 case BPKM_DISPLAY_STR:
4471 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_display_str, tvb, pos, tlv_length, ENC_ASCII);
4472 if (tlv_length > 128)
4473 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "TLV length too big: %i", tlv_length);
4474 break;
4475 case BPKM_AUTH_KEY:
4476 if (tlv_length == 96 || tlv_length == 128 || tlv_length == 256)
4477 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_auth_key, tvb, pos, tlv_length, ENC_NA);
4478 else
4479 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4480 break;
4481 case BPKM_TEK:
4482 if (tlv_length == 8 || tlv_length == 16 || tlv_length == 32)
4483 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_tek, tvb, pos, tlv_length, ENC_NA);
4484 else
4485 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4486 break;
4487 case BPKM_KEY_LIFETIME:
4488 if (tlv_length == 4)
4489 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_key_life, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4490 else
4491 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4492 break;
4493 case BPKM_KEY_SEQ_NUM:
4494 if (tlv_length == 1)
4495 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_key_seq, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4496 else
4497 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4498 break;
4499 case BPKM_HMAC_DIGEST:
4500 if (tlv_length == 20)
4501 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_hmac_digest, tvb, pos, tlv_length, ENC_NA);
4502 else
4503 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4504 break;
4505 case BPKM_SAID:
4506 if (tlv_length == 2)
4507 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_said, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4508 else
4509 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4510 break;
4511 case BPKM_TEK_PARAM:
4512 tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_tek_params, tvb, pos, tlv_length, ENC_NA);
4513 tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_tekp);
4514 dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4515 break;
4516 case BPKM_OBSOLETED:
4517 break;
4518 case BPKM_CBC_IV:
4519 if (tlv_length == 8 || tlv_length == 16)
4520 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_cbc_iv, tvb, pos, tlv_length, ENC_NA);
4521 else
4522 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4523 break;
4524 case BPKM_ERROR_CODE:
4525 if (tlv_length == 1)
4526 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_error_code, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4527 else
4528 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4529 break;
4530 case BPKM_CA_CERT:
4531 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4532 dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_ca_cert);
4533 break;
4534 case BPKM_CM_CERT:
4535 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4536 dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_cm_cert);
4537 break;
4538 case BPKM_SEC_CAPABILITIES:
4539 tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_security_cap, tvb, pos, tlv_length, ENC_NA);
4540 tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_scap);
4541 dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4542 break;
4543 case BPKM_CRYPTO_SUITE:
4544 if (tlv_length == 2)
4545 proto_tree_add_bitmask(tlv_tree, tvb, pos, hf_docsis_bpkmattr_crypto_suite,
4546 ett_docsis_bpkmattr_crypto_suite, bpkmattr_crypto_suite, ENC_BIG_ENDIAN);
4547 else
4548 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4549 break;
4550 case BPKM_CRYPTO_SUITE_LIST:
4551 tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_crypto_suite_list, tvb, pos, tlv_length, ENC_NA);
4552 tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_crypto_suite_list);
4553 for (i = 0; i < tlv_length - 1; i += 2)
4554 proto_tree_add_bitmask(tlv_subtree, tvb, pos + i, hf_docsis_bpkmattr_crypto_suite,
4555 ett_docsis_bpkmattr_crypto_suite, bpkmattr_crypto_suite, ENC_BIG_ENDIAN);
4556 if (i < tlv_length)
4557 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4558 break;
4559 case BPKM_BPI_VERSION:
4560 if (tlv_length == 1)
4561 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_bpi_version, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4562 else
4563 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4564 break;
4565 case BPKM_SA_DESCRIPTOR:
4566 tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_sa_descr, tvb, pos, tlv_length, ENC_NA);
4567 tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_sadsc);
4568 dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4569 break;
4570 case BPKM_SA_TYPE:
4571 if (tlv_length == 1)
4572 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_sa_type, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4573 else
4574 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4575 break;
4576 case BPKM_SA_QUERY:
4577 tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_sa_query, tvb, pos, tlv_length, ENC_NA);
4578 tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_saqry);
4579 dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4580 break;
4581 case BPKM_SA_QUERY_TYPE:
4582 if (tlv_length == 1)
4583 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_sa_query_type, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4584 else
4585 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4586 break;
4587 case BPKM_IP_ADDRESS:
4588 if (tlv_length == 4)
4589 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_ip_address, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4590 else
4591 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4592 break;
4593 case BPKM_DNLD_PARAMS:
4594 tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_download_param, tvb, pos, tlv_length, ENC_NA);
4595 tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_dnld);
4596 dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4597 break;
4598 case BPKM_CVC_ROOT_CA_CERT:
4599 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4600 dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_cvc_root_ca_cert);
4601 break;
4602 case BPKM_CVC_CA_CERT:
4603 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4604 dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_cvc_ca_cert);
4605 break;
4606 case BPKM_DEV_CA_CERT:
4607 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4608 dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_dev_ca_cert);
4609 break;
4610 case BPKM_ROOT_CA_CERT:
4611 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4612 dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_root_ca_cert);
4613 break;
4614 case BPKM_CM_NONCE:
4615 if (tlv_length == 8)
4616 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_cm_nonce, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4617 else
4618 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4619 break;
4620 case BPKM_MSG_SIGNATURE:
4621 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4622 dissect_cms_SignedData(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_msg_signature);
4623 break;
4624 case BPKM_KEY_EXCHANGE_SHARE:
4625 if (tlv_length > 2) {
4626 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_key_exchange_share_field_id, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4627 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_key_exchange_share_key_share, tvb, pos + 2, tlv_length - 2, ENC_NA);
4628 } else
4629 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4630 break;
4631 case BPKM_ALLOWED_BPI_VERSIONS:
4632 tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_allowed_bpi_versions, tvb, pos, tlv_length, ENC_NA);
4633 tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_allowed_bpi_versions);
4634 for (i = 0; i < tlv_length; ++i)
4635 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_allowed_bpi_version, tvb, pos + i, 1, ENC_BIG_ENDIAN);
4636 break;
4637 case BPKM_OCSP_RSP:
4638 tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_ocsp_responses, tvb, pos, tlv_length, ENC_NA);
4639 tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_ocsp_responses);
4640 asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4641 i = pos;
4642 attr_end = pos + tlv_length;
4643 while (i < attr_end)
4644 i = dissect_ocsp_OCSPResponse(false, tvb, i, &asn1_ctx, tlv_subtree, hf_docsis_bpkmattr_ocsp_response);
4645 break;
4646 case BPKM_CMTS_DESIGNATION:
4647 if (tlv_length) {
4648 tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_cmts_designation, tvb, pos, tlv_length, ENC_NA);
4649 tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_cmts_designation);
4650 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_bpkmattr_cmts_designation_data_type,
4651 tvb, pos, 1, ENC_BIG_ENDIAN, &tlv_subtype);
4652 switch (tlv_subtype)
4654 case BPKMATTR_CMTS_DESIGNATION_CERTIFICATE_FINGERPRINT:
4655 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_certificate_fingerprint,
4656 tvb, pos + 1, tlv_length - 1, ENC_NA);
4657 break;
4658 case BPKMATTR_CMTS_DESIGNATION_COMMON_NAME:
4659 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_common_name,
4660 tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4661 break;
4662 case BPKMATTR_CMTS_DESIGNATION_ORG_UNIT:
4663 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_org_unit,
4664 tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4665 break;
4666 case BPKMATTR_CMTS_DESIGNATION_ORG_NAME:
4667 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_org_name,
4668 tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4669 break;
4670 case BPKMATTR_CMTS_DESIGNATION_SERIAL_NUMBER:
4671 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_serial_number,
4672 tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4673 break;
4674 case BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_FINGERPRINT:
4675 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_issuing_ca_fingerprint,
4676 tvb, pos + 1, tlv_length - 1, ENC_NA);
4677 break;
4678 case BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_COMMON_NAME:
4679 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_issuing_ca_common_name,
4680 tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4681 break;
4682 case BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_ORG_UNIT:
4683 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_issuing_ca_org_unit,
4684 tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4685 break;
4686 case BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_ORG_NAME:
4687 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_issuing_ca_org_name,
4688 tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4689 break;
4690 case BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_SERIAL_NUMBER:
4691 proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_issuing_ca_serial_number,
4692 tvb, pos, tlv_length - 1, ENC_ASCII);
4693 break;
4695 } else
4696 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4697 break;
4698 case BPKM_CM_STATUS_CODE:
4699 if (tlv_length == 1)
4700 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_cm_status_code, tvb, pos, tlv_length, ENC_NA);
4701 else
4702 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4703 break;
4704 case BPKM_DETECTED_ERRORS:
4705 if (tlv_length == 1)
4706 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_detected_errors, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4707 else
4708 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4709 break;
4710 case BPKM_VENDOR_DEFINED:
4711 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_vendor_def, tvb, pos, tlv_length, ENC_NA);
4712 break;
4713 default:
4714 proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_vendor_def, tvb, pos, tlv_length, ENC_NA);
4715 break;
4718 pos += tlv_length;
4720 if (pos != end)
4721 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
4722 decrement_dissection_depth(pinfo);
4725 static int
4726 dissect_bpkmreq(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4728 proto_item *bpkmreq_item, *attr_item;
4729 proto_tree *bpkmreq_tree, *attr_tree;
4730 tvbuff_t *tlv_tvb = NULL;
4732 uint32_t code, id, length;
4734 bpkmreq_item = proto_tree_add_item(tree, proto_docsis_bpkmreq, tvb, 0, -1, ENC_NA);
4735 bpkmreq_tree = proto_item_add_subtree(bpkmreq_item, ett_docsis_bpkmreq);
4736 proto_tree_add_item_ret_uint(bpkmreq_tree, hf_docsis_bpkm_code, tvb, 0, 1, ENC_BIG_ENDIAN, &code);
4737 proto_tree_add_item_ret_uint(bpkmreq_tree, hf_docsis_bpkm_ident, tvb, 1, 1, ENC_BIG_ENDIAN, &id);
4738 proto_tree_add_item_ret_uint(bpkmreq_tree, hf_docsis_bpkm_length, tvb, 2, 2, ENC_BIG_ENDIAN, &length);
4740 col_add_fstr(pinfo->cinfo, COL_INFO, "BPKM Request (BPKM-REQ): %s, ID %u",
4741 val_to_str(code, code_field_vals, "Unknown Code (%u)"), id);
4743 id += code << 8;
4744 tlv_tvb = dissect_multipart(tvb, pinfo, bpkmreq_tree, data, MGT_BPKM_REQ, id, 4);
4745 if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb)) {
4746 attr_item = proto_tree_add_item(bpkmreq_tree, hf_docsis_bpkmattr, tlv_tvb, 0, length, ENC_NA);
4747 attr_tree = proto_item_add_subtree(attr_item, ett_docsis_bpkmattr);
4748 dissect_attrs(tlv_tvb, pinfo, attr_item, attr_tree, 0, length);
4749 if (length != tvb_reported_length(tlv_tvb))
4750 expert_add_info_format(pinfo, bpkmreq_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
4752 return tvb_captured_length(tvb);
4755 static int
4756 dissect_bpkmrsp(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4758 proto_item *bpkmrsp_item, *attr_item;
4759 proto_tree *bpkmrsp_tree, *attr_tree;
4760 tvbuff_t *tlv_tvb = NULL;
4762 uint32_t code, id, length;
4764 bpkmrsp_item = proto_tree_add_item(tree, proto_docsis_bpkmrsp, tvb, 0, -1, ENC_NA);
4765 bpkmrsp_tree = proto_item_add_subtree(bpkmrsp_item, ett_docsis_bpkmrsp);
4766 proto_tree_add_item_ret_uint(bpkmrsp_tree, hf_docsis_bpkm_code, tvb, 0, 1, ENC_BIG_ENDIAN, &code);
4767 proto_tree_add_item_ret_uint(bpkmrsp_tree, hf_docsis_bpkm_ident, tvb, 1, 1, ENC_BIG_ENDIAN, &id);
4768 proto_tree_add_item_ret_uint(bpkmrsp_tree, hf_docsis_bpkm_length, tvb, 2, 2, ENC_BIG_ENDIAN, &length);
4770 col_add_fstr(pinfo->cinfo, COL_INFO, "BPKM Response (BPKM-RSP): %s, ID %u",
4771 val_to_str(code, code_field_vals, "Unknown Code (%u)"), id);
4773 id += code << 8;
4774 tlv_tvb = dissect_multipart(tvb, pinfo, bpkmrsp_tree, data, MGT_BPKM_RSP, id, 4);
4775 if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb)) {
4776 attr_item = proto_tree_add_item(bpkmrsp_tree, hf_docsis_bpkmattr, tlv_tvb, 0, length, ENC_NA);
4777 attr_tree = proto_item_add_subtree(attr_item, ett_docsis_bpkmattr);
4778 dissect_attrs(tlv_tvb, pinfo, attr_item, attr_tree, 0, length);
4779 if (length != tvb_reported_length(tlv_tvb))
4780 expert_add_info_format(pinfo, bpkmrsp_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
4782 return tvb_captured_length(tvb);
4785 static int
4786 dissect_regack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4788 proto_item *it;
4789 proto_tree *regack_tree;
4790 uint32_t sid, response;
4791 tvbuff_t *next_tvb;
4793 it = proto_tree_add_item (tree, proto_docsis_regack, tvb, 0, -1, ENC_NA);
4794 regack_tree = proto_item_add_subtree (it, ett_docsis_regack);
4796 proto_tree_add_item_ret_uint (regack_tree, hf_docsis_regack_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
4797 proto_tree_add_item_ret_uint (regack_tree, hf_docsis_regack_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4799 col_add_fstr (pinfo->cinfo, COL_INFO,
4800 "Registration Acknowledge SID = %u (%s)", sid,
4801 val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
4803 /* Call Dissector for Appendix C TLVs */
4804 if(tvb_reported_length_remaining(tvb, 3) > 0 )
4806 next_tvb = tvb_new_subset_remaining (tvb, 3);
4807 call_dissector (docsis_tlv_handle, next_tvb, pinfo, regack_tree);
4810 return tvb_captured_length(tvb);
4813 static int
4814 dissect_dsareq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4816 proto_item *it;
4817 proto_tree *dsareq_tree;
4818 uint32_t transid;
4819 tvbuff_t *next_tvb;
4821 it = proto_tree_add_item(tree, proto_docsis_dsareq, tvb, 0, -1, ENC_NA);
4822 dsareq_tree = proto_item_add_subtree (it, ett_docsis_dsareq);
4824 proto_tree_add_item_ret_uint (dsareq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4826 col_add_fstr (pinfo->cinfo, COL_INFO,
4827 "Dynamic Service Addition Request Tran-id = %u ", transid);
4829 /* Call Dissector for Appendix C TLVs */
4830 next_tvb = tvb_new_subset_remaining (tvb, 2);
4831 call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsareq_tree);
4832 return tvb_captured_length(tvb);
4835 static int
4836 dissect_dsarsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4838 proto_item *it;
4839 proto_tree *dsarsp_tree;
4840 uint32_t transid, response;
4841 tvbuff_t *next_tvb;
4843 it = proto_tree_add_item (tree, proto_docsis_dsarsp, tvb, 0, -1, ENC_NA);
4844 dsarsp_tree = proto_item_add_subtree (it, ett_docsis_dsarsp);
4845 proto_tree_add_item_ret_uint (dsarsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4846 proto_tree_add_item_ret_uint (dsarsp_tree, hf_docsis_dsarsp_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4848 col_add_fstr (pinfo->cinfo, COL_INFO,
4849 "Dynamic Service Add Response ID = %u (%s)", transid,
4850 val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
4852 /* Call dissector for Appendix C TLVs */
4853 next_tvb = tvb_new_subset_remaining (tvb, 3);
4854 call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsarsp_tree);
4855 return tvb_captured_length(tvb);
4858 static int
4859 dissect_dsaack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4861 proto_item *it;
4862 proto_tree *dsaack_tree;
4863 uint32_t transid, response;
4864 tvbuff_t *next_tvb;
4866 it = proto_tree_add_item (tree, proto_docsis_dsaack, tvb, 0, -1, ENC_NA);
4867 dsaack_tree = proto_item_add_subtree (it, ett_docsis_dsaack);
4868 proto_tree_add_item_ret_uint (dsaack_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4869 proto_tree_add_item_ret_uint (dsaack_tree, hf_docsis_dsaack_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4871 col_add_fstr (pinfo->cinfo, COL_INFO,
4872 "Dynamic Service Add Acknowledge: Transaction ID = %u (%s)", transid,
4873 val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
4875 /* Call Dissector for Appendix C TLVs */
4876 next_tvb = tvb_new_subset_remaining (tvb, 3);
4877 call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsaack_tree);
4878 return tvb_captured_length(tvb);
4881 static int
4882 dissect_dscreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4884 proto_item *it;
4885 proto_tree *dscreq_tree;
4886 uint32_t transid;
4887 tvbuff_t *next_tvb;
4889 it = proto_tree_add_item (tree, proto_docsis_dscreq, tvb, 0, -1, ENC_NA);
4890 dscreq_tree = proto_item_add_subtree (it, ett_docsis_dscreq);
4892 proto_tree_add_item_ret_uint (dscreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4894 col_add_fstr (pinfo->cinfo, COL_INFO,
4895 "Dynamic Service Change Request Tran-id = %u ", transid);
4897 /* Call dissector for Appendix C TLVs */
4898 next_tvb = tvb_new_subset_remaining (tvb, 2);
4899 call_dissector (docsis_tlv_handle, next_tvb, pinfo, dscreq_tree);
4900 return tvb_captured_length(tvb);
4903 static int
4904 dissect_dscrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4906 proto_item *it;
4907 proto_tree *dscrsp_tree;
4908 uint32_t transid, response;
4909 tvbuff_t *next_tvb;
4911 it = proto_tree_add_item(tree, proto_docsis_dscrsp, tvb, 0, -1, ENC_NA);
4912 dscrsp_tree = proto_item_add_subtree (it, ett_docsis_dscrsp);
4913 proto_tree_add_item_ret_uint (dscrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4914 proto_tree_add_item_ret_uint (dscrsp_tree, hf_docsis_dscrsp_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4916 col_add_fstr (pinfo->cinfo, COL_INFO,
4917 "Dynamic Service Change Response: Transaction ID = %u (%s)", transid,
4918 val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
4920 /* Call Dissector for Appendix C TLVs */
4921 next_tvb = tvb_new_subset_remaining (tvb, 3);
4922 call_dissector (docsis_tlv_handle, next_tvb, pinfo, dscrsp_tree);
4923 return tvb_captured_length(tvb);
4926 static int
4927 dissect_dscack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4929 proto_item *it;
4930 proto_tree *dscack_tree;
4931 uint32_t transid, response;
4932 tvbuff_t *next_tvb;
4934 it = proto_tree_add_item(tree, proto_docsis_dscack, tvb, 0, -1, ENC_NA);
4935 dscack_tree = proto_item_add_subtree (it, ett_docsis_dscack);
4937 proto_tree_add_item_ret_uint (dscack_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4938 proto_tree_add_item_ret_uint (dscack_tree, hf_docsis_dscack_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4940 col_add_fstr (pinfo->cinfo, COL_INFO,
4941 "Dynamic Service Change Acknowledge: Transaction ID = %u (%s)", transid,
4942 val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
4944 /* Call Dissector for Appendix C TLVs */
4945 next_tvb = tvb_new_subset_remaining (tvb, 3);
4946 call_dissector (docsis_tlv_handle, next_tvb, pinfo, dscack_tree);
4947 return tvb_captured_length(tvb);
4950 static int
4951 dissect_dsdreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4953 proto_item *it;
4954 proto_tree *dsdreq_tree;
4955 uint32_t transid;
4956 tvbuff_t *next_tvb;
4958 it = proto_tree_add_item (tree, proto_docsis_dsdreq, tvb, 0, -1, ENC_NA);
4959 dsdreq_tree = proto_item_add_subtree (it, ett_docsis_dsdreq);
4961 proto_tree_add_item_ret_uint (dsdreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4963 col_add_fstr (pinfo->cinfo, COL_INFO,
4964 "Dynamic Service Delete Request Tran-id = %u ", transid);
4966 proto_tree_add_item (dsdreq_tree, hf_docsis_dsdreq_rsvd, tvb, 2, 2, ENC_BIG_ENDIAN);
4967 proto_tree_add_item (dsdreq_tree, hf_docsis_dsdreq_sfid, tvb, 4, 4, ENC_BIG_ENDIAN);
4969 /* Call Dissector for Appendix C TLVs */
4970 next_tvb = tvb_new_subset_remaining (tvb, 8);
4971 call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsdreq_tree);
4972 return tvb_captured_length(tvb);
4975 static int
4976 dissect_dsdrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4978 proto_item *it;
4979 proto_tree *dsdrsp_tree;
4980 uint32_t tranid, confcode;
4982 it = proto_tree_add_item(tree, proto_docsis_dsdrsp, tvb, 0, -1, ENC_NA);
4983 dsdrsp_tree = proto_item_add_subtree (it, ett_docsis_dsdrsp);
4984 proto_tree_add_item_ret_uint (dsdrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &tranid);
4985 proto_tree_add_item_ret_uint (dsdrsp_tree, hf_docsis_dsdrsp_confcode, tvb, 2, 1, ENC_BIG_ENDIAN, &confcode);
4986 proto_tree_add_item (dsdrsp_tree, hf_docsis_dsdrsp_rsvd, tvb, 3, 1, ENC_BIG_ENDIAN);
4988 col_add_fstr (pinfo->cinfo, COL_INFO,
4989 "Dynamic Service Delete Response: Transaction ID = %u (%s)",
4990 tranid, val_to_str_ext (confcode, &docsis_conf_code_ext, "%d"));
4992 return tvb_captured_length(tvb);
4995 static void
4996 dissect_dccreq_ds_params (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
4998 uint8_t type;
4999 uint32_t length;
5000 proto_tree *dcc_tree;
5001 proto_item *dcc_item, *tlv_len_item;
5002 int pos;
5004 pos = start;
5005 while ( pos < ( start + len) )
5007 type = tvb_get_uint8 (tvb, pos);
5008 dcc_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5009 ett_docsis_dccreq_ds_params, &dcc_item,
5010 val_to_str(type, ds_param_subtlv_vals,
5011 "Unknown TLV (%u)"));
5012 proto_tree_add_uint (dcc_tree, hf_docsis_dcc_ds_params_subtype, tvb, pos, 1, type);
5013 pos++;
5014 tlv_len_item = proto_tree_add_item_ret_uint (dcc_tree, hf_docsis_dcc_ds_params_length, tvb, pos, 1, ENC_NA, &length);
5015 pos++;
5016 proto_item_set_len(dcc_item, length + 2);
5018 switch (type)
5020 case DCCREQ_DS_FREQ:
5021 if (length == 4)
5023 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_freq, tvb, pos, length, ENC_BIG_ENDIAN);
5025 else
5027 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5029 break;
5030 case DCCREQ_DS_MOD_TYPE:
5031 if (length == 1)
5033 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_mod_type, tvb, pos, length, ENC_BIG_ENDIAN);
5035 else
5037 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5039 break;
5040 case DCCREQ_DS_SYM_RATE:
5041 if (length == 1)
5043 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_sym_rate, tvb, pos, length, ENC_BIG_ENDIAN);
5045 else
5047 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5049 break;
5050 case DCCREQ_DS_INTLV_DEPTH:
5051 if (length == 2)
5053 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_intlv_depth_i, tvb, pos, 1, ENC_BIG_ENDIAN);
5054 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_intlv_depth_j, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
5056 else
5058 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5060 break;
5061 case DCCREQ_DS_CHAN_ID:
5062 if (length == 1)
5064 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_chan_id, tvb, pos, length, ENC_BIG_ENDIAN);
5066 else
5068 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5070 break;
5071 case DCCREQ_DS_SYNC_SUB:
5072 if (length == 1)
5074 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_sync_sub, tvb, pos, length, ENC_BIG_ENDIAN);
5076 else
5078 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5080 break;
5081 case DCCREQ_DS_OFDM_BLOCK_FREQ:
5082 if (length == 4)
5084 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_ofdm_block_freq, tvb, pos, length, ENC_BIG_ENDIAN);
5086 else
5088 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5090 break;
5093 pos += length;
5097 static void
5098 dissect_dccreq_sf_sub (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5100 uint8_t type;
5101 uint32_t length;
5102 proto_tree *dcc_tree;
5103 proto_item *dcc_item, *tlv_len_item;
5104 int pos;
5106 pos = start;
5107 while ( pos < ( start + len) )
5109 type = tvb_get_uint8 (tvb, pos);
5110 dcc_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5111 ett_docsis_dccreq_sf_sub, &dcc_item,
5112 val_to_str(type, sf_sub_subtlv_vals,
5113 "Unknown TLV (%u)"));
5114 proto_tree_add_uint (dcc_tree, hf_docsis_dcc_sf_sub_subtype, tvb, pos, 1, type);
5115 pos++;
5116 tlv_len_item = proto_tree_add_item_ret_uint (dcc_tree, hf_docsis_dcc_sf_sub_length, tvb, pos, 1, ENC_NA, &length);
5117 pos++;
5118 proto_item_set_len(dcc_item, length + 2);
5120 switch (type)
5122 case DCCREQ_SF_SFID:
5123 if (length == 8)
5125 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sfid_cur, tvb, pos, 4, ENC_BIG_ENDIAN);
5126 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sfid_new, tvb, pos + 4, 4, ENC_BIG_ENDIAN);
5128 else
5130 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5132 break;
5133 case DCCREQ_SF_SID:
5134 if (length == 4)
5136 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sid_cur, tvb, pos, 2, ENC_BIG_ENDIAN);
5137 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sid_new, tvb, pos + 2, 2, ENC_BIG_ENDIAN);
5139 else
5141 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5143 break;
5144 case DCCREQ_SF_UNSOL_GRANT_TREF:
5145 if (length == 4)
5147 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_unsol_grant_tref, tvb, pos, length, ENC_BIG_ENDIAN);
5149 else
5151 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5153 break;
5156 pos += length;
5160 static int
5161 dissect_dccreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5163 uint16_t pos;
5164 uint8_t type;
5165 uint32_t length;
5166 proto_tree *dcc_tree, *tlv_tree;
5167 proto_item *dcc_item, *tlv_item, *tlv_len_item;
5169 col_set_str(pinfo->cinfo, COL_INFO, "DCC-REQ Message");
5171 dcc_item = proto_tree_add_item (tree, proto_docsis_dccreq, tvb, 0, -1, ENC_NA);
5172 dcc_tree = proto_item_add_subtree (dcc_item, ett_docsis_dccreq);
5174 proto_tree_add_item (dcc_tree, hf_docsis_dccreq_tran_id, tvb, 0, 2, ENC_BIG_ENDIAN);
5176 pos = 2;
5177 while (tvb_reported_length_remaining(tvb, pos) > 0)
5179 type = tvb_get_uint8 (tvb, pos);
5180 tlv_tree = proto_tree_add_subtree(dcc_tree, tvb, pos, -1,
5181 ett_docsis_dccreq_tlv, &tlv_item,
5182 val_to_str(type, dcc_tlv_vals,
5183 "Unknown TLV (%u)"));
5184 proto_tree_add_uint (tlv_tree, hf_docsis_dccreq_type, tvb, pos, 1, type);
5185 pos++;
5186 tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dccreq_length, tvb, pos, 1, ENC_NA, &length);
5187 pos++;
5188 proto_item_set_len(tlv_item, length + 2);
5190 switch (type)
5192 case DCCREQ_UP_CHAN_ID:
5193 if (length == 1)
5195 proto_tree_add_item (tlv_tree, hf_docsis_dccreq_up_chan_id, tvb, pos, length, ENC_BIG_ENDIAN);
5197 else
5199 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5201 break;
5202 case DCCREQ_DS_PARAMS:
5203 dissect_dccreq_ds_params (tvb, pinfo, tlv_tree, pos, length);
5204 break;
5205 case DCCREQ_INIT_TECH:
5206 if (length == 1)
5208 proto_tree_add_item (tlv_tree, hf_docsis_dccreq_init_tech, tvb, pos, length, ENC_BIG_ENDIAN);
5210 else
5212 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5214 break;
5215 case DCCREQ_UCD_SUB:
5216 proto_tree_add_item (tlv_tree, hf_docsis_dccreq_ucd_sub, tvb, pos, length, ENC_NA);
5217 break;
5218 case DCCREQ_SAID_SUB:
5219 if (length == 4)
5221 proto_tree_add_item (tlv_tree, hf_docsis_dccreq_said_sub_cur, tvb, pos, 2, ENC_BIG_ENDIAN);
5222 proto_tree_add_item (tlv_tree, hf_docsis_dccreq_said_sub_new, tvb, pos + 2, 2, ENC_BIG_ENDIAN);
5224 else
5226 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5228 break;
5229 case DCCREQ_SF_SUB:
5230 dissect_dccreq_sf_sub (tvb, pinfo, tlv_tree, pos, length );
5231 break;
5232 case DCCREQ_CMTS_MAC_ADDR:
5233 if (length == 6)
5235 proto_tree_add_item (tlv_tree, hf_docsis_dccreq_cmts_mac_addr, tvb, pos, length, ENC_NA);
5237 else
5239 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5241 break;
5242 case DCCREQ_KEY_SEQ_NUM:
5243 if (length == 1)
5245 proto_tree_add_item (tlv_tree, hf_docsis_dccreq_key_seq_num, tvb, pos, length, ENC_BIG_ENDIAN);
5247 else
5249 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5251 break;
5252 case DCCREQ_HMAC_DIGEST:
5253 if (length == 20)
5255 proto_tree_add_item (tlv_tree, hf_docsis_dccreq_hmac_digest, tvb, pos, length, ENC_NA);
5257 else
5259 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5261 break;
5262 } /* switch(type) */
5263 pos += length;
5264 } /* (tvb_reported_length_remaining(tvb, pos) > 0) */
5265 return tvb_captured_length(tvb);
5268 static void
5269 dissect_dccrsp_cm_jump_time (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5271 uint8_t type;
5272 uint32_t length;
5273 proto_tree *dcc_tree;
5274 proto_item *dcc_item, *tlv_len_item;
5275 int pos;
5277 pos = start;
5278 while ( pos < ( start + len) )
5280 type = tvb_get_uint8 (tvb, pos);
5281 dcc_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5282 ett_docsis_dccrsp_cm_jump_time, &dcc_item,
5283 val_to_str(type, cm_jump_subtlv_vals,
5284 "Unknown TLV (%u)"));
5285 proto_tree_add_uint (dcc_tree, hf_docsis_dcc_cm_jump_subtype, tvb, pos, 1, type);
5286 pos++;
5287 tlv_len_item = proto_tree_add_item_ret_uint (dcc_tree, hf_docsis_dcc_cm_jump_length, tvb, pos, 1, ENC_NA, &length);
5288 pos++;
5289 proto_item_set_len(dcc_item, length + 2);
5291 switch (type)
5293 case DCCRSP_CM_JUMP_TIME_LENGTH:
5294 if (length == 4)
5296 proto_tree_add_item (dcc_tree, hf_docsis_dccrsp_cm_jump_time_length, tvb, pos, length, ENC_BIG_ENDIAN);
5298 else
5300 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5302 break;
5303 case DCCRSP_CM_JUMP_TIME_START:
5304 if (length == 8)
5306 proto_tree_add_item (dcc_tree, hf_docsis_dccrsp_cm_jump_time_start, tvb, pos, length, ENC_BIG_ENDIAN);
5308 else
5310 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5312 break;
5315 pos += length;
5319 static int
5320 dissect_dccrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5322 uint16_t pos;
5323 uint8_t type;
5324 uint32_t length;
5325 proto_tree *dcc_tree, *tlv_tree;
5326 proto_item *dcc_item, *tlv_item, *tlv_len_item;
5328 col_set_str(pinfo->cinfo, COL_INFO, "DCC-RSP Message");
5330 dcc_item = proto_tree_add_item (tree, proto_docsis_dccrsp, tvb, 0, -1, ENC_NA);
5331 dcc_tree = proto_item_add_subtree (dcc_item, ett_docsis_dccrsp);
5332 proto_tree_add_item (dcc_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN);
5333 proto_tree_add_item (dcc_tree, hf_docsis_dccrsp_conf_code, tvb, 2, 1, ENC_BIG_ENDIAN);
5335 pos = 3;
5336 while (tvb_reported_length_remaining(tvb, pos) > 0)
5338 type = tvb_get_uint8 (tvb, pos);
5339 tlv_tree = proto_tree_add_subtree(dcc_tree, tvb, pos, -1,
5340 ett_docsis_dccrsp_tlv, &tlv_item,
5341 val_to_str(type, dccrsp_tlv_vals,
5342 "Unknown TLV (%u)"));
5343 proto_tree_add_uint (tlv_tree, hf_docsis_dccrsp_type, tvb, pos, 1, type);
5344 pos++;
5345 tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dccrsp_length, tvb, pos, 1, ENC_NA, &length);
5346 pos++;
5347 proto_item_set_len(tlv_item, length + 2);
5349 switch (type)
5351 case DCCRSP_CM_JUMP_TIME:
5352 dissect_dccrsp_cm_jump_time (tvb, pinfo, tlv_tree, pos, length );
5353 break;
5354 case DCCRSP_KEY_SEQ_NUM:
5355 if (length == 1)
5357 proto_tree_add_item (tlv_tree, hf_docsis_dccrsp_key_seq_num, tvb, pos, length, ENC_BIG_ENDIAN);
5359 else
5361 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5363 break;
5364 case DCCRSP_HMAC_DIGEST:
5365 if (length == 20)
5367 proto_tree_add_item (tlv_tree, hf_docsis_dccrsp_hmac_digest, tvb, pos, length, ENC_NA);
5369 else
5371 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5373 break;
5374 } /* switch(type) */
5376 pos += length;
5377 } /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
5379 return tvb_captured_length(tvb);
5382 static int
5383 dissect_dccack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5385 uint16_t pos;
5386 uint8_t type;
5387 uint32_t length;
5388 proto_tree *dcc_tree, *tlv_tree;
5389 proto_item *dcc_item, *tlv_item, *tlv_len_item;
5391 col_set_str(pinfo->cinfo, COL_INFO, "DCC-ACK Message");
5393 dcc_item = proto_tree_add_item(tree, proto_docsis_dccack, tvb, 0, -1, ENC_NA);
5394 dcc_tree = proto_item_add_subtree (dcc_item, ett_docsis_dccack);
5395 proto_tree_add_item (dcc_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN);
5397 pos = 2;
5398 while (tvb_reported_length_remaining(tvb, pos) > 0)
5400 type = tvb_get_uint8 (tvb, pos);
5401 tlv_tree = proto_tree_add_subtree(dcc_tree, tvb, pos, -1,
5402 ett_docsis_dccack_tlv, &tlv_item,
5403 val_to_str(type, dccack_tlv_vals,
5404 "Unknown TLV (%u)"));
5405 proto_tree_add_uint (tlv_tree, hf_docsis_dccack_type, tvb, pos, 1, type);
5406 pos++;
5407 tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dccack_length, tvb, pos, 1, ENC_NA, &length);
5408 pos++;
5409 proto_item_set_len(tlv_item, length + 2);
5411 switch (type)
5413 case DCCACK_KEY_SEQ_NUM:
5414 if (length == 1)
5416 proto_tree_add_item (tlv_tree, hf_docsis_dccack_key_seq_num, tvb, pos, length, ENC_BIG_ENDIAN);
5418 else
5420 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5422 break;
5423 case DCCACK_HMAC_DIGEST:
5424 if (length == 20)
5426 proto_tree_add_item (tlv_tree, hf_docsis_dccack_hmac_digest, tvb, pos, length, ENC_NA);
5428 else
5430 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5432 break;
5433 } /* switch(type) */
5435 pos += length;
5436 } /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
5438 return tvb_captured_length(tvb);
5441 static int
5442 dissect_type29ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5444 return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_type29ucd, MGT_TYPE29UCD);
5447 static int
5448 dissect_intrngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5450 proto_item *intrngreq_item;
5451 proto_tree *intrngreq_tree;
5452 uint32_t sid;
5454 intrngreq_item = proto_tree_add_item(tree, proto_docsis_intrngreq, tvb, 0, -1, ENC_NA);
5455 intrngreq_tree = proto_item_add_subtree (intrngreq_item, ett_docsis_intrngreq);
5457 proto_tree_add_item_ret_uint (intrngreq_tree, hf_docsis_intrngreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
5458 col_add_fstr (pinfo->cinfo, COL_INFO, "Initial Ranging Request: SID = %u",sid);
5460 proto_tree_add_item (intrngreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN);
5461 proto_tree_add_item (intrngreq_tree, hf_docsis_mgt_upstream_chid, tvb, 3, 1, ENC_BIG_ENDIAN);
5463 return tvb_captured_length(tvb);
5466 static void
5467 dissect_dcd_dsg_cfg (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5469 uint8_t type;
5470 uint32_t length;
5471 proto_tree *dcd_tree;
5472 proto_tree *dcd_item, *tlv_len_item;
5473 int pos;
5475 pos = start;
5476 while ( pos < ( start + len) )
5478 type = tvb_get_uint8 (tvb, pos);
5479 dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5480 ett_docsis_dcd_cfg, &dcd_item,
5481 val_to_str(type, dcd_cfg_vals,
5482 "Unknown TLV (%u)"));
5483 proto_tree_add_uint (dcd_tree, hf_docsis_dcd_cfg_subtype, tvb, pos, 1, type);
5484 pos++;
5485 tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_cfg_length, tvb, pos, 1, ENC_NA, &length);
5486 pos++;
5487 proto_item_set_len(dcd_item, length + 2);
5489 switch (type)
5491 case DCD_CFG_CHAN_LST:
5492 if (length == 4)
5494 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_chan, tvb, pos, length, ENC_BIG_ENDIAN);
5496 else
5498 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5500 break;
5501 case DCD_CFG_TDSG1:
5502 if (length == 2)
5504 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg1, tvb, pos, length, ENC_BIG_ENDIAN);
5506 else
5508 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5510 break;
5511 case DCD_CFG_TDSG2:
5512 if (length == 2)
5514 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg2, tvb, pos, length, ENC_BIG_ENDIAN);
5516 else
5518 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5520 break;
5521 case DCD_CFG_TDSG3:
5522 if (length == 2)
5524 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg3, tvb, pos, length, ENC_BIG_ENDIAN);
5526 else
5528 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5530 break;
5531 case DCD_CFG_TDSG4:
5532 if (length == 2)
5534 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg4, tvb, pos, length, ENC_BIG_ENDIAN);
5536 else
5538 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5540 break;
5541 case DCD_CFG_VENDOR_SPEC:
5542 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_vendor_spec, tvb, pos, length, ENC_NA);
5543 break;
5547 pos += length;
5551 static void
5552 dissect_dcd_down_classifier_ip (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5554 uint8_t type;
5555 uint32_t length;
5556 proto_tree *dcd_tree;
5557 proto_tree *dcd_item, *tlv_len_item;
5558 int pos;
5560 pos = start;
5561 while ( pos < ( start + len) )
5563 type = tvb_get_uint8 (tvb, pos);
5564 dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5565 ett_docsis_dcd_cfr_ip, &dcd_item,
5566 val_to_str(type, dcd_cfr_ip_vals,
5567 "Unknown TLV (%u)"));
5568 proto_tree_add_uint (dcd_tree, hf_docsis_dcd_cfr_ip_subtype, tvb, pos, 1, type);
5569 pos++;
5570 tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_cfr_ip_length, tvb, pos, 1, ENC_NA, &length);
5571 pos++;
5572 proto_item_set_len(dcd_item, length + 2);
5574 switch (type)
5576 case DCD_CFR_IP_SOURCE_ADDR:
5577 if (length == 4)
5579 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_source_addr, tvb, pos, length, ENC_BIG_ENDIAN);
5581 else
5583 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5585 break;
5586 case DCD_CFR_IP_SOURCE_MASK:
5587 if (length == 4)
5589 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_source_mask, tvb, pos, length, ENC_BIG_ENDIAN);
5591 else
5593 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5595 break;
5596 case DCD_CFR_IP_DEST_ADDR:
5597 if (length == 4)
5599 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_dest_addr, tvb, pos, length, ENC_BIG_ENDIAN);
5601 else
5603 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5605 break;
5606 case DCD_CFR_IP_DEST_MASK:
5607 if (length == 4)
5609 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_dest_mask, tvb, pos, length, ENC_BIG_ENDIAN);
5611 else
5613 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5615 break;
5616 case DCD_CFR_TCPUDP_SRCPORT_START:
5617 if (length == 2)
5619 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_srcport_start, tvb, pos, length, ENC_BIG_ENDIAN);
5621 else
5623 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5625 break;
5626 case DCD_CFR_TCPUDP_SRCPORT_END:
5627 if (length == 2)
5629 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_srcport_end, tvb, pos, length, ENC_BIG_ENDIAN);
5631 else
5633 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5635 break;
5636 case DCD_CFR_TCPUDP_DSTPORT_START:
5637 if (length == 2)
5639 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_dstport_start, tvb, pos, length, ENC_BIG_ENDIAN);
5641 else
5643 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5645 break;
5646 case DCD_CFR_TCPUDP_DSTPORT_END:
5647 if (length == 2)
5649 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_dstport_end, tvb, pos, length, ENC_BIG_ENDIAN);
5651 else
5653 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5655 break;
5658 pos += length;
5662 static void
5663 dissect_dcd_clid (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5665 uint8_t type;
5666 uint32_t length;
5667 proto_tree *dcd_tree;
5668 proto_tree *dcd_item, *tlv_len_item;
5669 int pos;
5671 pos = start;
5672 while ( pos < ( start + len) )
5674 type = tvb_get_uint8 (tvb, pos);
5675 dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5676 ett_docsis_dcd_clid, &dcd_item,
5677 val_to_str(type, dcd_clid_vals,
5678 "Unknown TLV (%u)"));
5679 proto_tree_add_uint (dcd_tree, hf_docsis_dcd_clid_subtype, tvb, pos, 1, type);
5680 pos++;
5681 tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_clid_length, tvb, pos, 1, ENC_NA, &length);
5682 pos++;
5683 proto_item_set_len(dcd_item, length + 2);
5685 switch (type)
5687 case DCD_CLID_BCAST_ID:
5688 if (length == 2)
5690 proto_tree_add_item(dcd_tree, hf_docsis_dcd_clid_bcast_id, tvb, pos, length, ENC_BIG_ENDIAN);
5692 else
5694 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5696 break;
5697 case DCD_CLID_KNOWN_MAC_ADDR:
5698 if (length == 6)
5700 proto_tree_add_item (dcd_tree, hf_docsis_dcd_clid_known_mac_addr, tvb, pos, length, ENC_NA);
5702 else
5704 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5706 break;
5707 case DCD_CLID_CA_SYS_ID:
5708 if (length == 2)
5710 proto_tree_add_item (dcd_tree, hf_docsis_dcd_clid_ca_sys_id, tvb, pos, length, ENC_BIG_ENDIAN);
5712 else
5714 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5716 break;
5717 case DCD_CLID_APP_ID:
5718 if (length == 2)
5720 proto_tree_add_item (dcd_tree, hf_docsis_dcd_clid_app_id, tvb, pos, length, ENC_BIG_ENDIAN);
5722 else
5724 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5726 break;
5729 pos += length;
5733 static void
5734 dissect_dcd_dsg_rule (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5736 uint8_t type;
5737 uint32_t length;
5738 proto_tree *dcd_tree;
5739 proto_tree *dcd_item, *tlv_len_item;
5740 int pos;
5742 pos = start;
5743 while ( pos < ( start + len) )
5745 type = tvb_get_uint8 (tvb, pos);
5746 dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5747 ett_docsis_dcd_rule, &dcd_item,
5748 val_to_str(type, dcd_dsg_rule_vals,
5749 "Unknown TLV (%u)"));
5750 proto_tree_add_uint (dcd_tree, hf_docsis_dcd_dsg_rule_subtype, tvb, pos, 1, type);
5751 pos++;
5752 tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_dsg_rule_length, tvb, pos, 1, ENC_NA, &length);
5753 pos++;
5754 proto_item_set_len(dcd_item, length + 2);
5756 switch (type)
5758 case DCD_RULE_ID:
5759 if (length == 1)
5761 proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_id, tvb, pos, length, ENC_BIG_ENDIAN);
5763 else
5765 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5767 break;
5768 case DCD_RULE_PRI:
5769 if (length == 1)
5771 proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_pri, tvb, pos, length, ENC_BIG_ENDIAN);
5773 else
5775 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5777 break;
5778 case DCD_RULE_UCID_RNG:
5779 proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_ucid_list, tvb, pos, length, ENC_NA);
5780 break;
5781 case DCD_RULE_CLIENT_ID:
5782 dissect_dcd_clid (tvb, pinfo, dcd_tree, pos, length );
5783 break;
5784 case DCD_RULE_TUNL_ADDR:
5785 if (length == 6)
5787 proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_tunl_addr, tvb, pos, length, ENC_NA);
5789 else
5791 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5793 break;
5794 case DCD_RULE_CFR_ID:
5795 if (length == 2)
5797 proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_cfr_id, tvb, pos, length, ENC_BIG_ENDIAN);
5799 else
5801 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5803 break;
5804 case DCD_RULE_VENDOR_SPEC:
5805 proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_vendor_spec, tvb, pos, length, ENC_NA);
5806 break;
5810 pos += length;
5814 static void
5815 dissect_dcd_down_classifier (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5817 uint8_t type;
5818 uint32_t length;
5819 proto_tree *dcd_tree;
5820 proto_tree *dcd_item, *tlv_len_item;
5821 int pos;
5823 pos = start;
5824 while ( pos < ( start + len) )
5826 type = tvb_get_uint8 (tvb, pos);
5827 dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5828 ett_docsis_dcd_cfr, &dcd_item,
5829 val_to_str(type, dcd_down_classifier_vals,
5830 "Unknown TLV (%u)"));
5831 proto_tree_add_uint (dcd_tree, hf_docsis_dcd_down_classifier_subtype, tvb, pos, 1, type);
5832 pos++;
5833 tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_down_classifier_length, tvb, pos, 1, ENC_NA, &length);
5834 pos++;
5835 proto_item_set_len(dcd_item, length + 2);
5837 switch (type)
5839 case DCD_CFR_ID:
5840 if (length == 2)
5842 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_id, tvb, pos, length, ENC_BIG_ENDIAN);
5844 else
5846 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5848 break;
5849 case DCD_CFR_RULE_PRI:
5850 if (length == 1)
5852 proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_rule_pri, tvb, pos, length, ENC_BIG_ENDIAN);
5854 else
5856 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5858 break;
5859 case DCD_CFR_IP_CLASSIFIER:
5860 dissect_dcd_down_classifier_ip (tvb , pinfo , dcd_tree , pos , length );
5861 break;
5864 pos += length;
5868 static int
5869 dissect_dcd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5871 uint16_t pos;
5872 uint8_t type;
5873 uint32_t length;
5874 proto_tree *dcd_tree, *tlv_tree;
5875 proto_item *dcd_item, *tlv_item;
5877 col_set_str(pinfo->cinfo, COL_INFO, "DCD Message: ");
5879 dcd_item = proto_tree_add_item(tree, proto_docsis_dcd, tvb, 0, -1, ENC_NA);
5880 dcd_tree = proto_item_add_subtree (dcd_item, ett_docsis_dcd);
5881 proto_tree_add_item (dcd_tree, hf_docsis_dcd_config_ch_cnt, tvb, 0, 1, ENC_BIG_ENDIAN);
5882 proto_tree_add_item (dcd_tree, hf_docsis_dcd_num_of_frag, tvb, 1, 1, ENC_BIG_ENDIAN);
5883 proto_tree_add_item (dcd_tree, hf_docsis_dcd_frag_sequence_num, tvb, 2, 1, ENC_BIG_ENDIAN);
5885 pos = 3;
5886 while (tvb_reported_length_remaining(tvb, pos) > 0)
5888 type = tvb_get_uint8 (tvb, pos);
5889 tlv_tree = proto_tree_add_subtree(dcd_tree, tvb, pos, -1,
5890 ett_docsis_dcd_tlv, &tlv_item,
5891 val_to_str(type, dcd_tlv_vals,
5892 "Unknown TLV (%u)"));
5893 proto_tree_add_uint (tlv_tree, hf_docsis_dcd_type, tvb, pos, 1, type);
5894 pos++;
5895 proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dcd_length, tvb, pos, 1, ENC_NA, &length);
5896 pos++;
5897 proto_item_set_len(tlv_item, length + 2);
5899 switch (type)
5901 case DCD_DOWN_CLASSIFIER:
5902 dissect_dcd_down_classifier (tvb, pinfo, tlv_tree, pos, length);
5903 break;
5904 case DCD_DSG_RULE:
5905 dissect_dcd_dsg_rule (tvb, pinfo, tlv_tree, pos, length);
5906 break;
5907 case DCD_DSG_CONFIG:
5908 dissect_dcd_dsg_cfg (tvb, pinfo, tlv_tree, pos, length);
5909 break;
5910 } /* switch(type) */
5912 pos += length;
5913 } /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
5915 return tvb_captured_length(tvb);
5918 static void
5919 dissect_mdd_ds_active_channel_list(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
5921 uint8_t type;
5922 uint32_t length;
5923 proto_tree *mdd_tree;
5924 proto_item *mdd_item;
5925 int pos;
5926 static int * const order_annex[] = {
5927 &hf_docsis_mdd_downstream_active_channel_list_modulation_order,
5928 &hf_docsis_mdd_downstream_active_channel_list_annex,
5929 NULL
5931 static int * const cm_status_event[] = {
5932 &hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_timeout,
5933 &hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_failure,
5934 &hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_recovery,
5935 &hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_recovery,
5936 NULL
5938 static int * const ofdm_plc_parameters[] = {
5939 &hf_docsis_mdd_ofdm_plc_parameters_tukey_raised_cosine_window,
5940 &hf_docsis_mdd_ofdm_plc_parameters_cyclic_prefix,
5941 &hf_docsis_mdd_ofdm_plc_parameters_sub_carrier_spacing,
5942 NULL
5945 pos = start;
5946 while ( pos < ( start + len) )
5948 type = tvb_get_uint8 (tvb, pos);
5949 mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5950 ett_docsis_mdd_ds_active_channel_list, &mdd_item,
5951 val_to_str(type, mdd_ds_active_channel_list_vals,
5952 "Unknown TLV (%u)"));
5953 proto_tree_add_uint (mdd_tree, hf_docsis_mdd_ds_active_channel_list_subtype, tvb, pos, 1, type);
5954 pos++;
5955 proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_ds_active_channel_list_length, tvb, pos, 1, ENC_NA, &length);
5956 pos++;
5957 proto_item_set_len(mdd_item, length + 2);
5959 switch(type)
5961 case DOWNSTREAM_ACTIVE_CHANNEL_LIST_CHANNEL_ID:
5962 proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_channel_id, tvb, pos, 1, ENC_BIG_ENDIAN);
5963 break;
5964 case DOWNSTREAM_ACTIVE_CHANNEL_LIST_FREQUENCY:
5965 proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_frequency, tvb, pos, 4, ENC_BIG_ENDIAN);
5966 break;
5967 case DOWNSTREAM_ACTIVE_CHANNEL_LIST_MODULATION_ORDER_ANNEX:
5968 proto_tree_add_bitmask_list(mdd_tree, tvb, pos, 1, order_annex, ENC_BIG_ENDIAN);
5969 break;
5970 case DOWNSTREAM_ACTIVE_CHANNEL_LIST_PRIMARY_CAPABLE:
5971 proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_primary_capable, tvb, pos, 1, ENC_BIG_ENDIAN);
5972 break;
5973 case DOWNSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK:
5974 proto_tree_add_bitmask(mdd_tree, tvb, pos, hf_docsis_mdd_cm_status_event_enable_bitmask, ett_sub_tlv, cm_status_event, ENC_BIG_ENDIAN);
5975 break;
5976 case DOWNSTREAM_ACTIVE_CHANNEL_LIST_MAP_UCD_TRANSPORT_INDICATOR:
5977 proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_map_ucd_transport_indicator, tvb, pos, 1, ENC_BIG_ENDIAN);
5978 break;
5979 case DOWNSTREAM_ACTIVE_CHANNEL_LIST_OFDM_PLC_PARAMETERS:
5980 proto_tree_add_bitmask(mdd_tree, tvb, pos, hf_docsis_mdd_ofdm_plc_parameters, ett_sub_tlv, ofdm_plc_parameters, ENC_BIG_ENDIAN);
5981 break;
5982 case DOWNSTREAM_ACTIVE_CHANNEL_LIST_FDX_SUB_BAND_ID:
5983 proto_tree_add_item(mdd_tree, hf_docsis_mdd_downstream_active_channel_list_fdx_sub_band_id, tvb, pos, 1, ENC_BIG_ENDIAN);
5984 break;
5985 case DOWNSTREAM_ACTIVE_CHANNEL_LIST_FDX_DS:
5986 proto_tree_add_item(mdd_tree, hf_docsis_mdd_downstream_active_channel_list_fdx_ds, tvb, pos, 1, ENC_BIG_ENDIAN);
5987 break;
5990 pos += length;
5994 static void
5995 dissect_mdd_ds_service_group(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
5997 uint8_t type;
5998 uint32_t i, length;
5999 proto_tree *mdd_tree;
6000 proto_item *mdd_item;
6001 int pos;
6003 pos = start;
6004 while ( pos < ( start + len) )
6006 type = tvb_get_uint8 (tvb, pos);
6007 mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6008 ett_docsis_mdd_ds_service_group, &mdd_item,
6009 val_to_str(type, mdd_ds_service_group_vals,
6010 "Unknown TLV (%u)"));
6011 proto_tree_add_uint (mdd_tree, hf_docsis_mdd_ds_service_group_subtype, tvb, pos, 1, type);
6012 pos++;
6013 proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_ds_service_group_length, tvb, pos, 1, ENC_NA, &length);
6014 pos++;
6015 proto_item_set_len(mdd_item, length + 2);
6017 switch(type)
6019 case MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_MD_DS_SG_IDENTIFIER:
6020 proto_tree_add_item (mdd_tree, hf_docsis_mdd_mac_domain_downstream_service_group_md_ds_sg_identifier, tvb, pos, 1, ENC_BIG_ENDIAN);
6021 break;
6022 case MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_CHANNEL_IDS:
6023 for (i = 0; i < length; i++) {
6024 proto_tree_add_item (mdd_tree, hf_docsis_mdd_mac_domain_downstream_service_group_channel_id, tvb, pos + i , 1, ENC_BIG_ENDIAN);
6026 break;
6029 pos += length;
6033 static void
6034 dissect_mdd_channel_profile_reporting_control(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
6036 uint8_t type;
6037 uint32_t length;
6038 proto_tree *mdd_tree;
6039 proto_item *mdd_item;
6040 int pos;
6042 pos = start;
6043 while ( pos < ( start + len) )
6045 type = tvb_get_uint8 (tvb, pos);
6046 mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6047 ett_docsis_mdd_channel_profile_reporting_control, &mdd_item,
6048 val_to_str(type, mdd_channel_profile_reporting_control_vals,
6049 "Unknown TLV (%u)"));
6050 proto_tree_add_uint (mdd_tree, hf_docsis_mdd_channel_profile_reporting_control_subtype, tvb, pos, 1, type);
6051 pos++;
6052 proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_channel_profile_reporting_control_length, tvb, pos, 1, ENC_NA, &length);
6053 pos++;
6054 proto_item_set_len(mdd_item, length + 2);
6056 switch(type)
6058 case RCP_CENTER_FREQUENCY_SPACING:
6059 proto_tree_add_item (mdd_tree, hf_docsis_mdd_rcp_center_frequency_spacing, tvb, pos, 1, ENC_BIG_ENDIAN);
6060 break;
6061 case VERBOSE_RCP_REPORTING:
6062 proto_tree_add_item (mdd_tree, hf_docsis_mdd_verbose_rcp_reporting, tvb, pos, 1, ENC_BIG_ENDIAN);
6063 break;
6064 case FRAGMENTED_RCP_TRANSMISSION:
6065 proto_tree_add_item (mdd_tree, hf_docsis_mdd_fragmented_rcp_transmission, tvb, pos, 1, ENC_BIG_ENDIAN);
6066 break;
6069 pos += length;
6073 static void
6074 dissect_mdd_ip_init_param(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
6076 uint8_t type;
6077 uint32_t length;
6078 proto_tree *mdd_tree;
6079 proto_item *mdd_item;
6080 int pos;
6082 pos = start;
6083 while ( pos < ( start + len) )
6085 type = tvb_get_uint8 (tvb, pos);
6086 mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6087 ett_docsis_mdd_ip_init_param, &mdd_item,
6088 val_to_str(type, mdd_ip_init_param_vals,
6089 "Unknown TLV (%u)"));
6090 proto_tree_add_uint (mdd_tree, hf_docsis_mdd_ip_init_param_subtype, tvb, pos, 1, type);
6091 pos++;
6092 proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_ip_init_param_length, tvb, pos, 1, ENC_NA, &length);
6093 pos++;
6094 proto_item_set_len(mdd_item, length + 2);
6096 switch(type)
6098 case IP_PROVISIONING_MODE:
6099 proto_tree_add_item (mdd_tree, hf_docsis_mdd_ip_provisioning_mode, tvb, pos, 1, ENC_BIG_ENDIAN);
6100 break;
6101 case PRE_REGISTRATION_DSID:
6102 proto_tree_add_item (mdd_tree, hf_docsis_mdd_pre_registration_dsid, tvb, pos, 3, ENC_BIG_ENDIAN);
6103 break;
6106 pos += length;
6110 static void
6111 dissect_mdd_upstream_active_channel_list_dschids_maps_ucds(tvbuff_t * tvb, proto_tree * tree, unsigned start, uint16_t len)
6113 uint16_t i;
6114 proto_item *it;
6115 proto_tree *dschid_tree;
6117 it = proto_tree_add_item (tree, hf_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds, tvb, start, len, ENC_NA);
6118 dschid_tree = proto_item_add_subtree (it, ett_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds_dschids);
6120 for(i = 0; i< len; ++i)
6122 proto_tree_add_item (dschid_tree, hf_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds_dschid, tvb, start + i, 1, ENC_BIG_ENDIAN);
6126 static void
6127 dissect_mdd_upstream_active_channel_list(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
6129 uint8_t type;
6130 uint32_t length;
6131 proto_tree *mdd_tree;
6132 proto_item *mdd_item;
6133 int pos;
6134 static int * const cm_status_event[] = {
6135 &hf_docsis_mdd_cm_status_event_enable_bitmask_t4_timeout,
6136 &hf_docsis_mdd_cm_status_event_enable_bitmask_t3_retries_exceeded,
6137 &hf_docsis_mdd_cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded,
6138 NULL
6141 pos = start;
6142 while ( pos < ( start + len) )
6144 type = tvb_get_uint8 (tvb, pos);
6145 mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6146 ett_docsis_mdd_up_active_channel_list, &mdd_item,
6147 val_to_str(type, mdd_up_active_channel_list_vals,
6148 "Unknown TLV (%u)"));
6149 proto_tree_add_uint (mdd_tree, hf_docsis_mdd_up_active_channel_list_subtype, tvb, pos, 1, type);
6150 pos++;
6151 proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_up_active_channel_list_length, tvb, pos, 1, ENC_NA, &length);
6152 pos++;
6153 proto_item_set_len(mdd_item, length + 2);
6155 switch(type)
6157 case UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_ID:
6158 proto_tree_add_item (mdd_tree, hf_docsis_mdd_upstream_active_channel_list_upstream_channel_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6159 break;
6160 case UPSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK:
6161 proto_tree_add_bitmask(mdd_tree, tvb, pos, hf_docsis_mdd_cm_status_event_enable_bitmask, ett_sub_tlv, cm_status_event, ENC_BIG_ENDIAN);
6162 break;
6163 case UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_PRIORITY:
6164 proto_tree_add_item (mdd_tree, hf_docsis_mdd_upstream_active_channel_list_upstream_channel_priority, tvb, pos, 1, ENC_BIG_ENDIAN);
6165 break;
6166 case UPSTREAM_ACTIVE_CHANNEL_LIST_DSCHIDS_MAPS_UCDS:
6167 dissect_mdd_upstream_active_channel_list_dschids_maps_ucds(tvb, mdd_tree, pos, length);
6168 break;
6169 case UPSTREAM_ACTIVE_CHANNEL_LIST_FDX_UPSTREAM_CHANNEL:
6170 proto_tree_add_item (mdd_tree, hf_docsis_mdd_upstream_active_channel_list_fdx_upstream_channel, tvb, pos, 1, ENC_BIG_ENDIAN);
6171 break;
6172 case UPSTREAM_ACTIVE_CHANNEL_LIST_FDX_SUBBAND_ID:
6173 proto_tree_add_item (mdd_tree, hf_docsis_mdd_upstream_active_channel_list_fdx_subband_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6174 break;
6177 pos += length;
6181 static void
6182 dissect_mdd_cm_status_event_control(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
6184 uint8_t type;
6185 uint32_t length, timer;
6186 proto_tree *mdd_tree;
6187 proto_item *mdd_item, *text_item;
6188 int pos;
6190 pos = start;
6191 while ( pos < ( start + len) )
6193 type = tvb_get_uint8 (tvb, pos);
6194 mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6195 ett_docsis_mdd_cm_status_event_control, &mdd_item,
6196 val_to_str(type, mdd_cm_status_event_control_vals,
6197 "Unknown TLV (%u)"));
6198 proto_tree_add_uint (mdd_tree, hf_docsis_mdd_cm_status_event_control_subtype, tvb, pos, 1, type);
6199 pos++;
6200 proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_cm_status_event_control_length, tvb, pos, 1, ENC_NA, &length);
6201 pos++;
6202 proto_item_set_len(mdd_item, length + 2);
6204 switch(type)
6206 case EVENT_TYPE_CODE:
6207 proto_tree_add_item (mdd_tree, hf_docsis_mdd_event_type, tvb, pos, 1, ENC_BIG_ENDIAN);
6208 break;
6209 case MAXIMUM_EVENT_HOLDOFF_TIMER:
6210 text_item = proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_maximum_event_holdoff_timer, tvb, pos, 2, ENC_BIG_ENDIAN, &timer);
6211 proto_item_append_text(text_item, " (%d ms)", timer * 20);
6212 break;
6213 case MAXIMUM_NUMBER_OF_REPORTS_PER_EVENT:
6214 proto_tree_add_item (mdd_tree, hf_docsis_mdd_maximum_number_of_reports_per_event, tvb, pos, 1, ENC_BIG_ENDIAN);
6215 break;
6218 pos += length;
6222 static void
6223 dissect_mdd_dsg_da_to_dsid(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
6225 uint8_t type;
6226 uint32_t length;
6227 proto_tree *mdd_tree;
6228 proto_item *mdd_item;
6229 int pos;
6231 pos = start;
6232 while ( pos < ( start + len) )
6234 type = tvb_get_uint8 (tvb, pos);
6235 mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6236 ett_docsis_mdd_dsg_da_to_dsid, &mdd_item,
6237 val_to_str(type, mdd_cm_dsg_da_to_dsid_vals,
6238 "Unknown TLV (%u)"));
6239 proto_tree_add_uint (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_subtype, tvb, pos, 1, type);
6240 pos++;
6241 proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_length, tvb, pos, 1, ENC_NA, &length);
6242 pos++;
6243 proto_item_set_len(mdd_item, length + 2);
6245 switch(type)
6247 case DSG_DA_TO_DSID_ASSOCIATION_DA:
6248 proto_tree_add_item (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_association_da, tvb, pos, 6, ENC_NA);
6249 break;
6250 case DSG_DA_TO_DSID_ASSOCIATION_DSID:
6251 proto_tree_add_item (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_association_dsid, tvb, pos, 3, ENC_BIG_ENDIAN);
6252 break;
6255 pos += length;
6259 static void
6260 dissect_mdd_docsis_version(tvbuff_t *tvb, packet_info *pinfo _U_, proto_item *item, proto_tree *tree, int pos, int length)
6262 proto_item *tlv_item;
6263 proto_tree *tlv_tree;
6264 uint32_t tlv_type;
6265 int tlv_length, end = pos + length;
6266 uint32_t tlv_value;
6268 int major = -1, minor = -1;
6269 int major_pos = 0, minor_pos = 0;
6270 uint8_t ext_spectrum_mode = 0;
6272 static int *const mdd_cmts_docsis_version_ext_spectrum_mode[] = {
6273 &hf_docsis_mdd_docsis_version_ext_spectrum_mode_fdd,
6274 &hf_docsis_mdd_docsis_version_ext_spectrum_mode_fdx,
6275 NULL
6278 while (pos + 1 < end)
6280 tlv_type = tvb_get_uint8(tvb, pos);
6281 tlv_length = tvb_get_uint8(tvb, pos + 1);
6282 tlv_item = proto_tree_add_item(tree, hf_docsis_mdd_docsis_version_tlv, tvb, pos, tlv_length + 2, ENC_NA);
6283 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, mdd_docsis_version_vals, "Unknown TLV %u"));
6284 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_mdd_docsis_version);
6285 proto_tree_add_item(tlv_tree, hf_docsis_mdd_docsis_version_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
6286 proto_tree_add_item(tlv_tree, hf_docsis_mdd_docsis_version_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
6287 pos += 2;
6289 switch (tlv_type)
6291 case CMTS_DOCSIS_VERSION_MAJOR_PRE_40:
6292 if (tlv_length == 1) {
6293 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_mdd_docsis_version_major_pre_40,
6294 tvb, pos, tlv_length, ENC_BIG_ENDIAN, &tlv_value);
6295 if (major < 0) {
6296 major = tlv_value;
6297 major_pos = pos;
6299 } else
6300 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6301 break;
6302 case CMTS_DOCSIS_VERSION_MINOR_PRE_40:
6303 if (tlv_length == 1) {
6304 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_mdd_docsis_version_minor_pre_40,
6305 tvb, pos, tlv_length, ENC_BIG_ENDIAN, &tlv_value);
6306 if (minor < 0) {
6307 minor = tlv_value;
6308 minor_pos = pos;
6310 } else
6311 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6312 break;
6313 case CMTS_DOCSIS_VERSION_MAJOR:
6314 if (tlv_length == 1) {
6315 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_mdd_docsis_version_major,
6316 tvb, pos, tlv_length, ENC_BIG_ENDIAN, &tlv_value);
6317 major = tlv_value;
6318 major_pos = pos;
6319 } else
6320 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6321 break;
6322 case CMTS_DOCSIS_VERSION_MINOR:
6323 if (tlv_length == 1) {
6324 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_mdd_docsis_version_minor,
6325 tvb, pos, tlv_length, ENC_BIG_ENDIAN, &tlv_value);
6326 minor = tlv_value;
6327 minor_pos = pos;
6328 } else
6329 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6330 break;
6331 case CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE:
6332 if (tlv_length == 1) {
6333 ext_spectrum_mode = tvb_get_uint8(tvb, pos);
6334 proto_tree_add_bitmask_value(tlv_tree, tvb, pos, hf_docsis_mdd_docsis_version_ext_spectrum_mode,
6335 ett_docsis_mdd_docsis_version_tlv,
6336 mdd_cmts_docsis_version_ext_spectrum_mode, ext_spectrum_mode);
6337 } else
6338 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6339 break;
6340 default:
6341 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
6342 break;
6344 pos += tlv_length;
6346 if (major > -1)
6347 proto_item_set_hidden(proto_tree_add_item(tree, hf_docsis_mdd_cmts_major_docsis_version, tvb, major_pos, 1, ENC_BIG_ENDIAN));
6348 if (minor > -1)
6349 proto_item_set_hidden(proto_tree_add_item(tree, hf_docsis_mdd_cmts_minor_docsis_version, tvb, minor_pos, 1, ENC_BIG_ENDIAN));
6350 if (major > -1 && minor > -1)
6351 proto_item_append_text(item, ": DOCSIS %d.%d%s%s", major, minor,
6352 (ext_spectrum_mode & CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDD) ? " + FDD" : "",
6353 (ext_spectrum_mode & CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDX) ? " + FDX" : "");
6354 if (pos != end)
6355 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
6358 static void
6359 dissect_mdd_diplexer_band_edge(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
6361 uint8_t type;
6362 uint32_t length;
6363 uint16_t override_mhz;
6364 proto_tree *mdd_tree;
6365 proto_item *mdd_item;
6366 int pos;
6368 pos = start;
6369 while ( pos < ( start + len) )
6371 type = tvb_get_uint8 (tvb, pos);
6372 mdd_tree = proto_tree_add_subtree(tree, tvb, pos, 1,
6373 ett_docsis_mdd_diplexer_band_edge, &mdd_item,
6374 val_to_str(type, mdd_diplexer_band_edge_vals,
6375 "Unknown TLV (%u)"));
6376 proto_tree_add_uint (mdd_tree, hf_docsis_mdd_diplexer_band_edge, tvb, pos, 1, type);
6377 pos++;
6378 proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_diplexer_band_edge_length, tvb, pos, 1, ENC_BIG_ENDIAN, &length);
6379 pos++;
6380 proto_item_set_len(mdd_item, length + 2);
6382 if (length == 1 || length == 2)
6384 switch(type)
6386 case DIPLEXER_US_UPPER_BAND_EDGE:
6387 proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_us_upper_band_edge, tvb, pos, length, ENC_BIG_ENDIAN);
6388 break;
6389 case DIPLEXER_DS_LOWER_BAND_EDGE:
6390 proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_ds_lower_band_edge, tvb, pos, length, ENC_BIG_ENDIAN);
6391 break;
6392 case DIPLEXER_DS_UPPER_BAND_EDGE:
6393 proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_ds_upper_band_edge, tvb, pos, length, ENC_BIG_ENDIAN);
6394 break;
6395 case DIPLEXER_US_UPPER_BAND_EDGE_OVERRIDE:
6396 proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_us_upper_band_edge_override, tvb, pos, length, ENC_BIG_ENDIAN);
6397 override_mhz = tvb_get_ntohs (tvb, pos);
6398 if (override_mhz != 204 && override_mhz != 300 && override_mhz != 396 && override_mhz != 492 && override_mhz != 684)
6400 expert_add_info_format(pinfo, mdd_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown Diplexer Upstream Upper Band Edge Override value: %u", override_mhz);
6402 break;
6403 case DIPLEXER_DS_LOWER_BAND_EDGE_OVERRIDE:
6404 proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_ds_lower_band_edge_override, tvb, pos, length, ENC_BIG_ENDIAN);
6405 override_mhz = tvb_get_ntohs (tvb, pos);
6406 if (override_mhz != 108 && override_mhz != 258 && override_mhz != 372 && override_mhz != 492 && override_mhz != 606 && override_mhz != 834)
6408 expert_add_info_format(pinfo, mdd_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown Diplexer Downstream Lower Band Edge Override value: %u", override_mhz);
6410 break;
6411 case DIPLEXER_DS_UPPER_BAND_EDGE_OVERRIDE:
6412 proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_ds_upper_band_edge_override, tvb, pos, length, ENC_BIG_ENDIAN);
6413 override_mhz = tvb_get_ntohs (tvb, pos);
6414 if (override_mhz != 1002 && override_mhz != 1218 && override_mhz != 1794)
6416 expert_add_info_format(pinfo, mdd_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown Diplexer Downstream Upper Band Edge Override value: %u", override_mhz);
6418 break;
6419 default:
6420 expert_add_info_format(pinfo, mdd_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown Diplexer Band Edge TLV type: %u", type);
6421 break;
6423 } else
6425 expert_add_info_format(pinfo, mdd_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6426 break;
6428 pos += length;
6432 static void
6433 dissect_mdd_advanced_band_plan(tvbuff_t *tvb, packet_info *pinfo _U_, proto_item *item, proto_tree *tree, int pos, int length)
6435 proto_item *tlv_item;
6436 proto_tree *tlv_tree;
6437 uint32_t tlv_type;
6438 int tlv_length, end = pos + length;
6440 while (pos + 1 < end)
6442 tlv_type = tvb_get_uint8(tvb, pos);
6443 tlv_length = tvb_get_uint8(tvb, pos + 1);
6444 tlv_item = proto_tree_add_item(tree, hf_docsis_mdd_abp_tlv, tvb, pos, tlv_length + 2, ENC_NA);
6445 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, mdd_abp_vals, "Unknown TLV: %u"));
6446 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_mdd_advanced_band_plan);
6447 proto_tree_add_item(tlv_tree, hf_docsis_mdd_abp_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
6448 proto_tree_add_item(tlv_tree, hf_docsis_mdd_abp_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
6449 pos += 2;
6451 switch (tlv_type)
6453 case MDD_ABP_SUB_BAND_COUNT:
6454 if (tlv_length == 1)
6455 proto_tree_add_item(tlv_tree, hf_docsis_mdd_abp_sub_band_count, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
6456 else
6457 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6458 break;
6459 case MDD_ABP_SUB_BAND_WIDTH:
6460 if (tlv_length == 1)
6461 proto_tree_add_item(tlv_tree, hf_docsis_mdd_abp_sub_band_width, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
6462 else
6463 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6464 break;
6465 default:
6466 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
6467 break;
6469 pos += tlv_length;
6471 if (pos != end)
6472 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
6475 static void
6476 dissect_mdd_bpi_plus(tvbuff_t *tvb, packet_info *pinfo _U_, proto_item *item, proto_tree *tree, int pos, int length)
6478 proto_item *tlv_item;
6479 proto_tree *tlv_tree;
6480 uint32_t tlv_type;
6481 int tlv_length, end = pos + length;
6483 static int *const mdd_bpi_plus_cfg[] = {
6484 &hf_docsis_mdd_bpi_plus_cfg_eae,
6485 NULL
6488 while (pos + 1 < end)
6490 tlv_type = tvb_get_uint8(tvb, pos);
6491 tlv_length = tvb_get_uint8(tvb, pos + 1);
6492 tlv_item = proto_tree_add_item(tree, hf_docsis_mdd_bpi_plus_tlv, tvb, pos, tlv_length + 2, ENC_NA);
6493 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, mdd_bpi_plus_vals, "Unknown TLV: %u"));
6494 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_mdd_bpi_plus);
6495 proto_tree_add_item(tlv_tree, hf_docsis_mdd_bpi_plus_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
6496 proto_tree_add_item(tlv_tree, hf_docsis_mdd_bpi_plus_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
6497 pos += 2;
6499 switch (tlv_type)
6501 case MDD_BPI_PLUS_VERSION:
6502 if (tlv_length == 1)
6503 proto_tree_add_item(tlv_tree, hf_docsis_mdd_bpi_plus_version, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
6504 else
6505 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6506 break;
6507 case MDD_BPI_PLUS_CFG:
6508 if (tlv_length == 1)
6509 proto_tree_add_bitmask(tlv_tree, tvb, pos, hf_docsis_mdd_bpi_plus_cfg, ett_sub_tlv, mdd_bpi_plus_cfg, ENC_BIG_ENDIAN);
6510 else
6511 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6512 break;
6513 default:
6514 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
6515 break;
6517 pos += tlv_length;
6519 if (pos != end)
6520 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
6523 static int
6524 dissect_mdd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6526 proto_item *mdd_item;
6527 proto_tree *mdd_tree;
6529 int pos;
6530 uint8_t type;
6531 uint32_t i, length;
6533 proto_tree *tlv_tree;
6534 proto_item *tlv_item;
6535 static int * const non_channel_events[] = {
6536 &hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_sequence_out_of_range,
6537 &hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup,
6538 &hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power,
6539 NULL
6542 col_set_str(pinfo->cinfo, COL_INFO, "MDD Message:");
6544 mdd_item = proto_tree_add_item(tree, proto_docsis_mdd, tvb, 0, -1, ENC_NA);
6545 mdd_tree = proto_item_add_subtree(mdd_item, ett_docsis_mdd);
6547 proto_tree_add_item (mdd_tree, hf_docsis_mdd_ccc, tvb, 0, 1, ENC_BIG_ENDIAN);
6548 proto_tree_add_item (mdd_tree, hf_docsis_mdd_number_of_fragments, tvb, 1, 1, ENC_BIG_ENDIAN);
6549 proto_tree_add_item (mdd_tree, hf_docsis_mdd_fragment_sequence_number, tvb, 2, 1, ENC_BIG_ENDIAN);
6550 proto_tree_add_item (mdd_tree, hf_docsis_mdd_current_channel_dcid, tvb, 3, 1, ENC_BIG_ENDIAN);
6552 /* TLVs... */
6553 pos = 4;
6554 while (tvb_reported_length_remaining(tvb, pos) > 0)
6556 type = tvb_get_uint8(tvb, pos);
6557 length = tvb_get_uint8(tvb, pos + 1);
6558 tlv_item = proto_tree_add_item(mdd_tree, hf_docsis_mdd_tlv, tvb, pos, length + 2, ENC_NA);
6559 proto_item_set_text(tlv_item, "%s", val_to_str(type, mdd_tlv_vals, "Unknown TLV %u"));
6560 tlv_tree = proto_item_add_subtree(tlv_item, ett_tlv);
6561 proto_tree_add_item(tlv_tree, hf_docsis_mdd_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
6562 proto_tree_add_item(tlv_tree, hf_docsis_mdd_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
6563 pos += 2;
6565 switch(type)
6567 case DOWNSTREAM_ACTIVE_CHANNEL_LIST:
6568 dissect_mdd_ds_active_channel_list(tvb, pinfo, tlv_tree, pos, length );
6569 break;
6570 case MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP:
6571 dissect_mdd_ds_service_group(tvb, pinfo, tlv_tree, pos, length );
6572 break;
6573 case DOWNSTREAM_AMBIGUITY_RESOLUTION_FREQUENCY_LIST:
6574 for (i = 0; i < length; i+=4) {
6575 proto_tree_add_item (tlv_tree, hf_docsis_mdd_downstream_ambiguity_resolution_frequency, tvb, pos + i, 4, ENC_BIG_ENDIAN);
6577 break;
6578 case RECEIVE_CHANNEL_PROFILE_REPORTING_CONTROL:
6579 dissect_mdd_channel_profile_reporting_control(tvb, pinfo, tlv_tree, pos, length );
6580 break;
6581 case IP_INITIALIZATION_PARAMETERS:
6582 dissect_mdd_ip_init_param(tvb, pinfo, tlv_tree, pos, length );
6583 break;
6584 case EARLY_AUTHENTICATION_AND_ENCRYPTION:
6585 proto_tree_add_item (tlv_tree, hf_docsis_mdd_early_authentication_and_encryption, tvb, pos, 1, ENC_BIG_ENDIAN);
6586 break;
6587 case UPSTREAM_ACTIVE_CHANNEL_LIST:
6588 dissect_mdd_upstream_active_channel_list(tvb, pinfo, tlv_tree, pos, length );
6589 break;
6590 case UPSTREAM_AMBIGUITY_RESOLUTION_CHANNEL_LIST:
6591 for (i = 0; i < length; i++) {
6592 proto_tree_add_item (tlv_tree, hf_docsis_mdd_upstream_ambiguity_resolution_channel_list_channel_id, tvb, pos + i , 1, ENC_BIG_ENDIAN);
6594 break;
6595 case UPSTREAM_FREQUENCY_RANGE:
6596 proto_tree_add_item (tlv_tree, hf_docsis_mdd_upstream_frequency_range, tvb, pos, 1, ENC_BIG_ENDIAN);
6597 break;
6598 case SYMBOL_CLOCK_LOCKING_INDICATOR:
6599 proto_tree_add_item (tlv_tree, hf_docsis_mdd_symbol_clock_locking_indicator, tvb, pos, 1, ENC_BIG_ENDIAN);
6600 break;
6601 case CM_STATUS_EVENT_CONTROL:
6602 dissect_mdd_cm_status_event_control(tvb, pinfo, tlv_tree, pos, length );
6603 break;
6604 case UPSTREAM_TRANSMIT_POWER_REPORTING:
6605 proto_tree_add_item (tlv_tree, hf_docsis_mdd_upstream_transmit_power_reporting, tvb, pos, 1, ENC_BIG_ENDIAN);
6606 break;
6607 case DSG_DA_TO_DSID_ASSOCIATION_ENTRY:
6608 dissect_mdd_dsg_da_to_dsid(tvb, pinfo, tlv_tree, pos, length );
6609 break;
6610 case CM_STATUS_EVENT_ENABLE_NON_CHANNEL_SPECIFIC_EVENTS:
6611 proto_tree_add_bitmask(tlv_tree, tvb, pos, hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events, ett_sub_tlv, non_channel_events, ENC_BIG_ENDIAN);
6612 break;
6613 case EXTENDED_UPSTREAM_TRANSMIT_POWER_SUPPORT:
6614 proto_tree_add_item (tlv_tree, hf_docsis_mdd_extended_upstream_transmit_power_support, tvb, pos, 1, ENC_BIG_ENDIAN);
6615 break;
6616 case CMTS_DOCSIS_VERSION:
6617 dissect_mdd_docsis_version(tvb, pinfo, tlv_item, tlv_tree, pos, length);
6618 break;
6619 case CM_PERIODIC_MAINTENANCE_TIMEOUT_INDICATOR:
6620 proto_tree_add_item (tlv_tree, hf_docsis_mdd_cm_periodic_maintenance_timeout_indicator, tvb, pos, length, ENC_BIG_ENDIAN);
6621 break;
6622 case DLS_BROADCAST_AND_MULTICAST_DELIVERY_METHOD:
6623 proto_tree_add_item (tlv_tree, hf_docsis_mdd_dls_broadcast_and_multicast_delivery_method, tvb, pos, length, ENC_BIG_ENDIAN);
6624 break;
6625 case CM_STATUS_EVENT_ENABLE_FOR_DOCSIS_3_1_EVENTS:
6626 if (length == 4) {
6627 static int * const mdd_cm_status_event_d31[] = {
6628 &hf_docsis_mdd_cm_status_event_d31_ofdm_prof_fail,
6629 &hf_docsis_mdd_cm_status_event_d31_prim_down_chan_change,
6630 &hf_docsis_mdd_cm_status_event_d31_dpd_mismatch,
6631 &hf_docsis_mdd_cm_status_event_d31_deprecated,
6632 &hf_docsis_mdd_cm_status_event_d31_ncp_prof_fail,
6633 &hf_docsis_mdd_cm_status_event_d31_loss_fec_plc,
6634 &hf_docsis_mdd_cm_status_event_d31_ncp_prof_recover,
6635 &hf_docsis_mdd_cm_status_event_d31_fec_recover_on_plc,
6636 &hf_docsis_mdd_cm_status_event_d31_fec_recover_on_ofdm_prof,
6637 &hf_docsis_mdd_cm_status_event_d31_ofdma_prof_fail,
6638 &hf_docsis_mdd_cm_status_event_d31_map_stor_overflow_ind,
6639 &hf_docsis_mdd_cm_status_event_d31_ofdm_map_stor_almost_full_ind,
6640 &hf_docsis_mdd_cm_status_event_d31_reserved,
6641 NULL
6643 proto_tree_add_bitmask_list(tlv_tree, tvb, pos, length, mdd_cm_status_event_d31, ENC_BIG_ENDIAN);
6645 else
6647 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6649 break;
6650 case DIPLEXER_BAND_EDGE:
6651 dissect_mdd_diplexer_band_edge(tvb, pinfo, tlv_tree, pos, length );
6652 break;
6653 case ADVANCED_BAND_PLAN:
6654 dissect_mdd_advanced_band_plan(tvb, pinfo, tlv_item, tlv_tree, pos, length);
6655 break;
6656 case MDD_BPI_PLUS:
6657 dissect_mdd_bpi_plus(tvb, pinfo, tlv_item, tlv_tree, pos, length);
6658 break;
6659 default:
6660 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown MDD TLV type: %u", type);
6661 break;
6664 pos += length;
6667 return tvb_captured_length(tvb);
6670 static int
6671 dissect_bintrngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6673 proto_item *bintrngreq_item;
6674 proto_tree *bintrngreq_tree;
6675 uint8_t md_ds_sg_id;
6676 uint16_t offset = 0;
6678 md_ds_sg_id = tvb_get_uint8 (tvb, 1);
6680 col_add_fstr (pinfo->cinfo, COL_INFO, "Bonded Initial Ranging Request: MD-DS-SG-ID = %u (0x%X)",
6681 md_ds_sg_id, md_ds_sg_id );
6683 bintrngreq_item = proto_tree_add_item(tree, proto_docsis_bintrngreq, tvb, offset, -1, ENC_NA);
6684 bintrngreq_tree = proto_item_add_subtree (bintrngreq_item, ett_docsis_bintrngreq);
6685 proto_tree_add_item (bintrngreq_tree, hf_docsis_bintrngreq_capflags, tvb, offset, 1, ENC_BIG_ENDIAN);
6686 proto_tree_add_item( bintrngreq_tree, hf_docsis_bintrngreq_capflags_frag, tvb, offset, 1, ENC_BIG_ENDIAN );
6687 proto_tree_add_item( bintrngreq_tree, hf_docsis_bintrngreq_capflags_encrypt, tvb, offset, 1, ENC_BIG_ENDIAN );
6688 offset++;
6689 proto_tree_add_item (bintrngreq_tree, hf_docsis_bintrngreq_mddsgid, tvb, offset, 1, ENC_BIG_ENDIAN);
6690 offset++;
6691 proto_tree_add_item (bintrngreq_tree, hf_docsis_mgt_down_chid, tvb, offset, 1, ENC_BIG_ENDIAN);
6692 offset++;
6693 proto_tree_add_item (bintrngreq_tree, hf_docsis_mgt_upstream_chid, tvb, offset, 1, ENC_BIG_ENDIAN);
6695 return tvb_captured_length(tvb);
6698 static int
6699 dissect_type35ucd(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6701 return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_type35ucd, MGT_TYPE35UCD);
6704 static int
6705 dissect_dbcreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6707 proto_item *dbcreq_item, *reassembled_item;
6708 proto_tree *dbcreq_tree, *reassembled_tree;
6709 uint32_t transid, number_of_fragments, fragment_sequence_number, id;
6710 tvbuff_t *next_tvb;
6712 dbcreq_item = proto_tree_add_item(tree, proto_docsis_dbcreq, tvb, 0, -1, ENC_NA);
6713 dbcreq_tree = proto_item_add_subtree (dbcreq_item, ett_docsis_dbcreq);
6714 proto_tree_add_item_ret_uint(dbcreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
6715 proto_tree_add_item_ret_uint( dbcreq_tree, hf_docsis_dbcreq_number_of_fragments, tvb, 2, 1, ENC_BIG_ENDIAN, &number_of_fragments);
6716 proto_tree_add_item_ret_uint( dbcreq_tree, hf_docsis_dbcreq_fragment_sequence_number, tvb, 3, 1, ENC_BIG_ENDIAN, &fragment_sequence_number);
6718 col_add_fstr (pinfo->cinfo, COL_INFO,
6719 "Dynamic Bonding Change Request: Tran-Id = %u ", transid);
6720 col_set_fence(pinfo->cinfo, COL_INFO);
6722 if(number_of_fragments > 1) {
6723 pinfo->fragmented = true;
6725 id = (MGT_DBC_REQ << 24) + transid;
6726 fragment_head* reassembled_tlv = NULL;
6727 reassembled_tlv = fragment_add_seq_check(&docsis_tlv_reassembly_table,
6728 tvb, 4, pinfo,
6729 id, NULL, /* ID for fragments belonging together */
6730 fragment_sequence_number - 1, /* Sequence number starts at 0 */
6731 tvb_reported_length_remaining(tvb, 4), /* fragment length - to the end */
6732 (fragment_sequence_number != number_of_fragments)); /* More fragments? */
6734 if (reassembled_tlv) {
6735 tvbuff_t *tlv_tvb = NULL;
6737 reassembled_item = proto_tree_add_item(dbcreq_tree, hf_docsis_tlv_reassembled, tvb, 0, -1, ENC_NA);
6738 reassembled_tree = proto_item_add_subtree (reassembled_item, ett_docsis_tlv_reassembled );
6741 tlv_tvb = process_reassembled_data(tvb, 4, pinfo, "Reassembled TLV", reassembled_tlv, &docsis_tlv_frag_items,
6742 NULL, reassembled_tree);
6744 if (tlv_tvb && tvb_reported_length(tlv_tvb) > 0) {
6745 call_dissector (docsis_tlv_handle, tlv_tvb, pinfo, reassembled_tree);
6749 } else {
6750 /* Call Dissector for Appendix C TLVs */
6751 next_tvb = tvb_new_subset_remaining (tvb, 4);
6752 call_dissector (docsis_tlv_handle, next_tvb, pinfo, dbcreq_tree);
6755 return tvb_captured_length(tvb);
6758 static int
6759 dissect_dbcrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6761 proto_item *dbcrsp_item;
6762 proto_tree *dbcrsp_tree;
6763 uint32_t transid, confcode;
6764 tvbuff_t *next_tvb;
6766 dbcrsp_item = proto_tree_add_item(tree, proto_docsis_dbcrsp, tvb, 0, -1, ENC_NA);
6767 dbcrsp_tree = proto_item_add_subtree (dbcrsp_item, ett_docsis_dbcrsp);
6768 proto_tree_add_item_ret_uint(dbcrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
6769 proto_tree_add_item_ret_uint( dbcrsp_tree, hf_docsis_dbcrsp_conf_code, tvb, 2, 1, ENC_BIG_ENDIAN, &confcode);
6771 col_add_fstr (pinfo->cinfo, COL_INFO,
6772 "Dynamic Bonding Change Response: Tran-Id = %u (%s) ", transid,
6773 val_to_str_ext (confcode, &docsis_conf_code_ext, "%d"));
6775 /* Call Dissector for Appendix C TLVs */
6776 next_tvb = tvb_new_subset_remaining (tvb, 3);
6777 call_dissector (docsis_tlv_handle, next_tvb, pinfo, dbcrsp_tree);
6778 return tvb_captured_length(tvb);
6781 static int
6782 dissect_dbcack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6784 proto_item *dbcack_item;
6785 proto_tree *dbcack_tree = NULL;
6786 uint16_t transid;
6787 tvbuff_t *next_tvb;
6789 transid = tvb_get_ntohs (tvb, 0);
6791 col_add_fstr (pinfo->cinfo, COL_INFO,
6792 "Dynamic Bonding Change Acknowledge: Tran-Id = %u ", transid);
6794 dbcack_item = proto_tree_add_item(tree, proto_docsis_dbcack, tvb, 0, -1, ENC_NA);
6795 dbcack_tree = proto_item_add_subtree (dbcack_item, ett_docsis_dbcack);
6796 proto_tree_add_item (dbcack_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN);
6798 /* Call Dissector for Appendix C TLVs */
6799 next_tvb = tvb_new_subset_remaining (tvb, 2);
6800 call_dissector (docsis_tlv_handle, next_tvb, pinfo, dbcack_tree);
6801 return tvb_captured_length(tvb);
6804 static int
6805 dissect_dpvreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6807 proto_item *it;
6808 proto_tree *dpvreq_tree;
6809 uint32_t transid, dschan;
6811 it = proto_tree_add_item(tree, proto_docsis_dpvreq, tvb, 0, -1, ENC_NA);
6812 dpvreq_tree = proto_item_add_subtree (it, ett_docsis_dpvreq);
6813 proto_tree_add_item_ret_uint (dpvreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
6814 proto_tree_add_item_ret_uint (dpvreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &dschan);
6816 col_add_fstr (pinfo->cinfo, COL_INFO,
6817 "DOCSIS Path Verify Request: Transaction ID = %u DS-Ch %d",
6818 transid, dschan);
6820 proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_flags, tvb, 3, 1, ENC_BIG_ENDIAN);
6821 proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_us_sf, tvb, 4, 4, ENC_BIG_ENDIAN);
6822 proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_n, tvb, 8, 2, ENC_BIG_ENDIAN);
6823 proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_start, tvb, 10, 1, ENC_BIG_ENDIAN);
6824 proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_end, tvb, 11, 1, ENC_BIG_ENDIAN);
6825 proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_ts_start, tvb, 12, 4, ENC_BIG_ENDIAN);
6826 proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_ts_end, tvb, 16, 4, ENC_BIG_ENDIAN);
6828 return tvb_captured_length(tvb);
6831 static int
6832 dissect_dpvrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6834 proto_item *it;
6835 proto_tree *dpvrsp_tree = NULL;
6836 uint32_t transid, dschan;
6838 it = proto_tree_add_item (tree, proto_docsis_dpvrsp, tvb, 0, -1, ENC_NA);
6839 dpvrsp_tree = proto_item_add_subtree (it, ett_docsis_dpvrsp);
6840 proto_tree_add_item_ret_uint (dpvrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
6841 proto_tree_add_item_ret_uint (dpvrsp_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &dschan);
6843 col_add_fstr (pinfo->cinfo, COL_INFO,
6844 "DOCSIS Path Verify Response: Transaction ID = %u DS-Ch %d",
6845 transid, dschan);
6847 proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_flags, tvb, 3, 1, ENC_BIG_ENDIAN);
6848 proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_us_sf, tvb, 4, 4, ENC_BIG_ENDIAN);
6849 proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_n, tvb, 8, 2, ENC_BIG_ENDIAN);
6850 proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_start, tvb, 10, 1, ENC_BIG_ENDIAN);
6851 proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_end, tvb, 11, 1, ENC_BIG_ENDIAN);
6852 proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_ts_start, tvb, 12, 4, ENC_BIG_ENDIAN);
6853 proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_ts_end, tvb, 16, 4, ENC_BIG_ENDIAN);
6855 return tvb_captured_length(tvb);
6858 static void
6859 dissect_cmstatus_status_event_tlv (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
6861 proto_item *it, *tlv_item, *tlv_len_item;
6862 proto_tree *tlv_tree, *tlvtlv_tree;
6863 uint16_t pos = 0;
6864 uint8_t type;
6865 uint32_t length;
6867 it = proto_tree_add_item(tree, hf_docsis_cmstatus_status_event_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
6868 tlv_tree = proto_item_add_subtree (it, ett_docsis_cmstatus_status_event_tlv);
6870 while (tvb_reported_length_remaining(tvb, pos) > 0)
6872 type = tvb_get_uint8 (tvb, pos);
6873 tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, -1,
6874 ett_docsis_cmstatus_status_event_tlvtlv, &tlv_item,
6875 val_to_str(type, cmstatus_status_event_tlv_vals,
6876 "Unknown Status Event TLV (%u)"));
6877 proto_tree_add_uint (tlvtlv_tree, hf_docsis_cmstatus_status_event_type, tvb, pos, 1, type);
6878 pos++;
6879 tlv_len_item = proto_tree_add_item_ret_uint (tlvtlv_tree, hf_docsis_cmstatus_status_event_length, tvb, pos, 1, ENC_NA, &length);
6880 pos++;
6881 proto_item_set_len(tlv_item, length + 2);
6883 switch (type)
6885 case EVENT_DS_CH_ID:
6886 if (length == 1)
6888 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_ds_ch_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6890 else
6892 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6894 break;
6896 case EVENT_US_CH_ID:
6897 if (length == 1)
6899 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_us_ch_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6901 else
6903 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6905 break;
6907 case EVENT_DSID:
6908 if (length == 3)
6910 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_dsid, tvb, pos, 3, ENC_BIG_ENDIAN);
6912 else
6914 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6916 break;
6918 case EVENT_MAC_ADDRESS:
6919 if (length == 6)
6921 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_mac_address, tvb, pos, 6, ENC_NA);
6923 else
6925 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6927 break;
6929 case EVENT_DS_OFDM_PROFILE_ID:
6930 if (length == 1)
6932 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_ds_ofdm_profile_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6934 else
6936 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6938 break;
6940 case EVENT_US_OFDMA_PROFILE_ID:
6941 if (length == 1)
6943 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_us_ofdma_profile_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6945 else
6947 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6949 break;
6951 case EVENT_DESCR:
6952 if (length >= 1 && length <= 80)
6954 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_descr, tvb, pos, length, ENC_NA);
6956 else
6958 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6960 break;
6961 } /* switch */
6962 pos += length;
6963 } /* while */
6966 static void
6967 dissect_cmstatus_tlv (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
6969 proto_item *it, *tlv_item;
6970 proto_tree *tlv_tree, *tlvtlv_tree;
6971 uint16_t pos = 0;
6972 uint8_t type;
6973 uint32_t length;
6974 tvbuff_t* next_tvb;
6976 it = proto_tree_add_item(tree, hf_docsis_cmstatus_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
6977 tlv_tree = proto_item_add_subtree (it, ett_docsis_cmstatus_tlv);
6979 while (tvb_reported_length_remaining(tvb, pos) > 0)
6981 type = tvb_get_uint8 (tvb, pos);
6982 tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, -1,
6983 ett_docsis_cmstatus_tlvtlv, &tlv_item,
6984 val_to_str(type, cmstatus_tlv_vals,
6985 "Unknown TLV (%u)"));
6986 proto_tree_add_uint (tlvtlv_tree, hf_docsis_cmstatus_type, tvb, pos, 1, type);
6987 pos++;
6988 proto_tree_add_item_ret_uint (tlvtlv_tree, hf_docsis_cmstatus_length, tvb, pos, 1, ENC_NA, &length);
6989 pos++;
6990 proto_item_set_len(tlv_item, length + 2);
6992 switch (type)
6994 case STATUS_EVENT:
6995 next_tvb = tvb_new_subset_length(tvb, pos, length);
6996 dissect_cmstatus_status_event_tlv (next_tvb, pinfo, tlvtlv_tree);
6997 break;
6999 } /* switch */
7000 pos += length;
7001 } /* while */
7004 static void
7005 dissect_cmstatus_common (tvbuff_t * tvb, proto_tree * tree)
7007 uint8_t event_type;
7009 event_type = tvb_get_uint8 (tvb, 2);
7010 switch (event_type)
7012 case SEC_CH_MDD_TIMEOUT:
7013 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_mdd_t, tvb, 2, 1, ENC_BIG_ENDIAN);
7014 break;
7016 case QAM_FEC_LOCK_FAILURE:
7017 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_qfl_f, tvb, 2, 1, ENC_BIG_ENDIAN);
7018 break;
7020 case SEQ_OUT_OF_RANGE:
7021 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_s_o, tvb, 2, 1, ENC_BIG_ENDIAN);
7022 break;
7024 case SEC_CH_MDD_RECOVERY:
7025 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_mdd_r, tvb, 2, 1, ENC_BIG_ENDIAN);
7026 break;
7028 case QAM_FEC_LOCK_RECOVERY:
7029 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_qfl_r, tvb, 2, 1, ENC_BIG_ENDIAN);
7030 break;
7032 case T4_TIMEOUT:
7033 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_t4_t, tvb, 2, 1, ENC_BIG_ENDIAN);
7034 break;
7036 case T3_RETRIES_EXCEEDED:
7037 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_t3_e, tvb, 2, 1, ENC_BIG_ENDIAN);
7038 break;
7040 case SUCCESS_RANGING_AFTER_T3_RETRIES_EXCEEDED:
7041 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_rng_s, tvb, 2, 1, ENC_BIG_ENDIAN);
7042 break;
7044 case CM_ON_BATTERY:
7045 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_cm_b, tvb, 2, 1, ENC_BIG_ENDIAN);
7046 break;
7048 case CM_ON_AC_POWER:
7049 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_cm_a, tvb, 2, 1, ENC_BIG_ENDIAN);
7050 break;
7052 case MAC_REMOVAL_EVENT:
7053 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_mac_removal, tvb, 2, 1, ENC_BIG_ENDIAN);
7054 break;
7056 case DS_OFDM_PROFILE_FAILURE:
7057 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_ds_ofdm_profile_failure, tvb, 2, 1, ENC_BIG_ENDIAN);
7058 break;
7060 case PRIMARY_DOWNSTREAM_CHANGE:
7061 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_prim_ds_change, tvb, 2, 1, ENC_BIG_ENDIAN);
7062 break;
7064 case DPD_MISMATCH:
7065 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_dpd_mismatch, tvb, 2, 1, ENC_BIG_ENDIAN);
7066 break;
7068 case NCP_PROFILE_FAILURE:
7069 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_ncp_profile_failure, tvb, 2, 1, ENC_BIG_ENDIAN);
7070 break;
7072 case PLC_FAILURE:
7073 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_plc_failure, tvb, 2, 1, ENC_BIG_ENDIAN);
7074 break;
7076 case NCP_PROFILE_RECOVERY:
7077 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_ncp_profile_recovery, tvb, 2, 1, ENC_BIG_ENDIAN);
7078 break;
7080 case PLC_RECOVERY:
7081 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_plc_recovery, tvb, 2, 1, ENC_BIG_ENDIAN);
7082 break;
7084 case OFDM_PROFILE_RECOVERY:
7085 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_ofdm_profile_recovery, tvb, 2, 1, ENC_BIG_ENDIAN);
7086 break;
7088 case OFDMA_PROFILE_FAILURE:
7089 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_ofdma_profile_failure, tvb, 2, 1, ENC_BIG_ENDIAN);
7090 break;
7092 case MAP_STORAGE_OVERFLOW_INDICATOR:
7093 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_map_storage_overflow_indicator, tvb, 2, 1, ENC_BIG_ENDIAN);
7094 break;
7096 case MAP_STORAGE_ALMOST_FULL_INDICATOR:
7097 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_map_storage_almost_full_indicator, tvb, 2, 1, ENC_BIG_ENDIAN);
7098 break;
7100 default:
7101 proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_unknown, tvb, 2, 1, ENC_BIG_ENDIAN);
7102 break;
7103 } /* switch */
7104 return;
7107 static int
7108 dissect_cmstatus (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7110 proto_item *it;
7111 proto_tree *cmstatus_tree;
7112 uint32_t transid;
7113 tvbuff_t* next_tvb;
7115 it = proto_tree_add_item(tree, proto_docsis_cmstatus, tvb, 0, -1, ENC_NA);
7116 cmstatus_tree = proto_item_add_subtree (it, ett_docsis_cmstatus);
7117 proto_tree_add_item_ret_uint (cmstatus_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
7119 col_add_fstr (pinfo->cinfo, COL_INFO, "CM-STATUS Report: Transaction ID = %u", transid);
7121 dissect_cmstatus_common (tvb, cmstatus_tree);
7123 /* Call Dissector TLVs */
7124 next_tvb = tvb_new_subset_remaining(tvb, 3);
7125 dissect_cmstatus_tlv(next_tvb, pinfo, cmstatus_tree);
7126 return tvb_captured_length(tvb);
7129 static int
7130 dissect_cmstatusack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7132 proto_item *it;
7133 proto_tree *cmstatus_tree;
7134 uint32_t transid;
7136 it = proto_tree_add_item(tree, proto_docsis_cmstatusack, tvb, 0, -1, ENC_NA);
7137 cmstatus_tree = proto_item_add_subtree (it, ett_docsis_cmstatusack);
7138 proto_tree_add_item_ret_uint (cmstatus_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
7140 col_add_fstr (pinfo->cinfo, COL_INFO, "CM-STATUS Report Acknowledge: Transaction ID = %u", transid);
7142 dissect_cmstatus_common (tvb, cmstatus_tree);
7144 return tvb_captured_length(tvb);
7147 static void
7148 dissect_ds_event(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
7150 uint8_t type;
7151 uint32_t length;
7152 proto_tree *event_tree;
7153 proto_item *event_item, *tlv_len_item;
7154 int pos = start;
7156 while (pos < (start + len))
7158 type = tvb_get_uint8 (tvb, pos);
7159 event_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
7160 ett_docsis_cmctrl_tlv_ds_event, &event_item,
7161 val_to_str(type, cmctrlreq_ds_tlv_vals,
7162 "Unknown TLV (%u)"));
7163 proto_tree_add_uint (event_tree, hf_docsis_cmctrl_ds_type, tvb, pos, 1, type);
7164 pos++;
7165 tlv_len_item = proto_tree_add_item_ret_uint (event_tree, hf_docsis_cmctrl_ds_length, tvb, pos, 1, ENC_NA, &length);
7166 pos++;
7167 proto_item_set_len(event_item, length + 2);
7169 switch (type)
7171 case DS_EVENT_CH_ID:
7172 if (length == 1)
7174 proto_tree_add_item (event_tree, hf_docsis_cmctrl_ds_event_ch_id, tvb, pos, length, ENC_BIG_ENDIAN);
7176 else
7178 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7180 break;
7181 case DS_EVENT_MASK:
7182 if (length == 2)
7184 proto_tree_add_item (event_tree, hf_docsis_cmctrl_ds_event_mask, tvb, pos, length, ENC_NA);
7186 else
7188 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7190 break;
7191 } /* switch */
7193 pos += length;
7194 } /* while */
7197 static void
7198 dissect_us_event(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
7200 uint8_t type;
7201 uint32_t length;
7202 proto_tree *event_tree;
7203 proto_item *event_item, *tlv_len_item;
7204 int pos = start;
7206 while (pos < (start + len))
7208 type = tvb_get_uint8 (tvb, pos);
7209 event_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
7210 ett_docsis_cmctrl_tlv_us_event, &event_item,
7211 val_to_str(type, cmctrlreq_us_tlv_vals,
7212 "Unknown TLV (%u)"));
7213 proto_tree_add_uint (event_tree, hf_docsis_cmctrlreq_us_type, tvb, pos, 1, type);
7214 pos++;
7215 tlv_len_item = proto_tree_add_item_ret_uint (event_tree, hf_docsis_cmctrlreq_us_length, tvb, pos, 1, ENC_NA, &length);
7216 pos++;
7217 proto_item_set_len(event_item, length + 2);
7219 switch (type)
7221 case US_EVENT_CH_ID:
7222 if (length == 1)
7224 proto_tree_add_item (event_tree, hf_docsis_cmctrl_us_event_ch_id, tvb, pos, length, ENC_BIG_ENDIAN);
7226 else
7228 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7230 break;
7231 case US_EVENT_MASK:
7232 if (length == 2)
7234 proto_tree_add_item (event_tree, hf_docsis_cmctrl_us_event_mask, tvb, pos, length, ENC_NA);
7236 else
7238 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7240 break;
7241 } /* switch */
7242 pos += length;
7243 } /* while */
7246 static void
7247 dissect_cmctrlreq_tlv(tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
7249 proto_item *it, *tlv_item, *tlv_len_item;
7250 proto_tree *tlv_tree, *tlvtlv_tree;
7251 uint16_t pos = 0;
7252 uint8_t type;
7253 uint32_t length;
7255 it = proto_tree_add_item(tree, hf_docsis_cmctrlreq_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7256 tlv_tree = proto_item_add_subtree (it, ett_docsis_cmctrlreq_tlv);
7258 while (tvb_reported_length_remaining(tvb, pos) > 0)
7260 type = tvb_get_uint8 (tvb, pos);
7261 length = tvb_get_uint8 (tvb, pos + 1);
7262 tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
7263 ett_docsis_cmctrlreq_tlvtlv, &tlv_item,
7264 val_to_str(type, cmctrlreq_tlv_vals,
7265 "Unknown TLV (%u)"));
7266 proto_tree_add_uint (tlvtlv_tree, hf_docsis_cmctrlreq_type, tvb, pos, 1, type);
7267 pos++;
7268 tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrlreq_length, tvb, pos, 1, ENC_NA);
7269 pos++;
7270 proto_item_set_len(tlv_item, length + 2);
7272 switch (type)
7274 case CM_CTRL_MUTE:
7275 if (length == 1)
7277 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_mute, tvb, pos, length, ENC_BIG_ENDIAN);
7279 else
7281 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7283 break;
7284 case CM_CTRL_MUTE_TIMEOUT:
7285 if (length == 4 || length == 1) /* response TLV always with len 1 */
7287 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_mute_timeout, tvb, pos, length, ENC_BIG_ENDIAN);
7289 else
7291 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7293 break;
7294 case CM_CTRL_REINIT:
7295 if (length == 1)
7297 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_reinit, tvb, pos, length, ENC_BIG_ENDIAN);
7299 else
7301 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7303 break;
7304 case CM_CTRL_DISABLE_FWD:
7305 if (length == 1)
7307 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_disable_fwd, tvb, pos, length, ENC_BIG_ENDIAN);
7309 else
7311 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7313 break;
7314 case CM_CTRL_DS_EVENT:
7315 if (length == 1)
7317 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_ds_event, tvb, pos, length, ENC_NA);
7319 else
7321 dissect_ds_event(tvb, pinfo, tlvtlv_tree, pos, length);
7323 break;
7324 case CM_CTRL_US_EVENT:
7325 if (length == 1)
7327 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_us_event, tvb, pos, length, ENC_NA);
7329 else
7331 dissect_us_event(tvb, pinfo, tlvtlv_tree, pos, length);
7333 break;
7334 case CM_CTRL_EVENT:
7335 if (length == 2 || length == 1) /* response TLV always with len 1 */
7337 proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_event, tvb, pos, length, ENC_NA);
7339 else
7341 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7343 break;
7345 } /* switch */
7347 pos += length;
7351 static int
7352 dissect_cmctrlreq(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7354 proto_item *it;
7355 proto_tree *cmctrlreq_tree;
7356 uint32_t transid;
7357 tvbuff_t *next_tvb;
7359 it = proto_tree_add_item (tree, proto_docsis_cmctrlreq, tvb, 0, -1, ENC_NA);
7360 cmctrlreq_tree = proto_item_add_subtree (it, ett_docsis_cmctrlreq);
7361 proto_tree_add_item_ret_uint (cmctrlreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
7363 col_add_fstr (pinfo->cinfo, COL_INFO,
7364 "CM Control Request: Transaction ID = %u", transid);
7366 next_tvb = tvb_new_subset_remaining(tvb, 2);
7367 dissect_cmctrlreq_tlv(next_tvb, pinfo, cmctrlreq_tree);
7368 return tvb_captured_length(tvb);
7371 static int
7372 dissect_cmctrlrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7374 proto_item *it;
7375 proto_tree *cmctrlrsp_tree;
7376 uint32_t transid;
7377 tvbuff_t *next_tvb;
7379 it = proto_tree_add_item(tree, proto_docsis_cmctrlrsp, tvb, 0, -1, ENC_NA);
7380 cmctrlrsp_tree = proto_item_add_subtree (it, ett_docsis_cmctrlrsp);
7381 proto_tree_add_item_ret_uint (cmctrlrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
7383 col_add_fstr (pinfo->cinfo, COL_INFO,
7384 "CM Control Response: Transaction ID = %u", transid);
7386 /* Call Dissector for Appendix C TLVs */
7387 next_tvb = tvb_new_subset_remaining (tvb, 2);
7388 dissect_cmctrlreq_tlv(next_tvb, pinfo, cmctrlrsp_tree);
7389 return tvb_captured_length(tvb);
7392 static int
7393 dissect_regreqmp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7395 proto_item *it;
7396 proto_tree *regreqmp_tree;
7397 tvbuff_t *next_tvb;
7399 col_set_str(pinfo->cinfo, COL_INFO, "REG-REQ-MP Message:");
7401 it = proto_tree_add_item(tree, proto_docsis_regreqmp, tvb, 0, -1, ENC_NA);
7402 regreqmp_tree = proto_item_add_subtree (it, ett_docsis_regreqmp);
7404 proto_tree_add_item (regreqmp_tree, hf_docsis_regreqmp_sid, tvb, 0, 2, ENC_BIG_ENDIAN);
7405 proto_tree_add_item (regreqmp_tree, hf_docsis_regreqmp_number_of_fragments, tvb, 2, 1, ENC_BIG_ENDIAN);
7406 proto_tree_add_item (regreqmp_tree, hf_docsis_regreqmp_fragment_sequence_number, tvb, 3, 1, ENC_BIG_ENDIAN);
7408 /* Call Dissector for Appendix C TLVs */
7409 next_tvb = tvb_new_subset_remaining (tvb, 4);
7410 call_dissector (docsis_tlv_handle, next_tvb, pinfo, regreqmp_tree);
7411 return tvb_captured_length(tvb);
7414 static int
7415 dissect_regrspmp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7417 proto_item *it, *reassembled_item;
7418 proto_tree *regrspmp_tree, *reassembled_tree;
7419 unsigned sid, number_of_fragments, fragment_sequence_number, id;
7421 tvbuff_t *next_tvb;
7423 col_set_str(pinfo->cinfo, COL_INFO, "REG-RSP-MP Message");
7424 /* Make sure embedded UCD does not overwrite REGRSPMP info */
7425 col_set_fence(pinfo->cinfo, COL_INFO);
7427 it = proto_tree_add_item(tree, proto_docsis_regrspmp, tvb, 0, -1, ENC_NA);
7428 regrspmp_tree = proto_item_add_subtree (it, ett_docsis_regrspmp);
7430 proto_tree_add_item_ret_uint (regrspmp_tree, hf_docsis_regrspmp_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
7431 proto_tree_add_item (regrspmp_tree, hf_docsis_regrspmp_response, tvb, 2, 1, ENC_BIG_ENDIAN);
7432 proto_tree_add_item_ret_uint (regrspmp_tree, hf_docsis_regrspmp_number_of_fragments, tvb, 3, 1, ENC_BIG_ENDIAN, &number_of_fragments);
7433 proto_tree_add_item_ret_uint (regrspmp_tree, hf_docsis_regrspmp_fragment_sequence_number, tvb, 4, 1, ENC_BIG_ENDIAN, &fragment_sequence_number);
7435 col_add_fstr(pinfo->cinfo, COL_INFO, " (fragment %d):", fragment_sequence_number);
7436 /* Make sure embedded UCD does not overwrite REGRSPMP info */
7437 col_set_fence(pinfo->cinfo, COL_INFO);
7439 if(number_of_fragments > 1) {
7440 pinfo->fragmented = true;
7442 id = (MGT_REG_RSP << 24) + sid;
7443 fragment_head* reassembled_tlv = NULL;
7444 reassembled_tlv = fragment_add_seq_check(&docsis_tlv_reassembly_table,
7445 tvb, 5, pinfo,
7446 id, NULL, /* ID for fragments belonging together */
7447 fragment_sequence_number - 1, /* Sequence number starts at 0 */
7448 tvb_reported_length_remaining(tvb, 5), /* fragment length - to the end */
7449 (fragment_sequence_number != number_of_fragments)); /* More fragments? */
7451 if (reassembled_tlv) {
7452 tvbuff_t *tlv_tvb = NULL;
7454 reassembled_item = proto_tree_add_item(regrspmp_tree, hf_docsis_tlv_reassembled, tvb, 0, -1, ENC_NA);
7455 reassembled_tree = proto_item_add_subtree (reassembled_item, ett_docsis_tlv_reassembled );
7458 tlv_tvb = process_reassembled_data(tvb, 5, pinfo, "Reassembled TLV", reassembled_tlv, &docsis_tlv_frag_items,
7459 NULL, reassembled_tree);
7461 if (tlv_tvb && tvb_reported_length(tlv_tvb) > 0) {
7462 call_dissector (docsis_tlv_handle, tlv_tvb, pinfo, reassembled_tree);
7466 } else {
7467 /* Call Dissector for Appendix C TLVs */
7468 next_tvb = tvb_new_subset_remaining (tvb, 5);
7469 call_dissector (docsis_tlv_handle, next_tvb, pinfo, regrspmp_tree);
7472 return tvb_captured_length(tvb);
7475 static void
7476 dissect_emrsp_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
7478 proto_item *it, *tlv_item;
7479 proto_tree *tlv_tree, *tlvtlv_tree;
7480 unsigned pos = 0;
7481 unsigned length;
7482 uint8_t type;
7484 it = proto_tree_add_item(tree, hf_docsis_emrsp_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7485 tlv_tree = proto_item_add_subtree (it, ett_docsis_emrsp_tlv);
7487 while (tvb_reported_length_remaining(tvb, pos) > 0)
7489 type = tvb_get_uint8 (tvb, pos);
7490 length = tvb_get_uint8 (tvb, pos + 1);
7491 tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
7492 ett_docsis_emrsp_tlvtlv, &tlv_item,
7493 val_to_str(type, emrsp_tlv_vals,
7494 "Unknown TLV (%u)"));
7495 proto_tree_add_item (tlvtlv_tree, hf_docsis_emrsp_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
7496 pos++;
7497 proto_tree_add_item (tlvtlv_tree, hf_docsis_emrsp_tlv_length, tvb, pos, 1, ENC_BIG_ENDIAN);
7498 pos++;
7501 switch (type)
7503 case EM_HOLDOFF_TIMER:
7504 proto_tree_add_item (tlvtlv_tree, hf_docsis_emrsp_tlv_holdoff_timer, tvb, pos, length, ENC_BIG_ENDIAN);
7505 break;
7506 default:
7507 proto_tree_add_item (tlvtlv_tree, hf_docsis_emrsp_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
7508 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
7509 break;
7510 } /* switch */
7511 pos += length;
7512 } /* while */
7515 static int
7516 dissect_emreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7518 proto_item *it;
7519 proto_tree *em_tree;
7521 uint32_t trans_id, req_power_mode;
7523 it = proto_tree_add_item(tree, proto_docsis_emreq, tvb, 0, -1, ENC_NA);
7524 em_tree = proto_item_add_subtree (it, ett_docsis_emreq);
7525 proto_tree_add_item_ret_uint (em_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &trans_id);
7526 proto_tree_add_item_ret_uint (em_tree, hf_docsis_emreq_req_power_mode, tvb, 2, 1, ENC_BIG_ENDIAN, &req_power_mode);
7527 proto_tree_add_item (em_tree, hf_docsis_emreq_reserved, tvb, 3, 1, ENC_BIG_ENDIAN);
7529 col_add_fstr (pinfo->cinfo, COL_INFO, "EM-REQ: Transaction ID: %u, Requested Power Mode: %s (%u)", trans_id,
7530 val_to_str(req_power_mode, emreq_req_power_mode_vals, "Unknown Requested Power Mode (%u)"), req_power_mode);
7532 return tvb_captured_length(tvb);
7535 static int
7536 dissect_emrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7538 proto_item *it;
7539 proto_tree *em_tree;
7540 tvbuff_t *next_tvb;
7542 uint32_t trans_id, rsp_code;
7544 it = proto_tree_add_item(tree, proto_docsis_emrsp, tvb, 0, -1, ENC_NA);
7545 em_tree = proto_item_add_subtree (it, ett_docsis_emrsp);
7546 proto_tree_add_item_ret_uint (em_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &trans_id);
7547 proto_tree_add_item_ret_uint (em_tree, hf_docsis_emrsp_rsp_code, tvb, 2, 1, ENC_BIG_ENDIAN, &rsp_code);
7548 proto_tree_add_item (em_tree, hf_docsis_emrsp_reserved, tvb, 3, 1, ENC_BIG_ENDIAN);
7550 col_add_fstr (pinfo->cinfo, COL_INFO, "EM-RSP: Transaction ID: %u, Response Code: %s (%u)", trans_id,
7551 val_to_str(rsp_code, emrsp_rsp_code_vals, "Unknown Response Code (%u)"), rsp_code);
7553 /* Call Dissector TLVs */
7554 if(tvb_reported_length_remaining(tvb, 4) > 0 )
7556 next_tvb = tvb_new_subset_remaining(tvb, 4);
7557 dissect_emrsp_tlv(next_tvb, pinfo, em_tree);
7560 return tvb_captured_length(tvb);
7563 static void
7564 dissect_subcarrier_assignment_range_list(tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, uint16_t pos, uint32_t len)
7566 proto_item* type_item;
7567 uint32_t i, subcarrier_assignment_type;
7569 type_item = proto_tree_add_item_ret_uint (tree, hf_docsis_ocd_tlv_subc_assign_type, tvb, pos, 1, ENC_BIG_ENDIAN, &subcarrier_assignment_type);
7570 proto_tree_add_item (tree, hf_docsis_ocd_tlv_subc_assign_value, tvb, pos, 1, ENC_BIG_ENDIAN);
7571 proto_tree_add_item (tree, hf_docsis_ocd_subc_assign_subc_type, tvb, pos, 1, ENC_BIG_ENDIAN);
7572 pos++;
7574 switch (subcarrier_assignment_type) {
7575 case SUBCARRIER_ASSIGNMENT_RANGE_CONT:
7576 case SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1:
7577 proto_tree_add_item (tree, hf_docsis_ocd_subc_assign_range, tvb, pos, 4, ENC_BIG_ENDIAN);
7578 break;
7579 case SUBCARRIER_ASSIGNMENT_LIST:
7580 for (i = 0; i < len/2; ++i) {
7581 proto_tree_add_item (tree, hf_docsis_ocd_subc_assign_index, tvb, pos, 2, ENC_BIG_ENDIAN);
7582 pos += 2;
7584 break;
7585 default:
7586 expert_add_info_format(pinfo, type_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown subcarrier assignment type %d", subcarrier_assignment_type);
7587 break;
7591 static void
7592 dissect_ocd_tlv (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
7594 proto_item *it, *tlv_item, *tlv_len_item;
7595 proto_tree *tlv_tree, *tlvtlv_tree;
7596 uint16_t pos = 0;
7597 uint8_t type;
7598 uint32_t length;
7600 it = proto_tree_add_item(tree, hf_docsis_ocd_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7601 tlv_tree = proto_item_add_subtree (it, ett_docsis_ocd_tlv);
7603 while (tvb_reported_length_remaining(tvb, pos) > 0)
7605 type = tvb_get_uint8 (tvb, pos);
7606 tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, -1,
7607 ett_docsis_ocd_tlvtlv, &tlv_item,
7608 val_to_str(type, ocd_tlv_vals,
7609 "Unknown TLV (%u)"));
7610 proto_tree_add_uint (tlvtlv_tree, hf_docsis_ocd_type, tvb, pos, 1, type);
7611 pos++;
7612 tlv_len_item = proto_tree_add_item_ret_uint (tlvtlv_tree, hf_docsis_ocd_length, tvb, pos, 1, ENC_NA, &length);
7613 pos++;
7614 proto_item_set_len(tlv_item, length + 2);
7616 switch (type)
7618 case DISCRETE_FOURIER_TRANSFORM_SIZE:
7619 if (length == 1)
7621 proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_four_trans_size, tvb, pos, 1, ENC_BIG_ENDIAN);
7623 else
7625 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7627 break;
7628 case CYCLIC_PREFIX:
7629 if (length == 1)
7631 proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_cycl_pref, tvb, pos, 1, ENC_BIG_ENDIAN);
7633 else
7635 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7637 break;
7638 case ROLL_OFF:
7639 if (length == 1)
7641 proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_roll_off, tvb, pos, 1, ENC_BIG_ENDIAN);
7643 else
7645 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7647 break;
7648 case OFDM_SPECTRUM_LOCATION:
7649 if (length == 4)
7651 proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_ofdm_spec_loc, tvb, pos, 4, ENC_BIG_ENDIAN);
7653 else
7655 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7657 break;
7658 case TIME_INTERLEAVING_DEPTH:
7659 if (length == 1)
7661 proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_time_int_depth, tvb, pos, 1, ENC_BIG_ENDIAN);
7663 else
7665 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7667 break;
7668 case SUBCARRIER_ASSIGNMENT_RANGE_LIST:
7669 if (length >= 5)
7671 dissect_subcarrier_assignment_range_list(tvb, pinfo, tlvtlv_tree, pos, length);
7673 else
7675 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7677 break;
7678 case PRIMARY_CAPABILITY_INDICATOR:
7679 if (length == 1)
7681 proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_prim_cap_ind, tvb, pos, 1, ENC_BIG_ENDIAN);
7683 else
7685 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7687 break;
7688 case FDX_INDICATOR:
7689 if (length == 1)
7691 proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_fdx_ind, tvb, pos, 1, ENC_BIG_ENDIAN);
7693 else
7695 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7697 break;
7698 default:
7699 proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
7700 break;
7701 } /* switch */
7702 pos += length;
7703 } /* while */
7706 static int
7707 dissect_ocd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7709 proto_item *it;
7710 proto_tree *ocd_tree;
7711 tvbuff_t *tlv_tvb = NULL;
7712 uint32_t downstream_channel_id, configuration_change_count, id;
7714 it = proto_tree_add_item(tree, proto_docsis_ocd, tvb, 0, -1, ENC_NA);
7715 ocd_tree = proto_item_add_subtree (it, ett_docsis_ocd);
7717 proto_tree_add_item_ret_uint (ocd_tree, hf_docsis_mgt_down_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
7718 proto_tree_add_item_ret_uint (ocd_tree, hf_docsis_ocd_ccc, tvb, 1, 1, ENC_BIG_ENDIAN, &configuration_change_count);
7720 col_add_fstr (pinfo->cinfo, COL_INFO, "OCD: DS CH ID: %u, CCC: %u", downstream_channel_id, configuration_change_count);
7722 id = (downstream_channel_id << 16) + configuration_change_count;
7723 tlv_tvb = dissect_multipart(tvb, pinfo, ocd_tree, data, MGT_OCD, id, 2);
7724 if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
7725 dissect_ocd_tlv(tlv_tvb, pinfo, ocd_tree);
7726 return tvb_captured_length(tvb);
7729 static void
7730 dissect_dpd_subcarrier_assignment_range_list(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, unsigned pos, unsigned len)
7732 uint32_t i, subcarrier_assignment_type;
7733 proto_item* type_item;
7734 unsigned modulation;
7736 type_item = proto_tree_add_item_ret_uint (tree, hf_docsis_dpd_tlv_subc_assign_type, tvb, pos, 1, ENC_BIG_ENDIAN, &subcarrier_assignment_type);
7737 proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_value, tvb, pos, 1, ENC_BIG_ENDIAN);
7738 proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_reserved, tvb, pos, 1, ENC_BIG_ENDIAN);
7739 proto_tree_add_item_ret_uint (tree, hf_docsis_dpd_tlv_subc_assign_modulation, tvb, pos, 1, ENC_BIG_ENDIAN, &modulation);
7740 col_append_str(pinfo->cinfo, COL_INFO, val_to_str(modulation, docsis_dpd_subc_assign_modulation_str, "unknown(%u)"));
7741 pos++;
7743 switch (subcarrier_assignment_type)
7745 case SUBCARRIER_ASSIGNMENT_RANGE_CONT:
7746 case SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1:
7747 proto_tree_add_item (tree, hf_docsis_dpd_subc_assign_range, tvb, pos, 4, ENC_BIG_ENDIAN);
7748 break;
7749 case SUBCARRIER_ASSIGNMENT_LIST:
7750 for (i = 0; i < len/2; ++i) {
7751 proto_tree_add_item (tree, hf_docsis_dpd_subc_assign_index, tvb, pos, 2, ENC_BIG_ENDIAN);
7752 pos += 2;
7754 break;
7755 default:
7756 expert_add_info_format(pinfo, type_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown subcarrier assignment type: %u", subcarrier_assignment_type);
7757 break;
7761 static void
7762 dissect_dpd_subcarrier_assignment_vector(tvbuff_t * tvb, proto_tree * tree, unsigned start, unsigned len)
7764 uint32_t subcarrier_assignment_vector_oddness;
7765 unsigned vector_index;
7767 proto_tree_add_item_ret_uint (tree, hf_docsis_dpd_tlv_subc_assign_vector_oddness, tvb, start, 1, ENC_BIG_ENDIAN, &subcarrier_assignment_vector_oddness);
7768 proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_reserved, tvb, start, 1, ENC_BIG_ENDIAN);
7769 proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_subc_start, tvb, start, 2, ENC_BIG_ENDIAN);
7771 for(vector_index = 0; vector_index < len; ++vector_index)
7773 proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_modulation_odd, tvb, start + 2 + vector_index, 1, ENC_BIG_ENDIAN);
7774 if (!((vector_index == len -1) && subcarrier_assignment_vector_oddness))
7776 proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_modulation_even, tvb, start + 2 + vector_index, 1, ENC_BIG_ENDIAN);
7782 static void
7783 dissect_dpd_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
7785 proto_item *it, *tlv_item, *tlv_len_item;
7786 proto_tree *tlv_tree, *tlvtlv_tree;
7787 unsigned pos = 0;
7788 unsigned length;
7789 uint8_t type;
7790 unsigned first_subc_assign_list = 1;
7792 it = proto_tree_add_item(tree, hf_docsis_dpd_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7793 tlv_tree = proto_item_add_subtree (it, ett_docsis_dpd_tlv);
7795 while (tvb_reported_length_remaining(tvb, pos) > 0)
7797 type = tvb_get_uint8 (tvb, pos);
7798 if ( type == SUBCARRIER_ASSIGNMENT_VECTOR)
7800 /* For this type, length is 2 bytes instead of 1 */
7801 length = tvb_get_ntohs (tvb, pos + 1);
7802 } else {
7803 length = tvb_get_uint8 (tvb, pos + 1);
7806 tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
7807 ett_docsis_dpd_tlvtlv, &tlv_item,
7808 val_to_str(type, dpd_tlv_vals,
7809 "Unknown TLV (%u)"));
7810 proto_tree_add_uint (tlvtlv_tree, hf_docsis_dpd_type, tvb, pos, 1, type);
7811 pos++;
7812 if (type == SUBCARRIER_ASSIGNMENT_VECTOR)
7814 /* For this type, length is 2 bytes instead of 1 */
7815 tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_dpd_length, tvb, pos, 2, ENC_BIG_ENDIAN);
7816 pos += 2;
7817 } else {
7818 tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_dpd_length, tvb, pos, 1, ENC_NA);
7819 pos++;
7822 switch (type)
7824 case SUBCARRIER_ASSIGNMENT_RANGE_LIST:
7825 if (length >= 5)
7827 if(first_subc_assign_list) {
7828 col_append_str(pinfo->cinfo, COL_INFO, ", Modulation: ");
7829 first_subc_assign_list = 0;
7830 } else {
7831 col_append_str(pinfo->cinfo, COL_INFO, " | ");
7833 dissect_dpd_subcarrier_assignment_range_list(tvb, pinfo, tlvtlv_tree, pos, length);
7835 else
7837 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7839 break;
7840 case SUBCARRIER_ASSIGNMENT_VECTOR:
7841 if (length >=2)
7843 dissect_dpd_subcarrier_assignment_vector(tvb, tlvtlv_tree, pos, length);
7845 else
7847 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7849 break;
7850 default:
7851 proto_tree_add_item (tlvtlv_tree, hf_docsis_dpd_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
7852 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
7853 break;
7854 } /* switch */
7855 pos += length;
7856 } /* while */
7859 static int
7860 dissect_dpd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7862 proto_item *it;
7863 proto_tree *dpd_tree;
7864 tvbuff_t *next_tvb;
7866 uint32_t downstream_channel_id, profile_identifier, configuration_change_count;
7868 it = proto_tree_add_item(tree, proto_docsis_dpd, tvb, 0, -1, ENC_NA);
7869 dpd_tree = proto_item_add_subtree (it, ett_docsis_dpd);
7870 proto_tree_add_item_ret_uint (dpd_tree, hf_docsis_mgt_down_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
7871 proto_tree_add_item_ret_uint (dpd_tree, hf_docsis_dpd_prof_id, tvb, 1, 1, ENC_BIG_ENDIAN, &profile_identifier);
7872 proto_tree_add_item_ret_uint (dpd_tree, hf_docsis_dpd_ccc, tvb, 2, 1, ENC_BIG_ENDIAN, &configuration_change_count);
7874 col_add_fstr (pinfo->cinfo, COL_INFO, "DPD: DS CH ID: %u, Profile ID: %u, CCC: %u", downstream_channel_id, profile_identifier, configuration_change_count);
7876 /* Call Dissector TLVs */
7877 next_tvb = tvb_new_subset_remaining(tvb, 3);
7878 dissect_dpd_tlv(next_tvb, pinfo, dpd_tree);
7880 return tvb_captured_length(tvb);
7883 static int
7884 dissect_type51ucd(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7886 return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_type51ucd, MGT_TYPE51UCD);
7889 static void
7890 dissect_optreq_tlv_rxmer_thresholding_parameters (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
7892 proto_item *it, *tlv_item, *tlv_len_item;
7893 proto_tree *tlv_tree, *tlvtlv_tree;
7894 unsigned pos = 0;
7895 unsigned length;
7896 uint8_t type;
7898 it = proto_tree_add_item(tree, hf_docsis_optreq_tlv_rxmer_thresh_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7899 tlv_tree = proto_item_add_subtree (it, ett_docsis_optreq_tlv_rxmer_thresh_params);
7901 while (tvb_reported_length_remaining(tvb, pos) > 0)
7903 type = tvb_get_uint8 (tvb, pos);
7904 length = tvb_get_uint8 (tvb, pos + 1);
7905 tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
7906 ett_docsis_optreq_tlv_rxmer_thresh_params_tlv, &tlv_item,
7907 val_to_str(type, optreq_tlv_rxmer_thresh_params_vals,
7908 "Unknown TLV (%u)"));
7909 proto_tree_add_uint (tlvtlv_tree, hf_docsis_optreq_xmer_thresh_params_type, tvb, pos, 1, type);
7910 pos++;
7911 tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_xmer_thresh_params_length, tvb, pos, 1, ENC_NA);
7912 pos++;
7915 switch (type)
7917 case OPT_REQ_RXMER_THRESH_PARAMS_MODULATION_ORDER:
7918 if (length == 1)
7920 proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_rxmer_thresh_data_mod_order, tvb, pos, length, ENC_NA);
7922 else
7924 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7926 break;
7927 default:
7928 proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
7929 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
7930 break;
7931 } /* switch */
7932 pos += length;
7933 } /* while */
7936 static void
7937 dissect_optreq_tlv_trigger_definition (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
7939 proto_item *it, *tlv_item, *tlv_len_item, *subtree_item;
7940 proto_tree *tlv_tree, *tlvtlv_tree;
7941 unsigned pos = 0;
7942 unsigned length, measurement_duration;
7943 uint8_t type;
7945 it = proto_tree_add_item(tree, hf_docsis_optreq_tlv_trigger_definition_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7946 tlv_tree = proto_item_add_subtree (it, ett_docsis_optreq_tlv_trigger_definition_params);
7948 while (tvb_reported_length_remaining(tvb, pos) > 0)
7950 type = tvb_get_uint8 (tvb, pos);
7951 length = tvb_get_uint8 (tvb, pos + 1);
7952 tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
7953 ett_docsis_optreq_tlv_trigger_definition_params_tlv, &tlv_item,
7954 val_to_str(type, optreq_tlv_trigger_definition_vals,
7955 "Unknown TLV (%u)"));
7956 proto_tree_add_uint (tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_data_type,
7957 tvb, pos, 1, type);
7958 pos++;
7959 tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_data_length,
7960 tvb, pos, 1, ENC_NA);
7961 pos++;
7963 switch (type)
7965 case OPT_REQ_TRIGGER_DEFINITION_TRIGGER_TYPE:
7966 if (length == 1)
7968 proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_trigger_type, tvb, pos, length, ENC_NA);
7970 else
7972 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7974 break;
7975 case OPT_REQ_TRIGGER_DEFINITION_MEASUREMENT_DURATION:
7976 if (length == 2)
7978 subtree_item = proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_measure_duration,
7979 tvb, pos, length, ENC_BIG_ENDIAN);
7980 proto_item_append_text(subtree_item, " OFDM Symbols");
7981 measurement_duration = tvb_get_uint8 (tvb, pos);
7982 if (measurement_duration > 1024)
7984 expert_add_info_format(pinfo, subtree_item, &ei_docsis_mgmt_opt_req_trigger_def_measure_duration,
7985 "Measurement duration exceeds 1024 OFDM symbols: %u", measurement_duration);
7988 else
7990 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7992 break;
7993 case OPT_REQ_TRIGGER_DEFINITION_TRIGGERING_SID:
7994 if (length == 2)
7996 proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_triggering_sid,
7997 tvb, pos, length, ENC_BIG_ENDIAN);
7999 else
8001 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8003 break;
8004 case OPT_REQ_TRIGGER_DEFINITION_US_CHANNEL_ID:
8005 if (length == 1)
8007 proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_us_chan_id,
8008 tvb, pos, length, ENC_BIG_ENDIAN);
8010 else
8012 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8014 break;
8015 case OPT_REQ_TRIGGER_DEFINITION_OUDP_SOUND_AMBIG_OFFSET:
8016 if (length == 4)
8018 subtree_item = proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_sound_ambig_offset,
8019 tvb, pos, length, ENC_BIG_ENDIAN);
8020 proto_item_append_text(subtree_item, " DOCSIS time ticks (10.24 MHz)");
8022 else
8024 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8026 break;
8027 case OPT_REQ_TRIGGER_DEFINITION_RXMER_TO_REPORT:
8028 if (length == 1)
8030 proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_rx_mer_to_report,
8031 tvb, pos, length, ENC_NA);
8033 else
8035 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8037 break;
8038 case OPT_REQ_TRIGGER_DEFINITION_START_TIME:
8039 if (length == 4)
8041 proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_start_time,
8042 tvb, pos, length, ENC_BIG_ENDIAN);
8044 else
8046 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8048 break;
8049 default:
8050 proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
8051 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
8052 break;
8053 } /* switch */
8054 pos += length;
8055 } /* while */
8058 static void
8059 dissect_optreq_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
8061 proto_item *it, *tlv_item, *tlv_len_item;
8062 proto_tree *tlv_tree, *tlvtlv_tree;
8063 unsigned pos = 0;
8064 unsigned length;
8065 uint8_t type;
8066 tvbuff_t *next_tvb;
8068 it = proto_tree_add_item(tree, hf_docsis_optreq_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
8069 tlv_tree = proto_item_add_subtree (it, ett_docsis_optreq_tlv);
8071 while (tvb_reported_length_remaining(tvb, pos) > 0)
8073 type = tvb_get_uint8 (tvb, pos);
8074 length = tvb_get_uint8 (tvb, pos + 1);
8075 tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
8076 ett_docsis_optreq_tlvtlv, &tlv_item,
8077 val_to_str(type, optreq_tlv_vals,
8078 "Unknown TLV (%u)"));
8079 proto_tree_add_uint (tlvtlv_tree, hf_docsis_optreq_type, tvb, pos, 1, type);
8080 pos++;
8081 tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_length, tvb, pos, 1, ENC_NA);
8082 pos++;
8085 switch (type)
8087 case OPT_REQ_REQ_STAT:
8088 if (length == 1)
8091 static int * const req_stat[] = {
8092 &hf_docsis_optreq_reqstat_rxmer_stat_subc,
8093 &hf_docsis_optreq_reqstat_rxmer_subc_threshold_comp,
8094 &hf_docsis_optreq_reqstat_snr_marg_cand_prof,
8095 &hf_docsis_optreq_reqstat_codew_stat_cand_prof,
8096 &hf_docsis_optreq_reqstat_codew_thresh_comp_cand_prof,
8097 &hf_docsis_optreq_reqstat_ncp_field_stat,
8098 &hf_docsis_optreq_reqstat_ncp_crc_thresh_comp,
8099 &hf_docsis_optreq_reqstat_reserved,
8100 NULL
8103 proto_tree_add_bitmask_list(tlvtlv_tree, tvb, pos, length, req_stat, ENC_BIG_ENDIAN);
8105 else
8107 expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8109 break;
8110 case OPT_REQ_RXMER_THRESH_PARAMS:
8111 next_tvb = tvb_new_subset_length(tvb, pos, length);
8112 dissect_optreq_tlv_rxmer_thresholding_parameters(next_tvb, pinfo, tlvtlv_tree);
8113 break;
8114 case OPT_REQ_TRIGGER_DEFINITION:
8115 next_tvb = tvb_new_subset_length(tvb, pos, length);
8116 dissect_optreq_tlv_trigger_definition(next_tvb, pinfo, tlvtlv_tree);
8117 break;
8118 default:
8119 proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
8120 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
8121 break;
8122 } /* switch */
8123 pos += length;
8124 } /* while */
8127 static int
8128 dissect_optreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
8130 proto_item *it;
8131 proto_tree *opt_tree;
8132 tvbuff_t *tlv_tvb = NULL;
8134 uint32_t downstream_channel_id, profile_identifier, opcode, id;
8136 it = proto_tree_add_item(tree, proto_docsis_optreq, tvb, 0, -1, ENC_NA);
8137 opt_tree = proto_item_add_subtree (it, ett_docsis_optreq);
8138 proto_tree_add_item (opt_tree, hf_docsis_optreq_reserved, tvb, 0, 2, ENC_BIG_ENDIAN);
8139 proto_tree_add_item_ret_uint (opt_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
8140 proto_tree_add_item_ret_uint (opt_tree, hf_docsis_optreq_prof_id, tvb, 3, 1, ENC_BIG_ENDIAN, &profile_identifier);
8141 proto_tree_add_item_ret_uint (opt_tree, hf_docsis_optreq_opcode, tvb, 4, 1, ENC_BIG_ENDIAN, &opcode);
8143 col_add_fstr (pinfo->cinfo, COL_INFO, "OPT-REQ: DS CH ID: %u, Profile ID: %s (%u), Opcode: %s (%u)", downstream_channel_id,
8144 val_to_str(profile_identifier, profile_id_vals, "Unknown Profile ID (%u)"), profile_identifier,
8145 val_to_str(opcode, opt_opcode_vals, "Unknown Opcode (%u)"), opcode);
8147 id = (downstream_channel_id << 16) + profile_identifier;
8148 tlv_tvb = dissect_multipart(tvb, pinfo, opt_tree, data, MGT_OPT_REQ, id, 5);
8149 if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8150 dissect_optreq_tlv(tlv_tvb, pinfo, opt_tree);
8151 return tvb_captured_length(tvb);
8154 static void
8155 dissect_optrsp_tlv_rxmer(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8157 proto_item *tlv_item;
8158 proto_tree *tlv_tree;
8159 uint32_t tlv_type;
8160 int tlv_length, end = pos + length, i;
8162 static int *const ect_rba_subband_direction[] = {
8163 &hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb0,
8164 &hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb1,
8165 &hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb2,
8166 NULL};
8168 while (pos + 2 < end)
8170 tlv_type = tvb_get_uint8(tvb, pos);
8171 tlv_length = tvb_get_ntohs(tvb, pos + 1);
8172 tlv_item = proto_tree_add_item(tree, hf_docsis_optrsp_rxmer_tlv, tvb, pos, tlv_length + 3, ENC_NA);
8173 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, optrsp_rxmer_vals, "Unknown TLV %u"));
8174 if (tlv_type == OPT_RSP_RXMER_SUBCARRIER) // huge list
8175 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_optrsp_rxmer_subcarrier_tlv);
8176 else
8177 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_optrsp_rxmer_tlv);
8178 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8179 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_tlv_length, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
8180 pos += 3;
8182 switch (tlv_type)
8184 case OPT_RSP_RXMER_SUBCARRIER:
8185 for (i = 0; i < tlv_length; ++i)
8186 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_subcarrier, tvb, pos + i, 1, ENC_BIG_ENDIAN);
8187 break;
8188 case OPT_RSP_RXMER_SUBCARRIER_THRESHOLD:
8189 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_subcarrier_threshold, tvb, pos, tlv_length, ENC_NA);
8190 break;
8191 case OPT_RSP_RXMER_SUBCARRIER_THRESHOLD_COUNT:
8192 if (tlv_length == 2)
8193 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_subcarrier_threshold_count, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8194 else
8195 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8196 break;
8197 case OPT_RSP_RXMER_SNR_MARGIN:
8198 if (tlv_length == 1)
8199 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_snr_margin, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8200 else
8201 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8202 break;
8203 case OPT_RSP_RXMER_AVG:
8204 if (tlv_length == 1)
8205 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_avg, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8206 else
8207 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8208 break;
8209 case OPT_RSP_RXMER_ECT_RBA_SUBBAND_DIRECTION:
8210 if (tlv_length == 1) {
8211 proto_tree_add_bitmask_with_flags(tlv_tree, tvb, pos, hf_docsis_optrsp_rxmer_ect_rba_subband_direction,
8212 ett_docsis_optrsp_rxmer_tlv, ect_rba_subband_direction, ENC_BIG_ENDIAN, BMT_NO_APPEND);
8213 proto_tree_add_bitmask_list(tlv_tree, tvb, pos, tlv_length, ect_rba_subband_direction, ENC_BIG_ENDIAN);
8214 } else
8215 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8216 break;
8217 default:
8218 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
8219 break;
8221 pos += tlv_length;
8223 if (pos != end)
8224 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8227 static void
8228 dissect_optrsp_tlv_data_cw(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8230 proto_item *tlv_item;
8231 proto_tree *tlv_tree;
8232 uint32_t tlv_type;
8233 int tlv_length, end = pos + length;
8235 while (pos + 2 < end)
8237 tlv_type = tvb_get_uint8(tvb, pos);
8238 tlv_length = tvb_get_ntohs(tvb, pos + 1);
8239 tlv_item = proto_tree_add_item(tree, hf_docsis_optrsp_data_cw_tlv, tvb, pos, tlv_length + 3, ENC_NA);
8240 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, optrsp_data_cw_vals, "Unknown TLV %u"));
8241 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_optrsp_data_cw_tlv);
8242 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8243 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_tlv_length, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
8244 pos += 3;
8246 switch (tlv_type)
8248 case OPT_RSP_DATA_CW_COUNT:
8249 if (tlv_length == 4)
8250 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_count, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8251 else
8252 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8253 break;
8254 case OPT_RSP_DATA_CW_CORRECTED:
8255 if (tlv_length == 4)
8256 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_corrected, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8257 else
8258 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8259 break;
8260 case OPT_RSP_DATA_CW_UNCORRECTABLE:
8261 if (tlv_length == 4)
8262 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_uncorrectable, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8263 else
8264 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8265 break;
8266 case OPT_RSP_DATA_CW_THRESHOLD_COMPARISON:
8267 if (tlv_length == 1)
8268 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_threshold_comparison, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8269 else
8270 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8271 break;
8272 default:
8273 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
8274 break;
8276 pos += tlv_length;
8278 if (pos != end)
8279 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8282 static void
8283 dissect_optrsp_tlv_ncp_fields(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8285 proto_item *tlv_item;
8286 proto_tree *tlv_tree;
8287 uint32_t tlv_type;
8288 int tlv_length, end = pos + length;
8290 while (pos + 2 < end)
8292 tlv_type = tvb_get_uint8(tvb, pos);
8293 tlv_length = tvb_get_ntohs(tvb, pos + 1);
8294 tlv_item = proto_tree_add_item(tree, hf_docsis_optrsp_ncp_fields_tlv, tvb, pos, tlv_length + 3, ENC_NA);
8295 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, optrsp_ncp_fields_vals, "Unknown TLV %u"));
8296 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_optrsp_ncp_fields_tlv);
8297 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_ncp_fields_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8298 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_ncp_fields_tlv_length, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
8299 pos += 3;
8301 switch (tlv_type)
8303 case OPT_RSP_NCP_FIELDS_COUNT:
8304 if (tlv_length == 4)
8305 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_ncp_fields_count, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8306 else
8307 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8308 break;
8309 case OPT_RSP_NCP_FIELDS_FAILURE:
8310 if (tlv_length == 4)
8311 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_ncp_fields_failure, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8312 else
8313 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8314 break;
8315 case OPT_RSP_NCP_FIELDS_THRESHOLD_COMPARISON:
8316 if (tlv_length == 1)
8317 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_ncp_fields_threshold_comparison, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8318 else
8319 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8320 break;
8321 default:
8322 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8323 break;
8325 pos += tlv_length;
8327 if (pos != end)
8328 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8331 static void
8332 dissect_optrsp_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8334 proto_item *tlv_item;
8335 proto_tree *tlv_tree;
8336 uint32_t tlv_type;
8337 int tlv_length, end = pos + length;
8339 while (pos + 2 < end)
8341 tlv_type = tvb_get_uint8(tvb, pos);
8342 tlv_length = tvb_get_ntohs(tvb, pos + 1);
8343 tlv_item = proto_tree_add_item(tree, hf_docsis_optrsp_tlv, tvb, pos, tlv_length + 3, ENC_NA);
8344 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, optrsp_tlv_vals, "Unknown TLV %u"));
8345 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_optrsp_tlv);
8346 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8347 proto_tree_add_item(tlv_tree, hf_docsis_optrsp_tlv_length, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
8348 pos += 3;
8350 switch (tlv_type)
8352 case OPT_RSP_RXMER:
8353 dissect_optrsp_tlv_rxmer(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8354 break;
8355 case OPT_RSP_DATA_CW:
8356 dissect_optrsp_tlv_data_cw(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8357 break;
8358 case OPT_RSP_NCP_FIELDS:
8359 dissect_optrsp_tlv_ncp_fields(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8360 break;
8361 default:
8362 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
8363 break;
8365 pos += tlv_length;
8367 if (pos != end)
8368 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8371 static int
8372 dissect_optrsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8374 proto_item *opt_item;
8375 proto_tree *opt_tree;
8376 tvbuff_t *tlv_tvb = NULL;
8378 uint32_t downstream_channel_id, profile_identifier, status, id;
8380 opt_item = proto_tree_add_item(tree, proto_docsis_optrsp, tvb, 0, -1, ENC_NA);
8381 opt_tree = proto_item_add_subtree(opt_item, ett_docsis_optrsp);
8382 proto_tree_add_item(opt_tree, hf_docsis_optrsp_reserved, tvb, 0, 2, ENC_BIG_ENDIAN);
8383 proto_tree_add_item_ret_uint(opt_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
8384 proto_tree_add_item_ret_uint(opt_tree, hf_docsis_optrsp_prof_id, tvb, 3, 1, ENC_BIG_ENDIAN, &profile_identifier);
8385 proto_tree_add_item_ret_uint(opt_tree, hf_docsis_optrsp_status, tvb, 4, 1, ENC_BIG_ENDIAN, &status);
8387 col_add_fstr(pinfo->cinfo, COL_INFO, "OPT-RSP: DS CH ID: %u, Profile ID: %s (%u), Status: %s (%u)", downstream_channel_id,
8388 val_to_str(profile_identifier, profile_id_vals, "Unknown Profile ID (%u)"), profile_identifier,
8389 val_to_str(status, opt_status_vals, "Unknown status (%u)"), status);
8391 id = (downstream_channel_id << 16) + profile_identifier;
8392 tlv_tvb = dissect_multipart(tvb, pinfo, opt_tree, data, MGT_OPT_RSP, id, 5);
8393 if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8394 dissect_optrsp_tlv(tlv_tvb, pinfo, opt_item, opt_tree, 0, tvb_reported_length(tlv_tvb));
8395 return tvb_captured_length(tvb);
8398 static int
8399 dissect_optack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
8401 proto_item *it;
8402 proto_tree *opt_tree;
8404 uint32_t downstream_channel_id, profile_identifier;
8406 it = proto_tree_add_item(tree, proto_docsis_optack, tvb, 0, -1, ENC_NA);
8407 opt_tree = proto_item_add_subtree (it, ett_docsis_optack);
8408 proto_tree_add_item (opt_tree, hf_docsis_optack_reserved, tvb, 0, 2, ENC_BIG_ENDIAN);
8409 proto_tree_add_item_ret_uint (opt_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
8410 proto_tree_add_item_ret_uint (opt_tree, hf_docsis_optack_prof_id, tvb, 3, 1, ENC_BIG_ENDIAN, &profile_identifier);
8412 col_add_fstr (pinfo->cinfo, COL_INFO, "OPT-ACK: DS CH ID: %u, Profile ID: %s (%u)", downstream_channel_id,
8413 val_to_str(profile_identifier, profile_id_vals, "Unknown Profile ID (%u)"), profile_identifier);
8415 return tvb_captured_length(tvb);
8418 static int
8419 dissect_rba (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
8421 proto_item *it, *rba_direction_it;
8422 proto_tree *rba_tree;
8424 uint32_t tg_id, dcid;
8425 uint32_t subband_index, nr_of_subbands;
8427 static int * const rba_control_byte[] = {
8428 &hf_docsis_rba_resource_block_change_bit,
8429 &hf_docsis_rba_expiration_time_valid_bit,
8430 &hf_docsis_rba_control_byte_bitmask_rsvd,
8431 NULL
8434 it = proto_tree_add_item(tree, proto_docsis_rba, tvb, 0, -1, ENC_NA);
8435 rba_tree = proto_item_add_subtree (it, ett_docsis_rba);
8436 proto_tree_add_item_ret_uint (rba_tree, hf_docsis_rba_tg_id, tvb, 0, 1, ENC_BIG_ENDIAN, &tg_id);
8437 proto_tree_add_item (rba_tree, hf_docsis_rba_ccc, tvb, 1, 1, ENC_BIG_ENDIAN);
8438 proto_tree_add_item_ret_uint (rba_tree, hf_docsis_rba_dcid, tvb, 2, 1, ENC_BIG_ENDIAN, &dcid);
8439 proto_tree_add_bitmask (rba_tree, tvb, 3, hf_docsis_rba_control_byte_bitmask, ett_docsis_rba_control_byte, rba_control_byte, ENC_BIG_ENDIAN);
8440 proto_tree_add_item (rba_tree, hf_docsis_rba_rba_time, tvb, 4, 4, ENC_BIG_ENDIAN);
8441 proto_tree_add_item (rba_tree, hf_docsis_rba_rba_expiration_time, tvb, 8, 4, ENC_BIG_ENDIAN);
8442 proto_tree_add_item_ret_uint (rba_tree, hf_docsis_rba_number_of_subbands, tvb, 12, 1, ENC_BIG_ENDIAN, &nr_of_subbands);
8443 for (subband_index =0; subband_index < nr_of_subbands; ++subband_index) {
8444 rba_direction_it = proto_tree_add_item (rba_tree, hf_docsis_rba_subband_direction, tvb, 13 + subband_index, 1, ENC_BIG_ENDIAN);
8445 proto_item_prepend_text(rba_direction_it, "Sub-band %d: ", subband_index);
8448 col_add_fstr (pinfo->cinfo, COL_INFO, "RBA: TG_ID: %u, DCID: %u", tg_id, dcid);
8450 return tvb_captured_length(tvb);
8453 static void
8454 dissect_cwt_us_encodings_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8456 proto_item *tlv_item;
8457 proto_tree *tlv_tree, *subtlv_tree;
8458 uint32_t tlv_type;
8459 int tlv_length, end = pos + length, i;
8461 while (pos + 1 < end)
8463 tlv_type = tvb_get_uint8(tvb, pos);
8464 tlv_length = tvb_get_uint8(tvb, pos + 1);
8465 tlv_item = proto_tree_add_item(tree, hf_docsis_cwt_us_encodings_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8466 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, cwt_us_encodings_tlv_vals, "Unknown TLV %u"));
8467 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_cwt_tlv);
8468 proto_tree_add_item(tlv_tree, hf_docsis_cwt_us_encodings_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8469 proto_tree_add_item(tlv_tree, hf_docsis_cwt_us_encodings_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8470 pos += 2;
8472 switch (tlv_type)
8474 case CWT_US_ENCODINGS_CID:
8475 if (tlv_length == 1)
8476 proto_tree_add_item(tlv_tree, hf_docsis_cwt_us_encodings_cid, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8477 else
8478 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8479 break;
8480 case CWT_US_ENCODINGS_SC_INDEX:
8481 subtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length, ett_docsis_cwt_subtlv, NULL,
8482 "Upstream Subcarrier Indices");
8483 for (i = 0; i + 1 < tlv_length; i += 2)
8484 proto_tree_add_item(subtlv_tree, hf_docsis_cwt_us_encodings_sc_index, tvb, pos + i, 2, ENC_BIG_ENDIAN);
8485 if (i != tlv_length)
8486 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8487 break;
8488 case CWT_US_ENCODINGS_POWER_BOOST:
8489 if (tlv_length == 1)
8490 proto_tree_add_item(tlv_tree, hf_docsis_cwt_us_encodings_power_boost, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8491 else
8492 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8493 break;
8494 default:
8495 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8496 break;
8498 pos += tlv_length;
8500 if (pos != end)
8501 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8504 static void
8505 dissect_cwt_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8507 proto_item *tlv_item;
8508 proto_tree *tlv_tree;
8509 uint32_t tlv_type;
8510 int tlv_length, end = pos + length;
8512 uint32_t value;
8514 while (pos + 1 < end)
8516 tlv_type = tvb_get_uint8(tvb, pos);
8517 tlv_length = tvb_get_uint8(tvb, pos + 1);
8518 tlv_item = proto_tree_add_item(tree, hf_docsis_cwt_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8519 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, cwt_tlv_vals, "Unknown TLV %u"));
8520 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_cwt_tlv);
8521 proto_tree_add_item(tlv_tree, hf_docsis_cwt_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8522 proto_tree_add_item(tlv_tree, hf_docsis_cwt_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8523 pos += 2;
8525 switch (tlv_type)
8527 case CWT_PHASE_ROTATION:
8528 if (tlv_length == 1)
8529 proto_tree_add_item(tlv_tree, hf_docsis_cwt_phase_rotation, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8530 else
8531 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8532 break;
8533 case CWT_MAX_DURATION:
8534 if (tlv_length == 2) {
8535 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_cwt_max_duration, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8536 if (value < 1 || value > 1000)
8537 expert_add_info_format(pinfo, tlv_item, &ei_docsis_cwt_out_of_range, "Invalid CWT Maximum Duration: %i", value);
8538 } else
8539 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8540 break;
8541 case CWT_US_ENCODINGS:
8542 dissect_cwt_us_encodings_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8543 break;
8544 default:
8545 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
8546 break;
8548 pos += tlv_length;
8550 if (pos != end)
8551 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8554 static int
8555 dissect_cwt_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8557 proto_item *cwt_req_item;
8558 proto_tree *cwt_req_tree;
8559 tvbuff_t *tlv_tvb = NULL;
8561 uint32_t transaction_id, sub_band_id, op_code, id = 0;
8563 cwt_req_item = proto_tree_add_item(tree, proto_docsis_cwt_req, tvb, 0, -1, ENC_NA);
8564 cwt_req_tree = proto_item_add_subtree(cwt_req_item, ett_docsis_cwt_req);
8565 proto_tree_add_item_ret_uint(cwt_req_tree, hf_docsis_cwt_trans_id, tvb, 0, 1, ENC_BIG_ENDIAN, &transaction_id);
8566 proto_tree_add_item_ret_uint(cwt_req_tree, hf_docsis_cwt_sub_band_id, tvb, 1, 1, ENC_BIG_ENDIAN, &sub_band_id);
8567 proto_tree_add_item_ret_uint(cwt_req_tree, hf_docsis_cwt_op_code, tvb, 2, 1, ENC_BIG_ENDIAN, &op_code);
8569 col_add_fstr(pinfo->cinfo, COL_INFO, "CWT-REQ %s ID %u on sub-band %u",
8570 val_to_str(op_code, cwt_op_code_vals, "Unknown Op Code (%u)"),
8571 transaction_id, sub_band_id);
8573 id = (transaction_id << 8) + sub_band_id;
8574 tlv_tvb = dissect_multipart(tvb, pinfo, cwt_req_tree, data, MGT_CWT_REQ, id, 3);
8575 if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8576 dissect_cwt_tlv(tlv_tvb, pinfo, cwt_req_item, cwt_req_tree, 0, tvb_reported_length(tlv_tvb));
8577 return tvb_captured_length(tvb);
8580 static int
8581 dissect_cwt_rsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8583 proto_item *cwt_rsp_item;
8584 proto_tree *cwt_rsp_tree;
8585 tvbuff_t *tlv_tvb = NULL;
8587 uint32_t transaction_id, sub_band_id, op_code, status, id = 0;
8589 cwt_rsp_item = proto_tree_add_item(tree, proto_docsis_cwt_rsp, tvb, 0, -1, ENC_NA);
8590 cwt_rsp_tree = proto_item_add_subtree(cwt_rsp_item, ett_docsis_cwt_rsp);
8591 proto_tree_add_item_ret_uint(cwt_rsp_tree, hf_docsis_cwt_trans_id, tvb, 0, 1, ENC_BIG_ENDIAN, &transaction_id);
8592 proto_tree_add_item_ret_uint(cwt_rsp_tree, hf_docsis_cwt_sub_band_id, tvb, 1, 1, ENC_BIG_ENDIAN, &sub_band_id);
8593 proto_tree_add_item_ret_uint(cwt_rsp_tree, hf_docsis_cwt_op_code, tvb, 2, 1, ENC_BIG_ENDIAN, &op_code);
8594 proto_tree_add_item_ret_uint(cwt_rsp_tree, hf_docsis_cwt_status, tvb, 3, 1, ENC_BIG_ENDIAN, &status);
8596 col_add_fstr(pinfo->cinfo, COL_INFO, "CWT-RSP %s ID %u on sub-band %u: %s",
8597 val_to_str(op_code, cwt_op_code_vals, "Unknown Op Code (%u)"),
8598 transaction_id, sub_band_id,
8599 val_to_str(op_code, cwt_status_vals, "Unknown Status (%u)"));
8601 id = (transaction_id << 8) + sub_band_id;
8602 tlv_tvb = dissect_multipart(tvb, pinfo, cwt_rsp_tree, data, MGT_CWT_RSP, id, 4);
8603 if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8604 dissect_cwt_tlv(tlv_tvb, pinfo, cwt_rsp_item, cwt_rsp_tree, 0, tvb_reported_length(tlv_tvb));
8605 return tvb_captured_length(tvb);
8608 static void
8609 dissect_ect_control_partial_service_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8611 proto_item *tlv_item;
8612 proto_tree *tlv_tree;
8613 uint32_t tlv_type;
8614 int tlv_length, end = pos + length, i;
8616 while (pos + 1 < end)
8618 tlv_type = tvb_get_uint8(tvb, pos);
8619 tlv_length = tvb_get_uint8(tvb, pos + 1);
8620 tlv_item = proto_tree_add_item(tree, hf_docsis_ect_control_partial_service_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8621 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, ect_control_partial_service_tlv_vals, "Unknown TLV %u"));
8622 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8623 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_partial_service_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8624 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_partial_service_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8625 pos += 2;
8627 switch (tlv_type)
8629 case ECT_CONTROL_PARTIAL_SERVICE_DCID:
8630 for (i = 0; i < tlv_length; ++i)
8631 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_partial_service_dcid, tvb, pos + i, 1, ENC_BIG_ENDIAN);
8632 break;
8633 case ECT_CONTROL_PARTIAL_SERVICE_UCID:
8634 for (i = 0; i < tlv_length; ++i)
8635 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_partial_service_ucid, tvb, pos + i, 1, ENC_BIG_ENDIAN);
8636 break;
8637 default:
8638 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8639 break;
8641 pos += tlv_length;
8643 if (pos != end)
8644 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8647 static void
8648 dissect_ect_control_method_bg_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8650 proto_item *tlv_item;
8651 proto_tree *tlv_tree;
8652 uint32_t tlv_type;
8653 int tlv_length, end = pos + length;
8655 uint32_t value;
8657 while (pos + 1 < end)
8659 tlv_type = tvb_get_uint8(tvb, pos);
8660 tlv_length = tvb_get_uint8(tvb, pos + 1);
8661 tlv_item = proto_tree_add_item(tree, hf_docsis_ect_control_method_bg_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8662 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, ect_control_method_bg_tlv_vals, "Unknown TLV %u"));
8663 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8664 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_bg_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8665 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_bg_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8666 pos += 2;
8668 switch (tlv_type)
8670 case ECT_CONTROL_METHOD_BG_DURATION:
8671 if (tlv_length == 2) {
8672 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_method_bg_duration, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8673 if (value < 1 || value > 1000)
8674 expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Background Duration: %i", value);
8676 else
8677 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8678 break;
8679 case ECT_CONTROL_METHOD_BG_PERIODICITY:
8680 if (tlv_length == 1) {
8681 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_method_bg_periodicity, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8682 if (value < 1 || value > 30)
8683 expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Background Periodicity: %i", value);
8685 else
8686 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8687 break;
8688 case ECT_CONTROL_METHOD_BG_EXPIRATION_TIME:
8689 if (tlv_length == 1) {
8690 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_method_bg_expiration_time, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8691 if (value < 1 || value > 255)
8692 expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Background Expiration Time: %i", value);
8694 else
8695 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8696 break;
8697 case ECT_CONTROL_METHOD_BG_START_TIME:
8698 if (tlv_length == 4)
8699 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_bg_start_time, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8700 else
8701 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8702 break;
8703 default:
8704 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8705 break;
8707 pos += tlv_length;
8709 if (pos != end)
8710 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8713 static void
8714 dissect_ect_control_method_fg_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8716 proto_item *tlv_item;
8717 proto_tree *tlv_tree;
8718 uint32_t tlv_type;
8719 int tlv_length, end = pos + length;
8721 uint32_t value;
8723 while (pos + 1 < end)
8725 tlv_type = tvb_get_uint8(tvb, pos);
8726 tlv_length = tvb_get_uint8(tvb, pos + 1);
8727 tlv_item = proto_tree_add_item(tree, hf_docsis_ect_control_method_fg_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8728 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, ect_control_method_fg_tlv_vals, "Unknown TLV %u"));
8729 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8730 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_fg_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8731 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_fg_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8732 pos += 2;
8734 switch (tlv_type)
8736 case ECT_CONTROL_METHOD_FG_DURATION:
8737 if (tlv_length == 1) {
8738 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_method_fg_duration, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8739 if (value < 1 || value > 128)
8740 expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Foreground Duration: %i", value);
8742 else
8743 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8744 break;
8745 case ECT_CONTROL_METHOD_FG_PERIODICITY:
8746 if (tlv_length == 1) {
8747 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_method_fg_periodicity, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8748 if (value < 1 || value > 30)
8749 expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Foreground Periodicity: %i", value);
8751 else
8752 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8753 break;
8754 case ECT_CONTROL_METHOD_FG_EXPIRATION_TIME:
8755 if (tlv_length == 1) {
8756 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_method_fg_expiration_time, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8757 if (value < 1 || value > 255)
8758 expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Foreground Expiration Time: %i", value);
8760 else
8761 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8762 break;
8763 case ECT_CONTROL_METHOD_FG_DS_ZBL:
8764 if (tlv_length == 1)
8765 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_fg_ds_zbl, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8766 else
8767 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8768 break;
8769 default:
8770 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8771 break;
8773 pos += tlv_length;
8775 if (pos != end)
8776 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8779 static void
8780 dissect_ect_control_method_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8782 proto_item *tlv_item;
8783 proto_tree *tlv_tree;
8784 uint32_t tlv_type;
8785 int tlv_length, end = pos + length;
8787 while (pos + 1 < end)
8789 tlv_type = tvb_get_uint8(tvb, pos);
8790 tlv_length = tvb_get_uint8(tvb, pos + 1);
8791 tlv_item = proto_tree_add_item(tree, hf_docsis_ect_control_method_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8792 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, ect_control_method_tlv_vals, "Unknown TLV %u"));
8793 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8794 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8795 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8796 pos += 2;
8798 switch (tlv_type)
8800 case ECT_CONTROL_METHOD_FG:
8801 dissect_ect_control_method_fg_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8802 break;
8803 case ECT_CONTROL_METHOD_BG:
8804 dissect_ect_control_method_bg_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8805 break;
8806 default:
8807 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8808 break;
8810 pos += tlv_length;
8812 if (pos != end)
8813 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8816 static void
8817 dissect_ect_control_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8819 proto_item *tlv_item;
8820 proto_tree *tlv_tree;
8821 uint32_t tlv_type;
8822 int tlv_length, end = pos + length, i;
8824 uint32_t value;
8826 while (pos + 1 < end)
8828 tlv_type = tvb_get_uint8(tvb, pos);
8829 tlv_length = tvb_get_uint8(tvb, pos + 1);
8830 tlv_item = proto_tree_add_item(tree, hf_docsis_ect_control_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8831 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, ect_control_tlv_vals, "Unknown TLV %u"));
8832 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8833 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8834 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8835 pos += 2;
8837 switch (tlv_type)
8839 case ECT_CONTROL_SUBBAND_DIRECTION:
8840 for (i = 0; i < tlv_length; ++i)
8841 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_subband_direction, tvb, pos + i, 1, ENC_BIG_ENDIAN);
8842 break;
8843 case ECT_CONTROL_STATUS:
8844 if (tlv_length == 1)
8845 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_status, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8846 else
8847 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8848 break;
8849 case ECT_CONTROL_METHOD:
8850 dissect_ect_control_method_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8851 break;
8852 case ECT_CONTROL_PARTIAL_SERVICE:
8853 dissect_ect_control_partial_service_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8854 break;
8855 case ECT_CONTROL_DEFERRAL_TIME:
8856 if (tlv_length == 1)
8857 proto_tree_add_item(tlv_tree, hf_docsis_ect_control_deferral_time, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8858 else
8859 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8860 break;
8861 case ECT_CONTROL_RXMER_DURATION:
8862 if (tlv_length == 1) {
8863 proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_rxmer_duration, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8864 if (value < 1 || value > 128)
8865 expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid RxMER Duration: %i symbols", value);
8867 else
8868 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8869 break;
8870 default:
8871 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8872 break;
8874 pos += tlv_length;
8876 if (pos != end)
8877 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8880 static void
8881 dissect_ect_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8883 proto_item *tlv_item;
8884 proto_tree *tlv_tree;
8885 uint32_t tlv_type;
8886 int tlv_length, end = pos + length;
8888 while (pos + 1 < end)
8890 tlv_type = tvb_get_uint8(tvb, pos);
8891 tlv_length = tvb_get_uint8(tvb, pos + 1);
8892 tlv_item = proto_tree_add_item(tree, hf_docsis_ect_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8893 proto_item_set_text(tlv_item, "%s", val_to_str(tlv_type, ect_tlv_vals, "Unknown TLV %u"));
8894 tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8895 proto_tree_add_item(tlv_tree, hf_docsis_ect_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8896 proto_tree_add_item(tlv_tree, hf_docsis_ect_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8897 pos += 2;
8899 switch (tlv_type)
8901 case ECT_CONTROL:
8902 dissect_ect_control_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8903 break;
8904 default:
8905 expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
8906 break;
8908 pos += tlv_length;
8910 if (pos != end)
8911 expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8914 static int
8915 dissect_ect_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8917 proto_item *ect_req_item;
8918 proto_tree *ect_req_tree;
8919 tvbuff_t *tlv_tvb = NULL;
8921 uint32_t transaction_id;
8923 ect_req_item = proto_tree_add_item(tree, proto_docsis_ect_req, tvb, 0, -1, ENC_NA);
8924 ect_req_tree = proto_item_add_subtree(ect_req_item, ett_docsis_ect_req);
8925 proto_tree_add_item_ret_uint(ect_req_tree, hf_docsis_ect_trans_id, tvb, 0, 2, ENC_BIG_ENDIAN, &transaction_id);
8927 col_add_fstr(pinfo->cinfo, COL_INFO, "ECT-REQ ID %u", transaction_id);
8929 tlv_tvb = dissect_multipart(tvb, pinfo, ect_req_tree, data, MGT_ECT_REQ, transaction_id, 2);
8930 if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8931 dissect_ect_tlv(tlv_tvb, pinfo, ect_req_item, ect_req_tree, 0, tvb_reported_length(tlv_tvb));
8932 return tvb_captured_length(tvb);
8935 static int
8936 dissect_ect_rsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8938 proto_item *ect_rsp_item;
8939 proto_tree *ect_rsp_tree;
8940 tvbuff_t *tlv_tvb = NULL;
8942 uint32_t transaction_id, rsp_code;
8944 ect_rsp_item = proto_tree_add_item(tree, proto_docsis_ect_rsp, tvb, 0, -1, ENC_NA);
8945 ect_rsp_tree = proto_item_add_subtree(ect_rsp_item, ett_docsis_ect_rsp);
8946 proto_tree_add_item_ret_uint(ect_rsp_tree, hf_docsis_ect_trans_id, tvb, 0, 2, ENC_BIG_ENDIAN, &transaction_id);
8947 proto_tree_add_item_ret_uint(ect_rsp_tree, hf_docsis_ect_rsp_code, tvb, 2, 1, ENC_BIG_ENDIAN, &rsp_code);
8949 col_add_fstr(pinfo->cinfo, COL_INFO, "ECT-RSP ID %u: %s",
8950 transaction_id,
8951 val_to_str(rsp_code, ect_rsp_code_vals, "Unknown Response Code (%u)"));
8953 tlv_tvb = dissect_multipart(tvb, pinfo, ect_rsp_tree, data, MGT_ECT_RSP, transaction_id, 3);
8954 if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8955 dissect_ect_tlv(tlv_tvb, pinfo, ect_rsp_item, ect_rsp_tree, 0, tvb_reported_length(tlv_tvb));
8956 return tvb_captured_length(tvb);
8959 static int
8960 dissect_ext_rngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
8962 proto_item *it;
8963 proto_tree *ext_rngreq_tree;
8965 uint32_t sid, downstream_channel_id, upstream_channel_id;
8967 it = proto_tree_add_item(tree, proto_docsis_ext_rngreq, tvb, 0, -1, ENC_NA);
8968 ext_rngreq_tree = proto_item_add_subtree (it, ett_docsis_ext_rngreq);
8969 proto_tree_add_item_ret_uint (ext_rngreq_tree, hf_docsis_rngreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
8970 proto_tree_add_item_ret_uint (ext_rngreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
8971 proto_tree_add_item_ret_uint (ext_rngreq_tree, hf_docsis_mgt_upstream_chid, tvb, 3, 1, ENC_BIG_ENDIAN, &upstream_channel_id);
8973 col_add_fstr (pinfo->cinfo, COL_INFO, "EXT-RNG-REQ: SID: %u, DS CH ID: %u, US CH ID: %u", sid, downstream_channel_id, upstream_channel_id);
8975 return tvb_captured_length(tvb);
8978 static int
8979 dissect_dpr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8981 proto_item *dpr_item, *item;
8982 proto_tree *dpr_tree;
8984 uint32_t dcid, tg_id, duration;
8986 dpr_item = proto_tree_add_item(tree, proto_docsis_dpr, tvb, 0, -1, ENC_NA);
8987 dpr_tree = proto_item_add_subtree(dpr_item, ett_docsis_dpr);
8988 proto_tree_add_item(dpr_tree, hf_docsis_dpr_carrier, tvb, 0, 1, ENC_BIG_ENDIAN);
8989 proto_tree_add_item_ret_uint(dpr_tree, hf_docsis_dpr_dcid, tvb, 1, 1, ENC_BIG_ENDIAN, &dcid);
8990 proto_tree_add_item_ret_uint(dpr_tree, hf_docsis_dpr_tg_id, tvb, 2, 1, ENC_BIG_ENDIAN, &tg_id);
8991 proto_tree_add_item(dpr_tree, hf_docsis_dpr_reserved, tvb, 3, 1, ENC_BIG_ENDIAN);
8992 proto_tree_add_item(dpr_tree, hf_docsis_dpr_start_time, tvb, 4, 4, ENC_BIG_ENDIAN);
8993 item = proto_tree_add_item_ret_uint(dpr_tree, hf_docsis_dpr_duration, tvb, 8, 4, ENC_BIG_ENDIAN, &duration);
8994 if ((duration & 0xff000000) > 0)
8995 expert_add_info_format(pinfo, item, &ei_docsis_dpr_out_of_range, "Invalid DPR Duration: %u", duration);
8997 col_add_fstr(pinfo->cinfo, COL_INFO, "DPR DCID %u on TG ID %u", dcid, tg_id);
8999 return tvb_captured_length(tvb);
9002 static int
9003 dissect_macmgmt (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
9005 uint32_t type, version, dsap, ssap, msg_len;
9006 proto_item *mgt_hdr_it;
9007 proto_tree *mgt_hdr_tree;
9008 tvbuff_t *payload_tvb;
9009 uint8_t multipart;
9011 col_set_str (pinfo->cinfo, COL_PROTOCOL, "DOCSIS MGMT");
9013 col_clear(pinfo->cinfo, COL_INFO);
9015 set_address_tvb (&pinfo->dl_src, AT_ETHER, 6, tvb, 6);
9016 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
9017 set_address_tvb (&pinfo->dl_dst, AT_ETHER, 6, tvb, 0);
9018 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
9020 static int * const multipart_field[] = {
9021 &hf_docsis_mgt_multipart_number_of_fragments,
9022 &hf_docsis_mgt_multipart_fragment_sequence_number,
9023 NULL
9026 //We need version and type for decoding of ssap and dsap field: in case of RNG-REQ, these fields can contain the Transmit Power Level.
9027 version = tvb_get_uint8 (tvb, 17);
9028 type = tvb_get_uint8 (tvb, 18);
9029 dsap = tvb_get_uint8 (tvb, 14);
9030 ssap = tvb_get_uint8 (tvb, 15);
9032 mgt_hdr_it = proto_tree_add_item (tree, proto_docsis_mgmt, tvb, 0, 20, ENC_NA);
9033 mgt_hdr_tree = proto_item_add_subtree (mgt_hdr_it, ett_docsis_mgmt);
9034 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_dst_addr, tvb, 0, 6, ENC_NA);
9035 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_src_addr, tvb, 6, 6, ENC_NA);
9036 proto_tree_add_item_ret_uint (mgt_hdr_tree, hf_docsis_mgt_msg_len, tvb, 12, 2, ENC_BIG_ENDIAN, &msg_len);
9038 if ( ((type == MGT_RNG_REQ) || type == MGT_B_INIT_RNG_REQ)
9039 && version == 5
9040 && !(ssap==0 && dsap == 0) ) {
9041 //RNG_REQ or BONDED_INIT_RNG_REQ with upstream transmit power reporting, sent to 3.1 CMTS
9042 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_31_transmit_power, tvb, 14, 2, ENC_BIG_ENDIAN);
9043 } else if (type == MGT_EXT_RNG_REQ) {
9044 //EXT_RNG_REQ with upstream transmit power reporting, sent to 4.0 CMTS
9045 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_40_transmit_power, tvb, 14, 2, ENC_BIG_ENDIAN);
9046 } else if ( ((type == MGT_RNG_REQ && version == 1) || (type == MGT_B_INIT_RNG_REQ && version == 4))
9047 && ssap != 0 ) {
9048 //RNG_REQ or BONDED_INIT_RNG_REQ with upstream transmit power reporting, sent to 3.0 CMTS
9049 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_dsap, tvb, 14, 1, ENC_BIG_ENDIAN);
9050 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_30_transmit_power, tvb, 15, 1, ENC_BIG_ENDIAN);
9051 } else {
9052 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_dsap, tvb, 14, 1, ENC_BIG_ENDIAN);
9053 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_ssap, tvb, 15, 1, ENC_BIG_ENDIAN);
9056 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_control, tvb, 16, 1, ENC_BIG_ENDIAN);
9057 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_version, tvb, 17, 1, ENC_BIG_ENDIAN);
9058 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_type, tvb, 18, 1, ENC_BIG_ENDIAN);
9060 p_add_proto_data(pinfo->pool, pinfo, proto_docsis_mgmt, KEY_MGMT_VERSION, GUINT_TO_POINTER(version));
9062 if (version < 5) {
9063 proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_rsvd, tvb, 19, 1, ENC_BIG_ENDIAN);
9064 } else {
9065 proto_tree_add_bitmask(mgt_hdr_tree, tvb, 19, hf_docsis_mgt_multipart, ett_sub_tlv, multipart_field, ENC_BIG_ENDIAN);
9066 multipart = tvb_get_uint8 (tvb, 19);
9067 p_add_proto_data(pinfo->pool, pinfo, proto_docsis_mgmt, KEY_MGMT_MULTIPART, GUINT_TO_POINTER(multipart));
9070 /* Code to Call subdissector */
9071 /* sub-dissectors are based on the type field */
9072 payload_tvb = tvb_new_subset_length (tvb, 20, msg_len - 6);
9074 /* Special case: map needs version. Two types of MAPs exist, with some difference in encoding: MAPv1 and MAPv5. See also DOCSIS3.1 MULPI spec */
9075 if (type == MGT_MAP) {
9076 if (!dissector_try_uint(docsis_mgmt_dissector_table, 256*version + type, payload_tvb, pinfo, tree)) {
9077 call_data_dissector(payload_tvb, pinfo, tree);
9079 } else {
9080 if (!dissector_try_uint(docsis_mgmt_dissector_table, type, payload_tvb, pinfo, tree)) {
9081 call_data_dissector(payload_tvb, pinfo, tree);
9085 return tvb_captured_length(tvb);
9088 /* Register the protocol with Wireshark */
9089 void
9090 proto_register_docsis_mgmt (void)
9092 static hf_register_info hf[] = {
9093 /* Sync Message */
9094 {&hf_docsis_sync_cmts_timestamp,
9095 {"CMTS Timestamp", "docsis_sync.cmts_timestamp",
9096 FT_UINT32, BASE_DEC, NULL, 0x0,
9097 "Sync CMTS Timestamp", HFILL}
9099 /* UCD */
9100 {&hf_docsis_ucd_config_ch_cnt,
9101 {"Config Change Count", "docsis_ucd.confcngcnt",
9102 FT_UINT8, BASE_DEC, NULL, 0x0,
9103 "Configuration Change Count", HFILL}
9105 {&hf_docsis_ucd_mini_slot_size,
9106 {"Mini Slot Size (6.25us TimeTicks)", "docsis_ucd.mslotsize",
9107 FT_UINT8, BASE_DEC, NULL, 0x0,
9108 NULL, HFILL}
9110 {&hf_docsis_ucd_type,
9111 {"Type", "docsis_ucd.type",
9112 FT_UINT8, BASE_DEC, VALS(channel_tlv_vals), 0x0,
9113 "Channel TLV type", HFILL}
9115 {&hf_docsis_ucd_length,
9116 {"Length", "docsis_ucd.length",
9117 FT_UINT8, BASE_DEC, NULL, 0x0,
9118 "Channel TLV length", HFILL}
9120 {&hf_docsis_ucd_burst_type,
9121 {"Type", "docsis_ucd.burst.tlvtype",
9122 FT_UINT8, BASE_DEC, VALS(burst_tlv_vals), 0x0,
9123 "Burst TLV type", HFILL}
9125 {&hf_docsis_ucd_burst_length,
9126 {"Length", "docsis_ucd.burst.tlvlen",
9127 FT_UINT8, BASE_DEC, NULL, 0x0,
9128 "Burst TLV length", HFILL}
9130 {&hf_docsis_ucd_symbol_rate,
9131 {"Symbol Rate (ksym/sec)", "docsis_ucd.symrate",
9132 FT_UINT8, BASE_DEC, NULL, 0x0,
9133 NULL, HFILL}
9135 {&hf_docsis_ucd_frequency,
9136 {"Frequency (Hz)", "docsis_ucd.freq",
9137 FT_UINT32, BASE_DEC, NULL, 0x0,
9138 "Upstream Center Frequency", HFILL}
9140 {&hf_docsis_ucd_preamble_pat,
9141 {"Preamble Pattern", "docsis_ucd.preamble",
9142 FT_BYTES, BASE_NONE, NULL, 0x0,
9143 "Preamble Superstring", HFILL}
9145 {&hf_docsis_ucd_ext_preamble_pat,
9146 {"Extended Preamble Pattern", "docsis_ucd.extpreamble",
9147 FT_BYTES, BASE_NONE, NULL, 0x0,
9148 "Extended Preamble Superstring", HFILL}
9150 {&hf_docsis_ucd_scdma_mode_enabled,
9151 {"S-CDMA Mode Enabled", "docsis_ucd.scdma",
9152 FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9153 NULL, HFILL}
9155 {&hf_docsis_ucd_scdma_spreading_interval,
9156 {"SCDMA Spreading Interval", "docsis_ucd.scdmaspreadinginterval",
9157 FT_BYTES, BASE_NONE, NULL, 0x0,
9158 NULL, HFILL}
9160 {&hf_docsis_ucd_scdma_codes_per_mini_slot,
9161 {"SCDMA Codes per mini slot", "docsis_ucd.scdmacodesperminislot",
9162 FT_BYTES, BASE_NONE, NULL, 0x0,
9163 NULL, HFILL}
9165 {&hf_docsis_ucd_scdma_active_codes,
9166 {"SCDMA Active Codes", "docsis_ucd.scdmaactivecodes",
9167 FT_BYTES, BASE_NONE, NULL, 0x0,
9168 NULL, HFILL}
9170 {&hf_docsis_ucd_scdma_code_hopping_seed,
9171 {"SCDMA Code Hopping Seed", "docsis_ucd.scdmacodehoppingseed",
9172 FT_BYTES, BASE_NONE, NULL, 0x0,
9173 NULL, HFILL}
9175 {&hf_docsis_ucd_scdma_us_ratio_num,
9176 {"SCDMA US Ratio Numerator", "docsis_ucd.scdmausrationum",
9177 FT_BYTES, BASE_NONE, NULL, 0x0,
9178 NULL, HFILL}
9180 {&hf_docsis_ucd_scdma_us_ratio_denom,
9181 {"SCDMA US Ratio Denominator", "docsis_ucd.scdmausratiodenom",
9182 FT_BYTES, BASE_NONE, NULL, 0x0,
9183 NULL, HFILL}
9185 {&hf_docsis_ucd_scdma_timestamp_snapshot,
9186 {"SCDMA Timestamp Snapshot", "docsis_ucd.scdmatimestamp",
9187 FT_BYTES, BASE_NONE, NULL, 0x0,
9188 NULL, HFILL}
9190 {&hf_docsis_ucd_maintain_power_spectral_density,
9191 {"Maintain Power Spectral Density", "docsis_ucd.maintpower",
9192 FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9193 NULL, HFILL}
9195 {&hf_docsis_ucd_ranging_required,
9196 {"Ranging Required", "docsis_ucd.rangingreq",
9197 FT_UINT8, BASE_DEC, VALS (ranging_req_vals), 0x0,
9198 NULL, HFILL}
9200 {&hf_docsis_ucd_max_scheduled_codes,
9201 {"S-CDMA Max Scheduled Codes", "docsis_ucd.scdmamaxcodes",
9202 FT_UINT8, BASE_DEC, VALS (max_scheduled_codes_vals), 0x0,
9203 NULL, HFILL}
9205 {&hf_docsis_ucd_rnghoff_cm,
9206 {"Ranging Hold-Off (CM)","docsis_ucd.rnghoffcm",
9207 FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x1,
9208 NULL, HFILL}
9210 {&hf_docsis_ucd_rnghoff_erouter,
9211 {"Ranging Hold-Off (eRouter)",
9212 "docsis_ucd.rnghofferouter",
9213 FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x2,
9214 NULL, HFILL}
9216 {&hf_docsis_ucd_rnghoff_emta,
9217 {"Ranging Hold-Off (eMTA or EDVA)",
9218 "docsis_ucd.rnghoffemta",
9219 FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x4,
9220 NULL, HFILL}
9222 {&hf_docsis_ucd_rnghoff_estb,
9223 {"Ranging Hold-Off (DSG/eSTB)",
9224 "docsis_ucd.rnghoffestb",
9225 FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x8,
9226 NULL, HFILL}
9228 {&hf_docsis_ucd_rnghoff_rsvd,
9229 {"Reserved",
9230 "docsis_ucd.rnghoffrsvd",
9231 FT_UINT32, BASE_HEX, NULL, 0xFFF0,
9232 NULL, HFILL}
9234 {&hf_docsis_ucd_rnghoff_id_ext,
9235 {"CM Ranging Class ID Extension",
9236 "docsis_ucd.rngidext",
9237 FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
9238 NULL, HFILL}
9240 {&hf_docsis_ucd_chan_class_id_cm,
9241 {"Channel Class ID (CM)","docsis_ucd.classidcm",
9242 FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x1,
9243 NULL, HFILL}
9245 {&hf_docsis_ucd_chan_class_id_erouter,
9246 {"Channel Class ID (eRouter)",
9247 "docsis_ucd.classiderouter",
9248 FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x2,
9249 NULL, HFILL}
9251 {&hf_docsis_ucd_chan_class_id_emta,
9252 {"Channel Class ID (eMTA or EDVA)",
9253 "docsis_ucd.classidemta",
9254 FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x4,
9255 NULL, HFILL}
9257 {&hf_docsis_ucd_chan_class_id_estb,
9258 {"Channel Class ID (DSG/eSTB)",
9259 "docsis_ucd.classidestb",
9260 FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x8,
9261 NULL, HFILL}
9263 {&hf_docsis_ucd_chan_class_id_rsvd,
9264 {"Reserved",
9265 "docsis_ucd.classidrsvd",
9266 FT_UINT32, BASE_HEX, NULL, 0xFFF0,
9267 NULL, HFILL}
9269 {&hf_docsis_ucd_chan_class_id_id_ext,
9270 {"CM Ranging Class ID Extension",
9271 "docsis_ucd.classidext",
9272 FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
9273 NULL, HFILL}
9275 {&hf_docsis_ucd_change_ind_bitmask_subc_excl_band,
9276 {"UCD Change Indicator Bitmask: Subcarrier Exclusion Band TLV", "docsis_ucd.burst.ucd_change_ind_bitmask_subc_excl_band",
9277 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x01,
9278 NULL, HFILL}
9280 {&hf_docsis_ucd_change_ind_bitmask_unused_subc,
9281 {"UCD Change Indicator Bitmask: Unused Subcarrier Specification TLV", "docsis_ucd.burst.ucd_change_ind_bitmask_unused_subc",
9282 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x02,
9283 NULL, HFILL}
9285 {&hf_docsis_ucd_change_ind_bitmask_other_subc,
9286 {"UCD Change Indicator Bitmask: Other than Subcarrier Exclusion Band and Unused Subcarrier Specification TLV", "docsis_ucd.burst.ucd_change_ind_bitmask_other_subc",
9287 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x04,
9288 NULL, HFILL}
9290 {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc5,
9291 {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC5", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc5",
9292 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x08,
9293 NULL, HFILL}
9295 {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc6,
9296 {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC6", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc6",
9297 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x10,
9298 NULL, HFILL}
9300 {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc9,
9301 {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC9", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc9",
9302 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x20,
9303 NULL, HFILL}
9305 {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc10,
9306 {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC10", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc10",
9307 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x40,
9308 NULL, HFILL}
9310 {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc11,
9311 {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC11", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc11",
9312 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x80,
9313 NULL, HFILL}
9315 {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc12,
9316 {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC12", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc12",
9317 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x01,
9318 NULL, HFILL}
9320 {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc13,
9321 {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC13", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc13",
9322 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x02,
9323 NULL, HFILL}
9325 {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc3_or_4,
9326 {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC3 or IUC4", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc3_or_4",
9327 FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x04,
9328 NULL, HFILL}
9330 {&hf_docsis_ucd_change_ind_bitmask_reserved,
9331 {"UCD Change Indicator Bitmask: Reserved", "docsis_ucd.burst.ucd_change_ind_bitmask_reserved",
9332 FT_UINT8, BASE_HEX, NULL, 0xF8,
9333 NULL, HFILL}
9335 {&hf_docsis_ucd_ofdma_timestamp_snapshot,
9336 {"OFDMA Timestamp Snapshot", "docsis_ucd.ofdma_timestamp_snapshot",
9337 FT_BYTES, BASE_NONE, NULL, 0x00,
9338 NULL, HFILL}
9340 {&hf_docsis_ucd_ofdma_timestamp_snapshot_reserved,
9341 {"OFDMA Timestamp Snapshot - Reserved", "docsis_ucd.ofdma_timestamp_snapshot_reserved",
9342 FT_UINT40, BASE_HEX, NULL, 0xF000000000,
9343 NULL, HFILL}
9345 {&hf_docsis_ucd_ofdma_timestamp_snapshot_d30timestamp,
9346 {"OFDMA Timestamp Snapshot - D3.0 timestamp", "docsis_ucd.ofdma_timestamp_snapshot_d30timestamp",
9347 FT_UINT40, BASE_HEX, NULL, 0x0FFFFFFFF0,
9348 NULL, HFILL}
9350 {&hf_docsis_ucd_ofdma_timestamp_snapshot_4msbits_of_div20,
9351 {"OFDMA Timestamp Snapshot - 4 Most Significant bits of div20 field", "docsis_ucd.ofdma_timestamp_snapshot_4msbits_of_div20",
9352 FT_UINT40, BASE_HEX, NULL, 0x000000000F,
9353 NULL, HFILL}
9355 {&hf_docsis_ucd_ofdma_timestamp_snapshot_minislot_count,
9356 {"OFDMA Timestamp Snapshot - Minislot Count", "docsis_ucd.ofdma_timestamp_snapshot_minislot_count",
9357 FT_UINT32, BASE_HEX, NULL, 0x0,
9358 NULL, HFILL}
9360 {&hf_docsis_ucd_ofdma_cyclic_prefix_size,
9361 {"OFDMA Cyclic Prefix Size", "docsis_ucd.ofdma_cyclic_prefix_size",
9362 FT_UINT8, BASE_DEC, VALS(ofdma_cyclic_prefix_size_vals), 0x00,
9363 NULL, HFILL}
9365 {&hf_docsis_ucd_ofdma_rolloff_period_size,
9366 {"OFDMA Rolloff Period Size", "docsis_ucd.ofdma_rolloff_period_size",
9367 FT_UINT8, BASE_DEC, VALS(ofdma_rolloff_period_size_vals), 0x00,
9368 NULL, HFILL}
9370 {&hf_docsis_ucd_subc_spacing,
9371 {"Subcarrier Spacing", "docsis_ucd.subc_spacing",
9372 FT_UINT8, BASE_DEC, VALS(subc_spacing_vals), 0x00,
9373 NULL, HFILL}
9375 {&hf_docsis_ucd_cent_freq_subc0,
9376 {"Center Frequency of Subcarrier 0", "docsis_ucd.cent_freq_subc0",
9377 FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_hz), 0x00,
9378 NULL, HFILL}
9380 {&hf_docsis_ucd_subcarrier_range,
9381 {"Subcarrier range", "docsis_ucd.subc_range",
9382 FT_UINT32, BASE_CUSTOM, CF_FUNC(subc_assign_range), 0x00,
9383 NULL, HFILL}
9385 {&hf_docsis_ucd_symb_ofdma_frame,
9386 {"Symbols in OFDMA frame", "docsis_ucd.symb_ofdma_frame",
9387 FT_UINT8, BASE_DEC, NULL, 0x00,
9388 NULL, HFILL}
9390 {&hf_docsis_ucd_rand_seed,
9391 {"Randomization Seed", "docsis_ucd.rand_seed",
9392 FT_BYTES, BASE_NONE, NULL, 0x00,
9393 NULL, HFILL}
9395 {&hf_docsis_ucd_extended_us_channel,
9396 {"Extended Upstream Channel", "docsis_ucd.extended_us_channel",
9397 FT_UINT8, BASE_DEC, VALS (extended_us_channel_vals), 0x00,
9398 NULL, HFILL}
9400 {&hf_docsis_ucd_iuc,
9401 {"Interval Usage Code", "docsis_ucd.iuc",
9402 FT_UINT8, BASE_DEC, VALS (iuc_vals), 0x0,
9403 NULL, HFILL}
9405 {&hf_docsis_burst_mod_type,
9406 {"Modulation Type", "docsis_ucd.burst.modtype",
9407 FT_UINT8, BASE_DEC, VALS (mod_vals), 0x0,
9408 NULL, HFILL}
9410 {&hf_docsis_burst_diff_encoding,
9411 {"Differential Encoding", "docsis_ucd.burst.diffenc",
9412 FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9413 NULL, HFILL}
9415 {&hf_docsis_burst_preamble_len,
9416 {"Preamble Length (Bits)", "docsis_ucd.burst.preamble_len",
9417 FT_UINT16, BASE_DEC, NULL, 0x0,
9418 NULL, HFILL}
9420 {&hf_docsis_burst_preamble_val_off,
9421 {"Preamble Offset (Bits)", "docsis_ucd.burst.preamble_off",
9422 FT_UINT16, BASE_DEC, NULL, 0x0,
9423 NULL, HFILL}
9425 {&hf_docsis_burst_fec,
9426 {"FEC (T)", "docsis_ucd.burst.fec",
9427 FT_UINT8, BASE_DEC, NULL, 0x0,
9428 "FEC (T) Codeword Parity Bits = 2^T", HFILL}
9430 {&hf_docsis_burst_fec_codeword,
9431 {"FEC Codeword Info bytes (k)", "docsis_ucd.burst.fec_codeword",
9432 FT_UINT8, BASE_DEC, NULL, 0x0,
9433 NULL, HFILL}
9435 {&hf_docsis_burst_scrambler_seed,
9436 {"Scrambler Seed", "docsis_ucd.burst.scrambler_seed",
9437 FT_UINT16, BASE_HEX, NULL, 0x0,
9438 "Burst Descriptor", HFILL}
9440 {&hf_docsis_burst_max_burst,
9441 {"Max Burst Size (Minislots)", "docsis_ucd.burst.maxburst",
9442 FT_UINT8, BASE_DEC, NULL, 0x0,
9443 NULL, HFILL}
9445 {&hf_docsis_burst_guard_time,
9446 {"Guard Time Size (Symbol Times)", "docsis_ucd.burst.guardtime",
9447 FT_UINT8, BASE_DEC, NULL, 0x0,
9448 NULL, HFILL}
9450 {&hf_docsis_burst_last_cw_len,
9451 {"Last Codeword Length", "docsis_ucd.burst.last_cw_len",
9452 FT_UINT8, BASE_DEC, VALS (last_cw_len_vals), 0x0,
9453 NULL, HFILL}
9455 {&hf_docsis_burst_scrambler_onoff,
9456 {"Scrambler On/Off", "docsis_ucd.burst.scrambleronoff",
9457 FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9458 NULL, HFILL}
9460 {&hf_docsis_rs_int_depth,
9461 {"RS Interleaver Depth", "docsis_ucd.burst.rsintdepth",
9462 FT_UINT8, BASE_DEC, NULL, 0x0,
9463 "R-S Interleaver Depth", HFILL}
9465 {&hf_docsis_rs_int_block,
9466 {"RS Interleaver Block Size", "docsis_ucd.burst.rsintblock",
9467 FT_UINT8, BASE_DEC, NULL, 0x0,
9468 "R-S Interleaver Block", HFILL}
9470 {&hf_docsis_preamble_type,
9471 {"Preamble Type", "docsis_ucd.burst.preambletype",
9472 FT_UINT8, BASE_DEC, NULL, 0x0,
9473 NULL, HFILL}
9475 {&hf_docsis_ucd_scdma_scrambler_onoff,
9476 {"Scrambler On/Off", "docsis_ucd.burst.scdmascrambleronoff",
9477 FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9478 "SCDMA Scrambler On/Off", HFILL}
9480 {&hf_docsis_ucd_scdma_codes_per_subframe,
9481 {"SCDMA Codes per Subframe", "docsis_ucd.burst.scdmacodespersubframe",
9482 FT_UINT8, BASE_DEC, NULL, 0x0,
9483 NULL, HFILL}
9485 {&hf_docsis_ucd_scdma_framer_int_step_size,
9486 {"SCDMA Framer Interleaving Step Size", "docsis_ucd.burst.scdmaframerintstepsize",
9487 FT_UINT8, BASE_DEC, NULL, 0x0,
9488 NULL, HFILL}
9490 {&hf_docsis_ucd_tcm_enabled,
9491 {"TCM Enabled", "docsis_ucd.burst.tcmenabled",
9492 FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9493 NULL, HFILL}
9495 {&hf_docsis_ucd_active_code_hopping,
9496 {"S-CDMA Selection Mode for Active Codes and Code Hopping", "docsis_ucd.selectcodehop",
9497 FT_UINT8, BASE_DEC, VALS (tlv20_vals), 0x0,
9498 NULL, HFILL}
9500 {&hf_docsis_ucd_scdma_selection_active_codes,
9501 {"S-CDMA Selection String for Active Codes", "docsis_ucd.selectcode",
9502 FT_BYTES, BASE_NONE, NULL, 0x0,
9503 NULL, HFILL}
9505 {&hf_docsis_ucd_higher_ucd_for_same_ucid,
9506 {"Higher UCD for the same UCID", "docsis_ucd.highucdpresent",
9507 FT_BOOLEAN, 8, TFS(&type35ucd_tfs_present_not_present), 0x1,
9508 NULL, HFILL}
9510 {&hf_docsis_ucd_higher_ucd_for_same_ucid_resv,
9511 {"Reserved", "docsis_ucd.highucdresv",
9512 FT_UINT8, BASE_HEX, NULL, 0xFE,
9513 NULL, HFILL}
9515 {&hf_docsis_subc_init_rang,
9516 {"Subcarriers (Nir) Initial Ranging", "docsis_ucd.burst.subc_init_rang",
9517 FT_UINT16, BASE_DEC, NULL, 0x0,
9518 NULL, HFILL}
9520 {&hf_docsis_subc_fine_rang,
9521 {"Subcarriers (Nfr) Fine Ranging", "docsis_ucd.burst.subc_fine_rang",
9522 FT_UINT16, BASE_DEC, NULL, 0x0,
9523 NULL, HFILL}
9525 {&hf_docsis_ofdma_prof_mod_order,
9526 {"OFDMA Profile: modulation", "docsis_ucd.burst.ofma_prof_mod_order",
9527 FT_UINT8, BASE_DEC, VALS(ofdma_prof_mod_order), 0xF0,
9528 NULL, HFILL}
9530 {&hf_docsis_ofdma_prof_pilot_pattern,
9531 {"OFDMA Profile: pilot pattern", "docsis_ucd.burst.ofma_prof_pilot_pattern",
9532 FT_UINT8, BASE_DEC, NULL, 0x0F,
9533 NULL, HFILL}
9535 {&hf_docsis_ofdma_prof_num_add_minislots,
9536 {"OFDMA Profile: Additional Minislots that have identical bit-loading and pilot pattern index", "docsis_ucd.burst.ofma_prof_add_minislots",
9537 FT_UINT8, BASE_DEC, NULL, 0x00,
9538 NULL, HFILL}
9540 {&hf_docsis_ofdma_ir_pow_ctrl_start_pow,
9541 {"OFDMA IR Power Control Starting Power Level", "docsis_ucd.burst.ofma_ir_pow_ctrl_start_pow",
9542 FT_UINT8, BASE_CUSTOM, CF_FUNC(ofdma_ir_pow_ctrl_start_pow), 0x00,
9543 NULL, HFILL}
9545 {&hf_docsis_ofdma_ir_pow_ctrl_step_size,
9546 {"OFDMA IR Power Control Step Size", "docsis_ucd.burst.ofma_ir_pow_ctrl_step_size",
9547 FT_UINT8, BASE_CUSTOM, CF_FUNC(ofdma_ir_pow_ctrl_step_size), 0x00,
9548 NULL, HFILL}
9550 /* MAP */
9551 {&hf_docsis_map_ucd_count,
9552 {"UCD Count", "docsis_map.ucdcount",
9553 FT_UINT8, BASE_DEC, NULL, 0x0,
9554 "Map UCD Count", HFILL}
9556 {&hf_docsis_map_numie,
9557 {"Number of IE's", "docsis_map.numie",
9558 FT_UINT8, BASE_DEC, NULL, 0x0,
9559 "Number of Information Elements", HFILL}
9561 {&hf_docsis_map_numie_v5,
9562 {"Number of IE's", "docsis_map.numie",
9563 FT_UINT16, BASE_DEC, NULL, 0xFF80,
9564 "Number of Information Elements", HFILL}
9566 {&hf_docsis_map_rsvd_v5,
9567 {"Reserved [0x00]", "docsis_map.rsvd",
9568 FT_UINT8, BASE_HEX, NULL, 0x70,
9569 "Reserved Byte", HFILL}
9571 {&hf_docsis_map_cat,
9572 {"CAT", "docsis_map.cat",
9573 FT_UINT8, BASE_HEX, NULL, 0x0F,
9574 NULL, HFILL}
9577 {&hf_docsis_map_alloc_start,
9578 {"Alloc Start Time (minislots)", "docsis_map.allocstart",
9579 FT_UINT32, BASE_DEC, NULL, 0x0,
9580 NULL, HFILL}
9582 {&hf_docsis_map_ack_time,
9583 {"ACK Time (minislots)", "docsis_map.acktime",
9584 FT_UINT32, BASE_DEC, NULL, 0x0,
9585 NULL, HFILL}
9587 {&hf_docsis_map_rng_start,
9588 {"Ranging Backoff Start", "docsis_map.rng_start",
9589 FT_UINT8, BASE_DEC, NULL, 0x0,
9590 NULL, HFILL}
9592 {&hf_docsis_map_rng_end,
9593 {"Ranging Backoff End", "docsis_map.rng_end",
9594 FT_UINT8, BASE_DEC, NULL, 0x0,
9595 NULL, HFILL}
9597 {&hf_docsis_map_data_start,
9598 {"Data Backoff Start", "docsis_map.data_start",
9599 FT_UINT8, BASE_DEC, NULL, 0x0,
9600 NULL, HFILL}
9602 {&hf_docsis_map_data_end,
9603 {"Data Backoff End", "docsis_map.data_end",
9604 FT_UINT8, BASE_DEC, NULL, 0x0,
9605 NULL, HFILL}
9607 {&hf_docsis_map_ie,
9608 {"Information Element", "docsis_map.ie",
9609 FT_UINT32, BASE_HEX, NULL, 0x0,
9610 NULL, HFILL}
9612 {&hf_docsis_map_probe_ie,
9613 {"Probe Information Element", "docsis_map.probe_ie",
9614 FT_UINT32, BASE_HEX, NULL, 0x0,
9615 NULL, HFILL}
9617 {&hf_docsis_map_rsvd,
9618 {"Reserved", "docsis_map.rsvd",
9619 FT_UINT8, BASE_HEX, NULL, 0x0,
9620 "Reserved Byte", HFILL}
9622 {&hf_docsis_map_sid,
9623 {"Service Identifier", "docsis_map.sid",
9624 FT_UINT32, BASE_DEC, NULL, 0xFFFC0000,
9625 NULL, HFILL}
9627 {&hf_docsis_map_iuc,
9628 {"Interval Usage Code", "docsis_map.iuc",
9629 FT_UINT32, BASE_DEC, VALS(iuc_vals), 0x0003c000,
9630 NULL, HFILL}
9632 {&hf_docsis_map_offset,
9633 {"Offset", "docsis_map.offset",
9634 FT_UINT32, BASE_DEC, NULL, 0x00003fff,
9635 NULL, HFILL}
9637 {&hf_docsis_map_mer,
9638 {"MER (CMTS RxMER Measurement)", "docsis_map.mer",
9639 FT_BOOLEAN, 32, TFS(&tfs_on_off), 0x00020000,
9640 NULL, HFILL}
9642 {&hf_docsis_map_pw,
9643 {"PW (Power)", "docsis_map.pw",
9644 FT_BOOLEAN, 32, TFS(&pw_vals), MAP_PROBE_IE_PW_MASK,
9645 NULL, HFILL}
9647 {&hf_docsis_map_eq,
9648 {"EQ (Tx Equalization)", "docsis_map.eq",
9649 FT_BOOLEAN, 32, TFS(&tfs_disabled_enabled), 0x00008000,
9650 NULL, HFILL}
9652 {&hf_docsis_map_st,
9653 {"St (Stagger)", "docsis_map.st",
9654 FT_BOOLEAN, 32, TFS(&tfs_yes_no), MAP_PROBE_IE_ST_MASK,
9655 NULL, HFILL}
9657 {&hf_docsis_map_probe_frame,
9658 {"Probe Frame", "docsis_map.probe_frame",
9659 FT_UINT32, BASE_DEC, NULL, 0x00003000,
9660 NULL, HFILL}
9662 {&hf_docsis_map_symbol_in_frame,
9663 {"Symbol in Frame", "docsis_map.symbol_in_frame",
9664 FT_UINT32, BASE_DEC, NULL, 0x00000fc0,
9665 NULL, HFILL}
9667 {&hf_docsis_map_start_subc,
9668 {"Start Subc", "docsis_map.start_subc",
9669 FT_UINT32, BASE_DEC, NULL, 0x00000038,
9670 NULL, HFILL}
9672 {&hf_docsis_map_subc_skip,
9673 {"Subc Skip", "docsis_map.subc_skip",
9674 FT_UINT32, BASE_DEC, NULL, 0x00000007,
9675 NULL, HFILL}
9677 {&hf_docsis_map_ect,
9678 {"ECT Control", "docsis_map.ect",
9679 FT_UINT32, BASE_DEC, VALS(map_ect_vals), 0x00000007,
9680 NULL, HFILL}
9683 /* RNG-REQ */
9684 {&hf_docsis_rngreq_sid_field_bit15,
9685 {"SID field bit 15", "docsis_rngreq.sid_field_bit15",
9686 FT_BOOLEAN, 8, TFS(&sid_field_bit15_tfs), 0x80,
9687 NULL, HFILL}
9689 {&hf_docsis_rngreq_sid_field_bit14,
9690 {"SID field bit 14", "docsis_rngreq.sid_field_bit14",
9691 FT_BOOLEAN, 8, TFS(&sid_field_bit14_tfs), 0x40,
9692 NULL, HFILL}
9694 {&hf_docsis_rngreq_sid_field_bit15_14,
9695 {"SID field bit 15 to 14", "docsis_rngreq.sid_field_bit15_14",
9696 FT_UINT8, BASE_HEX, VALS(sid_field_bit15_14_vals), 0xC0,
9697 NULL, HFILL}
9699 {&hf_docsis_rngreq_sid,
9700 {"Service Identifier", "docsis_rngreq.sid",
9701 FT_UINT16, BASE_DEC, NULL, 0x3FFF,
9702 NULL, HFILL}
9704 {&hf_docsis_rngreq_pend_compl,
9705 {"Pending Till Complete", "docsis_rngreq.pendcomp",
9706 FT_UINT8, BASE_DEC, NULL, 0x0,
9707 "Upstream Channel ID", HFILL}
9709 /* RNG-RSP */
9710 {&hf_docsis_rngrsp_type,
9711 {"Type", "docsis_rngrsp.type",
9712 FT_UINT8, BASE_DEC, VALS(rngrsp_tlv_vals), 0x0,
9713 "TLV Type", HFILL}
9715 {&hf_docsis_rngrsp_length,
9716 {"Length", "docsis_rngrsp.length",
9717 FT_UINT16, BASE_DEC, NULL, 0x0,
9718 "TLV Length", HFILL}
9720 {&hf_docsis_rngrsp_sid,
9721 {"Service Identifier", "docsis_rngrsp.sid",
9722 FT_UINT16, BASE_DEC, NULL, 0x0,
9723 NULL, HFILL}
9725 {&hf_docsis_rngrsp_timing_adj,
9726 {"Timing Adjust (6.25us/64)", "docsis_rngrsp.timingadj",
9727 FT_INT32, BASE_DEC, NULL, 0x0,
9728 NULL, HFILL}
9730 {&hf_docsis_rngrsp_power_adj,
9731 {"Power Level Adjust (0.25dB units)", "docsis_rngrsp.poweradj",
9732 FT_INT8, BASE_DEC, NULL, 0x0,
9733 NULL, HFILL}
9735 {&hf_docsis_rngrsp_freq_adj,
9736 {"Offset Freq Adjust (Hz)", "docsis_rngrsp.freqadj",
9737 FT_INT16, BASE_DEC, NULL, 0x0,
9738 "Frequency Adjust", HFILL}
9740 {&hf_docsis_rngrsp_xmit_eq_adj,
9741 {"Transmit Equalization Adjust", "docsis_rngrsp.xmit_eq_adj",
9742 FT_BYTES, BASE_NONE, NULL, 0x0,
9743 NULL, HFILL}
9745 {&hf_docsis_rngrsp_ranging_status,
9746 {"Ranging Status", "docsis_rngrsp.rng_stat",
9747 FT_UINT8, BASE_DEC, VALS (rng_stat_vals), 0x0,
9748 NULL, HFILL}
9750 {&hf_docsis_rngrsp_down_freq_over,
9751 {"Downstream Frequency Override (Hz)", "docsis_rngrsp.freq_over",
9752 FT_UINT32, BASE_DEC, NULL, 0x0,
9753 NULL, HFILL}
9755 {&hf_docsis_rngrsp_upstream_ch_over,
9756 {"Upstream Channel ID Override", "docsis_rngrsp.chid_override",
9757 FT_UINT8, BASE_DEC, NULL, 0x0,
9758 NULL, HFILL}
9760 {&hf_docsis_rngrsp_xmit_eq_set,
9761 {"Transmit Equalization Set", "docsis_rngrsp.xmit_eq_set",
9762 FT_BYTES, BASE_NONE, NULL, 0x0,
9763 NULL, HFILL}
9765 {&hf_docsis_rngrsp_rngrsp_t4_timeout_multiplier,
9766 {"Multiplier of the default T4 Timeout", "docsis_rngrsp.t4_timeout_multiplier",
9767 FT_UINT8, BASE_DEC, NULL, 0x0,
9768 "T4 Timeout Multiplier (the valid range is 1-10)", HFILL}
9770 {&hf_docsis_rngrsp_dynamic_range_window_upper_edge,
9771 {"Dynamic Range Window Upper Edge", "docsis_rngrsp.dynamic_range_window_upper_edge",
9772 FT_UINT8, BASE_DEC, NULL, 0x0,
9773 "Dynamic Range Window Upper EDGE (in units of 0.25 db below the max allowable setting)", HFILL}
9775 {&hf_docsis_rngrsp_tlv_unknown,
9776 {"Unknown TLV", "docsis_rngrsp.tlv.unknown",
9777 FT_BYTES, BASE_NONE, NULL, 0x0,
9778 NULL, HFILL}
9780 {&hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_main_tap_location,
9781 {"Main Tap Location", "docsis_rngrsp.tlv.trans_eq_enc_scdma_tdma.main_tap_location",
9782 FT_UINT8, BASE_DEC, NULL, 0x0,
9783 NULL, HFILL}
9785 {&hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_number_of_forward_taps_per_symbol,
9786 {"Number of Forward Taps per Symbol", "docsis_rngrsp.tlv.trans_eq_enc_scdma_tdma.nr_of_forward_taps_per_symbol",
9787 FT_UINT8, BASE_DEC, NULL, 0x0,
9788 NULL, HFILL}
9790 {&hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_number_of_forward_taps_n,
9791 {"Number of Forward Taps (N)", "docsis_rngrsp.tlv.trans_eq_enc_scdma_tdma.nr_of_forward_taps_n",
9792 FT_UINT8, BASE_DEC, NULL, 0x0,
9793 NULL, HFILL}
9795 {&hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_reserved,
9796 {"Reserved", "docsis_rngrsp.tlv.trans_eq_enc_scdma_tdma.reserved",
9797 FT_UINT8, BASE_DEC, NULL, 0x0,
9798 NULL, HFILL}
9800 {&hf_docsis_rngrsp_trans_eq_data,
9801 {"Transmit equalization data", "docsis_rngrsp.tlv.trans_eq_data",
9802 FT_BYTES, BASE_NONE, NULL, 0x0,
9803 NULL, HFILL}
9805 {&hf_docsis_rngrsp_trans_eq_enc_lowest_subc,
9806 {"Lowest Subcarrier for this TLV", "docsis_rngrsp.tlv.trans_eq_enc_lowest_subc",
9807 FT_UINT24, BASE_DEC, NULL, 0xFFF000,
9808 NULL, HFILL}
9810 {&hf_docsis_rngrsp_trans_eq_enc_highest_subc,
9811 {"Highest Subcarrier for this TLV", "docsis_rngrsp.tlv.trans_eq_enc_highest_subc",
9812 FT_UINT24, BASE_DEC, NULL, 0x0FFF,
9813 NULL, HFILL}
9815 {&hf_docsis_rngrsp_trans_eq_enc_coef_real,
9816 {"Coefficient (real)", "docsis_rngrsp.tlv.trans_eq_enc_coef_real",
9817 FT_INT16, BASE_CUSTOM, CF_FUNC(two_compl_frac), 0x0,
9818 NULL, HFILL}
9820 {&hf_docsis_rngrsp_trans_eq_enc_coef_imag,
9821 {"Coefficient (imag)", "docsis_rngrsp.tlv.trans_eq_enc_coef_imag",
9822 FT_INT16, BASE_CUSTOM, CF_FUNC(two_compl_frac), 0x0,
9823 NULL, HFILL}
9825 {&hf_docsis_rngrsp_commanded_power_data,
9826 {"Commanded Power Data", "docsis_rngrsp.tlv.comm_pwr_data",
9827 FT_BYTES, BASE_NONE, NULL, 0x00,
9828 NULL, HFILL}
9830 {&hf_docsis_rngrsp_commanded_power_dynamic_range_window,
9831 {"Dynamic Range Window", "docsis_rngrsp.tlv.comm_pwr_dyn_range_window",
9832 FT_INT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x00,
9833 NULL, HFILL}
9835 {&hf_docsis_rngrsp_commanded_power_ucid,
9836 {"UCID", "docsis_rngrsp.tlv.comm_pwr_ucid",
9837 FT_UINT8, BASE_DEC, NULL, 0x00,
9838 NULL, HFILL}
9840 {&hf_docsis_rngrsp_commanded_power_trans_pow_lvl,
9841 {"Transmit Power Level (quarter dBmV)", "docsis_rngrsp.tlv.comm_pwr_trans_pow_lvl",
9842 FT_INT16, BASE_CUSTOM, CF_FUNC(fourth_db), 0x00,
9843 NULL, HFILL}
9846 /* REG_REQ */
9847 {&hf_docsis_regreq_sid,
9848 {"Service Identifier", "docsis_regreq.sid",
9849 FT_UINT16, BASE_DEC, NULL, 0x0,
9850 NULL, HFILL}
9852 /* REG_RSP */
9853 {&hf_docsis_regrsp_sid,
9854 {"Service Identifier", "docsis_regrsp.sid",
9855 FT_UINT16, BASE_DEC, NULL, 0x0,
9856 NULL, HFILL}
9858 {&hf_docsis_regrsp_response,
9859 {"Response Code", "docsis_regrsp.respnse",
9860 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
9861 NULL, HFILL}
9863 /* BPKM */
9864 {&hf_docsis_bpkm_code,
9865 {"Code", "docsis_bpkm.code",
9866 FT_UINT8, BASE_DEC, VALS (code_field_vals), 0x0,
9867 NULL, HFILL}
9869 {&hf_docsis_bpkm_ident,
9870 {"Identifier", "docsis_bpkm.ident",
9871 FT_UINT8, BASE_DEC, NULL, 0x0,
9872 NULL, HFILL}
9874 {&hf_docsis_bpkm_length,
9875 {"Length", "docsis_bpkm.length",
9876 FT_UINT16, BASE_DEC, NULL, 0x0,
9877 NULL, HFILL}
9879 {&hf_docsis_bpkmattr,
9880 {"Attributes", "docsis_bpkm.attr",
9881 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9882 NULL, HFILL}
9884 {&hf_docsis_bpkmattr_tlv,
9885 {"TLV", "docsis_bpkm.attr.tlv",
9886 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9887 NULL, HFILL}
9889 {&hf_docsis_bpkmattr_tlv_type,
9890 {"Type", "docsis_bpkm.attr.tlv.type",
9891 FT_UINT8, BASE_DEC, VALS(bpkmattr_tlv_vals), 0x0,
9892 NULL, HFILL}
9894 {&hf_docsis_bpkmattr_tlv_length,
9895 {"Length", "docsis_bpkm.attr.tlv.length",
9896 FT_UINT16, BASE_DEC, NULL, 0x0,
9897 NULL, HFILL}
9899 {&hf_docsis_bpkmattr_serial_num,
9900 {"Serial Number", "docsis_bpkm.attr.serialnum",
9901 FT_STRING, BASE_NONE, NULL, 0x0,
9902 NULL, HFILL}
9904 {&hf_docsis_bpkmattr_manf_id,
9905 {"Manufacturer ID", "docsis_bpkm.attr.manfid",
9906 FT_UINT24, BASE_HEX, NULL, 0x0,
9907 NULL, HFILL}
9909 {&hf_docsis_bpkmattr_mac_addr,
9910 {"MAC Address", "docsis_bpkm.attr.macaddr",
9911 FT_ETHER, BASE_NONE, NULL, 0x0,
9912 NULL, HFILL}
9914 {&hf_docsis_bpkmattr_rsa_pub_key,
9915 {"RSA Public Key", "docsis_bpkm.attr.rsa_pub_key",
9916 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9917 "DER-encoded RSA Public Key", HFILL}
9919 {&hf_docsis_bpkmattr_cm_id,
9920 {"CM Identification", "docsis_bpkm.attr.cmid",
9921 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9922 NULL, HFILL}
9924 {&hf_docsis_bpkmattr_display_str,
9925 {"Display String", "docsis_bpkm.attr.dispstr",
9926 FT_STRING, BASE_NONE, NULL, 0x0,
9927 NULL, HFILL}
9929 {&hf_docsis_bpkmattr_auth_key,
9930 {"Auth Key", "docsis_bpkm.attr.auth_key",
9931 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9932 "Encrypted Authorization Key", HFILL}
9934 {&hf_docsis_bpkmattr_tek,
9935 {"Traffic Encryption Key", "docsis_bpkm.attr.tek",
9936 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9937 "Encrypted Traffic Encryption Key", HFILL}
9939 {&hf_docsis_bpkmattr_key_life,
9940 {"Key Lifetime (s)", "docsis_bpkm.attr.keylife",
9941 FT_UINT32, BASE_DEC, NULL, 0x0,
9942 "Remaining key lifetime (s)", HFILL}
9944 {&hf_docsis_bpkmattr_key_seq,
9945 {"Key Sequence Number", "docsis_bpkm.attr.keyseq",
9946 FT_UINT8, BASE_DEC, NULL, 0x0f,
9947 NULL, HFILL}
9949 {&hf_docsis_bpkmattr_hmac_digest,
9950 {"HMAC Digest", "docsis_bpkm.attr.hmacdigest",
9951 FT_BYTES, BASE_NONE, NULL, 0x0,
9952 "HMAC Digest (160-bit keyed SHA-1 hash)", HFILL}
9954 {&hf_docsis_bpkmattr_said,
9955 {"SAID", "docsis_bpkm.attr.said",
9956 FT_UINT16, BASE_DEC, NULL, 0x3fff,
9957 "Security Association ID", HFILL}
9959 {&hf_docsis_bpkmattr_tek_params,
9960 {"TEK Parameters", "docsis_bpkm.attr.tekparams",
9961 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9962 NULL, HFILL}
9964 {&hf_docsis_bpkmattr_cbc_iv,
9965 {"CBC IV", "docsis_bpkm.attr.cbciv",
9966 FT_BYTES, BASE_NONE, NULL, 0x0,
9967 "Cypher Block Chaining initialization vector", HFILL}
9969 {&hf_docsis_bpkmattr_error_code,
9970 {"Error Code", "docsis_bpkm.attr.errcode",
9971 FT_UINT8, BASE_DEC, VALS (error_code_vals), 0x0,
9972 NULL, HFILL}
9974 {&hf_docsis_bpkmattr_ca_cert,
9975 {"Device CA Certificate", "docsis_bpkm.attr.cacert",
9976 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9977 "DER-encoded Device CA Certificate", HFILL}
9979 {&hf_docsis_bpkmattr_cm_cert,
9980 {"CM Certificate", "docsis_bpkm.attr.cmcert",
9981 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9982 "DER-encoded CM Device Certificate", HFILL}
9984 {&hf_docsis_bpkmattr_security_cap,
9985 {"Security Capabilities", "docsis_bpkm.attr.seccap",
9986 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9987 NULL, HFILL}
9989 {&hf_docsis_bpkmattr_crypto_suite,
9990 {"Cryptographic Suite", "docsis_bpkm.attr.cryptosuite",
9991 FT_UINT16, BASE_HEX, NULL, 0x0,
9992 NULL, HFILL}
9994 {&hf_docsis_bpkmattr_crypto_suite_encr,
9995 {"Encryption", "docsis_bpkm.attr.cryptosuite.encr",
9996 FT_UINT16, BASE_HEX, VALS(bpkm_crypto_suite_encr_vals), 0xff00,
9997 "Data Encryption Algorithm", HFILL}
9999 {&hf_docsis_bpkmattr_crypto_suite_auth,
10000 {"Authentication", "docsis_bpkm.attr.cryptosuite.auth",
10001 FT_UINT16, BASE_HEX, VALS(bpkm_crypto_suite_auth_vals), 0x00ff,
10002 "Data Authentication Algorithm", HFILL}
10004 {&hf_docsis_bpkmattr_crypto_suite_list,
10005 {"Cryptographic Suite List", "docsis_bpkm.attr.crypto_suite_lst",
10006 FT_BYTES, BASE_NONE, NULL, 0x0,
10007 NULL, HFILL}
10009 {&hf_docsis_bpkmattr_bpi_version,
10010 {"BPI Version", "docsis_bpkm.attr.bpiver",
10011 FT_UINT8, BASE_DEC, VALS (bpi_ver_vals), 0x0,
10012 NULL, HFILL}
10014 {&hf_docsis_bpkmattr_sa_descr,
10015 {"SA Descriptor", "docsis_bpkm.attr.sadescr",
10016 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10017 "Security Association Descriptor", HFILL}
10019 {&hf_docsis_bpkmattr_sa_type,
10020 {"SA Type", "docsis_bpkm.attr.satype",
10021 FT_UINT8, BASE_DEC, VALS(bpi_sa_vals), 0x0,
10022 "Security Association Type", HFILL}
10024 {&hf_docsis_bpkmattr_sa_query,
10025 {"SA Query", "docsis_bpkm.attr.saquery",
10026 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10027 "Security Association Query", HFILL}
10029 {&hf_docsis_bpkmattr_sa_query_type,
10030 {"SA Query Type", "docsis_bpkm.attr.saquery_type",
10031 FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(bpi_sa_query_type_vals), 0x0,
10032 "Security Association Query Type", HFILL}
10034 {&hf_docsis_bpkmattr_ip_address,
10035 {"IP Address", "docsis_bpkm.attr.ipaddr",
10036 FT_IPv4, BASE_NONE, NULL, 0x0,
10037 NULL, HFILL}
10039 {&hf_docsis_bpkmattr_download_param,
10040 {"Download Parameters", "docsis_bpkm.attr.dnld_params",
10041 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10042 NULL, HFILL}
10044 {&hf_docsis_bpkmattr_cvc_root_ca_cert,
10045 {"CVC Root CA Certificate (deprecated)", "docsis_bpkm.attr.cvc_root_ca_cert",
10046 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10047 "DER-encoded CVC Root CA Certificate from the legacy PKI", HFILL}
10049 {&hf_docsis_bpkmattr_cvc_ca_cert,
10050 {"CVC CA Certificate (deprecated)", "docsis_bpkm.attr.cvc_ca_cert",
10051 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10052 "DER-encoded CVC CA Certificate from the legacy PKI", HFILL}
10054 {&hf_docsis_bpkmattr_dev_ca_cert,
10055 {"Device CA Certificate", "docsis_bpkm.attr.dev_ca_cert",
10056 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10057 "DER-encoded Device CA Certificate from the new PKI", HFILL}
10059 {&hf_docsis_bpkmattr_root_ca_cert,
10060 {"Root CA Certificate", "docsis_bpkm.attr.root_ca_cert",
10061 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10062 "DER-encoded Root CA Certificate from the new PKI", HFILL}
10064 {&hf_docsis_bpkmattr_cm_nonce,
10065 {"CM Nonce", "docsis_bpkm.attr.cm_nonce",
10066 FT_UINT64, BASE_HEX, NULL, 0x0,
10067 NULL, HFILL}
10069 {&hf_docsis_bpkmattr_msg_signature,
10070 {"Message Signature", "docsis_bpkm.attr.msg_signature",
10071 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10072 "DER-encoded CMS Signature", HFILL}
10074 {&hf_docsis_bpkmattr_key_exchange_share_field_id,
10075 {"Key Exchange Share: Field ID", "docsis_bpkm.attr.key_exchange_share.field_id",
10076 FT_UINT16, BASE_HEX, VALS(bpkmattr_key_exchange_share_field_id_vals), 0x0,
10077 NULL, HFILL}
10079 {&hf_docsis_bpkmattr_key_exchange_share_key_share,
10080 {"Key Exchange Share", "docsis_bpkm.attr.key_exchange_share.key_share",
10081 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10082 NULL, HFILL}
10084 {&hf_docsis_bpkmattr_allowed_bpi_versions,
10085 {"Allowed BPI Versions", "docsis_bpkm.attr.allowed_bpi_versions",
10086 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10087 NULL, HFILL}
10089 {&hf_docsis_bpkmattr_allowed_bpi_version,
10090 {"BPI Version", "docsis_bpkm.attr.allowed_bpi_version",
10091 FT_UINT8, BASE_DEC, VALS(bpi_ver_vals), 0x0,
10092 NULL, HFILL}
10094 {&hf_docsis_bpkmattr_ocsp_responses,
10095 {"OCSP Responses", "docsis_bpkm.attr.ocsp_responses",
10096 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10097 NULL, HFILL}
10099 {&hf_docsis_bpkmattr_ocsp_response,
10100 {"OCSP Response", "docsis_bpkm.attr.ocsp_response",
10101 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10102 NULL, HFILL}
10104 {&hf_docsis_bpkmattr_cmts_designation,
10105 {"CMTS Designation", "docsis_bpkm.attr.cmts_designation",
10106 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10107 NULL, HFILL}
10109 {&hf_docsis_bpkmattr_cmts_designation_data_type,
10110 {"DataType", "docsis_bpkm.attr.cmts_designation.data_type",
10111 FT_UINT8, BASE_DEC, VALS(bpkm_cmts_binding_vals), 0x0,
10112 NULL, HFILL}
10114 {&hf_docsis_bpkmattr_cmts_designation_certificate_fingerprint,
10115 {"Certificate Fingerprint", "docsis_bpkm.attr.cmts_designation.certificate_fingerprint",
10116 FT_BYTES, BASE_NONE, NULL, 0x0,
10117 NULL, HFILL}
10119 {&hf_docsis_bpkmattr_cmts_designation_common_name,
10120 {"Common Name", "docsis_bpkm.attr.cmts_designation.common_name",
10121 FT_STRING, BASE_NONE, NULL, 0x0,
10122 NULL, HFILL}
10124 {&hf_docsis_bpkmattr_cmts_designation_org_unit,
10125 {"Organizational Unit", "docsis_bpkm.attr.cmts_designation.org_unit",
10126 FT_STRING, BASE_NONE, NULL, 0x0,
10127 NULL, HFILL}
10129 {&hf_docsis_bpkmattr_cmts_designation_org_name,
10130 {"Organization Name", "docsis_bpkm.attr.cmts_designation.org_name",
10131 FT_STRING, BASE_NONE, NULL, 0x0,
10132 NULL, HFILL}
10134 {&hf_docsis_bpkmattr_cmts_designation_serial_number,
10135 {"Serial Number", "docsis_bpkm.attr.cmts_designation.serial_number",
10136 FT_STRING, BASE_NONE, NULL, 0x0,
10137 NULL, HFILL}
10139 {&hf_docsis_bpkmattr_cmts_designation_issuing_ca_fingerprint,
10140 {"Issuing CA Fingerprint", "docsis_bpkm.attr.cmts_designation.issuing_ca_fingerprint",
10141 FT_BYTES, BASE_NONE, NULL, 0x0,
10142 NULL, HFILL}
10144 {&hf_docsis_bpkmattr_cmts_designation_issuing_ca_common_name,
10145 {"Issuing CA Common Name", "docsis_bpkm.attr.cmts_designation.issuing_ca_common_name",
10146 FT_STRING, BASE_NONE, NULL, 0x0,
10147 NULL, HFILL}
10149 {&hf_docsis_bpkmattr_cmts_designation_issuing_ca_org_unit,
10150 {"Issuing CA Organizational Unit", "docsis_bpkm.attr.cmts_designation.issuing_ca_org_unit",
10151 FT_STRING, BASE_NONE, NULL, 0x0,
10152 NULL, HFILL}
10154 {&hf_docsis_bpkmattr_cmts_designation_issuing_ca_org_name,
10155 {"Issuing CA Organization Name", "docsis_bpkm.attr.cmts_designation.issuing_ca_org_name",
10156 FT_STRING, BASE_NONE, NULL, 0x0,
10157 NULL, HFILL}
10159 {&hf_docsis_bpkmattr_cmts_designation_issuing_ca_serial_number,
10160 {"Issuing CA Serial Number", "docsis_bpkm.attr.cmts_designation.issuing_ca_serial_number",
10161 FT_STRING, BASE_NONE, NULL, 0x0,
10162 NULL, HFILL}
10164 {&hf_docsis_bpkmattr_cm_status_code,
10165 {"CM-Status Code", "docsis_bpkm.attr.cm_status_code",
10166 FT_UINT8, BASE_DEC, VALS(bpkm_cm_status_code_vals), 0x0,
10167 NULL, HFILL}
10169 {&hf_docsis_bpkmattr_detected_errors,
10170 {"Detected Errors", "docsis_bpkm.attr.detected_errors",
10171 FT_UINT8, BASE_DEC, NULL, 0x0,
10172 NULL, HFILL}
10174 {&hf_docsis_bpkmattr_vendor_def,
10175 {"Vendor Defined", "docsis_bpkm.attr.vendordef",
10176 FT_BYTES, BASE_NONE, NULL, 0x0,
10177 NULL, HFILL}
10179 /* REG-ACK */
10180 {&hf_docsis_regack_sid,
10181 {"Service Identifier", "docsis_regack.sid",
10182 FT_UINT16, BASE_DEC, NULL, 0x0,
10183 NULL, HFILL}
10185 {&hf_docsis_regack_response,
10186 {"Response Code", "docsis_regack.respnse",
10187 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10188 NULL, HFILL}
10190 /* DAS-RSP */
10191 {&hf_docsis_dsarsp_response,
10192 {"Confirmation Code", "docsis_dsarsp.confcode",
10193 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10194 NULL, HFILL}
10196 {&hf_docsis_dsaack_response,
10197 {"Confirmation Code", "docsis_dsaack.confcode",
10198 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10199 NULL, HFILL}
10201 /* DSC-RSP */
10202 {&hf_docsis_dscrsp_response,
10203 {"Confirmation Code", "docsis_dscrsp.confcode",
10204 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10205 NULL, HFILL}
10207 {&hf_docsis_dscack_response,
10208 {"Confirmation Code", "docsis_dscack.confcode",
10209 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10210 NULL, HFILL}
10212 /* DSD-REQ */
10213 {&hf_docsis_dsdreq_rsvd,
10214 {"Reserved", "docsis_dsdreq.rsvd",
10215 FT_UINT16, BASE_HEX, NULL, 0x0,
10216 NULL, HFILL}
10218 {&hf_docsis_dsdreq_sfid,
10219 {"Service Flow ID", "docsis_dsdreq.sfid",
10220 FT_UINT32, BASE_DEC, NULL, 0x0,
10221 NULL, HFILL}
10223 /* DSD-RSP */
10224 {&hf_docsis_dsdrsp_confcode,
10225 {"Confirmation Code", "docsis_dsdrsp.confcode",
10226 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10227 NULL, HFILL}
10229 {&hf_docsis_dsdrsp_rsvd,
10230 {"Reserved", "docsis_dsdrsp.rsvd",
10231 FT_UINT8, BASE_DEC, NULL, 0x0,
10232 NULL, HFILL}
10234 /* DCC-REQ */
10235 {&hf_docsis_dccreq_type,
10237 "Type",
10238 "docsis_dccreq.tlvtype",
10239 FT_UINT8, BASE_DEC, VALS(dcc_tlv_vals), 0x0,
10240 NULL,
10241 HFILL
10244 {&hf_docsis_dccreq_length,
10246 "Length",
10247 "docsis_dccreq.tlvlen",
10248 FT_UINT8, BASE_DEC, NULL, 0x0,
10249 NULL,
10250 HFILL
10253 {&hf_docsis_dccreq_tran_id ,
10255 "Transaction ID",
10256 "docsis_dccreq.tran_id",
10257 FT_UINT16, BASE_DEC, NULL, 0x0,
10258 NULL,
10259 HFILL
10262 {&hf_docsis_dccreq_up_chan_id ,
10264 "Up Channel ID",
10265 "docsis_dccreq.up_chan_id",
10266 FT_UINT8, BASE_DEC, NULL, 0x0,
10267 NULL,
10268 HFILL
10271 {&hf_docsis_dcc_ds_params_subtype,
10273 "Type",
10274 "docsis_dccreq.ds_tlvtype",
10275 FT_UINT8, BASE_DEC, VALS(ds_param_subtlv_vals), 0x0,
10276 NULL,
10277 HFILL
10280 {&hf_docsis_dcc_ds_params_length,
10282 "Length",
10283 "docsis_dccreq.ds_tlvlen",
10284 FT_UINT8, BASE_DEC, NULL, 0x0,
10285 NULL,
10286 HFILL
10289 {&hf_docsis_dccreq_ds_freq ,
10291 "Frequency",
10292 "docsis_dccreq.ds_freq",
10293 FT_UINT32, BASE_DEC, NULL, 0x0,
10294 NULL,
10295 HFILL
10298 {&hf_docsis_dccreq_ds_mod_type ,
10300 "Modulation Type",
10301 "docsis_dccreq.ds_mod_type",
10302 FT_UINT8, BASE_DEC, VALS (ds_mod_type_vals), 0x0,
10303 NULL,
10304 HFILL
10307 {&hf_docsis_dccreq_ds_sym_rate ,
10309 "Symbol Rate",
10310 "docsis_dccreq.ds_sym_rate",
10311 FT_UINT8, BASE_DEC, VALS (ds_sym_rate_vals), 0x0,
10312 NULL,
10313 HFILL
10316 {&hf_docsis_dccreq_ds_intlv_depth_i ,
10318 "Interleaver Depth I Value",
10319 "docsis_dccreq.ds_intlv_depth_i",
10320 FT_UINT8, BASE_DEC, NULL, 0x0,
10321 NULL,
10322 HFILL
10325 {&hf_docsis_dccreq_ds_intlv_depth_j ,
10327 "Interleaver Depth J Value",
10328 "docsis_dccreq.ds_intlv_depth_j",
10329 FT_UINT8, BASE_DEC, NULL, 0x0,
10330 NULL,
10331 HFILL
10334 {&hf_docsis_dccreq_ds_chan_id ,
10336 "Downstream Channel ID",
10337 "docsis_dccreq.ds_chan_id",
10338 FT_UINT8, BASE_DEC, NULL, 0x0,
10339 NULL,
10340 HFILL
10343 {&hf_docsis_dccreq_ds_sync_sub ,
10345 "SYNC Substitution",
10346 "docsis_dccreq.ds_sync_sub",
10347 FT_UINT8, BASE_DEC, NULL, 0x0,
10348 NULL,
10349 HFILL
10352 {&hf_docsis_dccreq_ds_ofdm_block_freq ,
10354 "OFDM Block Frequency",
10355 "docsis_dccreq.ds_ofdm_block_freq",
10356 FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_hz), 0x0,
10357 NULL,
10358 HFILL
10361 {&hf_docsis_dccreq_init_tech ,
10363 "Initialization Technique",
10364 "docsis_dccreq.init_tech",
10365 FT_UINT8, BASE_DEC, VALS (init_tech_vals), 0x0,
10366 NULL,
10367 HFILL
10370 {&hf_docsis_dccreq_ucd_sub ,
10372 "UCD Substitution",
10373 "docsis_dccreq.ucd_sub",
10374 FT_BYTES, BASE_NONE, NULL, 0x0,
10375 NULL,
10376 HFILL
10379 {&hf_docsis_dccreq_said_sub_cur ,
10381 "SAID Sub - Current Value",
10382 "docsis_dccreq.said_sub_cur",
10383 FT_UINT16, BASE_DEC, NULL, 0x0,
10384 NULL,
10385 HFILL
10388 {&hf_docsis_dccreq_said_sub_new ,
10390 "SAID Sub - New Value",
10391 "docsis_dccreq.said_sub_new",
10392 FT_UINT16, BASE_DEC, NULL, 0x0,
10393 NULL,
10394 HFILL
10397 {&hf_docsis_dcc_sf_sub_subtype,
10399 "Type",
10400 "docsis_dccreq.sf_tlvtype",
10401 FT_UINT8, BASE_DEC, VALS(sf_sub_subtlv_vals), 0x0,
10402 NULL,
10403 HFILL
10406 {&hf_docsis_dcc_sf_sub_length,
10408 "Length",
10409 "docsis_dccreq.sf_tlvlen",
10410 FT_UINT8, BASE_DEC, NULL, 0x0,
10411 NULL,
10412 HFILL
10415 {&hf_docsis_dccreq_sf_sfid_cur ,
10417 "SF Sub - SFID Current Value",
10418 "docsis_dccreq.sf_sfid_cur",
10419 FT_UINT32, BASE_DEC, NULL, 0x0,
10420 NULL,
10421 HFILL
10424 {&hf_docsis_dccreq_sf_sfid_new ,
10426 "SF Sub - SFID New Value",
10427 "docsis_dccreq.sf_sfid_new",
10428 FT_UINT32, BASE_DEC, NULL, 0x0,
10429 NULL,
10430 HFILL
10433 {&hf_docsis_dccreq_sf_sid_cur ,
10435 "SF Sub - SID Current Value",
10436 "docsis_dccreq.sf_sid_cur",
10437 FT_UINT16, BASE_DEC, NULL, 0x0,
10438 NULL,
10439 HFILL
10442 {&hf_docsis_dccreq_sf_sid_new ,
10444 "SF Sub - SID New Value",
10445 "docsis_dccreq.sf_sid_new",
10446 FT_UINT16, BASE_DEC, NULL, 0x0,
10447 NULL,
10448 HFILL
10451 {&hf_docsis_dccreq_sf_unsol_grant_tref ,
10453 "SF Sub - Unsolicited Grant Time Reference",
10454 "docsis_dccreq.sf_unsol_grant_tref",
10455 FT_UINT32, BASE_DEC, NULL, 0x0,
10456 NULL,
10457 HFILL
10460 {&hf_docsis_dccreq_cmts_mac_addr ,
10462 "CMTS MAC Address",
10463 "docsis_dccreq.cmts_mac_addr",
10464 FT_ETHER, BASE_NONE, NULL, 0x0,
10465 NULL,
10466 HFILL
10469 {&hf_docsis_dccreq_key_seq_num ,
10471 "Auth Key Sequence Number",
10472 "docsis_dccreq.key_seq_num",
10473 FT_UINT8, BASE_DEC, NULL, 0x0,
10474 NULL,
10475 HFILL
10478 {&hf_docsis_dccreq_hmac_digest ,
10480 "HMAC-DigestNumber",
10481 "docsis_dccreq.hmac_digest",
10482 FT_BYTES, BASE_NONE, NULL, 0x0,
10483 NULL,
10484 HFILL
10487 /* DCC-RSP */
10488 {&hf_docsis_dccrsp_conf_code ,
10490 "Confirmation Code",
10491 "docsis_dccrsp.conf_code",
10492 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10493 NULL,
10494 HFILL
10497 {&hf_docsis_dccrsp_type,
10499 "Type",
10500 "docsis_dccrsp.tlvtype",
10501 FT_UINT8, BASE_DEC, VALS(dccrsp_tlv_vals), 0x0,
10502 NULL,
10503 HFILL
10506 {&hf_docsis_dccrsp_length,
10508 "Length",
10509 "docsis_dccrsp.tlvlen",
10510 FT_UINT8, BASE_DEC, NULL, 0x0,
10511 NULL,
10512 HFILL
10515 {&hf_docsis_dcc_cm_jump_subtype,
10517 "Type",
10518 "docsis_dccrsp.cm_jump_tlvtype",
10519 FT_UINT8, BASE_DEC, VALS(cm_jump_subtlv_vals), 0x0,
10520 NULL,
10521 HFILL
10524 {&hf_docsis_dcc_cm_jump_length,
10526 "Length",
10527 "docsis_dccrsp.cm_jump_tlvlen",
10528 FT_UINT8, BASE_DEC, NULL, 0x0,
10529 NULL,
10530 HFILL
10533 {&hf_docsis_dccrsp_cm_jump_time_length ,
10535 "Length of Jump",
10536 "docsis_dccrsp.cm_jump_time_length",
10537 FT_UINT32, BASE_DEC, NULL, 0x0,
10538 NULL,
10539 HFILL
10542 {&hf_docsis_dccrsp_cm_jump_time_start ,
10544 "Start Time of Jump",
10545 "docsis_dccrsp.cm_jump_time_start",
10546 FT_UINT64, BASE_DEC, NULL, 0x0,
10547 NULL,
10548 HFILL
10551 {&hf_docsis_dccrsp_key_seq_num ,
10553 "Auth Key Sequence Number",
10554 "docsis_dccrsp.key_seq_num",
10555 FT_UINT8, BASE_DEC, NULL, 0x0,
10556 NULL,
10557 HFILL
10560 {&hf_docsis_dccrsp_hmac_digest ,
10562 "HMAC-Digest Number",
10563 "docsis_dccrsp.hmac_digest",
10564 FT_BYTES, BASE_NONE, NULL, 0x0,
10565 NULL,
10566 HFILL
10569 /* DCC-ACK */
10570 {&hf_docsis_dccack_type,
10572 "Type",
10573 "docsis_dccack.tlvtype",
10574 FT_UINT8, BASE_DEC, VALS(dccack_tlv_vals), 0x0,
10575 NULL,
10576 HFILL
10579 {&hf_docsis_dccack_length,
10581 "Length",
10582 "docsis_dccack.tlvlen",
10583 FT_UINT8, BASE_DEC, NULL, 0x0,
10584 NULL,
10585 HFILL
10588 {&hf_docsis_dccack_key_seq_num ,
10590 "Auth Key Sequence Number",
10591 "docsis_dccack.key_seq_num",
10592 FT_UINT8, BASE_DEC, NULL, 0x0,
10593 NULL,
10594 HFILL
10597 {&hf_docsis_dccack_hmac_digest ,
10599 "HMAC-DigestNumber",
10600 "docsis_dccack.hmac_digest",
10601 FT_BYTES, BASE_NONE, NULL, 0x0,
10602 NULL,
10603 HFILL
10606 /* INIT_RNG_REQ */
10607 {&hf_docsis_intrngreq_sid,
10608 {"Service Identifier", "docsis_intrngreq.sid",
10609 FT_UINT16, BASE_DEC, NULL, 0x3FFF,
10610 NULL, HFILL}
10612 /* DCD */
10613 {&hf_docsis_dcd_config_ch_cnt,
10615 "Configuration Change Count",
10616 "docsis_dcd.config_ch_cnt",
10617 FT_UINT8, BASE_DEC, NULL, 0x0,
10618 NULL,
10619 HFILL
10622 {&hf_docsis_dcd_num_of_frag,
10624 "Number of Fragments",
10625 "docsis_dcd.num_of_frag",
10626 FT_UINT8, BASE_DEC, NULL, 0x0,
10627 NULL,
10628 HFILL
10631 {&hf_docsis_dcd_frag_sequence_num,
10633 "Fragment Sequence Number",
10634 "docsis_dcd.frag_sequence_num",
10635 FT_UINT8, BASE_DEC, NULL, 0x0,
10636 NULL,
10637 HFILL
10640 {&hf_docsis_dcd_type,
10642 "Type",
10643 "docsis_dcd.tlvtype",
10644 FT_UINT8, BASE_DEC, VALS(dcd_tlv_vals), 0x0,
10645 NULL,
10646 HFILL
10649 {&hf_docsis_dcd_length,
10651 "Length",
10652 "docsis_dcd.tlvlen",
10653 FT_UINT8, BASE_DEC, NULL, 0x0,
10654 NULL,
10655 HFILL
10658 {&hf_docsis_dcd_down_classifier_subtype,
10660 "Type",
10661 "docsis_dcd.down_classifier_tlvtype",
10662 FT_UINT8, BASE_DEC, VALS(dcd_down_classifier_vals), 0x0,
10663 NULL,
10664 HFILL
10667 {&hf_docsis_dcd_down_classifier_length,
10669 "Length",
10670 "docsis_dcd.down_classifier_tlvlen",
10671 FT_UINT8, BASE_DEC, NULL, 0x0,
10672 NULL,
10673 HFILL
10676 {&hf_docsis_dcd_cfr_id,
10678 "Downstream Classifier ID",
10679 "docsis_dcd.cfr_id",
10680 FT_UINT16, BASE_DEC, NULL, 0x0,
10681 NULL,
10682 HFILL
10685 {&hf_docsis_dcd_cfr_rule_pri,
10687 "Downstream Classifier Rule Priority",
10688 "docsis_dcd.cfr_rule_pri",
10689 FT_UINT8, BASE_DEC, NULL, 0x0,
10690 NULL,
10691 HFILL
10694 {&hf_docsis_dcd_cfr_ip_subtype,
10696 "Type",
10697 "docsis_dcd.cfr_ip_tlvtype",
10698 FT_UINT8, BASE_DEC, VALS(dcd_cfr_ip_vals), 0x0,
10699 NULL,
10700 HFILL
10703 {&hf_docsis_dcd_cfr_ip_length,
10705 "Length",
10706 "docsis_dcd.cfr_ip_tlvlen",
10707 FT_UINT8, BASE_DEC, NULL, 0x0,
10708 NULL,
10709 HFILL
10712 {&hf_docsis_dcd_cfr_ip_source_addr,
10714 "Downstream Classifier IP Source Address",
10715 "docsis_dcd.cfr_ip_source_addr",
10716 FT_IPv4, BASE_NONE, NULL, 0x0,
10717 NULL,
10718 HFILL
10721 {&hf_docsis_dcd_cfr_ip_source_mask,
10723 "Downstream Classifier IP Source Mask",
10724 "docsis_dcd.cfr_ip_source_mask",
10725 FT_IPv4, BASE_NETMASK, NULL, 0x0,
10726 NULL,
10727 HFILL
10730 {&hf_docsis_dcd_cfr_ip_dest_addr,
10732 "Downstream Classifier IP Destination Address",
10733 "docsis_dcd.cfr_ip_dest_addr",
10734 FT_IPv4, BASE_NONE, NULL, 0x0,
10735 NULL,
10736 HFILL
10739 {&hf_docsis_dcd_cfr_ip_dest_mask,
10741 "Downstream Classifier IP Destination Mask",
10742 "docsis_dcd.cfr_ip_dest_mask",
10743 FT_IPv4, BASE_NETMASK, NULL, 0x0,
10744 "Downstream Classifier IP Destination Address",
10745 HFILL
10748 {&hf_docsis_dcd_cfr_tcpudp_srcport_start,
10750 "Downstream Classifier IP TCP/UDP Source Port Start",
10751 "docsis_dcd.cfr_ip_tcpudp_srcport_start",
10752 FT_UINT16, BASE_DEC, NULL, 0x0,
10753 NULL,
10754 HFILL
10757 {&hf_docsis_dcd_cfr_tcpudp_srcport_end,
10759 "Downstream Classifier IP TCP/UDP Source Port End",
10760 "docsis_dcd.cfr_ip_tcpudp_srcport_end",
10761 FT_UINT16, BASE_DEC, NULL, 0x0,
10762 NULL,
10763 HFILL
10766 {&hf_docsis_dcd_cfr_tcpudp_dstport_start,
10768 "Downstream Classifier IP TCP/UDP Destination Port Start",
10769 "docsis_dcd.cfr_ip_tcpudp_dstport_start",
10770 FT_UINT16, BASE_DEC, NULL, 0x0,
10771 NULL,
10772 HFILL
10775 {&hf_docsis_dcd_cfr_tcpudp_dstport_end,
10777 "Downstream Classifier IP TCP/UDP Destination Port End",
10778 "docsis_dcd.cfr_ip_tcpudp_dstport_end",
10779 FT_UINT16, BASE_DEC, NULL, 0x0,
10780 NULL,
10781 HFILL
10784 {&hf_docsis_dcd_rule_id,
10786 "DSG Rule ID",
10787 "docsis_dcd.rule_id",
10788 FT_UINT8, BASE_DEC, NULL, 0x0,
10789 NULL,
10790 HFILL
10793 {&hf_docsis_dcd_rule_pri,
10795 "DSG Rule Priority",
10796 "docsis_dcd.rule_pri",
10797 FT_UINT8, BASE_DEC, NULL, 0x0,
10798 NULL,
10799 HFILL
10802 {&hf_docsis_dcd_rule_ucid_list,
10804 "DSG Rule UCID Range",
10805 "docsis_dcd.rule_ucid_list",
10806 FT_BYTES, BASE_NONE, NULL, 0x0,
10807 NULL,
10808 HFILL
10811 {&hf_docsis_dcd_clid_subtype,
10813 "Type",
10814 "docsis_dcd.clid_tlvtype",
10815 FT_UINT8, BASE_DEC, VALS(dcd_clid_vals), 0x0,
10816 NULL,
10817 HFILL
10820 {&hf_docsis_dcd_clid_length,
10822 "Length",
10823 "docsis_dcd.clid_tlvlen",
10824 FT_UINT8, BASE_DEC, NULL, 0x0,
10825 NULL,
10826 HFILL
10829 {&hf_docsis_dcd_clid_bcast_id,
10831 "DSG Rule Client ID Broadcast ID",
10832 "docsis_dcd.clid_bcast_id",
10833 FT_UINT16, BASE_DEC, NULL, 0x0,
10834 NULL,
10835 HFILL
10838 {&hf_docsis_dcd_clid_known_mac_addr,
10840 "DSG Rule Client ID Known MAC Address",
10841 "docsis_dcd.clid_known_mac_addr",
10842 FT_ETHER, BASE_NONE, NULL, 0x0,
10843 NULL,
10844 HFILL
10847 {&hf_docsis_dcd_clid_ca_sys_id,
10849 "DSG Rule Client ID CA System ID",
10850 "docsis_dcd.clid_ca_sys_id",
10851 FT_UINT16, BASE_DEC, NULL, 0x0,
10852 NULL,
10853 HFILL
10856 {&hf_docsis_dcd_clid_app_id,
10858 "DSG Rule Client ID Application ID",
10859 "docsis_dcd.clid_app_id",
10860 FT_UINT16, BASE_DEC, NULL, 0x0,
10861 NULL,
10862 HFILL
10865 {&hf_docsis_dcd_dsg_rule_subtype,
10867 "Type",
10868 "docsis_dcd.rule_tlvtype",
10869 FT_UINT8, BASE_DEC, VALS(dcd_dsg_rule_vals), 0x0,
10870 NULL,
10871 HFILL
10874 {&hf_docsis_dcd_dsg_rule_length,
10876 "Length",
10877 "docsis_dcd.rule_tlvlen",
10878 FT_UINT8, BASE_DEC, NULL, 0x0,
10879 NULL,
10880 HFILL
10883 {&hf_docsis_dcd_rule_tunl_addr,
10885 "DSG Rule Tunnel MAC Address",
10886 "docsis_dcd.rule_tunl_addr",
10887 FT_ETHER, BASE_NONE, NULL, 0x0,
10888 NULL,
10889 HFILL
10892 {&hf_docsis_dcd_rule_cfr_id,
10894 "DSG Rule Classifier ID",
10895 "docsis_dcd.rule_cfr_id",
10896 FT_UINT16, BASE_DEC, NULL, 0x0,
10897 NULL,
10898 HFILL
10901 {&hf_docsis_dcd_rule_vendor_spec,
10903 "DSG Rule Vendor Specific Parameters",
10904 "docsis_dcd.rule_vendor_spec",
10905 FT_BYTES, BASE_NONE, NULL, 0x0,
10906 NULL,
10907 HFILL
10910 {&hf_docsis_dcd_cfg_subtype,
10912 "Type",
10913 "docsis_dcd.cfg_tlvtype",
10914 FT_UINT8, BASE_DEC, VALS(dcd_cfg_vals), 0x0,
10915 NULL,
10916 HFILL
10919 {&hf_docsis_dcd_cfg_length,
10921 "Length",
10922 "docsis_dcd.cfg_tlvlen",
10923 FT_UINT8, BASE_DEC, NULL, 0x0,
10924 NULL,
10925 HFILL
10928 {&hf_docsis_dcd_cfg_chan,
10930 "DSG Configuration Channel",
10931 "docsis_dcd.cfg_chan",
10932 FT_UINT32, BASE_DEC, NULL, 0x0,
10933 NULL,
10934 HFILL
10937 {&hf_docsis_dcd_cfg_tdsg1,
10939 "DSG Initialization Timeout (Tdsg1)",
10940 "docsis_dcd.cfg_tdsg1",
10941 FT_UINT16, BASE_DEC, NULL, 0x0,
10942 NULL,
10943 HFILL
10946 {&hf_docsis_dcd_cfg_tdsg2,
10948 "DSG Operational Timeout (Tdsg2)",
10949 "docsis_dcd.cfg_tdsg2",
10950 FT_UINT16, BASE_DEC, NULL, 0x0,
10951 NULL,
10952 HFILL
10955 {&hf_docsis_dcd_cfg_tdsg3,
10957 "DSG Two-Way Retry Timer (Tdsg3)",
10958 "docsis_dcd.cfg_tdsg3",
10959 FT_UINT16, BASE_DEC, NULL, 0x0,
10960 NULL,
10961 HFILL
10964 {&hf_docsis_dcd_cfg_tdsg4,
10966 "DSG One-Way Retry Timer (Tdsg4)",
10967 "docsis_dcd.cfg_tdsg4",
10968 FT_UINT16, BASE_DEC, NULL, 0x0,
10969 NULL,
10970 HFILL
10973 {&hf_docsis_dcd_cfg_vendor_spec,
10975 "DSG Configuration Vendor Specific Parameters",
10976 "docsis_dcd.cfg_vendor_spec",
10977 FT_BYTES, BASE_NONE, NULL, 0x0,
10978 NULL,
10979 HFILL
10982 /* MDD */
10983 {&hf_docsis_mdd_ccc,
10984 {"Configuration Change Count", "docsis_mdd.ccc",
10985 FT_UINT8, BASE_DEC, NULL, 0x0,
10986 "MDD Configuration Change Count", HFILL}
10988 {&hf_docsis_mdd_number_of_fragments,
10989 {"Number of Fragments", "docsis_mdd.number_of_fragments",
10990 FT_UINT8, BASE_DEC, NULL, 0x0,
10991 "MDD Number of Fragments", HFILL}
10993 {&hf_docsis_mdd_fragment_sequence_number,
10994 {"Fragment Sequence Number", "docsis_mdd.fragment_sequence_number",
10995 FT_UINT8, BASE_DEC, NULL, 0x0,
10996 "MDD Fragment Sequence Number", HFILL}
10998 {&hf_docsis_mdd_current_channel_dcid,
10999 {"Current Channel DCID", "docsis_mdd.current_channel_dcid",
11000 FT_UINT8, BASE_DEC, NULL, 0x0,
11001 "MDD Current Channel DCID", HFILL}
11003 {&hf_docsis_mdd_tlv,
11004 {"TLV", "docsis_mdd.tlv",
11005 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
11006 NULL, HFILL}
11008 {&hf_docsis_mdd_tlv_type,
11009 {"Type", "docsis_mdd.tlv.type",
11010 FT_UINT8, BASE_DEC, VALS(mdd_tlv_vals), 0x0,
11011 NULL, HFILL}
11013 {&hf_docsis_mdd_tlv_length,
11014 {"Length", "docsis_mdd.tlv.length",
11015 FT_UINT8, BASE_DEC, NULL, 0x0,
11016 NULL, HFILL}
11018 {&hf_docsis_mdd_ds_active_channel_list_subtype,
11019 {"Type", "docsis_mdd.downstream_active_channel_list_tlvtype",
11020 FT_UINT8, BASE_DEC, VALS(mdd_ds_active_channel_list_vals), 0x0,
11021 NULL, HFILL}
11023 {&hf_docsis_mdd_ds_active_channel_list_length,
11024 {"Length", "docsis_mdd.downstream_active_channel_list_tlvlen",
11025 FT_UINT8, BASE_DEC, NULL, 0x0,
11026 NULL, HFILL}
11028 {&hf_docsis_mdd_downstream_active_channel_list_channel_id,
11029 {"Channel ID", "docsis_mdd.downstream_active_channel_list_channel_id",
11030 FT_UINT8, BASE_DEC, NULL, 0x0,
11031 "MDD Downstream Active Channel List Channel ID", HFILL}
11033 {&hf_docsis_mdd_downstream_active_channel_list_frequency,
11034 {"Frequency", "docsis_mdd.downstream_active_channel_list_frequency",
11035 FT_UINT32, BASE_DEC, NULL, 0x0,
11036 "MDD Downstream Active Channel List Frequency", HFILL}
11038 {&hf_docsis_mdd_downstream_active_channel_list_annex,
11039 {"Annex", "docsis_mdd.downstream_active_channel_list_annex",
11040 FT_UINT8, BASE_DEC, VALS(J83_annex_vals), 0xF0,
11041 "MDD Downstream Active Channel List Annex", HFILL}
11043 {&hf_docsis_mdd_downstream_active_channel_list_modulation_order,
11044 {"Modulation Order", "docsis_mdd.downstream_active_channel_list_modulation_order",
11045 FT_UINT8, BASE_DEC, VALS(modulation_order_vals), 0x0F,
11046 "MDD Downstream Active Channel List Modulation Order", HFILL}
11048 {&hf_docsis_mdd_downstream_active_channel_list_primary_capable,
11049 {"Primary Capable", "docsis_mdd.downstream_active_channel_list_primary_capable",
11050 FT_UINT8, BASE_DEC, VALS(primary_capable_vals), 0x0,
11051 "MDD Downstream Active Channel List Primary Capable", HFILL}
11053 {&hf_docsis_mdd_cm_status_event_enable_bitmask,
11054 {"CM-STATUS Event Enable Bitmask", "docsis_mdd.cm_status_event_enable_bitmask",
11055 FT_UINT16, BASE_HEX, NULL, 0x0,
11056 NULL, HFILL}
11058 {&hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_timeout,
11059 {"MDD Timeout", "docsis_mdd.downstream_active_channel_list_mdd_timeout",
11060 FT_UINT16, BASE_DEC, NULL, 0x0002,
11061 "MDD Downstream Active Channel List MDD Timeout", HFILL}
11063 {&hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_failure,
11064 {"QAM/FEC Lock Failure", "docsis_mdd.cm_status_event_enable_bitmask_qam_fec_lock_failure",
11065 FT_UINT16, BASE_DEC, NULL, 0x0004,
11066 "MDD Downstream Active Channel List QAM/FEC Lock Failure", HFILL}
11068 {&hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_recovery,
11069 {"MDD Recovery", "docsis_mdd.cm_status_event_enable_bitmask_mdd_recovery",
11070 FT_UINT16, BASE_DEC, NULL, 0x0010,
11071 "CM-STATUS event MDD Recovery", HFILL}
11073 {&hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_recovery,
11074 {"QAM/FEC Lock Recovery", "docsis_mdd.cm_status_event_enable_bitmask_qam_fec_lock_recovery",
11075 FT_UINT16, BASE_DEC, NULL, 0x0020,
11076 "CM-STATUS event QAM/FEC Lock Recovery", HFILL}
11078 {&hf_docsis_mdd_downstream_active_channel_list_map_ucd_transport_indicator,
11079 {"MAP and UCD transport indicator", "docsis_mdd.downstream_active_channel_list_map_ucd_transport_indicator",
11080 FT_UINT8, BASE_DEC, VALS(map_ucd_transport_indicator_vals), 0x0,
11081 "MDD Downstream Active Channel List MAP and UCD Transport Indicator", HFILL}
11083 {&hf_docsis_mdd_downstream_active_channel_list_fdx_sub_band_id,
11084 {"Full Duplex Sub-band ID", "docsis_mdd.downstream_active_channel_list_fdx_subband_id",
11085 FT_UINT8, BASE_DEC, NULL, 0x0,
11086 NULL, HFILL}
11088 {&hf_docsis_mdd_downstream_active_channel_list_fdx_ds,
11089 {"FDX Downstream", "docsis_mdd.downstream_active_channel_list_fdx_ds",
11090 FT_UINT8, BASE_DEC, VALS(mdd_downstream_active_channel_list_fdx_vals), 0x0,
11091 "MDD Downstream Active Channel List FDX Downstream Indicator", HFILL}
11093 {&hf_docsis_mdd_ofdm_plc_parameters,
11094 {"OFDM PLC Parameters", "docsis_mdd.ofdm_plc_parameters",
11095 FT_UINT8, BASE_HEX, NULL, 0x0,
11096 NULL, HFILL}
11098 {&hf_docsis_mdd_ofdm_plc_parameters_tukey_raised_cosine_window,
11099 {"Tukey raised cosine window", "docsis_mdd.ofdm_plc_parameters_tukey_raised_cosine_window",
11100 FT_UINT8, BASE_DEC, VALS(tukey_raised_cosine_vals), 0x07,
11101 "OFDM PLC Parameters Tukey raised cosine window", HFILL}
11103 {&hf_docsis_mdd_ofdm_plc_parameters_cyclic_prefix,
11104 {"Cyclic prefix", "docsis_mdd.ofdm_plc_parameters_cyclic_prefix",
11105 FT_UINT8, BASE_DEC, VALS(cyclic_prefix_vals), 0x38,
11106 "OFDM PLC parameters Cyclic prefix", HFILL}
11108 {&hf_docsis_mdd_ofdm_plc_parameters_sub_carrier_spacing,
11109 {"Sub carrier spacing", "docsis_mdd.ofdm_plc_parameters_sub_carrier_spacing",
11110 FT_UINT8, BASE_DEC, VALS(spacing_vals), 0x40,
11111 "OFDM PLC parameters Sub carrier spacing", HFILL}
11113 {&hf_docsis_mdd_up_active_channel_list_subtype,
11114 {"Type", "docsis_mdd.up_active_channel_list_tlvtype",
11115 FT_UINT8, BASE_DEC, VALS(mdd_up_active_channel_list_vals), 0x0,
11116 NULL, HFILL}
11118 {&hf_docsis_mdd_up_active_channel_list_length,
11119 {"Length", "docsis_mdd.up_active_channel_list_tlvlen",
11120 FT_UINT8, BASE_DEC, NULL, 0x0,
11121 NULL, HFILL}
11123 {&hf_docsis_mdd_cm_status_event_enable_bitmask_t4_timeout,
11124 {"T4 timeout", "docsis_mdd.cm_status_event_enable_bitmask_t4_timeout",
11125 FT_UINT16, BASE_DEC, NULL, 0x0040,
11126 "CM-STATUS event T4 timeout", HFILL}
11128 {&hf_docsis_mdd_cm_status_event_enable_bitmask_t3_retries_exceeded,
11129 {"T3 Retries Exceeded", "docsis_mdd.cm_status_event_enable_bitmask_t3_retries_exceeded",
11130 FT_UINT16, BASE_DEC, NULL, 0x0080,
11131 "CM-STATUS event T3 Retries Exceeded", HFILL}
11133 {&hf_docsis_mdd_cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded,
11134 {"Successful Ranging after T3 Retries Exceeded", "docsis_mdd.cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded",
11135 FT_UINT16, BASE_DEC, NULL, 0x0100,
11136 "CM-STATUS event Successful Ranging after T3 Retries Exceeded", HFILL}
11138 {&hf_docsis_mdd_mac_domain_downstream_service_group_channel_id,
11139 {"Channel ID", "docsis_mdd.mac_domain_downstream_service_group_channel_id",
11140 FT_UINT8, BASE_DEC, NULL, 0x0,
11141 "MDD MAC Domain Downstream Service Group Channel ID", HFILL}
11143 {&hf_docsis_mdd_ds_service_group_subtype,
11144 {"Type", "docsis_mdd.ds_service_group_type",
11145 FT_UINT8, BASE_DEC, VALS(mdd_ds_service_group_vals), 0x0,
11146 NULL, HFILL}
11148 {&hf_docsis_mdd_ds_service_group_length,
11149 {"Length", "docsis_mdd.ds_service_group_length",
11150 FT_UINT8, BASE_DEC, NULL, 0x0,
11151 NULL, HFILL}
11153 {&hf_docsis_mdd_mac_domain_downstream_service_group_md_ds_sg_identifier,
11154 {"MD-DS-SG Identifier", "docsis_mdd.mac_domain_downstream_service_group_md_ds_sg_identifier",
11155 FT_UINT8, BASE_DEC, NULL, 0x0,
11156 "MDD MAC Domain Downstream Service Group MD-DS-SG Identifier", HFILL}
11158 {&hf_docsis_mdd_downstream_ambiguity_resolution_frequency,
11159 {"Frequency", "docsis_mdd.downstream_ambiguity_resolution_frequency",
11160 FT_UINT32, BASE_DEC, NULL, 0x0,
11161 "MDD Downstream Ambiguity Resolution frequency", HFILL}
11163 {&hf_docsis_mdd_channel_profile_reporting_control_subtype,
11164 {"Type", "docsis_mdd.channel_profile_reporting_control_type",
11165 FT_UINT8, BASE_DEC, VALS(mdd_channel_profile_reporting_control_vals), 0x0,
11166 NULL, HFILL}
11168 {&hf_docsis_mdd_channel_profile_reporting_control_length,
11169 {"Length", "docsis_mdd.channel_profile_reporting_control_length",
11170 FT_UINT8, BASE_DEC, NULL, 0x0,
11171 NULL, HFILL}
11173 {&hf_docsis_mdd_rcp_center_frequency_spacing,
11174 {"RCP Center Frequency Spacing", "docsis_mdd.rcp_center_frequency_spacing",
11175 FT_UINT8, BASE_DEC, VALS(rcp_center_frequency_spacing_vals), 0x0,
11176 "MDD RCP Center Frequency Spacing", HFILL}
11178 {&hf_docsis_mdd_verbose_rcp_reporting,
11179 {"Verbose RCP reporting", "docsis_mdd.verbose_rcp_reporting",
11180 FT_UINT8, BASE_DEC, VALS(verbose_rcp_reporting_vals), 0x0,
11181 "MDD Verbose RCP Reporting", HFILL}
11183 {&hf_docsis_mdd_fragmented_rcp_transmission,
11184 {"Fragmented RCP transmission", "docsis_mdd.fragmented_rcp_transmission",
11185 FT_UINT8, BASE_DEC, VALS(fragmented_rcp_transmission_vals), 0x0,
11186 "MDD Fragmented RCP transmission", HFILL}
11188 {&hf_docsis_mdd_ip_init_param_subtype,
11189 {"Type", "docsis_mdd.ip_init_param_type",
11190 FT_UINT8, BASE_DEC, VALS(mdd_ip_init_param_vals), 0x0,
11191 NULL, HFILL}
11193 {&hf_docsis_mdd_ip_init_param_length,
11194 {"Length", "docsis_mdd.ip_init_param_length",
11195 FT_UINT8, BASE_DEC, NULL, 0x0,
11196 NULL, HFILL}
11198 {&hf_docsis_mdd_ip_provisioning_mode,
11199 {"IP Provisioning Mode", "docsis_mdd.ip_provisioning_mode",
11200 FT_UINT8, BASE_DEC, VALS(ip_provisioning_mode_vals), 0x0,
11201 "MDD IP Provisioning Mode", HFILL}
11203 {&hf_docsis_mdd_pre_registration_dsid,
11204 {"Pre-registration DSID", "docsis_mdd.pre_registration_dsid",
11205 FT_UINT24, BASE_DEC, NULL, 0x0FFFFF,
11206 "MDD Pre-registration DSID", HFILL}
11208 {&hf_docsis_mdd_early_authentication_and_encryption,
11209 {"Early Authentication and Encryption", "docsis_mdd.early_authentication_and_encryption",
11210 FT_UINT8, BASE_DEC, VALS(eae_vals), 0x0,
11211 "MDD Early Authentication and Encryption", HFILL}
11213 {&hf_docsis_mdd_upstream_active_channel_list_upstream_channel_id,
11214 {"Upstream Channel ID", "docsis_mdd.upstream_active_channel_list_upstream_channel_id",
11215 FT_UINT8, BASE_DEC, NULL, 0x0,
11216 "MDD Upstream Active Channel List - Upstream Channel ID", HFILL}
11218 {&hf_docsis_mdd_upstream_active_channel_list_upstream_channel_priority,
11219 {"Upstream Channel Priority", "docsis_mdd.upstream_active_channel_list_upstream_channel_priority",
11220 FT_UINT8, BASE_DEC, NULL, 0x0,
11221 "MDD Upstream Active Channel List - Upstream Channel Priority", HFILL}
11223 {&hf_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds,
11224 {"Downstream Channel(s) on which MAPs and UCDs for this Upstream Channel are sent", "docsis_mdd.upstream_active_channel_list_dschids_maps_ucds",
11225 FT_BYTES, BASE_NONE, NULL, 0x0,
11226 "MDD Upstream Active Channel List - Downstream Channel(s) on which MAPs and UCDs for this Upstream Channel are sent", HFILL}
11228 {&hf_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds_dschid,
11229 {"Downstream Channel ID", "docsis_mdd.upstream_active_channel_list_dschids_maps_ucds.dschid",
11230 FT_UINT8, BASE_DEC, NULL, 0x0,
11231 "MDD Upstream Active Channel List - ID of Downstream Channel on which MAPs and UCDs for this Upstream Channel are sent", HFILL}
11233 {&hf_docsis_mdd_upstream_active_channel_list_fdx_upstream_channel,
11234 {"FDX Upstream Channel", "docsis_mdd.upstream_active_channel_list_fdx_upstream_channel",
11235 FT_UINT8, BASE_DEC, VALS(extended_us_channel_vals), 0x0,
11236 "MDD Upstream Active Channel List - FDX Upstream Channel", HFILL}
11238 {&hf_docsis_mdd_upstream_active_channel_list_fdx_subband_id,
11239 {"FDX Sub-band ID", "docsis_mdd.upstream_active_channel_list_fdx_subband_id",
11240 FT_UINT8, BASE_DEC, NULL, 0x0,
11241 "MDD Upstream Active Channel List - FDX Sub-band ID", HFILL}
11243 {&hf_docsis_mdd_upstream_ambiguity_resolution_channel_list_channel_id,
11244 {"Channel ID", "docsis_mdd.upstream_ambiguity_resolution_channel_list_channel_id",
11245 FT_UINT8, BASE_DEC, NULL, 0x0,
11246 "MDD MAC Domain Upstream Ambiguity Resolution Channel List Channel ID", HFILL}
11248 {&hf_docsis_mdd_upstream_frequency_range,
11249 {"Upstream Frequency Range", "docsis_mdd.upstream_frequency_range",
11250 FT_UINT8, BASE_DEC, VALS(upstream_frequency_range_vals), 0x0,
11251 "MDD Upstream Frequency Range", HFILL}
11253 {&hf_docsis_mdd_symbol_clock_locking_indicator,
11254 {"Symbol Clock Locking Indicator", "docsis_mdd.symbol_clock_locking_indicator",
11255 FT_UINT8, BASE_DEC, VALS(symbol_clock_locking_indicator_vals), 0x0,
11256 "MDD Symbol Clock Locking Indicator", HFILL}
11258 {&hf_docsis_mdd_cm_status_event_control_subtype,
11259 {"Type", "docsis_mdd.cm_status_event_control_type",
11260 FT_UINT8, BASE_DEC, VALS(mdd_cm_status_event_control_vals), 0x0,
11261 NULL, HFILL}
11263 {&hf_docsis_mdd_cm_status_event_control_length,
11264 {"Length", "docsis_mdd.cm_status_event_control_length",
11265 FT_UINT8, BASE_DEC, NULL, 0x0,
11266 NULL, HFILL}
11268 {&hf_docsis_mdd_event_type,
11269 {"Event Type", "docsis_mdd.event_type",
11270 FT_UINT8, BASE_DEC, VALS(symbol_cm_status_event_vals), 0x0,
11271 "MDD CM-STATUS Event Type", HFILL}
11273 {&hf_docsis_mdd_maximum_event_holdoff_timer,
11274 {"Maximum Event Holdoff Timer (units of 20 ms)", "docsis_mdd.maximum_event_holdoff_timer",
11275 FT_UINT16, BASE_DEC, NULL, 0x0,
11276 "MDD Maximum Event Holdoff Timer", HFILL}
11278 {&hf_docsis_mdd_maximum_number_of_reports_per_event,
11279 {"Maximum Number of Reports per Event", "docsis_mdd.maximum_number_of_reports_per_event",
11280 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(unique_unlimited), 0x0,
11281 "MDD Maximum Number of Reports per Event", HFILL}
11283 {&hf_docsis_mdd_upstream_transmit_power_reporting,
11284 {"Upstream Transmit Power Reporting", "docsis_mdd.upstream_transmit_power_reporting",
11285 FT_UINT8, BASE_DEC, VALS(upstream_transmit_power_reporting_vals), 0x0,
11286 "MDD Upstream Transmit Power Reporting", HFILL}
11288 {&hf_docsis_mdd_dsg_da_to_dsid_subtype,
11289 {"Type", "docsis_mdd.dsg_da_to_dsid_type",
11290 FT_UINT8, BASE_DEC, VALS(mdd_cm_dsg_da_to_dsid_vals), 0x0,
11291 NULL, HFILL}
11293 {&hf_docsis_mdd_dsg_da_to_dsid_length,
11294 {"Length", "docsis_mdd.dsg_da_to_dsid_length",
11295 FT_UINT8, BASE_DEC, NULL, 0x0,
11296 NULL, HFILL}
11298 {&hf_docsis_mdd_dsg_da_to_dsid_association_da,
11299 {"Destination Address", "docsis_mdd.dsg_da_to_dsid_association_da",
11300 FT_ETHER, BASE_NONE, NULL, 0x0,
11301 "MDD DSG DA to DSID association Destination Address", HFILL}
11303 {&hf_docsis_mdd_dsg_da_to_dsid_association_dsid,
11304 {"DSID", "docsis_mdd.dsg_da_to_dsid_association_dsid",
11305 FT_UINT24, BASE_DEC, NULL, 0x0FFFFF,
11306 "MDD MDD DSG DA to DSID association DSID", HFILL}
11308 {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events,
11309 {"CM-STATUS Event Enable Bitmask for Non-Channel-Specific Events", "docsis_mdd.cm_status_event_enable_non_channel_specific_events",
11310 FT_UINT16, BASE_HEX, NULL, 0x0,
11311 NULL, HFILL}
11313 {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_sequence_out_of_range,
11314 {"Sequence out of range", "docsis_mdd.cm_status_event_enable_non_channel_specific_events_sequence_out_of_range",
11315 FT_UINT16, BASE_DEC, NULL, 0x0008,
11316 "CM-STATUS event non-channel-event Sequence out of range", HFILL}
11318 {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup,
11319 {"CM operating on battery backup", "docsis_mdd.cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup",
11320 FT_UINT16, BASE_DEC, NULL, 0x0200,
11321 "CM-STATUS event non-channel-event Cm operating on battery backup", HFILL}
11323 {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power,
11324 {"Returned to AC power", "docsis_mdd.cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power",
11325 FT_UINT16, BASE_DEC, NULL, 0x0400,
11326 "CM-STATUS event non-channel-event Cm returned to AC power", HFILL}
11328 {&hf_docsis_mdd_extended_upstream_transmit_power_support,
11329 { "Extended Upstream Transmit Power Support", "docsis_mdd.extended_upstream_transmit_power_support",
11330 FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x0,
11331 "MDD Extended Upstream Transmit Power Support", HFILL}
11333 {&hf_docsis_mdd_cmts_major_docsis_version,
11334 { "CMTS Major DOCSIS Version (legacy)", "docsis_mdd.cmts_major_docsis_version",
11335 FT_UINT8, BASE_DEC, NULL, 0x0,
11336 NULL, HFILL}
11338 {&hf_docsis_mdd_cmts_minor_docsis_version,
11339 { "CMTS Minor DOCSIS Version (legacy)", "docsis_mdd.cmts_minor_docsis_version",
11340 FT_UINT8, BASE_DEC, NULL, 0x0,
11341 NULL, HFILL}
11343 {&hf_docsis_mdd_docsis_version_tlv,
11344 {"TLV", "docsis_mdd.docsis_version.tlv",
11345 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
11346 NULL, HFILL}
11348 {&hf_docsis_mdd_docsis_version_tlv_type,
11349 {"Type", "docsis_mdd.docsis_version.tlv.type",
11350 FT_UINT8, BASE_DEC, VALS(mdd_docsis_version_vals), 0x0,
11351 NULL, HFILL}
11353 {&hf_docsis_mdd_docsis_version_tlv_length,
11354 {"Length", "docsis_mdd.docsis_version.tlv.length",
11355 FT_UINT8, BASE_DEC, NULL, 0x0,
11356 NULL, HFILL}
11358 {&hf_docsis_mdd_docsis_version_major_pre_40,
11359 { "CMTS Pre-DOCSIS 4.0 Major DOCSIS Version", "docsis_mdd.docsis_version.major_pre_40",
11360 FT_UINT8, BASE_DEC, NULL, 0x0,
11361 NULL, HFILL}
11363 {&hf_docsis_mdd_docsis_version_minor_pre_40,
11364 { "CMTS Pre-DOCSIS 4.0 Minor DOCSIS Version", "docsis_mdd.docsis_version.minor_pre_40",
11365 FT_UINT8, BASE_DEC, NULL, 0x0,
11366 NULL, HFILL}
11368 {&hf_docsis_mdd_docsis_version_major,
11369 { "CMTS Major DOCSIS Version", "docsis_mdd.docsis_version.major",
11370 FT_UINT8, BASE_DEC, NULL, 0x0,
11371 NULL, HFILL}
11373 {&hf_docsis_mdd_docsis_version_minor,
11374 { "CMTS Minor DOCSIS Version", "docsis_mdd.docsis_version.minor",
11375 FT_UINT8, BASE_DEC, NULL, 0x0,
11376 NULL, HFILL}
11378 {&hf_docsis_mdd_docsis_version_ext_spectrum_mode,
11379 {"CMTS Extended Spectrum Mode of Operation", "docsis_mdd.docsis_version.ext_spectrum_mode",
11380 FT_UINT8, BASE_HEX, NULL, 0x0,
11381 NULL, HFILL}
11383 {&hf_docsis_mdd_docsis_version_ext_spectrum_mode_fdd,
11384 {"FDD", "docsis_mdd.docsis_version.fdd",
11385 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDD,
11386 NULL, HFILL}
11388 {&hf_docsis_mdd_docsis_version_ext_spectrum_mode_fdx,
11389 {"FDX", "docsis_mdd.docsis_version.fdx",
11390 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDX,
11391 NULL, HFILL}
11393 {&hf_docsis_mdd_cm_periodic_maintenance_timeout_indicator,
11394 { "CM periodic maintenance timeout indicator", "docsis_mdd.cm_periodic_maintenance_timeout_indicator",
11395 FT_UINT8, BASE_DEC, VALS(cm_periodic_maintenance_timeout_indicator_vals), 0x0,
11396 NULL, HFILL}
11398 {&hf_docsis_mdd_dls_broadcast_and_multicast_delivery_method,
11399 { "DLS Broadcast and Multicast Delivery Method", "docsis_mdd.dls_broadcast_and_multicast_delivery_method",
11400 FT_UINT8, BASE_DEC, VALS(dls_broadcast_and_multicast_delivery_method_vals), 0x0,
11401 NULL, HFILL}
11403 {&hf_docsis_mdd_cm_status_event_d31_ofdm_prof_fail,
11404 { "Downstream OFDM Profile Failure", "docsis_mdd.cm_status_event_d31_ofdm_prof_fail",
11405 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000001,
11406 NULL, HFILL}
11408 {&hf_docsis_mdd_cm_status_event_d31_prim_down_chan_change,
11409 { "Primary Downstream Channel Change", "docsis_mdd.cm_status_event_d31_prim_down_chan_change",
11410 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000002,
11411 NULL, HFILL}
11413 {&hf_docsis_mdd_cm_status_event_d31_dpd_mismatch,
11414 { "DPD Mismatch", "docsis_mdd.cm_status_event_d31_dpd_mismatch",
11415 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000004,
11416 NULL, HFILL}
11418 {&hf_docsis_mdd_cm_status_event_d31_deprecated,
11419 { "Deprecated", "docsis_mdd.cm_status_event_d31_deprecated",
11420 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000008,
11421 NULL, HFILL}
11423 {&hf_docsis_mdd_cm_status_event_d31_ncp_prof_fail,
11424 { "NCP Profile Failure", "docsis_mdd.cm_status_event_d31_ncp_prof_fail",
11425 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000010,
11426 NULL, HFILL}
11428 {&hf_docsis_mdd_cm_status_event_d31_loss_fec_plc,
11429 { "Loss of FEC lock on PLC", "docsis_mdd.cm_status_event_d31_loss_fec_plc",
11430 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000020,
11431 NULL, HFILL}
11433 {&hf_docsis_mdd_cm_status_event_d31_ncp_prof_recover,
11434 { "NCP Profile Recovery", "docsis_mdd.cm_status_event_d31_ncp_prof_recover",
11435 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000040,
11436 NULL, HFILL}
11438 {&hf_docsis_mdd_cm_status_event_d31_fec_recover_on_plc,
11439 { "FEC Recovery on PLC", "docsis_mdd.cm_status_event_d31_fec_recover_on_plc",
11440 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000080,
11441 NULL, HFILL}
11443 {&hf_docsis_mdd_cm_status_event_d31_fec_recover_on_ofdm_prof,
11444 { "FEC Recovery on OFDM Profile", "docsis_mdd.cm_status_event_d31_fec_recover_on_ofdm_prof",
11445 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000100,
11446 NULL, HFILL}
11448 {&hf_docsis_mdd_cm_status_event_d31_ofdma_prof_fail,
11449 { "OFDMA Profile Failure", "docsis_mdd.cm_status_event_d31_ofdma_prof_fail",
11450 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000200,
11451 NULL, HFILL}
11453 {&hf_docsis_mdd_cm_status_event_d31_map_stor_overflow_ind,
11454 { "MAP Storage Overflow Indicator", "docsis_mdd.cm_status_event_d31_map_stor_overflow_ind",
11455 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000400,
11456 NULL, HFILL}
11458 {&hf_docsis_mdd_cm_status_event_d31_ofdm_map_stor_almost_full_ind,
11459 { "MAP Storage Almost Full Indicator", "docsis_mdd.cm_status_event_d31_ofdm_map_stor_almost_full_ind",
11460 FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000800,
11461 NULL, HFILL}
11463 {&hf_docsis_mdd_cm_status_event_d31_reserved,
11464 { "Reserved for future use", "docsis_mdd.cm_status_event_d31_reserved",
11465 FT_UINT32, BASE_HEX, NULL, 0xFFFFF000,
11466 NULL, HFILL}
11468 {&hf_docsis_mdd_diplexer_band_edge,
11469 { "Diplexer Band Edge", "docsis_mdd.diplexer_band_edge",
11470 FT_UINT8, BASE_DEC, VALS(mdd_diplexer_band_edge_vals), 0x0,
11471 NULL, HFILL}
11473 {&hf_docsis_mdd_diplexer_band_edge_length,
11474 {"Length", "docsis_mdd.diplexer_band_edge_length",
11475 FT_UINT8, BASE_DEC, NULL, 0x0,
11476 NULL, HFILL}
11478 {&hf_docsis_mdd_diplexer_us_upper_band_edge,
11479 {"Diplexer Upstream Upper Band Edge", "docsis_mdd.diplexer_us_upper_band_edge",
11480 FT_UINT8, BASE_DEC, VALS(mdd_diplexer_us_upper_band_edge_vals), 0x0,
11481 NULL, HFILL}
11483 {&hf_docsis_mdd_diplexer_ds_lower_band_edge,
11484 {"Diplexer Downstream Lower Band Edge", "docsis_mdd.diplexer_ds_lower_band_edge",
11485 FT_UINT8, BASE_DEC, VALS(mdd_diplexer_ds_lower_band_edge_vals), 0x0,
11486 NULL, HFILL}
11488 {&hf_docsis_mdd_diplexer_ds_upper_band_edge,
11489 {"Diplexer Downstream Upper Band Edge", "docsis_mdd.diplexer_ds_upper_band_edge",
11490 FT_UINT8, BASE_DEC, VALS(mdd_diplexer_ds_upper_band_edge_vals), 0x0,
11491 NULL, HFILL}
11493 {&hf_docsis_mdd_diplexer_us_upper_band_edge_override,
11494 {"Diplexer Upstream Upper Band Edge Override", "docsis_mdd.diplexer_us_upper_band_edge_override",
11495 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
11496 NULL, HFILL}
11498 {&hf_docsis_mdd_diplexer_ds_lower_band_edge_override,
11499 {"Diplexer Downstream Lower Band Edge Override", "docsis_mdd.diplexer_ds_lower_band_edge_override",
11500 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
11501 NULL, HFILL}
11503 {&hf_docsis_mdd_diplexer_ds_upper_band_edge_override,
11504 {"Diplexer Downstream Upper Band Edge Override", "docsis_mdd.diplexer_ds_upper_band_edge_override",
11505 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
11506 NULL, HFILL}
11508 /* MDD Advanced Band Plan Descriptor */
11509 {&hf_docsis_mdd_abp_tlv,
11510 {"TLV", "docsis_mdd.advanced_band_plan.tlv",
11511 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
11512 NULL, HFILL}
11514 {&hf_docsis_mdd_abp_tlv_type,
11515 {"Type", "docsis_mdd.advanced_band_plan.tlv.type",
11516 FT_UINT8, BASE_DEC, VALS(mdd_abp_vals), 0x0,
11517 NULL, HFILL}
11519 {&hf_docsis_mdd_abp_tlv_length,
11520 {"Length", "docsis_mdd.advanced_band_plan.tlv.length",
11521 FT_UINT8, BASE_DEC, NULL, 0x0,
11522 NULL, HFILL}
11524 {&hf_docsis_mdd_abp_sub_band_count,
11525 {"Total number of sub-bands", "docsis_mdd.advanced_band_plan.subband_count",
11526 FT_UINT8, BASE_DEC, VALS(mdd_abp_sub_band_vals), 0x0, NULL, HFILL}
11528 {&hf_docsis_mdd_abp_sub_band_width,
11529 {"Full Duplex Sub-band Width", "docsis_mdd.advanced_band_plan.subband_width",
11530 FT_UINT8, BASE_DEC, VALS(mdd_abp_sub_band_width_vals), 0x0, NULL, HFILL}
11532 /* MDD BPI+*/
11533 {&hf_docsis_mdd_bpi_plus_tlv,
11534 {"TLV", "docsis_mdd.bpi_plus.tlv",
11535 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
11536 NULL, HFILL}
11538 {&hf_docsis_mdd_bpi_plus_tlv_type,
11539 {"Type", "docsis_mdd.bpi_plus.tlv.type",
11540 FT_UINT8, BASE_DEC, VALS(mdd_bpi_plus_vals), 0x0,
11541 NULL, HFILL}
11543 {&hf_docsis_mdd_bpi_plus_tlv_length,
11544 {"Length", "docsis_mdd.bpi_plus.tlv.length",
11545 FT_UINT8, BASE_DEC, NULL, 0x0,
11546 NULL, HFILL}
11548 {&hf_docsis_mdd_bpi_plus_version,
11549 {"Version", "docsis_mdd.bpi_plus.version",
11550 FT_UINT8, BASE_DEC, NULL, 0x0,
11551 "BPI+ Version Number", HFILL}
11553 {&hf_docsis_mdd_bpi_plus_cfg,
11554 {"Configuration", "docsis_mdd.bpi_plus.cfg",
11555 FT_UINT8, BASE_HEX, NULL, 0x0,
11556 "BPI+ Configuration Bitmask", HFILL}
11558 {&hf_docsis_mdd_bpi_plus_cfg_eae,
11559 {"Early Authentication and Encryption", "docsis_mdd.bpi_plus.eae",
11560 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
11561 NULL, HFILL}
11563 /* B_INIT_RNG_REQ */
11564 {&hf_docsis_bintrngreq_capflags,
11565 {"Capability Flags", "docsis_bintrngreq.capflags",
11566 FT_UINT8, BASE_HEX, NULL, 0x0,
11567 NULL, HFILL}
11569 {&hf_docsis_bintrngreq_capflags_frag,
11570 {"Pre-3.0 Fragmentation", "docsis_bintrngreq.capflags.frag",
11571 FT_BOOLEAN, 8, NULL, (1<<7),
11572 "Pre-3.0 DOCSIS fragmentation is supported prior to registration", HFILL }
11574 {&hf_docsis_bintrngreq_capflags_encrypt,
11575 {"Early Auth. & Encrypt", "docsis_bintrngreq.capflags.encrypt",
11576 FT_BOOLEAN, 8, NULL, (1<<6),
11577 "Early Authentication and Encryption supported", HFILL }
11579 {&hf_docsis_bintrngreq_mddsgid,
11580 {"MD-DS-SG-ID", "docsis_bintrngreq.mddsgid",
11581 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
11582 "MAC Domain Downstream Service Group Identifier", HFILL}
11584 /* DBC_REQ */
11585 {&hf_docsis_dbcreq_number_of_fragments,
11586 {"Number of Fragments", "docsis_dbcreq.number_of_fragments",
11587 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
11588 NULL, HFILL}
11590 {&hf_docsis_dbcreq_fragment_sequence_number,
11591 {"Fragment Seq No", "docsis_dbcreq.fragment_sequence_number",
11592 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
11593 NULL, HFILL}
11595 /* DBC_RSP */
11596 {&hf_docsis_dbcrsp_conf_code,
11597 {"Confirmation Code", "docsis_dbcrsp.conf_code",
11598 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
11599 NULL, HFILL}
11601 /* DPV_REQ/RSP */
11602 {&hf_docsis_dpv_flags,
11603 {"Flags", "docsis_dpv.flags",
11604 FT_UINT8, BASE_DEC, NULL, 0x0,
11605 NULL, HFILL}
11607 {&hf_docsis_dpv_us_sf,
11608 {"Upstream Service Flow ID", "docsis_dpv.us_sf",
11609 FT_UINT32, BASE_DEC, NULL, 0x0,
11610 NULL, HFILL}
11612 {&hf_docsis_dpv_n,
11613 {"N (Measurement avaraging factor)", "docsis_dpv.n",
11614 FT_UINT16, BASE_DEC, NULL, 0x0,
11615 NULL, HFILL}
11617 {&hf_docsis_dpv_start,
11618 {"Start Reference Point", "docsis_dpv.start",
11619 FT_UINT8, BASE_DEC, NULL, 0x0,
11620 NULL, HFILL}
11622 {&hf_docsis_dpv_end,
11623 {"End Reference Point", "docsis_dpv.end",
11624 FT_UINT8, BASE_DEC, NULL, 0x0,
11625 NULL, HFILL}
11627 {&hf_docsis_dpv_ts_start,
11628 {"Timestamp Start", "docsis_dpv.ts_start",
11629 FT_UINT32, BASE_DEC, NULL, 0x0,
11630 NULL, HFILL}
11632 {&hf_docsis_dpv_ts_end,
11633 {"Timestamp End", "docsis_dpv.ts_end",
11634 FT_UINT32, BASE_DEC, NULL, 0x0,
11635 NULL, HFILL}
11637 /* CM Status */
11638 {&hf_docsis_cmstatus_e_t_mdd_t,
11639 {"Event Type: Secondary Channel MDD timeout", "docsis_cmstatus.mdd_timeout", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11641 {&hf_docsis_cmstatus_e_t_qfl_f,
11642 {"Event Type: QAM/FEC lock failure", "docsis_cmstatus.qam_fec_lock_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11644 {&hf_docsis_cmstatus_e_t_s_o,
11645 {"Event Type: Sequence out-of-range", "docsis_cmstatus.sequence_out_of_range", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11647 {&hf_docsis_cmstatus_e_t_mdd_r,
11648 {"Event Type: Secondary Channel MDD Recovery", "docsis_cmstatus.mdd_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11650 {&hf_docsis_cmstatus_e_t_qfl_r,
11651 {"Event Type: QAM/FEC Lock Recovery", "docsis_cmstatus.qam_fec_lock_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11653 {&hf_docsis_cmstatus_e_t_t4_t,
11654 {"Event Type: T4 timeout", "docsis_cmstatus.t4_timeout", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11656 {&hf_docsis_cmstatus_e_t_t3_e,
11657 {"Event Type: T3 retries exceeded", "docsis_cmstatus.t3_retries_exceeded", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11659 {&hf_docsis_cmstatus_e_t_rng_s,
11660 {"Event Type: Successful ranging after T3 retries exceeded", "docsis_cmstatus.successful_ranging_after_t3_retries_exceeded", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11662 {&hf_docsis_cmstatus_e_t_cm_b,
11663 {"Event Type: CM operating on battery backup", "docsis_cmstatus.cm_on_battery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11665 {&hf_docsis_cmstatus_e_t_cm_a,
11666 {"Event Type: CM returned to A/C power", "docsis_cmstatus.cm_on_ac_power", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11668 {&hf_docsis_cmstatus_e_t_mac_removal,
11669 {"Event Type: MAC Removal event", "docsis_cmstatus.mac_removal", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11671 {&hf_docsis_cmstatus_e_t_ds_ofdm_profile_failure,
11672 {"Event Type: DS OFDM profile failure", "docsis_cmstatus.ds_ofdm_profile_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11674 {&hf_docsis_cmstatus_e_t_prim_ds_change,
11675 {"Event Type: Primary Downstream Change", "docsis_cmstatus.primary_downstream_change", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11677 {&hf_docsis_cmstatus_e_t_dpd_mismatch,
11678 {"Event Type: DPD Mismatch", "docsis_cmstatus.dpd_mismatch", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11680 {&hf_docsis_cmstatus_e_t_ncp_profile_failure,
11681 {"Event Type: NCP Profile failure", "docsis_cmstatus.ncp_profile_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11683 {&hf_docsis_cmstatus_e_t_plc_failure,
11684 {"Event Type: PLC failure", "docsis_cmstatus.plc_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11686 {&hf_docsis_cmstatus_e_t_ncp_profile_recovery,
11687 {"Event Type: NCP profile recovery", "docsis_cmstatus.ncp_profile_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11689 {&hf_docsis_cmstatus_e_t_plc_recovery,
11690 {"Event Type: PLC recovery", "docsis_cmstatus.plc_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11692 {&hf_docsis_cmstatus_e_t_ofdm_profile_recovery,
11693 {"Event Type: OFDM profile recovery", "docsis_cmstatus.ofdm_profile_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11695 {&hf_docsis_cmstatus_e_t_ofdma_profile_failure,
11696 {"Event Type: OFDMA profile failure", "docsis_cmstatus.ofdma_profile_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11698 {&hf_docsis_cmstatus_e_t_map_storage_overflow_indicator,
11699 {"Event Type: MAP Storage overflow indicator", "docsis_cmstatus.map_storage_overflow_indicator", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11701 {&hf_docsis_cmstatus_e_t_map_storage_almost_full_indicator,
11702 {"Event Type: MAP Storage almost full indicator", "docsis_cmstatus.map_storage_almost_full_indicator", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11704 {&hf_docsis_cmstatus_e_t_unknown,
11705 {"Unknown Event Type", "docsis_cmstatus.unknown_event_type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11707 {&hf_docsis_cmstatus_status_event_descr,
11708 {"Description", "docsis_cmstatus.status_event.description", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
11710 {&hf_docsis_cmstatus_status_event_ds_ch_id,
11711 {"Downstream Channel ID", "docsis_cmstatus.status_event.ds_chid", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11713 {&hf_docsis_cmstatus_status_event_us_ch_id,
11714 {"Upstream Channel ID", "docsis_cmstatus.status_event.us_chid", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11716 {&hf_docsis_cmstatus_status_event_dsid,
11717 {"DSID", "docsis_cmstatus.status_event.dsid", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL}
11719 {&hf_docsis_cmstatus_status_event_mac_address,
11720 {"MAC Address", "docsis_cmstatus.status_event.mac_address", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL}
11722 {&hf_docsis_cmstatus_status_event_ds_ofdm_profile_id,
11723 {"Downstream OFDM Profile ID", "docsis_cmstatus.status_event.ds_ofdm_profile_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11725 {&hf_docsis_cmstatus_status_event_us_ofdma_profile_id,
11726 {"US OFDMA Profile ID", "docsis_cmstatus.status_event.us_ofdma_profile_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11728 {&hf_docsis_cmstatus_tlv_data,
11729 {"TLV Data", "docsis_cmstatus.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
11731 {&hf_docsis_cmstatus_type,
11732 {"Type", "docsis_cmstatus.type", FT_UINT8, BASE_DEC, VALS(cmstatus_tlv_vals), 0x0, NULL, HFILL}
11734 {&hf_docsis_cmstatus_length,
11735 {"Length", "docsis_cmstatus.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11737 {&hf_docsis_cmstatus_status_event_tlv_data,
11738 {"Status Event TLV Data", "docsis_cmstatus.status_event.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
11740 {&hf_docsis_cmstatus_status_event_type,
11741 {"Status Event Type", "docsis_cmstatus.status_event.type", FT_UINT8, BASE_DEC, VALS(cmstatus_status_event_tlv_vals), 0x0, NULL, HFILL}
11743 {&hf_docsis_cmstatus_status_event_length,
11744 {"Status Event Length", "docsis_cmstatus.status_event.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11747 /* CM_CTRL_REQ */
11748 {&hf_docsis_cmctrl_tlv_mute,
11749 {"Upstream Channel RF Mute", "docsis_cmctrl.mute",
11750 FT_UINT8, BASE_DEC, NULL, 0x0,
11751 NULL, HFILL}
11753 {&hf_docsis_cmctrl_tlv_mute_timeout,
11754 {"RF Mute Timeout Interval", "docsis_cmctrl.mute_timeout",
11755 FT_UINT32, BASE_DEC, NULL, 0x0,
11756 NULL, HFILL}
11758 {&hf_docsis_cmctrl_tlv_reinit,
11759 {"CM Reinitialize", "docsis_cmctrl.reinit",
11760 FT_UINT8, BASE_DEC, NULL, 0x0,
11761 NULL, HFILL}
11763 {&hf_docsis_cmctrl_tlv_disable_fwd,
11764 {"Disable Forwarding", "docsis_cmctrl.disable_fwd",
11765 FT_UINT8, BASE_DEC, NULL, 0x0,
11766 NULL, HFILL}
11768 {&hf_docsis_cmctrl_tlv_ds_event,
11769 {"Override Downstream Events", "docsis_cmctrl.ds_event",
11770 FT_BYTES, BASE_NONE, NULL, 0x0,
11771 NULL, HFILL}
11773 {&hf_docsis_cmctrl_tlv_us_event,
11774 {"Override Upstream Events", "docsis_cmctrl.us_event",
11775 FT_BYTES, BASE_NONE, NULL, 0x0,
11776 NULL, HFILL}
11778 {&hf_docsis_cmctrl_tlv_event,
11779 {"Override Non-Channel-Specific Events", "docsis_cmctrl.event",
11780 FT_BYTES, BASE_NONE, NULL, 0x0,
11781 NULL, HFILL}
11783 {&hf_docsis_cmctrlreq_tlv_data,
11784 {"TLV Data", "docsis_cmctrl.tlv_data",
11785 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
11786 NULL, HFILL}
11788 {&hf_docsis_cmctrlreq_type,
11789 {"Type", "docsis_cmctrl.tlv_type",
11790 FT_UINT8, BASE_DEC, VALS(cmctrlreq_tlv_vals), 0x0,
11791 NULL, HFILL}
11793 {&hf_docsis_cmctrlreq_length,
11794 {"Length", "docsis_cmctrl.tlv_length",
11795 FT_UINT8, BASE_DEC, NULL, 0x0,
11796 NULL, HFILL}
11798 {&hf_docsis_cmctrlreq_us_type,
11799 {"Type", "docsis_cmctrl.us_event_type",
11800 FT_UINT8, BASE_DEC, VALS(cmctrlreq_us_tlv_vals), 0x0,
11801 NULL, HFILL}
11803 {&hf_docsis_cmctrlreq_us_length,
11804 {"Length", "docsis_cmctrl.us_event_length",
11805 FT_UINT8, BASE_DEC, NULL, 0x0,
11806 NULL, HFILL}
11808 {&hf_docsis_cmctrl_us_event_ch_id,
11809 {"Upstream Channel ID", "docsis_cmctrl.us_event.chid",
11810 FT_UINT8, BASE_DEC, NULL, 0x0,
11811 NULL, HFILL}
11813 {&hf_docsis_cmctrl_us_event_mask,
11814 {"Upstream Status Event Enable Bitmask", "docsis_cmctrl.us_event.mask",
11815 FT_BYTES, BASE_NONE, NULL, 0x0,
11816 NULL, HFILL}
11818 {&hf_docsis_cmctrl_ds_type,
11819 {"Type", "docsis_cmctrl.ds_event_type",
11820 FT_UINT8, BASE_DEC, VALS(cmctrlreq_ds_tlv_vals), 0x0,
11821 NULL, HFILL}
11823 {&hf_docsis_cmctrl_ds_length,
11824 {"Length", "docsis_cmctrl.ds_event_length",
11825 FT_UINT8, BASE_DEC, NULL, 0x0,
11826 NULL, HFILL}
11828 {&hf_docsis_cmctrl_ds_event_ch_id,
11829 {"Downstream Channel ID", "docsis_cmctrl.ds_event.chid",
11830 FT_UINT8, BASE_DEC, NULL, 0x0,
11831 NULL, HFILL}
11833 {&hf_docsis_cmctrl_ds_event_mask,
11834 {"Downstream Status Event Enable Bitmask", "docsis_cmctrl.ds_event.mask",
11835 FT_BYTES, BASE_NONE, NULL, 0x0,
11836 NULL, HFILL}
11838 /* REG_REQ_MP */
11839 {&hf_docsis_regreqmp_sid,
11840 {"Sid", "docsis_regreqmp.sid",
11841 FT_UINT16, BASE_DEC, NULL, 0x0,
11842 "Reg-Req-Mp Sid", HFILL}
11844 {&hf_docsis_regreqmp_number_of_fragments,
11845 {"Number of Fragments", "docsis_regreqmp.number_of_fragments",
11846 FT_UINT8, BASE_DEC, NULL, 0x0,
11847 "Reg-Req-Mp Number of Fragments", HFILL}
11849 {&hf_docsis_regreqmp_fragment_sequence_number,
11850 {"Fragment Sequence Number", "docsis_regreqmp.fragment_sequence_number",
11851 FT_UINT8, BASE_DEC, NULL, 0x0,
11852 "Reg-Req-Mp Fragment Sequence Number", HFILL}
11854 /* REG_RSP_MP */
11855 {&hf_docsis_regrspmp_sid,
11856 {"Sid", "docsis_regrspmp.sid",
11857 FT_UINT16, BASE_DEC, NULL, 0x0,
11858 "Reg-Rsp-Mp Sid", HFILL}
11860 {&hf_docsis_regrspmp_response,
11861 {"Response", "docsis_regrspmp.response",
11862 FT_UINT8, BASE_DEC, NULL, 0x0,
11863 "Reg-Rsp-Mp Response", HFILL}
11865 {&hf_docsis_regrspmp_number_of_fragments,
11866 {"Number of Fragments", "docsis_regrspmp.number_of_fragments",
11867 FT_UINT8, BASE_DEC, NULL, 0x0,
11868 "Reg-Rsp-Mp Number of Fragments", HFILL}
11870 {&hf_docsis_regrspmp_fragment_sequence_number,
11871 {"Fragment Sequence Number", "docsis_regrspmp.fragment_sequence_number",
11872 FT_UINT8, BASE_DEC, NULL, 0x0,
11873 "Reg-Rsp-Mp Fragment Sequence Number", HFILL}
11875 /* EM */
11876 {&hf_docsis_emrsp_tlv_data,
11877 {"Energy Management TLV data", "docsis_emrsp.tlv_data",
11878 FT_BYTES, BASE_NONE, NULL, 0x0,
11879 NULL, HFILL}
11881 {&hf_docsis_emrsp_tlv_type,
11882 {"Energy Management TLV Type", "docsis_emrsp.tlv.type",
11883 FT_UINT8, BASE_DEC, VALS(emrsp_tlv_vals), 0x0,
11884 NULL, HFILL}
11886 {&hf_docsis_emrsp_tlv_length,
11887 {"Energy Management TLV Length", "docsis_emrsp.tlv.length",
11888 FT_UINT8, BASE_DEC, NULL, 0x0,
11889 NULL, HFILL}
11891 {&hf_docsis_emrsp_tlv_holdoff_timer,
11892 {"Hold-Off Timer", "docsis_emrsp.tlv.holdoff_timer",
11893 FT_UINT16, BASE_DEC, NULL, 0x0,
11894 NULL, HFILL}
11896 {&hf_docsis_emreq_req_power_mode,
11897 {"Requested Power Mode", "docsis_emreq.req_power_mode",
11898 FT_UINT8, BASE_DEC, VALS(emreq_req_power_mode_vals), 0x0,
11899 NULL, HFILL}
11901 {&hf_docsis_emreq_reserved,
11902 {"Reserved", "docsis_emreq.reserved",
11903 FT_UINT8, BASE_HEX, NULL, 0x0,
11904 NULL, HFILL}
11906 {&hf_docsis_emrsp_rsp_code,
11907 {"Response Code", "docsis_emrsp.resp_code",
11908 FT_UINT8, BASE_DEC, VALS(emrsp_rsp_code_vals), 0x0,
11909 NULL, HFILL}
11911 {&hf_docsis_emrsp_reserved,
11912 {"Reserved", "docsis_emrsp.reserved",
11913 FT_UINT8, BASE_HEX, NULL, 0x0,
11914 NULL, HFILL}
11916 {&hf_docsis_emrsp_tlv_unknown,
11917 {"Unknown TLV", "docsis_emrsp.unknown_tlv",
11918 FT_BYTES, BASE_NONE, NULL, 0x0,
11919 NULL, HFILL}
11921 /* OCD */
11922 {&hf_docsis_ocd_tlv_unknown,
11923 {"Unknown TLV", "docsis_ocd.unknown_tlv", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
11925 {&hf_docsis_ocd_ccc,
11926 {"Configuration Change Count", "docsis_ocd.ccc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11928 {&hf_docsis_ocd_tlv_four_trans_size,
11929 {"Discrete Fourier Transform Size", "docsis_ocd.tlv.four_trans_size", FT_UINT8, BASE_DEC, VALS (docsis_ocd_four_trans_size), 0x0, NULL, HFILL}
11931 {&hf_docsis_ocd_tlv_cycl_pref,
11932 {"Cyclic Prefix", "docsis_ocd.tlv.cyc_pref", FT_UINT8, BASE_DEC, VALS (docsis_ocd_cyc_prefix), 0x0, NULL, HFILL}
11934 {&hf_docsis_ocd_tlv_roll_off,
11935 {"Roll Off", "docsis_ocd.tlv.roll_off", FT_UINT8, BASE_DEC, VALS (docsis_ocd_roll_off), 0x0, NULL, HFILL}
11937 {&hf_docsis_ocd_tlv_ofdm_spec_loc,
11938 {"OFDM Spectrum Location", "docsis_ocd.tlv.ofdm_spec_loc", FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_hz), 0x0, NULL, HFILL}
11940 {&hf_docsis_ocd_tlv_time_int_depth,
11941 {"Time Interleaving Depth", "docsis_ocd.tlv.time_int_depth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11943 {&hf_docsis_ocd_tlv_prim_cap_ind,
11944 {"Primary Capable Indicator", "docsis_ocd.tlv.prim_cap_ind", FT_UINT8, BASE_DEC, VALS(docsis_ocd_prim_cap_ind_str), 0x0, NULL, HFILL}
11946 {&hf_docsis_ocd_tlv_fdx_ind,
11947 {"FDX Indicator", "docsis_ocd.tlv.fdx_indicator", FT_UINT8, BASE_DEC, VALS(docsis_ocd_fdx_ind_str), 0x0, NULL, HFILL}
11949 {&hf_docsis_ocd_tlv_subc_assign_type,
11950 {"Assignment type", "docsis_ocd.tlv.subc_assign.type", FT_UINT8, BASE_DEC, VALS(docsis_ocd_subc_assign_type_str), 0xC0, NULL, HFILL}
11952 {&hf_docsis_ocd_tlv_subc_assign_value,
11953 {"Assignment value", "docsis_ocd.tlv.subc_assign.value", FT_UINT8, BASE_DEC, VALS(docsis_ocd_subc_assign_value_str), 0x20, NULL, HFILL}
11955 {&hf_docsis_ocd_subc_assign_subc_type,
11956 {"Subcarrier Type", "docsis_ocd.tlv.subc_assign.subc_type", FT_UINT8, BASE_DEC, VALS(docsis_ocd_subc_assign_subc_type_str), 0x1F, NULL, HFILL}
11958 {&hf_docsis_ocd_subc_assign_range,
11959 {"Subcarrier index range", "docsis_ocd.tlv.subc_assign.range", FT_UINT32, BASE_CUSTOM, CF_FUNC(subc_assign_range), 0x00, NULL, HFILL}
11961 {&hf_docsis_ocd_subc_assign_index,
11962 {"Subcarrier index", "docsis_ocd.tlv.subc_assign.index", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL}
11964 {&hf_docsis_ocd_tlv_data,
11965 {"TLV Data", "docsis_ocd.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
11967 {&hf_docsis_ocd_type,
11968 {"Type", "docsis_ocd.type", FT_UINT8, BASE_DEC, VALS(ocd_tlv_vals), 0x0, NULL, HFILL}
11970 {&hf_docsis_ocd_length,
11971 {"Length", "docsis_ocd.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11973 /* DPD */
11974 {&hf_docsis_dpd_tlv_unknown,
11975 {"Unknown TLV", "docsis_dpd.unknown_tlv",
11976 FT_BYTES, BASE_NONE, NULL, 0x0,
11977 NULL, HFILL}
11979 {&hf_docsis_dpd_prof_id,
11980 {"Profile Identifier", "docsis_dpd.prof_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11982 {&hf_docsis_dpd_ccc,
11983 {"Configuration Change Count", "docsis_dpd.ccc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11985 {&hf_docsis_dpd_tlv_subc_assign_type,
11986 {"Subcarrier Assignment Type", "docsis_dpd.tlv.subc_assign.type", FT_UINT8, BASE_DEC, VALS(docsis_dpd_subc_assign_type_str), 0xC0, NULL, HFILL}
11988 {&hf_docsis_dpd_tlv_subc_assign_value,
11989 {"Subcarrier Assignment Value", "docsis_dpd.tlv.subc_assign.value", FT_UINT8, BASE_DEC, VALS(docsis_dpd_subc_assign_value_str), 0x20, NULL, HFILL}
11991 {&hf_docsis_dpd_tlv_subc_assign_reserved,
11992 {"reserved", "docsis_dpd.tlv.subc_assign.reserved", FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL}
11994 {&hf_docsis_dpd_tlv_subc_assign_modulation,
11995 {"Subcarrier Assignment Modulation", "docsis_dpd.tlv.subc_assign.modulation", FT_UINT8, BASE_DEC, VALS(docsis_dpd_subc_assign_modulation_str), 0x0F, NULL, HFILL}
11997 {&hf_docsis_dpd_subc_assign_range,
11998 {"Subcarrier index range", "docsis_dpd.tlv.subc_assign.range", FT_UINT32, BASE_CUSTOM, CF_FUNC(subc_assign_range), 0x00, NULL, HFILL}
12000 {&hf_docsis_dpd_subc_assign_index,
12001 {"Subcarrier index", "docsis_dpd.tlv.subc_assign.index", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL}
12003 {&hf_docsis_dpd_tlv_subc_assign_vector_oddness,
12004 {"Odd or even", "docsis_dpd.tlv.subc_assign_vect.oddness", FT_UINT8, BASE_DEC, VALS(docsis_dpd_tlv_subc_assign_vector_oddness_str), 0x80, NULL, HFILL}
12006 {&hf_docsis_dpd_tlv_subc_assign_vector_reserved,
12007 {"Reserved", "docsis_dpd.tlv.subc_assign_vect.reserved", FT_UINT8, BASE_DEC, NULL, 0x60, NULL, HFILL}
12009 {&hf_docsis_dpd_tlv_subc_assign_vector_subc_start,
12010 {"Subcarrier start", "docsis_dpd.tlv.subc_assign_vect.subc_start", FT_UINT16, BASE_DEC, NULL, 0x1FFF, NULL, HFILL}
12012 {&hf_docsis_dpd_tlv_subc_assign_vector_modulation_odd,
12013 {"Modulation", "docsis_dpd.tlv.subc_assign_vect.modulation", FT_UINT8, BASE_DEC, VALS(docsis_dpd_tlv_subc_assign_vector_modulation_str), 0xF0, NULL, HFILL}
12015 {&hf_docsis_dpd_tlv_subc_assign_vector_modulation_even,
12016 {"Modulation", "docsis_dpd.tlv.subc_assign_vect.modulation", FT_UINT8, BASE_DEC, VALS(docsis_dpd_tlv_subc_assign_vector_modulation_str), 0x0F, NULL, HFILL}
12018 {&hf_docsis_dpd_tlv_data,
12019 {"TLV Data", "docsis_dpd.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12021 {&hf_docsis_dpd_type,
12022 {"Type", "docsis_dpd.type" ,FT_UINT8, BASE_DEC, VALS(dpd_tlv_vals), 0x0, NULL, HFILL}
12024 {&hf_docsis_dpd_length,
12025 {"Length", "docsis_dpd.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12027 /* OPT-REQ */
12028 {&hf_docsis_optreq_tlv_unknown,
12029 {"Unknown TLV", "docsis_optreq.unknown_tlv", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
12031 {&hf_docsis_optreq_reserved,
12032 {"Reserved", "docsis_optreq.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}
12034 {&hf_docsis_optreq_prof_id,
12035 {"Profile Identifier", "docsis_optreq.prof_id", FT_UINT8, BASE_DEC, VALS(profile_id_vals), 0x0, NULL, HFILL}
12037 {&hf_docsis_optreq_opcode,
12038 {"Opcode", "docsis_optreq.opcode", FT_UINT8, BASE_DEC, VALS(opt_opcode_vals), 0x0, NULL, HFILL}
12040 {&hf_docsis_optreq_tlv_data,
12041 {"TLV Data", "docsis_optreq.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12043 {&hf_docsis_optreq_type,
12044 {"Type", "docsis_optreq.type", FT_UINT8, BASE_DEC, VALS(optreq_tlv_vals), 0x0, NULL, HFILL}
12046 {&hf_docsis_optreq_length,
12047 {"Length", "docsis_optreq.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12049 {&hf_docsis_optreq_reqstat_rxmer_stat_subc,
12050 {"RxMER Statistics per subcarrier", "docsis_optreq.reqstat.rxmer_stat_per_subcarrier", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x1, NULL, HFILL}
12052 {&hf_docsis_optreq_reqstat_rxmer_subc_threshold_comp,
12053 {"RxMER per Subcarrier Threshold Comparison for Candidate Profile", "docsis_optreq.reqstat.rxmer_per_subcarrier_thresh_comp", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x2, NULL, HFILL}
12055 {&hf_docsis_optreq_reqstat_snr_marg_cand_prof,
12056 {"SNR Margin for Candidate Profile", "docsis_optreq.reqstat.snr_marg_cand_prof", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x4, NULL, HFILL}
12058 {&hf_docsis_optreq_reqstat_codew_stat_cand_prof,
12059 {"Codeword Statistics for Candidate Profile", "docsis_optreq.reqstat.codew_stat_cand_prof", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x8, NULL, HFILL}
12061 {&hf_docsis_optreq_reqstat_codew_thresh_comp_cand_prof,
12062 {"Codeword Threshold Comparison for Candidate Profile", "docsis_optreq.reqstat.codew_thresh_comp_cand_prof", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x00000010, NULL, HFILL}
12064 {&hf_docsis_optreq_reqstat_ncp_field_stat,
12065 {"NCP Field Statistics", "docsis_optreq.reqstat.ncp_field_stats", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x00000020, NULL, HFILL}
12067 {&hf_docsis_optreq_reqstat_ncp_crc_thresh_comp,
12068 {"NCP CRC Threshold Comparison", "docsis_optreq.reqstat.ncp_crc_thresh_comp", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x00000040, NULL, HFILL}
12070 {&hf_docsis_optreq_reqstat_reserved,
12071 {"Reserved", "docsis_optreq.reqstat.reserved", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x00000080, NULL, HFILL}
12073 {&hf_docsis_optreq_tlv_rxmer_thresh_data,
12074 {"TLV Data", "docsis_optreq.rxmer_thresh_params.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12076 {&hf_docsis_optreq_xmer_thresh_params_type,
12077 {"Type", "docsis_optreq.rxmer_thres_params.type", FT_UINT8, BASE_DEC, VALS(optreq_tlv_rxmer_thresh_params_vals), 0x0, NULL, HFILL}
12079 {&hf_docsis_optreq_xmer_thresh_params_length,
12080 {"Length", "docsis_optreq.rxmer_thres_params.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12082 {&hf_docsis_optreq_tlv_rxmer_thresh_data_mod_order,
12083 {"Modulation Order", "docsis_optreq.rxmer_thres_params.mod_order", FT_UINT8, BASE_DEC, VALS(opreq_tlv_rxmer_thresh_params_mod_order), 0x0, NULL, HFILL}
12085 {&hf_docsis_optreq_tlv_trigger_definition_data,
12086 {"TLV Data", "docsis_optreq.trigger_definition.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12088 {&hf_docsis_optreq_tlv_trigger_definition_data_type,
12089 {"Type", "docsis_optreq.trigger_definition.type", FT_UINT8, BASE_DEC, VALS(optreq_tlv_trigger_definition_vals), 0x0, NULL, HFILL}
12091 {&hf_docsis_optreq_tlv_trigger_definition_data_length,
12092 {"Length", "docsis_optreq.trigger_definition.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12094 {&hf_docsis_optreq_tlv_trigger_definition_trigger_type,
12095 {"Trigger Type", "docsis_optreq.trigger_definition.trigger_type", FT_UINT8, BASE_DEC, VALS(optreq_tlv_triggered_definition_trigger_type_vals), 0x0, NULL, HFILL}
12097 {&hf_docsis_optreq_tlv_trigger_definition_measure_duration,
12098 {"Measurement Duration", "docsis_optreq.trigger_definition.measurement_duration", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12100 {&hf_docsis_optreq_tlv_trigger_definition_triggering_sid,
12101 {"Triggering SID", "docsis_optreq.trigger_definition.triggering_sid", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12103 {&hf_docsis_optreq_tlv_trigger_definition_us_chan_id,
12104 {"US Channel ID", "docsis_optreq.trigger_definition.us_chan_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12106 {&hf_docsis_optreq_tlv_trigger_definition_sound_ambig_offset,
12107 {"OUDP Sounding Ambiguity Offset", "docsis_optreq.trigger_definition.sound_ambig_offset", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12109 {&hf_docsis_optreq_tlv_trigger_definition_rx_mer_to_report,
12110 {"RxMER Measurement to Report", "docsis_optreq.trigger_definition.rx_mer_to_report", FT_UINT8, BASE_DEC, VALS(optreq_tlv_triggered_definition_rx_mer_to_report_vals), 0x0, NULL, HFILL}
12112 {&hf_docsis_optreq_tlv_trigger_definition_start_time,
12113 {"Time-Triggered Start Time", "docsis_optreq.trigger_definition.start_time", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12115 /* OPT-RSP */
12116 {&hf_docsis_optrsp_reserved,
12117 {"Reserved", "docsis_optrsp.reserved",
12118 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}
12120 {&hf_docsis_optrsp_prof_id,
12121 {"Profile Identifier", "docsis_optrsp.prof_id",
12122 FT_UINT8, BASE_DEC, VALS(profile_id_vals), 0x0, NULL, HFILL}
12124 {&hf_docsis_optrsp_status,
12125 {"Status", "docsis_optrsp.status",
12126 FT_UINT8, BASE_DEC, VALS(opt_status_vals), 0x0, NULL, HFILL}
12128 {&hf_docsis_optrsp_tlv,
12129 {"TLV", "docsis_optrsp.tlv",
12130 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12132 {&hf_docsis_optrsp_tlv_type,
12133 {"Type", "docsis_optrsp.tlv.type",
12134 FT_UINT8, BASE_DEC, VALS(optrsp_tlv_vals), 0x0, "OPT-RSP TLV type", HFILL}
12136 {&hf_docsis_optrsp_tlv_length,
12137 {"Length", "docsis_optrsp.tlv.length",
12138 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12140 {&hf_docsis_optrsp_rxmer_tlv,
12141 {"TLV", "docsis_optrsp.rxmer_snr_margin.tlv",
12142 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12144 {&hf_docsis_optrsp_rxmer_tlv_type,
12145 {"Type", "docsis_optrsp.rxmer_snr_margin.tlv.type",
12146 FT_UINT8, BASE_DEC, VALS(optrsp_rxmer_vals), 0x0, NULL, HFILL}
12148 {&hf_docsis_optrsp_rxmer_tlv_length,
12149 {"Length", "docsis_optrsp.rxmer_snr_margin.tlv.length",
12150 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12152 {&hf_docsis_optrsp_rxmer_subcarrier,
12153 {"RxMER", "docsis_optrsp.rxmer_snr_margin.rxmer_per_subc",
12154 FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0, NULL, HFILL}
12156 {&hf_docsis_optrsp_rxmer_subcarrier_threshold,
12157 {"Result", "docsis_optrsp.rxmer_snr_margin.threshold_per_subc",
12158 FT_BYTES, BASE_NONE, NULL, 0x0,
12159 "RxMER per Subcarrier Threshold Comparison Result", HFILL}
12161 {&hf_docsis_optrsp_rxmer_subcarrier_threshold_count,
12162 {"Number of Subcarriers", "docsis_optrsp.rxmer_snr_margin.threshold_count",
12163 FT_UINT16, BASE_DEC, NULL, 0x0,
12164 "Number of Subcarriers whose RxMER is RxMER Margin below the RxMER Target", HFILL}
12166 {&hf_docsis_optrsp_rxmer_snr_margin,
12167 {"SNR Margin", "docsis_optrsp.rxmer_snr_margin.snr_margin",
12168 FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0, NULL, HFILL}
12170 {&hf_docsis_optrsp_rxmer_avg,
12171 {"Average RxMER", "docsis_optrsp.rxmer_snr_margin.rxmer_avg",
12172 FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0, NULL, HFILL}
12174 {&hf_docsis_optrsp_rxmer_ect_rba_subband_direction,
12175 {"ECT RxMER Probe-Triggered RBA Sub-band Direction Set", "docsis_optrsp.rxmer_snr_margin.ect_rba_subband_direction",
12176 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}
12178 {&hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb0,
12179 {"Direction Sub-band 0", "docsis_optrsp.rxmer_snr_margin.ect_rba_subband_direction.0",
12180 FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x04, NULL, HFILL}
12182 {&hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb1,
12183 {"Direction Sub-band 1", "docsis_optrsp.rxmer_snr_margin.ect_rba_subband_direction.1",
12184 FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x02, NULL, HFILL}
12186 {&hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb2,
12187 {"Direction Sub-band 2", "docsis_optrsp.rxmer_snr_margin.ect_rba_subband_direction.2",
12188 FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x01, NULL, HFILL}
12190 {&hf_docsis_optrsp_data_cw_tlv,
12191 {"TLV", "docsis_optrsp.data_cw.tlv",
12192 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12194 {&hf_docsis_optrsp_data_cw_tlv_type,
12195 {"Type", "docsis_optrsp.data_cw.tlv.type",
12196 FT_UINT8, BASE_DEC, VALS(optrsp_data_cw_vals), 0x0, NULL, HFILL}
12198 {&hf_docsis_optrsp_data_cw_tlv_length,
12199 {"Length", "docsis_optrsp.data_cw.tlv.length",
12200 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12202 {&hf_docsis_optrsp_data_cw_count,
12203 {"Codeword Count", "docsis_optrsp.data_cw.count",
12204 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12206 {&hf_docsis_optrsp_data_cw_corrected,
12207 {"Corrected Codeword Count", "docsis_optrsp.data_cw.corrected",
12208 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12210 {&hf_docsis_optrsp_data_cw_uncorrectable,
12211 {"Uncorrectable Codeword Count", "docsis_optrsp.data_cw.uncorrectable",
12212 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12214 {&hf_docsis_optrsp_data_cw_threshold_comparison,
12215 {"Comparison Result", "docsis_optrsp.data_cw.threshold_comparison",
12216 FT_UINT8, BASE_DEC, VALS(optrsp_data_cw_threshold_comparison_vals), 0x0,
12217 "Codeword Threshold Comparison Result for Candidate Profile", HFILL}
12219 {&hf_docsis_optrsp_ncp_fields_tlv,
12220 {"TLV", "docsis_optrsp.ncp_fields.tlv",
12221 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12223 {&hf_docsis_optrsp_ncp_fields_tlv_type,
12224 {"Type", "docsis_optrsp.ncp_fields.tlv.type",
12225 FT_UINT8, BASE_DEC, VALS(optrsp_ncp_fields_vals), 0x0, NULL, HFILL}
12227 {&hf_docsis_optrsp_ncp_fields_tlv_length,
12228 {"Length", "docsis_optrsp.ncp_fields.tlv.length",
12229 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12231 {&hf_docsis_optrsp_ncp_fields_count,
12232 {"NCP Fields Count", "docsis_optrsp.ncp_fields.count",
12233 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12235 {&hf_docsis_optrsp_ncp_fields_failure,
12236 {"NCP CRC Failure Count", "docsis_optrsp.ncp_fields.failure",
12237 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12239 {&hf_docsis_optrsp_ncp_fields_threshold_comparison,
12240 {"Comparison Result", "docsis_optrsp.ncp_fields.threshold_comparison",
12241 FT_UINT8, BASE_DEC, VALS(optrsp_ncp_fields_threshold_comparison_vals), 0x0,
12242 "NCP CRC Threshold Comparison Result", HFILL
12245 /* OPT-ACK */
12246 {&hf_docsis_optack_prof_id,
12247 {"Profile Identifier", "docsis_optack.prof_id", FT_UINT8, BASE_DEC, VALS(profile_id_vals), 0x0, NULL, HFILL}
12249 {&hf_docsis_optack_reserved,
12250 {"Reserved", "docsis_optack.reserved", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12252 /* RBA */
12253 {&hf_docsis_rba_tg_id,
12254 {"Transmission Group ID", "docsis_rba.tg_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12256 {&hf_docsis_rba_ccc,
12257 {"Change Count", "docsis_rba.ccc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12259 {&hf_docsis_rba_dcid,
12260 {"Current Channel DCID", "docsis_rba.dcid", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12262 {&hf_docsis_rba_control_byte_bitmask,
12263 {"Control byte bitmask", "docsis_rba.control_byte_bitmask", FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL}
12265 {&hf_docsis_rba_resource_block_change_bit,
12266 {"Resource Block Change bit", "docsis_rba.rb_change_bit", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL}
12268 {&hf_docsis_rba_expiration_time_valid_bit,
12269 {"Expiration Time Valid bit", "docsis_rba.exp_time_valid_bit", FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL}
12271 {&hf_docsis_rba_control_byte_bitmask_rsvd,
12272 {"Control byte bitmask reserved", "docsis_rba.control_byte_bitmask_rsvd", FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL}
12274 {&hf_docsis_rba_rba_time,
12275 {"RBA Time", "docsis_rba.rba_time", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}
12277 {&hf_docsis_rba_rba_expiration_time,
12278 {"RBA Expiration Time", "docsis_rba.rba_expiration_time", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}
12280 {&hf_docsis_rba_number_of_subbands,
12281 {"Number of Sub-bands", "docsis_rba.nr_subbands", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12283 {&hf_docsis_rba_subband_direction,
12284 {"Sub-band direction", "docsis_rba.subband_direction", FT_UINT8, BASE_DEC, VALS(rba_subband_direction_vals), 0x0, NULL, HFILL}
12286 /* CWT-REQ and CWT-RSP */
12287 {&hf_docsis_cwt_trans_id,
12288 {"Transaction ID", "docsis_cwt.trans_id",
12289 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12291 {&hf_docsis_cwt_sub_band_id,
12292 {"Sub-band ID", "docsis_cwt.subband_id",
12293 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12295 {&hf_docsis_cwt_op_code,
12296 {"Operation Code", "docsis_cwt.op_code",
12297 FT_UINT8, BASE_DEC, VALS(cwt_op_code_vals), 0x0, NULL, HFILL}
12299 {&hf_docsis_cwt_status,
12300 {"Status", "docsis_cwt.status",
12301 FT_UINT8, BASE_DEC, VALS(cwt_status_vals), 0x0, NULL, HFILL}
12303 {&hf_docsis_cwt_tlv,
12304 {"TLV", "docsis_cwt.tlv",
12305 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12307 {&hf_docsis_cwt_tlv_type,
12308 {"Type", "docsis_cwt.tlv.type",
12309 FT_UINT8, BASE_DEC, VALS(cwt_tlv_vals), 0x0, NULL, HFILL}
12311 {&hf_docsis_cwt_tlv_length,
12312 {"Length", "docsis_cwt.tlv.length",
12313 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12315 {&hf_docsis_cwt_phase_rotation,
12316 {"Phase Rotation", "docsis_cwt.phase_rotation",
12317 FT_UINT8, BASE_DEC, VALS(cwt_phase_rotation_vals), 0x0,
12318 NULL, HFILL}
12320 {&hf_docsis_cwt_max_duration,
12321 {"Maximum Duration", "docsis_cwt.max_duration",
12322 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
12323 NULL, HFILL}
12325 {&hf_docsis_cwt_us_encodings_tlv,
12326 {"TLV", "docsis_cwt.us_encodings.tlv",
12327 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12328 NULL, HFILL}
12330 {&hf_docsis_cwt_us_encodings_tlv_type,
12331 {"Type", "docsis_cwt.us_encodings.tlv.type",
12332 FT_UINT8, BASE_DEC, VALS(cwt_us_encodings_tlv_vals), 0x0,
12333 NULL, HFILL}
12335 {&hf_docsis_cwt_us_encodings_tlv_length,
12336 {"Length", "docsis_cwt.us_encodings.tlv.length",
12337 FT_UINT8, BASE_DEC, NULL, 0x0,
12338 NULL, HFILL}
12340 {&hf_docsis_cwt_us_encodings_cid,
12341 {"Extended Upstream Channel ID", "docsis_cwt.us_encodings.cid",
12342 FT_UINT8, BASE_DEC, NULL, 0x0,
12343 NULL, HFILL}
12345 {&hf_docsis_cwt_us_encodings_sc_index,
12346 {"Upstream Subcarrier Index", "docsis_cwt.us_encodings.sc_index",
12347 FT_UINT16, BASE_DEC, NULL, 0x0,
12348 NULL, HFILL}
12350 {&hf_docsis_cwt_us_encodings_power_boost,
12351 {"CWT Power Boost", "docsis_cwt.us_encodings.power_boost",
12352 FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0,
12353 NULL, HFILL}
12355 /* ECT-REQ and ECT-RSP */
12356 {&hf_docsis_ect_trans_id,
12357 {"Transaction ID", "docsis_ect.trans_id",
12358 FT_UINT16, BASE_CUSTOM, CF_FUNC(ect_trans_id_val), 0x0,
12359 NULL, HFILL}
12361 {&hf_docsis_ect_rsp_code,
12362 {"Response Code", "docsis_ect.rsp_code",
12363 FT_UINT8, BASE_DEC, VALS(ect_rsp_code_vals), 0x0,
12364 NULL, HFILL}
12366 {&hf_docsis_ect_tlv,
12367 {"TLV", "docsis_ect.tlv",
12368 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12369 NULL, HFILL}
12371 {&hf_docsis_ect_tlv_type,
12372 {"Type", "docsis_ect.tlv.type",
12373 FT_UINT8, BASE_DEC, VALS(ect_tlv_vals), 0x0,
12374 NULL, HFILL}
12376 {&hf_docsis_ect_tlv_length,
12377 {"Length", "docsis_ect.tlv.length",
12378 FT_UINT8, BASE_DEC, NULL, 0x0,
12379 NULL, HFILL}
12381 {&hf_docsis_ect_control_tlv,
12382 {"TLV", "docsis_ect.control.tlv",
12383 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12384 NULL, HFILL}
12386 {&hf_docsis_ect_control_tlv_type,
12387 {"Type", "docsis_ect.control.tlv.type",
12388 FT_UINT8, BASE_DEC, VALS(ect_control_tlv_vals), 0x0,
12389 NULL, HFILL}
12391 {&hf_docsis_ect_control_tlv_length,
12392 {"Length", "docsis_ect.control.tlv.length",
12393 FT_UINT8, BASE_DEC, NULL, 0x0,
12394 NULL, HFILL}
12396 {&hf_docsis_ect_control_subband_direction,
12397 {"Direction", "docsis_ect.control.subband_direction",
12398 FT_UINT8, BASE_DEC, VALS(rba_subband_direction_vals), 0x0,
12399 NULL, HFILL}
12401 {&hf_docsis_ect_control_status,
12402 {"Training Status", "docsis_ect.control.status",
12403 FT_UINT8, BASE_DEC, VALS(ect_control_status_vals), 0x0,
12404 NULL, HFILL}
12406 {&hf_docsis_ect_control_method_tlv,
12407 {"TLV", "docsis_ect.control.method.tlv",
12408 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12409 NULL, HFILL}
12411 {&hf_docsis_ect_control_method_tlv_type,
12412 {"Type", "docsis_ect.control.method.tlv.type",
12413 FT_UINT8, BASE_DEC, VALS(ect_control_method_tlv_vals), 0x0,
12414 NULL, HFILL}
12416 {&hf_docsis_ect_control_method_tlv_length,
12417 {"Length", "docsis_ect.control.method.tlv.length",
12418 FT_UINT8, BASE_DEC, NULL, 0x0,
12419 NULL, HFILL}
12421 {&hf_docsis_ect_control_method_fg_tlv,
12422 {"TLV", "docsis_ect.control.method.fg.tlv",
12423 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12424 NULL, HFILL}
12426 {&hf_docsis_ect_control_method_fg_tlv_type,
12427 {"Type", "docsis_ect.control.method.fg.tlv.type",
12428 FT_UINT8, BASE_DEC, VALS(ect_control_method_fg_tlv_vals), 0x0,
12429 NULL, HFILL}
12431 {&hf_docsis_ect_control_method_fg_tlv_length,
12432 {"Length", "docsis_ect.control.method.fg.tlv.length",
12433 FT_UINT8, BASE_DEC, NULL, 0x0,
12434 NULL, HFILL}
12436 {&hf_docsis_ect_control_method_fg_duration,
12437 {"Duration", "docsis_ect.control.method.fg.duration",
12438 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_symbols), 0x0,
12439 NULL, HFILL}
12441 {&hf_docsis_ect_control_method_fg_periodicity,
12442 {"Periodicity", "docsis_ect.control.method.fg.periodicity",
12443 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
12444 NULL, HFILL}
12446 {&hf_docsis_ect_control_method_fg_expiration_time,
12447 {"Expiration Time", "docsis_ect.control.method.fg.expiration_time",
12448 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
12449 NULL, HFILL}
12451 {&hf_docsis_ect_control_method_fg_ds_zbl,
12452 {"Downstream Zero Bit Loading", "docsis_ect.control.method.fg.ds_zbl",
12453 FT_UINT8, BASE_DEC, VALS(ect_ds_zbl_vals), 0x0,
12454 NULL, HFILL}
12456 {&hf_docsis_ect_control_method_bg_tlv,
12457 {"TLV", "docsis_ect.control.method.bg.tlv",
12458 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12459 NULL, HFILL}
12461 {&hf_docsis_ect_control_method_bg_tlv_type,
12462 {"Type", "docsis_ect.control.method.bg.tlv.type",
12463 FT_UINT8, BASE_DEC, VALS(ect_control_method_bg_tlv_vals), 0x0,
12464 NULL, HFILL}
12466 {&hf_docsis_ect_control_method_bg_tlv_length,
12467 {"Length", "docsis_ect.control.method.bg.tlv.length",
12468 FT_UINT8, BASE_DEC, NULL, 0x0,
12469 NULL, HFILL}
12471 {&hf_docsis_ect_control_method_bg_duration,
12472 {"Duration", "docsis_ect.control.method.bg.duration",
12473 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
12474 NULL, HFILL}
12476 {&hf_docsis_ect_control_method_bg_periodicity,
12477 {"Periodicity", "docsis_ect.control.method.bg.periodicity",
12478 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
12479 NULL, HFILL}
12481 {&hf_docsis_ect_control_method_bg_expiration_time,
12482 {"Expiration Time", "docsis_ect.control.method.bg.expiration_time",
12483 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
12484 NULL, HFILL}
12486 {&hf_docsis_ect_control_method_bg_start_time,
12487 {"Start Time", "docsis_ect.control.method.bg.start_time",
12488 FT_UINT32, BASE_DEC, NULL, 0x0,
12489 NULL, HFILL}
12491 {&hf_docsis_ect_control_partial_service_tlv,
12492 {"TLV", "docsis_ect.control.partial_service.tlv",
12493 FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12494 NULL, HFILL}
12496 {&hf_docsis_ect_control_partial_service_tlv_type,
12497 {"Type", "docsis_ect.control.partial_service.tlv.type",
12498 FT_UINT8, BASE_DEC, VALS(ect_control_partial_service_tlv_vals), 0x0,
12499 NULL, HFILL}
12501 {&hf_docsis_ect_control_partial_service_tlv_length,
12502 {"Length", "docsis_ect.control.partial_service.tlv.length",
12503 FT_UINT8, BASE_DEC, NULL, 0x0,
12504 NULL, HFILL}
12506 {&hf_docsis_ect_control_partial_service_dcid,
12507 {"DCID", "docsis_ect.control.partial_service.dcid",
12508 FT_UINT8, BASE_DEC, NULL, 0x0,
12509 NULL, HFILL}
12511 {&hf_docsis_ect_control_partial_service_ucid,
12512 {"UCID", "docsis_ect.control.partial_service.ucid",
12513 FT_UINT8, BASE_DEC, NULL, 0x0,
12514 NULL, HFILL}
12516 {&hf_docsis_ect_control_deferral_time,
12517 {"Deferral Time", "docsis_ect.control.deferral_time",
12518 FT_UINT8, BASE_CUSTOM, CF_FUNC(ect_deferral_time_val), 0x0,
12519 NULL, HFILL}
12521 {&hf_docsis_ect_control_rxmer_duration,
12522 {"RxMER Duration", "docsis_ect.control.rxmer_duration",
12523 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_symbols), 0x0,
12524 NULL, HFILL}
12526 /* DPR */
12527 {&hf_docsis_dpr_carrier,
12528 {"Carrier DCID", "docsis_dpr.carrier",
12529 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12531 {&hf_docsis_dpr_dcid,
12532 {"Protected DCID", "docsis_dpr.dcid",
12533 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12535 {&hf_docsis_dpr_tg_id,
12536 {"Protected TG ID", "docsis_dpr.tg_id",
12537 FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(dpr_tg_id_vals), 0x0,
12538 NULL, HFILL}
12540 {&hf_docsis_dpr_reserved,
12541 {"Reserved", "docsis_dpr.reserved",
12542 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}
12544 {&hf_docsis_dpr_start_time,
12545 {"Start time", "docsis_dpr.start_time",
12546 FT_UINT32, BASE_CUSTOM, CF_FUNC(d30_time_ticks), 0x0,
12547 NULL, HFILL}
12549 {&hf_docsis_dpr_duration,
12550 {"Duration", "docsis_dpr.duration",
12551 FT_UINT32, BASE_CUSTOM, CF_FUNC(d30_time_ticks), 0x0,
12552 NULL, HFILL}
12554 /* MAC Management */
12555 {&hf_docsis_mgt_upstream_chid,
12556 {"Upstream Channel ID", "docsis_mgmt.upchid",
12557 FT_UINT8, BASE_DEC, NULL, 0x0,
12558 NULL, HFILL}
12560 {&hf_docsis_mgt_down_chid,
12561 {"Downstream Channel ID", "docsis_mgmt.downchid",
12562 FT_UINT8, BASE_DEC, NULL, 0x0,
12563 "Management Message", HFILL}
12565 {&hf_docsis_mgt_tranid,
12566 {"Transaction ID", "docsis_mgmt.tranid",
12567 FT_UINT16, BASE_DEC, NULL, 0x0,
12568 NULL, HFILL}
12570 {&hf_docsis_mgt_dst_addr,
12571 {"Destination Address", "docsis_mgmt.dst",
12572 FT_ETHER, BASE_NONE, NULL, 0x0,
12573 NULL, HFILL}
12575 {&hf_docsis_mgt_src_addr,
12576 {"Source Address", "docsis_mgmt.src",
12577 FT_ETHER, BASE_NONE, NULL, 0x0,
12578 NULL, HFILL}
12580 {&hf_docsis_mgt_msg_len,
12581 {"Message Length - DSAP to End (Bytes)", "docsis_mgmt.msglen",
12582 FT_UINT16, BASE_DEC, NULL, 0x0,
12583 NULL, HFILL}
12585 {&hf_docsis_mgt_dsap,
12586 {"DSAP", "docsis_mgmt.dsap",
12587 FT_UINT8, BASE_HEX, NULL, 0x0,
12588 "Destination SAP", HFILL}
12590 {&hf_docsis_mgt_ssap,
12591 {"SSAP", "docsis_mgmt.ssap",
12592 FT_UINT8, BASE_HEX, NULL, 0x0,
12593 "Source SAP", HFILL}
12595 {&hf_docsis_mgt_30_transmit_power,
12596 {"Upstream Transmit Power, sent to 3.0 CMTS", "docsis_mgmt.30_transmit_power",
12597 FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0,
12598 NULL, HFILL}
12600 {&hf_docsis_mgt_31_transmit_power,
12601 {"Upstream Transmit Power, sent to 3.1 CMTS", "docsis_mgmt.31_transmit_power",
12602 FT_UINT16, BASE_CUSTOM, CF_FUNC(fourth_db), 0x01FF,
12603 NULL, HFILL}
12605 {&hf_docsis_mgt_40_transmit_power,
12606 {"Upstream Transmit Power, sent to 4.0 CMTS", "docsis_mgmt.40_transmit_power",
12607 FT_INT16, BASE_CUSTOM, CF_FUNC(fourth_db), 0x01FF,
12608 NULL, HFILL}
12610 {&hf_docsis_mgt_control,
12611 {"Control", "docsis_mgmt.control",
12612 FT_UINT8, BASE_HEX, NULL, 0x0,
12613 NULL, HFILL}
12615 {&hf_docsis_mgt_version,
12616 {"Version", "docsis_mgmt.version",
12617 FT_UINT8, BASE_DEC, NULL, 0x0,
12618 NULL, HFILL}
12620 {&hf_docsis_mgt_type,
12621 {"Type", "docsis_mgmt.type",
12622 FT_UINT8, BASE_DEC, VALS (mgmt_type_vals), 0x0,
12623 NULL, HFILL}
12625 {&hf_docsis_mgt_rsvd,
12626 {"Reserved", "docsis_mgmt.rsvd",
12627 FT_UINT8, BASE_DEC, NULL, 0x0,
12628 NULL, HFILL}
12630 {&hf_docsis_mgt_multipart,
12631 {"Multipart", "docsis_mgmt.multipart",
12632 FT_UINT8, BASE_HEX, NULL, 0x0,
12633 NULL, HFILL}
12635 {&hf_docsis_mgt_multipart_number_of_fragments,
12636 {"Multipart - Number of Fragments", "docsis_mgmt.multipart.number_of_fragments",
12637 FT_UINT8, BASE_CUSTOM, CF_FUNC(multipart_number_of_fragments), 0xF0,
12638 NULL, HFILL}
12640 {&hf_docsis_mgt_multipart_fragment_sequence_number,
12641 {"Multipart - Fragment Sequence Number", "docsis_mgmt.multipart.fragment_sequence_number",
12642 FT_UINT8, BASE_DEC, NULL, 0x0F,
12643 NULL, HFILL}
12645 { &hf_docsis_tlv_fragment_overlap,
12646 { "Fragment overlap", "docsis_mgmt.tlv.fragment.overlap",
12647 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12648 "Fragment overlaps with other fragments", HFILL}
12650 { &hf_docsis_tlv_fragment_overlap_conflict,
12651 { "Conflicting data in fragment overlap", "docsis_mgmt.tlv.fragment.overlap.conflict",
12652 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12653 "Overlapping fragments contained conflicting data", HFILL}
12655 { &hf_docsis_tlv_fragment_multiple_tails,
12656 { "Multiple tail fragments found", "docsis_mgmt.tlv.fragment.multipletails",
12657 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12658 "Several tails were found when defragmenting the packet", HFILL}
12660 { &hf_docsis_tlv_fragment_too_long_fragment,
12661 { "Fragment too long", "docsis_mgmt.tlv.fragment.toolongfragment",
12662 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12663 "Fragment contained data past end of packet", HFILL}
12665 { &hf_docsis_tlv_fragment_error,
12666 { "Defragmentation error", "docsis_mgmt.tlv.fragment.error",
12667 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
12668 "Defragmentation error due to illegal fragments", HFILL}
12670 { &hf_docsis_tlv_fragment_count,
12671 { "Fragment count", "docsis_mgmt.tlv.fragment.count",
12672 FT_UINT32, BASE_DEC, NULL, 0x0,
12673 NULL, HFILL}
12675 { &hf_docsis_tlv_fragment,
12676 { "TLV Fragment", "docsis_mgmt.tlv.fragment",
12677 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
12678 NULL, HFILL}
12680 { &hf_docsis_tlv_fragments,
12681 { "TLV Fragments", "docsis_mgmt.tlv.fragments",
12682 FT_BYTES, BASE_NONE, NULL, 0x0,
12683 NULL, HFILL}
12685 { &hf_docsis_tlv_reassembled_in,
12686 { "Reassembled TLV in frame", "docsis_mgmt.tlv.reassembled_in",
12687 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
12688 "This TLV packet is reassembled in this frame", HFILL}
12690 { &hf_docsis_tlv_reassembled_length,
12691 { "Reassembled TLV length", "docsis_mgmt.tlv.reassembled.length",
12692 FT_UINT32, BASE_DEC, NULL, 0x0,
12693 "The total length of the reassembled payload", HFILL}
12695 { &hf_docsis_tlv_reassembled_data,
12696 { "Reassembled TLV data", "docsis_mgmt.tlv.reassembled.data",
12697 FT_BYTES, BASE_NONE, NULL, 0x0,
12698 "The reassembled payload", HFILL}
12700 { &hf_docsis_tlv_reassembled,
12701 { "Reassembled TLV", "docsis_mgmt.tlv.reassembled",
12702 FT_BYTES, BASE_NONE, NULL, 0x0,
12703 NULL, HFILL}
12707 static int *ett[] = {
12708 &ett_docsis_sync,
12709 &ett_docsis_ucd,
12710 &ett_docsis_tlv,
12711 &ett_docsis_burst_tlv,
12712 &ett_docsis_map,
12713 &ett_docsis_map_ie,
12714 &ett_docsis_map_probe_ie,
12715 &ett_docsis_rngreq,
12716 &ett_docsis_rngrsp,
12717 &ett_docsis_rngrsptlv,
12718 &ett_docsis_rngrsp_tlv_transmit_equalization_encodings,
12719 &ett_docsis_rngrsp_tlv_transmit_equalization_encodings_coef,
12720 &ett_docsis_rngrsp_tlv_commanded_power,
12721 &ett_docsis_rngrsp_tlv_commanded_power_subtlv,
12722 &ett_docsis_regreq,
12723 &ett_docsis_regrsp,
12724 &ett_docsis_uccreq,
12725 &ett_docsis_uccrsp,
12726 &ett_docsis_bpkmreq,
12727 &ett_docsis_bpkmrsp,
12728 &ett_docsis_bpkmattr,
12729 &ett_docsis_bpkmattr_tlv,
12730 &ett_docsis_bpkmattr_cmid,
12731 &ett_docsis_bpkmattr_scap,
12732 &ett_docsis_bpkmattr_crypto_suite,
12733 &ett_docsis_bpkmattr_crypto_suite_list,
12734 &ett_docsis_bpkmattr_allowed_bpi_versions,
12735 &ett_docsis_bpkmattr_ocsp_responses,
12736 &ett_docsis_bpkmattr_cmts_designation,
12737 &ett_docsis_bpkmattr_tekp,
12738 &ett_docsis_bpkmattr_sadsc,
12739 &ett_docsis_bpkmattr_saqry,
12740 &ett_docsis_bpkmattr_dnld,
12741 &ett_docsis_regack,
12742 &ett_docsis_dsareq,
12743 &ett_docsis_dsarsp,
12744 &ett_docsis_dsaack,
12745 &ett_docsis_dscreq,
12746 &ett_docsis_dscrsp,
12747 &ett_docsis_dscack,
12748 &ett_docsis_dsdreq,
12749 &ett_docsis_dsdrsp,
12750 &ett_docsis_dccreq,
12751 &ett_docsis_dccreq_sf_sub,
12752 &ett_docsis_dccreq_ds_params,
12753 &ett_docsis_dccreq_tlv,
12754 &ett_docsis_dccrsp,
12755 &ett_docsis_dccrsp_cm_jump_time,
12756 &ett_docsis_dccrsp_tlv,
12757 &ett_docsis_dccack,
12758 &ett_docsis_dccack_tlv,
12759 &ett_docsis_intrngreq,
12760 &ett_docsis_dcd,
12761 &ett_docsis_dcd_cfr,
12762 &ett_docsis_dcd_cfr_ip,
12763 &ett_docsis_dcd_rule,
12764 &ett_docsis_dcd_clid,
12765 &ett_docsis_dcd_cfg,
12766 &ett_docsis_dcd_tlv,
12767 &ett_docsis_mdd,
12768 &ett_tlv,
12769 &ett_sub_tlv,
12770 &ett_docsis_mdd_cm_status_ev_en_for_docsis31,
12771 &ett_docsis_mdd_ds_active_channel_list,
12772 &ett_docsis_mdd_ds_service_group,
12773 &ett_docsis_mdd_channel_profile_reporting_control,
12774 &ett_docsis_mdd_ip_init_param,
12775 &ett_docsis_mdd_up_active_channel_list,
12776 &ett_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds_dschids,
12777 &ett_docsis_mdd_cm_status_event_control,
12778 &ett_docsis_mdd_dsg_da_to_dsid,
12779 &ett_docsis_mdd_docsis_version,
12780 &ett_docsis_mdd_docsis_version_tlv,
12781 &ett_docsis_mdd_diplexer_band_edge,
12782 &ett_docsis_mdd_advanced_band_plan,
12783 &ett_docsis_mdd_bpi_plus,
12784 &ett_docsis_bintrngreq,
12785 &ett_docsis_dbcreq,
12786 &ett_docsis_dbcrsp,
12787 &ett_docsis_dbcack,
12788 &ett_docsis_dpvreq,
12789 &ett_docsis_dpvrsp,
12790 &ett_docsis_cmstatus,
12791 &ett_docsis_cmstatus_tlv,
12792 &ett_docsis_cmstatus_tlvtlv,
12793 &ett_docsis_cmstatus_status_event_tlv,
12794 &ett_docsis_cmstatus_status_event_tlvtlv,
12795 &ett_docsis_cmstatusack,
12796 &ett_docsis_cmctrlreq,
12797 &ett_docsis_cmctrlreq_tlv,
12798 &ett_docsis_cmctrlreq_tlvtlv,
12799 &ett_docsis_cmctrl_tlv_us_event,
12800 &ett_docsis_cmctrl_tlv_ds_event,
12801 &ett_docsis_cmctrlrsp,
12802 &ett_docsis_regreqmp,
12803 &ett_docsis_regrspmp,
12804 &ett_docsis_emreq,
12805 &ett_docsis_emrsp,
12806 &ett_docsis_emrsp_tlv,
12807 &ett_docsis_emrsp_tlvtlv,
12808 &ett_docsis_ocd,
12809 &ett_docsis_ocd_tlv,
12810 &ett_docsis_ocd_tlvtlv,
12811 &ett_docsis_dpd,
12812 &ett_docsis_dpd_tlv,
12813 &ett_docsis_dpd_tlvtlv,
12814 &ett_docsis_dpd_tlv_subcarrier_assignment,
12815 &ett_docsis_dpd_tlv_subcarrier_assignment_vector,
12816 &ett_docsis_optreq,
12817 &ett_docsis_optreq_tlv,
12818 &ett_docsis_optreq_tlvtlv,
12819 &ett_docsis_optreq_tlv_rxmer_thresh_params,
12820 &ett_docsis_optreq_tlv_rxmer_thresh_params_tlv,
12821 &ett_docsis_optreq_tlv_trigger_definition_params,
12822 &ett_docsis_optreq_tlv_trigger_definition_params_tlv,
12823 &ett_docsis_optrsp,
12824 &ett_docsis_optrsp_tlv,
12825 &ett_docsis_optrsp_rxmer_tlv,
12826 &ett_docsis_optrsp_rxmer_subcarrier_tlv,
12827 &ett_docsis_optrsp_data_cw_tlv,
12828 &ett_docsis_optrsp_ncp_fields_tlv,
12829 &ett_docsis_optack,
12830 &ett_docsis_rba,
12831 &ett_docsis_rba_control_byte,
12832 &ett_docsis_cwt_req,
12833 &ett_docsis_cwt_rsp,
12834 &ett_docsis_cwt_tlv,
12835 &ett_docsis_cwt_subtlv,
12836 &ett_docsis_ect_req,
12837 &ett_docsis_ect_rsp,
12838 &ett_docsis_ect_tlv,
12839 &ett_docsis_ext_rngreq,
12840 &ett_docsis_dpr,
12841 &ett_docsis_mgmt,
12842 &ett_mgmt_pay,
12843 &ett_docsis_tlv_fragment,
12844 &ett_docsis_tlv_fragments,
12845 &ett_docsis_tlv_reassembled
12848 static ei_register_info ei[] = {
12849 {&ei_docsis_mgmt_tlvlen_bad, {"docsis_mgmt.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
12850 {&ei_docsis_mgmt_tlvtype_unknown, { "docsis_mgmt.tlvtypeunknown", PI_PROTOCOL, PI_WARN, "Unknown TLV type", EXPFILL}},
12851 {&ei_docsis_mgmt_version_unknown, { "docsis_mgmt.versionunknown", PI_PROTOCOL, PI_WARN, "Unknown mac management version", EXPFILL}},
12852 {&ei_docsis_mgmt_opt_req_trigger_def_measure_duration, { "docsis_mgmt.optreq_trigger_def.wrongduration", PI_PROTOCOL, PI_WARN, "Wrong duration of FDX-triggered OPT-REQ", EXPFILL}},
12853 {&ei_docsis_cwt_out_of_range, {"docsis_cwt.out_of_range", PI_PROTOCOL, PI_WARN, "CWT value out-of-range", EXPFILL}},
12854 {&ei_docsis_ect_control_out_of_range, {"docsis_ect.control.out_of_range", PI_PROTOCOL, PI_WARN, "ECT Control value out-of-range", EXPFILL}},
12855 {&ei_docsis_dpr_out_of_range, {"docsis_dpr.out_of_range", PI_PROTOCOL, PI_WARN, "DPR Duration out-of-range", EXPFILL}}
12858 expert_module_t* expert_docsis_mgmt;
12860 proto_docsis_mgmt = proto_register_protocol ("DOCSIS MAC Management", "DOCSIS MAC MGMT", "docsis_mgmt");
12862 proto_register_field_array (proto_docsis_mgmt, hf, array_length (hf));
12863 proto_register_subtree_array (ett, array_length (ett));
12864 expert_docsis_mgmt = expert_register_protocol(proto_docsis_mgmt);
12865 expert_register_field_array(expert_docsis_mgmt, ei, array_length(ei));
12867 docsis_mgmt_dissector_table = register_dissector_table ("docsis_mgmt",
12868 "DOCSIS MAC Management", proto_docsis_mgmt,
12869 FT_UINT8, BASE_DEC);
12871 /* Register MAC Management commands as their own protocols so we can get the name of the option */
12872 proto_docsis_sync = proto_register_protocol_in_name_only("DOCSIS Synchronisation Message", "SYNC Message", "docsis_sync", proto_docsis_mgmt, FT_BYTES);
12873 proto_docsis_ucd = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Descriptor", "DOCSIS UCD", "docsis_ucd", proto_docsis_mgmt, FT_BYTES);
12874 proto_docsis_map_v1 = proto_register_protocol_in_name_only("DOCSIS Upstream Bandwidth Allocation - version 1", "DOCSIS MAP", "docsis_map", proto_docsis_mgmt, FT_BYTES);
12875 proto_docsis_map_v5 = proto_register_protocol_in_name_only("DOCSIS Upstream Bandwidth Allocation - version 5", "DOCSIS MAP", "docsis_map", proto_docsis_mgmt, FT_BYTES);
12876 proto_docsis_rngreq = proto_register_protocol_in_name_only("DOCSIS Range Request Message", "DOCSIS RNG-REQ", "docsis_rngreq", proto_docsis_mgmt, FT_BYTES);
12877 proto_docsis_rngrsp = proto_register_protocol_in_name_only("DOCSIS Ranging Response", "DOCSIS RNG-RSP", "docsis_rngrsp", proto_docsis_mgmt, FT_BYTES);
12878 proto_docsis_regreq = proto_register_protocol_in_name_only("DOCSIS Registration Requests", "DOCSIS REG-REQ", "docsis_regreq", proto_docsis_mgmt, FT_BYTES);
12879 proto_docsis_regrsp = proto_register_protocol_in_name_only("DOCSIS Registration Responses", "DOCSIS REG-RSP", "docsis_regrsp", proto_docsis_mgmt, FT_BYTES);
12880 proto_docsis_uccreq = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Change Request", "DOCSIS UCC-REQ", "docsis_uccreq", proto_docsis_mgmt, FT_BYTES);
12881 proto_docsis_uccrsp = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Change Response", "DOCSIS UCC-RSP", "docsis_uccrsp", proto_docsis_mgmt, FT_BYTES);
12882 proto_docsis_bpkmreq = proto_register_protocol_in_name_only("DOCSIS Baseline Privacy Key Management Request", "DOCSIS BPKM-REQ", "docsis_bpkm.req", proto_docsis_mgmt, FT_BYTES);
12883 proto_docsis_bpkmrsp = proto_register_protocol_in_name_only("DOCSIS Baseline Privacy Key Management Response", "DOCSIS BPKM-RSP", "docsis_bpkm.rsp", proto_docsis_mgmt, FT_BYTES);
12884 proto_docsis_regack = proto_register_protocol_in_name_only("DOCSIS Registration Acknowledge", "DOCSIS REG-ACK", "docsis_regack", proto_docsis_mgmt, FT_BYTES);
12885 proto_docsis_dsareq = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Addition Request", "DOCSIS DSA-REQ", "docsis_dsareq", proto_docsis_mgmt, FT_BYTES);
12886 proto_docsis_dsarsp = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Addition Response", "DOCSIS DSA-RSP", "docsis_dsarsp", proto_docsis_mgmt, FT_BYTES);
12887 proto_docsis_dsaack = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Addition Acknowledge", "DOCSIS DSA-ACK", "docsis_dsaack", proto_docsis_mgmt, FT_BYTES);
12888 proto_docsis_dscreq = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Change Request", "DOCSIS DSC-REQ", "docsis_dscreq", proto_docsis_mgmt, FT_BYTES);
12889 proto_docsis_dscrsp = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Change Response", "DOCSIS DSC-RSP", "docsis_dscrsp", proto_docsis_mgmt, FT_BYTES);
12890 proto_docsis_dscack = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Change Acknowledge", "DOCSIS DSC-ACK", "docsis_dscack", proto_docsis_mgmt, FT_BYTES);
12891 proto_docsis_dsdreq = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Delete Request", "DOCSIS DSD-REQ", "docsis_dsdreq", proto_docsis_mgmt, FT_BYTES);
12892 proto_docsis_dsdrsp = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Delete Response", "DOCSIS DSD-RSP", "docsis_dsdrsp", proto_docsis_mgmt, FT_BYTES);
12893 proto_docsis_dccreq = proto_register_protocol_in_name_only("DOCSIS Downstream Channel Change Request", "DOCSIS DCC-REQ", "docsis_dccreq", proto_docsis_mgmt, FT_BYTES);
12894 proto_docsis_dccrsp = proto_register_protocol_in_name_only("DOCSIS Downstream Channel Change Response", "DOCSIS DCC-RSP", "docsis_dccrsp", proto_docsis_mgmt, FT_BYTES);
12895 proto_docsis_dccack = proto_register_protocol_in_name_only("DOCSIS Downstream Channel Change Acknowledge", "DOCSIS DCC-ACK", "docsis_dccack", proto_docsis_mgmt, FT_BYTES);
12896 proto_docsis_type29ucd = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Descriptor Type 29", "DOCSIS type29ucd", "docsis_type29ucd", proto_docsis_mgmt, FT_BYTES);
12897 proto_docsis_intrngreq = proto_register_protocol_in_name_only("DOCSIS Initial Ranging Message", "DOCSIS INT-RNG-REQ", "docsis_intrngreq", proto_docsis_mgmt, FT_BYTES);
12898 proto_docsis_dcd = proto_register_protocol_in_name_only("DOCSIS Downstream Channel Descriptor", "DOCSIS DCD", "docsis_dcd", proto_docsis_mgmt, FT_BYTES);
12899 proto_docsis_mdd = proto_register_protocol_in_name_only("DOCSIS MAC Domain Description", "DOCSIS MDD", "docsis_mdd", proto_docsis_mgmt, FT_BYTES);
12900 proto_docsis_bintrngreq = proto_register_protocol_in_name_only("DOCSIS Bonded Initial Ranging Message", "DOCSIS B-INT-RNG-REQ", "docsis_bintrngreq", proto_docsis_mgmt, FT_BYTES);
12901 proto_docsis_type35ucd = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Descriptor Type 35", "DOCSIS type35ucd", "docsis_type35ucd", proto_docsis_mgmt, FT_BYTES);
12902 proto_docsis_dbcreq = proto_register_protocol_in_name_only("DOCSIS Dynamic Bonding Change Request", "DOCSIS DBC-REQ", "docsis_dbcreq", proto_docsis_mgmt, FT_BYTES);
12903 proto_docsis_dbcrsp = proto_register_protocol_in_name_only("DOCSIS Dynamic Bonding Change Response", "DOCSIS DBC-RSP", "docsis_dbcrsp", proto_docsis_mgmt, FT_BYTES);
12904 proto_docsis_dbcack = proto_register_protocol_in_name_only("DOCSIS Dynamic Bonding Change Acknowledge", "DOCSIS DBC-ACK", "docsis_dbcack", proto_docsis_mgmt, FT_BYTES);
12905 proto_docsis_dpvreq = proto_register_protocol_in_name_only("DOCSIS Path Verify Request", "DOCSIS DPV-REQ", "docsis_dpv.req", proto_docsis_mgmt, FT_BYTES);
12906 proto_docsis_dpvrsp = proto_register_protocol_in_name_only("DOCSIS Path Verify Response", "DOCSIS DPV-RSP", "docsis_dpv.rsp", proto_docsis_mgmt, FT_BYTES);
12907 proto_docsis_cmstatus = proto_register_protocol_in_name_only("DOCSIS CM-STATUS Report", "DOCSIS CM-STATUS", "docsis_cmstatus", proto_docsis_mgmt, FT_BYTES);
12908 proto_docsis_cmstatusack = proto_register_protocol_in_name_only("DOCSIS Status Report Acknowledge", "DOCSIS CM-STATUS-ACK", "docsis_cmstatusack", proto_docsis_mgmt, FT_BYTES);
12909 proto_docsis_cmctrlreq = proto_register_protocol_in_name_only("DOCSIS CM Control Request", "DOCSIS CM-CTRL-REQ", "docsis_cmctrl.req", proto_docsis_mgmt, FT_BYTES);
12910 proto_docsis_cmctrlrsp = proto_register_protocol_in_name_only("DOCSIS CM Control Response", "DOCSIS CM-CTRL-RSP", "docsis_cmctrlrsp", proto_docsis_mgmt, FT_BYTES);
12911 proto_docsis_regreqmp = proto_register_protocol_in_name_only("DOCSIS Registration Request Multipart", "DOCSIS Reg-Req-Mp", "docsis_regreqmp", proto_docsis_mgmt, FT_BYTES);
12912 proto_docsis_regrspmp = proto_register_protocol_in_name_only("DOCSIS Registration Response Multipart", "DOCSIS Reg-Rsp-Mp", "docsis_regrspmp", proto_docsis_mgmt, FT_BYTES);
12913 proto_docsis_emreq = proto_register_protocol_in_name_only("DOCSIS Energy Management Request", "DOCSIS EM-REQ", "docsis_emreq", proto_docsis_mgmt, FT_BYTES);
12914 proto_docsis_emrsp = proto_register_protocol_in_name_only("DOCSIS Energy Management Response", "DOCSIS EM-RSP", "docsis_emrsp", proto_docsis_mgmt, FT_BYTES);
12915 proto_docsis_ocd = proto_register_protocol_in_name_only("DOCSIS OFDM Channel Descriptor", "DOCSIS OCD", "docsis_ocd", proto_docsis_mgmt, FT_BYTES);
12916 proto_docsis_dpd = proto_register_protocol_in_name_only("DOCSIS Downstream Profile Descriptor", "DOCSIS DPD", "docsis_dpd", proto_docsis_mgmt, FT_BYTES);
12917 proto_docsis_type51ucd = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Descriptor Type 51", "DOCSIS type51ucd", "docsis_type51ucd", proto_docsis_mgmt, FT_BYTES);
12918 proto_docsis_optreq = proto_register_protocol_in_name_only("OFDM Downstream Profile Test Request", "DOCSIS OPT-REQ", "docsis_optreq", proto_docsis_mgmt, FT_BYTES);
12919 proto_docsis_optrsp = proto_register_protocol_in_name_only("OFDM Downstream Profile Test Response", "DOCSIS OPT-RSP", "docsis_optrsp", proto_docsis_mgmt, FT_BYTES);
12920 proto_docsis_optack = proto_register_protocol_in_name_only("OFDM Downstream Profile Test Acknowledge", "DOCSIS OPT-ACK", "docsis_optack", proto_docsis_mgmt, FT_BYTES);
12921 proto_docsis_rba = proto_register_protocol_in_name_only("DOCSIS Resource Block Assignment Message", "DOCSIS RBA", "docsis_rba", proto_docsis_mgmt, FT_BYTES);
12922 proto_docsis_cwt_req = proto_register_protocol_in_name_only("DOCSIS IG Discovery CW Test Request", "DOCSIS CWT-REQ", "docsis_cwt.req", proto_docsis_mgmt, FT_BYTES);
12923 proto_docsis_cwt_rsp = proto_register_protocol_in_name_only("DOCSIS IG Discovery CW Test Response", "DOCSIS CWT-RSP", "docsis_cwt.rsp", proto_docsis_mgmt, FT_BYTES);
12924 proto_docsis_ect_req = proto_register_protocol_in_name_only("DOCSIS CM Echo Cancellation Training Request", "DOCSIS ECT-REQ", "docsis_ect.req", proto_docsis_mgmt, FT_BYTES);
12925 proto_docsis_ect_rsp = proto_register_protocol_in_name_only("DOCSIS CM Echo Cancellation Training Response", "DOCSIS ECT-RSP", "docsis_ect.rsp", proto_docsis_mgmt, FT_BYTES);
12926 proto_docsis_ext_rngreq = proto_register_protocol_in_name_only("DOCSIS Extended Range Request Message", "DOCSIS EXT-RNG-REQ", "docsis_ext_rngreq", proto_docsis_mgmt, FT_BYTES);
12927 proto_docsis_dpr = proto_register_protocol_in_name_only("DOCSIS Downstream Protection", "DOCSIS DPR", "docsis_dpr", proto_docsis_mgmt, FT_BYTES);
12929 register_dissector ("docsis_mgmt", dissect_macmgmt, proto_docsis_mgmt);
12930 docsis_ucd_handle = register_dissector ("docsis_ucd", dissect_ucd, proto_docsis_ucd);
12931 docsis_rba_handle = register_dissector ("docsis_rba", dissect_rba, proto_docsis_rba);
12934 void
12935 proto_reg_handoff_docsis_mgmt (void)
12937 /* Create dissection function handles for all MAC Management commands */
12938 dissector_add_uint ("docsis_mgmt", MGT_SYNC, create_dissector_handle( dissect_sync, proto_docsis_sync ));
12939 dissector_add_uint ("docsis_mgmt", MGT_UCD, docsis_ucd_handle);
12940 dissector_add_uint ("docsis_mgmt", 256*MAP_v1 + MGT_MAP, create_dissector_handle( dissect_map_v1, proto_docsis_map_v1 ));
12941 dissector_add_uint ("docsis_mgmt", 256*MAP_v5 + MGT_MAP, create_dissector_handle( dissect_map_v5, proto_docsis_map_v5 ));
12942 dissector_add_uint ("docsis_mgmt", MGT_RNG_REQ, create_dissector_handle( dissect_rngreq, proto_docsis_rngreq ));
12943 dissector_add_uint ("docsis_mgmt", MGT_RNG_RSP, create_dissector_handle( dissect_rngrsp, proto_docsis_rngrsp ));
12944 dissector_add_uint ("docsis_mgmt", MGT_REG_REQ, create_dissector_handle( dissect_regreq, proto_docsis_regreq ));
12945 dissector_add_uint ("docsis_mgmt", MGT_REG_RSP, create_dissector_handle( dissect_regrsp, proto_docsis_regrsp ));
12946 dissector_add_uint ("docsis_mgmt", MGT_UCC_REQ, create_dissector_handle( dissect_uccreq, proto_docsis_uccreq ));
12947 dissector_add_uint ("docsis_mgmt", MGT_UCC_RSP, create_dissector_handle( dissect_uccrsp, proto_docsis_uccrsp ));
12948 dissector_add_uint ("docsis_mgmt", MGT_BPKM_REQ, create_dissector_handle( dissect_bpkmreq, proto_docsis_bpkmreq ));
12949 dissector_add_uint ("docsis_mgmt", MGT_BPKM_RSP, create_dissector_handle( dissect_bpkmrsp, proto_docsis_bpkmrsp ));
12950 dissector_add_uint ("docsis_mgmt", MGT_REG_ACK, create_dissector_handle( dissect_regack, proto_docsis_regack ));
12951 dissector_add_uint ("docsis_mgmt", MGT_DSA_REQ, create_dissector_handle( dissect_dsareq, proto_docsis_dsareq ));
12952 dissector_add_uint ("docsis_mgmt", MGT_DSA_RSP, create_dissector_handle( dissect_dsarsp, proto_docsis_dsarsp ));
12953 dissector_add_uint ("docsis_mgmt", MGT_DSA_ACK, create_dissector_handle( dissect_dsaack, proto_docsis_dsaack ));
12954 dissector_add_uint ("docsis_mgmt", MGT_DSC_REQ, create_dissector_handle( dissect_dscreq, proto_docsis_dscreq ));
12955 dissector_add_uint ("docsis_mgmt", MGT_DSC_RSP, create_dissector_handle( dissect_dscrsp, proto_docsis_dscrsp ));
12956 dissector_add_uint ("docsis_mgmt", MGT_DSC_ACK, create_dissector_handle( dissect_dscack, proto_docsis_dscack ));
12957 dissector_add_uint ("docsis_mgmt", MGT_DSD_REQ, create_dissector_handle( dissect_dsdreq, proto_docsis_dsdreq ));
12958 dissector_add_uint ("docsis_mgmt", MGT_DSD_RSP, create_dissector_handle( dissect_dsdrsp, proto_docsis_dsdrsp ));
12959 dissector_add_uint ("docsis_mgmt", MGT_DCC_REQ, create_dissector_handle( dissect_dccreq, proto_docsis_dccreq ));
12960 dissector_add_uint ("docsis_mgmt", MGT_DCC_RSP, create_dissector_handle( dissect_dccrsp, proto_docsis_dccrsp ));
12961 dissector_add_uint ("docsis_mgmt", MGT_DCC_ACK, create_dissector_handle( dissect_dccack, proto_docsis_dccack ));
12962 dissector_add_uint ("docsis_mgmt", MGT_TYPE29UCD, create_dissector_handle( dissect_type29ucd, proto_docsis_type29ucd ));
12963 dissector_add_uint ("docsis_mgmt", MGT_INIT_RNG_REQ, create_dissector_handle( dissect_intrngreq, proto_docsis_intrngreq ));
12964 dissector_add_uint ("docsis_mgmt", MGT_DS_CH_DESC, create_dissector_handle( dissect_dcd, proto_docsis_dcd ));
12965 dissector_add_uint ("docsis_mgmt", MGT_MDD, create_dissector_handle( dissect_mdd, proto_docsis_mdd ));
12966 dissector_add_uint ("docsis_mgmt", MGT_B_INIT_RNG_REQ, create_dissector_handle( dissect_bintrngreq, proto_docsis_bintrngreq ));
12967 dissector_add_uint ("docsis_mgmt", MGT_TYPE35UCD, create_dissector_handle( dissect_type35ucd, proto_docsis_type35ucd ));
12968 dissector_add_uint ("docsis_mgmt", MGT_DBC_REQ, create_dissector_handle( dissect_dbcreq, proto_docsis_dbcreq ));
12969 dissector_add_uint ("docsis_mgmt", MGT_DBC_RSP, create_dissector_handle( dissect_dbcrsp, proto_docsis_dbcrsp ));
12970 dissector_add_uint ("docsis_mgmt", MGT_DBC_ACK, create_dissector_handle( dissect_dbcack, proto_docsis_dbcack ));
12971 dissector_add_uint ("docsis_mgmt", MGT_DPV_REQ, create_dissector_handle( dissect_dpvreq, proto_docsis_dpvreq ));
12972 dissector_add_uint ("docsis_mgmt", MGT_DPV_RSP, create_dissector_handle( dissect_dpvrsp, proto_docsis_dpvrsp ));
12973 dissector_add_uint ("docsis_mgmt", MGT_CM_STATUS, create_dissector_handle( dissect_cmstatus, proto_docsis_cmstatus ));
12974 dissector_add_uint ("docsis_mgmt", MGT_CM_STATUS_ACK, create_dissector_handle( dissect_cmstatusack, proto_docsis_cmstatusack ));
12975 dissector_add_uint ("docsis_mgmt", MGT_CM_CTRL_REQ, create_dissector_handle( dissect_cmctrlreq, proto_docsis_cmctrlreq ));
12976 dissector_add_uint ("docsis_mgmt", MGT_CM_CTRL_RSP, create_dissector_handle( dissect_cmctrlrsp, proto_docsis_cmctrlrsp ));
12977 dissector_add_uint ("docsis_mgmt", MGT_REG_REQ_MP, create_dissector_handle( dissect_regreqmp, proto_docsis_regreqmp ));
12978 dissector_add_uint ("docsis_mgmt", MGT_REG_RSP_MP, create_dissector_handle( dissect_regrspmp, proto_docsis_regrspmp ));
12979 dissector_add_uint ("docsis_mgmt", MGT_EM_REQ, create_dissector_handle( dissect_emreq, proto_docsis_emreq ));
12980 dissector_add_uint ("docsis_mgmt", MGT_EM_RSP, create_dissector_handle( dissect_emrsp, proto_docsis_emrsp ));
12981 dissector_add_uint ("docsis_mgmt", MGT_OCD, create_dissector_handle( dissect_ocd, proto_docsis_ocd ));
12982 dissector_add_uint ("docsis_mgmt", MGT_DPD, create_dissector_handle( dissect_dpd, proto_docsis_dpd ));
12983 dissector_add_uint ("docsis_mgmt", MGT_TYPE51UCD, create_dissector_handle( dissect_type51ucd, proto_docsis_type51ucd ));
12984 dissector_add_uint ("docsis_mgmt", MGT_OPT_REQ, create_dissector_handle( dissect_optreq, proto_docsis_optreq ));
12985 dissector_add_uint ("docsis_mgmt", MGT_OPT_RSP, create_dissector_handle( dissect_optrsp, proto_docsis_optrsp ));
12986 dissector_add_uint ("docsis_mgmt", MGT_OPT_ACK, create_dissector_handle( dissect_optack, proto_docsis_optack ));
12987 dissector_add_uint ("docsis_mgmt", MGT_RBA_SW, docsis_rba_handle);
12988 dissector_add_uint ("docsis_mgmt", MGT_RBA_HW, docsis_rba_handle);
12989 dissector_add_uint ("docsis_mgmt", MGT_CWT_REQ, create_dissector_handle(dissect_cwt_req, proto_docsis_cwt_req));
12990 dissector_add_uint ("docsis_mgmt", MGT_CWT_RSP, create_dissector_handle(dissect_cwt_rsp, proto_docsis_cwt_rsp));
12991 dissector_add_uint ("docsis_mgmt", MGT_ECT_REQ, create_dissector_handle(dissect_ect_req, proto_docsis_ect_req));
12992 dissector_add_uint ("docsis_mgmt", MGT_ECT_RSP, create_dissector_handle(dissect_ect_rsp, proto_docsis_ect_rsp));
12993 dissector_add_uint ("docsis_mgmt", MGT_EXT_RNG_REQ, create_dissector_handle( dissect_ext_rngreq, proto_docsis_ext_rngreq ));
12994 dissector_add_uint ("docsis_mgmt", MGT_DPR, create_dissector_handle(dissect_dpr, proto_docsis_dpr));
12995 dissector_add_uint ("docsis_mgmt", MGT_BPKM_REQ_V5, create_dissector_handle(dissect_bpkmreq, proto_docsis_bpkmreq));
12996 dissector_add_uint ("docsis_mgmt", MGT_BPKM_RSP_V5, create_dissector_handle(dissect_bpkmrsp, proto_docsis_bpkmrsp));
12998 docsis_tlv_handle = find_dissector ("docsis_tlv");
13000 reassembly_table_register(&docsis_tlv_reassembly_table, &addresses_reassembly_table_functions);
13004 * Editor modelines - https://www.wireshark.org/tools/modelines.html
13006 * Local Variables:
13007 * c-basic-offset: 2
13008 * tab-width: 8
13009 * indent-tabs-mode: nil
13010 * End:
13012 * ex: set shiftwidth=2 tabstop=8 expandtab:
13013 * :indentSize=2:tabSize=8:noTabs=true: