Coverage Report

Created: 2026-07-12 07:10

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-docsis-macmgmt.c
Line
Count
Source
1
/* packet-docsis-macmgmt.c
2
 *
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
11
 *
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
17
 *
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>
26
 *
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>
30
 *
31
 * Routines for Sync Message dissection
32
 * Routines for REG-REQ-MP dissection
33
 * Copyright 2007, Bruno Verstuyft  <bruno.verstuyft@excentis.com>
34
 *
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>
39
 *
40
 * Routines for DCC Message dissection
41
 * Routines for DCD Message dissection
42
 * Copyright 2004, Darryl Hymel <darryl.hymel[AT]arrisi.com>
43
 *
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>
47
 *
48
 * Routines for Initial Ranging Request Message dissection
49
 * Copyright 2003, Brian Wheeler <brian.wheeler[AT]arrisi.com>
50
 *
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>
54
 *
55
 * Routines for MDD Message dissection
56
 * Copyright 2014, Adrian Simionov <adrian.simionov@arrisi.com>
57
 * Copyright 2007, Bruno Verstuyft <bruno.verstuyft@excentis.com>
58
 *
59
 * Routines for DOCSIS 3.0 Bonded Initial Ranging Request Message dissection.
60
 * Copyright 2009, Geoffrey Kimball <gekimbal[AT]cisco.com>
61
 *
62
 * Routines for Type 35 UCD - DOCSIS 3.0 only - Message dissection
63
 * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
64
 *
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>
69
 *
70
 * Routines for DOCSIS 4.0 TLVs dissection
71
 * Copyright 2023, Andrii Vladyka <andrii.vladyka@harmonicinc.com>
72
 *
73
 * Wireshark - Network traffic analyzer
74
 * By Gerald Combs <gerald@wireshark.org>
75
 * Copyright 1998 Gerald Combs
76
 *
77
 * SPDX-License-Identifier: GPL-2.0-or-later
78
 */
79
80
#include "config.h"
81
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-pkixalgs.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>
97
98
void proto_register_docsis_mgmt(void);
99
void proto_reg_handoff_docsis_mgmt(void);
100
101
15
#define MGT_SYNC 1
102
15
#define MGT_UCD 2
103
30
#define MGT_MAP 3
104
15
#define MGT_RNG_REQ 4
105
15
#define MGT_RNG_RSP 5
106
15
#define MGT_REG_REQ 6
107
15
#define MGT_REG_RSP 7
108
15
#define MGT_UCC_REQ 8
109
15
#define MGT_UCC_RSP 9
110
#define MGT_TRI_TCD 10
111
#define MGT_TRI_TSI 11
112
15
#define MGT_BPKM_REQ 12
113
15
#define MGT_BPKM_RSP 13
114
15
#define MGT_REG_ACK 14
115
15
#define MGT_DSA_REQ 15
116
15
#define MGT_DSA_RSP 16
117
15
#define MGT_DSA_ACK 17
118
15
#define MGT_DSC_REQ 18
119
15
#define MGT_DSC_RSP 19
120
15
#define MGT_DSC_ACK 20
121
15
#define MGT_DSD_REQ 21
122
15
#define MGT_DSD_RSP 22
123
15
#define MGT_DCC_REQ 23
124
15
#define MGT_DCC_RSP 24
125
15
#define MGT_DCC_ACK 25
126
#define MGT_DCI_REQ 26
127
#define MGT_DCI_RSP 27
128
#define MGT_UP_DIS 28
129
15
#define MGT_TYPE29UCD 29
130
15
#define MGT_INIT_RNG_REQ 30
131
#define MGT_TEST_REQ 31
132
15
#define MGT_DS_CH_DESC 32
133
15
#define MGT_MDD 33
134
15
#define MGT_B_INIT_RNG_REQ 34
135
15
#define MGT_TYPE35UCD 35
136
15
#define MGT_DBC_REQ 36
137
15
#define MGT_DBC_RSP 37
138
15
#define MGT_DBC_ACK 38
139
15
#define MGT_DPV_REQ 39
140
15
#define MGT_DPV_RSP 40
141
15
#define MGT_CM_STATUS 41
142
15
#define MGT_CM_CTRL_REQ 42
143
15
#define MGT_CM_CTRL_RSP 43
144
15
#define MGT_REG_REQ_MP 44
145
15
#define MGT_REG_RSP_MP 45
146
15
#define MGT_EM_REQ 46
147
15
#define MGT_EM_RSP 47
148
15
#define MGT_CM_STATUS_ACK 48
149
15
#define MGT_OCD 49
150
15
#define MGT_DPD 50
151
15
#define MGT_TYPE51UCD 51
152
#define MGT_ODS_REQ 52
153
#define MGT_ODS_RSP 53
154
15
#define MGT_OPT_REQ 54
155
15
#define MGT_OPT_RSP 55
156
15
#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
15
#define MGT_RBA_SW 61
162
15
#define MGT_RBA_HW 62
163
15
#define MGT_CWT_REQ 63
164
15
#define MGT_CWT_RSP 64
165
15
#define MGT_ECT_REQ 65
166
15
#define MGT_ECT_RSP 66
167
15
#define MGT_EXT_RNG_REQ 67
168
15
#define MGT_DPR 68
169
15
#define MGT_BPKM_REQ_V5 69
170
15
#define MGT_BPKM_RSP_V5 70
171
172
0
#define UCD_SYMBOL_RATE 1
173
0
#define UCD_FREQUENCY 2
174
0
#define UCD_PREAMBLE 3
175
0
#define UCD_BURST_DESCR 4
176
0
#define UCD_BURST_DESCR5 5
177
0
#define UCD_EXT_PREAMBLE 6
178
0
#define UCD_SCDMA_MODE_ENABLED 7
179
0
#define UCD_SCDMA_SPREADING_INTERVAL 8
180
0
#define UCD_SCDMA_CODES_PER_MINI_SLOT 9
181
0
#define UCD_SCDMA_ACTIVE_CODES 10
182
0
#define UCD_SCDMA_CODE_HOPPING_SEED 11
183
0
#define UCD_SCDMA_US_RATIO_NUM 12
184
0
#define UCD_SCDMA_US_RATIO_DENOM 13
185
0
#define UCD_SCDMA_TIMESTAMP_SNAPSHOT 14
186
0
#define UCD_MAINTAIN_POWER_SPECTRAL_DENSITY 15
187
0
#define UCD_RANGING_REQUIRED 16
188
0
#define UCD_MAX_SCHEDULED_CODES 17
189
0
#define UCD_RANGING_HOLD_OFF_PRIORITY_FIELD 18
190
0
#define UCD_RANGING_CHANNEL_CLASS_ID 19
191
0
#define UCD_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING 20
192
0
#define UCD_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES 21
193
0
#define UCD_HIGHER_UCD_FOR_SAME_UCID 22
194
0
#define UCD_BURST_DESCR23 23
195
0
#define UCD_CHANGE_IND_BITMASK 24
196
0
#define UCD_OFDMA_TIMESTAMP_SNAPSHOT 25
197
0
#define UCD_OFDMA_CYCLIC_PREFIX_SIZE 26
198
0
#define UCD_OFDMA_ROLLOFF_PERIOD_SIZE 27
199
0
#define UCD_SUBCARRIER_SPACING 28
200
0
#define UCD_CENTER_FREQ_SUBC_0 29
201
0
#define UCD_SUBC_EXCL_BAND 30
202
0
#define UCD_UNUSED_SUBC_SPEC 31
203
0
#define UCD_SYMB_IN_OFDMA_FRAME 32
204
0
#define UCD_RAND_SEED 33
205
0
#define EXTENDED_US_CHANNEL 34
206
207
0
#define UCD_MODULATION 1
208
0
#define UCD_DIFF_ENCODING 2
209
0
#define UCD_PREAMBLE_LEN 3
210
0
#define UCD_PREAMBLE_VAL_OFF 4
211
0
#define UCD_FEC 5
212
0
#define UCD_FEC_CODEWORD 6
213
0
#define UCD_SCRAMBLER_SEED 7
214
0
#define UCD_MAX_BURST 8
215
0
#define UCD_GUARD_TIME 9
216
0
#define UCD_LAST_CW_LEN 10
217
0
#define UCD_SCRAMBLER_ONOFF 11
218
0
#define UCD_RS_INT_DEPTH 12
219
0
#define UCD_RS_INT_BLOCK 13
220
0
#define UCD_PREAMBLE_TYPE 14
221
0
#define UCD_SCMDA_SCRAMBLER_ONOFF 15
222
0
#define UCD_SCDMA_CODES_PER_SUBFRAME 16
223
0
#define UCD_SCDMA_FRAMER_INT_STEP_SIZE 17
224
0
#define UCD_TCM_ENABLED 18
225
0
#define UCD_SUBC_INIT_RANG 19
226
0
#define UCD_SUBC_FINE_RANG 20
227
0
#define UCD_OFDMA_PROFILE 21
228
0
#define UCD_OFDMA_IR_POWER_CONTROL 22
229
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
245
246
15
#define MAP_v1 1
247
15
#define MAP_v5 5
248
15
#define MAP_PROBE_IE_PW_MASK 0x00010000
249
15
#define MAP_PROBE_IE_ST_MASK 0x00004000
250
251
0
#define RNGRSP_TIMING 1
252
0
#define RNGRSP_PWR_LEVEL_ADJ 2
253
0
#define RNGRSP_OFFSET_FREQ_ADJ 3
254
0
#define RNGRSP_TRANSMIT_EQ_ADJ 4
255
0
#define RNGRSP_RANGING_STATUS 5
256
0
#define RNGRSP_DOWN_FREQ_OVER 6
257
0
#define RNGRSP_UP_CHID_OVER 7
258
0
#define RNGRSP_TRANSMIT_EQ_SET 9
259
0
#define RNGRSP_T4_TIMEOUT_MULTIPLIER 13
260
0
#define RNGRSP_DYNAMIC_RANGE_WINDOW_UPPER_EDGE 14
261
0
#define RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS 15
262
0
#define RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS 16
263
0
#define RNGRSP_COMMANDED_POWER 17
264
0
#define RNGRSP_EXT_US_COMMANDED_POWER 18
265
266
/* Commanded Power Sub-TLVs */
267
0
#define RNGRSP_COMMANDED_POWER_DYNAMIC_RANGE_WINDOW 1
268
0
#define RNGRSP_COMMANDED_POWER_UCID_AND_POWER_LEVEL_LIST 2
269
270
271
272
/* BPKM Attributes */
273
#define BPKM_RESERVED 0
274
0
#define BPKM_SERIAL_NUM 1
275
0
#define BPKM_MANUFACTURER_ID 2
276
0
#define BPKM_MAC_ADDR 3
277
0
#define BPKM_RSA_PUB_KEY 4
278
0
#define BPKM_CM_ID 5
279
0
#define BPKM_DISPLAY_STR 6
280
0
#define BPKM_AUTH_KEY 7
281
0
#define BPKM_TEK 8
282
0
#define BPKM_KEY_LIFETIME 9
283
0
#define BPKM_KEY_SEQ_NUM 10
284
0
#define BPKM_HMAC_DIGEST 11
285
0
#define BPKM_SAID 12
286
0
#define BPKM_TEK_PARAM 13
287
0
#define BPKM_OBSOLETED 14
288
0
#define BPKM_CBC_IV 15
289
0
#define BPKM_ERROR_CODE 16
290
0
#define BPKM_CA_CERT 17
291
0
#define BPKM_CM_CERT 18
292
0
#define BPKM_SEC_CAPABILITIES 19
293
0
#define BPKM_CRYPTO_SUITE 20
294
0
#define BPKM_CRYPTO_SUITE_LIST 21
295
0
#define BPKM_BPI_VERSION 22
296
0
#define BPKM_SA_DESCRIPTOR 23
297
0
#define BPKM_SA_TYPE 24
298
0
#define BPKM_SA_QUERY 25
299
0
#define BPKM_SA_QUERY_TYPE 26
300
0
#define BPKM_IP_ADDRESS 27
301
0
#define BPKM_DNLD_PARAMS 28
302
0
#define BPKM_CVC_ROOT_CA_CERT 51
303
0
#define BPKM_CVC_CA_CERT 52
304
0
#define BPKM_DEV_CA_CERT 53
305
0
#define BPKM_ROOT_CA_CERT 54
306
0
#define BPKM_CM_NONCE 61
307
0
#define BPKM_MSG_SIGNATURE 62
308
0
#define BPKM_KEY_EXCHANGE_SHARE 63
309
0
#define BPKM_ALLOWED_BPI_VERSIONS 64
310
0
#define BPKM_OCSP_RSP 65
311
0
#define BPKM_CMTS_DESIGNATION 66
312
0
#define BPKM_CM_STATUS_CODE 67
313
0
#define BPKM_DETECTED_ERRORS 68
314
0
#define BPKM_VENDOR_DEFINED 127
315
316
0
#define DCCREQ_UP_CHAN_ID 1
317
0
#define DCCREQ_DS_PARAMS 2
318
0
#define DCCREQ_INIT_TECH 3
319
0
#define DCCREQ_UCD_SUB 4
320
0
#define DCCREQ_SAID_SUB 6
321
0
#define DCCREQ_SF_SUB 7
322
0
#define DCCREQ_CMTS_MAC_ADDR 8
323
0
#define DCCREQ_KEY_SEQ_NUM 31
324
0
#define DCCREQ_HMAC_DIGEST 27
325
326
/* Define Downstrean Parameters subtypes
327
 * These are subtype of DCCREQ_DS_PARAMS (2)
328
 */
329
330
0
#define DCCREQ_DS_FREQ 1
331
0
#define DCCREQ_DS_MOD_TYPE 2
332
0
#define DCCREQ_DS_SYM_RATE 3
333
0
#define DCCREQ_DS_INTLV_DEPTH 4
334
0
#define DCCREQ_DS_CHAN_ID 5
335
0
#define DCCREQ_DS_SYNC_SUB 6
336
0
#define DCCREQ_DS_OFDM_BLOCK_FREQ 7
337
338
/* Define Service Flow Substitution subtypes
339
 * These are subtypes of DCCREQ_SF_SUB (7)
340
 */
341
0
#define DCCREQ_SF_SFID 1
342
0
#define DCCREQ_SF_SID 2
343
0
#define DCCREQ_SF_UNSOL_GRANT_TREF 5
344
345
0
#define DCCRSP_CM_JUMP_TIME 1
346
0
#define DCCRSP_KEY_SEQ_NUM 31
347
0
#define DCCRSP_HMAC_DIGEST 27
348
349
/* Define DCC-RSP CM Jump Time subtypes
350
 * These are subtype of DCCRSP_CM_JUMP_TIME (1)
351
 */
352
0
#define DCCRSP_CM_JUMP_TIME_LENGTH 1
353
0
#define DCCRSP_CM_JUMP_TIME_START 2
354
355
0
#define DCCACK_KEY_SEQ_NUM 31
356
0
#define DCCACK_HMAC_DIGEST 27
357
358
0
#define DCD_DOWN_CLASSIFIER 23
359
0
#define DCD_DSG_RULE 50
360
0
#define DCD_DSG_CONFIG 51
361
362
/* Define Downstrean Classifier subtypes
363
 * These are subtype of DCD_DOWN_CLASSIFIER (23)
364
 */
365
366
0
#define DCD_CFR_ID 2
367
0
#define DCD_CFR_RULE_PRI 5
368
0
#define DCD_CFR_IP_CLASSIFIER 9
369
370
/* Define IP Classifier sub-subtypes
371
 * These are subtypes of DCD_CFR_IP_CLASSIFIER (23.9)
372
 */
373
0
#define DCD_CFR_IP_SOURCE_ADDR 3
374
0
#define DCD_CFR_IP_SOURCE_MASK 4
375
0
#define DCD_CFR_IP_DEST_ADDR 5
376
0
#define DCD_CFR_IP_DEST_MASK 6
377
0
#define DCD_CFR_TCPUDP_SRCPORT_START 7
378
0
#define DCD_CFR_TCPUDP_SRCPORT_END 8
379
0
#define DCD_CFR_TCPUDP_DSTPORT_START 9
380
0
#define DCD_CFR_TCPUDP_DSTPORT_END 10
381
382
/* Define DSG Rule subtypes
383
 * These are subtype of DCD_DSG_RULE (50)
384
 */
385
386
0
#define DCD_RULE_ID 1
387
0
#define DCD_RULE_PRI 2
388
0
#define DCD_RULE_UCID_RNG 3
389
0
#define DCD_RULE_CLIENT_ID 4
390
0
#define DCD_RULE_TUNL_ADDR 5
391
0
#define DCD_RULE_CFR_ID 6
392
0
#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)
395
 */
396
0
#define DCD_CLID_BCAST_ID 1
397
0
#define DCD_CLID_KNOWN_MAC_ADDR 2
398
0
#define DCD_CLID_CA_SYS_ID 3
399
0
#define DCD_CLID_APP_ID 4
400
401
/* Define DSG Configuration subtypes
402
 * These are subtype of DCD_DSG_CONFIG (51)
403
 */
404
405
0
#define DCD_CFG_CHAN_LST 1
406
0
#define DCD_CFG_TDSG1 2
407
0
#define DCD_CFG_TDSG2 3
408
0
#define DCD_CFG_TDSG3 4
409
0
#define DCD_CFG_TDSG4 5
410
0
#define DCD_CFG_VENDOR_SPEC 43
411
412
/* EM TLVs
413
 *
414
 */
415
0
#define EM_HOLDOFF_TIMER 1
416
417
/* MDD TLVs */
418
0
#define DOWNSTREAM_ACTIVE_CHANNEL_LIST 1
419
0
#define MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP 2
420
0
#define DOWNSTREAM_AMBIGUITY_RESOLUTION_FREQUENCY_LIST 3
421
0
#define RECEIVE_CHANNEL_PROFILE_REPORTING_CONTROL 4
422
0
#define IP_INITIALIZATION_PARAMETERS 5
423
0
#define EARLY_AUTHENTICATION_AND_ENCRYPTION 6
424
0
#define UPSTREAM_ACTIVE_CHANNEL_LIST 7
425
0
#define UPSTREAM_AMBIGUITY_RESOLUTION_CHANNEL_LIST 8
426
0
#define UPSTREAM_FREQUENCY_RANGE 9
427
0
#define SYMBOL_CLOCK_LOCKING_INDICATOR 10
428
0
#define CM_STATUS_EVENT_CONTROL 11
429
0
#define UPSTREAM_TRANSMIT_POWER_REPORTING 12
430
0
#define DSG_DA_TO_DSID_ASSOCIATION_ENTRY 13
431
0
#define CM_STATUS_EVENT_ENABLE_NON_CHANNEL_SPECIFIC_EVENTS 15
432
0
#define EXTENDED_UPSTREAM_TRANSMIT_POWER_SUPPORT 16
433
0
#define CMTS_DOCSIS_VERSION 17
434
0
#define CM_PERIODIC_MAINTENANCE_TIMEOUT_INDICATOR 18
435
0
#define DLS_BROADCAST_AND_MULTICAST_DELIVERY_METHOD 19
436
0
#define CM_STATUS_EVENT_ENABLE_FOR_DOCSIS_3_1_EVENTS 20
437
0
#define DIPLEXER_BAND_EDGE 21
438
0
#define ADVANCED_BAND_PLAN 22
439
0
#define MDD_BPI_PLUS 23
440
441
442
/* Downstream Active Channel List */
443
0
#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_CHANNEL_ID 1
444
0
#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_FREQUENCY 2
445
0
#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_MODULATION_ORDER_ANNEX 3
446
0
#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_PRIMARY_CAPABLE 4
447
0
#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK 5
448
0
#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_MAP_UCD_TRANSPORT_INDICATOR 6
449
0
#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_OFDM_PLC_PARAMETERS 7
450
0
#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_FDX_SUB_BAND_ID 8
451
0
#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_FDX_DS 9
452
453
/* MAC Domain Downstream Service Group */
454
0
#define MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_MD_DS_SG_IDENTIFIER 1
455
0
#define MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_CHANNEL_IDS 2
456
457
/* Modulation Orders */
458
#define QAM64 0
459
#define QAM256 1
460
461
/* Annexes */
462
#define J83_ANNEX_A 0
463
#define J83_ANNEX_B 1
464
#define J83_ANNEX_C 2
465
466
/* Primary Capable */
467
#define NOT_PRIMARY_CAPABLE 0
468
#define PRIMARY_CAPABLE 1
469
470
/* Can carry MAP and UCD */
471
#define CANNOT_CARRY_MAP_UCD 0
472
#define CAN_CARRY_MAP_UCD 1
473
474
/* Receive Channel Profile Reporting Control */
475
0
#define RCP_CENTER_FREQUENCY_SPACING 1
476
0
#define VERBOSE_RCP_REPORTING 2
477
0
#define FRAGMENTED_RCP_TRANSMISSION 3
478
479
/* Frequency spacing */
480
#define ASSUME_6MHZ_CENTER_FREQUENCY_SPACING 0
481
#define ASSUME_8MHZ_CENTER_FREQUENCY_SPACING 1
482
483
/* Verbose RCP reporting */
484
#define RCP_NO_VERBOSE_REPORTING 0
485
#define RCP_VERBOSE_REPORTING 1
486
487
/* Sub-TLVs for IP Initialization Parameters */
488
0
#define IP_PROVISIONING_MODE 1
489
0
#define PRE_REGISTRATION_DSID 2
490
491
/* IP Provisioning Modes */
492
#define IPv4_ONLY 0
493
#define IPv6_ONLY 1
494
#define IP_ALTERNATE 2
495
#define DUAL_STACK 3
496
497
/* Early authentication and encryption */
498
#define EAE_DISABLED 0
499
#define EAE_ENABLED 1
500
501
/* Upstream Active Channel List */
502
0
#define UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_ID 1
503
0
#define UPSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK 2
504
0
#define UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_PRIORITY 3
505
0
#define UPSTREAM_ACTIVE_CHANNEL_LIST_DSCHIDS_MAPS_UCDS 4
506
0
#define UPSTREAM_ACTIVE_CHANNEL_LIST_FDX_UPSTREAM_CHANNEL 5
507
0
#define UPSTREAM_ACTIVE_CHANNEL_LIST_FDX_SUBBAND_ID 6
508
509
/* Upstream Frequency Range */
510
#define STANDARD_UPSTREAM_FREQUENCY_RANGE 0
511
#define EXTENDED_UPSTREAM_FREQUENCY_RANGE 1
512
513
/* Symbol Clock Locking Indicator */
514
#define NOT_LOCKED_TO_MASTER_CLOCK 0
515
#define LOCKED_TO_MASTER_CLOCK 1
516
517
/* CM-STATUS Event Control */
518
0
#define EVENT_TYPE_CODE 1
519
0
#define MAXIMUM_EVENT_HOLDOFF_TIMER 2
520
0
#define MAXIMUM_NUMBER_OF_REPORTS_PER_EVENT 3
521
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
546
547
/* Upstream Transmit Power Reporting */
548
#define CM_DOESNT_REPORT_TRANSMIT_POWER 0
549
#define CM_REPORTS_TRANSMIT_POWER 1
550
551
/* DSG DA to DSID association entry */
552
0
#define DSG_DA_TO_DSID_ASSOCIATION_DA 1
553
0
#define DSG_DA_TO_DSID_ASSOCIATION_DSID 2
554
555
/* CMTS DOCSIS VERSION */
556
0
#define CMTS_DOCSIS_VERSION_MAJOR_PRE_40 1
557
0
#define CMTS_DOCSIS_VERSION_MINOR_PRE_40 2
558
0
#define CMTS_DOCSIS_VERSION_MAJOR 3
559
0
#define CMTS_DOCSIS_VERSION_MINOR 4
560
0
#define CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE 5
561
15
#define CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDD 0x01
562
15
#define CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDX 0x02
563
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
570
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
577
578
/* Define Sub carrier spacing */
579
#define SPACING_25KHZ 0
580
#define SPACING_50KHZ 1
581
582
0
#define SEC_CH_MDD_TIMEOUT 1
583
0
#define QAM_FEC_LOCK_FAILURE 2
584
0
#define SEQ_OUT_OF_RANGE 3
585
0
#define SEC_CH_MDD_RECOVERY 4
586
0
#define QAM_FEC_LOCK_RECOVERY 5
587
0
#define T4_TIMEOUT 6
588
0
#define T3_RETRIES_EXCEEDED 7
589
0
#define SUCCESS_RANGING_AFTER_T3_RETRIES_EXCEEDED 8
590
0
#define CM_ON_BATTERY 9
591
0
#define CM_ON_AC_POWER 10
592
0
#define MAC_REMOVAL_EVENT 11
593
0
#define DS_OFDM_PROFILE_FAILURE 16
594
0
#define PRIMARY_DOWNSTREAM_CHANGE 17
595
0
#define DPD_MISMATCH 18
596
0
#define NCP_PROFILE_FAILURE 20
597
0
#define PLC_FAILURE 21
598
0
#define NCP_PROFILE_RECOVERY 22
599
0
#define PLC_RECOVERY 23
600
0
#define OFDM_PROFILE_RECOVERY 24
601
0
#define OFDMA_PROFILE_FAILURE 25
602
0
#define MAP_STORAGE_OVERFLOW_INDICATOR 26
603
0
#define MAP_STORAGE_ALMOST_FULL_INDICATOR 27
604
605
0
#define STATUS_EVENT 1
606
607
0
#define EVENT_DESCR 2
608
0
#define EVENT_DS_CH_ID 4
609
0
#define EVENT_US_CH_ID 5
610
0
#define EVENT_DSID 6
611
0
#define EVENT_MAC_ADDRESS 7
612
0
#define EVENT_DS_OFDM_PROFILE_ID 8
613
0
#define EVENT_US_OFDMA_PROFILE_ID 9
614
615
0
#define CM_CTRL_MUTE 1
616
0
#define CM_CTRL_MUTE_TIMEOUT 2
617
0
#define CM_CTRL_REINIT 3
618
0
#define CM_CTRL_DISABLE_FWD 4
619
0
#define CM_CTRL_DS_EVENT 5
620
0
#define CM_CTRL_US_EVENT 6
621
0
#define CM_CTRL_EVENT 7
622
623
0
#define DS_EVENT_CH_ID 1
624
0
#define DS_EVENT_MASK 2
625
626
0
#define US_EVENT_CH_ID 1
627
0
#define US_EVENT_MASK 2
628
629
/* OCD */
630
0
#define DISCRETE_FOURIER_TRANSFORM_SIZE 0
631
0
#define CYCLIC_PREFIX 1
632
0
#define ROLL_OFF 2
633
0
#define OFDM_SPECTRUM_LOCATION 3
634
0
#define TIME_INTERLEAVING_DEPTH 4
635
0
#define SUBCARRIER_ASSIGNMENT_RANGE_LIST 5
636
0
#define PRIMARY_CAPABILITY_INDICATOR 6
637
0
#define FDX_INDICATOR 7
638
639
/* DPD */
640
0
#define SUBCARRIER_ASSIGNMENT_VECTOR 6
641
642
0
#define SUBCARRIER_ASSIGNMENT_RANGE_CONT 0
643
0
#define SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1 1
644
0
#define SUBCARRIER_ASSIGNMENT_LIST 2
645
646
0
#define OPT_REQ_REQ_STAT 1
647
0
#define OPT_REQ_RXMER_THRESH_PARAMS 2
648
0
#define OPT_REQ_RXMER_THRESH_PARAMS_MODULATION_ORDER 1
649
0
#define OPT_REQ_TRIGGER_DEFINITION 7
650
0
#define OPT_REQ_TRIGGER_DEFINITION_TRIGGER_TYPE 1
651
0
#define OPT_REQ_TRIGGER_DEFINITION_MEASUREMENT_DURATION 2
652
0
#define OPT_REQ_TRIGGER_DEFINITION_TRIGGERING_SID 3
653
0
#define OPT_REQ_TRIGGER_DEFINITION_US_CHANNEL_ID 4
654
0
#define OPT_REQ_TRIGGER_DEFINITION_OUDP_SOUND_AMBIG_OFFSET 5
655
0
#define OPT_REQ_TRIGGER_DEFINITION_RXMER_TO_REPORT 6
656
0
#define OPT_REQ_TRIGGER_DEFINITION_START_TIME 7
657
658
0
#define OPT_RSP_RXMER 1
659
0
#define OPT_RSP_DATA_CW 2
660
0
#define OPT_RSP_NCP_FIELDS 3
661
662
0
#define OPT_RSP_RXMER_SUBCARRIER 1
663
0
#define OPT_RSP_RXMER_SUBCARRIER_THRESHOLD 2
664
0
#define OPT_RSP_RXMER_SUBCARRIER_THRESHOLD_COUNT 3
665
0
#define OPT_RSP_RXMER_SNR_MARGIN 4
666
0
#define OPT_RSP_RXMER_AVG 5
667
0
#define OPT_RSP_RXMER_ECT_RBA_SUBBAND_DIRECTION 6
668
669
0
#define OPT_RSP_DATA_CW_COUNT 1
670
0
#define OPT_RSP_DATA_CW_CORRECTED 2
671
0
#define OPT_RSP_DATA_CW_UNCORRECTABLE 3
672
0
#define OPT_RSP_DATA_CW_THRESHOLD_COMPARISON 4
673
674
0
#define OPT_RSP_NCP_FIELDS_COUNT 1
675
0
#define OPT_RSP_NCP_FIELDS_FAILURE 2
676
0
#define OPT_RSP_NCP_FIELDS_THRESHOLD_COMPARISON 3
677
678
0
#define DIPLEXER_US_UPPER_BAND_EDGE 1
679
0
#define DIPLEXER_DS_LOWER_BAND_EDGE 2
680
0
#define DIPLEXER_DS_UPPER_BAND_EDGE 3
681
0
#define DIPLEXER_US_UPPER_BAND_EDGE_OVERRIDE 4
682
0
#define DIPLEXER_DS_LOWER_BAND_EDGE_OVERRIDE 5
683
0
#define DIPLEXER_DS_UPPER_BAND_EDGE_OVERRIDE 6
684
685
/* MDD Advanced Band Plan */
686
0
#define MDD_ABP_SUB_BAND_COUNT 2
687
0
#define MDD_ABP_SUB_BAND_WIDTH 3
688
689
/* MDD BPI+ */
690
0
#define MDD_BPI_PLUS_VERSION 1
691
0
#define MDD_BPI_PLUS_CFG 2
692
693
0
#define KEY_MGMT_VERSION 0
694
0
#define KEY_MGMT_MULTIPART 1
695
696
/* CWT-REQ and CWT-RSP */
697
0
#define CWT_PHASE_ROTATION 1
698
0
#define CWT_MAX_DURATION 2
699
0
#define CWT_US_ENCODINGS 3
700
0
#define CWT_US_ENCODINGS_CID 1
701
0
#define CWT_US_ENCODINGS_SC_INDEX 2
702
0
#define CWT_US_ENCODINGS_POWER_BOOST 3
703
704
/* ECT-REQ and ECT-RSP */
705
0
#define ECT_CONTROL 87
706
0
#define ECT_CONTROL_SUBBAND_DIRECTION 1
707
0
#define ECT_CONTROL_STATUS 2
708
0
#define ECT_CONTROL_METHOD 3
709
0
#define ECT_CONTROL_METHOD_FG 1
710
0
#define ECT_CONTROL_METHOD_FG_DURATION 1
711
0
#define ECT_CONTROL_METHOD_FG_PERIODICITY 2
712
0
#define ECT_CONTROL_METHOD_FG_EXPIRATION_TIME 3
713
0
#define ECT_CONTROL_METHOD_FG_DS_ZBL 4
714
0
#define ECT_CONTROL_METHOD_BG 2
715
0
#define ECT_CONTROL_METHOD_BG_DURATION 1
716
0
#define ECT_CONTROL_METHOD_BG_PERIODICITY 2
717
0
#define ECT_CONTROL_METHOD_BG_EXPIRATION_TIME 3
718
0
#define ECT_CONTROL_METHOD_BG_START_TIME 4
719
0
#define ECT_CONTROL_PARTIAL_SERVICE 4
720
0
#define ECT_CONTROL_PARTIAL_SERVICE_DCID 1
721
0
#define ECT_CONTROL_PARTIAL_SERVICE_UCID 2
722
0
#define ECT_CONTROL_DEFERRAL_TIME 5
723
0
#define ECT_CONTROL_RXMER_DURATION 6
724
725
/* BPKM CMTS Designation */
726
0
#define BPKMATTR_CMTS_DESIGNATION_CERTIFICATE_FINGERPRINT 0
727
0
#define BPKMATTR_CMTS_DESIGNATION_COMMON_NAME 1
728
0
#define BPKMATTR_CMTS_DESIGNATION_ORG_UNIT 2
729
0
#define BPKMATTR_CMTS_DESIGNATION_ORG_NAME 3
730
0
#define BPKMATTR_CMTS_DESIGNATION_SERIAL_NUMBER 4
731
0
#define BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_FINGERPRINT 5
732
0
#define BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_COMMON_NAME 6
733
0
#define BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_ORG_UNIT 7
734
0
#define BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_ORG_NAME 8
735
0
#define BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_SERIAL_NUMBER 9
736
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;
794
795
static int hf_docsis_sync_cmts_timestamp;
796
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;
864
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;
886
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;
898
899
static int hf_docsis_map_rsvd;
900
static int hf_docsis_map_rsvd_v5;
901
static int hf_docsis_map_cat;
902
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;
915
916
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;
922
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;
950
951
952
static int hf_docsis_regreq_sid;
953
static int hf_docsis_regrsp_sid;
954
static int hf_docsis_regrsp_response;
955
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;
1019
1020
static int hf_docsis_regack_sid;
1021
static int hf_docsis_regack_response;
1022
1023
static int hf_docsis_dsarsp_response;
1024
static int hf_docsis_dsaack_response;
1025
1026
static int hf_docsis_dscrsp_response;
1027
static int hf_docsis_dscack_response;
1028
1029
static int hf_docsis_dsdreq_rsvd;
1030
static int hf_docsis_dsdreq_sfid;
1031
1032
static int hf_docsis_dsdrsp_confcode;
1033
static int hf_docsis_dsdrsp_rsvd;
1034
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;
1076
1077
static int hf_docsis_intrngreq_sid;
1078
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;
1120
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;
1191
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;
1204
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;
1220
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;
1229
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;
1235
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;
1242
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;
1247
1248
static int hf_docsis_dbcreq_number_of_fragments;
1249
static int hf_docsis_dbcreq_fragment_sequence_number;
1250
1251
static int hf_docsis_dbcrsp_conf_code;
1252
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;
1260
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;
1297
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;
1316
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;
1324
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;
1334
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;
1352
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;
1370
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;
1400
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;
1432
1433
static int hf_docsis_optack_prof_id;
1434
static int hf_docsis_optack_reserved;
1435
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;
1447
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;
1464
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;
1500
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;
1508
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;
1527
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;
1539
1540
static int hf_docsis_tlv_reassembled;
1541
1542
static int ett_docsis_sync;
1543
1544
static int ett_docsis_ucd;
1545
static int ett_docsis_tlv;
1546
static int ett_docsis_burst_tlv;
1547
1548
static int ett_docsis_map;
1549
static int ett_docsis_map_ie;
1550
static int ett_docsis_map_probe_ie;
1551
1552
1553
static int ett_docsis_rngreq;
1554
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;
1561
1562
1563
static int ett_docsis_regreq;
1564
static int ett_docsis_regrsp;
1565
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;
1570
1571
static int ett_docsis_uccreq;
1572
static int ett_docsis_uccrsp;
1573
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;
1589
1590
static int ett_docsis_regack;
1591
1592
static int ett_docsis_dsareq;
1593
static int ett_docsis_dsarsp;
1594
static int ett_docsis_dsaack;
1595
1596
static int ett_docsis_dscreq;
1597
static int ett_docsis_dscrsp;
1598
static int ett_docsis_dscack;
1599
1600
static int ett_docsis_dsdreq;
1601
static int ett_docsis_dsdrsp;
1602
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;
1612
1613
static int ett_docsis_intrngreq;
1614
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;
1622
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;
1640
1641
static int ett_docsis_bintrngreq;
1642
1643
static int ett_docsis_dbcreq;
1644
static int ett_docsis_dbcrsp;
1645
static int ett_docsis_dbcack;
1646
1647
static int ett_docsis_dpvreq;
1648
static int ett_docsis_dpvrsp;
1649
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;
1655
1656
static int ett_docsis_cmstatusack;
1657
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;
1664
1665
static int ett_docsis_regreqmp;
1666
static int ett_docsis_regrspmp;
1667
1668
static int ett_docsis_ocd;
1669
static int ett_docsis_ocd_tlv;
1670
static int ett_docsis_ocd_tlvtlv;
1671
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;
1677
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;
1685
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;
1692
1693
static int ett_docsis_optack;
1694
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;
1706
1707
static int ett_docsis_mgmt;
1708
static int ett_mgmt_pay;
1709
1710
static int ett_docsis_tlv_fragments;
1711
static int ett_docsis_tlv_fragment;
1712
static int ett_docsis_tlv_reassembled;
1713
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;
1721
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;
1726
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}
1763
};
1764
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}
1789
};
1790
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}
1863
};
1864
1865
static const value_string on_off_vals[] = {
1866
  {1, "On"},
1867
  {2, "Off"},
1868
  {0, NULL}
1869
};
1870
1871
static const value_string inhibit_allow_vals[] = {
1872
  {0, "Inhibit Initial Ranging"},
1873
  {1, "Ranging Allowed"},
1874
  {0, NULL},
1875
};
1876
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}
1886
};
1887
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}
1905
};
1906
1907
static const true_false_string pw_vals = {"transmit using alternate power setting specified by the Start Subc field.", "transmit using normal power settings"};
1908
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}
1916
};
1917
1918
static const value_string last_cw_len_vals[] = {
1919
  {1, "Fixed"},
1920
  {2, "Shortened"},
1921
  {0, NULL}
1922
};
1923
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}
1929
};
1930
1931
static const value_string rng_stat_vals[] = {
1932
  {1, "Continue"},
1933
  {2, "Abort"},
1934
  {3, "Success"},
1935
  {0, NULL}
1936
};
1937
1938
static void
1939
two_compl_frac(
1940
    char *buf,
1941
    int16_t value)
1942
0
{
1943
0
    int16_t frac = value;
1944
1945
1946
0
    snprintf(buf, ITEM_LABEL_LENGTH,
1947
0
        "%f",
1948
0
        frac/16384.0);
1949
0
}
1950
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}
1967
};
1968
1969
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}
1974
};
1975
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},
1991
};
1992
1993
static const value_string ds_mod_type_vals[] = {
1994
  {0 , "64 QAM"},
1995
  {1 , "256 QAM"},
1996
  {0, NULL}
1997
};
1998
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}
2004
};
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}
2012
};
2013
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}
2025
};
2026
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}
2036
};
2037
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}
2043
};
2044
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}
2050
};
2051
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}
2056
};
2057
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}
2062
};
2063
2064
static const value_string max_scheduled_codes_vals[] = {
2065
  {1, "Enabled"},
2066
  {2, "Disabled"},
2067
  {0, NULL}
2068
};
2069
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}
2075
};
2076
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}
2082
};
2083
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}
2093
};
2094
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}
2101
};
2102
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}
2113
};
2114
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}
2123
};
2124
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}
2130
};
2131
2132
static const value_string modulation_order_vals[] = {
2133
  {QAM64,  "64-QAM"},
2134
  {QAM256, "256-QAM"},
2135
  {0, NULL}
2136
};
2137
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}
2143
};
2144
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}
2149
};
2150
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}
2155
};
2156
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}
2164
};
2165
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}
2173
};
2174
2175
static const value_string spacing_vals[] = {
2176
  {SPACING_25KHZ, "25kHz"},
2177
  {SPACING_50KHZ, "50kHz"},
2178
  {0, NULL}
2179
};
2180
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}
2225
};
2226
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},
2241
};
2242
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}
2249
};
2250
2251
static const value_string bpkm_crypto_suite_auth_vals[] = {
2252
  {0x00, "No"},
2253
  {0, NULL}
2254
};
2255
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}
2263
};
2264
2265
static const value_string bpi_ver_vals[] = {
2266
  {0, "Reserved"},
2267
  {1, "BPI+ v1"},
2268
  {2, "BPI+ v2"},
2269
  {0, NULL}
2270
};
2271
2272
static const value_string bpi_sa_vals[] = {
2273
  {0, "Primary"},
2274
  {1, "Static"},
2275
  {2, "Dynamic"},
2276
  {0, NULL}
2277
};
2278
2279
static const range_string bpi_sa_query_type_vals[] = {
2280
  {1, 1,     "IP Multicast"},
2281
  {128, 255, "Vendor Specific"},
2282
  {0, 0, NULL}
2283
};
2284
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}
2297
};
2298
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}
2329
};
2330
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}
2355
};
2356
2357
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}
2362
};
2363
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}
2368
};
2369
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}
2373
};
2374
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}
2381
};
2382
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}
2387
};
2388
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}
2393
};
2394
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}
2399
};
2400
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}
2426
};
2427
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}
2432
};
2433
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}
2439
};
2440
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}
2445
};
2446
2447
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}
2459
};
2460
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}
2465
};
2466
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}
2472
};
2473
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}
2478
};
2479
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}
2488
};
2489
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}
2495
};
2496
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}
2501
};
2502
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}
2509
};
2510
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}
2519
};
2520
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}
2528
};
2529
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}
2534
};
2535
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}
2541
};
2542
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}
2548
};
2549
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}
2556
};
2557
2558
static const value_string mdd_abp_sub_band_width_vals[] = {
2559
  {0, "96 MHz"},
2560
  {1, "192 MHz"},
2561
  {0, NULL}
2562
};
2563
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}
2571
};
2572
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}
2577
};
2578
2579
static const value_string cmstatus_tlv_vals[] = {
2580
  {STATUS_EVENT, "Status Event"},
2581
  {0, NULL}
2582
};
2583
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}
2593
};
2594
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}
2604
};
2605
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}
2610
};
2611
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}
2616
};
2617
2618
static const value_string emrsp_tlv_vals[] = {
2619
  {EM_HOLDOFF_TIMER, "Hold-Off Timer"},
2620
  {0, NULL}
2621
};
2622
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}
2628
};
2629
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}
2637
};
2638
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}
2645
};
2646
2647
static const value_string docsis_ocd_subc_assign_value_str[] = {
2648
  {0, "specific value"},
2649
  {1, "default value"},
2650
  {0, NULL}
2651
};
2652
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}
2658
};
2659
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}
2664
};
2665
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}
2673
};
2674
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}
2682
};
2683
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}
2688
};
2689
2690
static const value_string docsis_ocd_fdx_ind_str[] = {
2691
  {1, "FDX Channel"},
2692
  {0, NULL}
2693
};
2694
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}
2705
};
2706
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}
2713
};
2714
2715
static const value_string docsis_dpd_subc_assign_value_str[] = {
2716
  {0, "specific value"},
2717
  {1, "default value"},
2718
  {0, NULL}
2719
};
2720
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}
2739
};
2740
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}
2745
};
2746
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}
2765
};
2766
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}
2771
};
2772
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}
2786
};
2787
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}
2798
};
2799
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}
2804
};
2805
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}
2821
};
2822
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}
2843
};
2844
2845
static const value_string opt_opcode_vals[] = {
2846
  {1, "Start"},
2847
  {2, "Abort"},
2848
  {3, "FDX Triggered Start"},
2849
  {0, NULL}
2850
};
2851
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}
2862
};
2863
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}
2869
};
2870
2871
static const value_string optreq_tlv_rxmer_thresh_params_vals[] = {
2872
  {OPT_REQ_RXMER_THRESH_PARAMS_MODULATION_ORDER, "Modulation Order"},
2873
  {0, NULL}
2874
};
2875
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}
2894
};
2895
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}
2905
};
2906
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}
2912
};
2913
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}
2919
};
2920
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}
2926
};
2927
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}
2936
};
2937
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}
2944
};
2945
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}
2950
};
2951
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}
2957
};
2958
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}
2963
};
2964
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}
2971
};
2972
2973
static const value_string rba_subband_direction_vals [] = {
2974
  {0, "Downstream"},
2975
  {1, "Upstream"},
2976
  {2, "Undefined for this RBA"},
2977
  {0, NULL}
2978
};
2979
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}
2984
};
2985
2986
static const value_string cwt_op_code_vals [] = {
2987
  {1, "Start"},
2988
  {2, "Stop"},
2989
  {0, NULL}
2990
};
2991
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}
2999
};
3000
static const value_string cwt_tlv_vals [] = {
3001
  {1, "Phase Rotation"},
3002
  {2, "Maximum Duration"},
3003
  {3, "Upstream Encodings"},
3004
  {0, NULL}
3005
};
3006
3007
static const value_string cwt_phase_rotation_vals [] = {
3008
  {1, "pi/2"},
3009
  {2, "2pi/3"},
3010
  {3, "pi"},
3011
  {0, NULL}
3012
};
3013
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}
3019
};
3020
3021
static void ect_trans_id_val(char *buf, uint16_t value)
3022
0
{
3023
0
  if (value == 255)
3024
0
    snprintf(buf, ITEM_LABEL_LENGTH, "unsolicited ECT-RSP message");
3025
0
  else
3026
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
3027
0
}
3028
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}
3035
};
3036
3037
/* ECT TLVs */
3038
static const value_string ect_tlv_vals [] = {
3039
  {87, "Control Encodings"},
3040
  {0, NULL}
3041
};
3042
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}
3052
};
3053
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}
3061
};
3062
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}
3071
};
3072
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}
3080
};
3081
3082
/* TLV 87.3.1.1, 8.6 */
3083
static const unit_name_string units_symbols = { " symbol", " symbols" };
3084
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}
3090
};
3091
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}
3099
};
3100
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}
3106
};
3107
3108
/* TLV 87.3.1.4 */
3109
static void ect_deferral_time_val(char *buf, uint16_t value)
3110
0
{
3111
0
  switch(value)
3112
0
  {
3113
0
  case 0:
3114
0
    snprintf(buf, ITEM_LABEL_LENGTH, "Next time the RBA sub-band direction set is active");
3115
0
    break;
3116
0
  case 1:
3117
0
    snprintf(buf, ITEM_LABEL_LENGTH, "When the channel(s) in the RBA on which partial service occurred have recovered");
3118
0
    break;
3119
0
  default:
3120
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%d ms", value);
3121
0
  }
3122
0
}
3123
3124
static const range_string dpr_tg_id_vals [] = {
3125
  {0x01, 0xff, "TG ID"},
3126
  {0x00, 0x00, "All Transmission Groups"},
3127
  {0, 0, NULL}
3128
};
3129
3130
static const true_false_string tfs_ucd_change_ind_vals = {"Changes", "No changes"};
3131
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" };
3135
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."
3139
};
3140
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."
3144
};
3145
3146
static const value_string unique_unlimited[] = {
3147
  { 0, "Unlimited" },
3148
  {0, NULL}
3149
};
3150
3151
static void
3152
ofdma_ir_pow_ctrl_start_pow(char *buf, uint32_t value)
3153
0
{
3154
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%.2f dBmV/1.6MHz", value/4.0);
3155
0
}
3156
3157
static void
3158
ofdma_ir_pow_ctrl_step_size(char *buf, uint32_t value)
3159
0
{
3160
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%.2f dB", value/4.0);
3161
0
}
3162
3163
static void
3164
fourth_db(char *buf, uint32_t value)
3165
0
{
3166
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%.2f dB", value/4.0);
3167
0
}
3168
3169
static void
3170
d30_time_ticks(char *buf, uint32_t value)
3171
0
{
3172
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u 10.24 MHz time ticks (%.3f "UTF8_MICRO_SIGN"s)",
3173
0
             value, value/10.24);
3174
0
}
3175
3176
static void
3177
subc_assign_range(char *buf, uint32_t value)
3178
0
{
3179
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u - %u", value >> 16, value &0xFFFF);
3180
0
}
3181
3182
static void
3183
multipart_number_of_fragments(char *buf, uint32_t value)
3184
0
{
3185
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u (Actual Number of Fragments: %u)", value, value + 1);
3186
0
}
3187
3188
/* table with an ID consisting of MMM Type as MSB and 3 type-specific LSB */
3189
static reassembly_table docsis_tlv_reassembly_table;
3190
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"
3206
};
3207
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)
3211
0
{
3212
  /* Multipart MMM messages from version 5 onwards */
3213
0
  unsigned version, multipart = 0, fragment, last_fragment, tlv_byte_count;
3214
0
  address save_src, save_dst;
3215
3216
0
  version = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_docsis_mgmt, KEY_MGMT_VERSION));
3217
0
  if (version > 4)
3218
0
    multipart = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_docsis_mgmt, KEY_MGMT_MULTIPART));
3219
0
  if (!multipart)
3220
0
    return tvb_new_subset_remaining(tvb, fixed_byte_count);
3221
3222
0
  id += mmm_type << 24;
3223
0
  fragment = multipart & 0x0F;
3224
0
  last_fragment = multipart >> 4;
3225
0
  tlv_byte_count = tvb_reported_length_remaining(tvb, fixed_byte_count);
3226
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
0
  copy_address_shallow(&save_src, &pinfo->src);
3230
0
  copy_address_shallow(&save_dst, &pinfo->dst);
3231
  /* Use dl_src and dl_dst in defragmentation. */
3232
0
  copy_address_shallow(&pinfo->src, &pinfo->dl_src);
3233
0
  copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
3234
3235
0
  fragment_head *fh = fragment_add_seq_check(&docsis_tlv_reassembly_table, tvb, fixed_byte_count, pinfo, id, NULL,
3236
0
                                             fragment, tlv_byte_count, (fragment != last_fragment));
3237
3238
  /* Restore address pointers. */
3239
0
  copy_address_shallow(&pinfo->src, &save_src);
3240
0
  copy_address_shallow(&pinfo->dst, &save_dst);
3241
3242
0
  if (fh)
3243
0
    return process_reassembled_data(tvb, fixed_byte_count, pinfo, "Reassembled TLVs", fh, &docsis_tlv_frag_items,
3244
0
                                    NULL, tree);
3245
0
  return NULL;
3246
0
}
3247
3248
static int
3249
dissect_sync (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
3250
0
{
3251
0
  proto_item *it;
3252
0
  proto_tree *sync_tree;
3253
3254
0
  col_set_str(pinfo->cinfo, COL_INFO, "Sync Message");
3255
3256
0
  it = proto_tree_add_item(tree, proto_docsis_sync, tvb, 0, -1, ENC_NA);
3257
0
  sync_tree = proto_item_add_subtree (it, ett_docsis_sync);
3258
3259
0
  proto_tree_add_item (sync_tree, hf_docsis_sync_cmts_timestamp, tvb, 0, 4, ENC_BIG_ENDIAN);
3260
3261
0
  return tvb_captured_length(tvb);
3262
0
}
3263
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)
3266
0
{
3267
0
  int tlvpos, endtlvpos;
3268
0
  uint8_t tlvtype;
3269
0
  uint32_t i, tlvlen;
3270
0
  proto_tree *burst_tree;
3271
0
  proto_item *burst_item, *burst_len_item;
3272
0
  unsigned iuc;
3273
3274
0
  tlvpos = pos;
3275
0
  endtlvpos = tlvpos + len;
3276
0
  proto_tree_add_item_ret_uint (tree, hf_docsis_ucd_iuc, tvb, tlvpos++, 1, ENC_BIG_ENDIAN, &iuc);
3277
0
  proto_item_append_text(item, ": IUC %d (%s)", iuc, val_to_str_const(iuc,iuc_vals, "Unknown IUC"));
3278
0
  while (tlvpos < endtlvpos)
3279
0
  {
3280
0
    tlvtype = tvb_get_uint8 (tvb, tlvpos);
3281
0
    burst_tree = proto_tree_add_subtree (tree, tvb, tlvpos, -1,
3282
0
                                                        ett_docsis_burst_tlv, &burst_item,
3283
0
                                                        val_to_str(pinfo->pool, tlvtype, burst_tlv_vals,
3284
0
                                                        "Unknown TLV (%u)"));
3285
0
    proto_tree_add_uint (burst_tree, hf_docsis_ucd_burst_type, tvb, tlvpos++, 1, tlvtype);
3286
0
    burst_len_item = proto_tree_add_item_ret_uint (burst_tree, hf_docsis_ucd_burst_length, tvb, tlvpos++, 1, ENC_NA, &tlvlen);
3287
0
    proto_item_set_len(burst_item, tlvlen + 2);
3288
0
    switch (tlvtype)
3289
0
    {
3290
0
    case UCD_MODULATION:
3291
0
      if (tlvlen == 1)
3292
0
      {
3293
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_mod_type, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3294
0
      }
3295
0
      else
3296
0
      {
3297
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3298
0
      }
3299
0
      break;
3300
0
    case UCD_DIFF_ENCODING:
3301
0
      if (tlvlen == 1)
3302
0
      {
3303
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_diff_encoding, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3304
0
      }
3305
0
      else
3306
0
      {
3307
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3308
0
      }
3309
0
      break;
3310
0
    case UCD_PREAMBLE_LEN:
3311
0
      if (tlvlen == 2)
3312
0
      {
3313
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_preamble_len, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3314
0
      }
3315
0
      else
3316
0
      {
3317
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3318
0
      }
3319
0
      break;
3320
0
    case UCD_PREAMBLE_VAL_OFF:
3321
0
      if (tlvlen == 2)
3322
0
      {
3323
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_preamble_val_off, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3324
0
      }
3325
0
      else
3326
0
      {
3327
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3328
0
      }
3329
0
      break;
3330
0
    case UCD_FEC:
3331
0
      if (tlvlen == 1)
3332
0
      {
3333
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_fec, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3334
0
      }
3335
0
      else
3336
0
      {
3337
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3338
0
      }
3339
0
      break;
3340
0
    case UCD_FEC_CODEWORD:
3341
0
      if (tlvlen == 1)
3342
0
      {
3343
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_fec_codeword, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3344
0
      }
3345
0
      else
3346
0
      {
3347
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3348
0
      }
3349
0
      break;
3350
0
    case UCD_SCRAMBLER_SEED:
3351
0
      if (tlvlen == 2)
3352
0
      {
3353
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_scrambler_seed, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3354
0
      }
3355
0
      else
3356
0
      {
3357
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3358
0
      }
3359
0
      break;
3360
0
    case UCD_MAX_BURST:
3361
0
      if (tlvlen == 1)
3362
0
      {
3363
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_max_burst, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3364
0
      }
3365
0
      else
3366
0
      {
3367
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3368
0
      }
3369
0
      break;
3370
0
    case UCD_GUARD_TIME:
3371
0
      if (tlvlen == 1)
3372
0
      {
3373
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_guard_time, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3374
0
      }
3375
0
      else
3376
0
      {
3377
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3378
0
      }
3379
0
      break;
3380
0
    case UCD_LAST_CW_LEN:
3381
0
      if (tlvlen == 1)
3382
0
      {
3383
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_last_cw_len, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3384
0
      }
3385
0
      else
3386
0
      {
3387
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3388
0
      }
3389
0
      break;
3390
0
    case UCD_SCRAMBLER_ONOFF:
3391
0
      if (tlvlen == 1)
3392
0
      {
3393
0
        proto_tree_add_item (burst_tree, hf_docsis_burst_scrambler_onoff, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3394
0
      }
3395
0
      else
3396
0
      {
3397
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3398
0
      }
3399
0
      break;
3400
0
    case UCD_RS_INT_DEPTH:
3401
0
      if (tlvlen == 1)
3402
0
      {
3403
0
        proto_tree_add_item (burst_tree, hf_docsis_rs_int_depth, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3404
0
      }
3405
0
      else
3406
0
      {
3407
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3408
0
      }
3409
0
      break;
3410
0
    case UCD_RS_INT_BLOCK:
3411
0
      if (tlvlen == 2)
3412
0
      {
3413
0
        proto_tree_add_item (burst_tree, hf_docsis_rs_int_block, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3414
0
      }
3415
0
      else
3416
0
      {
3417
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3418
0
      }
3419
0
      break;
3420
0
    case UCD_PREAMBLE_TYPE:
3421
0
      if (tlvlen == 1)
3422
0
      {
3423
0
        proto_tree_add_item (burst_tree, hf_docsis_preamble_type, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3424
0
      }
3425
0
      else
3426
0
      {
3427
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3428
0
      }
3429
0
      break;
3430
0
    case UCD_SCMDA_SCRAMBLER_ONOFF:
3431
0
      if (tlvlen == 1)
3432
0
      {
3433
0
        proto_tree_add_item (burst_tree, hf_docsis_ucd_scdma_scrambler_onoff, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3434
0
      }
3435
0
      else
3436
0
      {
3437
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3438
0
      }
3439
0
      break;
3440
0
    case UCD_SCDMA_CODES_PER_SUBFRAME:
3441
0
      if (tlvlen == 1)
3442
0
      {
3443
0
        proto_tree_add_item (burst_tree, hf_docsis_ucd_scdma_codes_per_subframe, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3444
0
      }
3445
0
      else
3446
0
      {
3447
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3448
0
      }
3449
0
      break;
3450
0
    case UCD_SCDMA_FRAMER_INT_STEP_SIZE:
3451
0
      if (tlvlen == 1)
3452
0
      {
3453
0
        proto_tree_add_item (burst_tree, hf_docsis_ucd_scdma_framer_int_step_size, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3454
0
      }
3455
0
      else
3456
0
      {
3457
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3458
0
      }
3459
0
      break;
3460
0
    case UCD_TCM_ENABLED:
3461
0
      if (tlvlen == 1)
3462
0
      {
3463
0
        proto_tree_add_item (burst_tree, hf_docsis_ucd_tcm_enabled, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3464
0
      }
3465
0
      else
3466
0
      {
3467
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3468
0
      }
3469
0
      break;
3470
0
    case UCD_SUBC_INIT_RANG:
3471
0
      if (tlvlen == 2)
3472
0
      {
3473
0
        proto_tree_add_item (burst_tree, hf_docsis_subc_init_rang, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3474
0
      }
3475
0
      else
3476
0
      {
3477
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3478
0
      }
3479
0
      break;
3480
0
    case UCD_SUBC_FINE_RANG:
3481
0
      if (tlvlen == 2)
3482
0
      {
3483
0
        proto_tree_add_item (burst_tree, hf_docsis_subc_fine_rang, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3484
0
      }
3485
0
      else
3486
0
      {
3487
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3488
0
      }
3489
0
      break;
3490
0
    case UCD_OFDMA_PROFILE:
3491
0
      if ((tlvlen % 2) == 0)
3492
0
      {
3493
0
        for(i =0; i < tlvlen; i+=2) {
3494
0
          proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_mod_order, tvb, tlvpos + i, 1, ENC_BIG_ENDIAN);
3495
0
          proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_pilot_pattern, tvb, tlvpos + i, 1, ENC_BIG_ENDIAN);
3496
0
          proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_num_add_minislots, tvb, tlvpos + i + 1, 1, ENC_BIG_ENDIAN);
3497
0
        }
3498
0
      }
3499
0
      else
3500
0
      {
3501
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u (even length expected)", tlvlen);
3502
0
      }
3503
0
      break;
3504
0
    case UCD_OFDMA_IR_POWER_CONTROL:
3505
0
      if (tlvlen == 2)
3506
0
      {
3507
0
        proto_tree_add_item (burst_tree, hf_docsis_ofdma_ir_pow_ctrl_start_pow, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
3508
0
        proto_tree_add_item (burst_tree, hf_docsis_ofdma_ir_pow_ctrl_step_size, tvb, tlvpos + 1, tlvlen, ENC_BIG_ENDIAN);
3509
0
      }
3510
0
      else
3511
0
      {
3512
0
        expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
3513
0
      }
3514
0
      break;
3515
3516
0
    } /* switch(tlvtype) */
3517
3518
0
  tlvpos += tlvlen;
3519
0
  } /* while (tlvpos < endtlvpos) */
3520
3521
0
}
3522
3523
static int
3524
dissect_any_ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, int proto_id, int type_number)
3525
0
{
3526
0
  int pos;
3527
0
  uint32_t i, upchid, length;
3528
0
  uint8_t type, symrate;
3529
0
  proto_tree *ucd_tree, *tlv_tree;
3530
0
  proto_item *ucd_item, *tlv_item, *tlv_len_item;
3531
3532
0
  ucd_item = proto_tree_add_item(tree, proto_id, tvb, 0, -1, ENC_NA);
3533
0
  ucd_tree = proto_item_add_subtree (ucd_item, ett_docsis_ucd);
3534
0
  proto_tree_add_item_ret_uint (ucd_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &upchid);
3535
0
  proto_tree_add_item (ucd_tree, hf_docsis_ucd_config_ch_cnt, tvb, 1, 1, ENC_BIG_ENDIAN);
3536
0
  proto_tree_add_item (ucd_tree, hf_docsis_ucd_mini_slot_size, tvb, 2, 1, ENC_BIG_ENDIAN);
3537
0
  proto_tree_add_item (ucd_tree, hf_docsis_mgt_down_chid, tvb, 3, 1, ENC_BIG_ENDIAN);
3538
3539
  /* if the upstream Channel ID is 0 then this is for Telephony Return) */
3540
0
  if (upchid > 0)
3541
0
    col_add_fstr (pinfo->cinfo, COL_INFO,
3542
0
                  "Type %d UCD Message: Channel ID = %u (U%u)", type_number, upchid,
3543
0
                  upchid - 1);
3544
0
  else
3545
0
    col_add_fstr (pinfo->cinfo, COL_INFO,
3546
0
                  "Type %d UCD Message: Channel ID = %u (Telephony Return)",
3547
0
                  type_number, upchid);
3548
3549
0
  pos = 4;
3550
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
3551
0
  {
3552
0
    type = tvb_get_uint8 (tvb, pos);
3553
0
    tlv_tree = proto_tree_add_subtree(ucd_tree, tvb, pos, -1,
3554
0
                                            ett_docsis_tlv, &tlv_item,
3555
0
                                            val_to_str(pinfo->pool, type, channel_tlv_vals,
3556
0
                                                       "Unknown TLV (%u)"));
3557
0
    proto_tree_add_uint (tlv_tree, hf_docsis_ucd_type, tvb, pos, 1, type);
3558
0
    pos++;
3559
0
    tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_ucd_length, tvb, pos, 1, ENC_NA, &length);
3560
0
    pos++;
3561
0
    proto_item_set_len(tlv_item, length + 2);
3562
3563
0
    switch (type)
3564
0
    {
3565
0
    case UCD_SYMBOL_RATE:
3566
0
      if (length == 1)
3567
0
      {
3568
0
        symrate = tvb_get_uint8 (tvb, pos);
3569
0
        proto_tree_add_uint (tlv_tree, hf_docsis_ucd_symbol_rate, tvb, pos, length, symrate * 160);
3570
0
      }
3571
0
      else
3572
0
      {
3573
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3574
0
      }
3575
0
      break;
3576
0
    case UCD_FREQUENCY:
3577
0
      if (length == 4)
3578
0
      {
3579
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_frequency, tvb, pos, length, ENC_BIG_ENDIAN);
3580
0
      }
3581
0
      else
3582
0
      {
3583
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3584
0
      }
3585
0
      break;
3586
0
    case UCD_PREAMBLE:
3587
0
      proto_tree_add_item (tlv_tree, hf_docsis_ucd_preamble_pat, tvb, pos, length, ENC_NA);
3588
0
      break;
3589
0
    case UCD_BURST_DESCR:
3590
0
    case UCD_BURST_DESCR5: /* DOCSIS 2.0 Upstream Channel Descriptor */
3591
0
    case UCD_BURST_DESCR23:
3592
0
      dissect_ucd_burst_descr(tvb, pinfo, tlv_tree, tlv_item, pos, length);
3593
0
      break;
3594
0
    case UCD_EXT_PREAMBLE:
3595
0
      proto_tree_add_item (tlv_tree, hf_docsis_ucd_ext_preamble_pat, tvb, pos, length, ENC_NA);
3596
0
      break;
3597
0
    case UCD_SCDMA_MODE_ENABLED:
3598
0
      if (length == 1)
3599
0
      {
3600
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_mode_enabled, tvb, pos, length, ENC_BIG_ENDIAN);
3601
0
      }
3602
0
      else
3603
0
      {
3604
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3605
0
      }
3606
0
      break;
3607
0
    case UCD_SCDMA_SPREADING_INTERVAL:
3608
0
      if (length == 1)
3609
0
      {
3610
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_spreading_interval, tvb, pos, length, ENC_NA);
3611
0
      }
3612
0
      else
3613
0
      {
3614
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3615
0
      }
3616
0
      break;
3617
0
    case UCD_SCDMA_CODES_PER_MINI_SLOT:
3618
0
      if (length == 1)
3619
0
      {
3620
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_codes_per_mini_slot, tvb, pos, length, ENC_NA);
3621
0
      }
3622
0
      else
3623
0
      {
3624
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3625
0
      }
3626
0
      break;
3627
0
    case UCD_SCDMA_ACTIVE_CODES:
3628
0
      if (length == 1)
3629
0
      {
3630
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_active_codes, tvb, pos, length, ENC_NA);
3631
0
      }
3632
0
      else
3633
0
      {
3634
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3635
0
      }
3636
0
      break;
3637
0
    case UCD_SCDMA_CODE_HOPPING_SEED:
3638
0
      if (length == 2)
3639
0
      {
3640
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_code_hopping_seed, tvb, pos, length, ENC_NA);
3641
0
      }
3642
0
      else
3643
0
      {
3644
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3645
0
      }
3646
0
      break;
3647
0
    case UCD_SCDMA_US_RATIO_NUM:
3648
0
      if (length == 2)
3649
0
      {
3650
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_us_ratio_num, tvb, pos, length, ENC_NA);
3651
0
      }
3652
0
      else
3653
0
      {
3654
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3655
0
      }
3656
0
      break;
3657
0
    case UCD_SCDMA_US_RATIO_DENOM:
3658
0
      if (length == 2)
3659
0
      {
3660
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_us_ratio_denom, tvb, pos, length, ENC_NA);
3661
0
      }
3662
0
      else
3663
0
      {
3664
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3665
0
      }
3666
0
      break;
3667
0
    case UCD_SCDMA_TIMESTAMP_SNAPSHOT:
3668
0
      if (length == 9)
3669
0
      {
3670
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_timestamp_snapshot, tvb, pos, length, ENC_NA);
3671
0
      }
3672
0
      else
3673
0
      {
3674
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3675
0
      }
3676
0
      break;
3677
0
    case UCD_MAINTAIN_POWER_SPECTRAL_DENSITY:
3678
0
      if (length == 1)
3679
0
      {
3680
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_maintain_power_spectral_density, tvb, pos, length, ENC_BIG_ENDIAN);
3681
0
      }
3682
0
      else
3683
0
      {
3684
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3685
0
      }
3686
0
      break;
3687
0
    case UCD_RANGING_REQUIRED:
3688
0
      if (length == 1)
3689
0
      {
3690
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_ranging_required, tvb, pos, length, ENC_BIG_ENDIAN);
3691
0
      }
3692
0
      else
3693
0
      {
3694
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3695
0
      }
3696
0
      break;
3697
0
    case UCD_MAX_SCHEDULED_CODES:
3698
0
      if (length == 1)
3699
0
      {
3700
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_max_scheduled_codes, tvb, pos, length, ENC_NA);
3701
0
      }
3702
0
      else
3703
0
      {
3704
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3705
0
      }
3706
0
      break;
3707
0
    case UCD_RANGING_HOLD_OFF_PRIORITY_FIELD:
3708
0
      if (length == 4)
3709
0
      {
3710
0
        static int * const ucd_rnghoff[] = {
3711
0
          &hf_docsis_ucd_rnghoff_cm,
3712
0
          &hf_docsis_ucd_rnghoff_erouter,
3713
0
          &hf_docsis_ucd_rnghoff_emta,
3714
0
          &hf_docsis_ucd_rnghoff_estb,
3715
0
          &hf_docsis_ucd_rnghoff_rsvd,
3716
0
          &hf_docsis_ucd_rnghoff_id_ext,
3717
0
          NULL
3718
0
        };
3719
3720
0
        proto_tree_add_bitmask_list(tlv_tree, tvb, pos, length, ucd_rnghoff, ENC_BIG_ENDIAN);
3721
0
      }
3722
0
      else
3723
0
      {
3724
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3725
0
      }
3726
0
      break;
3727
0
    case UCD_RANGING_CHANNEL_CLASS_ID:
3728
0
      if (length == 4)
3729
0
      {
3730
0
        static int * const ucd_chan_class_id[] = {
3731
0
          &hf_docsis_ucd_chan_class_id_cm,
3732
0
          &hf_docsis_ucd_chan_class_id_erouter,
3733
0
          &hf_docsis_ucd_chan_class_id_emta,
3734
0
          &hf_docsis_ucd_chan_class_id_estb,
3735
0
          &hf_docsis_ucd_chan_class_id_rsvd,
3736
0
          &hf_docsis_ucd_chan_class_id_id_ext,
3737
0
          NULL
3738
0
        };
3739
3740
0
        proto_tree_add_bitmask_list(tlv_tree, tvb, pos, length, ucd_chan_class_id, ENC_BIG_ENDIAN);
3741
0
      }
3742
0
      else
3743
0
      {
3744
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3745
0
      }
3746
0
      break;
3747
0
    case UCD_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING:
3748
0
      if (length == 1)
3749
0
      {
3750
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_active_code_hopping, tvb, pos, length, ENC_NA);
3751
0
      }
3752
0
      else
3753
0
      {
3754
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3755
0
      }
3756
0
      break;
3757
0
    case UCD_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES:
3758
0
      if (length == 16)
3759
0
      {
3760
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_selection_active_codes, tvb, pos, length, ENC_NA);
3761
0
      }
3762
0
      else
3763
0
      {
3764
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3765
0
      }
3766
0
      break;
3767
0
    case UCD_HIGHER_UCD_FOR_SAME_UCID:
3768
0
      if (length == 1)
3769
0
      {
3770
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_higher_ucd_for_same_ucid, tvb, pos, length, ENC_NA);
3771
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_higher_ucd_for_same_ucid_resv, tvb, pos, length, ENC_BIG_ENDIAN);
3772
0
      }
3773
0
      else
3774
0
      {
3775
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3776
0
      }
3777
0
      break;
3778
0
    case UCD_CHANGE_IND_BITMASK:
3779
0
      if (length == 2)
3780
0
      {
3781
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_subc_excl_band, tvb, pos + 1, 1, ENC_NA);
3782
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_unused_subc, tvb, pos + 1, 1, ENC_NA);
3783
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_other_subc, tvb, pos + 1, 1, ENC_NA);
3784
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc5, tvb, pos + 1, 1, ENC_NA);
3785
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc6, tvb, pos + 1, 1, ENC_NA);
3786
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc9, tvb, pos + 1, 1, ENC_NA);
3787
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc10, tvb, pos + 1, 1, ENC_NA);
3788
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc11, tvb, pos + 1, 1, ENC_NA);
3789
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc12, tvb, pos, 1, ENC_NA);
3790
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc13, tvb, pos, 1, ENC_NA);
3791
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc3_or_4, tvb, pos, 1, ENC_NA);
3792
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_reserved, tvb, pos, 1, ENC_NA);
3793
0
      }
3794
0
      else
3795
0
      {
3796
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3797
0
      }
3798
0
      break;
3799
0
    case UCD_OFDMA_TIMESTAMP_SNAPSHOT:
3800
0
      if (length == 9)
3801
0
      {
3802
0
        static int* const timestamp_snapshot_parts[] = {
3803
0
          &hf_docsis_ucd_ofdma_timestamp_snapshot_reserved,
3804
0
          &hf_docsis_ucd_ofdma_timestamp_snapshot_d30timestamp,
3805
0
          &hf_docsis_ucd_ofdma_timestamp_snapshot_4msbits_of_div20,
3806
0
          NULL
3807
0
        };
3808
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_timestamp_snapshot, tvb, pos, length, ENC_NA);
3809
0
        proto_tree_add_bitmask_list(tlv_tree, tvb, pos, 5, timestamp_snapshot_parts, ENC_BIG_ENDIAN);
3810
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_timestamp_snapshot_minislot_count, tvb, pos+5, length-5, ENC_BIG_ENDIAN);
3811
0
      }
3812
0
      else
3813
0
      {
3814
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3815
0
      }
3816
0
      break;
3817
0
    case UCD_OFDMA_CYCLIC_PREFIX_SIZE:
3818
0
      if (length == 1)
3819
0
      {
3820
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_cyclic_prefix_size, tvb, pos, length, ENC_NA);
3821
0
      }
3822
0
      else
3823
0
      {
3824
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3825
0
      }
3826
0
      break;
3827
0
    case UCD_OFDMA_ROLLOFF_PERIOD_SIZE:
3828
0
      if (length == 1)
3829
0
      {
3830
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_rolloff_period_size, tvb, pos, length, ENC_NA);
3831
0
      }
3832
0
      else
3833
0
      {
3834
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3835
0
      }
3836
0
      break;
3837
0
    case UCD_SUBCARRIER_SPACING:
3838
0
      if (length == 1)
3839
0
      {
3840
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_subc_spacing, tvb, pos, length, ENC_NA);
3841
0
      }
3842
0
      else
3843
0
      {
3844
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3845
0
      }
3846
0
      break;
3847
0
    case UCD_CENTER_FREQ_SUBC_0:
3848
0
      if (length == 4)
3849
0
      {
3850
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_cent_freq_subc0, tvb, pos, length, ENC_BIG_ENDIAN);
3851
0
      }
3852
0
      else
3853
0
      {
3854
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3855
0
      }
3856
0
      break;
3857
0
    case UCD_SUBC_EXCL_BAND:
3858
0
      if ((length % 4) == 0)
3859
0
      {
3860
0
        for(i = 0; i < length; i+=4) {
3861
0
          proto_tree_add_item (tlv_tree, hf_docsis_ucd_subcarrier_range, tvb, pos+i, 4, ENC_BIG_ENDIAN);
3862
0
        }
3863
0
      }
3864
0
      else
3865
0
      {
3866
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3867
0
      }
3868
0
      break;
3869
0
    case UCD_UNUSED_SUBC_SPEC:
3870
0
      if ((length % 4) == 0)
3871
0
      {
3872
0
        for(i = 0; i < length; i+=4) {
3873
0
          proto_tree_add_item (tlv_tree, hf_docsis_ucd_subcarrier_range, tvb, pos+i, 4, ENC_BIG_ENDIAN);
3874
0
        }
3875
0
      }
3876
0
      else
3877
0
      {
3878
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3879
0
      }
3880
0
      break;
3881
0
    case UCD_SYMB_IN_OFDMA_FRAME:
3882
0
      if (length == 1)
3883
0
      {
3884
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_symb_ofdma_frame, tvb, pos, length, ENC_NA);
3885
0
      }
3886
0
      else
3887
0
      {
3888
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3889
0
      }
3890
0
      break;
3891
0
    case UCD_RAND_SEED:
3892
0
      if (length == 3)
3893
0
      {
3894
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_rand_seed, tvb, pos, length, ENC_NA);
3895
0
      }
3896
0
      else
3897
0
      {
3898
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3899
0
      }
3900
0
      break;
3901
0
    case EXTENDED_US_CHANNEL:
3902
0
      if (length == 1)
3903
0
      {
3904
0
        proto_tree_add_item (tlv_tree, hf_docsis_ucd_extended_us_channel, tvb, pos, length, ENC_NA);
3905
0
      }
3906
0
      else
3907
0
      {
3908
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
3909
0
      }
3910
0
      break;
3911
0
    }    /* switch(type) */
3912
0
    pos += length;
3913
0
  }      /* tvb_reported_length_remaining(tvb, pos) > 0 */
3914
3915
0
  return tvb_captured_length(tvb);
3916
0
}
3917
3918
static int
3919
dissect_ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
3920
0
{
3921
0
  return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_ucd, MGT_UCD);
3922
0
}
3923
3924
static int
3925
dissect_any_map (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, uint8_t version, void* data _U_)
3926
0
{
3927
0
  uint32_t i, numie, upchid, ucd_count, cat = 0, ie;
3928
0
  int pos;
3929
0
  proto_item *it;
3930
0
  proto_tree *map_tree;
3931
0
  static int * const ies[] = {
3932
0
    &hf_docsis_map_sid,
3933
0
    &hf_docsis_map_iuc,
3934
0
    &hf_docsis_map_offset,
3935
0
    NULL
3936
0
  };
3937
3938
0
  static int * const probe_ies[] = {
3939
0
    &hf_docsis_map_sid,
3940
0
    &hf_docsis_map_mer,
3941
0
    &hf_docsis_map_pw,
3942
0
    &hf_docsis_map_eq,
3943
0
    &hf_docsis_map_st,
3944
0
    &hf_docsis_map_probe_frame,
3945
0
    &hf_docsis_map_symbol_in_frame,
3946
0
    &hf_docsis_map_start_subc,
3947
0
    &hf_docsis_map_subc_skip,
3948
0
    NULL
3949
0
  };
3950
3951
0
  static int * const probe_ies_ect[] = {
3952
0
    &hf_docsis_map_sid,
3953
0
    &hf_docsis_map_mer,
3954
0
    &hf_docsis_map_pw,
3955
0
    &hf_docsis_map_eq,
3956
0
    &hf_docsis_map_st,
3957
0
    &hf_docsis_map_probe_frame,
3958
0
    &hf_docsis_map_symbol_in_frame,
3959
0
    &hf_docsis_map_start_subc,
3960
0
    &hf_docsis_map_ect,
3961
0
    NULL
3962
0
  };
3963
3964
0
  switch (version) {
3965
0
    case 1:
3966
0
      it = proto_tree_add_item(tree, proto_docsis_map_v1, tvb, 0, -1, ENC_NA);
3967
0
      break;
3968
0
    case 5:
3969
0
      it = proto_tree_add_item(tree, proto_docsis_map_v5, tvb, 0, -1, ENC_NA);
3970
0
      break;
3971
0
    default:
3972
0
      it = proto_tree_add_item(tree, proto_docsis_map_v1, tvb, 0, -1, ENC_NA);
3973
0
      expert_add_info_format(pinfo, it, &ei_docsis_mgmt_version_unknown, "Unknown MAP MAC Management version: %u", version);
3974
0
      return tvb_captured_length(tvb);
3975
0
  }
3976
3977
0
  map_tree = proto_item_add_subtree (it, ett_docsis_map);
3978
3979
0
  proto_tree_add_item_ret_uint (map_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &upchid);
3980
0
  proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_ucd_count, tvb, 1, 1, ENC_BIG_ENDIAN, &ucd_count);
3981
0
  switch (version) {
3982
0
    case 1:
3983
0
      proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_numie, tvb, 2, 1, ENC_BIG_ENDIAN, &numie);
3984
0
      proto_tree_add_item (map_tree, hf_docsis_map_rsvd, tvb, 3, 1, ENC_BIG_ENDIAN);
3985
0
      break;
3986
0
    case 5:
3987
0
      proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_numie_v5, tvb, 2, 2, ENC_BIG_ENDIAN, &numie);
3988
0
      proto_tree_add_item (map_tree, hf_docsis_map_rsvd_v5, tvb, 3, 1, ENC_BIG_ENDIAN);
3989
0
      proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_cat, tvb, 3, 1, ENC_BIG_ENDIAN, &cat);
3990
0
      break;
3991
0
    default:
3992
0
      it = proto_tree_add_item(tree, proto_docsis_map_v1, tvb, 0, -1, ENC_NA);
3993
0
      expert_add_info_format(pinfo, it, &ei_docsis_mgmt_version_unknown, "Unknown MAP MAC Management version: %u", version);
3994
0
      return tvb_captured_length(tvb);
3995
0
  }
3996
3997
0
  if (upchid > 0)
3998
0
    col_add_fstr (pinfo->cinfo, COL_INFO,
3999
0
                  "Map Message:  Version: %d, Channel ID = %u (U%u), UCD Count = %u,  # IE's = %u",
4000
0
                  version, upchid, upchid - 1, ucd_count, numie);
4001
0
  else
4002
0
    col_add_fstr (pinfo->cinfo, COL_INFO,
4003
0
                  "Map Message:  Version: %d, Channel ID = %u (Telephony Return), UCD Count = %u, # IE's = %u",
4004
0
                  version, upchid, ucd_count, numie);
4005
4006
0
  proto_tree_add_item (map_tree, hf_docsis_map_alloc_start, tvb, 4, 4, ENC_BIG_ENDIAN);
4007
0
  if (cat == 0) {
4008
0
    proto_tree_add_item (map_tree, hf_docsis_map_ack_time, tvb, 8, 4, ENC_BIG_ENDIAN);
4009
0
    proto_tree_add_item (map_tree, hf_docsis_map_rng_start, tvb, 12, 1, ENC_BIG_ENDIAN);
4010
0
    proto_tree_add_item (map_tree, hf_docsis_map_rng_end, tvb, 13, 1, ENC_BIG_ENDIAN);
4011
0
    proto_tree_add_item (map_tree, hf_docsis_map_data_start, tvb, 14, 1, ENC_BIG_ENDIAN);
4012
0
    proto_tree_add_item (map_tree, hf_docsis_map_data_end, tvb, 15, 1, ENC_BIG_ENDIAN);
4013
4014
0
    pos = 16;
4015
0
    for (i = 0; i < numie; i++)
4016
0
    {
4017
0
      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
0
      pos = pos + 4;
4019
0
    }
4020
0
  }
4021
0
  if (cat == 1) {
4022
0
    pos = 8;
4023
0
    for (i = 0; i < numie; i++)
4024
0
    {
4025
0
      ie = tvb_get_uint32(tvb, pos, ENC_BIG_ENDIAN);
4026
0
      if ((ie & (MAP_PROBE_IE_PW_MASK | MAP_PROBE_IE_ST_MASK)) == 0)
4027
0
        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
0
      else
4029
0
        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
0
      pos = pos + 4;
4031
0
    }
4032
0
  }
4033
4034
0
  return tvb_captured_length(tvb);
4035
0
}
4036
4037
4038
0
static int dissect_map_v1 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_) {
4039
0
  return dissect_any_map(tvb, pinfo, tree, MAP_v1, data);
4040
0
}
4041
4042
0
static int dissect_map_v5 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_) {
4043
0
  return dissect_any_map(tvb, pinfo, tree, MAP_v5, data);
4044
0
}
4045
4046
static int
4047
dissect_rngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4048
0
{
4049
0
  proto_item *it;
4050
0
  proto_tree *rngreq_tree;
4051
0
  uint32_t sid;
4052
0
  uint8_t version;
4053
4054
0
  it = proto_tree_add_item(tree, proto_docsis_rngreq, tvb, 0, -1, ENC_NA);
4055
0
  rngreq_tree = proto_item_add_subtree (it, ett_docsis_rngreq);
4056
4057
0
  version = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_docsis_mgmt, KEY_MGMT_VERSION));
4058
0
  if (version == 1) {
4059
0
    proto_tree_add_item (rngreq_tree, hf_docsis_rngreq_sid_field_bit15_14, tvb, 0, 1, ENC_BIG_ENDIAN);
4060
0
  }
4061
0
  if (version == 5) {
4062
    //RNG-REQ sent to 3.1 CMTS
4063
0
    proto_tree_add_item (rngreq_tree, hf_docsis_rngreq_sid_field_bit15, tvb, 0, 1, ENC_BIG_ENDIAN);
4064
0
    proto_tree_add_item (rngreq_tree, hf_docsis_rngreq_sid_field_bit14, tvb, 0, 1, ENC_BIG_ENDIAN);
4065
0
  }
4066
0
  proto_tree_add_item_ret_uint (rngreq_tree, hf_docsis_rngreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
4067
4068
0
  if (sid > 0)
4069
0
    col_add_fstr (pinfo->cinfo, COL_INFO, "Ranging Request: SID = %u",
4070
0
                      sid);
4071
0
  else
4072
0
    col_set_str(pinfo->cinfo, COL_INFO, "Initial Ranging Request SID = 0");
4073
4074
0
  proto_tree_add_item (rngreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN);
4075
0
  proto_tree_add_item (rngreq_tree, hf_docsis_rngreq_pend_compl, tvb, 3, 1, ENC_BIG_ENDIAN);
4076
4077
0
  return tvb_captured_length(tvb);
4078
0
}
4079
4080
static void
4081
dissect_rngrsp_transmit_equalization_encodings_scdma_tdma(tvbuff_t * tvb, proto_item * it, unsigned start, uint16_t len)
4082
0
{
4083
0
  uint16_t i;
4084
0
  proto_tree *transmit_equalization_encodings_tree, *coef_tree;
4085
4086
0
  transmit_equalization_encodings_tree = proto_item_add_subtree (it, ett_docsis_rngrsp_tlv_transmit_equalization_encodings);
4087
4088
0
  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
0
  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
0
  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
0
  proto_tree_add_item (transmit_equalization_encodings_tree, hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_reserved, tvb, start + 3, 1, ENC_BIG_ENDIAN);
4092
4093
0
  for(i=4; i < len; i+=4) {
4094
0
    int real, imag;
4095
0
    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
0
    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
0
    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
0
    proto_item_append_text(coef_tree, "real: %f, imag: %f", (int16_t) real/16384.0, (int16_t) imag/16384.0);
4099
0
  }
4100
0
}
4101
4102
static void
4103
dissect_rngrsp_transmit_equalization_encodings_ofdma(tvbuff_t * tvb, proto_tree * tree, unsigned start, uint16_t len)
4104
0
{
4105
0
  uint16_t i;
4106
0
  proto_item *it;
4107
0
  proto_tree *transmit_equalization_encodings_tree, *coef_tree;
4108
0
  unsigned lowest_subc;
4109
4110
0
  it = proto_tree_add_item(tree, hf_docsis_rngrsp_trans_eq_data, tvb, start, len, ENC_NA);
4111
0
  transmit_equalization_encodings_tree = proto_item_add_subtree (it, ett_docsis_rngrsp_tlv_transmit_equalization_encodings);
4112
4113
0
  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
0
  proto_tree_add_item (transmit_equalization_encodings_tree, hf_docsis_rngrsp_trans_eq_enc_highest_subc, tvb, start, 3, ENC_BIG_ENDIAN);
4115
0
  for(i=3; i < len; i+=4) {
4116
0
    int real, imag;
4117
0
    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
0
    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
0
    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
0
    proto_item_append_text(coef_tree, "real: %f, imag: %f", (int16_t) real/16384.0, (int16_t) imag/16384.0);
4121
0
  }
4122
0
}
4123
4124
static void
4125
dissect_rngrsp_commanded_power(tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, unsigned start, uint16_t len)
4126
0
{
4127
0
  uint16_t pos;
4128
0
  uint16_t i;
4129
0
  uint8_t tlvtype, tlvlen;
4130
0
  proto_item *it;
4131
0
  proto_tree *commanded_power_tree;
4132
0
  proto_tree *commanded_power_subtlv_tree;
4133
0
  proto_item *rngrsptlv_commanded_power_subtlv;
4134
4135
4136
0
  it = proto_tree_add_item(tree, hf_docsis_rngrsp_commanded_power_data, tvb, start-2, len+2, ENC_NA);
4137
0
  commanded_power_tree = proto_item_add_subtree (it, ett_docsis_rngrsp_tlv_commanded_power);
4138
4139
4140
0
  pos = start;
4141
0
  while (pos < start + len)
4142
0
  {
4143
0
    tlvtype = tvb_get_uint8 (tvb, pos);
4144
0
    commanded_power_subtlv_tree = proto_tree_add_subtree(commanded_power_tree, tvb, pos, -1,
4145
0
                                  ett_docsis_rngrsp_tlv_commanded_power_subtlv, &rngrsptlv_commanded_power_subtlv,
4146
0
                                  val_to_str(pinfo->pool, tlvtype, rngrsp_tlv_commanded_power_subtlv_vals,
4147
0
                                  "Unknown TLV (%u)"));
4148
0
    pos++;
4149
0
    tlvlen = tvb_get_uint8 (tvb, pos);
4150
0
    pos++;
4151
4152
0
    switch (tlvtype)
4153
0
    {
4154
0
      case RNGRSP_COMMANDED_POWER_DYNAMIC_RANGE_WINDOW:
4155
0
        if (tlvlen == 1)
4156
0
        {
4157
0
          proto_tree_add_item (commanded_power_subtlv_tree,
4158
0
                                    hf_docsis_rngrsp_commanded_power_dynamic_range_window, tvb, pos,
4159
0
                                    tlvlen, ENC_BIG_ENDIAN);
4160
0
        }
4161
0
        break;
4162
0
      case RNGRSP_COMMANDED_POWER_UCID_AND_POWER_LEVEL_LIST:
4163
0
        if ((tlvlen %3)== 0)
4164
0
        {
4165
0
          for(i=0; i < tlvlen; i+=3)
4166
0
          {
4167
0
             proto_tree_add_item (commanded_power_subtlv_tree,
4168
0
                                      hf_docsis_rngrsp_commanded_power_ucid, tvb, pos + i,
4169
0
                                      1, ENC_BIG_ENDIAN);
4170
0
             proto_tree_add_item (commanded_power_subtlv_tree,
4171
0
                                      hf_docsis_rngrsp_commanded_power_trans_pow_lvl, tvb, pos + i +1,
4172
0
                                      2, ENC_BIG_ENDIAN);
4173
0
          }
4174
0
        }
4175
0
        break;
4176
0
      }
4177
0
      pos += tlvlen;
4178
0
  }
4179
0
}
4180
4181
static void
4182
dissect_rngrsp_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * rngrsp_tree)
4183
0
{
4184
0
  proto_item *rngrsptlv_item, *it;
4185
0
  proto_tree *rngrsptlv_tree;
4186
0
  unsigned pos = 0;
4187
0
  unsigned tlvlen;
4188
0
  uint8_t tlvtype;
4189
4190
4191
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
4192
0
  {
4193
0
    tlvtype = tvb_get_uint8 (tvb, pos);
4194
0
    rngrsptlv_tree = proto_tree_add_subtree(rngrsp_tree, tvb, pos, -1,
4195
0
                                  ett_docsis_rngrsptlv, &rngrsptlv_item,
4196
0
                                  val_to_str(pinfo->pool, tlvtype, rngrsp_tlv_vals,
4197
0
                                  "Unknown TLV (%u)"));
4198
0
    proto_tree_add_uint (rngrsptlv_tree, hf_docsis_rngrsp_type, tvb, pos, 1, tlvtype);
4199
0
    pos++;
4200
0
    tlvlen = tvb_get_uint8 (tvb, pos);
4201
0
    if  (tlvtype == RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS || tlvtype == RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS) {
4202
0
      proto_tree_add_item_ret_uint (rngrsptlv_tree, hf_docsis_rngrsp_length, tvb, pos, 2, ENC_BIG_ENDIAN, &tlvlen);
4203
0
      pos += 2;
4204
0
    } else {
4205
0
      proto_tree_add_item_ret_uint (rngrsptlv_tree, hf_docsis_rngrsp_length, tvb, pos, 1, ENC_BIG_ENDIAN, &tlvlen);
4206
0
      pos++;
4207
0
    }
4208
0
    proto_item_set_len(rngrsptlv_item, tlvlen + 2);
4209
0
    switch (tlvtype)
4210
0
    {
4211
0
    case RNGRSP_TIMING:
4212
0
      if (tlvlen == 4)
4213
0
      {
4214
0
        proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_timing_adj, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4215
0
      }
4216
0
      break;
4217
0
    case RNGRSP_PWR_LEVEL_ADJ:
4218
0
      if (tlvlen == 1)
4219
0
      {
4220
0
        proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_power_adj, tvb, pos, tlvlen, ENC_NA);
4221
0
      }
4222
0
      break;
4223
0
    case RNGRSP_OFFSET_FREQ_ADJ:
4224
0
      if (tlvlen == 2)
4225
0
      {
4226
0
        proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_freq_adj, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4227
0
      }
4228
0
      break;
4229
0
    case RNGRSP_TRANSMIT_EQ_ADJ:
4230
0
      it = proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_xmit_eq_adj, tvb, pos, tlvlen, ENC_NA);
4231
0
      dissect_rngrsp_transmit_equalization_encodings_scdma_tdma(tvb, it, pos, tlvlen);
4232
0
      break;
4233
0
    case RNGRSP_RANGING_STATUS:
4234
0
      if (tlvlen == 1)
4235
0
      {
4236
0
        proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_ranging_status, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4237
0
      }
4238
0
      break;
4239
0
    case RNGRSP_DOWN_FREQ_OVER:
4240
0
      if (tlvlen == 4)
4241
0
      {
4242
0
        proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_down_freq_over, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4243
0
      }
4244
0
      break;
4245
0
    case RNGRSP_UP_CHID_OVER:
4246
0
      if (tlvlen == 1)
4247
0
      {
4248
0
        proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_upstream_ch_over, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4249
0
      }
4250
0
      break;
4251
0
    case RNGRSP_TRANSMIT_EQ_SET:
4252
0
      it = proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_xmit_eq_set, tvb, pos, tlvlen, ENC_NA);
4253
0
      dissect_rngrsp_transmit_equalization_encodings_scdma_tdma(tvb, it, pos, tlvlen);
4254
0
      break;
4255
0
    case RNGRSP_T4_TIMEOUT_MULTIPLIER:
4256
0
      if (tlvlen == 1)
4257
0
        proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_rngrsp_t4_timeout_multiplier, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4258
0
      else
4259
0
      {
4260
0
        expert_add_info_format(pinfo, rngrsptlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
4261
0
      }
4262
0
      break;
4263
0
    case RNGRSP_DYNAMIC_RANGE_WINDOW_UPPER_EDGE:
4264
0
      if (tlvlen == 1)
4265
0
        proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_dynamic_range_window_upper_edge, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
4266
0
      else
4267
0
      {
4268
0
        expert_add_info_format(pinfo, rngrsptlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
4269
0
      }
4270
0
      break;
4271
0
    case RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS:
4272
0
      dissect_rngrsp_transmit_equalization_encodings_ofdma(tvb, rngrsptlv_tree, pos, tlvlen);
4273
0
      break;
4274
0
    case RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS:
4275
0
      dissect_rngrsp_transmit_equalization_encodings_ofdma(tvb, rngrsptlv_tree, pos, tlvlen);
4276
0
      break;
4277
0
    case RNGRSP_COMMANDED_POWER:
4278
0
    case RNGRSP_EXT_US_COMMANDED_POWER:
4279
0
      dissect_rngrsp_commanded_power(tvb, pinfo, rngrsptlv_tree, pos, tlvlen);
4280
0
      break;
4281
4282
0
    default:
4283
0
       proto_tree_add_item (rngrsp_tree, hf_docsis_rngrsp_tlv_unknown, tvb, pos, tlvlen, ENC_NA);
4284
0
    }                   /* switch(tlvtype) */
4285
0
    pos += tlvlen;
4286
0
  }                       /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
4287
0
}
4288
4289
static int
4290
dissect_rngrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4291
0
{
4292
0
  proto_item *it;
4293
0
  proto_tree *rngrsp_tree;
4294
0
  tvbuff_t *tlv_tvb = NULL;
4295
0
  uint32_t sid, upchid, id;
4296
4297
0
  it = proto_tree_add_item(tree, proto_docsis_rngrsp, tvb, 0, -1, ENC_NA);
4298
0
  rngrsp_tree = proto_item_add_subtree (it, ett_docsis_rngrsp);
4299
4300
0
  proto_tree_add_item_ret_uint (rngrsp_tree, hf_docsis_rngrsp_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
4301
0
  proto_tree_add_item_ret_uint (rngrsp_tree, hf_docsis_mgt_upstream_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &upchid);
4302
4303
0
  if (upchid > 0)
4304
0
    col_add_fstr (pinfo->cinfo, COL_INFO,
4305
0
                  "Ranging Response: SID = %u, Upstream Channel = %u (U%u)",
4306
0
                  sid, upchid, upchid - 1);
4307
0
  else
4308
0
    col_add_fstr (pinfo->cinfo, COL_INFO,
4309
0
                  "Ranging Response: SID = %u, Telephony Return", sid);
4310
4311
4312
0
  id = (upchid << 16) + sid;
4313
0
  tlv_tvb = dissect_multipart(tvb, pinfo, rngrsp_tree, data, MGT_RNG_RSP, id, 3);
4314
0
  if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
4315
0
    dissect_rngrsp_tlv(tlv_tvb, pinfo, rngrsp_tree);
4316
0
  return tvb_captured_length(tvb);
4317
0
}
4318
4319
static int
4320
dissect_regreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4321
0
{
4322
0
  proto_item *it;
4323
0
  proto_tree *regreq_tree;
4324
0
  uint32_t sid;
4325
0
  tvbuff_t *next_tvb;
4326
4327
0
  it = proto_tree_add_item(tree, proto_docsis_regreq, tvb, 0, -1, ENC_NA);
4328
0
  regreq_tree = proto_item_add_subtree (it, ett_docsis_regreq);
4329
4330
0
  proto_tree_add_item_ret_uint (regreq_tree, hf_docsis_regreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
4331
4332
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "Registration Request SID = %u", sid);
4333
4334
  /* Call Dissector for Appendix C TlV's */
4335
0
  next_tvb = tvb_new_subset_remaining (tvb, 2);
4336
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, regreq_tree);
4337
0
  return tvb_captured_length(tvb);
4338
0
}
4339
4340
static int
4341
dissect_regrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4342
0
{
4343
0
  proto_item *it;
4344
0
  proto_tree *regrsp_tree;
4345
0
  uint32_t sid, response;
4346
0
  tvbuff_t *next_tvb;
4347
4348
0
  it = proto_tree_add_item(tree, proto_docsis_regrsp, tvb, 0, -1, ENC_NA);
4349
0
  regrsp_tree = proto_item_add_subtree (it, ett_docsis_regrsp);
4350
0
  proto_tree_add_item_ret_uint (regrsp_tree, hf_docsis_regrsp_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
4351
0
  proto_tree_add_item_ret_uint (regrsp_tree, hf_docsis_regrsp_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4352
4353
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4354
0
                "Registration Response SID = %u (%s)", sid,
4355
0
                val_to_str_ext(pinfo->pool, response, &docsis_conf_code_ext, "%d"));
4356
4357
  /* Call Dissector for Appendix C TLVs */
4358
0
  next_tvb = tvb_new_subset_remaining (tvb, 3);
4359
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, regrsp_tree);
4360
0
  return tvb_captured_length(tvb);
4361
0
}
4362
4363
static int
4364
dissect_uccreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4365
0
{
4366
0
  proto_item *it;
4367
0
  proto_tree *uccreq_tree;
4368
0
  uint32_t chid;
4369
4370
0
  it = proto_tree_add_item (tree, proto_docsis_uccreq, tvb, 0, -1, ENC_NA);
4371
0
  uccreq_tree = proto_item_add_subtree (it, ett_docsis_uccreq);
4372
4373
0
  proto_tree_add_item_ret_uint (uccreq_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &chid);
4374
4375
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4376
0
                "Upstream Channel Change request: Channel ID = %u (U%u)",
4377
0
                chid, (chid > 0 ? chid - 1 : chid));
4378
4379
0
  return tvb_captured_length(tvb);
4380
0
}
4381
4382
static int
4383
dissect_uccrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4384
0
{
4385
0
  proto_item *it;
4386
0
  proto_tree *uccrsp_tree;
4387
0
  uint32_t chid;
4388
4389
0
  it = proto_tree_add_item(tree, proto_docsis_uccrsp, tvb, 0, -1, ENC_NA);
4390
0
  uccrsp_tree = proto_item_add_subtree (it, ett_docsis_uccrsp);
4391
4392
0
  proto_tree_add_item_ret_uint (uccrsp_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &chid);
4393
4394
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4395
0
                "Upstream Channel Change response: Channel ID = %u (U%u)",
4396
0
                chid, (chid > 0 ? chid - 1 : chid));
4397
4398
0
  return tvb_captured_length(tvb);
4399
0
}
4400
4401
/* The dissect_attrs() function does the actual work to dissect the
4402
 * attributes.  It's called recursively, to dissect embedded attributes
4403
 */
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)
4407
0
{
4408
0
  proto_item *tlv_item, *tlv_subitem;
4409
0
  proto_tree *tlv_tree, *tlv_subtree;
4410
0
  uint32_t tlv_type, tlv_subtype;
4411
0
  int tlv_length, end = pos + length, i, attr_end;
4412
4413
0
  uint32_t value;
4414
0
  const char * label;
4415
0
  asn1_ctx_t asn1_ctx;
4416
4417
0
  static int *const bpkmattr_crypto_suite[] = {
4418
0
    &hf_docsis_bpkmattr_crypto_suite_encr,
4419
0
    &hf_docsis_bpkmattr_crypto_suite_auth,
4420
0
    NULL
4421
0
  };
4422
4423
0
  increment_dissection_depth(pinfo);
4424
0
  while (pos + 2 < end)
4425
0
  {
4426
0
    tlv_type = tvb_get_uint8(tvb, pos);
4427
0
    tlv_length = tvb_get_ntohs(tvb, pos + 1);
4428
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_bpkmattr_tlv, tvb, pos, tlv_length + 3, ENC_NA);
4429
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, bpkmattr_tlv_vals, "Unknown TLV: %u"));
4430
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_bpkmattr_tlv);
4431
0
    proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
4432
0
    proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_tlv_length, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
4433
0
    pos += 3;
4434
4435
0
    if (tlv_length > 1487)
4436
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "TLV length too big: %i", tlv_length);
4437
4438
0
    switch (tlv_type)
4439
0
    {
4440
0
    case BPKM_SERIAL_NUM:
4441
0
      proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_serial_num, tvb, pos, tlv_length, ENC_ASCII);
4442
0
      if (tlv_length > 255)
4443
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "TLV length too big: %i", tlv_length);
4444
0
      break;
4445
0
    case BPKM_MANUFACTURER_ID:
4446
0
      if (tlv_length == 3) {
4447
0
        tlv_subitem = proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_bpkmattr_manf_id, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
4448
0
        label = uint_get_manuf_name_if_known(value);
4449
0
        proto_item_append_text(tlv_subitem, " (%s)", label ? label : "unknown OUI");
4450
0
      } else
4451
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4452
0
      break;
4453
0
    case BPKM_MAC_ADDR:
4454
0
      if (tlv_length == 6)
4455
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_mac_addr, tvb, pos, tlv_length, ENC_NA);
4456
0
      else
4457
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4458
0
      break;
4459
0
    case BPKM_RSA_PUB_KEY:
4460
0
      asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4461
0
      dissect_pkixalgs_RSAPublicKey(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_rsa_pub_key);
4462
0
      break;
4463
0
    case BPKM_CM_ID:
4464
0
      tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_cm_id, tvb, pos, tlv_length, ENC_NA);
4465
0
      tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_cmid);
4466
0
      dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4467
0
      if (tlv_length < 126)
4468
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "TLV length too small: %i", tlv_length);
4469
0
      break;
4470
0
    case BPKM_DISPLAY_STR:
4471
0
      proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_display_str, tvb, pos, tlv_length, ENC_ASCII);
4472
0
      if (tlv_length > 128)
4473
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "TLV length too big: %i", tlv_length);
4474
0
      break;
4475
0
    case BPKM_AUTH_KEY:
4476
0
      if (tlv_length == 96 || tlv_length == 128 || tlv_length == 256)
4477
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_auth_key, tvb, pos, tlv_length, ENC_NA);
4478
0
      else
4479
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4480
0
      break;
4481
0
    case BPKM_TEK:
4482
0
      if (tlv_length == 8 || tlv_length == 16 || tlv_length == 32)
4483
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_tek, tvb, pos, tlv_length, ENC_NA);
4484
0
      else
4485
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4486
0
      break;
4487
0
    case BPKM_KEY_LIFETIME:
4488
0
      if (tlv_length == 4)
4489
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_key_life, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4490
0
      else
4491
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4492
0
      break;
4493
0
    case BPKM_KEY_SEQ_NUM:
4494
0
      if (tlv_length == 1)
4495
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_key_seq, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4496
0
      else
4497
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4498
0
      break;
4499
0
    case BPKM_HMAC_DIGEST:
4500
0
      if (tlv_length == 20)
4501
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_hmac_digest, tvb, pos, tlv_length, ENC_NA);
4502
0
      else
4503
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4504
0
      break;
4505
0
    case BPKM_SAID:
4506
0
      if (tlv_length == 2)
4507
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_said, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4508
0
      else
4509
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4510
0
      break;
4511
0
    case BPKM_TEK_PARAM:
4512
0
      tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_tek_params, tvb, pos, tlv_length, ENC_NA);
4513
0
      tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_tekp);
4514
0
      dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4515
0
      break;
4516
0
    case BPKM_OBSOLETED:
4517
0
      break;
4518
0
    case BPKM_CBC_IV:
4519
0
      if (tlv_length == 8 || tlv_length == 16)
4520
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_cbc_iv, tvb, pos, tlv_length, ENC_NA);
4521
0
      else
4522
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4523
0
      break;
4524
0
    case BPKM_ERROR_CODE:
4525
0
      if (tlv_length == 1)
4526
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_error_code, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4527
0
      else
4528
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4529
0
      break;
4530
0
    case BPKM_CA_CERT:
4531
0
      asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4532
0
      dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_ca_cert);
4533
0
      break;
4534
0
    case BPKM_CM_CERT:
4535
0
      asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4536
0
      dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_cm_cert);
4537
0
      break;
4538
0
    case BPKM_SEC_CAPABILITIES:
4539
0
      tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_security_cap, tvb, pos, tlv_length, ENC_NA);
4540
0
      tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_scap);
4541
0
      dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4542
0
      break;
4543
0
    case BPKM_CRYPTO_SUITE:
4544
0
      if (tlv_length == 2)
4545
0
        proto_tree_add_bitmask(tlv_tree, tvb, pos, hf_docsis_bpkmattr_crypto_suite,
4546
0
                               ett_docsis_bpkmattr_crypto_suite, bpkmattr_crypto_suite, ENC_BIG_ENDIAN);
4547
0
      else
4548
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4549
0
      break;
4550
0
    case BPKM_CRYPTO_SUITE_LIST:
4551
0
      tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_crypto_suite_list, tvb, pos, tlv_length, ENC_NA);
4552
0
      tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_crypto_suite_list);
4553
0
      for (i = 0; i < tlv_length - 1; i += 2)
4554
0
        proto_tree_add_bitmask(tlv_subtree, tvb, pos + i, hf_docsis_bpkmattr_crypto_suite,
4555
0
                               ett_docsis_bpkmattr_crypto_suite, bpkmattr_crypto_suite, ENC_BIG_ENDIAN);
4556
0
      if (i < tlv_length)
4557
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4558
0
      break;
4559
0
    case BPKM_BPI_VERSION:
4560
0
      if (tlv_length == 1)
4561
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_bpi_version, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4562
0
      else
4563
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4564
0
      break;
4565
0
    case BPKM_SA_DESCRIPTOR:
4566
0
      tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_sa_descr, tvb, pos, tlv_length, ENC_NA);
4567
0
      tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_sadsc);
4568
0
      dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4569
0
      break;
4570
0
    case BPKM_SA_TYPE:
4571
0
      if (tlv_length == 1)
4572
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_sa_type, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4573
0
      else
4574
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4575
0
      break;
4576
0
    case BPKM_SA_QUERY:
4577
0
      tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_sa_query, tvb, pos, tlv_length, ENC_NA);
4578
0
      tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_saqry);
4579
0
      dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4580
0
      break;
4581
0
    case BPKM_SA_QUERY_TYPE:
4582
0
      if (tlv_length == 1)
4583
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_sa_query_type, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4584
0
      else
4585
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4586
0
      break;
4587
0
    case BPKM_IP_ADDRESS:
4588
0
      if (tlv_length == 4)
4589
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_ip_address, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4590
0
      else
4591
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4592
0
      break;
4593
0
    case BPKM_DNLD_PARAMS:
4594
0
      tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_download_param, tvb, pos, tlv_length, ENC_NA);
4595
0
      tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_dnld);
4596
0
      dissect_attrs(tvb, pinfo, tlv_item, tlv_subtree, pos, tlv_length);
4597
0
      break;
4598
0
    case BPKM_CVC_ROOT_CA_CERT:
4599
0
      asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4600
0
      dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_cvc_root_ca_cert);
4601
0
      break;
4602
0
    case BPKM_CVC_CA_CERT:
4603
0
      asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4604
0
      dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_cvc_ca_cert);
4605
0
      break;
4606
0
    case BPKM_DEV_CA_CERT:
4607
0
      asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4608
0
      dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_dev_ca_cert);
4609
0
      break;
4610
0
    case BPKM_ROOT_CA_CERT:
4611
0
      asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4612
0
      dissect_x509af_Certificate(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_root_ca_cert);
4613
0
      break;
4614
0
    case BPKM_CM_NONCE:
4615
0
      if (tlv_length == 8)
4616
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_cm_nonce, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4617
0
      else
4618
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4619
0
      break;
4620
0
    case BPKM_MSG_SIGNATURE:
4621
0
      asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4622
0
      dissect_cms_SignedData(false, tvb, pos, &asn1_ctx, tlv_tree, hf_docsis_bpkmattr_msg_signature);
4623
0
      break;
4624
0
    case BPKM_KEY_EXCHANGE_SHARE:
4625
0
      if (tlv_length > 2) {
4626
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_key_exchange_share_field_id, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4627
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_key_exchange_share_key_share, tvb, pos + 2, tlv_length - 2, ENC_NA);
4628
0
      } else
4629
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4630
0
      break;
4631
0
    case BPKM_ALLOWED_BPI_VERSIONS:
4632
0
      tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_allowed_bpi_versions, tvb, pos, tlv_length, ENC_NA);
4633
0
      tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_allowed_bpi_versions);
4634
0
      for (i = 0; i < tlv_length; ++i)
4635
0
        proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_allowed_bpi_version, tvb, pos + i, 1, ENC_BIG_ENDIAN);
4636
0
      break;
4637
0
    case BPKM_OCSP_RSP:
4638
0
      tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_ocsp_responses, tvb, pos, tlv_length, ENC_NA);
4639
0
      tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_ocsp_responses);
4640
0
      asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, true, pinfo);
4641
0
      i = pos;
4642
0
      attr_end = pos + tlv_length;
4643
0
      while (i < attr_end)
4644
0
        i = dissect_ocsp_OCSPResponse(false, tvb, i, &asn1_ctx, tlv_subtree, hf_docsis_bpkmattr_ocsp_response);
4645
0
      break;
4646
0
    case BPKM_CMTS_DESIGNATION:
4647
0
      if (tlv_length) {
4648
0
        tlv_subitem = proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_cmts_designation, tvb, pos, tlv_length, ENC_NA);
4649
0
        tlv_subtree = proto_item_add_subtree(tlv_subitem, ett_docsis_bpkmattr_cmts_designation);
4650
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_bpkmattr_cmts_designation_data_type,
4651
0
                                     tvb, pos, 1, ENC_BIG_ENDIAN, &tlv_subtype);
4652
0
        switch (tlv_subtype)
4653
0
        {
4654
0
        case BPKMATTR_CMTS_DESIGNATION_CERTIFICATE_FINGERPRINT:
4655
0
          proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_certificate_fingerprint,
4656
0
                              tvb, pos + 1, tlv_length - 1, ENC_NA);
4657
0
          break;
4658
0
        case BPKMATTR_CMTS_DESIGNATION_COMMON_NAME:
4659
0
          proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_common_name,
4660
0
                              tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4661
0
          break;
4662
0
        case BPKMATTR_CMTS_DESIGNATION_ORG_UNIT:
4663
0
          proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_org_unit,
4664
0
                              tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4665
0
          break;
4666
0
        case BPKMATTR_CMTS_DESIGNATION_ORG_NAME:
4667
0
          proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_org_name,
4668
0
                              tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4669
0
          break;
4670
0
        case BPKMATTR_CMTS_DESIGNATION_SERIAL_NUMBER:
4671
0
          proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_serial_number,
4672
0
                              tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4673
0
          break;
4674
0
        case BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_FINGERPRINT:
4675
0
          proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_issuing_ca_fingerprint,
4676
0
                              tvb, pos + 1, tlv_length - 1, ENC_NA);
4677
0
          break;
4678
0
        case BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_COMMON_NAME:
4679
0
          proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_issuing_ca_common_name,
4680
0
                              tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4681
0
          break;
4682
0
        case BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_ORG_UNIT:
4683
0
          proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_issuing_ca_org_unit,
4684
0
                              tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4685
0
          break;
4686
0
        case BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_ORG_NAME:
4687
0
          proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_issuing_ca_org_name,
4688
0
                              tvb, pos + 1, tlv_length - 1, ENC_ASCII);
4689
0
          break;
4690
0
        case BPKMATTR_CMTS_DESIGNATION_ISSUING_CA_SERIAL_NUMBER:
4691
0
          proto_tree_add_item(tlv_subtree, hf_docsis_bpkmattr_cmts_designation_issuing_ca_serial_number,
4692
0
                              tvb, pos, tlv_length - 1, ENC_ASCII);
4693
0
          break;
4694
0
        }
4695
0
      } else
4696
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4697
0
      break;
4698
0
    case BPKM_CM_STATUS_CODE:
4699
0
      if (tlv_length == 1)
4700
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_cm_status_code, tvb, pos, tlv_length, ENC_NA);
4701
0
      else
4702
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4703
0
      break;
4704
0
    case BPKM_DETECTED_ERRORS:
4705
0
      if (tlv_length == 1)
4706
0
        proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_detected_errors, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
4707
0
      else
4708
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
4709
0
      break;
4710
0
    case BPKM_VENDOR_DEFINED:
4711
0
      proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_vendor_def, tvb, pos, tlv_length, ENC_NA);
4712
0
      break;
4713
0
    default:
4714
0
      proto_tree_add_item(tlv_tree, hf_docsis_bpkmattr_vendor_def, tvb, pos, tlv_length, ENC_NA);
4715
0
      break;
4716
0
    }
4717
4718
0
    pos += tlv_length;
4719
0
  }
4720
0
  if (pos != end)
4721
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
4722
0
  decrement_dissection_depth(pinfo);
4723
0
}
4724
4725
static int
4726
dissect_bpkmreq(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4727
0
{
4728
0
  proto_item *bpkmreq_item, *attr_item;
4729
0
  proto_tree *bpkmreq_tree, *attr_tree;
4730
0
  tvbuff_t *tlv_tvb = NULL;
4731
4732
0
  uint32_t code, id, length;
4733
4734
0
  bpkmreq_item = proto_tree_add_item(tree, proto_docsis_bpkmreq, tvb, 0, -1, ENC_NA);
4735
0
  bpkmreq_tree = proto_item_add_subtree(bpkmreq_item, ett_docsis_bpkmreq);
4736
0
  proto_tree_add_item_ret_uint(bpkmreq_tree, hf_docsis_bpkm_code, tvb, 0, 1, ENC_BIG_ENDIAN, &code);
4737
0
  proto_tree_add_item_ret_uint(bpkmreq_tree, hf_docsis_bpkm_ident, tvb, 1, 1, ENC_BIG_ENDIAN, &id);
4738
0
  proto_tree_add_item_ret_uint(bpkmreq_tree, hf_docsis_bpkm_length, tvb, 2, 2, ENC_BIG_ENDIAN, &length);
4739
4740
0
  col_add_fstr(pinfo->cinfo, COL_INFO, "BPKM Request (BPKM-REQ): %s, ID %u",
4741
0
               val_to_str(pinfo->pool, code, code_field_vals, "Unknown Code (%u)"), id);
4742
4743
0
  id += code << 8;
4744
0
  tlv_tvb = dissect_multipart(tvb, pinfo, bpkmreq_tree, data, MGT_BPKM_REQ, id, 4);
4745
0
  if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb)) {
4746
0
    attr_item = proto_tree_add_item(bpkmreq_tree, hf_docsis_bpkmattr, tlv_tvb, 0, length, ENC_NA);
4747
0
    attr_tree = proto_item_add_subtree(attr_item, ett_docsis_bpkmattr);
4748
0
    dissect_attrs(tlv_tvb, pinfo, attr_item, attr_tree, 0, length);
4749
0
    if (length != tvb_reported_length(tlv_tvb))
4750
0
      expert_add_info_format(pinfo, bpkmreq_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
4751
0
  }
4752
0
  return tvb_captured_length(tvb);
4753
0
}
4754
4755
static int
4756
dissect_bpkmrsp(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4757
0
{
4758
0
  proto_item *bpkmrsp_item, *attr_item;
4759
0
  proto_tree *bpkmrsp_tree, *attr_tree;
4760
0
  tvbuff_t *tlv_tvb = NULL;
4761
4762
0
  uint32_t code, id, length;
4763
4764
0
  bpkmrsp_item = proto_tree_add_item(tree, proto_docsis_bpkmrsp, tvb, 0, -1, ENC_NA);
4765
0
  bpkmrsp_tree = proto_item_add_subtree(bpkmrsp_item, ett_docsis_bpkmrsp);
4766
0
  proto_tree_add_item_ret_uint(bpkmrsp_tree, hf_docsis_bpkm_code, tvb, 0, 1, ENC_BIG_ENDIAN, &code);
4767
0
  proto_tree_add_item_ret_uint(bpkmrsp_tree, hf_docsis_bpkm_ident, tvb, 1, 1, ENC_BIG_ENDIAN, &id);
4768
0
  proto_tree_add_item_ret_uint(bpkmrsp_tree, hf_docsis_bpkm_length, tvb, 2, 2, ENC_BIG_ENDIAN, &length);
4769
4770
0
  col_add_fstr(pinfo->cinfo, COL_INFO, "BPKM Response (BPKM-RSP): %s, ID %u",
4771
0
               val_to_str(pinfo->pool, code, code_field_vals, "Unknown Code (%u)"), id);
4772
4773
0
  id += code << 8;
4774
0
  tlv_tvb = dissect_multipart(tvb, pinfo, bpkmrsp_tree, data, MGT_BPKM_RSP, id, 4);
4775
0
  if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb)) {
4776
0
    attr_item = proto_tree_add_item(bpkmrsp_tree, hf_docsis_bpkmattr, tlv_tvb, 0, length, ENC_NA);
4777
0
    attr_tree = proto_item_add_subtree(attr_item, ett_docsis_bpkmattr);
4778
0
    dissect_attrs(tlv_tvb, pinfo, attr_item, attr_tree, 0, length);
4779
0
    if (length != tvb_reported_length(tlv_tvb))
4780
0
      expert_add_info_format(pinfo, bpkmrsp_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
4781
0
  }
4782
0
  return tvb_captured_length(tvb);
4783
0
}
4784
4785
static int
4786
dissect_regack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4787
0
{
4788
0
  proto_item *it;
4789
0
  proto_tree *regack_tree;
4790
0
  uint32_t sid, response;
4791
0
  tvbuff_t *next_tvb;
4792
4793
0
  it = proto_tree_add_item (tree, proto_docsis_regack, tvb, 0, -1, ENC_NA);
4794
0
  regack_tree = proto_item_add_subtree (it, ett_docsis_regack);
4795
4796
0
  proto_tree_add_item_ret_uint (regack_tree, hf_docsis_regack_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
4797
0
  proto_tree_add_item_ret_uint (regack_tree, hf_docsis_regack_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4798
4799
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4800
0
                "Registration Acknowledge SID = %u (%s)", sid,
4801
0
                val_to_str_ext(pinfo->pool, response, &docsis_conf_code_ext, "%d"));
4802
4803
  /* Call Dissector for Appendix C TLVs */
4804
0
  if(tvb_reported_length_remaining(tvb, 3) > 0 )
4805
0
  {
4806
0
    next_tvb = tvb_new_subset_remaining (tvb, 3);
4807
0
    call_dissector (docsis_tlv_handle, next_tvb, pinfo, regack_tree);
4808
0
  }
4809
4810
0
  return tvb_captured_length(tvb);
4811
0
}
4812
4813
static int
4814
dissect_dsareq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4815
0
{
4816
0
  proto_item *it;
4817
0
  proto_tree *dsareq_tree;
4818
0
  uint32_t transid;
4819
0
  tvbuff_t *next_tvb;
4820
4821
0
  it = proto_tree_add_item(tree, proto_docsis_dsareq, tvb, 0, -1, ENC_NA);
4822
0
  dsareq_tree = proto_item_add_subtree (it, ett_docsis_dsareq);
4823
4824
0
  proto_tree_add_item_ret_uint (dsareq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4825
4826
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4827
0
                "Dynamic Service Addition Request Tran-id = %u ", transid);
4828
4829
  /* Call Dissector for Appendix C TLVs */
4830
0
  next_tvb = tvb_new_subset_remaining (tvb, 2);
4831
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsareq_tree);
4832
0
  return tvb_captured_length(tvb);
4833
0
}
4834
4835
static int
4836
dissect_dsarsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4837
0
{
4838
0
  proto_item *it;
4839
0
  proto_tree *dsarsp_tree;
4840
0
  uint32_t transid, response;
4841
0
  tvbuff_t *next_tvb;
4842
4843
0
  it = proto_tree_add_item (tree, proto_docsis_dsarsp, tvb, 0, -1, ENC_NA);
4844
0
  dsarsp_tree = proto_item_add_subtree (it, ett_docsis_dsarsp);
4845
0
  proto_tree_add_item_ret_uint (dsarsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4846
0
  proto_tree_add_item_ret_uint (dsarsp_tree, hf_docsis_dsarsp_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4847
4848
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4849
0
                "Dynamic Service Add Response ID = %u (%s)", transid,
4850
0
                val_to_str_ext(pinfo->pool, response, &docsis_conf_code_ext, "%d"));
4851
4852
  /* Call dissector for Appendix C TLVs */
4853
0
  next_tvb = tvb_new_subset_remaining (tvb, 3);
4854
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsarsp_tree);
4855
0
  return tvb_captured_length(tvb);
4856
0
}
4857
4858
static int
4859
dissect_dsaack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4860
0
{
4861
0
  proto_item *it;
4862
0
  proto_tree *dsaack_tree;
4863
0
  uint32_t transid, response;
4864
0
  tvbuff_t *next_tvb;
4865
4866
0
  it = proto_tree_add_item (tree, proto_docsis_dsaack, tvb, 0, -1, ENC_NA);
4867
0
  dsaack_tree = proto_item_add_subtree (it, ett_docsis_dsaack);
4868
0
  proto_tree_add_item_ret_uint (dsaack_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4869
0
  proto_tree_add_item_ret_uint (dsaack_tree, hf_docsis_dsaack_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4870
4871
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4872
0
                "Dynamic Service Add Acknowledge: Transaction ID = %u (%s)", transid,
4873
0
                val_to_str_ext(pinfo->pool, response, &docsis_conf_code_ext, "%d"));
4874
4875
  /* Call Dissector for Appendix C TLVs */
4876
0
  next_tvb = tvb_new_subset_remaining (tvb, 3);
4877
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsaack_tree);
4878
0
  return tvb_captured_length(tvb);
4879
0
}
4880
4881
static int
4882
dissect_dscreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4883
0
{
4884
0
  proto_item *it;
4885
0
  proto_tree *dscreq_tree;
4886
0
  uint32_t transid;
4887
0
  tvbuff_t *next_tvb;
4888
4889
0
  it = proto_tree_add_item (tree, proto_docsis_dscreq, tvb, 0, -1, ENC_NA);
4890
0
  dscreq_tree = proto_item_add_subtree (it, ett_docsis_dscreq);
4891
4892
0
  proto_tree_add_item_ret_uint (dscreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4893
4894
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4895
0
                "Dynamic Service Change Request Tran-id = %u ", transid);
4896
4897
  /* Call dissector for Appendix C TLVs */
4898
0
  next_tvb = tvb_new_subset_remaining (tvb, 2);
4899
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, dscreq_tree);
4900
0
  return tvb_captured_length(tvb);
4901
0
}
4902
4903
static int
4904
dissect_dscrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4905
0
{
4906
0
  proto_item *it;
4907
0
  proto_tree *dscrsp_tree;
4908
0
  uint32_t transid, response;
4909
0
  tvbuff_t *next_tvb;
4910
4911
0
  it = proto_tree_add_item(tree, proto_docsis_dscrsp, tvb, 0, -1, ENC_NA);
4912
0
  dscrsp_tree = proto_item_add_subtree (it, ett_docsis_dscrsp);
4913
0
  proto_tree_add_item_ret_uint (dscrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4914
0
  proto_tree_add_item_ret_uint (dscrsp_tree, hf_docsis_dscrsp_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4915
4916
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4917
0
                "Dynamic Service Change Response: Transaction ID = %u (%s)", transid,
4918
0
                val_to_str_ext(pinfo->pool, response, &docsis_conf_code_ext, "%d"));
4919
4920
  /* Call Dissector for Appendix C TLVs */
4921
0
  next_tvb = tvb_new_subset_remaining (tvb, 3);
4922
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, dscrsp_tree);
4923
0
  return tvb_captured_length(tvb);
4924
0
}
4925
4926
static int
4927
dissect_dscack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4928
0
{
4929
0
  proto_item *it;
4930
0
  proto_tree *dscack_tree;
4931
0
  uint32_t transid, response;
4932
0
  tvbuff_t *next_tvb;
4933
4934
0
  it = proto_tree_add_item(tree, proto_docsis_dscack, tvb, 0, -1, ENC_NA);
4935
0
  dscack_tree = proto_item_add_subtree (it, ett_docsis_dscack);
4936
4937
0
  proto_tree_add_item_ret_uint (dscack_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4938
0
  proto_tree_add_item_ret_uint (dscack_tree, hf_docsis_dscack_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
4939
4940
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4941
0
                "Dynamic Service Change Acknowledge: Transaction ID = %u (%s)", transid,
4942
0
                val_to_str_ext(pinfo->pool, response, &docsis_conf_code_ext, "%d"));
4943
4944
  /* Call Dissector for Appendix C TLVs */
4945
0
  next_tvb = tvb_new_subset_remaining (tvb, 3);
4946
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, dscack_tree);
4947
0
  return tvb_captured_length(tvb);
4948
0
}
4949
4950
static int
4951
dissect_dsdreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4952
0
{
4953
0
  proto_item *it;
4954
0
  proto_tree *dsdreq_tree;
4955
0
  uint32_t transid;
4956
0
  tvbuff_t *next_tvb;
4957
4958
0
  it = proto_tree_add_item (tree, proto_docsis_dsdreq, tvb, 0, -1, ENC_NA);
4959
0
  dsdreq_tree = proto_item_add_subtree (it, ett_docsis_dsdreq);
4960
4961
0
  proto_tree_add_item_ret_uint (dsdreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
4962
4963
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4964
0
                "Dynamic Service Delete Request Tran-id = %u ", transid);
4965
4966
0
  proto_tree_add_item (dsdreq_tree, hf_docsis_dsdreq_rsvd, tvb, 2, 2, ENC_BIG_ENDIAN);
4967
0
  proto_tree_add_item (dsdreq_tree, hf_docsis_dsdreq_sfid, tvb, 4, 4, ENC_BIG_ENDIAN);
4968
4969
  /* Call Dissector for Appendix C TLVs */
4970
0
  next_tvb = tvb_new_subset_remaining (tvb, 8);
4971
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsdreq_tree);
4972
0
  return tvb_captured_length(tvb);
4973
0
}
4974
4975
static int
4976
dissect_dsdrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
4977
0
{
4978
0
  proto_item *it;
4979
0
  proto_tree *dsdrsp_tree;
4980
0
  uint32_t tranid, confcode;
4981
4982
0
  it = proto_tree_add_item(tree, proto_docsis_dsdrsp, tvb, 0, -1, ENC_NA);
4983
0
  dsdrsp_tree = proto_item_add_subtree (it, ett_docsis_dsdrsp);
4984
0
  proto_tree_add_item_ret_uint (dsdrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &tranid);
4985
0
  proto_tree_add_item_ret_uint (dsdrsp_tree, hf_docsis_dsdrsp_confcode, tvb, 2, 1, ENC_BIG_ENDIAN, &confcode);
4986
0
  proto_tree_add_item (dsdrsp_tree, hf_docsis_dsdrsp_rsvd, tvb, 3, 1, ENC_BIG_ENDIAN);
4987
4988
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
4989
0
                "Dynamic Service Delete Response: Transaction ID = %u (%s)",
4990
0
                tranid, val_to_str_ext(pinfo->pool, confcode, &docsis_conf_code_ext, "%d"));
4991
4992
0
  return tvb_captured_length(tvb);
4993
0
}
4994
4995
static void
4996
dissect_dccreq_ds_params (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
4997
0
{
4998
0
  uint8_t type;
4999
0
  uint32_t length;
5000
0
  proto_tree *dcc_tree;
5001
0
  proto_item *dcc_item, *tlv_len_item;
5002
0
  int pos;
5003
5004
0
  pos = start;
5005
0
  while ( pos < ( start + len) )
5006
0
  {
5007
0
    type = tvb_get_uint8 (tvb, pos);
5008
0
    dcc_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5009
0
                                            ett_docsis_dccreq_ds_params, &dcc_item,
5010
0
                                            val_to_str(pinfo->pool, type, ds_param_subtlv_vals,
5011
0
                                                       "Unknown TLV (%u)"));
5012
0
    proto_tree_add_uint (dcc_tree, hf_docsis_dcc_ds_params_subtype, tvb, pos, 1, type);
5013
0
    pos++;
5014
0
    tlv_len_item = proto_tree_add_item_ret_uint (dcc_tree, hf_docsis_dcc_ds_params_length, tvb, pos, 1, ENC_NA, &length);
5015
0
    pos++;
5016
0
    proto_item_set_len(dcc_item, length + 2);
5017
5018
0
    switch (type)
5019
0
    {
5020
0
    case DCCREQ_DS_FREQ:
5021
0
      if (length == 4)
5022
0
      {
5023
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_freq, tvb, pos, length, ENC_BIG_ENDIAN);
5024
0
      }
5025
0
      else
5026
0
      {
5027
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5028
0
      }
5029
0
      break;
5030
0
    case DCCREQ_DS_MOD_TYPE:
5031
0
      if (length == 1)
5032
0
      {
5033
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_mod_type, tvb, pos, length, ENC_BIG_ENDIAN);
5034
0
      }
5035
0
      else
5036
0
      {
5037
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5038
0
      }
5039
0
      break;
5040
0
    case DCCREQ_DS_SYM_RATE:
5041
0
      if (length == 1)
5042
0
      {
5043
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_sym_rate, tvb, pos, length, ENC_BIG_ENDIAN);
5044
0
      }
5045
0
      else
5046
0
      {
5047
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5048
0
      }
5049
0
      break;
5050
0
    case DCCREQ_DS_INTLV_DEPTH:
5051
0
      if (length == 2)
5052
0
      {
5053
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_intlv_depth_i, tvb, pos, 1, ENC_BIG_ENDIAN);
5054
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_intlv_depth_j, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
5055
0
      }
5056
0
      else
5057
0
      {
5058
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5059
0
      }
5060
0
      break;
5061
0
    case DCCREQ_DS_CHAN_ID:
5062
0
      if (length == 1)
5063
0
      {
5064
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_chan_id, tvb, pos, length, ENC_BIG_ENDIAN);
5065
0
      }
5066
0
      else
5067
0
      {
5068
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5069
0
      }
5070
0
      break;
5071
0
    case DCCREQ_DS_SYNC_SUB:
5072
0
      if (length == 1)
5073
0
      {
5074
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_sync_sub, tvb, pos, length, ENC_BIG_ENDIAN);
5075
0
      }
5076
0
      else
5077
0
      {
5078
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5079
0
      }
5080
0
      break;
5081
0
    case DCCREQ_DS_OFDM_BLOCK_FREQ:
5082
0
      if (length == 4)
5083
0
      {
5084
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_ofdm_block_freq, tvb, pos, length, ENC_BIG_ENDIAN);
5085
0
      }
5086
0
      else
5087
0
      {
5088
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5089
0
      }
5090
0
      break;
5091
0
    }
5092
5093
0
    pos += length;
5094
0
  }
5095
0
}
5096
5097
static void
5098
dissect_dccreq_sf_sub (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5099
0
{
5100
0
  uint8_t type;
5101
0
  uint32_t length;
5102
0
  proto_tree *dcc_tree;
5103
0
  proto_item *dcc_item, *tlv_len_item;
5104
0
  int pos;
5105
5106
0
  pos = start;
5107
0
  while ( pos < ( start + len) )
5108
0
  {
5109
0
    type = tvb_get_uint8 (tvb, pos);
5110
0
    dcc_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5111
0
                                            ett_docsis_dccreq_sf_sub, &dcc_item,
5112
0
                                            val_to_str(pinfo->pool, type, sf_sub_subtlv_vals,
5113
0
                                                       "Unknown TLV (%u)"));
5114
0
    proto_tree_add_uint (dcc_tree, hf_docsis_dcc_sf_sub_subtype, tvb, pos, 1, type);
5115
0
    pos++;
5116
0
    tlv_len_item = proto_tree_add_item_ret_uint (dcc_tree, hf_docsis_dcc_sf_sub_length, tvb, pos, 1, ENC_NA, &length);
5117
0
    pos++;
5118
0
    proto_item_set_len(dcc_item, length + 2);
5119
5120
0
    switch (type)
5121
0
    {
5122
0
    case DCCREQ_SF_SFID:
5123
0
      if (length == 8)
5124
0
      {
5125
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sfid_cur, tvb, pos, 4, ENC_BIG_ENDIAN);
5126
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sfid_new, tvb, pos + 4, 4, ENC_BIG_ENDIAN);
5127
0
      }
5128
0
      else
5129
0
      {
5130
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5131
0
      }
5132
0
      break;
5133
0
    case DCCREQ_SF_SID:
5134
0
      if (length == 4)
5135
0
      {
5136
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sid_cur, tvb, pos, 2, ENC_BIG_ENDIAN);
5137
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sid_new, tvb, pos + 2, 2, ENC_BIG_ENDIAN);
5138
0
      }
5139
0
      else
5140
0
      {
5141
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5142
0
      }
5143
0
      break;
5144
0
    case DCCREQ_SF_UNSOL_GRANT_TREF:
5145
0
      if (length == 4)
5146
0
      {
5147
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_unsol_grant_tref, tvb, pos, length, ENC_BIG_ENDIAN);
5148
0
      }
5149
0
      else
5150
0
      {
5151
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5152
0
      }
5153
0
      break;
5154
0
    }
5155
5156
0
    pos += length;
5157
0
  }
5158
0
}
5159
5160
static int
5161
dissect_dccreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5162
0
{
5163
0
  uint16_t pos;
5164
0
  uint8_t type;
5165
0
  uint32_t length;
5166
0
  proto_tree *dcc_tree, *tlv_tree;
5167
0
  proto_item *dcc_item, *tlv_item, *tlv_len_item;
5168
5169
0
  col_set_str(pinfo->cinfo, COL_INFO, "DCC-REQ Message");
5170
5171
0
  dcc_item = proto_tree_add_item (tree, proto_docsis_dccreq, tvb, 0, -1, ENC_NA);
5172
0
  dcc_tree = proto_item_add_subtree (dcc_item, ett_docsis_dccreq);
5173
5174
0
  proto_tree_add_item (dcc_tree, hf_docsis_dccreq_tran_id, tvb, 0, 2, ENC_BIG_ENDIAN);
5175
5176
0
  pos = 2;
5177
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
5178
0
  {
5179
0
    type = tvb_get_uint8 (tvb, pos);
5180
0
    tlv_tree = proto_tree_add_subtree(dcc_tree, tvb, pos, -1,
5181
0
                                            ett_docsis_dccreq_tlv, &tlv_item,
5182
0
                                            val_to_str(pinfo->pool, type, dcc_tlv_vals,
5183
0
                                                       "Unknown TLV (%u)"));
5184
0
    proto_tree_add_uint (tlv_tree, hf_docsis_dccreq_type, tvb, pos, 1, type);
5185
0
    pos++;
5186
0
    tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dccreq_length, tvb, pos, 1, ENC_NA, &length);
5187
0
    pos++;
5188
0
    proto_item_set_len(tlv_item, length + 2);
5189
5190
0
    switch (type)
5191
0
    {
5192
0
    case DCCREQ_UP_CHAN_ID:
5193
0
      if (length == 1)
5194
0
      {
5195
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccreq_up_chan_id, tvb, pos, length, ENC_BIG_ENDIAN);
5196
0
      }
5197
0
      else
5198
0
      {
5199
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5200
0
      }
5201
0
      break;
5202
0
    case DCCREQ_DS_PARAMS:
5203
0
      dissect_dccreq_ds_params (tvb, pinfo, tlv_tree, pos, length);
5204
0
      break;
5205
0
    case DCCREQ_INIT_TECH:
5206
0
      if (length == 1)
5207
0
      {
5208
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccreq_init_tech, tvb, pos, length, ENC_BIG_ENDIAN);
5209
0
      }
5210
0
      else
5211
0
      {
5212
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5213
0
      }
5214
0
      break;
5215
0
    case DCCREQ_UCD_SUB:
5216
0
      proto_tree_add_item (tlv_tree, hf_docsis_dccreq_ucd_sub, tvb, pos, length, ENC_NA);
5217
0
      break;
5218
0
    case DCCREQ_SAID_SUB:
5219
0
      if (length == 4)
5220
0
      {
5221
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccreq_said_sub_cur, tvb, pos, 2, ENC_BIG_ENDIAN);
5222
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccreq_said_sub_new, tvb, pos + 2, 2, ENC_BIG_ENDIAN);
5223
0
      }
5224
0
      else
5225
0
      {
5226
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5227
0
      }
5228
0
      break;
5229
0
    case DCCREQ_SF_SUB:
5230
0
      dissect_dccreq_sf_sub (tvb, pinfo, tlv_tree, pos, length );
5231
0
      break;
5232
0
    case DCCREQ_CMTS_MAC_ADDR:
5233
0
      if (length == 6)
5234
0
      {
5235
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccreq_cmts_mac_addr, tvb, pos, length, ENC_NA);
5236
0
      }
5237
0
      else
5238
0
      {
5239
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5240
0
      }
5241
0
      break;
5242
0
    case DCCREQ_KEY_SEQ_NUM:
5243
0
      if (length == 1)
5244
0
      {
5245
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccreq_key_seq_num, tvb, pos, length, ENC_BIG_ENDIAN);
5246
0
      }
5247
0
      else
5248
0
      {
5249
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5250
0
      }
5251
0
      break;
5252
0
    case DCCREQ_HMAC_DIGEST:
5253
0
      if (length == 20)
5254
0
      {
5255
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccreq_hmac_digest, tvb, pos, length, ENC_NA);
5256
0
      }
5257
0
      else
5258
0
      {
5259
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5260
0
      }
5261
0
      break;
5262
0
    }       /* switch(type) */
5263
0
    pos += length;
5264
0
  }         /* (tvb_reported_length_remaining(tvb, pos) > 0) */
5265
0
  return tvb_captured_length(tvb);
5266
0
}
5267
5268
static void
5269
dissect_dccrsp_cm_jump_time (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5270
0
{
5271
0
  uint8_t type;
5272
0
  uint32_t length;
5273
0
  proto_tree *dcc_tree;
5274
0
  proto_item *dcc_item, *tlv_len_item;
5275
0
  int pos;
5276
5277
0
  pos = start;
5278
0
  while ( pos < ( start + len) )
5279
0
  {
5280
0
    type = tvb_get_uint8 (tvb, pos);
5281
0
    dcc_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5282
0
                                            ett_docsis_dccrsp_cm_jump_time, &dcc_item,
5283
0
                                            val_to_str(pinfo->pool, type, cm_jump_subtlv_vals,
5284
0
                                                       "Unknown TLV (%u)"));
5285
0
    proto_tree_add_uint (dcc_tree, hf_docsis_dcc_cm_jump_subtype, tvb, pos, 1, type);
5286
0
    pos++;
5287
0
    tlv_len_item = proto_tree_add_item_ret_uint (dcc_tree, hf_docsis_dcc_cm_jump_length, tvb, pos, 1, ENC_NA, &length);
5288
0
    pos++;
5289
0
    proto_item_set_len(dcc_item, length + 2);
5290
5291
0
    switch (type)
5292
0
    {
5293
0
    case DCCRSP_CM_JUMP_TIME_LENGTH:
5294
0
      if (length == 4)
5295
0
      {
5296
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccrsp_cm_jump_time_length, tvb, pos, length, ENC_BIG_ENDIAN);
5297
0
      }
5298
0
      else
5299
0
      {
5300
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5301
0
      }
5302
0
      break;
5303
0
    case DCCRSP_CM_JUMP_TIME_START:
5304
0
      if (length == 8)
5305
0
      {
5306
0
        proto_tree_add_item (dcc_tree, hf_docsis_dccrsp_cm_jump_time_start, tvb, pos, length, ENC_BIG_ENDIAN);
5307
0
      }
5308
0
      else
5309
0
      {
5310
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5311
0
      }
5312
0
      break;
5313
0
    }
5314
5315
0
    pos += length;
5316
0
  }
5317
0
}
5318
5319
static int
5320
dissect_dccrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5321
0
{
5322
0
  uint16_t pos;
5323
0
  uint8_t type;
5324
0
  uint32_t length;
5325
0
  proto_tree *dcc_tree, *tlv_tree;
5326
0
  proto_item *dcc_item, *tlv_item, *tlv_len_item;
5327
5328
0
  col_set_str(pinfo->cinfo, COL_INFO, "DCC-RSP Message");
5329
5330
0
  dcc_item = proto_tree_add_item (tree, proto_docsis_dccrsp, tvb, 0, -1, ENC_NA);
5331
0
  dcc_tree = proto_item_add_subtree (dcc_item, ett_docsis_dccrsp);
5332
0
  proto_tree_add_item (dcc_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN);
5333
0
  proto_tree_add_item (dcc_tree, hf_docsis_dccrsp_conf_code, tvb, 2, 1, ENC_BIG_ENDIAN);
5334
5335
0
  pos = 3;
5336
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
5337
0
  {
5338
0
    type = tvb_get_uint8 (tvb, pos);
5339
0
    tlv_tree = proto_tree_add_subtree(dcc_tree, tvb, pos, -1,
5340
0
                                            ett_docsis_dccrsp_tlv, &tlv_item,
5341
0
                                            val_to_str(pinfo->pool, type, dccrsp_tlv_vals,
5342
0
                                                       "Unknown TLV (%u)"));
5343
0
    proto_tree_add_uint (tlv_tree, hf_docsis_dccrsp_type, tvb, pos, 1, type);
5344
0
    pos++;
5345
0
    tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dccrsp_length, tvb, pos, 1, ENC_NA, &length);
5346
0
    pos++;
5347
0
    proto_item_set_len(tlv_item, length + 2);
5348
5349
0
    switch (type)
5350
0
    {
5351
0
    case DCCRSP_CM_JUMP_TIME:
5352
0
      dissect_dccrsp_cm_jump_time (tvb, pinfo, tlv_tree, pos, length );
5353
0
      break;
5354
0
    case DCCRSP_KEY_SEQ_NUM:
5355
0
      if (length == 1)
5356
0
      {
5357
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccrsp_key_seq_num, tvb, pos, length, ENC_BIG_ENDIAN);
5358
0
      }
5359
0
      else
5360
0
      {
5361
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5362
0
      }
5363
0
      break;
5364
0
    case DCCRSP_HMAC_DIGEST:
5365
0
      if (length == 20)
5366
0
      {
5367
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccrsp_hmac_digest, tvb, pos, length, ENC_NA);
5368
0
      }
5369
0
      else
5370
0
      {
5371
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5372
0
      }
5373
0
      break;
5374
0
    }      /* switch(type) */
5375
5376
0
    pos += length;
5377
0
  }       /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
5378
5379
0
  return tvb_captured_length(tvb);
5380
0
}
5381
5382
static int
5383
dissect_dccack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5384
0
{
5385
0
  uint16_t pos;
5386
0
  uint8_t type;
5387
0
  uint32_t length;
5388
0
  proto_tree *dcc_tree, *tlv_tree;
5389
0
  proto_item *dcc_item, *tlv_item, *tlv_len_item;
5390
5391
0
  col_set_str(pinfo->cinfo, COL_INFO, "DCC-ACK Message");
5392
5393
0
  dcc_item = proto_tree_add_item(tree, proto_docsis_dccack, tvb, 0, -1, ENC_NA);
5394
0
  dcc_tree = proto_item_add_subtree (dcc_item, ett_docsis_dccack);
5395
0
  proto_tree_add_item (dcc_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN);
5396
5397
0
  pos = 2;
5398
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
5399
0
  {
5400
0
    type = tvb_get_uint8 (tvb, pos);
5401
0
    tlv_tree = proto_tree_add_subtree(dcc_tree, tvb, pos, -1,
5402
0
                                            ett_docsis_dccack_tlv, &tlv_item,
5403
0
                                            val_to_str(pinfo->pool, type, dccack_tlv_vals,
5404
0
                                                       "Unknown TLV (%u)"));
5405
0
    proto_tree_add_uint (tlv_tree, hf_docsis_dccack_type, tvb, pos, 1, type);
5406
0
    pos++;
5407
0
    tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dccack_length, tvb, pos, 1, ENC_NA, &length);
5408
0
    pos++;
5409
0
    proto_item_set_len(tlv_item, length + 2);
5410
5411
0
    switch (type)
5412
0
    {
5413
0
    case DCCACK_KEY_SEQ_NUM:
5414
0
      if (length == 1)
5415
0
      {
5416
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccack_key_seq_num, tvb, pos, length, ENC_BIG_ENDIAN);
5417
0
      }
5418
0
      else
5419
0
      {
5420
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5421
0
      }
5422
0
      break;
5423
0
    case DCCACK_HMAC_DIGEST:
5424
0
      if (length == 20)
5425
0
      {
5426
0
        proto_tree_add_item (tlv_tree, hf_docsis_dccack_hmac_digest, tvb, pos, length, ENC_NA);
5427
0
      }
5428
0
      else
5429
0
      {
5430
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5431
0
      }
5432
0
      break;
5433
0
    }      /* switch(type) */
5434
5435
0
    pos += length;
5436
0
  }        /*   while (tvb_reported_length_remaining(tvb, pos) > 0) */
5437
5438
0
  return tvb_captured_length(tvb);
5439
0
}
5440
5441
static int
5442
dissect_type29ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5443
0
{
5444
0
  return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_type29ucd, MGT_TYPE29UCD);
5445
0
}
5446
5447
static int
5448
dissect_intrngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5449
0
{
5450
0
  proto_item *intrngreq_item;
5451
0
  proto_tree *intrngreq_tree;
5452
0
  uint32_t sid;
5453
5454
0
  intrngreq_item = proto_tree_add_item(tree, proto_docsis_intrngreq, tvb, 0, -1, ENC_NA);
5455
0
  intrngreq_tree = proto_item_add_subtree (intrngreq_item, ett_docsis_intrngreq);
5456
5457
0
  proto_tree_add_item_ret_uint (intrngreq_tree, hf_docsis_intrngreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
5458
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "Initial Ranging Request: SID = %u",sid);
5459
5460
0
  proto_tree_add_item (intrngreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN);
5461
0
  proto_tree_add_item (intrngreq_tree, hf_docsis_mgt_upstream_chid, tvb, 3, 1, ENC_BIG_ENDIAN);
5462
5463
0
  return tvb_captured_length(tvb);
5464
0
}
5465
5466
static void
5467
dissect_dcd_dsg_cfg (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5468
0
{
5469
0
  uint8_t type;
5470
0
  uint32_t length;
5471
0
  proto_tree *dcd_tree;
5472
0
  proto_tree *dcd_item, *tlv_len_item;
5473
0
  int pos;
5474
5475
0
  pos = start;
5476
0
  while ( pos < ( start + len) )
5477
0
  {
5478
0
    type = tvb_get_uint8 (tvb, pos);
5479
0
    dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5480
0
                                            ett_docsis_dcd_cfg, &dcd_item,
5481
0
                                            val_to_str(pinfo->pool, type, dcd_cfg_vals,
5482
0
                                                       "Unknown TLV (%u)"));
5483
0
    proto_tree_add_uint (dcd_tree, hf_docsis_dcd_cfg_subtype, tvb, pos, 1, type);
5484
0
    pos++;
5485
0
    tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_cfg_length, tvb, pos, 1, ENC_NA, &length);
5486
0
    pos++;
5487
0
    proto_item_set_len(dcd_item, length + 2);
5488
5489
0
    switch (type)
5490
0
    {
5491
0
    case DCD_CFG_CHAN_LST:
5492
0
      if (length == 4)
5493
0
      {
5494
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_chan, tvb, pos, length, ENC_BIG_ENDIAN);
5495
0
      }
5496
0
      else
5497
0
      {
5498
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5499
0
      }
5500
0
      break;
5501
0
    case DCD_CFG_TDSG1:
5502
0
      if (length == 2)
5503
0
      {
5504
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg1, tvb, pos, length, ENC_BIG_ENDIAN);
5505
0
      }
5506
0
      else
5507
0
      {
5508
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5509
0
      }
5510
0
      break;
5511
0
    case DCD_CFG_TDSG2:
5512
0
      if (length == 2)
5513
0
      {
5514
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg2, tvb, pos, length, ENC_BIG_ENDIAN);
5515
0
      }
5516
0
      else
5517
0
      {
5518
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5519
0
      }
5520
0
      break;
5521
0
    case DCD_CFG_TDSG3:
5522
0
      if (length == 2)
5523
0
      {
5524
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg3, tvb, pos, length, ENC_BIG_ENDIAN);
5525
0
      }
5526
0
      else
5527
0
      {
5528
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5529
0
      }
5530
0
      break;
5531
0
    case DCD_CFG_TDSG4:
5532
0
      if (length == 2)
5533
0
      {
5534
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg4, tvb, pos, length, ENC_BIG_ENDIAN);
5535
0
      }
5536
0
      else
5537
0
      {
5538
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5539
0
      }
5540
0
      break;
5541
0
    case DCD_CFG_VENDOR_SPEC:
5542
0
      proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_vendor_spec, tvb, pos, length, ENC_NA);
5543
0
      break;
5544
5545
0
    }
5546
5547
0
    pos += length;
5548
0
  }
5549
0
}
5550
5551
static void
5552
dissect_dcd_down_classifier_ip (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5553
0
{
5554
0
  uint8_t type;
5555
0
  uint32_t length;
5556
0
  proto_tree *dcd_tree;
5557
0
  proto_tree *dcd_item, *tlv_len_item;
5558
0
  int pos;
5559
5560
0
  pos = start;
5561
0
  while ( pos < ( start + len) )
5562
0
  {
5563
0
    type = tvb_get_uint8 (tvb, pos);
5564
0
    dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5565
0
                                            ett_docsis_dcd_cfr_ip, &dcd_item,
5566
0
                                            val_to_str(pinfo->pool, type, dcd_cfr_ip_vals,
5567
0
                                                       "Unknown TLV (%u)"));
5568
0
    proto_tree_add_uint (dcd_tree, hf_docsis_dcd_cfr_ip_subtype, tvb, pos, 1, type);
5569
0
    pos++;
5570
0
    tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_cfr_ip_length, tvb, pos, 1, ENC_NA, &length);
5571
0
    pos++;
5572
0
    proto_item_set_len(dcd_item, length + 2);
5573
5574
0
    switch (type)
5575
0
    {
5576
0
    case DCD_CFR_IP_SOURCE_ADDR:
5577
0
      if (length == 4)
5578
0
      {
5579
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_source_addr, tvb, pos, length, ENC_BIG_ENDIAN);
5580
0
      }
5581
0
      else
5582
0
      {
5583
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5584
0
      }
5585
0
      break;
5586
0
    case DCD_CFR_IP_SOURCE_MASK:
5587
0
      if (length == 4)
5588
0
      {
5589
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_source_mask, tvb, pos, length, ENC_BIG_ENDIAN);
5590
0
      }
5591
0
      else
5592
0
      {
5593
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5594
0
      }
5595
0
      break;
5596
0
    case DCD_CFR_IP_DEST_ADDR:
5597
0
      if (length == 4)
5598
0
      {
5599
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_dest_addr, tvb, pos, length, ENC_BIG_ENDIAN);
5600
0
      }
5601
0
      else
5602
0
      {
5603
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5604
0
      }
5605
0
      break;
5606
0
    case DCD_CFR_IP_DEST_MASK:
5607
0
      if (length == 4)
5608
0
      {
5609
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_dest_mask, tvb, pos, length, ENC_BIG_ENDIAN);
5610
0
      }
5611
0
      else
5612
0
      {
5613
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5614
0
      }
5615
0
      break;
5616
0
    case DCD_CFR_TCPUDP_SRCPORT_START:
5617
0
      if (length == 2)
5618
0
      {
5619
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_srcport_start, tvb, pos, length, ENC_BIG_ENDIAN);
5620
0
      }
5621
0
      else
5622
0
      {
5623
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5624
0
      }
5625
0
      break;
5626
0
    case DCD_CFR_TCPUDP_SRCPORT_END:
5627
0
      if (length == 2)
5628
0
      {
5629
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_srcport_end, tvb, pos, length, ENC_BIG_ENDIAN);
5630
0
      }
5631
0
      else
5632
0
      {
5633
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5634
0
      }
5635
0
      break;
5636
0
    case DCD_CFR_TCPUDP_DSTPORT_START:
5637
0
      if (length == 2)
5638
0
      {
5639
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_dstport_start, tvb, pos, length, ENC_BIG_ENDIAN);
5640
0
      }
5641
0
      else
5642
0
      {
5643
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5644
0
      }
5645
0
      break;
5646
0
    case DCD_CFR_TCPUDP_DSTPORT_END:
5647
0
      if (length == 2)
5648
0
      {
5649
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_dstport_end, tvb, pos, length, ENC_BIG_ENDIAN);
5650
0
      }
5651
0
      else
5652
0
      {
5653
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5654
0
      }
5655
0
      break;
5656
0
    }
5657
5658
0
    pos += length;
5659
0
  }
5660
0
}
5661
5662
static void
5663
dissect_dcd_clid (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5664
0
{
5665
0
  uint8_t type;
5666
0
  uint32_t length;
5667
0
  proto_tree *dcd_tree;
5668
0
  proto_tree *dcd_item, *tlv_len_item;
5669
0
  int pos;
5670
5671
0
  pos = start;
5672
0
  while ( pos < ( start + len) )
5673
0
  {
5674
0
    type = tvb_get_uint8 (tvb, pos);
5675
0
    dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5676
0
                                            ett_docsis_dcd_clid, &dcd_item,
5677
0
                                            val_to_str(pinfo->pool, type, dcd_clid_vals,
5678
0
                                                       "Unknown TLV (%u)"));
5679
0
    proto_tree_add_uint (dcd_tree, hf_docsis_dcd_clid_subtype, tvb, pos, 1, type);
5680
0
    pos++;
5681
0
    tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_clid_length, tvb, pos, 1, ENC_NA, &length);
5682
0
    pos++;
5683
0
    proto_item_set_len(dcd_item, length + 2);
5684
5685
0
    switch (type)
5686
0
    {
5687
0
    case DCD_CLID_BCAST_ID:
5688
0
      if (length == 2)
5689
0
      {
5690
0
        proto_tree_add_item(dcd_tree, hf_docsis_dcd_clid_bcast_id, tvb, pos, length, ENC_BIG_ENDIAN);
5691
0
      }
5692
0
      else
5693
0
      {
5694
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5695
0
      }
5696
0
      break;
5697
0
    case DCD_CLID_KNOWN_MAC_ADDR:
5698
0
      if (length == 6)
5699
0
      {
5700
0
       proto_tree_add_item (dcd_tree, hf_docsis_dcd_clid_known_mac_addr, tvb, pos, length, ENC_NA);
5701
0
      }
5702
0
      else
5703
0
      {
5704
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5705
0
      }
5706
0
      break;
5707
0
    case DCD_CLID_CA_SYS_ID:
5708
0
      if (length == 2)
5709
0
      {
5710
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_clid_ca_sys_id, tvb, pos, length, ENC_BIG_ENDIAN);
5711
0
      }
5712
0
      else
5713
0
      {
5714
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5715
0
      }
5716
0
      break;
5717
0
    case DCD_CLID_APP_ID:
5718
0
      if (length == 2)
5719
0
      {
5720
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_clid_app_id, tvb, pos, length, ENC_BIG_ENDIAN);
5721
0
      }
5722
0
      else
5723
0
      {
5724
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5725
0
      }
5726
0
      break;
5727
0
    }
5728
5729
0
    pos += length;
5730
0
  }
5731
0
}
5732
5733
static void
5734
dissect_dcd_dsg_rule (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5735
0
{
5736
0
  uint8_t type;
5737
0
  uint32_t length;
5738
0
  proto_tree *dcd_tree;
5739
0
  proto_tree *dcd_item, *tlv_len_item;
5740
0
  int pos;
5741
5742
0
  pos = start;
5743
0
  while ( pos < ( start + len) )
5744
0
  {
5745
0
    type = tvb_get_uint8 (tvb, pos);
5746
0
    dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5747
0
                                            ett_docsis_dcd_rule, &dcd_item,
5748
0
                                            val_to_str(pinfo->pool, type, dcd_dsg_rule_vals,
5749
0
                                                       "Unknown TLV (%u)"));
5750
0
    proto_tree_add_uint (dcd_tree, hf_docsis_dcd_dsg_rule_subtype, tvb, pos, 1, type);
5751
0
    pos++;
5752
0
    tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_dsg_rule_length, tvb, pos, 1, ENC_NA, &length);
5753
0
    pos++;
5754
0
    proto_item_set_len(dcd_item, length + 2);
5755
5756
0
    switch (type)
5757
0
    {
5758
0
    case DCD_RULE_ID:
5759
0
      if (length == 1)
5760
0
      {
5761
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_id, tvb, pos, length, ENC_BIG_ENDIAN);
5762
0
      }
5763
0
      else
5764
0
      {
5765
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5766
0
      }
5767
0
      break;
5768
0
    case DCD_RULE_PRI:
5769
0
      if (length == 1)
5770
0
      {
5771
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_pri, tvb, pos, length, ENC_BIG_ENDIAN);
5772
0
      }
5773
0
      else
5774
0
      {
5775
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5776
0
      }
5777
0
      break;
5778
0
    case DCD_RULE_UCID_RNG:
5779
0
      proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_ucid_list, tvb, pos, length, ENC_NA);
5780
0
      break;
5781
0
    case DCD_RULE_CLIENT_ID:
5782
0
      dissect_dcd_clid (tvb, pinfo, dcd_tree, pos, length );
5783
0
      break;
5784
0
    case DCD_RULE_TUNL_ADDR:
5785
0
      if (length == 6)
5786
0
      {
5787
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_tunl_addr, tvb, pos, length, ENC_NA);
5788
0
      }
5789
0
      else
5790
0
      {
5791
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5792
0
      }
5793
0
      break;
5794
0
    case DCD_RULE_CFR_ID:
5795
0
      if (length == 2)
5796
0
      {
5797
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_cfr_id, tvb, pos, length, ENC_BIG_ENDIAN);
5798
0
      }
5799
0
      else
5800
0
      {
5801
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5802
0
      }
5803
0
      break;
5804
0
    case DCD_RULE_VENDOR_SPEC:
5805
0
      proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_vendor_spec, tvb, pos, length, ENC_NA);
5806
0
      break;
5807
5808
0
    }
5809
5810
0
    pos += length;
5811
0
  }
5812
0
}
5813
5814
static void
5815
dissect_dcd_down_classifier (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, uint16_t len)
5816
0
{
5817
0
  uint8_t type;
5818
0
  uint32_t length;
5819
0
  proto_tree *dcd_tree;
5820
0
  proto_tree *dcd_item, *tlv_len_item;
5821
0
  int pos;
5822
5823
0
  pos = start;
5824
0
  while ( pos < ( start + len) )
5825
0
  {
5826
0
    type = tvb_get_uint8 (tvb, pos);
5827
0
    dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5828
0
                                            ett_docsis_dcd_cfr, &dcd_item,
5829
0
                                            val_to_str(pinfo->pool, type, dcd_down_classifier_vals,
5830
0
                                                       "Unknown TLV (%u)"));
5831
0
    proto_tree_add_uint (dcd_tree, hf_docsis_dcd_down_classifier_subtype, tvb, pos, 1, type);
5832
0
    pos++;
5833
0
    tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_down_classifier_length, tvb, pos, 1, ENC_NA, &length);
5834
0
    pos++;
5835
0
    proto_item_set_len(dcd_item, length + 2);
5836
5837
0
    switch (type)
5838
0
    {
5839
0
    case DCD_CFR_ID:
5840
0
      if (length == 2)
5841
0
      {
5842
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_id, tvb, pos, length, ENC_BIG_ENDIAN);
5843
0
      }
5844
0
      else
5845
0
      {
5846
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5847
0
      }
5848
0
      break;
5849
0
    case DCD_CFR_RULE_PRI:
5850
0
      if (length == 1)
5851
0
      {
5852
0
        proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_rule_pri, tvb, pos, length, ENC_BIG_ENDIAN);
5853
0
      }
5854
0
      else
5855
0
      {
5856
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
5857
0
      }
5858
0
      break;
5859
0
    case DCD_CFR_IP_CLASSIFIER:
5860
0
      dissect_dcd_down_classifier_ip (tvb , pinfo , dcd_tree , pos , length );
5861
0
      break;
5862
0
    }
5863
5864
0
    pos += length;
5865
0
  }
5866
0
}
5867
5868
static int
5869
dissect_dcd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
5870
0
{
5871
0
  uint16_t pos;
5872
0
  uint8_t type;
5873
0
  uint32_t length;
5874
0
  proto_tree *dcd_tree, *tlv_tree;
5875
0
  proto_item *dcd_item, *tlv_item;
5876
5877
0
  col_set_str(pinfo->cinfo, COL_INFO, "DCD Message: ");
5878
5879
0
  dcd_item = proto_tree_add_item(tree, proto_docsis_dcd, tvb, 0, -1, ENC_NA);
5880
0
  dcd_tree = proto_item_add_subtree (dcd_item, ett_docsis_dcd);
5881
0
  proto_tree_add_item (dcd_tree, hf_docsis_dcd_config_ch_cnt, tvb, 0, 1, ENC_BIG_ENDIAN);
5882
0
  proto_tree_add_item (dcd_tree, hf_docsis_dcd_num_of_frag, tvb, 1, 1, ENC_BIG_ENDIAN);
5883
0
  proto_tree_add_item (dcd_tree, hf_docsis_dcd_frag_sequence_num, tvb, 2, 1, ENC_BIG_ENDIAN);
5884
5885
0
  pos = 3;
5886
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
5887
0
  {
5888
0
    type = tvb_get_uint8 (tvb, pos);
5889
0
    tlv_tree = proto_tree_add_subtree(dcd_tree, tvb, pos, -1,
5890
0
                                            ett_docsis_dcd_tlv, &tlv_item,
5891
0
                                            val_to_str(pinfo->pool, type, dcd_tlv_vals,
5892
0
                                                       "Unknown TLV (%u)"));
5893
0
    proto_tree_add_uint (tlv_tree, hf_docsis_dcd_type, tvb, pos, 1, type);
5894
0
    pos++;
5895
0
    proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dcd_length, tvb, pos, 1, ENC_NA, &length);
5896
0
    pos++;
5897
0
    proto_item_set_len(tlv_item, length + 2);
5898
5899
0
    switch (type)
5900
0
    {
5901
0
    case DCD_DOWN_CLASSIFIER:
5902
0
      dissect_dcd_down_classifier (tvb, pinfo, tlv_tree, pos, length);
5903
0
      break;
5904
0
    case DCD_DSG_RULE:
5905
0
      dissect_dcd_dsg_rule (tvb, pinfo, tlv_tree, pos, length);
5906
0
      break;
5907
0
    case DCD_DSG_CONFIG:
5908
0
      dissect_dcd_dsg_cfg (tvb, pinfo, tlv_tree, pos, length);
5909
0
      break;
5910
0
    }     /* switch(type) */
5911
5912
0
     pos += length;
5913
0
  }       /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
5914
5915
0
  return tvb_captured_length(tvb);
5916
0
}
5917
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)
5920
0
{
5921
0
  uint8_t type;
5922
0
  uint32_t length;
5923
0
  proto_tree *mdd_tree;
5924
0
  proto_item *mdd_item;
5925
0
  int pos;
5926
0
  static int * const order_annex[] = {
5927
0
    &hf_docsis_mdd_downstream_active_channel_list_modulation_order,
5928
0
    &hf_docsis_mdd_downstream_active_channel_list_annex,
5929
0
    NULL
5930
0
  };
5931
0
  static int * const cm_status_event[] = {
5932
0
    &hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_timeout,
5933
0
    &hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_failure,
5934
0
    &hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_recovery,
5935
0
    &hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_recovery,
5936
0
    NULL
5937
0
  };
5938
0
  static int * const ofdm_plc_parameters[] = {
5939
0
    &hf_docsis_mdd_ofdm_plc_parameters_tukey_raised_cosine_window,
5940
0
    &hf_docsis_mdd_ofdm_plc_parameters_cyclic_prefix,
5941
0
    &hf_docsis_mdd_ofdm_plc_parameters_sub_carrier_spacing,
5942
0
    NULL
5943
0
  };
5944
5945
0
  pos = start;
5946
0
  while ( pos < ( start + len) )
5947
0
  {
5948
0
    type = tvb_get_uint8 (tvb, pos);
5949
0
    mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
5950
0
                                            ett_docsis_mdd_ds_active_channel_list, &mdd_item,
5951
0
                                            val_to_str(pinfo->pool, type, mdd_ds_active_channel_list_vals,
5952
0
                                                       "Unknown TLV (%u)"));
5953
0
    proto_tree_add_uint (mdd_tree, hf_docsis_mdd_ds_active_channel_list_subtype, tvb, pos, 1, type);
5954
0
    pos++;
5955
0
    proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_ds_active_channel_list_length, tvb, pos, 1, ENC_NA, &length);
5956
0
    pos++;
5957
0
    proto_item_set_len(mdd_item, length + 2);
5958
5959
0
    switch(type)
5960
0
    {
5961
0
    case DOWNSTREAM_ACTIVE_CHANNEL_LIST_CHANNEL_ID:
5962
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_channel_id, tvb, pos, 1, ENC_BIG_ENDIAN);
5963
0
      break;
5964
0
    case DOWNSTREAM_ACTIVE_CHANNEL_LIST_FREQUENCY:
5965
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_frequency, tvb, pos, 4, ENC_BIG_ENDIAN);
5966
0
      break;
5967
0
    case DOWNSTREAM_ACTIVE_CHANNEL_LIST_MODULATION_ORDER_ANNEX:
5968
0
      proto_tree_add_bitmask_list(mdd_tree, tvb, pos, 1, order_annex, ENC_BIG_ENDIAN);
5969
0
      break;
5970
0
    case DOWNSTREAM_ACTIVE_CHANNEL_LIST_PRIMARY_CAPABLE:
5971
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_primary_capable, tvb, pos, 1, ENC_BIG_ENDIAN);
5972
0
      break;
5973
0
    case DOWNSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK:
5974
0
      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
0
      break;
5976
0
    case DOWNSTREAM_ACTIVE_CHANNEL_LIST_MAP_UCD_TRANSPORT_INDICATOR:
5977
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_map_ucd_transport_indicator, tvb, pos, 1, ENC_BIG_ENDIAN);
5978
0
      break;
5979
0
    case DOWNSTREAM_ACTIVE_CHANNEL_LIST_OFDM_PLC_PARAMETERS:
5980
0
      proto_tree_add_bitmask(mdd_tree, tvb, pos, hf_docsis_mdd_ofdm_plc_parameters, ett_sub_tlv, ofdm_plc_parameters, ENC_BIG_ENDIAN);
5981
0
      break;
5982
0
    case DOWNSTREAM_ACTIVE_CHANNEL_LIST_FDX_SUB_BAND_ID:
5983
0
      proto_tree_add_item(mdd_tree, hf_docsis_mdd_downstream_active_channel_list_fdx_sub_band_id, tvb, pos, 1, ENC_BIG_ENDIAN);
5984
0
      break;
5985
0
    case DOWNSTREAM_ACTIVE_CHANNEL_LIST_FDX_DS:
5986
0
      proto_tree_add_item(mdd_tree, hf_docsis_mdd_downstream_active_channel_list_fdx_ds, tvb, pos, 1, ENC_BIG_ENDIAN);
5987
0
      break;
5988
0
    }
5989
5990
0
    pos += length;
5991
0
  }
5992
0
}
5993
5994
static void
5995
dissect_mdd_ds_service_group(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
5996
0
{
5997
0
  uint8_t type;
5998
0
  uint32_t i, length;
5999
0
  proto_tree *mdd_tree;
6000
0
  proto_item *mdd_item;
6001
0
  int pos;
6002
6003
0
  pos = start;
6004
0
  while ( pos < ( start + len) )
6005
0
  {
6006
0
    type = tvb_get_uint8 (tvb, pos);
6007
0
    mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6008
0
                                            ett_docsis_mdd_ds_service_group, &mdd_item,
6009
0
                                            val_to_str(pinfo->pool, type, mdd_ds_service_group_vals,
6010
0
                                                       "Unknown TLV (%u)"));
6011
0
    proto_tree_add_uint (mdd_tree, hf_docsis_mdd_ds_service_group_subtype, tvb, pos, 1, type);
6012
0
    pos++;
6013
0
    proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_ds_service_group_length, tvb, pos, 1, ENC_NA, &length);
6014
0
    pos++;
6015
0
    proto_item_set_len(mdd_item, length + 2);
6016
6017
0
    switch(type)
6018
0
    {
6019
0
    case MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_MD_DS_SG_IDENTIFIER:
6020
0
      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
0
     break;
6022
0
    case MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_CHANNEL_IDS:
6023
0
      for (i = 0; i < length; i++) {
6024
0
        proto_tree_add_item (mdd_tree, hf_docsis_mdd_mac_domain_downstream_service_group_channel_id, tvb, pos + i , 1, ENC_BIG_ENDIAN);
6025
0
      }
6026
0
      break;
6027
0
    }
6028
6029
0
    pos += length;
6030
0
  }
6031
0
}
6032
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)
6035
0
{
6036
0
  uint8_t type;
6037
0
  uint32_t length;
6038
0
  proto_tree *mdd_tree;
6039
0
  proto_item *mdd_item;
6040
0
  int pos;
6041
6042
0
  pos = start;
6043
0
  while ( pos < ( start + len) )
6044
0
  {
6045
0
    type = tvb_get_uint8 (tvb, pos);
6046
0
    mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6047
0
                                            ett_docsis_mdd_channel_profile_reporting_control, &mdd_item,
6048
0
                                            val_to_str(pinfo->pool, type, mdd_channel_profile_reporting_control_vals,
6049
0
                                                       "Unknown TLV (%u)"));
6050
0
    proto_tree_add_uint (mdd_tree, hf_docsis_mdd_channel_profile_reporting_control_subtype, tvb, pos, 1, type);
6051
0
    pos++;
6052
0
    proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_channel_profile_reporting_control_length, tvb, pos, 1, ENC_NA, &length);
6053
0
    pos++;
6054
0
    proto_item_set_len(mdd_item, length + 2);
6055
6056
0
    switch(type)
6057
0
    {
6058
0
    case RCP_CENTER_FREQUENCY_SPACING:
6059
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_rcp_center_frequency_spacing, tvb, pos, 1, ENC_BIG_ENDIAN);
6060
0
      break;
6061
0
    case VERBOSE_RCP_REPORTING:
6062
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_verbose_rcp_reporting, tvb, pos, 1, ENC_BIG_ENDIAN);
6063
0
      break;
6064
0
    case FRAGMENTED_RCP_TRANSMISSION:
6065
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_fragmented_rcp_transmission, tvb, pos, 1, ENC_BIG_ENDIAN);
6066
0
      break;
6067
0
    }
6068
6069
0
    pos += length;
6070
0
  }
6071
0
}
6072
6073
static void
6074
dissect_mdd_ip_init_param(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
6075
0
{
6076
0
  uint8_t type;
6077
0
  uint32_t length;
6078
0
  proto_tree *mdd_tree;
6079
0
  proto_item *mdd_item;
6080
0
  int pos;
6081
6082
0
  pos = start;
6083
0
  while ( pos < ( start + len) )
6084
0
  {
6085
0
    type = tvb_get_uint8 (tvb, pos);
6086
0
    mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6087
0
                                            ett_docsis_mdd_ip_init_param, &mdd_item,
6088
0
                                            val_to_str(pinfo->pool, type, mdd_ip_init_param_vals,
6089
0
                                                       "Unknown TLV (%u)"));
6090
0
    proto_tree_add_uint (mdd_tree, hf_docsis_mdd_ip_init_param_subtype, tvb, pos, 1, type);
6091
0
    pos++;
6092
0
    proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_ip_init_param_length, tvb, pos, 1, ENC_NA, &length);
6093
0
    pos++;
6094
0
    proto_item_set_len(mdd_item, length + 2);
6095
6096
0
    switch(type)
6097
0
    {
6098
0
    case IP_PROVISIONING_MODE:
6099
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_ip_provisioning_mode, tvb, pos, 1, ENC_BIG_ENDIAN);
6100
0
      break;
6101
0
    case PRE_REGISTRATION_DSID:
6102
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_pre_registration_dsid, tvb, pos, 3, ENC_BIG_ENDIAN);
6103
0
      break;
6104
0
    }
6105
6106
0
    pos += length;
6107
0
  }
6108
0
}
6109
6110
static void
6111
dissect_mdd_upstream_active_channel_list_dschids_maps_ucds(tvbuff_t * tvb, proto_tree * tree, unsigned start, uint16_t len)
6112
0
{
6113
0
  uint16_t i;
6114
0
  proto_item *it;
6115
0
  proto_tree *dschid_tree;
6116
6117
0
  it = proto_tree_add_item (tree, hf_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds, tvb, start, len, ENC_NA);
6118
0
  dschid_tree = proto_item_add_subtree (it, ett_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds_dschids);
6119
6120
0
  for(i = 0; i< len; ++i)
6121
0
  {
6122
0
    proto_tree_add_item (dschid_tree, hf_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds_dschid, tvb, start + i, 1, ENC_BIG_ENDIAN);
6123
0
  }
6124
0
}
6125
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)
6128
0
{
6129
0
  uint8_t type;
6130
0
  uint32_t length;
6131
0
  proto_tree *mdd_tree;
6132
0
  proto_item *mdd_item;
6133
0
  int pos;
6134
0
  static int * const cm_status_event[] = {
6135
0
    &hf_docsis_mdd_cm_status_event_enable_bitmask_t4_timeout,
6136
0
    &hf_docsis_mdd_cm_status_event_enable_bitmask_t3_retries_exceeded,
6137
0
    &hf_docsis_mdd_cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded,
6138
0
    NULL
6139
0
  };
6140
6141
0
  pos = start;
6142
0
  while ( pos < ( start + len) )
6143
0
  {
6144
0
    type = tvb_get_uint8 (tvb, pos);
6145
0
    mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6146
0
                                            ett_docsis_mdd_up_active_channel_list, &mdd_item,
6147
0
                                            val_to_str(pinfo->pool, type, mdd_up_active_channel_list_vals,
6148
0
                                                       "Unknown TLV (%u)"));
6149
0
    proto_tree_add_uint (mdd_tree, hf_docsis_mdd_up_active_channel_list_subtype, tvb, pos, 1, type);
6150
0
    pos++;
6151
0
    proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_up_active_channel_list_length, tvb, pos, 1, ENC_NA, &length);
6152
0
    pos++;
6153
0
    proto_item_set_len(mdd_item, length + 2);
6154
6155
0
    switch(type)
6156
0
    {
6157
0
    case UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_ID:
6158
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_upstream_active_channel_list_upstream_channel_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6159
0
      break;
6160
0
    case UPSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK:
6161
0
      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
0
      break;
6163
0
    case UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_PRIORITY:
6164
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_upstream_active_channel_list_upstream_channel_priority, tvb, pos, 1, ENC_BIG_ENDIAN);
6165
0
      break;
6166
0
    case UPSTREAM_ACTIVE_CHANNEL_LIST_DSCHIDS_MAPS_UCDS:
6167
0
      dissect_mdd_upstream_active_channel_list_dschids_maps_ucds(tvb, mdd_tree, pos, length);
6168
0
      break;
6169
0
    case UPSTREAM_ACTIVE_CHANNEL_LIST_FDX_UPSTREAM_CHANNEL:
6170
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_upstream_active_channel_list_fdx_upstream_channel, tvb, pos, 1, ENC_BIG_ENDIAN);
6171
0
      break;
6172
0
    case UPSTREAM_ACTIVE_CHANNEL_LIST_FDX_SUBBAND_ID:
6173
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_upstream_active_channel_list_fdx_subband_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6174
0
      break;
6175
0
    }
6176
6177
0
    pos += length;
6178
0
  }
6179
0
}
6180
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)
6183
0
{
6184
0
  uint8_t type;
6185
0
  uint32_t length, timer;
6186
0
  proto_tree *mdd_tree;
6187
0
  proto_item *mdd_item, *text_item;
6188
0
  int pos;
6189
6190
0
  pos = start;
6191
0
  while ( pos < ( start + len) )
6192
0
  {
6193
0
    type = tvb_get_uint8 (tvb, pos);
6194
0
    mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6195
0
                                            ett_docsis_mdd_cm_status_event_control, &mdd_item,
6196
0
                                            val_to_str(pinfo->pool, type, mdd_cm_status_event_control_vals,
6197
0
                                                       "Unknown TLV (%u)"));
6198
0
    proto_tree_add_uint (mdd_tree, hf_docsis_mdd_cm_status_event_control_subtype, tvb, pos, 1, type);
6199
0
    pos++;
6200
0
    proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_cm_status_event_control_length, tvb, pos, 1, ENC_NA, &length);
6201
0
    pos++;
6202
0
    proto_item_set_len(mdd_item, length + 2);
6203
6204
0
    switch(type)
6205
0
    {
6206
0
    case EVENT_TYPE_CODE:
6207
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_event_type, tvb, pos, 1, ENC_BIG_ENDIAN);
6208
0
      break;
6209
0
    case MAXIMUM_EVENT_HOLDOFF_TIMER:
6210
0
      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
0
      proto_item_append_text(text_item, " (%d ms)", timer * 20);
6212
0
      break;
6213
0
    case MAXIMUM_NUMBER_OF_REPORTS_PER_EVENT:
6214
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_maximum_number_of_reports_per_event, tvb, pos, 1, ENC_BIG_ENDIAN);
6215
0
      break;
6216
0
    }
6217
6218
0
    pos += length;
6219
0
  }
6220
0
}
6221
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)
6224
0
{
6225
0
  uint8_t type;
6226
0
  uint32_t length;
6227
0
  proto_tree *mdd_tree;
6228
0
  proto_item *mdd_item;
6229
0
  int pos;
6230
6231
0
  pos = start;
6232
0
  while ( pos < ( start + len) )
6233
0
  {
6234
0
    type = tvb_get_uint8 (tvb, pos);
6235
0
    mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
6236
0
                                            ett_docsis_mdd_dsg_da_to_dsid, &mdd_item,
6237
0
                                            val_to_str(pinfo->pool, type, mdd_cm_dsg_da_to_dsid_vals,
6238
0
                                                       "Unknown TLV (%u)"));
6239
0
    proto_tree_add_uint (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_subtype, tvb, pos, 1, type);
6240
0
    pos++;
6241
0
    proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_length, tvb, pos, 1, ENC_NA, &length);
6242
0
    pos++;
6243
0
    proto_item_set_len(mdd_item, length + 2);
6244
6245
0
    switch(type)
6246
0
    {
6247
0
    case DSG_DA_TO_DSID_ASSOCIATION_DA:
6248
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_association_da, tvb, pos, 6, ENC_NA);
6249
0
      break;
6250
0
    case DSG_DA_TO_DSID_ASSOCIATION_DSID:
6251
0
      proto_tree_add_item (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_association_dsid, tvb, pos, 3, ENC_BIG_ENDIAN);
6252
0
      break;
6253
0
    }
6254
6255
0
    pos += length;
6256
0
  }
6257
0
}
6258
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)
6261
0
{
6262
0
  proto_item *tlv_item;
6263
0
  proto_tree *tlv_tree;
6264
0
  uint32_t tlv_type;
6265
0
  int tlv_length, end = pos + length;
6266
0
  uint32_t tlv_value;
6267
6268
0
  int major = -1, minor = -1;
6269
0
  int major_pos = 0, minor_pos = 0;
6270
0
  uint8_t ext_spectrum_mode = 0;
6271
6272
0
  static int *const mdd_cmts_docsis_version_ext_spectrum_mode[] = {
6273
0
    &hf_docsis_mdd_docsis_version_ext_spectrum_mode_fdd,
6274
0
    &hf_docsis_mdd_docsis_version_ext_spectrum_mode_fdx,
6275
0
    NULL
6276
0
  };
6277
6278
0
  while (pos + 1 < end)
6279
0
  {
6280
0
    tlv_type = tvb_get_uint8(tvb, pos);
6281
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
6282
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_mdd_docsis_version_tlv, tvb, pos, tlv_length + 2, ENC_NA);
6283
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, mdd_docsis_version_vals, "Unknown TLV %u"));
6284
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_mdd_docsis_version);
6285
0
    proto_tree_add_item(tlv_tree, hf_docsis_mdd_docsis_version_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
6286
0
    proto_tree_add_item(tlv_tree, hf_docsis_mdd_docsis_version_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
6287
0
    pos += 2;
6288
6289
0
    switch (tlv_type)
6290
0
    {
6291
0
    case CMTS_DOCSIS_VERSION_MAJOR_PRE_40:
6292
0
      if (tlv_length == 1) {
6293
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_mdd_docsis_version_major_pre_40,
6294
0
                                     tvb, pos, tlv_length, ENC_BIG_ENDIAN, &tlv_value);
6295
0
        if (major < 0) {
6296
0
          major = tlv_value;
6297
0
          major_pos = pos;
6298
0
        }
6299
0
      } else
6300
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6301
0
      break;
6302
0
    case CMTS_DOCSIS_VERSION_MINOR_PRE_40:
6303
0
      if (tlv_length == 1) {
6304
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_mdd_docsis_version_minor_pre_40,
6305
0
                                     tvb, pos, tlv_length, ENC_BIG_ENDIAN, &tlv_value);
6306
0
        if (minor < 0) {
6307
0
          minor = tlv_value;
6308
0
          minor_pos = pos;
6309
0
        }
6310
0
      } else
6311
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6312
0
      break;
6313
0
    case CMTS_DOCSIS_VERSION_MAJOR:
6314
0
      if (tlv_length == 1) {
6315
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_mdd_docsis_version_major,
6316
0
                                     tvb, pos, tlv_length, ENC_BIG_ENDIAN, &tlv_value);
6317
0
        major = tlv_value;
6318
0
        major_pos = pos;
6319
0
      } else
6320
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6321
0
      break;
6322
0
    case CMTS_DOCSIS_VERSION_MINOR:
6323
0
      if (tlv_length == 1) {
6324
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_mdd_docsis_version_minor,
6325
0
                                     tvb, pos, tlv_length, ENC_BIG_ENDIAN, &tlv_value);
6326
0
        minor = tlv_value;
6327
0
        minor_pos = pos;
6328
0
      } else
6329
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6330
0
      break;
6331
0
    case CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE:
6332
0
      if (tlv_length == 1) {
6333
0
        ext_spectrum_mode = tvb_get_uint8(tvb, pos);
6334
0
        proto_tree_add_bitmask_value(tlv_tree, tvb, pos, hf_docsis_mdd_docsis_version_ext_spectrum_mode,
6335
0
                                     ett_docsis_mdd_docsis_version_tlv,
6336
0
                                     mdd_cmts_docsis_version_ext_spectrum_mode, ext_spectrum_mode);
6337
0
      } else
6338
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6339
0
      break;
6340
0
    default:
6341
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
6342
0
      break;
6343
0
    }
6344
0
    pos += tlv_length;
6345
0
  }
6346
0
  if (major > -1)
6347
0
    proto_item_set_hidden(proto_tree_add_item(tree, hf_docsis_mdd_cmts_major_docsis_version, tvb, major_pos, 1, ENC_BIG_ENDIAN));
6348
0
  if (minor > -1)
6349
0
    proto_item_set_hidden(proto_tree_add_item(tree, hf_docsis_mdd_cmts_minor_docsis_version, tvb, minor_pos, 1, ENC_BIG_ENDIAN));
6350
0
  if (major > -1 && minor > -1)
6351
0
    proto_item_append_text(item, ": DOCSIS %d.%d%s%s", major, minor,
6352
0
                           (ext_spectrum_mode & CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDD) ? " + FDD" : "",
6353
0
                           (ext_spectrum_mode & CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDX) ? " + FDX" : "");
6354
0
  if (pos != end)
6355
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
6356
0
}
6357
6358
static void
6359
dissect_mdd_diplexer_band_edge(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, uint16_t len)
6360
0
{
6361
0
  uint8_t type;
6362
0
  uint32_t length;
6363
0
  uint16_t override_mhz;
6364
0
  proto_tree *mdd_tree;
6365
0
  proto_item *mdd_item;
6366
0
  int pos;
6367
6368
0
  pos = start;
6369
0
  while ( pos < ( start + len) )
6370
0
  {
6371
0
    type = tvb_get_uint8 (tvb, pos);
6372
0
    mdd_tree = proto_tree_add_subtree(tree, tvb, pos, 1,
6373
0
                                            ett_docsis_mdd_diplexer_band_edge, &mdd_item,
6374
0
                                            val_to_str(pinfo->pool, type, mdd_diplexer_band_edge_vals,
6375
0
                                                       "Unknown TLV (%u)"));
6376
0
    proto_tree_add_uint (mdd_tree, hf_docsis_mdd_diplexer_band_edge, tvb, pos, 1, type);
6377
0
    pos++;
6378
0
    proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_diplexer_band_edge_length, tvb, pos, 1, ENC_BIG_ENDIAN, &length);
6379
0
    pos++;
6380
0
    proto_item_set_len(mdd_item, length + 2);
6381
6382
0
    if (length == 1 || length == 2)
6383
0
    {
6384
0
      switch(type)
6385
0
      {
6386
0
      case DIPLEXER_US_UPPER_BAND_EDGE:
6387
0
        proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_us_upper_band_edge, tvb, pos, length, ENC_BIG_ENDIAN);
6388
0
        break;
6389
0
      case DIPLEXER_DS_LOWER_BAND_EDGE:
6390
0
        proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_ds_lower_band_edge, tvb, pos, length, ENC_BIG_ENDIAN);
6391
0
        break;
6392
0
      case DIPLEXER_DS_UPPER_BAND_EDGE:
6393
0
        proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_ds_upper_band_edge, tvb, pos, length, ENC_BIG_ENDIAN);
6394
0
        break;
6395
0
      case DIPLEXER_US_UPPER_BAND_EDGE_OVERRIDE:
6396
0
        proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_us_upper_band_edge_override, tvb, pos, length, ENC_BIG_ENDIAN);
6397
0
        override_mhz = tvb_get_ntohs (tvb, pos);
6398
0
        if (override_mhz != 204 && override_mhz != 300 && override_mhz != 396 && override_mhz != 492 && override_mhz != 684)
6399
0
          {
6400
0
            expert_add_info_format(pinfo, mdd_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown Diplexer Upstream Upper Band Edge Override value: %u", override_mhz);
6401
0
          }
6402
0
        break;
6403
0
      case DIPLEXER_DS_LOWER_BAND_EDGE_OVERRIDE:
6404
0
        proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_ds_lower_band_edge_override, tvb, pos, length, ENC_BIG_ENDIAN);
6405
0
        override_mhz = tvb_get_ntohs (tvb, pos);
6406
0
        if (override_mhz != 108 && override_mhz != 258 && override_mhz != 372 && override_mhz != 492 && override_mhz != 606 && override_mhz != 834)
6407
0
          {
6408
0
            expert_add_info_format(pinfo, mdd_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown Diplexer Downstream Lower Band Edge Override value: %u", override_mhz);
6409
0
          }
6410
0
        break;
6411
0
      case DIPLEXER_DS_UPPER_BAND_EDGE_OVERRIDE:
6412
0
        proto_tree_add_item (mdd_tree, hf_docsis_mdd_diplexer_ds_upper_band_edge_override, tvb, pos, length, ENC_BIG_ENDIAN);
6413
0
        override_mhz = tvb_get_ntohs (tvb, pos);
6414
0
        if (override_mhz != 1002 && override_mhz != 1218 && override_mhz != 1794)
6415
0
          {
6416
0
            expert_add_info_format(pinfo, mdd_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown Diplexer Downstream Upper Band Edge Override value: %u", override_mhz);
6417
0
          }
6418
0
        break;
6419
0
      default:
6420
0
        expert_add_info_format(pinfo, mdd_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown Diplexer Band Edge TLV type: %u", type);
6421
0
        break;
6422
0
      }
6423
0
    } else
6424
0
    {
6425
0
      expert_add_info_format(pinfo, mdd_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6426
0
      break;
6427
0
    }
6428
0
    pos += length;
6429
0
  }
6430
0
}
6431
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)
6434
0
{
6435
0
  proto_item *tlv_item;
6436
0
  proto_tree *tlv_tree;
6437
0
  uint32_t tlv_type;
6438
0
  int tlv_length, end = pos + length;
6439
6440
0
  while (pos + 1 < end)
6441
0
  {
6442
0
    tlv_type = tvb_get_uint8(tvb, pos);
6443
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
6444
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_mdd_abp_tlv, tvb, pos, tlv_length + 2, ENC_NA);
6445
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, mdd_abp_vals, "Unknown TLV: %u"));
6446
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_mdd_advanced_band_plan);
6447
0
    proto_tree_add_item(tlv_tree, hf_docsis_mdd_abp_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
6448
0
    proto_tree_add_item(tlv_tree, hf_docsis_mdd_abp_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
6449
0
    pos += 2;
6450
6451
0
    switch (tlv_type)
6452
0
    {
6453
0
    case MDD_ABP_SUB_BAND_COUNT:
6454
0
      if (tlv_length == 1)
6455
0
        proto_tree_add_item(tlv_tree, hf_docsis_mdd_abp_sub_band_count, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
6456
0
      else
6457
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6458
0
      break;
6459
0
    case MDD_ABP_SUB_BAND_WIDTH:
6460
0
      if (tlv_length == 1)
6461
0
        proto_tree_add_item(tlv_tree, hf_docsis_mdd_abp_sub_band_width, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
6462
0
      else
6463
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6464
0
      break;
6465
0
    default:
6466
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
6467
0
      break;
6468
0
    }
6469
0
    pos += tlv_length;
6470
0
  }
6471
0
  if (pos != end)
6472
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
6473
0
}
6474
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)
6477
0
{
6478
0
  proto_item *tlv_item;
6479
0
  proto_tree *tlv_tree;
6480
0
  uint32_t tlv_type;
6481
0
  int tlv_length, end = pos + length;
6482
6483
0
  static int *const mdd_bpi_plus_cfg[] = {
6484
0
    &hf_docsis_mdd_bpi_plus_cfg_eae,
6485
0
    NULL
6486
0
  };
6487
6488
0
  while (pos + 1 < end)
6489
0
  {
6490
0
    tlv_type = tvb_get_uint8(tvb, pos);
6491
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
6492
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_mdd_bpi_plus_tlv, tvb, pos, tlv_length + 2, ENC_NA);
6493
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, mdd_bpi_plus_vals, "Unknown TLV: %u"));
6494
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_mdd_bpi_plus);
6495
0
    proto_tree_add_item(tlv_tree, hf_docsis_mdd_bpi_plus_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
6496
0
    proto_tree_add_item(tlv_tree, hf_docsis_mdd_bpi_plus_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
6497
0
    pos += 2;
6498
6499
0
    switch (tlv_type)
6500
0
    {
6501
0
    case MDD_BPI_PLUS_VERSION:
6502
0
      if (tlv_length == 1)
6503
0
        proto_tree_add_item(tlv_tree, hf_docsis_mdd_bpi_plus_version, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
6504
0
      else
6505
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6506
0
      break;
6507
0
    case MDD_BPI_PLUS_CFG:
6508
0
      if (tlv_length == 1)
6509
0
        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
0
      else
6511
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
6512
0
      break;
6513
0
    default:
6514
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
6515
0
      break;
6516
0
    }
6517
0
    pos += tlv_length;
6518
0
  }
6519
0
  if (pos != end)
6520
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
6521
0
}
6522
6523
static int
6524
dissect_mdd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6525
0
{
6526
0
  proto_item *mdd_item;
6527
0
  proto_tree *mdd_tree;
6528
6529
0
  int pos;
6530
0
  uint8_t type;
6531
0
  uint32_t i, length;
6532
6533
0
  proto_tree *tlv_tree;
6534
0
  proto_item *tlv_item;
6535
0
  static int * const non_channel_events[] = {
6536
0
      &hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_sequence_out_of_range,
6537
0
      &hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup,
6538
0
      &hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power,
6539
0
      NULL
6540
0
  };
6541
6542
0
  col_set_str(pinfo->cinfo, COL_INFO, "MDD Message:");
6543
6544
0
  mdd_item = proto_tree_add_item(tree, proto_docsis_mdd, tvb, 0, -1, ENC_NA);
6545
0
  mdd_tree = proto_item_add_subtree(mdd_item, ett_docsis_mdd);
6546
6547
0
  proto_tree_add_item (mdd_tree, hf_docsis_mdd_ccc, tvb, 0, 1, ENC_BIG_ENDIAN);
6548
0
  proto_tree_add_item (mdd_tree, hf_docsis_mdd_number_of_fragments, tvb, 1, 1, ENC_BIG_ENDIAN);
6549
0
  proto_tree_add_item (mdd_tree, hf_docsis_mdd_fragment_sequence_number, tvb, 2, 1, ENC_BIG_ENDIAN);
6550
0
  proto_tree_add_item (mdd_tree, hf_docsis_mdd_current_channel_dcid, tvb, 3, 1, ENC_BIG_ENDIAN);
6551
6552
  /* TLVs... */
6553
0
  pos = 4;
6554
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
6555
0
  {
6556
0
    type = tvb_get_uint8(tvb, pos);
6557
0
    length = tvb_get_uint8(tvb, pos + 1);
6558
0
    tlv_item = proto_tree_add_item(mdd_tree, hf_docsis_mdd_tlv, tvb, pos, length + 2, ENC_NA);
6559
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, type, mdd_tlv_vals, "Unknown TLV %u"));
6560
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_tlv);
6561
0
    proto_tree_add_item(tlv_tree, hf_docsis_mdd_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
6562
0
    proto_tree_add_item(tlv_tree, hf_docsis_mdd_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
6563
0
    pos += 2;
6564
6565
0
    switch(type)
6566
0
    {
6567
0
    case DOWNSTREAM_ACTIVE_CHANNEL_LIST:
6568
0
      dissect_mdd_ds_active_channel_list(tvb, pinfo, tlv_tree, pos, length );
6569
0
      break;
6570
0
    case MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP:
6571
0
      dissect_mdd_ds_service_group(tvb, pinfo, tlv_tree, pos, length );
6572
0
      break;
6573
0
    case DOWNSTREAM_AMBIGUITY_RESOLUTION_FREQUENCY_LIST:
6574
0
      for (i = 0; i < length; i+=4) {
6575
0
        proto_tree_add_item (tlv_tree, hf_docsis_mdd_downstream_ambiguity_resolution_frequency, tvb, pos + i, 4, ENC_BIG_ENDIAN);
6576
0
      }
6577
0
      break;
6578
0
    case RECEIVE_CHANNEL_PROFILE_REPORTING_CONTROL:
6579
0
      dissect_mdd_channel_profile_reporting_control(tvb, pinfo, tlv_tree, pos, length );
6580
0
      break;
6581
0
    case IP_INITIALIZATION_PARAMETERS:
6582
0
      dissect_mdd_ip_init_param(tvb, pinfo, tlv_tree, pos, length );
6583
0
      break;
6584
0
    case EARLY_AUTHENTICATION_AND_ENCRYPTION:
6585
0
      proto_tree_add_item (tlv_tree, hf_docsis_mdd_early_authentication_and_encryption, tvb, pos, 1, ENC_BIG_ENDIAN);
6586
0
      break;
6587
0
    case UPSTREAM_ACTIVE_CHANNEL_LIST:
6588
0
      dissect_mdd_upstream_active_channel_list(tvb, pinfo, tlv_tree, pos, length );
6589
0
      break;
6590
0
    case UPSTREAM_AMBIGUITY_RESOLUTION_CHANNEL_LIST:
6591
0
      for (i = 0; i < length; i++) {
6592
0
        proto_tree_add_item (tlv_tree, hf_docsis_mdd_upstream_ambiguity_resolution_channel_list_channel_id, tvb, pos + i , 1, ENC_BIG_ENDIAN);
6593
0
      }
6594
0
      break;
6595
0
    case UPSTREAM_FREQUENCY_RANGE:
6596
0
      proto_tree_add_item (tlv_tree, hf_docsis_mdd_upstream_frequency_range, tvb, pos, 1, ENC_BIG_ENDIAN);
6597
0
      break;
6598
0
    case SYMBOL_CLOCK_LOCKING_INDICATOR:
6599
0
      proto_tree_add_item (tlv_tree, hf_docsis_mdd_symbol_clock_locking_indicator, tvb, pos, 1, ENC_BIG_ENDIAN);
6600
0
      break;
6601
0
    case CM_STATUS_EVENT_CONTROL:
6602
0
      dissect_mdd_cm_status_event_control(tvb, pinfo, tlv_tree, pos, length );
6603
0
      break;
6604
0
    case UPSTREAM_TRANSMIT_POWER_REPORTING:
6605
0
      proto_tree_add_item (tlv_tree, hf_docsis_mdd_upstream_transmit_power_reporting, tvb, pos, 1, ENC_BIG_ENDIAN);
6606
0
      break;
6607
0
    case DSG_DA_TO_DSID_ASSOCIATION_ENTRY:
6608
0
      dissect_mdd_dsg_da_to_dsid(tvb, pinfo, tlv_tree, pos, length );
6609
0
      break;
6610
0
    case CM_STATUS_EVENT_ENABLE_NON_CHANNEL_SPECIFIC_EVENTS:
6611
0
      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
0
      break;
6613
0
    case EXTENDED_UPSTREAM_TRANSMIT_POWER_SUPPORT:
6614
0
      proto_tree_add_item (tlv_tree, hf_docsis_mdd_extended_upstream_transmit_power_support, tvb, pos, 1, ENC_BIG_ENDIAN);
6615
0
      break;
6616
0
    case CMTS_DOCSIS_VERSION:
6617
0
      dissect_mdd_docsis_version(tvb, pinfo, tlv_item, tlv_tree, pos, length);
6618
0
      break;
6619
0
    case CM_PERIODIC_MAINTENANCE_TIMEOUT_INDICATOR:
6620
0
      proto_tree_add_item (tlv_tree, hf_docsis_mdd_cm_periodic_maintenance_timeout_indicator, tvb, pos, length, ENC_BIG_ENDIAN);
6621
0
      break;
6622
0
    case DLS_BROADCAST_AND_MULTICAST_DELIVERY_METHOD:
6623
0
      proto_tree_add_item (tlv_tree, hf_docsis_mdd_dls_broadcast_and_multicast_delivery_method, tvb, pos, length, ENC_BIG_ENDIAN);
6624
0
      break;
6625
0
    case CM_STATUS_EVENT_ENABLE_FOR_DOCSIS_3_1_EVENTS:
6626
0
      if (length == 4) {
6627
0
        static int * const mdd_cm_status_event_d31[] = {
6628
0
          &hf_docsis_mdd_cm_status_event_d31_ofdm_prof_fail,
6629
0
          &hf_docsis_mdd_cm_status_event_d31_prim_down_chan_change,
6630
0
          &hf_docsis_mdd_cm_status_event_d31_dpd_mismatch,
6631
0
          &hf_docsis_mdd_cm_status_event_d31_deprecated,
6632
0
          &hf_docsis_mdd_cm_status_event_d31_ncp_prof_fail,
6633
0
          &hf_docsis_mdd_cm_status_event_d31_loss_fec_plc,
6634
0
          &hf_docsis_mdd_cm_status_event_d31_ncp_prof_recover,
6635
0
          &hf_docsis_mdd_cm_status_event_d31_fec_recover_on_plc,
6636
0
          &hf_docsis_mdd_cm_status_event_d31_fec_recover_on_ofdm_prof,
6637
0
          &hf_docsis_mdd_cm_status_event_d31_ofdma_prof_fail,
6638
0
          &hf_docsis_mdd_cm_status_event_d31_map_stor_overflow_ind,
6639
0
          &hf_docsis_mdd_cm_status_event_d31_ofdm_map_stor_almost_full_ind,
6640
0
          &hf_docsis_mdd_cm_status_event_d31_reserved,
6641
0
          NULL
6642
0
        };
6643
0
        proto_tree_add_bitmask_list(tlv_tree, tvb, pos, length, mdd_cm_status_event_d31, ENC_BIG_ENDIAN);
6644
0
      }
6645
0
      else
6646
0
      {
6647
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6648
0
      }
6649
0
      break;
6650
0
    case DIPLEXER_BAND_EDGE:
6651
0
      dissect_mdd_diplexer_band_edge(tvb, pinfo, tlv_tree, pos, length );
6652
0
      break;
6653
0
    case ADVANCED_BAND_PLAN:
6654
0
      dissect_mdd_advanced_band_plan(tvb, pinfo, tlv_item, tlv_tree, pos, length);
6655
0
      break;
6656
0
    case MDD_BPI_PLUS:
6657
0
      dissect_mdd_bpi_plus(tvb, pinfo, tlv_item, tlv_tree, pos, length);
6658
0
      break;
6659
0
    default:
6660
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown MDD TLV type: %u", type);
6661
0
      break;
6662
0
    }
6663
6664
0
    pos += length;
6665
0
  }
6666
6667
0
  return tvb_captured_length(tvb);
6668
0
}
6669
6670
static int
6671
dissect_bintrngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6672
0
{
6673
0
  proto_item *bintrngreq_item;
6674
0
  proto_tree *bintrngreq_tree;
6675
0
  uint8_t md_ds_sg_id;
6676
0
  uint16_t offset = 0;
6677
6678
0
  md_ds_sg_id = tvb_get_uint8 (tvb, 1);
6679
6680
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "Bonded Initial Ranging Request: MD-DS-SG-ID = %u (0x%X)",
6681
0
                md_ds_sg_id, md_ds_sg_id );
6682
6683
0
  bintrngreq_item = proto_tree_add_item(tree, proto_docsis_bintrngreq, tvb, offset, -1, ENC_NA);
6684
0
  bintrngreq_tree = proto_item_add_subtree (bintrngreq_item, ett_docsis_bintrngreq);
6685
0
  proto_tree_add_item (bintrngreq_tree, hf_docsis_bintrngreq_capflags, tvb, offset, 1, ENC_BIG_ENDIAN);
6686
0
  proto_tree_add_item( bintrngreq_tree, hf_docsis_bintrngreq_capflags_frag, tvb, offset, 1, ENC_BIG_ENDIAN );
6687
0
  proto_tree_add_item( bintrngreq_tree, hf_docsis_bintrngreq_capflags_encrypt, tvb, offset, 1, ENC_BIG_ENDIAN );
6688
0
  offset++;
6689
0
  proto_tree_add_item (bintrngreq_tree, hf_docsis_bintrngreq_mddsgid, tvb, offset, 1, ENC_BIG_ENDIAN);
6690
0
  offset++;
6691
0
  proto_tree_add_item (bintrngreq_tree, hf_docsis_mgt_down_chid, tvb, offset, 1, ENC_BIG_ENDIAN);
6692
0
  offset++;
6693
0
  proto_tree_add_item (bintrngreq_tree, hf_docsis_mgt_upstream_chid, tvb, offset, 1, ENC_BIG_ENDIAN);
6694
6695
0
  return tvb_captured_length(tvb);
6696
0
}
6697
6698
static int
6699
dissect_type35ucd(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6700
0
{
6701
0
  return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_type35ucd, MGT_TYPE35UCD);
6702
0
}
6703
6704
static int
6705
dissect_dbcreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6706
0
{
6707
0
  proto_item *dbcreq_item, *reassembled_item;
6708
0
  proto_tree *dbcreq_tree, *reassembled_tree;
6709
0
  uint32_t transid, number_of_fragments, fragment_sequence_number, id;
6710
0
  tvbuff_t *next_tvb;
6711
6712
0
  dbcreq_item = proto_tree_add_item(tree, proto_docsis_dbcreq, tvb, 0, -1, ENC_NA);
6713
0
  dbcreq_tree = proto_item_add_subtree (dbcreq_item, ett_docsis_dbcreq);
6714
0
  proto_tree_add_item_ret_uint(dbcreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
6715
0
  proto_tree_add_item_ret_uint( dbcreq_tree, hf_docsis_dbcreq_number_of_fragments, tvb, 2, 1, ENC_BIG_ENDIAN, &number_of_fragments);
6716
0
  proto_tree_add_item_ret_uint( dbcreq_tree, hf_docsis_dbcreq_fragment_sequence_number, tvb, 3, 1, ENC_BIG_ENDIAN, &fragment_sequence_number);
6717
6718
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
6719
0
                "Dynamic Bonding Change Request: Tran-Id = %u ", transid);
6720
0
  col_set_fence(pinfo->cinfo, COL_INFO);
6721
6722
0
  if(number_of_fragments > 1) {
6723
0
     pinfo->fragmented = true;
6724
6725
0
     id = (MGT_DBC_REQ << 24) + transid;
6726
0
     fragment_head* reassembled_tlv = NULL;
6727
0
     reassembled_tlv = fragment_add_seq_check(&docsis_tlv_reassembly_table,
6728
0
                                  tvb, 4, pinfo,
6729
0
                                  id, NULL, /* ID for fragments belonging together */
6730
0
                                  fragment_sequence_number - 1, /* Sequence number starts at 0 */
6731
0
                                  tvb_reported_length_remaining(tvb, 4), /* fragment length - to the end */
6732
0
                                  (fragment_sequence_number != number_of_fragments)); /* More fragments? */
6733
6734
0
     if (reassembled_tlv) {
6735
0
       tvbuff_t *tlv_tvb = NULL;
6736
6737
0
       reassembled_item = proto_tree_add_item(dbcreq_tree, hf_docsis_tlv_reassembled, tvb, 0, -1, ENC_NA);
6738
0
       reassembled_tree = proto_item_add_subtree (reassembled_item, ett_docsis_tlv_reassembled );
6739
6740
6741
0
       tlv_tvb = process_reassembled_data(tvb, 4, pinfo, "Reassembled TLV", reassembled_tlv, &docsis_tlv_frag_items,
6742
0
                                                  NULL, reassembled_tree);
6743
6744
0
       if (tlv_tvb && tvb_reported_length(tlv_tvb) > 0) {
6745
0
         call_dissector (docsis_tlv_handle, tlv_tvb, pinfo, reassembled_tree);
6746
0
       }
6747
0
     }
6748
6749
0
  } else {
6750
    /* Call Dissector for Appendix C TLVs */
6751
0
    next_tvb = tvb_new_subset_remaining (tvb, 4);
6752
0
    call_dissector (docsis_tlv_handle, next_tvb, pinfo, dbcreq_tree);
6753
0
  }
6754
6755
0
  return tvb_captured_length(tvb);
6756
0
}
6757
6758
static int
6759
dissect_dbcrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6760
0
{
6761
0
  proto_item *dbcrsp_item;
6762
0
  proto_tree *dbcrsp_tree;
6763
0
  uint32_t transid, confcode;
6764
0
  tvbuff_t *next_tvb;
6765
6766
0
  dbcrsp_item = proto_tree_add_item(tree, proto_docsis_dbcrsp, tvb, 0, -1, ENC_NA);
6767
0
  dbcrsp_tree = proto_item_add_subtree (dbcrsp_item, ett_docsis_dbcrsp);
6768
0
  proto_tree_add_item_ret_uint(dbcrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
6769
0
  proto_tree_add_item_ret_uint( dbcrsp_tree, hf_docsis_dbcrsp_conf_code, tvb, 2, 1, ENC_BIG_ENDIAN, &confcode);
6770
6771
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
6772
0
                "Dynamic Bonding Change Response: Tran-Id = %u (%s) ", transid,
6773
0
                val_to_str_ext(pinfo->pool, confcode, &docsis_conf_code_ext, "%d"));
6774
6775
  /* Call Dissector for Appendix C TLVs */
6776
0
  next_tvb = tvb_new_subset_remaining (tvb, 3);
6777
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, dbcrsp_tree);
6778
0
  return tvb_captured_length(tvb);
6779
0
}
6780
6781
static int
6782
dissect_dbcack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6783
0
{
6784
0
  proto_item *dbcack_item;
6785
0
  proto_tree *dbcack_tree = NULL;
6786
0
  uint16_t transid;
6787
0
  tvbuff_t *next_tvb;
6788
6789
0
  transid = tvb_get_ntohs (tvb, 0);
6790
6791
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
6792
0
                "Dynamic Bonding Change Acknowledge: Tran-Id = %u ", transid);
6793
6794
0
  dbcack_item = proto_tree_add_item(tree, proto_docsis_dbcack, tvb, 0, -1, ENC_NA);
6795
0
  dbcack_tree = proto_item_add_subtree (dbcack_item, ett_docsis_dbcack);
6796
0
  proto_tree_add_item (dbcack_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN);
6797
6798
  /* Call Dissector for Appendix C TLVs */
6799
0
  next_tvb = tvb_new_subset_remaining (tvb, 2);
6800
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, dbcack_tree);
6801
0
  return tvb_captured_length(tvb);
6802
0
}
6803
6804
static int
6805
dissect_dpvreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6806
0
{
6807
0
  proto_item *it;
6808
0
  proto_tree *dpvreq_tree;
6809
0
  uint32_t transid, dschan;
6810
6811
0
  it = proto_tree_add_item(tree, proto_docsis_dpvreq, tvb, 0, -1, ENC_NA);
6812
0
  dpvreq_tree = proto_item_add_subtree (it, ett_docsis_dpvreq);
6813
0
  proto_tree_add_item_ret_uint (dpvreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
6814
0
  proto_tree_add_item_ret_uint (dpvreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &dschan);
6815
6816
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
6817
0
                "DOCSIS Path Verify Request: Transaction ID = %u DS-Ch %d",
6818
0
                transid, dschan);
6819
6820
0
  proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_flags, tvb, 3, 1, ENC_BIG_ENDIAN);
6821
0
  proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_us_sf, tvb, 4, 4, ENC_BIG_ENDIAN);
6822
0
  proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_n, tvb, 8, 2, ENC_BIG_ENDIAN);
6823
0
  proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_start, tvb, 10, 1, ENC_BIG_ENDIAN);
6824
0
  proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_end, tvb, 11, 1, ENC_BIG_ENDIAN);
6825
0
  proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_ts_start, tvb, 12, 4, ENC_BIG_ENDIAN);
6826
0
  proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_ts_end, tvb, 16, 4, ENC_BIG_ENDIAN);
6827
6828
0
  return tvb_captured_length(tvb);
6829
0
}
6830
6831
static int
6832
dissect_dpvrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
6833
0
{
6834
0
  proto_item *it;
6835
0
  proto_tree *dpvrsp_tree = NULL;
6836
0
  uint32_t transid, dschan;
6837
6838
0
  it = proto_tree_add_item (tree, proto_docsis_dpvrsp, tvb, 0, -1, ENC_NA);
6839
0
  dpvrsp_tree = proto_item_add_subtree (it, ett_docsis_dpvrsp);
6840
0
  proto_tree_add_item_ret_uint (dpvrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
6841
0
  proto_tree_add_item_ret_uint (dpvrsp_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &dschan);
6842
6843
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
6844
0
                "DOCSIS Path Verify Response: Transaction ID = %u DS-Ch %d",
6845
0
                transid, dschan);
6846
6847
0
  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_flags, tvb, 3, 1, ENC_BIG_ENDIAN);
6848
0
  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_us_sf, tvb, 4, 4, ENC_BIG_ENDIAN);
6849
0
  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_n, tvb, 8, 2, ENC_BIG_ENDIAN);
6850
0
  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_start, tvb, 10, 1, ENC_BIG_ENDIAN);
6851
0
  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_end, tvb, 11, 1, ENC_BIG_ENDIAN);
6852
0
  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_ts_start, tvb, 12, 4, ENC_BIG_ENDIAN);
6853
0
  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_ts_end, tvb, 16, 4, ENC_BIG_ENDIAN);
6854
6855
0
  return tvb_captured_length(tvb);
6856
0
}
6857
6858
static void
6859
dissect_cmstatus_status_event_tlv (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
6860
0
{
6861
0
  proto_item *it, *tlv_item, *tlv_len_item;
6862
0
  proto_tree *tlv_tree, *tlvtlv_tree;
6863
0
  uint16_t pos = 0;
6864
0
  uint8_t type;
6865
0
  uint32_t length;
6866
6867
0
  it = proto_tree_add_item(tree, hf_docsis_cmstatus_status_event_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
6868
0
  tlv_tree = proto_item_add_subtree (it, ett_docsis_cmstatus_status_event_tlv);
6869
6870
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
6871
0
  {
6872
0
    type = tvb_get_uint8 (tvb, pos);
6873
0
    tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, -1,
6874
0
                                            ett_docsis_cmstatus_status_event_tlvtlv, &tlv_item,
6875
0
                                            val_to_str(pinfo->pool, type, cmstatus_status_event_tlv_vals,
6876
0
                                                       "Unknown Status Event TLV (%u)"));
6877
0
    proto_tree_add_uint (tlvtlv_tree, hf_docsis_cmstatus_status_event_type, tvb, pos, 1, type);
6878
0
    pos++;
6879
0
    tlv_len_item = proto_tree_add_item_ret_uint (tlvtlv_tree, hf_docsis_cmstatus_status_event_length, tvb, pos, 1, ENC_NA, &length);
6880
0
    pos++;
6881
0
    proto_item_set_len(tlv_item, length + 2);
6882
6883
0
    switch (type)
6884
0
    {
6885
0
    case EVENT_DS_CH_ID:
6886
0
      if (length == 1)
6887
0
      {
6888
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_ds_ch_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6889
0
      }
6890
0
      else
6891
0
      {
6892
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6893
0
      }
6894
0
      break;
6895
6896
0
    case EVENT_US_CH_ID:
6897
0
      if (length == 1)
6898
0
      {
6899
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_us_ch_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6900
0
      }
6901
0
      else
6902
0
      {
6903
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6904
0
      }
6905
0
      break;
6906
6907
0
    case EVENT_DSID:
6908
0
      if (length == 3)
6909
0
      {
6910
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_dsid, tvb, pos, 3, ENC_BIG_ENDIAN);
6911
0
      }
6912
0
      else
6913
0
      {
6914
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6915
0
      }
6916
0
      break;
6917
6918
0
    case EVENT_MAC_ADDRESS:
6919
0
      if (length == 6)
6920
0
      {
6921
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_mac_address, tvb, pos, 6, ENC_NA);
6922
0
      }
6923
0
      else
6924
0
      {
6925
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6926
0
      }
6927
0
      break;
6928
6929
0
    case EVENT_DS_OFDM_PROFILE_ID:
6930
0
      if (length == 1)
6931
0
      {
6932
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_ds_ofdm_profile_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6933
0
      }
6934
0
      else
6935
0
      {
6936
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6937
0
      }
6938
0
      break;
6939
6940
0
    case EVENT_US_OFDMA_PROFILE_ID:
6941
0
      if (length == 1)
6942
0
      {
6943
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_us_ofdma_profile_id, tvb, pos, 1, ENC_BIG_ENDIAN);
6944
0
      }
6945
0
      else
6946
0
      {
6947
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6948
0
      }
6949
0
      break;
6950
6951
0
    case EVENT_DESCR:
6952
0
      if (length >= 1 && length <= 80)
6953
0
      {
6954
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmstatus_status_event_descr, tvb, pos, length, ENC_NA);
6955
0
      }
6956
0
      else
6957
0
      {
6958
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
6959
0
      }
6960
0
      break;
6961
0
    } /* switch */
6962
0
      pos += length;
6963
0
  } /* while */
6964
0
}
6965
6966
static void
6967
dissect_cmstatus_tlv (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
6968
0
{
6969
0
  proto_item *it, *tlv_item;
6970
0
  proto_tree *tlv_tree, *tlvtlv_tree;
6971
0
  uint16_t pos = 0;
6972
0
  uint8_t type;
6973
0
  uint32_t length;
6974
0
  tvbuff_t* next_tvb;
6975
6976
0
  it = proto_tree_add_item(tree, hf_docsis_cmstatus_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
6977
0
  tlv_tree = proto_item_add_subtree (it, ett_docsis_cmstatus_tlv);
6978
6979
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
6980
0
  {
6981
0
    type = tvb_get_uint8 (tvb, pos);
6982
0
    tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, -1,
6983
0
                                            ett_docsis_cmstatus_tlvtlv, &tlv_item,
6984
0
                                            val_to_str(pinfo->pool, type, cmstatus_tlv_vals,
6985
0
                                                       "Unknown TLV (%u)"));
6986
0
    proto_tree_add_uint (tlvtlv_tree, hf_docsis_cmstatus_type, tvb, pos, 1, type);
6987
0
    pos++;
6988
0
    proto_tree_add_item_ret_uint (tlvtlv_tree, hf_docsis_cmstatus_length, tvb, pos, 1, ENC_NA, &length);
6989
0
    pos++;
6990
0
    proto_item_set_len(tlv_item, length + 2);
6991
6992
0
    switch (type)
6993
0
    {
6994
0
    case STATUS_EVENT:
6995
0
      next_tvb = tvb_new_subset_length(tvb, pos, length);
6996
0
      dissect_cmstatus_status_event_tlv (next_tvb, pinfo, tlvtlv_tree);
6997
0
      break;
6998
6999
0
    } /* switch */
7000
0
      pos += length;
7001
0
  } /* while */
7002
0
}
7003
7004
static void
7005
dissect_cmstatus_common (tvbuff_t * tvb, proto_tree * tree)
7006
0
{
7007
0
  uint8_t event_type;
7008
7009
0
  event_type = tvb_get_uint8 (tvb, 2);
7010
0
  switch (event_type)
7011
0
  {
7012
0
  case SEC_CH_MDD_TIMEOUT:
7013
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_mdd_t, tvb, 2, 1, ENC_BIG_ENDIAN);
7014
0
    break;
7015
7016
0
  case QAM_FEC_LOCK_FAILURE:
7017
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_qfl_f, tvb, 2, 1, ENC_BIG_ENDIAN);
7018
0
    break;
7019
7020
0
  case SEQ_OUT_OF_RANGE:
7021
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_s_o, tvb, 2, 1, ENC_BIG_ENDIAN);
7022
0
    break;
7023
7024
0
  case SEC_CH_MDD_RECOVERY:
7025
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_mdd_r, tvb, 2, 1, ENC_BIG_ENDIAN);
7026
0
    break;
7027
7028
0
  case QAM_FEC_LOCK_RECOVERY:
7029
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_qfl_r, tvb, 2, 1, ENC_BIG_ENDIAN);
7030
0
    break;
7031
7032
0
  case T4_TIMEOUT:
7033
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_t4_t, tvb, 2, 1, ENC_BIG_ENDIAN);
7034
0
    break;
7035
7036
0
  case T3_RETRIES_EXCEEDED:
7037
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_t3_e, tvb, 2, 1, ENC_BIG_ENDIAN);
7038
0
    break;
7039
7040
0
  case SUCCESS_RANGING_AFTER_T3_RETRIES_EXCEEDED:
7041
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_rng_s, tvb, 2, 1, ENC_BIG_ENDIAN);
7042
0
    break;
7043
7044
0
  case CM_ON_BATTERY:
7045
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_cm_b, tvb, 2, 1, ENC_BIG_ENDIAN);
7046
0
    break;
7047
7048
0
  case CM_ON_AC_POWER:
7049
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_cm_a, tvb, 2, 1, ENC_BIG_ENDIAN);
7050
0
    break;
7051
7052
0
  case MAC_REMOVAL_EVENT:
7053
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_mac_removal, tvb, 2, 1, ENC_BIG_ENDIAN);
7054
0
    break;
7055
7056
0
  case DS_OFDM_PROFILE_FAILURE:
7057
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_ds_ofdm_profile_failure, tvb, 2, 1, ENC_BIG_ENDIAN);
7058
0
    break;
7059
7060
0
  case PRIMARY_DOWNSTREAM_CHANGE:
7061
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_prim_ds_change, tvb, 2, 1, ENC_BIG_ENDIAN);
7062
0
    break;
7063
7064
0
  case DPD_MISMATCH:
7065
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_dpd_mismatch, tvb, 2, 1, ENC_BIG_ENDIAN);
7066
0
    break;
7067
7068
0
  case NCP_PROFILE_FAILURE:
7069
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_ncp_profile_failure, tvb, 2, 1, ENC_BIG_ENDIAN);
7070
0
    break;
7071
7072
0
  case PLC_FAILURE:
7073
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_plc_failure, tvb, 2, 1, ENC_BIG_ENDIAN);
7074
0
    break;
7075
7076
0
  case NCP_PROFILE_RECOVERY:
7077
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_ncp_profile_recovery, tvb, 2, 1, ENC_BIG_ENDIAN);
7078
0
    break;
7079
7080
0
  case PLC_RECOVERY:
7081
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_plc_recovery, tvb, 2, 1, ENC_BIG_ENDIAN);
7082
0
    break;
7083
7084
0
  case OFDM_PROFILE_RECOVERY:
7085
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_ofdm_profile_recovery, tvb, 2, 1, ENC_BIG_ENDIAN);
7086
0
    break;
7087
7088
0
  case OFDMA_PROFILE_FAILURE:
7089
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_ofdma_profile_failure, tvb, 2, 1, ENC_BIG_ENDIAN);
7090
0
    break;
7091
7092
0
  case MAP_STORAGE_OVERFLOW_INDICATOR:
7093
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_map_storage_overflow_indicator, tvb, 2, 1, ENC_BIG_ENDIAN);
7094
0
    break;
7095
7096
0
  case MAP_STORAGE_ALMOST_FULL_INDICATOR:
7097
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_map_storage_almost_full_indicator, tvb, 2, 1, ENC_BIG_ENDIAN);
7098
0
    break;
7099
7100
0
  default:
7101
0
    proto_tree_add_item (tree, hf_docsis_cmstatus_e_t_unknown, tvb, 2, 1, ENC_BIG_ENDIAN);
7102
0
    break;
7103
0
  } /* switch */
7104
0
  return;
7105
0
}
7106
7107
static int
7108
dissect_cmstatus (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7109
0
{
7110
0
  proto_item *it;
7111
0
  proto_tree *cmstatus_tree;
7112
0
  uint32_t transid;
7113
0
  tvbuff_t* next_tvb;
7114
7115
0
  it = proto_tree_add_item(tree, proto_docsis_cmstatus, tvb, 0, -1, ENC_NA);
7116
0
  cmstatus_tree = proto_item_add_subtree (it, ett_docsis_cmstatus);
7117
0
  proto_tree_add_item_ret_uint (cmstatus_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
7118
7119
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "CM-STATUS Report: Transaction ID = %u", transid);
7120
7121
0
  dissect_cmstatus_common (tvb, cmstatus_tree);
7122
7123
  /* Call Dissector TLVs */
7124
0
  next_tvb = tvb_new_subset_remaining(tvb, 3);
7125
0
  dissect_cmstatus_tlv(next_tvb, pinfo, cmstatus_tree);
7126
0
  return tvb_captured_length(tvb);
7127
0
}
7128
7129
static int
7130
dissect_cmstatusack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7131
0
{
7132
0
  proto_item *it;
7133
0
  proto_tree *cmstatus_tree;
7134
0
  uint32_t transid;
7135
7136
0
  it = proto_tree_add_item(tree, proto_docsis_cmstatusack, tvb, 0, -1, ENC_NA);
7137
0
  cmstatus_tree = proto_item_add_subtree (it, ett_docsis_cmstatusack);
7138
0
  proto_tree_add_item_ret_uint (cmstatus_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
7139
7140
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "CM-STATUS Report Acknowledge: Transaction ID = %u", transid);
7141
7142
0
  dissect_cmstatus_common (tvb, cmstatus_tree);
7143
7144
0
  return tvb_captured_length(tvb);
7145
0
}
7146
7147
static void
7148
dissect_ds_event(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
7149
0
{
7150
0
  uint8_t type;
7151
0
  uint32_t length;
7152
0
  proto_tree *event_tree;
7153
0
  proto_item *event_item, *tlv_len_item;
7154
0
  int pos = start;
7155
7156
0
  while (pos < (start + len))
7157
0
  {
7158
0
    type = tvb_get_uint8 (tvb, pos);
7159
0
    event_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
7160
0
                                            ett_docsis_cmctrl_tlv_ds_event, &event_item,
7161
0
                                            val_to_str(pinfo->pool, type, cmctrlreq_ds_tlv_vals,
7162
0
                                                       "Unknown TLV (%u)"));
7163
0
    proto_tree_add_uint (event_tree, hf_docsis_cmctrl_ds_type, tvb, pos, 1, type);
7164
0
    pos++;
7165
0
    tlv_len_item = proto_tree_add_item_ret_uint (event_tree, hf_docsis_cmctrl_ds_length, tvb, pos, 1, ENC_NA, &length);
7166
0
    pos++;
7167
0
    proto_item_set_len(event_item, length + 2);
7168
7169
0
    switch (type)
7170
0
    {
7171
0
    case DS_EVENT_CH_ID:
7172
0
      if (length == 1)
7173
0
      {
7174
0
        proto_tree_add_item (event_tree, hf_docsis_cmctrl_ds_event_ch_id, tvb, pos, length, ENC_BIG_ENDIAN);
7175
0
      }
7176
0
      else
7177
0
      {
7178
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7179
0
      }
7180
0
      break;
7181
0
    case DS_EVENT_MASK:
7182
0
      if (length == 2)
7183
0
      {
7184
0
        proto_tree_add_item (event_tree, hf_docsis_cmctrl_ds_event_mask, tvb, pos, length, ENC_NA);
7185
0
      }
7186
0
      else
7187
0
      {
7188
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7189
0
      }
7190
0
      break;
7191
0
    }          /* switch */
7192
7193
0
    pos += length;
7194
0
  }            /* while */
7195
0
}
7196
7197
static void
7198
dissect_us_event(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, uint16_t len)
7199
0
{
7200
0
  uint8_t type;
7201
0
  uint32_t length;
7202
0
  proto_tree *event_tree;
7203
0
  proto_item *event_item, *tlv_len_item;
7204
0
  int pos = start;
7205
7206
0
  while (pos < (start + len))
7207
0
  {
7208
0
    type = tvb_get_uint8 (tvb, pos);
7209
0
    event_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
7210
0
                                            ett_docsis_cmctrl_tlv_us_event, &event_item,
7211
0
                                            val_to_str(pinfo->pool, type, cmctrlreq_us_tlv_vals,
7212
0
                                                       "Unknown TLV (%u)"));
7213
0
    proto_tree_add_uint (event_tree, hf_docsis_cmctrlreq_us_type, tvb, pos, 1, type);
7214
0
    pos++;
7215
0
    tlv_len_item = proto_tree_add_item_ret_uint (event_tree, hf_docsis_cmctrlreq_us_length, tvb, pos, 1, ENC_NA, &length);
7216
0
    pos++;
7217
0
    proto_item_set_len(event_item, length + 2);
7218
7219
0
    switch (type)
7220
0
    {
7221
0
    case US_EVENT_CH_ID:
7222
0
      if (length == 1)
7223
0
      {
7224
0
        proto_tree_add_item (event_tree, hf_docsis_cmctrl_us_event_ch_id, tvb, pos, length, ENC_BIG_ENDIAN);
7225
0
      }
7226
0
      else
7227
0
      {
7228
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7229
0
      }
7230
0
      break;
7231
0
    case US_EVENT_MASK:
7232
0
      if (length == 2)
7233
0
      {
7234
0
        proto_tree_add_item (event_tree, hf_docsis_cmctrl_us_event_mask, tvb, pos, length, ENC_NA);
7235
0
      }
7236
0
      else
7237
0
      {
7238
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7239
0
      }
7240
0
      break;
7241
0
    }                   /* switch */
7242
0
      pos += length;
7243
0
  }                     /* while */
7244
0
}
7245
7246
static void
7247
dissect_cmctrlreq_tlv(tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
7248
0
{
7249
0
  proto_item *it, *tlv_item, *tlv_len_item;
7250
0
  proto_tree *tlv_tree, *tlvtlv_tree;
7251
0
  uint16_t pos = 0;
7252
0
  uint8_t type;
7253
0
  uint32_t length;
7254
7255
0
  it = proto_tree_add_item(tree, hf_docsis_cmctrlreq_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7256
0
  tlv_tree = proto_item_add_subtree (it, ett_docsis_cmctrlreq_tlv);
7257
7258
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
7259
0
  {
7260
0
    type = tvb_get_uint8 (tvb, pos);
7261
0
    length = tvb_get_uint8 (tvb, pos + 1);
7262
0
    tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
7263
0
                                            ett_docsis_cmctrlreq_tlvtlv, &tlv_item,
7264
0
                                            val_to_str(pinfo->pool, type, cmctrlreq_tlv_vals,
7265
0
                                                       "Unknown TLV (%u)"));
7266
0
    proto_tree_add_uint (tlvtlv_tree, hf_docsis_cmctrlreq_type, tvb, pos, 1, type);
7267
0
    pos++;
7268
0
    tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrlreq_length, tvb, pos, 1, ENC_NA);
7269
0
    pos++;
7270
0
    proto_item_set_len(tlv_item, length + 2);
7271
7272
0
    switch (type)
7273
0
    {
7274
0
    case CM_CTRL_MUTE:
7275
0
      if (length == 1)
7276
0
      {
7277
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_mute, tvb, pos, length, ENC_BIG_ENDIAN);
7278
0
      }
7279
0
      else
7280
0
      {
7281
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7282
0
      }
7283
0
      break;
7284
0
    case CM_CTRL_MUTE_TIMEOUT:
7285
0
      if (length == 4 || length == 1) /* response TLV always with len 1 */
7286
0
      {
7287
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_mute_timeout, tvb, pos, length, ENC_BIG_ENDIAN);
7288
0
      }
7289
0
      else
7290
0
      {
7291
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7292
0
      }
7293
0
      break;
7294
0
    case CM_CTRL_REINIT:
7295
0
      if (length == 1)
7296
0
      {
7297
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_reinit, tvb, pos, length, ENC_BIG_ENDIAN);
7298
0
      }
7299
0
      else
7300
0
      {
7301
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7302
0
      }
7303
0
      break;
7304
0
    case CM_CTRL_DISABLE_FWD:
7305
0
      if (length == 1)
7306
0
      {
7307
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_disable_fwd, tvb, pos, length, ENC_BIG_ENDIAN);
7308
0
      }
7309
0
      else
7310
0
      {
7311
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7312
0
      }
7313
0
      break;
7314
0
    case CM_CTRL_DS_EVENT:
7315
0
      if (length == 1)
7316
0
      {
7317
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_ds_event, tvb, pos, length, ENC_NA);
7318
0
      }
7319
0
      else
7320
0
      {
7321
0
        dissect_ds_event(tvb, pinfo, tlvtlv_tree, pos, length);
7322
0
      }
7323
0
      break;
7324
0
    case CM_CTRL_US_EVENT:
7325
0
      if (length == 1)
7326
0
      {
7327
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_us_event, tvb, pos, length, ENC_NA);
7328
0
      }
7329
0
      else
7330
0
      {
7331
0
        dissect_us_event(tvb, pinfo, tlvtlv_tree, pos, length);
7332
0
      }
7333
0
      break;
7334
0
    case CM_CTRL_EVENT:
7335
0
      if (length == 2 || length == 1) /* response TLV always with len 1 */
7336
0
      {
7337
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_cmctrl_tlv_event, tvb, pos, length, ENC_NA);
7338
0
      }
7339
0
      else
7340
0
      {
7341
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7342
0
      }
7343
0
      break;
7344
7345
0
    } /* switch */
7346
7347
0
    pos += length;
7348
0
  }
7349
0
}
7350
7351
static int
7352
dissect_cmctrlreq(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7353
0
{
7354
0
  proto_item *it;
7355
0
  proto_tree *cmctrlreq_tree;
7356
0
  uint32_t transid;
7357
0
  tvbuff_t *next_tvb;
7358
7359
0
  it = proto_tree_add_item (tree, proto_docsis_cmctrlreq, tvb, 0, -1, ENC_NA);
7360
0
  cmctrlreq_tree = proto_item_add_subtree (it, ett_docsis_cmctrlreq);
7361
0
  proto_tree_add_item_ret_uint (cmctrlreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
7362
7363
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
7364
0
                "CM Control Request: Transaction ID = %u", transid);
7365
7366
0
  next_tvb = tvb_new_subset_remaining(tvb, 2);
7367
0
  dissect_cmctrlreq_tlv(next_tvb, pinfo, cmctrlreq_tree);
7368
0
  return tvb_captured_length(tvb);
7369
0
}
7370
7371
static int
7372
dissect_cmctrlrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7373
0
{
7374
0
  proto_item *it;
7375
0
  proto_tree *cmctrlrsp_tree;
7376
0
  uint32_t transid;
7377
0
  tvbuff_t *next_tvb;
7378
7379
0
  it = proto_tree_add_item(tree, proto_docsis_cmctrlrsp, tvb, 0, -1, ENC_NA);
7380
0
  cmctrlrsp_tree = proto_item_add_subtree (it, ett_docsis_cmctrlrsp);
7381
0
  proto_tree_add_item_ret_uint (cmctrlrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
7382
7383
0
  col_add_fstr (pinfo->cinfo, COL_INFO,
7384
0
                "CM Control Response: Transaction ID = %u", transid);
7385
7386
  /* Call Dissector for Appendix C TLVs */
7387
0
  next_tvb = tvb_new_subset_remaining (tvb, 2);
7388
0
  dissect_cmctrlreq_tlv(next_tvb, pinfo, cmctrlrsp_tree);
7389
0
  return tvb_captured_length(tvb);
7390
0
}
7391
7392
static int
7393
dissect_regreqmp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7394
0
{
7395
0
  proto_item *it;
7396
0
  proto_tree *regreqmp_tree;
7397
0
  tvbuff_t *next_tvb;
7398
7399
0
  col_set_str(pinfo->cinfo, COL_INFO, "REG-REQ-MP Message:");
7400
7401
0
  it = proto_tree_add_item(tree, proto_docsis_regreqmp, tvb, 0, -1, ENC_NA);
7402
0
  regreqmp_tree = proto_item_add_subtree (it, ett_docsis_regreqmp);
7403
7404
0
  proto_tree_add_item (regreqmp_tree, hf_docsis_regreqmp_sid, tvb, 0, 2, ENC_BIG_ENDIAN);
7405
0
  proto_tree_add_item (regreqmp_tree, hf_docsis_regreqmp_number_of_fragments, tvb, 2, 1, ENC_BIG_ENDIAN);
7406
0
  proto_tree_add_item (regreqmp_tree, hf_docsis_regreqmp_fragment_sequence_number, tvb, 3, 1, ENC_BIG_ENDIAN);
7407
7408
  /* Call Dissector for Appendix C TLVs */
7409
0
  next_tvb = tvb_new_subset_remaining (tvb, 4);
7410
0
  call_dissector (docsis_tlv_handle, next_tvb, pinfo, regreqmp_tree);
7411
0
  return tvb_captured_length(tvb);
7412
0
}
7413
7414
static int
7415
dissect_regrspmp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7416
0
{
7417
0
  proto_item *it, *reassembled_item;
7418
0
  proto_tree *regrspmp_tree, *reassembled_tree;
7419
0
  unsigned sid, number_of_fragments, fragment_sequence_number, id;
7420
7421
0
  tvbuff_t *next_tvb;
7422
7423
0
  col_set_str(pinfo->cinfo, COL_INFO, "REG-RSP-MP Message");
7424
  /* Make sure embedded UCD does not overwrite REGRSPMP info */
7425
0
  col_set_fence(pinfo->cinfo, COL_INFO);
7426
7427
0
  it = proto_tree_add_item(tree, proto_docsis_regrspmp, tvb, 0, -1, ENC_NA);
7428
0
  regrspmp_tree = proto_item_add_subtree (it, ett_docsis_regrspmp);
7429
7430
0
  proto_tree_add_item_ret_uint (regrspmp_tree, hf_docsis_regrspmp_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
7431
0
  proto_tree_add_item (regrspmp_tree, hf_docsis_regrspmp_response, tvb, 2, 1, ENC_BIG_ENDIAN);
7432
0
  proto_tree_add_item_ret_uint (regrspmp_tree, hf_docsis_regrspmp_number_of_fragments, tvb, 3, 1, ENC_BIG_ENDIAN, &number_of_fragments);
7433
0
  proto_tree_add_item_ret_uint (regrspmp_tree, hf_docsis_regrspmp_fragment_sequence_number, tvb, 4, 1, ENC_BIG_ENDIAN, &fragment_sequence_number);
7434
7435
0
  col_add_fstr(pinfo->cinfo, COL_INFO, " (fragment %d):", fragment_sequence_number);
7436
  /* Make sure embedded UCD does not overwrite REGRSPMP info */
7437
0
  col_set_fence(pinfo->cinfo, COL_INFO);
7438
7439
0
  if(number_of_fragments > 1) {
7440
0
     pinfo->fragmented = true;
7441
7442
0
     id = (MGT_REG_RSP << 24) + sid;
7443
0
     fragment_head* reassembled_tlv = NULL;
7444
0
     reassembled_tlv = fragment_add_seq_check(&docsis_tlv_reassembly_table,
7445
0
                                  tvb, 5, pinfo,
7446
0
                                  id, NULL, /* ID for fragments belonging together */
7447
0
                                  fragment_sequence_number - 1, /* Sequence number starts at 0 */
7448
0
                                  tvb_reported_length_remaining(tvb, 5), /* fragment length - to the end */
7449
0
                                  (fragment_sequence_number != number_of_fragments)); /* More fragments? */
7450
7451
0
     if (reassembled_tlv) {
7452
0
       tvbuff_t *tlv_tvb = NULL;
7453
7454
0
       reassembled_item = proto_tree_add_item(regrspmp_tree, hf_docsis_tlv_reassembled, tvb, 0, -1, ENC_NA);
7455
0
       reassembled_tree = proto_item_add_subtree (reassembled_item, ett_docsis_tlv_reassembled );
7456
7457
7458
0
       tlv_tvb = process_reassembled_data(tvb, 5, pinfo, "Reassembled TLV", reassembled_tlv, &docsis_tlv_frag_items,
7459
0
                                                  NULL, reassembled_tree);
7460
7461
0
       if (tlv_tvb && tvb_reported_length(tlv_tvb) > 0) {
7462
0
         call_dissector (docsis_tlv_handle, tlv_tvb, pinfo, reassembled_tree);
7463
0
       }
7464
0
     }
7465
7466
0
  } else {
7467
    /* Call Dissector for Appendix C TLVs */
7468
0
    next_tvb = tvb_new_subset_remaining (tvb, 5);
7469
0
    call_dissector (docsis_tlv_handle, next_tvb, pinfo, regrspmp_tree);
7470
0
  }
7471
7472
0
  return tvb_captured_length(tvb);
7473
0
}
7474
7475
static void
7476
dissect_emrsp_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
7477
0
{
7478
0
  proto_item *it, *tlv_item;
7479
0
  proto_tree *tlv_tree, *tlvtlv_tree;
7480
0
  unsigned pos = 0;
7481
0
  unsigned length;
7482
0
  uint8_t type;
7483
7484
0
  it = proto_tree_add_item(tree, hf_docsis_emrsp_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7485
0
  tlv_tree = proto_item_add_subtree (it, ett_docsis_emrsp_tlv);
7486
7487
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
7488
0
  {
7489
0
    type = tvb_get_uint8 (tvb, pos);
7490
0
    length = tvb_get_uint8 (tvb, pos + 1);
7491
0
    tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
7492
0
                                            ett_docsis_emrsp_tlvtlv, &tlv_item,
7493
0
                                            val_to_str(pinfo->pool, type, emrsp_tlv_vals,
7494
0
                                                       "Unknown TLV (%u)"));
7495
0
    proto_tree_add_item (tlvtlv_tree, hf_docsis_emrsp_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
7496
0
    pos++;
7497
0
    proto_tree_add_item (tlvtlv_tree, hf_docsis_emrsp_tlv_length, tvb, pos, 1, ENC_BIG_ENDIAN);
7498
0
    pos++;
7499
7500
7501
0
    switch (type)
7502
0
    {
7503
0
    case EM_HOLDOFF_TIMER:
7504
0
      proto_tree_add_item (tlvtlv_tree, hf_docsis_emrsp_tlv_holdoff_timer, tvb, pos, length, ENC_BIG_ENDIAN);
7505
0
      break;
7506
0
    default:
7507
0
      proto_tree_add_item (tlvtlv_tree, hf_docsis_emrsp_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
7508
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
7509
0
      break;
7510
0
    } /* switch */
7511
0
    pos += length;
7512
0
  } /* while */
7513
0
}
7514
7515
static int
7516
dissect_emreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data  _U_)
7517
0
{
7518
0
  proto_item *it;
7519
0
  proto_tree *em_tree;
7520
7521
0
  uint32_t trans_id, req_power_mode;
7522
7523
0
  it = proto_tree_add_item(tree, proto_docsis_emreq, tvb, 0, -1, ENC_NA);
7524
0
  em_tree = proto_item_add_subtree (it, ett_docsis_emreq);
7525
0
  proto_tree_add_item_ret_uint (em_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &trans_id);
7526
0
  proto_tree_add_item_ret_uint (em_tree, hf_docsis_emreq_req_power_mode, tvb, 2, 1, ENC_BIG_ENDIAN, &req_power_mode);
7527
0
  proto_tree_add_item (em_tree, hf_docsis_emreq_reserved, tvb, 3, 1, ENC_BIG_ENDIAN);
7528
7529
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "EM-REQ: Transaction ID: %u, Requested Power Mode: %s (%u)", trans_id,
7530
0
                              val_to_str(pinfo->pool, req_power_mode, emreq_req_power_mode_vals, "Unknown Requested Power Mode (%u)"), req_power_mode);
7531
7532
0
  return tvb_captured_length(tvb);
7533
0
}
7534
7535
static int
7536
dissect_emrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data  _U_)
7537
0
{
7538
0
  proto_item *it;
7539
0
  proto_tree *em_tree;
7540
0
  tvbuff_t *next_tvb;
7541
7542
0
  uint32_t trans_id, rsp_code;
7543
7544
0
  it = proto_tree_add_item(tree, proto_docsis_emrsp, tvb, 0, -1, ENC_NA);
7545
0
  em_tree = proto_item_add_subtree (it, ett_docsis_emrsp);
7546
0
  proto_tree_add_item_ret_uint (em_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &trans_id);
7547
0
  proto_tree_add_item_ret_uint (em_tree, hf_docsis_emrsp_rsp_code, tvb, 2, 1, ENC_BIG_ENDIAN, &rsp_code);
7548
0
  proto_tree_add_item (em_tree, hf_docsis_emrsp_reserved, tvb, 3, 1, ENC_BIG_ENDIAN);
7549
7550
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "EM-RSP: Transaction ID: %u, Response Code: %s (%u)", trans_id,
7551
0
                              val_to_str(pinfo->pool, rsp_code, emrsp_rsp_code_vals, "Unknown Response Code (%u)"), rsp_code);
7552
7553
  /* Call Dissector TLVs */
7554
0
  if(tvb_reported_length_remaining(tvb, 4) > 0 )
7555
0
  {
7556
0
    next_tvb = tvb_new_subset_remaining(tvb, 4);
7557
0
    dissect_emrsp_tlv(next_tvb, pinfo, em_tree);
7558
0
  }
7559
7560
0
  return tvb_captured_length(tvb);
7561
0
}
7562
7563
static void
7564
dissect_subcarrier_assignment_range_list(tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, uint16_t pos, uint32_t len)
7565
0
{
7566
0
  proto_item* type_item;
7567
0
  uint32_t i, subcarrier_assignment_type;
7568
7569
0
  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
0
  proto_tree_add_item (tree, hf_docsis_ocd_tlv_subc_assign_value, tvb, pos, 1, ENC_BIG_ENDIAN);
7571
0
  proto_tree_add_item (tree, hf_docsis_ocd_subc_assign_subc_type, tvb, pos, 1, ENC_BIG_ENDIAN);
7572
0
  pos++;
7573
7574
0
  switch (subcarrier_assignment_type) {
7575
0
    case SUBCARRIER_ASSIGNMENT_RANGE_CONT:
7576
0
    case SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1:
7577
0
      proto_tree_add_item (tree, hf_docsis_ocd_subc_assign_range, tvb, pos, 4, ENC_BIG_ENDIAN);
7578
0
      break;
7579
0
    case SUBCARRIER_ASSIGNMENT_LIST:
7580
0
      for (i = 0; i < len/2; ++i) {
7581
0
        proto_tree_add_item (tree, hf_docsis_ocd_subc_assign_index, tvb, pos, 2, ENC_BIG_ENDIAN);
7582
0
        pos += 2;
7583
0
      }
7584
0
      break;
7585
0
    default:
7586
0
      expert_add_info_format(pinfo, type_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown subcarrier assignment type %d", subcarrier_assignment_type);
7587
0
      break;
7588
0
  }
7589
0
}
7590
7591
static void
7592
dissect_ocd_tlv (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
7593
0
{
7594
0
  proto_item *it, *tlv_item, *tlv_len_item;
7595
0
  proto_tree *tlv_tree, *tlvtlv_tree;
7596
0
  uint16_t pos = 0;
7597
0
  uint8_t type;
7598
0
  uint32_t length;
7599
7600
0
  it = proto_tree_add_item(tree, hf_docsis_ocd_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7601
0
  tlv_tree = proto_item_add_subtree (it, ett_docsis_ocd_tlv);
7602
7603
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
7604
0
  {
7605
0
    type = tvb_get_uint8 (tvb, pos);
7606
0
    tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, -1,
7607
0
                                            ett_docsis_ocd_tlvtlv, &tlv_item,
7608
0
                                            val_to_str(pinfo->pool, type, ocd_tlv_vals,
7609
0
                                                       "Unknown TLV (%u)"));
7610
0
    proto_tree_add_uint (tlvtlv_tree, hf_docsis_ocd_type, tvb, pos, 1, type);
7611
0
    pos++;
7612
0
    tlv_len_item = proto_tree_add_item_ret_uint (tlvtlv_tree, hf_docsis_ocd_length, tvb, pos, 1, ENC_NA, &length);
7613
0
    pos++;
7614
0
    proto_item_set_len(tlv_item, length + 2);
7615
7616
0
    switch (type)
7617
0
    {
7618
0
    case DISCRETE_FOURIER_TRANSFORM_SIZE:
7619
0
      if (length == 1)
7620
0
      {
7621
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_four_trans_size, tvb, pos, 1, ENC_BIG_ENDIAN);
7622
0
      }
7623
0
      else
7624
0
      {
7625
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7626
0
      }
7627
0
      break;
7628
0
    case CYCLIC_PREFIX:
7629
0
      if (length == 1)
7630
0
      {
7631
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_cycl_pref, tvb, pos, 1, ENC_BIG_ENDIAN);
7632
0
      }
7633
0
      else
7634
0
      {
7635
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7636
0
      }
7637
0
      break;
7638
0
    case ROLL_OFF:
7639
0
      if (length == 1)
7640
0
      {
7641
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_roll_off, tvb, pos, 1, ENC_BIG_ENDIAN);
7642
0
      }
7643
0
      else
7644
0
      {
7645
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7646
0
      }
7647
0
      break;
7648
0
    case OFDM_SPECTRUM_LOCATION:
7649
0
      if (length == 4)
7650
0
      {
7651
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_ofdm_spec_loc, tvb, pos, 4, ENC_BIG_ENDIAN);
7652
0
      }
7653
0
      else
7654
0
      {
7655
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7656
0
      }
7657
0
      break;
7658
0
    case TIME_INTERLEAVING_DEPTH:
7659
0
      if (length == 1)
7660
0
      {
7661
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_time_int_depth, tvb, pos, 1, ENC_BIG_ENDIAN);
7662
0
      }
7663
0
      else
7664
0
      {
7665
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7666
0
      }
7667
0
      break;
7668
0
    case SUBCARRIER_ASSIGNMENT_RANGE_LIST:
7669
0
      if (length >= 5)
7670
0
      {
7671
0
        dissect_subcarrier_assignment_range_list(tvb, pinfo, tlvtlv_tree, pos, length);
7672
0
      }
7673
0
      else
7674
0
      {
7675
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7676
0
      }
7677
0
      break;
7678
0
    case PRIMARY_CAPABILITY_INDICATOR:
7679
0
      if (length == 1)
7680
0
      {
7681
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_prim_cap_ind, tvb, pos, 1, ENC_BIG_ENDIAN);
7682
0
      }
7683
0
      else
7684
0
      {
7685
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7686
0
      }
7687
0
      break;
7688
0
    case FDX_INDICATOR:
7689
0
      if (length == 1)
7690
0
      {
7691
0
        proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_fdx_ind, tvb, pos, 1, ENC_BIG_ENDIAN);
7692
0
      }
7693
0
      else
7694
0
      {
7695
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7696
0
      }
7697
0
      break;
7698
0
    default:
7699
0
      proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
7700
0
      break;
7701
0
    } /* switch */
7702
0
    pos += length;
7703
0
  } /* while */
7704
0
}
7705
7706
static int
7707
dissect_ocd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7708
0
{
7709
0
  proto_item *it;
7710
0
  proto_tree *ocd_tree;
7711
0
  tvbuff_t *tlv_tvb = NULL;
7712
0
  uint32_t downstream_channel_id, configuration_change_count, id;
7713
7714
0
  it = proto_tree_add_item(tree, proto_docsis_ocd, tvb, 0, -1, ENC_NA);
7715
0
  ocd_tree = proto_item_add_subtree (it, ett_docsis_ocd);
7716
7717
0
  proto_tree_add_item_ret_uint (ocd_tree, hf_docsis_mgt_down_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
7718
0
  proto_tree_add_item_ret_uint (ocd_tree, hf_docsis_ocd_ccc, tvb, 1, 1, ENC_BIG_ENDIAN, &configuration_change_count);
7719
7720
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "OCD: DS CH ID: %u, CCC: %u", downstream_channel_id, configuration_change_count);
7721
7722
0
  id = (downstream_channel_id << 16) + configuration_change_count;
7723
0
  tlv_tvb = dissect_multipart(tvb, pinfo, ocd_tree, data, MGT_OCD, id, 2);
7724
0
  if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
7725
0
    dissect_ocd_tlv(tlv_tvb, pinfo, ocd_tree);
7726
0
  return tvb_captured_length(tvb);
7727
0
}
7728
7729
static void
7730
dissect_dpd_subcarrier_assignment_range_list(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, unsigned pos, unsigned len)
7731
0
{
7732
0
  uint32_t i, subcarrier_assignment_type;
7733
0
  proto_item* type_item;
7734
0
  unsigned modulation;
7735
7736
0
  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
0
  proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_value, tvb, pos, 1, ENC_BIG_ENDIAN);
7738
0
  proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_reserved, tvb, pos, 1, ENC_BIG_ENDIAN);
7739
0
  proto_tree_add_item_ret_uint (tree, hf_docsis_dpd_tlv_subc_assign_modulation, tvb, pos, 1, ENC_BIG_ENDIAN, &modulation);
7740
0
  col_append_str(pinfo->cinfo, COL_INFO, val_to_str(pinfo->pool, modulation, docsis_dpd_subc_assign_modulation_str, "unknown(%u)"));
7741
0
  pos++;
7742
7743
0
  switch (subcarrier_assignment_type)
7744
0
  {
7745
0
    case SUBCARRIER_ASSIGNMENT_RANGE_CONT:
7746
0
    case SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1:
7747
0
      proto_tree_add_item (tree, hf_docsis_dpd_subc_assign_range, tvb, pos, 4, ENC_BIG_ENDIAN);
7748
0
      break;
7749
0
    case SUBCARRIER_ASSIGNMENT_LIST:
7750
0
      for (i = 0; i < len/2; ++i) {
7751
0
        proto_tree_add_item (tree, hf_docsis_dpd_subc_assign_index, tvb, pos, 2, ENC_BIG_ENDIAN);
7752
0
        pos += 2;
7753
0
      }
7754
0
      break;
7755
0
    default:
7756
0
      expert_add_info_format(pinfo, type_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown subcarrier assignment type: %u", subcarrier_assignment_type);
7757
0
      break;
7758
0
  }
7759
0
}
7760
7761
static void
7762
dissect_dpd_subcarrier_assignment_vector(tvbuff_t * tvb, proto_tree * tree, unsigned start, unsigned len)
7763
0
{
7764
0
  uint32_t subcarrier_assignment_vector_oddness;
7765
0
  unsigned vector_index;
7766
7767
0
  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
0
  proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_reserved, tvb, start, 1, ENC_BIG_ENDIAN);
7769
0
  proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_subc_start, tvb, start, 2, ENC_BIG_ENDIAN);
7770
7771
0
  for(vector_index = 0; vector_index < len; ++vector_index)
7772
0
  {
7773
0
    proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_modulation_odd, tvb, start + 2 + vector_index, 1, ENC_BIG_ENDIAN);
7774
0
    if (!((vector_index == len -1) && subcarrier_assignment_vector_oddness))
7775
0
    {
7776
0
      proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_modulation_even, tvb, start + 2 + vector_index, 1, ENC_BIG_ENDIAN);
7777
0
    }
7778
0
  }
7779
0
}
7780
7781
7782
static void
7783
dissect_dpd_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
7784
0
{
7785
0
  proto_item *it, *tlv_item, *tlv_len_item;
7786
0
  proto_tree *tlv_tree, *tlvtlv_tree;
7787
0
  unsigned pos = 0;
7788
0
  unsigned length;
7789
0
  uint8_t type;
7790
0
  unsigned first_subc_assign_list = 1;
7791
7792
0
  it = proto_tree_add_item(tree, hf_docsis_dpd_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7793
0
  tlv_tree = proto_item_add_subtree (it, ett_docsis_dpd_tlv);
7794
7795
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
7796
0
  {
7797
0
    type = tvb_get_uint8 (tvb, pos);
7798
0
    if ( type == SUBCARRIER_ASSIGNMENT_VECTOR)
7799
0
    {
7800
      /* For this type, length is 2 bytes instead of 1 */
7801
0
      length = tvb_get_ntohs (tvb, pos + 1);
7802
0
    } else {
7803
0
      length = tvb_get_uint8 (tvb, pos + 1);
7804
0
    }
7805
7806
0
    tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
7807
0
                                            ett_docsis_dpd_tlvtlv, &tlv_item,
7808
0
                                            val_to_str(pinfo->pool, type, dpd_tlv_vals,
7809
0
                                                       "Unknown TLV (%u)"));
7810
0
    proto_tree_add_uint (tlvtlv_tree, hf_docsis_dpd_type, tvb, pos, 1, type);
7811
0
    pos++;
7812
0
    if (type == SUBCARRIER_ASSIGNMENT_VECTOR)
7813
0
    {
7814
      /* For this type, length is 2 bytes instead of 1 */
7815
0
      tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_dpd_length, tvb, pos, 2, ENC_BIG_ENDIAN);
7816
0
      pos += 2;
7817
0
    } else {
7818
0
      tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_dpd_length, tvb, pos, 1, ENC_BIG_ENDIAN);
7819
0
      pos++;
7820
0
    }
7821
7822
0
    switch (type)
7823
0
    {
7824
0
    case SUBCARRIER_ASSIGNMENT_RANGE_LIST:
7825
0
      if (length >= 5)
7826
0
      {
7827
0
        if(first_subc_assign_list) {
7828
0
          col_append_str(pinfo->cinfo, COL_INFO, ", Modulation: ");
7829
0
          first_subc_assign_list = 0;
7830
0
        } else {
7831
0
          col_append_str(pinfo->cinfo, COL_INFO, " | ");
7832
0
        }
7833
0
        dissect_dpd_subcarrier_assignment_range_list(tvb, pinfo, tlvtlv_tree, pos, length);
7834
0
      }
7835
0
      else
7836
0
      {
7837
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7838
0
      }
7839
0
      break;
7840
0
    case SUBCARRIER_ASSIGNMENT_VECTOR:
7841
0
      if (length >=2)
7842
0
      {
7843
0
        dissect_dpd_subcarrier_assignment_vector(tvb, tlvtlv_tree, pos, length);
7844
0
      }
7845
0
      else
7846
0
      {
7847
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7848
0
      }
7849
0
      break;
7850
0
    default:
7851
0
      proto_tree_add_item (tlvtlv_tree, hf_docsis_dpd_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
7852
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
7853
0
      break;
7854
0
    } /* switch */
7855
0
    pos += length;
7856
0
  } /* while */
7857
0
}
7858
7859
static int
7860
dissect_dpd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data  _U_)
7861
0
{
7862
0
  proto_item *it;
7863
0
  proto_tree *dpd_tree;
7864
0
  tvbuff_t *next_tvb;
7865
7866
0
  uint32_t downstream_channel_id, profile_identifier, configuration_change_count;
7867
7868
0
  it = proto_tree_add_item(tree, proto_docsis_dpd, tvb, 0, -1, ENC_NA);
7869
0
  dpd_tree = proto_item_add_subtree (it, ett_docsis_dpd);
7870
0
  proto_tree_add_item_ret_uint (dpd_tree, hf_docsis_mgt_down_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
7871
0
  proto_tree_add_item_ret_uint (dpd_tree, hf_docsis_dpd_prof_id, tvb, 1, 1, ENC_BIG_ENDIAN, &profile_identifier);
7872
0
  proto_tree_add_item_ret_uint (dpd_tree, hf_docsis_dpd_ccc, tvb, 2, 1, ENC_BIG_ENDIAN, &configuration_change_count);
7873
7874
0
  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);
7875
7876
  /* Call Dissector TLVs */
7877
0
  next_tvb = tvb_new_subset_remaining(tvb, 3);
7878
0
  dissect_dpd_tlv(next_tvb, pinfo, dpd_tree);
7879
7880
0
  return tvb_captured_length(tvb);
7881
0
}
7882
7883
static int
7884
dissect_type51ucd(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
7885
0
{
7886
0
  return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_type51ucd, MGT_TYPE51UCD);
7887
0
}
7888
7889
static void
7890
dissect_optreq_tlv_rxmer_thresholding_parameters (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
7891
0
{
7892
0
  proto_item *it, *tlv_item, *tlv_len_item;
7893
0
  proto_tree *tlv_tree, *tlvtlv_tree;
7894
0
  unsigned pos = 0;
7895
0
  unsigned length;
7896
0
  uint8_t type;
7897
7898
0
  it = proto_tree_add_item(tree, hf_docsis_optreq_tlv_rxmer_thresh_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7899
0
  tlv_tree = proto_item_add_subtree (it, ett_docsis_optreq_tlv_rxmer_thresh_params);
7900
7901
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
7902
0
  {
7903
0
    type = tvb_get_uint8 (tvb, pos);
7904
0
    length = tvb_get_uint8 (tvb, pos + 1);
7905
0
    tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
7906
0
                                            ett_docsis_optreq_tlv_rxmer_thresh_params_tlv, &tlv_item,
7907
0
                                            val_to_str(pinfo->pool, type, optreq_tlv_rxmer_thresh_params_vals,
7908
0
                                                       "Unknown TLV (%u)"));
7909
0
    proto_tree_add_uint (tlvtlv_tree, hf_docsis_optreq_xmer_thresh_params_type, tvb, pos, 1, type);
7910
0
    pos++;
7911
0
    tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_xmer_thresh_params_length, tvb, pos, 1, ENC_NA);
7912
0
    pos++;
7913
7914
7915
0
    switch (type)
7916
0
    {
7917
0
    case OPT_REQ_RXMER_THRESH_PARAMS_MODULATION_ORDER:
7918
0
      if (length == 1)
7919
0
      {
7920
0
        proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_rxmer_thresh_data_mod_order, tvb, pos, length, ENC_NA);
7921
0
      }
7922
0
      else
7923
0
      {
7924
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7925
0
      }
7926
0
      break;
7927
0
    default:
7928
0
      proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
7929
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
7930
0
      break;
7931
0
    } /* switch */
7932
0
    pos += length;
7933
0
  } /* while */
7934
0
}
7935
7936
static void
7937
dissect_optreq_tlv_trigger_definition (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
7938
0
{
7939
0
  proto_item *it, *tlv_item, *tlv_len_item, *subtree_item;
7940
0
  proto_tree *tlv_tree, *tlvtlv_tree;
7941
0
  unsigned pos = 0;
7942
0
  unsigned length, measurement_duration;
7943
0
  uint8_t type;
7944
7945
0
  it = proto_tree_add_item(tree, hf_docsis_optreq_tlv_trigger_definition_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
7946
0
  tlv_tree = proto_item_add_subtree (it, ett_docsis_optreq_tlv_trigger_definition_params);
7947
7948
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
7949
0
  {
7950
0
    type = tvb_get_uint8 (tvb, pos);
7951
0
    length = tvb_get_uint8 (tvb, pos + 1);
7952
0
    tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
7953
0
                                            ett_docsis_optreq_tlv_trigger_definition_params_tlv, &tlv_item,
7954
0
                                            val_to_str(pinfo->pool, type, optreq_tlv_trigger_definition_vals,
7955
0
                                                       "Unknown TLV (%u)"));
7956
0
    proto_tree_add_uint (tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_data_type,
7957
0
                         tvb, pos, 1, type);
7958
0
    pos++;
7959
0
    tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_data_length,
7960
0
                                        tvb, pos, 1, ENC_NA);
7961
0
    pos++;
7962
7963
0
    switch (type)
7964
0
    {
7965
0
    case OPT_REQ_TRIGGER_DEFINITION_TRIGGER_TYPE:
7966
0
      if (length == 1)
7967
0
      {
7968
0
        proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_trigger_type, tvb, pos, length, ENC_NA);
7969
0
      }
7970
0
      else
7971
0
      {
7972
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7973
0
      }
7974
0
      break;
7975
0
    case OPT_REQ_TRIGGER_DEFINITION_MEASUREMENT_DURATION:
7976
0
      if (length == 2)
7977
0
      {
7978
0
        subtree_item = proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_measure_duration,
7979
0
                                           tvb, pos, length, ENC_BIG_ENDIAN);
7980
0
        proto_item_append_text(subtree_item, " OFDM Symbols");
7981
0
        measurement_duration = tvb_get_uint8 (tvb, pos);
7982
0
        if (measurement_duration > 1024)
7983
0
        {
7984
0
          expert_add_info_format(pinfo, subtree_item, &ei_docsis_mgmt_opt_req_trigger_def_measure_duration,
7985
0
                                 "Measurement duration exceeds 1024 OFDM symbols: %u", measurement_duration);
7986
0
        }
7987
0
      }
7988
0
      else
7989
0
      {
7990
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
7991
0
      }
7992
0
      break;
7993
0
    case OPT_REQ_TRIGGER_DEFINITION_TRIGGERING_SID:
7994
0
      if (length == 2)
7995
0
      {
7996
0
        proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_triggering_sid,
7997
0
                            tvb, pos, length, ENC_BIG_ENDIAN);
7998
0
      }
7999
0
      else
8000
0
      {
8001
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8002
0
      }
8003
0
      break;
8004
0
    case OPT_REQ_TRIGGER_DEFINITION_US_CHANNEL_ID:
8005
0
      if (length == 1)
8006
0
      {
8007
0
        proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_us_chan_id,
8008
0
                            tvb, pos, length, ENC_BIG_ENDIAN);
8009
0
      }
8010
0
      else
8011
0
      {
8012
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8013
0
      }
8014
0
      break;
8015
0
    case OPT_REQ_TRIGGER_DEFINITION_OUDP_SOUND_AMBIG_OFFSET:
8016
0
      if (length == 4)
8017
0
      {
8018
0
        subtree_item = proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_sound_ambig_offset,
8019
0
                            tvb, pos, length, ENC_BIG_ENDIAN);
8020
0
        proto_item_append_text(subtree_item, " DOCSIS time ticks (10.24 MHz)");
8021
0
      }
8022
0
      else
8023
0
      {
8024
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8025
0
      }
8026
0
      break;
8027
0
    case OPT_REQ_TRIGGER_DEFINITION_RXMER_TO_REPORT:
8028
0
      if (length == 1)
8029
0
      {
8030
0
        proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_rx_mer_to_report,
8031
0
                            tvb, pos, length, ENC_NA);
8032
0
      }
8033
0
      else
8034
0
      {
8035
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8036
0
      }
8037
0
      break;
8038
0
    case OPT_REQ_TRIGGER_DEFINITION_START_TIME:
8039
0
      if (length == 4)
8040
0
      {
8041
0
        proto_tree_add_item(tlvtlv_tree, hf_docsis_optreq_tlv_trigger_definition_start_time,
8042
0
                            tvb, pos, length, ENC_BIG_ENDIAN);
8043
0
      }
8044
0
      else
8045
0
      {
8046
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8047
0
      }
8048
0
      break;
8049
0
    default:
8050
0
      proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
8051
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
8052
0
      break;
8053
0
    } /* switch */
8054
0
    pos += length;
8055
0
  } /* while */
8056
0
}
8057
8058
static void
8059
dissect_optreq_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
8060
0
{
8061
0
  proto_item *it, *tlv_item, *tlv_len_item;
8062
0
  proto_tree *tlv_tree, *tlvtlv_tree;
8063
0
  unsigned pos = 0;
8064
0
  unsigned length;
8065
0
  uint8_t type;
8066
0
  tvbuff_t *next_tvb;
8067
8068
0
  it = proto_tree_add_item(tree, hf_docsis_optreq_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
8069
0
  tlv_tree = proto_item_add_subtree (it, ett_docsis_optreq_tlv);
8070
8071
0
  while (tvb_reported_length_remaining(tvb, pos) > 0)
8072
0
  {
8073
0
    type = tvb_get_uint8 (tvb, pos);
8074
0
    length = tvb_get_uint8 (tvb, pos + 1);
8075
0
    tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length + 2,
8076
0
                                            ett_docsis_optreq_tlvtlv, &tlv_item,
8077
0
                                            val_to_str(pinfo->pool, type, optreq_tlv_vals,
8078
0
                                                       "Unknown TLV (%u)"));
8079
0
    proto_tree_add_uint (tlvtlv_tree, hf_docsis_optreq_type, tvb, pos, 1, type);
8080
0
    pos++;
8081
0
    tlv_len_item = proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_length, tvb, pos, 1, ENC_NA);
8082
0
    pos++;
8083
8084
8085
0
    switch (type)
8086
0
    {
8087
0
    case OPT_REQ_REQ_STAT:
8088
0
      if (length == 1)
8089
0
      {
8090
8091
0
         static int * const req_stat[] = {
8092
0
           &hf_docsis_optreq_reqstat_rxmer_stat_subc,
8093
0
           &hf_docsis_optreq_reqstat_rxmer_subc_threshold_comp,
8094
0
           &hf_docsis_optreq_reqstat_snr_marg_cand_prof,
8095
0
           &hf_docsis_optreq_reqstat_codew_stat_cand_prof,
8096
0
           &hf_docsis_optreq_reqstat_codew_thresh_comp_cand_prof,
8097
0
           &hf_docsis_optreq_reqstat_ncp_field_stat,
8098
0
           &hf_docsis_optreq_reqstat_ncp_crc_thresh_comp,
8099
0
           &hf_docsis_optreq_reqstat_reserved,
8100
0
           NULL
8101
0
         };
8102
8103
0
         proto_tree_add_bitmask_list(tlvtlv_tree, tvb, pos, length, req_stat, ENC_BIG_ENDIAN);
8104
0
      }
8105
0
      else
8106
0
      {
8107
0
        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
8108
0
      }
8109
0
      break;
8110
0
    case OPT_REQ_RXMER_THRESH_PARAMS:
8111
0
      next_tvb = tvb_new_subset_length(tvb, pos, length);
8112
0
      dissect_optreq_tlv_rxmer_thresholding_parameters(next_tvb, pinfo, tlvtlv_tree);
8113
0
      break;
8114
0
    case OPT_REQ_TRIGGER_DEFINITION:
8115
0
      next_tvb = tvb_new_subset_length(tvb, pos, length);
8116
0
      dissect_optreq_tlv_trigger_definition(next_tvb, pinfo, tlvtlv_tree);
8117
0
      break;
8118
0
    default:
8119
0
      proto_tree_add_item (tlvtlv_tree, hf_docsis_optreq_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
8120
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
8121
0
      break;
8122
0
    } /* switch */
8123
0
    pos += length;
8124
0
  } /* while */
8125
0
}
8126
8127
static int
8128
dissect_optreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data  _U_)
8129
0
{
8130
0
  proto_item *it;
8131
0
  proto_tree *opt_tree;
8132
0
  tvbuff_t *tlv_tvb = NULL;
8133
8134
0
  uint32_t downstream_channel_id, profile_identifier, opcode, id;
8135
8136
0
  it = proto_tree_add_item(tree, proto_docsis_optreq, tvb, 0, -1, ENC_NA);
8137
0
  opt_tree = proto_item_add_subtree (it, ett_docsis_optreq);
8138
0
  proto_tree_add_item (opt_tree, hf_docsis_optreq_reserved, tvb, 0, 2, ENC_BIG_ENDIAN);
8139
0
  proto_tree_add_item_ret_uint (opt_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
8140
0
  proto_tree_add_item_ret_uint (opt_tree, hf_docsis_optreq_prof_id, tvb, 3, 1, ENC_BIG_ENDIAN, &profile_identifier);
8141
0
  proto_tree_add_item_ret_uint (opt_tree, hf_docsis_optreq_opcode, tvb, 4, 1, ENC_BIG_ENDIAN, &opcode);
8142
8143
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "OPT-REQ: DS CH ID: %u, Profile ID: %s (%u), Opcode: %s (%u)", downstream_channel_id,
8144
0
                              val_to_str(pinfo->pool, profile_identifier, profile_id_vals, "Unknown Profile ID (%u)"), profile_identifier,
8145
0
                              val_to_str(pinfo->pool, opcode, opt_opcode_vals, "Unknown Opcode (%u)"), opcode);
8146
8147
0
  id = (downstream_channel_id << 16) + profile_identifier;
8148
0
  tlv_tvb = dissect_multipart(tvb, pinfo, opt_tree, data, MGT_OPT_REQ, id, 5);
8149
0
  if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8150
0
    dissect_optreq_tlv(tlv_tvb, pinfo, opt_tree);
8151
0
  return tvb_captured_length(tvb);
8152
0
}
8153
8154
static void
8155
dissect_optrsp_tlv_rxmer(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8156
0
{
8157
0
  proto_item *tlv_item;
8158
0
  proto_tree *tlv_tree;
8159
0
  uint32_t tlv_type;
8160
0
  int tlv_length, end = pos + length, i;
8161
8162
0
  static int *const ect_rba_subband_direction[] = {
8163
0
      &hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb0,
8164
0
      &hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb1,
8165
0
      &hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb2,
8166
0
      NULL};
8167
8168
0
  while (pos + 2 < end)
8169
0
  {
8170
0
    tlv_type = tvb_get_uint8(tvb, pos);
8171
0
    tlv_length = tvb_get_ntohs(tvb, pos + 1);
8172
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_optrsp_rxmer_tlv, tvb, pos, tlv_length + 3, ENC_NA);
8173
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, optrsp_rxmer_vals, "Unknown TLV %u"));
8174
0
    if (tlv_type == OPT_RSP_RXMER_SUBCARRIER) // huge list
8175
0
      tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_optrsp_rxmer_subcarrier_tlv);
8176
0
    else
8177
0
      tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_optrsp_rxmer_tlv);
8178
0
    proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8179
0
    proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_tlv_length, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
8180
0
    pos += 3;
8181
8182
0
    switch (tlv_type)
8183
0
    {
8184
0
    case OPT_RSP_RXMER_SUBCARRIER:
8185
0
      for (i = 0; i < tlv_length; ++i)
8186
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_subcarrier, tvb, pos + i, 1, ENC_BIG_ENDIAN);
8187
0
      break;
8188
0
    case OPT_RSP_RXMER_SUBCARRIER_THRESHOLD:
8189
0
      proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_subcarrier_threshold, tvb, pos, tlv_length, ENC_NA);
8190
0
      break;
8191
0
    case OPT_RSP_RXMER_SUBCARRIER_THRESHOLD_COUNT:
8192
0
      if (tlv_length == 2)
8193
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_subcarrier_threshold_count, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8194
0
      else
8195
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8196
0
      break;
8197
0
    case OPT_RSP_RXMER_SNR_MARGIN:
8198
0
      if (tlv_length == 1)
8199
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_snr_margin, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8200
0
      else
8201
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8202
0
      break;
8203
0
    case OPT_RSP_RXMER_AVG:
8204
0
      if (tlv_length == 1)
8205
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_rxmer_avg, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8206
0
      else
8207
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8208
0
      break;
8209
0
    case OPT_RSP_RXMER_ECT_RBA_SUBBAND_DIRECTION:
8210
0
      if (tlv_length == 1) {
8211
0
        proto_tree_add_bitmask_with_flags(tlv_tree, tvb, pos, hf_docsis_optrsp_rxmer_ect_rba_subband_direction,
8212
0
                                          ett_docsis_optrsp_rxmer_tlv, ect_rba_subband_direction, ENC_BIG_ENDIAN, BMT_NO_APPEND);
8213
0
        proto_tree_add_bitmask_list(tlv_tree, tvb, pos, tlv_length, ect_rba_subband_direction, ENC_BIG_ENDIAN);
8214
0
      } else
8215
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8216
0
      break;
8217
0
    default:
8218
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
8219
0
      break;
8220
0
    }
8221
0
    pos += tlv_length;
8222
0
  }
8223
0
  if (pos != end)
8224
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8225
0
}
8226
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)
8229
0
{
8230
0
  proto_item *tlv_item;
8231
0
  proto_tree *tlv_tree;
8232
0
  uint32_t tlv_type;
8233
0
  int tlv_length, end = pos + length;
8234
8235
0
  while (pos + 2 < end)
8236
0
  {
8237
0
    tlv_type = tvb_get_uint8(tvb, pos);
8238
0
    tlv_length = tvb_get_ntohs(tvb, pos + 1);
8239
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_optrsp_data_cw_tlv, tvb, pos, tlv_length + 3, ENC_NA);
8240
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, optrsp_data_cw_vals, "Unknown TLV %u"));
8241
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_optrsp_data_cw_tlv);
8242
0
    proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8243
0
    proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_tlv_length, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
8244
0
    pos += 3;
8245
8246
0
    switch (tlv_type)
8247
0
    {
8248
0
    case OPT_RSP_DATA_CW_COUNT:
8249
0
      if (tlv_length == 4)
8250
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_count, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8251
0
      else
8252
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8253
0
      break;
8254
0
    case OPT_RSP_DATA_CW_CORRECTED:
8255
0
      if (tlv_length == 4)
8256
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_corrected, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8257
0
      else
8258
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8259
0
      break;
8260
0
    case OPT_RSP_DATA_CW_UNCORRECTABLE:
8261
0
      if (tlv_length == 4)
8262
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_uncorrectable, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8263
0
      else
8264
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8265
0
      break;
8266
0
    case OPT_RSP_DATA_CW_THRESHOLD_COMPARISON:
8267
0
      if (tlv_length == 1)
8268
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_data_cw_threshold_comparison, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8269
0
      else
8270
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8271
0
      break;
8272
0
    default:
8273
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
8274
0
      break;
8275
0
    }
8276
0
    pos += tlv_length;
8277
0
  }
8278
0
  if (pos != end)
8279
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8280
0
}
8281
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)
8284
0
{
8285
0
  proto_item *tlv_item;
8286
0
  proto_tree *tlv_tree;
8287
0
  uint32_t tlv_type;
8288
0
  int tlv_length, end = pos + length;
8289
8290
0
  while (pos + 2 < end)
8291
0
  {
8292
0
    tlv_type = tvb_get_uint8(tvb, pos);
8293
0
    tlv_length = tvb_get_ntohs(tvb, pos + 1);
8294
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_optrsp_ncp_fields_tlv, tvb, pos, tlv_length + 3, ENC_NA);
8295
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, optrsp_ncp_fields_vals, "Unknown TLV %u"));
8296
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_optrsp_ncp_fields_tlv);
8297
0
    proto_tree_add_item(tlv_tree, hf_docsis_optrsp_ncp_fields_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8298
0
    proto_tree_add_item(tlv_tree, hf_docsis_optrsp_ncp_fields_tlv_length, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
8299
0
    pos += 3;
8300
8301
0
    switch (tlv_type)
8302
0
    {
8303
0
    case OPT_RSP_NCP_FIELDS_COUNT:
8304
0
      if (tlv_length == 4)
8305
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_ncp_fields_count, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8306
0
      else
8307
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8308
0
      break;
8309
0
    case OPT_RSP_NCP_FIELDS_FAILURE:
8310
0
      if (tlv_length == 4)
8311
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_ncp_fields_failure, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8312
0
      else
8313
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8314
0
      break;
8315
0
    case OPT_RSP_NCP_FIELDS_THRESHOLD_COMPARISON:
8316
0
      if (tlv_length == 1)
8317
0
        proto_tree_add_item(tlv_tree, hf_docsis_optrsp_ncp_fields_threshold_comparison, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8318
0
      else
8319
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8320
0
      break;
8321
0
    default:
8322
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8323
0
      break;
8324
0
    }
8325
0
    pos += tlv_length;
8326
0
  }
8327
0
  if (pos != end)
8328
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8329
0
}
8330
8331
static void
8332
dissect_optrsp_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8333
0
{
8334
0
  proto_item *tlv_item;
8335
0
  proto_tree *tlv_tree;
8336
0
  uint32_t tlv_type;
8337
0
  int tlv_length, end = pos + length;
8338
8339
0
  while (pos + 2 < end)
8340
0
  {
8341
0
    tlv_type = tvb_get_uint8(tvb, pos);
8342
0
    tlv_length = tvb_get_ntohs(tvb, pos + 1);
8343
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_optrsp_tlv, tvb, pos, tlv_length + 3, ENC_NA);
8344
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, optrsp_tlv_vals, "Unknown TLV %u"));
8345
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_optrsp_tlv);
8346
0
    proto_tree_add_item(tlv_tree, hf_docsis_optrsp_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8347
0
    proto_tree_add_item(tlv_tree, hf_docsis_optrsp_tlv_length, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
8348
0
    pos += 3;
8349
8350
0
    switch (tlv_type)
8351
0
    {
8352
0
    case OPT_RSP_RXMER:
8353
0
      dissect_optrsp_tlv_rxmer(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8354
0
      break;
8355
0
    case OPT_RSP_DATA_CW:
8356
0
      dissect_optrsp_tlv_data_cw(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8357
0
      break;
8358
0
    case OPT_RSP_NCP_FIELDS:
8359
0
      dissect_optrsp_tlv_ncp_fields(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8360
0
      break;
8361
0
    default:
8362
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
8363
0
      break;
8364
0
    }
8365
0
    pos += tlv_length;
8366
0
  }
8367
0
  if (pos != end)
8368
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8369
0
}
8370
8371
static int
8372
dissect_optrsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8373
0
{
8374
0
  proto_item *opt_item;
8375
0
  proto_tree *opt_tree;
8376
0
  tvbuff_t *tlv_tvb = NULL;
8377
8378
0
  uint32_t downstream_channel_id, profile_identifier, status, id;
8379
8380
0
  opt_item = proto_tree_add_item(tree, proto_docsis_optrsp, tvb, 0, -1, ENC_NA);
8381
0
  opt_tree = proto_item_add_subtree(opt_item, ett_docsis_optrsp);
8382
0
  proto_tree_add_item(opt_tree, hf_docsis_optrsp_reserved, tvb, 0, 2, ENC_BIG_ENDIAN);
8383
0
  proto_tree_add_item_ret_uint(opt_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
8384
0
  proto_tree_add_item_ret_uint(opt_tree, hf_docsis_optrsp_prof_id, tvb, 3, 1, ENC_BIG_ENDIAN, &profile_identifier);
8385
0
  proto_tree_add_item_ret_uint(opt_tree, hf_docsis_optrsp_status, tvb, 4, 1, ENC_BIG_ENDIAN, &status);
8386
8387
0
  col_add_fstr(pinfo->cinfo, COL_INFO, "OPT-RSP: DS CH ID: %u, Profile ID: %s (%u), Status: %s (%u)", downstream_channel_id,
8388
0
               val_to_str(pinfo->pool, profile_identifier, profile_id_vals, "Unknown Profile ID (%u)"), profile_identifier,
8389
0
               val_to_str(pinfo->pool, status, opt_status_vals, "Unknown status (%u)"), status);
8390
8391
0
  id = (downstream_channel_id << 16) + profile_identifier;
8392
0
  tlv_tvb = dissect_multipart(tvb, pinfo, opt_tree, data, MGT_OPT_RSP, id, 5);
8393
0
  if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8394
0
    dissect_optrsp_tlv(tlv_tvb, pinfo, opt_item, opt_tree, 0, tvb_reported_length(tlv_tvb));
8395
0
  return tvb_captured_length(tvb);
8396
0
}
8397
8398
static int
8399
dissect_optack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data  _U_)
8400
0
{
8401
0
  proto_item *it;
8402
0
  proto_tree *opt_tree;
8403
8404
0
  uint32_t downstream_channel_id, profile_identifier;
8405
8406
0
  it = proto_tree_add_item(tree, proto_docsis_optack, tvb, 0, -1, ENC_NA);
8407
0
  opt_tree = proto_item_add_subtree (it, ett_docsis_optack);
8408
0
  proto_tree_add_item (opt_tree, hf_docsis_optack_reserved, tvb, 0, 2, ENC_BIG_ENDIAN);
8409
0
  proto_tree_add_item_ret_uint (opt_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
8410
0
  proto_tree_add_item_ret_uint (opt_tree, hf_docsis_optack_prof_id, tvb, 3, 1, ENC_BIG_ENDIAN, &profile_identifier);
8411
8412
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "OPT-ACK: DS CH ID: %u, Profile ID: %s (%u)", downstream_channel_id,
8413
0
                              val_to_str(pinfo->pool, profile_identifier, profile_id_vals, "Unknown Profile ID (%u)"), profile_identifier);
8414
8415
0
  return tvb_captured_length(tvb);
8416
0
}
8417
8418
static int
8419
dissect_rba (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data  _U_)
8420
0
{
8421
0
  proto_item *it, *rba_direction_it;
8422
0
  proto_tree *rba_tree;
8423
8424
0
  uint32_t tg_id, dcid;
8425
0
  uint32_t subband_index, nr_of_subbands;
8426
8427
0
  static int * const rba_control_byte[] = {
8428
0
    &hf_docsis_rba_resource_block_change_bit,
8429
0
    &hf_docsis_rba_expiration_time_valid_bit,
8430
0
    &hf_docsis_rba_control_byte_bitmask_rsvd,
8431
0
    NULL
8432
0
  };
8433
8434
0
  it = proto_tree_add_item(tree, proto_docsis_rba, tvb, 0, -1, ENC_NA);
8435
0
  rba_tree = proto_item_add_subtree (it, ett_docsis_rba);
8436
0
  proto_tree_add_item_ret_uint (rba_tree, hf_docsis_rba_tg_id, tvb, 0, 1, ENC_BIG_ENDIAN, &tg_id);
8437
0
  proto_tree_add_item (rba_tree, hf_docsis_rba_ccc, tvb, 1, 1, ENC_BIG_ENDIAN);
8438
0
  proto_tree_add_item_ret_uint (rba_tree, hf_docsis_rba_dcid, tvb, 2, 1, ENC_BIG_ENDIAN, &dcid);
8439
0
  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
0
  proto_tree_add_item (rba_tree, hf_docsis_rba_rba_time, tvb, 4, 4, ENC_BIG_ENDIAN);
8441
0
  proto_tree_add_item (rba_tree, hf_docsis_rba_rba_expiration_time, tvb, 8, 4, ENC_BIG_ENDIAN);
8442
0
  proto_tree_add_item_ret_uint (rba_tree, hf_docsis_rba_number_of_subbands, tvb, 12, 1, ENC_BIG_ENDIAN, &nr_of_subbands);
8443
0
  for (subband_index =0; subband_index < nr_of_subbands; ++subband_index) {
8444
0
      rba_direction_it = proto_tree_add_item (rba_tree, hf_docsis_rba_subband_direction, tvb, 13 + subband_index, 1, ENC_BIG_ENDIAN);
8445
0
      proto_item_prepend_text(rba_direction_it, "Sub-band %d: ", subband_index);
8446
0
  }
8447
8448
0
  col_add_fstr (pinfo->cinfo, COL_INFO, "RBA: TG_ID: %u, DCID: %u", tg_id, dcid);
8449
8450
0
  return tvb_captured_length(tvb);
8451
0
}
8452
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)
8455
0
{
8456
0
  proto_item *tlv_item;
8457
0
  proto_tree *tlv_tree, *subtlv_tree;
8458
0
  uint32_t tlv_type;
8459
0
  int tlv_length, end = pos + length, i;
8460
8461
0
  while (pos + 1 < end)
8462
0
  {
8463
0
    tlv_type = tvb_get_uint8(tvb, pos);
8464
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
8465
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_cwt_us_encodings_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8466
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, cwt_us_encodings_tlv_vals, "Unknown TLV %u"));
8467
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_cwt_tlv);
8468
0
    proto_tree_add_item(tlv_tree, hf_docsis_cwt_us_encodings_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8469
0
    proto_tree_add_item(tlv_tree, hf_docsis_cwt_us_encodings_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8470
0
    pos += 2;
8471
8472
0
    switch (tlv_type)
8473
0
    {
8474
0
    case CWT_US_ENCODINGS_CID:
8475
0
      if (tlv_length == 1)
8476
0
        proto_tree_add_item(tlv_tree, hf_docsis_cwt_us_encodings_cid, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8477
0
      else
8478
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8479
0
      break;
8480
0
    case CWT_US_ENCODINGS_SC_INDEX:
8481
0
      subtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, length, ett_docsis_cwt_subtlv, NULL,
8482
0
                                           "Upstream Subcarrier Indices");
8483
0
      for (i = 0; i + 1 < tlv_length; i += 2)
8484
0
        proto_tree_add_item(subtlv_tree, hf_docsis_cwt_us_encodings_sc_index, tvb, pos + i, 2, ENC_BIG_ENDIAN);
8485
0
      if (i != tlv_length)
8486
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8487
0
      break;
8488
0
    case CWT_US_ENCODINGS_POWER_BOOST:
8489
0
      if (tlv_length == 1)
8490
0
        proto_tree_add_item(tlv_tree, hf_docsis_cwt_us_encodings_power_boost, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8491
0
      else
8492
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8493
0
      break;
8494
0
    default:
8495
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8496
0
      break;
8497
0
    }
8498
0
    pos += tlv_length;
8499
0
  }
8500
0
  if (pos != end)
8501
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8502
0
}
8503
8504
static void
8505
dissect_cwt_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8506
0
{
8507
0
  proto_item *tlv_item;
8508
0
  proto_tree *tlv_tree;
8509
0
  uint32_t tlv_type;
8510
0
  int tlv_length, end = pos + length;
8511
8512
0
  uint32_t value;
8513
8514
0
  while (pos + 1 < end)
8515
0
  {
8516
0
    tlv_type = tvb_get_uint8(tvb, pos);
8517
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
8518
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_cwt_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8519
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, cwt_tlv_vals, "Unknown TLV %u"));
8520
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_cwt_tlv);
8521
0
    proto_tree_add_item(tlv_tree, hf_docsis_cwt_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8522
0
    proto_tree_add_item(tlv_tree, hf_docsis_cwt_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8523
0
    pos += 2;
8524
8525
0
    switch (tlv_type)
8526
0
    {
8527
0
    case CWT_PHASE_ROTATION:
8528
0
      if (tlv_length == 1)
8529
0
        proto_tree_add_item(tlv_tree, hf_docsis_cwt_phase_rotation, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8530
0
      else
8531
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8532
0
      break;
8533
0
    case CWT_MAX_DURATION:
8534
0
      if (tlv_length == 2) {
8535
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_cwt_max_duration, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8536
0
        if (value < 1 || value > 1000)
8537
0
          expert_add_info_format(pinfo, tlv_item, &ei_docsis_cwt_out_of_range, "Invalid CWT Maximum Duration: %i", value);
8538
0
      } else
8539
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8540
0
      break;
8541
0
    case CWT_US_ENCODINGS:
8542
0
      dissect_cwt_us_encodings_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8543
0
      break;
8544
0
    default:
8545
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
8546
0
      break;
8547
0
    }
8548
0
    pos += tlv_length;
8549
0
  }
8550
0
  if (pos != end)
8551
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8552
0
}
8553
8554
static int
8555
dissect_cwt_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8556
0
{
8557
0
  proto_item *cwt_req_item;
8558
0
  proto_tree *cwt_req_tree;
8559
0
  tvbuff_t *tlv_tvb = NULL;
8560
8561
0
  uint32_t transaction_id, sub_band_id, op_code, id = 0;
8562
8563
0
  cwt_req_item = proto_tree_add_item(tree, proto_docsis_cwt_req, tvb, 0, -1, ENC_NA);
8564
0
  cwt_req_tree = proto_item_add_subtree(cwt_req_item, ett_docsis_cwt_req);
8565
0
  proto_tree_add_item_ret_uint(cwt_req_tree, hf_docsis_cwt_trans_id, tvb, 0, 1, ENC_BIG_ENDIAN, &transaction_id);
8566
0
  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
0
  proto_tree_add_item_ret_uint(cwt_req_tree, hf_docsis_cwt_op_code, tvb, 2, 1, ENC_BIG_ENDIAN, &op_code);
8568
8569
0
  col_add_fstr(pinfo->cinfo, COL_INFO, "CWT-REQ %s ID %u on sub-band %u",
8570
0
               val_to_str(pinfo->pool, op_code, cwt_op_code_vals, "Unknown Op Code (%u)"),
8571
0
               transaction_id, sub_band_id);
8572
8573
0
  id = (transaction_id << 8) + sub_band_id;
8574
0
  tlv_tvb = dissect_multipart(tvb, pinfo, cwt_req_tree, data, MGT_CWT_REQ, id, 3);
8575
0
  if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8576
0
    dissect_cwt_tlv(tlv_tvb, pinfo, cwt_req_item, cwt_req_tree, 0, tvb_reported_length(tlv_tvb));
8577
0
  return tvb_captured_length(tvb);
8578
0
}
8579
8580
static int
8581
dissect_cwt_rsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8582
0
{
8583
0
  proto_item *cwt_rsp_item;
8584
0
  proto_tree *cwt_rsp_tree;
8585
0
  tvbuff_t *tlv_tvb = NULL;
8586
8587
0
  uint32_t transaction_id, sub_band_id, op_code, status, id = 0;
8588
8589
0
  cwt_rsp_item = proto_tree_add_item(tree, proto_docsis_cwt_rsp, tvb, 0, -1, ENC_NA);
8590
0
  cwt_rsp_tree = proto_item_add_subtree(cwt_rsp_item, ett_docsis_cwt_rsp);
8591
0
  proto_tree_add_item_ret_uint(cwt_rsp_tree, hf_docsis_cwt_trans_id, tvb, 0, 1, ENC_BIG_ENDIAN, &transaction_id);
8592
0
  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
0
  proto_tree_add_item_ret_uint(cwt_rsp_tree, hf_docsis_cwt_op_code, tvb, 2, 1, ENC_BIG_ENDIAN, &op_code);
8594
0
  proto_tree_add_item_ret_uint(cwt_rsp_tree, hf_docsis_cwt_status, tvb, 3, 1, ENC_BIG_ENDIAN, &status);
8595
8596
0
  col_add_fstr(pinfo->cinfo, COL_INFO, "CWT-RSP %s ID %u on sub-band %u: %s",
8597
0
               val_to_str(pinfo->pool, op_code, cwt_op_code_vals, "Unknown Op Code (%u)"),
8598
0
               transaction_id, sub_band_id,
8599
0
               val_to_str(pinfo->pool, op_code, cwt_status_vals, "Unknown Status (%u)"));
8600
8601
0
  id = (transaction_id << 8) + sub_band_id;
8602
0
  tlv_tvb = dissect_multipart(tvb, pinfo, cwt_rsp_tree, data, MGT_CWT_RSP, id, 4);
8603
0
  if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8604
0
    dissect_cwt_tlv(tlv_tvb, pinfo, cwt_rsp_item, cwt_rsp_tree, 0, tvb_reported_length(tlv_tvb));
8605
0
  return tvb_captured_length(tvb);
8606
0
}
8607
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)
8610
0
{
8611
0
  proto_item *tlv_item;
8612
0
  proto_tree *tlv_tree;
8613
0
  uint32_t tlv_type;
8614
0
  int tlv_length, end = pos + length, i;
8615
8616
0
  while (pos + 1 < end)
8617
0
  {
8618
0
    tlv_type = tvb_get_uint8(tvb, pos);
8619
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
8620
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_ect_control_partial_service_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8621
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, ect_control_partial_service_tlv_vals, "Unknown TLV %u"));
8622
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8623
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_control_partial_service_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8624
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_control_partial_service_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8625
0
    pos += 2;
8626
8627
0
    switch (tlv_type)
8628
0
    {
8629
0
    case ECT_CONTROL_PARTIAL_SERVICE_DCID:
8630
0
      for (i = 0; i < tlv_length; ++i)
8631
0
        proto_tree_add_item(tlv_tree, hf_docsis_ect_control_partial_service_dcid, tvb, pos + i, 1, ENC_BIG_ENDIAN);
8632
0
      break;
8633
0
    case ECT_CONTROL_PARTIAL_SERVICE_UCID:
8634
0
      for (i = 0; i < tlv_length; ++i)
8635
0
        proto_tree_add_item(tlv_tree, hf_docsis_ect_control_partial_service_ucid, tvb, pos + i, 1, ENC_BIG_ENDIAN);
8636
0
      break;
8637
0
    default:
8638
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8639
0
      break;
8640
0
    }
8641
0
    pos += tlv_length;
8642
0
  }
8643
0
  if (pos != end)
8644
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8645
0
}
8646
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)
8649
0
{
8650
0
  proto_item *tlv_item;
8651
0
  proto_tree *tlv_tree;
8652
0
  uint32_t tlv_type;
8653
0
  int tlv_length, end = pos + length;
8654
8655
0
  uint32_t value;
8656
8657
0
  while (pos + 1 < end)
8658
0
  {
8659
0
    tlv_type = tvb_get_uint8(tvb, pos);
8660
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
8661
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_ect_control_method_bg_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8662
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, ect_control_method_bg_tlv_vals, "Unknown TLV %u"));
8663
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8664
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_bg_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8665
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_bg_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8666
0
    pos += 2;
8667
8668
0
    switch (tlv_type)
8669
0
    {
8670
0
    case ECT_CONTROL_METHOD_BG_DURATION:
8671
0
      if (tlv_length == 2) {
8672
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_method_bg_duration, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8673
0
        if (value < 1 || value > 1000)
8674
0
          expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Background Duration: %i", value);
8675
0
      }
8676
0
      else
8677
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8678
0
      break;
8679
0
    case ECT_CONTROL_METHOD_BG_PERIODICITY:
8680
0
      if (tlv_length == 1) {
8681
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_method_bg_periodicity, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8682
0
        if (value < 1 || value > 30)
8683
0
          expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Background Periodicity: %i", value);
8684
0
      }
8685
0
      else
8686
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8687
0
      break;
8688
0
    case ECT_CONTROL_METHOD_BG_EXPIRATION_TIME:
8689
0
      if (tlv_length == 1) {
8690
0
        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
0
        if (value < 1 || value > 255)
8692
0
          expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Background Expiration Time: %i", value);
8693
0
      }
8694
0
      else
8695
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8696
0
      break;
8697
0
    case ECT_CONTROL_METHOD_BG_START_TIME:
8698
0
      if (tlv_length == 4)
8699
0
        proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_bg_start_time, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8700
0
      else
8701
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8702
0
      break;
8703
0
    default:
8704
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8705
0
      break;
8706
0
    }
8707
0
    pos += tlv_length;
8708
0
  }
8709
0
  if (pos != end)
8710
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8711
0
}
8712
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)
8715
0
{
8716
0
  proto_item *tlv_item;
8717
0
  proto_tree *tlv_tree;
8718
0
  uint32_t tlv_type;
8719
0
  int tlv_length, end = pos + length;
8720
8721
0
  uint32_t value;
8722
8723
0
  while (pos + 1 < end)
8724
0
  {
8725
0
    tlv_type = tvb_get_uint8(tvb, pos);
8726
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
8727
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_ect_control_method_fg_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8728
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, ect_control_method_fg_tlv_vals, "Unknown TLV %u"));
8729
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8730
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_fg_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8731
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_fg_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8732
0
    pos += 2;
8733
8734
0
    switch (tlv_type)
8735
0
    {
8736
0
    case ECT_CONTROL_METHOD_FG_DURATION:
8737
0
      if (tlv_length == 1) {
8738
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_method_fg_duration, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8739
0
        if (value < 1 || value > 128)
8740
0
          expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Foreground Duration: %i", value);
8741
0
      }
8742
0
      else
8743
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8744
0
      break;
8745
0
    case ECT_CONTROL_METHOD_FG_PERIODICITY:
8746
0
      if (tlv_length == 1) {
8747
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_method_fg_periodicity, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8748
0
        if (value < 1 || value > 30)
8749
0
          expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Foreground Periodicity: %i", value);
8750
0
      }
8751
0
      else
8752
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8753
0
      break;
8754
0
    case ECT_CONTROL_METHOD_FG_EXPIRATION_TIME:
8755
0
      if (tlv_length == 1) {
8756
0
        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
0
        if (value < 1 || value > 255)
8758
0
          expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid ECT Foreground Expiration Time: %i", value);
8759
0
      }
8760
0
      else
8761
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8762
0
      break;
8763
0
    case ECT_CONTROL_METHOD_FG_DS_ZBL:
8764
0
      if (tlv_length == 1)
8765
0
        proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_fg_ds_zbl, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8766
0
      else
8767
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8768
0
      break;
8769
0
    default:
8770
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8771
0
      break;
8772
0
    }
8773
0
    pos += tlv_length;
8774
0
  }
8775
0
  if (pos != end)
8776
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8777
0
}
8778
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)
8781
0
{
8782
0
  proto_item *tlv_item;
8783
0
  proto_tree *tlv_tree;
8784
0
  uint32_t tlv_type;
8785
0
  int tlv_length, end = pos + length;
8786
8787
0
  while (pos + 1 < end)
8788
0
  {
8789
0
    tlv_type = tvb_get_uint8(tvb, pos);
8790
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
8791
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_ect_control_method_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8792
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, ect_control_method_tlv_vals, "Unknown TLV %u"));
8793
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8794
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8795
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_control_method_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8796
0
    pos += 2;
8797
8798
0
    switch (tlv_type)
8799
0
    {
8800
0
    case ECT_CONTROL_METHOD_FG:
8801
0
      dissect_ect_control_method_fg_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8802
0
      break;
8803
0
    case ECT_CONTROL_METHOD_BG:
8804
0
      dissect_ect_control_method_bg_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8805
0
      break;
8806
0
    default:
8807
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8808
0
      break;
8809
0
    }
8810
0
    pos += tlv_length;
8811
0
  }
8812
0
  if (pos != end)
8813
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8814
0
}
8815
8816
static void
8817
dissect_ect_control_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8818
0
{
8819
0
  proto_item *tlv_item;
8820
0
  proto_tree *tlv_tree;
8821
0
  uint32_t tlv_type;
8822
0
  int tlv_length, end = pos + length, i;
8823
8824
0
  uint32_t value;
8825
8826
0
  while (pos + 1 < end)
8827
0
  {
8828
0
    tlv_type = tvb_get_uint8(tvb, pos);
8829
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
8830
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_ect_control_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8831
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, ect_control_tlv_vals, "Unknown TLV %u"));
8832
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8833
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_control_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8834
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_control_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8835
0
    pos += 2;
8836
8837
0
    switch (tlv_type)
8838
0
    {
8839
0
    case ECT_CONTROL_SUBBAND_DIRECTION:
8840
0
      for (i = 0; i < tlv_length; ++i)
8841
0
        proto_tree_add_item(tlv_tree, hf_docsis_ect_control_subband_direction, tvb, pos + i, 1, ENC_BIG_ENDIAN);
8842
0
      break;
8843
0
    case ECT_CONTROL_STATUS:
8844
0
      if (tlv_length == 1)
8845
0
        proto_tree_add_item(tlv_tree, hf_docsis_ect_control_status, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8846
0
      else
8847
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8848
0
      break;
8849
0
    case ECT_CONTROL_METHOD:
8850
0
      dissect_ect_control_method_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8851
0
      break;
8852
0
    case ECT_CONTROL_PARTIAL_SERVICE:
8853
0
      dissect_ect_control_partial_service_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8854
0
      break;
8855
0
    case ECT_CONTROL_DEFERRAL_TIME:
8856
0
      if (tlv_length == 1)
8857
0
        proto_tree_add_item(tlv_tree, hf_docsis_ect_control_deferral_time, tvb, pos, tlv_length, ENC_BIG_ENDIAN);
8858
0
      else
8859
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8860
0
      break;
8861
0
    case ECT_CONTROL_RXMER_DURATION:
8862
0
      if (tlv_length == 1) {
8863
0
        proto_tree_add_item_ret_uint(tlv_tree, hf_docsis_ect_control_rxmer_duration, tvb, pos, tlv_length, ENC_BIG_ENDIAN, &value);
8864
0
        if (value < 1 || value > 128)
8865
0
          expert_add_info_format(pinfo, tlv_item, &ei_docsis_ect_control_out_of_range, "Invalid RxMER Duration: %i symbols", value);
8866
0
      }
8867
0
      else
8868
0
        expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", tlv_length);
8869
0
      break;
8870
0
    default:
8871
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", tlv_type);
8872
0
      break;
8873
0
    }
8874
0
    pos += tlv_length;
8875
0
  }
8876
0
  if (pos != end)
8877
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8878
0
}
8879
8880
static void
8881
dissect_ect_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_item *item, proto_tree *tree, int pos, int length)
8882
0
{
8883
0
  proto_item *tlv_item;
8884
0
  proto_tree *tlv_tree;
8885
0
  uint32_t tlv_type;
8886
0
  int tlv_length, end = pos + length;
8887
8888
0
  while (pos + 1 < end)
8889
0
  {
8890
0
    tlv_type = tvb_get_uint8(tvb, pos);
8891
0
    tlv_length = tvb_get_uint8(tvb, pos + 1);
8892
0
    tlv_item = proto_tree_add_item(tree, hf_docsis_ect_tlv, tvb, pos, tlv_length + 2, ENC_NA);
8893
0
    proto_item_set_text(tlv_item, "%s", val_to_str(pinfo->pool, tlv_type, ect_tlv_vals, "Unknown TLV %u"));
8894
0
    tlv_tree = proto_item_add_subtree(tlv_item, ett_docsis_ect_tlv);
8895
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_tlv_type, tvb, pos, 1, ENC_BIG_ENDIAN);
8896
0
    proto_tree_add_item(tlv_tree, hf_docsis_ect_tlv_length, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
8897
0
    pos += 2;
8898
8899
0
    switch (tlv_type)
8900
0
    {
8901
0
    case ECT_CONTROL:
8902
0
      dissect_ect_control_tlv(tvb, pinfo, tlv_item, tlv_tree, pos, tlv_length);
8903
0
      break;
8904
0
    default:
8905
0
      expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV type: %u", tlv_type);
8906
0
      break;
8907
0
    }
8908
0
    pos += tlv_length;
8909
0
  }
8910
0
  if (pos != end)
8911
0
    expert_add_info_format(pinfo, item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %i", length);
8912
0
}
8913
8914
static int
8915
dissect_ect_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8916
0
{
8917
0
  proto_item *ect_req_item;
8918
0
  proto_tree *ect_req_tree;
8919
0
  tvbuff_t *tlv_tvb = NULL;
8920
8921
0
  uint32_t transaction_id;
8922
8923
0
  ect_req_item = proto_tree_add_item(tree, proto_docsis_ect_req, tvb, 0, -1, ENC_NA);
8924
0
  ect_req_tree = proto_item_add_subtree(ect_req_item, ett_docsis_ect_req);
8925
0
  proto_tree_add_item_ret_uint(ect_req_tree, hf_docsis_ect_trans_id, tvb, 0, 2, ENC_BIG_ENDIAN, &transaction_id);
8926
8927
0
  col_add_fstr(pinfo->cinfo, COL_INFO, "ECT-REQ ID %u", transaction_id);
8928
8929
0
  tlv_tvb = dissect_multipart(tvb, pinfo, ect_req_tree, data, MGT_ECT_REQ, transaction_id, 2);
8930
0
  if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8931
0
    dissect_ect_tlv(tlv_tvb, pinfo, ect_req_item, ect_req_tree, 0, tvb_reported_length(tlv_tvb));
8932
0
  return tvb_captured_length(tvb);
8933
0
}
8934
8935
static int
8936
dissect_ect_rsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8937
0
{
8938
0
  proto_item *ect_rsp_item;
8939
0
  proto_tree *ect_rsp_tree;
8940
0
  tvbuff_t *tlv_tvb = NULL;
8941
8942
0
  uint32_t transaction_id, rsp_code;
8943
8944
0
  ect_rsp_item = proto_tree_add_item(tree, proto_docsis_ect_rsp, tvb, 0, -1, ENC_NA);
8945
0
  ect_rsp_tree = proto_item_add_subtree(ect_rsp_item, ett_docsis_ect_rsp);
8946
0
  proto_tree_add_item_ret_uint(ect_rsp_tree, hf_docsis_ect_trans_id, tvb, 0, 2, ENC_BIG_ENDIAN, &transaction_id);
8947
0
  proto_tree_add_item_ret_uint(ect_rsp_tree, hf_docsis_ect_rsp_code, tvb, 2, 1, ENC_BIG_ENDIAN, &rsp_code);
8948
8949
0
  col_add_fstr(pinfo->cinfo, COL_INFO, "ECT-RSP ID %u: %s",
8950
0
               transaction_id,
8951
0
               val_to_str(pinfo->pool, rsp_code, ect_rsp_code_vals, "Unknown Response Code (%u)"));
8952
8953
0
  tlv_tvb = dissect_multipart(tvb, pinfo, ect_rsp_tree, data, MGT_ECT_RSP, transaction_id, 3);
8954
0
  if (tlv_tvb != NULL && tvb_captured_length(tlv_tvb))
8955
0
    dissect_ect_tlv(tlv_tvb, pinfo, ect_rsp_item, ect_rsp_tree, 0, tvb_reported_length(tlv_tvb));
8956
0
  return tvb_captured_length(tvb);
8957
0
}
8958
8959
static int
8960
dissect_ext_rngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data  _U_)
8961
0
{
8962
0
  proto_item *it;
8963
0
  proto_tree *ext_rngreq_tree;
8964
8965
0
  uint32_t sid, downstream_channel_id, upstream_channel_id;
8966
8967
0
  it = proto_tree_add_item(tree, proto_docsis_ext_rngreq, tvb, 0, -1, ENC_NA);
8968
0
  ext_rngreq_tree = proto_item_add_subtree (it, ett_docsis_ext_rngreq);
8969
0
  proto_tree_add_item_ret_uint (ext_rngreq_tree, hf_docsis_rngreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
8970
0
  proto_tree_add_item_ret_uint (ext_rngreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
8971
0
  proto_tree_add_item_ret_uint (ext_rngreq_tree, hf_docsis_mgt_upstream_chid, tvb, 3, 1, ENC_BIG_ENDIAN, &upstream_channel_id);
8972
8973
0
  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);
8974
8975
0
  return tvb_captured_length(tvb);
8976
0
}
8977
8978
static int
8979
dissect_dpr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8980
0
{
8981
0
  proto_item *dpr_item, *item;
8982
0
  proto_tree *dpr_tree;
8983
8984
0
  uint32_t dcid, tg_id, duration;
8985
8986
0
  dpr_item = proto_tree_add_item(tree, proto_docsis_dpr, tvb, 0, -1, ENC_NA);
8987
0
  dpr_tree = proto_item_add_subtree(dpr_item, ett_docsis_dpr);
8988
0
  proto_tree_add_item(dpr_tree, hf_docsis_dpr_carrier, tvb, 0, 1, ENC_BIG_ENDIAN);
8989
0
  proto_tree_add_item_ret_uint(dpr_tree, hf_docsis_dpr_dcid, tvb, 1, 1, ENC_BIG_ENDIAN, &dcid);
8990
0
  proto_tree_add_item_ret_uint(dpr_tree, hf_docsis_dpr_tg_id, tvb, 2, 1, ENC_BIG_ENDIAN, &tg_id);
8991
0
  proto_tree_add_item(dpr_tree, hf_docsis_dpr_reserved, tvb, 3, 1, ENC_BIG_ENDIAN);
8992
0
  proto_tree_add_item(dpr_tree, hf_docsis_dpr_start_time, tvb, 4, 4, ENC_BIG_ENDIAN);
8993
0
  item = proto_tree_add_item_ret_uint(dpr_tree, hf_docsis_dpr_duration, tvb, 8, 4, ENC_BIG_ENDIAN, &duration);
8994
0
  if ((duration & 0xff000000) > 0)
8995
0
    expert_add_info_format(pinfo, item, &ei_docsis_dpr_out_of_range, "Invalid DPR Duration: %u", duration);
8996
8997
0
  col_add_fstr(pinfo->cinfo, COL_INFO, "DPR DCID %u on TG ID %u", dcid, tg_id);
8998
8999
0
  return tvb_captured_length(tvb);
9000
0
}
9001
9002
static int
9003
dissect_macmgmt (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
9004
0
{
9005
0
  uint32_t type, version, dsap, ssap, msg_len;
9006
0
  proto_item *mgt_hdr_it;
9007
0
  proto_tree *mgt_hdr_tree;
9008
0
  tvbuff_t *payload_tvb;
9009
0
  uint8_t multipart;
9010
9011
0
  col_set_str (pinfo->cinfo, COL_PROTOCOL, "DOCSIS MGMT");
9012
9013
0
  col_clear(pinfo->cinfo, COL_INFO);
9014
9015
0
  set_address_tvb (&pinfo->dl_src, AT_ETHER, 6, tvb, 6);
9016
0
  copy_address_shallow(&pinfo->src, &pinfo->dl_src);
9017
0
  set_address_tvb (&pinfo->dl_dst, AT_ETHER, 6, tvb, 0);
9018
0
  copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
9019
9020
0
  static int * const multipart_field[] = {
9021
0
    &hf_docsis_mgt_multipart_number_of_fragments,
9022
0
    &hf_docsis_mgt_multipart_fragment_sequence_number,
9023
0
    NULL
9024
0
  };
9025
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
0
  version = tvb_get_uint8 (tvb, 17);
9028
0
  type = tvb_get_uint8 (tvb, 18);
9029
0
  dsap = tvb_get_uint8 (tvb, 14);
9030
0
  ssap = tvb_get_uint8 (tvb, 15);
9031
9032
0
  mgt_hdr_it = proto_tree_add_item (tree, proto_docsis_mgmt, tvb, 0, 20, ENC_NA);
9033
0
  mgt_hdr_tree = proto_item_add_subtree (mgt_hdr_it, ett_docsis_mgmt);
9034
0
  proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_dst_addr, tvb, 0, 6, ENC_NA);
9035
0
  proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_src_addr, tvb, 6, 6, ENC_NA);
9036
0
  proto_tree_add_item_ret_uint (mgt_hdr_tree, hf_docsis_mgt_msg_len, tvb, 12, 2, ENC_BIG_ENDIAN, &msg_len);
9037
9038
0
  if ( ((type == MGT_RNG_REQ) || type == MGT_B_INIT_RNG_REQ)
9039
0
       && version == 5
9040
0
       && !(ssap==0 && dsap == 0) ) {
9041
    //RNG_REQ or BONDED_INIT_RNG_REQ with upstream transmit power reporting, sent to 3.1 CMTS
9042
0
    proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_31_transmit_power, tvb, 14, 2, ENC_BIG_ENDIAN);
9043
0
  } else if (type == MGT_EXT_RNG_REQ) {
9044
    //EXT_RNG_REQ with upstream transmit power reporting, sent to 4.0 CMTS
9045
0
    proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_40_transmit_power, tvb, 14, 2, ENC_BIG_ENDIAN);
9046
0
  } else if ( ((type == MGT_RNG_REQ && version == 1) || (type == MGT_B_INIT_RNG_REQ && version == 4))
9047
0
       && ssap != 0 ) {
9048
    //RNG_REQ or BONDED_INIT_RNG_REQ with upstream transmit power reporting, sent to 3.0 CMTS
9049
0
    proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_dsap, tvb, 14, 1, ENC_BIG_ENDIAN);
9050
0
    proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_30_transmit_power, tvb, 15, 1, ENC_BIG_ENDIAN);
9051
0
  } else {
9052
0
    proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_dsap, tvb, 14, 1, ENC_BIG_ENDIAN);
9053
0
    proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_ssap, tvb, 15, 1, ENC_BIG_ENDIAN);
9054
0
  }
9055
9056
0
  proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_control, tvb, 16, 1, ENC_BIG_ENDIAN);
9057
0
  proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_version, tvb, 17, 1, ENC_BIG_ENDIAN);
9058
0
  proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_type, tvb, 18, 1, ENC_BIG_ENDIAN);
9059
9060
0
  p_add_proto_data(pinfo->pool, pinfo, proto_docsis_mgmt, KEY_MGMT_VERSION, GUINT_TO_POINTER(version));
9061
9062
0
  if (version < 5) {
9063
0
    proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_rsvd, tvb, 19, 1, ENC_BIG_ENDIAN);
9064
0
  } else {
9065
0
    proto_tree_add_bitmask(mgt_hdr_tree, tvb, 19, hf_docsis_mgt_multipart, ett_sub_tlv, multipart_field, ENC_BIG_ENDIAN);
9066
0
    multipart = tvb_get_uint8 (tvb, 19);
9067
0
    p_add_proto_data(pinfo->pool, pinfo, proto_docsis_mgmt, KEY_MGMT_MULTIPART, GUINT_TO_POINTER(multipart));
9068
0
  }
9069
9070
  /* Code to Call subdissector */
9071
  /* sub-dissectors are based on the type field */
9072
0
  payload_tvb = tvb_new_subset_length (tvb, 20, msg_len - 6);
9073
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
0
  if (type == MGT_MAP) {
9076
0
    if (!dissector_try_uint(docsis_mgmt_dissector_table, 256*version + type, payload_tvb, pinfo, tree)) {
9077
0
      call_data_dissector(payload_tvb, pinfo, tree);
9078
0
    }
9079
0
  } else {
9080
0
    if (!dissector_try_uint(docsis_mgmt_dissector_table, type, payload_tvb, pinfo, tree)) {
9081
0
      call_data_dissector(payload_tvb, pinfo, tree);
9082
0
    }
9083
0
  }
9084
9085
0
  return tvb_captured_length(tvb);
9086
0
}
9087
9088
/* Register the protocol with Wireshark */
9089
void
9090
proto_register_docsis_mgmt (void)
9091
15
{
9092
15
  static hf_register_info hf[] = {
9093
      /* Sync Message */
9094
15
    {&hf_docsis_sync_cmts_timestamp,
9095
15
     {"CMTS Timestamp", "docsis_sync.cmts_timestamp",
9096
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
9097
15
      "Sync CMTS Timestamp", HFILL}
9098
15
    },
9099
    /* UCD */
9100
15
    {&hf_docsis_ucd_config_ch_cnt,
9101
15
     {"Config Change Count", "docsis_ucd.confcngcnt",
9102
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9103
15
      "Configuration Change Count", HFILL}
9104
15
    },
9105
15
    {&hf_docsis_ucd_mini_slot_size,
9106
15
     {"Mini Slot Size (6.25us TimeTicks)", "docsis_ucd.mslotsize",
9107
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9108
15
      NULL, HFILL}
9109
15
    },
9110
15
    {&hf_docsis_ucd_type,
9111
15
     {"Type", "docsis_ucd.type",
9112
15
      FT_UINT8, BASE_DEC, VALS(channel_tlv_vals), 0x0,
9113
15
      "Channel TLV type", HFILL}
9114
15
    },
9115
15
    {&hf_docsis_ucd_length,
9116
15
     {"Length", "docsis_ucd.length",
9117
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9118
15
      "Channel TLV length", HFILL}
9119
15
    },
9120
15
    {&hf_docsis_ucd_burst_type,
9121
15
     {"Type", "docsis_ucd.burst.tlvtype",
9122
15
      FT_UINT8, BASE_DEC, VALS(burst_tlv_vals), 0x0,
9123
15
      "Burst TLV type", HFILL}
9124
15
    },
9125
15
    {&hf_docsis_ucd_burst_length,
9126
15
     {"Length", "docsis_ucd.burst.tlvlen",
9127
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9128
15
      "Burst TLV length", HFILL}
9129
15
    },
9130
15
    {&hf_docsis_ucd_symbol_rate,
9131
15
     {"Symbol Rate (ksym/sec)", "docsis_ucd.symrate",
9132
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9133
15
      NULL, HFILL}
9134
15
    },
9135
15
    {&hf_docsis_ucd_frequency,
9136
15
     {"Frequency (Hz)", "docsis_ucd.freq",
9137
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
9138
15
      "Upstream Center Frequency", HFILL}
9139
15
    },
9140
15
    {&hf_docsis_ucd_preamble_pat,
9141
15
     {"Preamble Pattern", "docsis_ucd.preamble",
9142
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9143
15
      "Preamble Superstring", HFILL}
9144
15
    },
9145
15
    {&hf_docsis_ucd_ext_preamble_pat,
9146
15
     {"Extended Preamble Pattern", "docsis_ucd.extpreamble",
9147
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9148
15
      "Extended Preamble Superstring", HFILL}
9149
15
    },
9150
15
    {&hf_docsis_ucd_scdma_mode_enabled,
9151
15
     {"S-CDMA Mode Enabled", "docsis_ucd.scdma",
9152
15
      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9153
15
      NULL, HFILL}
9154
15
    },
9155
15
    {&hf_docsis_ucd_scdma_spreading_interval,
9156
15
     {"SCDMA Spreading Interval", "docsis_ucd.scdmaspreadinginterval",
9157
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9158
15
      NULL, HFILL}
9159
15
    },
9160
15
    {&hf_docsis_ucd_scdma_codes_per_mini_slot,
9161
15
     {"SCDMA Codes per mini slot", "docsis_ucd.scdmacodesperminislot",
9162
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9163
15
      NULL, HFILL}
9164
15
    },
9165
15
    {&hf_docsis_ucd_scdma_active_codes,
9166
15
     {"SCDMA Active Codes", "docsis_ucd.scdmaactivecodes",
9167
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9168
15
      NULL, HFILL}
9169
15
    },
9170
15
    {&hf_docsis_ucd_scdma_code_hopping_seed,
9171
15
     {"SCDMA Code Hopping Seed", "docsis_ucd.scdmacodehoppingseed",
9172
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9173
15
      NULL, HFILL}
9174
15
    },
9175
15
    {&hf_docsis_ucd_scdma_us_ratio_num,
9176
15
     {"SCDMA US Ratio Numerator", "docsis_ucd.scdmausrationum",
9177
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9178
15
      NULL, HFILL}
9179
15
    },
9180
15
    {&hf_docsis_ucd_scdma_us_ratio_denom,
9181
15
     {"SCDMA US Ratio Denominator", "docsis_ucd.scdmausratiodenom",
9182
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9183
15
      NULL, HFILL}
9184
15
    },
9185
15
    {&hf_docsis_ucd_scdma_timestamp_snapshot,
9186
15
     {"SCDMA Timestamp Snapshot", "docsis_ucd.scdmatimestamp",
9187
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9188
15
      NULL, HFILL}
9189
15
    },
9190
15
    {&hf_docsis_ucd_maintain_power_spectral_density,
9191
15
     {"Maintain Power Spectral Density", "docsis_ucd.maintpower",
9192
15
      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9193
15
      NULL, HFILL}
9194
15
    },
9195
15
    {&hf_docsis_ucd_ranging_required,
9196
15
     {"Ranging Required", "docsis_ucd.rangingreq",
9197
15
      FT_UINT8, BASE_DEC, VALS (ranging_req_vals), 0x0,
9198
15
      NULL, HFILL}
9199
15
    },
9200
15
    {&hf_docsis_ucd_max_scheduled_codes,
9201
15
     {"S-CDMA Max Scheduled Codes", "docsis_ucd.scdmamaxcodes",
9202
15
      FT_UINT8, BASE_DEC, VALS (max_scheduled_codes_vals), 0x0,
9203
15
      NULL, HFILL}
9204
15
    },
9205
15
    {&hf_docsis_ucd_rnghoff_cm,
9206
15
     {"Ranging Hold-Off (CM)","docsis_ucd.rnghoffcm",
9207
15
      FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x1,
9208
15
      NULL, HFILL}
9209
15
    },
9210
15
    {&hf_docsis_ucd_rnghoff_erouter,
9211
15
     {"Ranging Hold-Off (eRouter)",
9212
15
      "docsis_ucd.rnghofferouter",
9213
15
      FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x2,
9214
15
      NULL, HFILL}
9215
15
    },
9216
15
    {&hf_docsis_ucd_rnghoff_emta,
9217
15
     {"Ranging Hold-Off (eMTA or EDVA)",
9218
15
      "docsis_ucd.rnghoffemta",
9219
15
      FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x4,
9220
15
      NULL, HFILL}
9221
15
    },
9222
15
    {&hf_docsis_ucd_rnghoff_estb,
9223
15
     {"Ranging Hold-Off (DSG/eSTB)",
9224
15
      "docsis_ucd.rnghoffestb",
9225
15
      FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x8,
9226
15
      NULL, HFILL}
9227
15
    },
9228
15
    {&hf_docsis_ucd_rnghoff_rsvd,
9229
15
     {"Reserved",
9230
15
      "docsis_ucd.rnghoffrsvd",
9231
15
      FT_UINT32, BASE_HEX, NULL, 0xFFF0,
9232
15
      NULL, HFILL}
9233
15
    },
9234
15
    {&hf_docsis_ucd_rnghoff_id_ext,
9235
15
     {"CM Ranging Class ID Extension",
9236
15
      "docsis_ucd.rngidext",
9237
15
      FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
9238
15
      NULL, HFILL}
9239
15
    },
9240
15
    {&hf_docsis_ucd_chan_class_id_cm,
9241
15
     {"Channel Class ID (CM)","docsis_ucd.classidcm",
9242
15
      FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x1,
9243
15
      NULL, HFILL}
9244
15
    },
9245
15
    {&hf_docsis_ucd_chan_class_id_erouter,
9246
15
     {"Channel Class ID (eRouter)",
9247
15
      "docsis_ucd.classiderouter",
9248
15
      FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x2,
9249
15
      NULL, HFILL}
9250
15
    },
9251
15
    {&hf_docsis_ucd_chan_class_id_emta,
9252
15
     {"Channel Class ID (eMTA or EDVA)",
9253
15
      "docsis_ucd.classidemta",
9254
15
      FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x4,
9255
15
      NULL, HFILL}
9256
15
    },
9257
15
    {&hf_docsis_ucd_chan_class_id_estb,
9258
15
     {"Channel Class ID (DSG/eSTB)",
9259
15
      "docsis_ucd.classidestb",
9260
15
      FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x8,
9261
15
      NULL, HFILL}
9262
15
    },
9263
15
    {&hf_docsis_ucd_chan_class_id_rsvd,
9264
15
     {"Reserved",
9265
15
      "docsis_ucd.classidrsvd",
9266
15
      FT_UINT32, BASE_HEX, NULL, 0xFFF0,
9267
15
      NULL, HFILL}
9268
15
    },
9269
15
    {&hf_docsis_ucd_chan_class_id_id_ext,
9270
15
     {"CM Ranging Class ID Extension",
9271
15
      "docsis_ucd.classidext",
9272
15
      FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
9273
15
      NULL, HFILL}
9274
15
    },
9275
15
    {&hf_docsis_ucd_change_ind_bitmask_subc_excl_band,
9276
15
     {"UCD Change Indicator Bitmask: Subcarrier Exclusion Band TLV", "docsis_ucd.burst.ucd_change_ind_bitmask_subc_excl_band",
9277
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x01,
9278
15
      NULL, HFILL}
9279
15
    },
9280
15
    {&hf_docsis_ucd_change_ind_bitmask_unused_subc,
9281
15
     {"UCD Change Indicator Bitmask: Unused Subcarrier Specification TLV", "docsis_ucd.burst.ucd_change_ind_bitmask_unused_subc",
9282
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x02,
9283
15
      NULL, HFILL}
9284
15
    },
9285
15
    {&hf_docsis_ucd_change_ind_bitmask_other_subc,
9286
15
     {"UCD Change Indicator Bitmask: Other than Subcarrier Exclusion Band and Unused Subcarrier Specification TLV", "docsis_ucd.burst.ucd_change_ind_bitmask_other_subc",
9287
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x04,
9288
15
      NULL, HFILL}
9289
15
    },
9290
15
    {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc5,
9291
15
     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC5", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc5",
9292
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x08,
9293
15
      NULL, HFILL}
9294
15
    },
9295
15
    {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc6,
9296
15
     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC6", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc6",
9297
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x10,
9298
15
      NULL, HFILL}
9299
15
    },
9300
15
    {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc9,
9301
15
     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC9", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc9",
9302
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x20,
9303
15
      NULL, HFILL}
9304
15
    },
9305
15
    {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc10,
9306
15
     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC10", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc10",
9307
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x40,
9308
15
      NULL, HFILL}
9309
15
    },
9310
15
    {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc11,
9311
15
     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC11", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc11",
9312
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x80,
9313
15
      NULL, HFILL}
9314
15
    },
9315
15
    {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc12,
9316
15
     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC12", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc12",
9317
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x01,
9318
15
      NULL, HFILL}
9319
15
    },
9320
15
    {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc13,
9321
15
     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC13", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc13",
9322
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x02,
9323
15
      NULL, HFILL}
9324
15
    },
9325
15
    {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc3_or_4,
9326
15
     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC3 or IUC4", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc3_or_4",
9327
15
      FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x04,
9328
15
      NULL, HFILL}
9329
15
    },
9330
15
    {&hf_docsis_ucd_change_ind_bitmask_reserved,
9331
15
     {"UCD Change Indicator Bitmask: Reserved", "docsis_ucd.burst.ucd_change_ind_bitmask_reserved",
9332
15
      FT_UINT8, BASE_HEX, NULL, 0xF8,
9333
15
      NULL, HFILL}
9334
15
    },
9335
15
    {&hf_docsis_ucd_ofdma_timestamp_snapshot,
9336
15
     {"OFDMA Timestamp Snapshot", "docsis_ucd.ofdma_timestamp_snapshot",
9337
15
      FT_BYTES, BASE_NONE, NULL, 0x00,
9338
15
      NULL, HFILL}
9339
15
    },
9340
15
    {&hf_docsis_ucd_ofdma_timestamp_snapshot_reserved,
9341
15
     {"OFDMA Timestamp Snapshot - Reserved", "docsis_ucd.ofdma_timestamp_snapshot_reserved",
9342
15
      FT_UINT40, BASE_HEX, NULL, 0xF000000000,
9343
15
      NULL, HFILL}
9344
15
    },
9345
15
    {&hf_docsis_ucd_ofdma_timestamp_snapshot_d30timestamp,
9346
15
     {"OFDMA Timestamp Snapshot - D3.0 timestamp", "docsis_ucd.ofdma_timestamp_snapshot_d30timestamp",
9347
15
      FT_UINT40, BASE_HEX, NULL, 0x0FFFFFFFF0,
9348
15
      NULL, HFILL}
9349
15
    },
9350
15
    {&hf_docsis_ucd_ofdma_timestamp_snapshot_4msbits_of_div20,
9351
15
     {"OFDMA Timestamp Snapshot - 4 Most Significant bits of div20 field", "docsis_ucd.ofdma_timestamp_snapshot_4msbits_of_div20",
9352
15
      FT_UINT40, BASE_HEX, NULL, 0x000000000F,
9353
15
      NULL, HFILL}
9354
15
    },
9355
15
    {&hf_docsis_ucd_ofdma_timestamp_snapshot_minislot_count,
9356
15
     {"OFDMA Timestamp Snapshot - Minislot Count", "docsis_ucd.ofdma_timestamp_snapshot_minislot_count",
9357
15
      FT_UINT32, BASE_HEX, NULL, 0x0,
9358
15
      NULL, HFILL}
9359
15
    },
9360
15
    {&hf_docsis_ucd_ofdma_cyclic_prefix_size,
9361
15
     {"OFDMA Cyclic Prefix Size", "docsis_ucd.ofdma_cyclic_prefix_size",
9362
15
      FT_UINT8, BASE_DEC, VALS(ofdma_cyclic_prefix_size_vals), 0x00,
9363
15
      NULL, HFILL}
9364
15
    },
9365
15
    {&hf_docsis_ucd_ofdma_rolloff_period_size,
9366
15
     {"OFDMA Rolloff Period Size", "docsis_ucd.ofdma_rolloff_period_size",
9367
15
      FT_UINT8, BASE_DEC, VALS(ofdma_rolloff_period_size_vals), 0x00,
9368
15
      NULL, HFILL}
9369
15
    },
9370
15
    {&hf_docsis_ucd_subc_spacing,
9371
15
     {"Subcarrier Spacing", "docsis_ucd.subc_spacing",
9372
15
      FT_UINT8, BASE_DEC, VALS(subc_spacing_vals), 0x00,
9373
15
      NULL, HFILL}
9374
15
    },
9375
15
    {&hf_docsis_ucd_cent_freq_subc0,
9376
15
     {"Center Frequency of Subcarrier 0", "docsis_ucd.cent_freq_subc0",
9377
15
      FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_hz), 0x00,
9378
15
      NULL, HFILL}
9379
15
    },
9380
15
    {&hf_docsis_ucd_subcarrier_range,
9381
15
     {"Subcarrier range", "docsis_ucd.subc_range",
9382
15
      FT_UINT32, BASE_CUSTOM, CF_FUNC(subc_assign_range), 0x00,
9383
15
      NULL, HFILL}
9384
15
    },
9385
15
    {&hf_docsis_ucd_symb_ofdma_frame,
9386
15
     {"Symbols in OFDMA frame", "docsis_ucd.symb_ofdma_frame",
9387
15
      FT_UINT8, BASE_DEC, NULL, 0x00,
9388
15
      NULL, HFILL}
9389
15
    },
9390
15
    {&hf_docsis_ucd_rand_seed,
9391
15
     {"Randomization Seed", "docsis_ucd.rand_seed",
9392
15
      FT_BYTES, BASE_NONE, NULL, 0x00,
9393
15
      NULL, HFILL}
9394
15
    },
9395
15
    {&hf_docsis_ucd_extended_us_channel,
9396
15
     {"Extended Upstream Channel", "docsis_ucd.extended_us_channel",
9397
15
      FT_UINT8, BASE_DEC, VALS (extended_us_channel_vals), 0x00,
9398
15
      NULL, HFILL}
9399
15
    },
9400
15
    {&hf_docsis_ucd_iuc,
9401
15
     {"Interval Usage Code", "docsis_ucd.iuc",
9402
15
      FT_UINT8, BASE_DEC, VALS (iuc_vals), 0x0,
9403
15
      NULL, HFILL}
9404
15
    },
9405
15
    {&hf_docsis_burst_mod_type,
9406
15
     {"Modulation Type", "docsis_ucd.burst.modtype",
9407
15
      FT_UINT8, BASE_DEC, VALS (mod_vals), 0x0,
9408
15
      NULL, HFILL}
9409
15
    },
9410
15
    {&hf_docsis_burst_diff_encoding,
9411
15
     {"Differential Encoding", "docsis_ucd.burst.diffenc",
9412
15
      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9413
15
      NULL, HFILL}
9414
15
    },
9415
15
    {&hf_docsis_burst_preamble_len,
9416
15
     {"Preamble Length (Bits)", "docsis_ucd.burst.preamble_len",
9417
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
9418
15
      NULL, HFILL}
9419
15
    },
9420
15
    {&hf_docsis_burst_preamble_val_off,
9421
15
     {"Preamble Offset (Bits)", "docsis_ucd.burst.preamble_off",
9422
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
9423
15
      NULL, HFILL}
9424
15
    },
9425
15
    {&hf_docsis_burst_fec,
9426
15
     {"FEC (T)", "docsis_ucd.burst.fec",
9427
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9428
15
      "FEC (T) Codeword Parity Bits = 2^T", HFILL}
9429
15
    },
9430
15
    {&hf_docsis_burst_fec_codeword,
9431
15
     {"FEC Codeword Info bytes (k)", "docsis_ucd.burst.fec_codeword",
9432
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9433
15
      NULL, HFILL}
9434
15
    },
9435
15
    {&hf_docsis_burst_scrambler_seed,
9436
15
     {"Scrambler Seed", "docsis_ucd.burst.scrambler_seed",
9437
15
      FT_UINT16, BASE_HEX, NULL, 0x0,
9438
15
      "Burst Descriptor", HFILL}
9439
15
    },
9440
15
    {&hf_docsis_burst_max_burst,
9441
15
     {"Max Burst Size (Minislots)", "docsis_ucd.burst.maxburst",
9442
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9443
15
      NULL, HFILL}
9444
15
    },
9445
15
    {&hf_docsis_burst_guard_time,
9446
15
     {"Guard Time Size (Symbol Times)", "docsis_ucd.burst.guardtime",
9447
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9448
15
      NULL, HFILL}
9449
15
    },
9450
15
    {&hf_docsis_burst_last_cw_len,
9451
15
     {"Last Codeword Length", "docsis_ucd.burst.last_cw_len",
9452
15
      FT_UINT8, BASE_DEC, VALS (last_cw_len_vals), 0x0,
9453
15
      NULL, HFILL}
9454
15
    },
9455
15
    {&hf_docsis_burst_scrambler_onoff,
9456
15
     {"Scrambler On/Off", "docsis_ucd.burst.scrambleronoff",
9457
15
      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9458
15
      NULL, HFILL}
9459
15
    },
9460
15
    {&hf_docsis_rs_int_depth,
9461
15
     {"RS Interleaver Depth", "docsis_ucd.burst.rsintdepth",
9462
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9463
15
      "R-S Interleaver Depth", HFILL}
9464
15
    },
9465
15
    {&hf_docsis_rs_int_block,
9466
15
     {"RS Interleaver Block Size", "docsis_ucd.burst.rsintblock",
9467
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9468
15
      "R-S Interleaver Block", HFILL}
9469
15
    },
9470
15
    {&hf_docsis_preamble_type,
9471
15
     {"Preamble Type", "docsis_ucd.burst.preambletype",
9472
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9473
15
      NULL, HFILL}
9474
15
    },
9475
15
    {&hf_docsis_ucd_scdma_scrambler_onoff,
9476
15
     {"Scrambler On/Off", "docsis_ucd.burst.scdmascrambleronoff",
9477
15
      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9478
15
      "SCDMA Scrambler On/Off", HFILL}
9479
15
    },
9480
15
    {&hf_docsis_ucd_scdma_codes_per_subframe,
9481
15
     {"SCDMA Codes per Subframe", "docsis_ucd.burst.scdmacodespersubframe",
9482
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9483
15
      NULL, HFILL}
9484
15
    },
9485
15
    {&hf_docsis_ucd_scdma_framer_int_step_size,
9486
15
     {"SCDMA Framer Interleaving Step Size", "docsis_ucd.burst.scdmaframerintstepsize",
9487
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9488
15
      NULL, HFILL}
9489
15
    },
9490
15
    {&hf_docsis_ucd_tcm_enabled,
9491
15
     {"TCM Enabled", "docsis_ucd.burst.tcmenabled",
9492
15
      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
9493
15
      NULL, HFILL}
9494
15
    },
9495
15
    {&hf_docsis_ucd_active_code_hopping,
9496
15
     {"S-CDMA Selection Mode for Active Codes and Code Hopping", "docsis_ucd.selectcodehop",
9497
15
      FT_UINT8, BASE_DEC, VALS (tlv20_vals), 0x0,
9498
15
      NULL, HFILL}
9499
15
    },
9500
15
    {&hf_docsis_ucd_scdma_selection_active_codes,
9501
15
     {"S-CDMA Selection String for Active Codes", "docsis_ucd.selectcode",
9502
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9503
15
      NULL, HFILL}
9504
15
    },
9505
15
    {&hf_docsis_ucd_higher_ucd_for_same_ucid,
9506
15
     {"Higher UCD for the same UCID", "docsis_ucd.highucdpresent",
9507
15
      FT_BOOLEAN, 8, TFS(&type35ucd_tfs_present_not_present), 0x1,
9508
15
      NULL, HFILL}
9509
15
    },
9510
15
    {&hf_docsis_ucd_higher_ucd_for_same_ucid_resv,
9511
15
     {"Reserved", "docsis_ucd.highucdresv",
9512
15
      FT_UINT8, BASE_HEX, NULL, 0xFE,
9513
15
      NULL, HFILL}
9514
15
    },
9515
15
    {&hf_docsis_subc_init_rang,
9516
15
     {"Subcarriers (Nir) Initial Ranging", "docsis_ucd.burst.subc_init_rang",
9517
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
9518
15
      NULL, HFILL}
9519
15
    },
9520
15
    {&hf_docsis_subc_fine_rang,
9521
15
     {"Subcarriers (Nfr) Fine Ranging", "docsis_ucd.burst.subc_fine_rang",
9522
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
9523
15
      NULL, HFILL}
9524
15
    },
9525
15
    {&hf_docsis_ofdma_prof_mod_order,
9526
15
     {"OFDMA Profile: modulation", "docsis_ucd.burst.ofma_prof_mod_order",
9527
15
      FT_UINT8, BASE_DEC, VALS(ofdma_prof_mod_order), 0xF0,
9528
15
      NULL, HFILL}
9529
15
    },
9530
15
    {&hf_docsis_ofdma_prof_pilot_pattern,
9531
15
     {"OFDMA Profile: pilot pattern", "docsis_ucd.burst.ofma_prof_pilot_pattern",
9532
15
      FT_UINT8, BASE_DEC, NULL, 0x0F,
9533
15
      NULL, HFILL}
9534
15
    },
9535
15
    {&hf_docsis_ofdma_prof_num_add_minislots,
9536
15
     {"OFDMA Profile: Additional Minislots that have identical bit-loading and pilot pattern index", "docsis_ucd.burst.ofma_prof_add_minislots",
9537
15
      FT_UINT8, BASE_DEC, NULL, 0x00,
9538
15
      NULL, HFILL}
9539
15
    },
9540
15
    {&hf_docsis_ofdma_ir_pow_ctrl_start_pow,
9541
15
     {"OFDMA IR Power Control Starting Power Level", "docsis_ucd.burst.ofma_ir_pow_ctrl_start_pow",
9542
15
      FT_UINT8, BASE_CUSTOM, CF_FUNC(ofdma_ir_pow_ctrl_start_pow), 0x00,
9543
15
      NULL, HFILL}
9544
15
    },
9545
15
    {&hf_docsis_ofdma_ir_pow_ctrl_step_size,
9546
15
     {"OFDMA IR Power Control Step Size", "docsis_ucd.burst.ofma_ir_pow_ctrl_step_size",
9547
15
      FT_UINT8, BASE_CUSTOM, CF_FUNC(ofdma_ir_pow_ctrl_step_size), 0x00,
9548
15
      NULL, HFILL}
9549
15
    },
9550
    /* MAP */
9551
15
    {&hf_docsis_map_ucd_count,
9552
15
     {"UCD Count", "docsis_map.ucdcount",
9553
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9554
15
      "Map UCD Count", HFILL}
9555
15
    },
9556
15
    {&hf_docsis_map_numie,
9557
15
     {"Number of IE's", "docsis_map.numie",
9558
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9559
15
      "Number of Information Elements", HFILL}
9560
15
    },
9561
15
    {&hf_docsis_map_numie_v5,
9562
15
     {"Number of IE's", "docsis_map.numie",
9563
15
      FT_UINT16, BASE_DEC, NULL, 0xFF80,
9564
15
      "Number of Information Elements", HFILL}
9565
15
    },
9566
15
    {&hf_docsis_map_rsvd_v5,
9567
15
     {"Reserved [0x00]", "docsis_map.rsvd",
9568
15
      FT_UINT8, BASE_HEX, NULL, 0x70,
9569
15
      "Reserved Byte", HFILL}
9570
15
    },
9571
15
    {&hf_docsis_map_cat,
9572
15
     {"CAT", "docsis_map.cat",
9573
15
      FT_UINT8, BASE_HEX, NULL, 0x0F,
9574
15
      NULL, HFILL}
9575
15
    },
9576
9577
15
    {&hf_docsis_map_alloc_start,
9578
15
     {"Alloc Start Time (minislots)", "docsis_map.allocstart",
9579
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
9580
15
      NULL, HFILL}
9581
15
    },
9582
15
    {&hf_docsis_map_ack_time,
9583
15
     {"ACK Time (minislots)", "docsis_map.acktime",
9584
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
9585
15
      NULL, HFILL}
9586
15
    },
9587
15
    {&hf_docsis_map_rng_start,
9588
15
     {"Ranging Backoff Start", "docsis_map.rng_start",
9589
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9590
15
      NULL, HFILL}
9591
15
    },
9592
15
    {&hf_docsis_map_rng_end,
9593
15
     {"Ranging Backoff End", "docsis_map.rng_end",
9594
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9595
15
      NULL, HFILL}
9596
15
    },
9597
15
    {&hf_docsis_map_data_start,
9598
15
     {"Data Backoff Start", "docsis_map.data_start",
9599
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9600
15
      NULL, HFILL}
9601
15
    },
9602
15
    {&hf_docsis_map_data_end,
9603
15
     {"Data Backoff End", "docsis_map.data_end",
9604
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9605
15
      NULL, HFILL}
9606
15
    },
9607
15
    {&hf_docsis_map_ie,
9608
15
     {"Information Element", "docsis_map.ie",
9609
15
      FT_UINT32, BASE_HEX, NULL, 0x0,
9610
15
      NULL, HFILL}
9611
15
    },
9612
15
    {&hf_docsis_map_probe_ie,
9613
15
     {"Probe Information Element", "docsis_map.probe_ie",
9614
15
      FT_UINT32, BASE_HEX, NULL, 0x0,
9615
15
      NULL, HFILL}
9616
15
    },
9617
15
    {&hf_docsis_map_rsvd,
9618
15
     {"Reserved", "docsis_map.rsvd",
9619
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
9620
15
      "Reserved Byte", HFILL}
9621
15
    },
9622
15
    {&hf_docsis_map_sid,
9623
15
     {"Service Identifier", "docsis_map.sid",
9624
15
      FT_UINT32, BASE_DEC, NULL, 0xFFFC0000,
9625
15
      NULL, HFILL}
9626
15
    },
9627
15
    {&hf_docsis_map_iuc,
9628
15
     {"Interval Usage Code", "docsis_map.iuc",
9629
15
      FT_UINT32, BASE_DEC, VALS(iuc_vals), 0x0003c000,
9630
15
      NULL, HFILL}
9631
15
    },
9632
15
    {&hf_docsis_map_offset,
9633
15
     {"Offset", "docsis_map.offset",
9634
15
      FT_UINT32, BASE_DEC, NULL, 0x00003fff,
9635
15
      NULL, HFILL}
9636
15
    },
9637
15
    {&hf_docsis_map_mer,
9638
15
     {"MER (CMTS RxMER Measurement)", "docsis_map.mer",
9639
15
      FT_BOOLEAN, 32, TFS(&tfs_on_off), 0x00020000,
9640
15
      NULL, HFILL}
9641
15
    },
9642
15
    {&hf_docsis_map_pw,
9643
15
     {"PW (Power)", "docsis_map.pw",
9644
15
      FT_BOOLEAN, 32, TFS(&pw_vals), MAP_PROBE_IE_PW_MASK,
9645
15
      NULL, HFILL}
9646
15
    },
9647
15
    {&hf_docsis_map_eq,
9648
15
     {"EQ (Tx Equalization)", "docsis_map.eq",
9649
15
      FT_BOOLEAN, 32, TFS(&tfs_disabled_enabled), 0x00008000,
9650
15
      NULL, HFILL}
9651
15
    },
9652
15
    {&hf_docsis_map_st,
9653
15
     {"St (Stagger)", "docsis_map.st",
9654
15
      FT_BOOLEAN, 32, TFS(&tfs_yes_no), MAP_PROBE_IE_ST_MASK,
9655
15
      NULL, HFILL}
9656
15
    },
9657
15
    {&hf_docsis_map_probe_frame,
9658
15
     {"Probe Frame", "docsis_map.probe_frame",
9659
15
      FT_UINT32, BASE_DEC, NULL, 0x00003000,
9660
15
      NULL, HFILL}
9661
15
    },
9662
15
    {&hf_docsis_map_symbol_in_frame,
9663
15
     {"Symbol in Frame", "docsis_map.symbol_in_frame",
9664
15
      FT_UINT32, BASE_DEC, NULL, 0x00000fc0,
9665
15
      NULL, HFILL}
9666
15
    },
9667
15
    {&hf_docsis_map_start_subc,
9668
15
     {"Start Subc", "docsis_map.start_subc",
9669
15
      FT_UINT32, BASE_DEC, NULL, 0x00000038,
9670
15
      NULL, HFILL}
9671
15
    },
9672
15
    {&hf_docsis_map_subc_skip,
9673
15
     {"Subc Skip", "docsis_map.subc_skip",
9674
15
      FT_UINT32, BASE_DEC, NULL, 0x00000007,
9675
15
      NULL, HFILL}
9676
15
    },
9677
15
    {&hf_docsis_map_ect,
9678
15
     {"ECT Control", "docsis_map.ect",
9679
15
      FT_UINT32, BASE_DEC, VALS(map_ect_vals), 0x00000007,
9680
15
      NULL, HFILL}
9681
15
    },
9682
9683
    /* RNG-REQ */
9684
15
    {&hf_docsis_rngreq_sid_field_bit15,
9685
15
     {"SID field bit 15", "docsis_rngreq.sid_field_bit15",
9686
15
      FT_BOOLEAN, 8, TFS(&sid_field_bit15_tfs), 0x80,
9687
15
      NULL, HFILL}
9688
15
    },
9689
15
    {&hf_docsis_rngreq_sid_field_bit14,
9690
15
     {"SID field bit 14", "docsis_rngreq.sid_field_bit14",
9691
15
      FT_BOOLEAN, 8, TFS(&sid_field_bit14_tfs), 0x40,
9692
15
      NULL, HFILL}
9693
15
    },
9694
15
    {&hf_docsis_rngreq_sid_field_bit15_14,
9695
15
     {"SID field bit 15 to 14", "docsis_rngreq.sid_field_bit15_14",
9696
15
      FT_UINT8, BASE_HEX, VALS(sid_field_bit15_14_vals), 0xC0,
9697
15
      NULL, HFILL}
9698
15
    },
9699
15
    {&hf_docsis_rngreq_sid,
9700
15
     {"Service Identifier", "docsis_rngreq.sid",
9701
15
      FT_UINT16, BASE_DEC, NULL, 0x3FFF,
9702
15
      NULL, HFILL}
9703
15
    },
9704
15
    {&hf_docsis_rngreq_pend_compl,
9705
15
     {"Pending Till Complete", "docsis_rngreq.pendcomp",
9706
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9707
15
      "Upstream Channel ID", HFILL}
9708
15
    },
9709
    /* RNG-RSP */
9710
15
    {&hf_docsis_rngrsp_type,
9711
15
     {"Type", "docsis_rngrsp.type",
9712
15
      FT_UINT8, BASE_DEC, VALS(rngrsp_tlv_vals), 0x0,
9713
15
      "TLV Type", HFILL}
9714
15
     },
9715
15
    {&hf_docsis_rngrsp_length,
9716
15
     {"Length", "docsis_rngrsp.length",
9717
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
9718
15
      "TLV Length", HFILL}
9719
15
     },
9720
15
    {&hf_docsis_rngrsp_sid,
9721
15
     {"Service Identifier", "docsis_rngrsp.sid",
9722
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
9723
15
      NULL, HFILL}
9724
15
     },
9725
15
    {&hf_docsis_rngrsp_timing_adj,
9726
15
     {"Timing Adjust (6.25us/64)", "docsis_rngrsp.timingadj",
9727
15
      FT_INT32, BASE_DEC, NULL, 0x0,
9728
15
      NULL, HFILL}
9729
15
     },
9730
15
    {&hf_docsis_rngrsp_power_adj,
9731
15
     {"Power Level Adjust (0.25dB units)", "docsis_rngrsp.poweradj",
9732
15
      FT_INT8, BASE_DEC, NULL, 0x0,
9733
15
      NULL, HFILL}
9734
15
     },
9735
15
    {&hf_docsis_rngrsp_freq_adj,
9736
15
     {"Offset Freq Adjust (Hz)", "docsis_rngrsp.freqadj",
9737
15
      FT_INT16, BASE_DEC, NULL, 0x0,
9738
15
      "Frequency Adjust", HFILL}
9739
15
     },
9740
15
    {&hf_docsis_rngrsp_xmit_eq_adj,
9741
15
     {"Transmit Equalization Adjust", "docsis_rngrsp.xmit_eq_adj",
9742
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9743
15
      NULL, HFILL}
9744
15
     },
9745
15
    {&hf_docsis_rngrsp_ranging_status,
9746
15
     {"Ranging Status", "docsis_rngrsp.rng_stat",
9747
15
      FT_UINT8, BASE_DEC, VALS (rng_stat_vals), 0x0,
9748
15
      NULL, HFILL}
9749
15
     },
9750
15
    {&hf_docsis_rngrsp_down_freq_over,
9751
15
     {"Downstream Frequency Override (Hz)", "docsis_rngrsp.freq_over",
9752
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
9753
15
      NULL, HFILL}
9754
15
     },
9755
15
    {&hf_docsis_rngrsp_upstream_ch_over,
9756
15
     {"Upstream Channel ID Override", "docsis_rngrsp.chid_override",
9757
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9758
15
      NULL, HFILL}
9759
15
     },
9760
15
    {&hf_docsis_rngrsp_xmit_eq_set,
9761
15
     {"Transmit Equalization Set", "docsis_rngrsp.xmit_eq_set",
9762
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9763
15
      NULL, HFILL}
9764
15
     },
9765
15
    {&hf_docsis_rngrsp_rngrsp_t4_timeout_multiplier,
9766
15
     {"Multiplier of the default T4 Timeout", "docsis_rngrsp.t4_timeout_multiplier",
9767
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9768
15
      "T4 Timeout Multiplier (the valid range is 1-10)", HFILL}
9769
15
     },
9770
15
    {&hf_docsis_rngrsp_dynamic_range_window_upper_edge,
9771
15
     {"Dynamic Range Window Upper Edge", "docsis_rngrsp.dynamic_range_window_upper_edge",
9772
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9773
15
      "Dynamic Range Window Upper EDGE (in units of 0.25 db below the max allowable setting)", HFILL}
9774
15
     },
9775
15
    {&hf_docsis_rngrsp_tlv_unknown,
9776
15
     {"Unknown TLV", "docsis_rngrsp.tlv.unknown",
9777
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9778
15
      NULL, HFILL}
9779
15
    },
9780
15
    {&hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_main_tap_location,
9781
15
      {"Main Tap Location", "docsis_rngrsp.tlv.trans_eq_enc_scdma_tdma.main_tap_location",
9782
15
        FT_UINT8, BASE_DEC, NULL, 0x0,
9783
15
        NULL, HFILL}
9784
15
    },
9785
15
    {&hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_number_of_forward_taps_per_symbol,
9786
15
      {"Number of Forward Taps per Symbol", "docsis_rngrsp.tlv.trans_eq_enc_scdma_tdma.nr_of_forward_taps_per_symbol",
9787
15
        FT_UINT8, BASE_DEC, NULL, 0x0,
9788
15
        NULL, HFILL}
9789
15
    },
9790
15
    {&hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_number_of_forward_taps_n,
9791
15
      {"Number of Forward Taps (N)", "docsis_rngrsp.tlv.trans_eq_enc_scdma_tdma.nr_of_forward_taps_n",
9792
15
        FT_UINT8, BASE_DEC, NULL, 0x0,
9793
15
        NULL, HFILL}
9794
15
    },
9795
15
    {&hf_docsis_rngrsp_trans_eq_enc_scdma_tdma_reserved,
9796
15
      {"Reserved", "docsis_rngrsp.tlv.trans_eq_enc_scdma_tdma.reserved",
9797
15
        FT_UINT8, BASE_DEC, NULL, 0x0,
9798
15
        NULL, HFILL}
9799
15
    },
9800
15
    {&hf_docsis_rngrsp_trans_eq_data,
9801
15
     {"Transmit equalization data", "docsis_rngrsp.tlv.trans_eq_data",
9802
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9803
15
      NULL, HFILL}
9804
15
    },
9805
15
    {&hf_docsis_rngrsp_trans_eq_enc_lowest_subc,
9806
15
     {"Lowest Subcarrier for this TLV", "docsis_rngrsp.tlv.trans_eq_enc_lowest_subc",
9807
15
      FT_UINT24, BASE_DEC, NULL, 0xFFF000,
9808
15
      NULL, HFILL}
9809
15
    },
9810
15
    {&hf_docsis_rngrsp_trans_eq_enc_highest_subc,
9811
15
     {"Highest Subcarrier for this TLV", "docsis_rngrsp.tlv.trans_eq_enc_highest_subc",
9812
15
      FT_UINT24, BASE_DEC, NULL, 0x0FFF,
9813
15
      NULL, HFILL}
9814
15
    },
9815
15
    {&hf_docsis_rngrsp_trans_eq_enc_coef_real,
9816
15
     {"Coefficient (real)", "docsis_rngrsp.tlv.trans_eq_enc_coef_real",
9817
15
      FT_INT16, BASE_CUSTOM, CF_FUNC(two_compl_frac), 0x0,
9818
15
      NULL, HFILL}
9819
15
    },
9820
15
    {&hf_docsis_rngrsp_trans_eq_enc_coef_imag,
9821
15
     {"Coefficient (imag)", "docsis_rngrsp.tlv.trans_eq_enc_coef_imag",
9822
15
      FT_INT16, BASE_CUSTOM, CF_FUNC(two_compl_frac), 0x0,
9823
15
      NULL, HFILL}
9824
15
    },
9825
15
    {&hf_docsis_rngrsp_commanded_power_data,
9826
15
     {"Commanded Power Data", "docsis_rngrsp.tlv.comm_pwr_data",
9827
15
      FT_BYTES, BASE_NONE, NULL, 0x00,
9828
15
      NULL, HFILL}
9829
15
    },
9830
15
    {&hf_docsis_rngrsp_commanded_power_dynamic_range_window,
9831
15
     {"Dynamic Range Window", "docsis_rngrsp.tlv.comm_pwr_dyn_range_window",
9832
15
      FT_INT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x00,
9833
15
      NULL, HFILL}
9834
15
    },
9835
15
    {&hf_docsis_rngrsp_commanded_power_ucid,
9836
15
     {"UCID", "docsis_rngrsp.tlv.comm_pwr_ucid",
9837
15
      FT_UINT8, BASE_DEC, NULL, 0x00,
9838
15
      NULL, HFILL}
9839
15
    },
9840
15
    {&hf_docsis_rngrsp_commanded_power_trans_pow_lvl,
9841
15
     {"Transmit Power Level (quarter dBmV)", "docsis_rngrsp.tlv.comm_pwr_trans_pow_lvl",
9842
15
      FT_INT16, BASE_CUSTOM, CF_FUNC(fourth_db), 0x00,
9843
15
      NULL, HFILL}
9844
15
    },
9845
9846
     /* REG_REQ */
9847
15
    {&hf_docsis_regreq_sid,
9848
15
     {"Service Identifier", "docsis_regreq.sid",
9849
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
9850
15
      NULL, HFILL}
9851
15
    },
9852
     /* REG_RSP */
9853
15
    {&hf_docsis_regrsp_sid,
9854
15
     {"Service Identifier", "docsis_regrsp.sid",
9855
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
9856
15
      NULL, HFILL}
9857
15
    },
9858
15
    {&hf_docsis_regrsp_response,
9859
15
     {"Response Code", "docsis_regrsp.respnse",
9860
15
      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
9861
15
      NULL, HFILL}
9862
15
    },
9863
    /* BPKM */
9864
15
    {&hf_docsis_bpkm_code,
9865
15
     {"Code", "docsis_bpkm.code",
9866
15
      FT_UINT8, BASE_DEC, VALS (code_field_vals), 0x0,
9867
15
      NULL, HFILL}
9868
15
    },
9869
15
    {&hf_docsis_bpkm_ident,
9870
15
     {"Identifier", "docsis_bpkm.ident",
9871
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
9872
15
      NULL, HFILL}
9873
15
    },
9874
15
    {&hf_docsis_bpkm_length,
9875
15
     {"Length", "docsis_bpkm.length",
9876
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
9877
15
      NULL, HFILL}
9878
15
    },
9879
15
    {&hf_docsis_bpkmattr,
9880
15
     {"Attributes", "docsis_bpkm.attr",
9881
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9882
15
      NULL, HFILL}
9883
15
    },
9884
15
    {&hf_docsis_bpkmattr_tlv,
9885
15
     {"TLV", "docsis_bpkm.attr.tlv",
9886
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9887
15
      NULL, HFILL}
9888
15
     },
9889
15
    {&hf_docsis_bpkmattr_tlv_type,
9890
15
     {"Type", "docsis_bpkm.attr.tlv.type",
9891
15
      FT_UINT8, BASE_DEC, VALS(bpkmattr_tlv_vals), 0x0,
9892
15
      NULL, HFILL}
9893
15
     },
9894
15
    {&hf_docsis_bpkmattr_tlv_length,
9895
15
     {"Length", "docsis_bpkm.attr.tlv.length",
9896
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
9897
15
      NULL, HFILL}
9898
15
     },
9899
15
    {&hf_docsis_bpkmattr_serial_num,
9900
15
     {"Serial Number", "docsis_bpkm.attr.serialnum",
9901
15
      FT_STRING, BASE_NONE, NULL, 0x0,
9902
15
      NULL, HFILL}
9903
15
    },
9904
15
    {&hf_docsis_bpkmattr_manf_id,
9905
15
     {"Manufacturer ID", "docsis_bpkm.attr.manfid",
9906
15
      FT_UINT24, BASE_HEX, NULL, 0x0,
9907
15
      NULL, HFILL}
9908
15
    },
9909
15
    {&hf_docsis_bpkmattr_mac_addr,
9910
15
     {"MAC Address", "docsis_bpkm.attr.macaddr",
9911
15
      FT_ETHER, BASE_NONE, NULL, 0x0,
9912
15
      NULL, HFILL}
9913
15
    },
9914
15
    {&hf_docsis_bpkmattr_rsa_pub_key,
9915
15
     {"RSA Public Key", "docsis_bpkm.attr.rsa_pub_key",
9916
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9917
15
      "DER-encoded RSA Public Key", HFILL}
9918
15
    },
9919
15
    {&hf_docsis_bpkmattr_cm_id,
9920
15
     {"CM Identification", "docsis_bpkm.attr.cmid",
9921
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9922
15
      NULL, HFILL}
9923
15
    },
9924
15
    {&hf_docsis_bpkmattr_display_str,
9925
15
     {"Display String", "docsis_bpkm.attr.dispstr",
9926
15
      FT_STRING, BASE_NONE, NULL, 0x0,
9927
15
      NULL, HFILL}
9928
15
    },
9929
15
    {&hf_docsis_bpkmattr_auth_key,
9930
15
     {"Auth Key", "docsis_bpkm.attr.auth_key",
9931
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9932
15
      "Encrypted Authorization Key", HFILL}
9933
15
    },
9934
15
    {&hf_docsis_bpkmattr_tek,
9935
15
     {"Traffic Encryption Key", "docsis_bpkm.attr.tek",
9936
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9937
15
      "Encrypted Traffic Encryption Key", HFILL}
9938
15
    },
9939
15
    {&hf_docsis_bpkmattr_key_life,
9940
15
     {"Key Lifetime (s)", "docsis_bpkm.attr.keylife",
9941
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
9942
15
      "Remaining key lifetime (s)", HFILL}
9943
15
    },
9944
15
    {&hf_docsis_bpkmattr_key_seq,
9945
15
     {"Key Sequence Number", "docsis_bpkm.attr.keyseq",
9946
15
      FT_UINT8, BASE_DEC, NULL, 0x0f,
9947
15
      NULL, HFILL}
9948
15
    },
9949
15
    {&hf_docsis_bpkmattr_hmac_digest,
9950
15
     {"HMAC Digest", "docsis_bpkm.attr.hmacdigest",
9951
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9952
15
      "HMAC Digest (160-bit keyed SHA-1 hash)", HFILL}
9953
15
    },
9954
15
    {&hf_docsis_bpkmattr_said,
9955
15
     {"SAID", "docsis_bpkm.attr.said",
9956
15
      FT_UINT16, BASE_DEC, NULL, 0x3fff,
9957
15
      "Security Association ID", HFILL}
9958
15
    },
9959
15
    {&hf_docsis_bpkmattr_tek_params,
9960
15
     {"TEK Parameters", "docsis_bpkm.attr.tekparams",
9961
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9962
15
      NULL, HFILL}
9963
15
    },
9964
15
    {&hf_docsis_bpkmattr_cbc_iv,
9965
15
     {"CBC IV", "docsis_bpkm.attr.cbciv",
9966
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
9967
15
      "Cypher Block Chaining initialization vector", HFILL}
9968
15
    },
9969
15
    {&hf_docsis_bpkmattr_error_code,
9970
15
     {"Error Code", "docsis_bpkm.attr.errcode",
9971
15
      FT_UINT8, BASE_DEC, VALS (error_code_vals), 0x0,
9972
15
      NULL, HFILL}
9973
15
    },
9974
15
    {&hf_docsis_bpkmattr_ca_cert,
9975
15
     {"Device CA Certificate", "docsis_bpkm.attr.cacert",
9976
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9977
15
      "DER-encoded Device CA Certificate", HFILL}
9978
15
    },
9979
15
    {&hf_docsis_bpkmattr_cm_cert,
9980
15
     {"CM Certificate", "docsis_bpkm.attr.cmcert",
9981
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9982
15
      "DER-encoded CM Device Certificate", HFILL}
9983
15
    },
9984
15
    {&hf_docsis_bpkmattr_security_cap,
9985
15
     {"Security Capabilities", "docsis_bpkm.attr.seccap",
9986
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
9987
15
      NULL, HFILL}
9988
15
    },
9989
15
    {&hf_docsis_bpkmattr_crypto_suite,
9990
15
     {"Cryptographic Suite", "docsis_bpkm.attr.cryptosuite",
9991
15
      FT_UINT16, BASE_HEX, NULL, 0x0,
9992
15
      NULL, HFILL}
9993
15
    },
9994
15
    {&hf_docsis_bpkmattr_crypto_suite_encr,
9995
15
     {"Encryption", "docsis_bpkm.attr.cryptosuite.encr",
9996
15
      FT_UINT16, BASE_HEX, VALS(bpkm_crypto_suite_encr_vals), 0xff00,
9997
15
      "Data Encryption Algorithm", HFILL}
9998
15
    },
9999
15
    {&hf_docsis_bpkmattr_crypto_suite_auth,
10000
15
     {"Authentication", "docsis_bpkm.attr.cryptosuite.auth",
10001
15
      FT_UINT16, BASE_HEX, VALS(bpkm_crypto_suite_auth_vals), 0x00ff,
10002
15
      "Data Authentication Algorithm", HFILL}
10003
15
    },
10004
15
    {&hf_docsis_bpkmattr_crypto_suite_list,
10005
15
     {"Cryptographic Suite List", "docsis_bpkm.attr.crypto_suite_lst",
10006
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
10007
15
      NULL, HFILL}
10008
15
    },
10009
15
    {&hf_docsis_bpkmattr_bpi_version,
10010
15
     {"BPI Version", "docsis_bpkm.attr.bpiver",
10011
15
      FT_UINT8, BASE_DEC, VALS (bpi_ver_vals), 0x0,
10012
15
      NULL, HFILL}
10013
15
    },
10014
15
    {&hf_docsis_bpkmattr_sa_descr,
10015
15
     {"SA Descriptor", "docsis_bpkm.attr.sadescr",
10016
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10017
15
      "Security Association Descriptor", HFILL}
10018
15
    },
10019
15
    {&hf_docsis_bpkmattr_sa_type,
10020
15
     {"SA Type", "docsis_bpkm.attr.satype",
10021
15
      FT_UINT8, BASE_DEC, VALS(bpi_sa_vals), 0x0,
10022
15
      "Security Association Type", HFILL}
10023
15
    },
10024
15
    {&hf_docsis_bpkmattr_sa_query,
10025
15
     {"SA Query", "docsis_bpkm.attr.saquery",
10026
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10027
15
      "Security Association Query", HFILL}
10028
15
    },
10029
15
    {&hf_docsis_bpkmattr_sa_query_type,
10030
15
     {"SA Query Type", "docsis_bpkm.attr.saquery_type",
10031
15
      FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(bpi_sa_query_type_vals), 0x0,
10032
15
      "Security Association Query Type", HFILL}
10033
15
    },
10034
15
    {&hf_docsis_bpkmattr_ip_address,
10035
15
     {"IP Address", "docsis_bpkm.attr.ipaddr",
10036
15
      FT_IPv4, BASE_NONE, NULL, 0x0,
10037
15
      NULL, HFILL}
10038
15
    },
10039
15
    {&hf_docsis_bpkmattr_download_param,
10040
15
     {"Download Parameters", "docsis_bpkm.attr.dnld_params",
10041
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10042
15
      NULL, HFILL}
10043
15
    },
10044
15
    {&hf_docsis_bpkmattr_cvc_root_ca_cert,
10045
15
     {"CVC Root CA Certificate (deprecated)", "docsis_bpkm.attr.cvc_root_ca_cert",
10046
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10047
15
      "DER-encoded CVC Root CA Certificate from the legacy PKI", HFILL}
10048
15
    },
10049
15
    {&hf_docsis_bpkmattr_cvc_ca_cert,
10050
15
     {"CVC CA Certificate (deprecated)", "docsis_bpkm.attr.cvc_ca_cert",
10051
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10052
15
      "DER-encoded CVC CA Certificate from the legacy PKI", HFILL}
10053
15
    },
10054
15
    {&hf_docsis_bpkmattr_dev_ca_cert,
10055
15
     {"Device CA Certificate", "docsis_bpkm.attr.dev_ca_cert",
10056
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10057
15
      "DER-encoded Device CA Certificate from the new PKI", HFILL}
10058
15
    },
10059
15
    {&hf_docsis_bpkmattr_root_ca_cert,
10060
15
     {"Root CA Certificate", "docsis_bpkm.attr.root_ca_cert",
10061
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10062
15
      "DER-encoded Root CA Certificate from the new PKI", HFILL}
10063
15
    },
10064
15
    {&hf_docsis_bpkmattr_cm_nonce,
10065
15
     {"CM Nonce", "docsis_bpkm.attr.cm_nonce",
10066
15
      FT_UINT64, BASE_HEX, NULL, 0x0,
10067
15
      NULL, HFILL}
10068
15
    },
10069
15
    {&hf_docsis_bpkmattr_msg_signature,
10070
15
     {"Message Signature", "docsis_bpkm.attr.msg_signature",
10071
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10072
15
      "DER-encoded CMS Signature", HFILL}
10073
15
    },
10074
15
    {&hf_docsis_bpkmattr_key_exchange_share_field_id,
10075
15
     {"Key Exchange Share: Field ID", "docsis_bpkm.attr.key_exchange_share.field_id",
10076
15
      FT_UINT16, BASE_HEX, VALS(bpkmattr_key_exchange_share_field_id_vals), 0x0,
10077
15
      NULL, HFILL}
10078
15
    },
10079
15
    {&hf_docsis_bpkmattr_key_exchange_share_key_share,
10080
15
     {"Key Exchange Share", "docsis_bpkm.attr.key_exchange_share.key_share",
10081
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10082
15
      NULL, HFILL}
10083
15
    },
10084
15
    {&hf_docsis_bpkmattr_allowed_bpi_versions,
10085
15
     {"Allowed BPI Versions", "docsis_bpkm.attr.allowed_bpi_versions",
10086
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10087
15
      NULL, HFILL}
10088
15
    },
10089
15
    {&hf_docsis_bpkmattr_allowed_bpi_version,
10090
15
     {"BPI Version", "docsis_bpkm.attr.allowed_bpi_version",
10091
15
      FT_UINT8, BASE_DEC, VALS(bpi_ver_vals), 0x0,
10092
15
      NULL, HFILL}
10093
15
    },
10094
15
    {&hf_docsis_bpkmattr_ocsp_responses,
10095
15
     {"OCSP Responses", "docsis_bpkm.attr.ocsp_responses",
10096
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10097
15
      NULL, HFILL}
10098
15
    },
10099
15
    {&hf_docsis_bpkmattr_ocsp_response,
10100
15
     {"OCSP Response", "docsis_bpkm.attr.ocsp_response",
10101
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10102
15
      NULL, HFILL}
10103
15
    },
10104
15
    {&hf_docsis_bpkmattr_cmts_designation,
10105
15
     {"CMTS Designation", "docsis_bpkm.attr.cmts_designation",
10106
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
10107
15
      NULL, HFILL}
10108
15
    },
10109
15
    {&hf_docsis_bpkmattr_cmts_designation_data_type,
10110
15
     {"DataType", "docsis_bpkm.attr.cmts_designation.data_type",
10111
15
      FT_UINT8, BASE_DEC, VALS(bpkm_cmts_binding_vals), 0x0,
10112
15
      NULL, HFILL}
10113
15
    },
10114
15
    {&hf_docsis_bpkmattr_cmts_designation_certificate_fingerprint,
10115
15
     {"Certificate Fingerprint", "docsis_bpkm.attr.cmts_designation.certificate_fingerprint",
10116
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
10117
15
      NULL, HFILL}
10118
15
    },
10119
15
    {&hf_docsis_bpkmattr_cmts_designation_common_name,
10120
15
     {"Common Name", "docsis_bpkm.attr.cmts_designation.common_name",
10121
15
      FT_STRING, BASE_NONE, NULL, 0x0,
10122
15
      NULL, HFILL}
10123
15
    },
10124
15
    {&hf_docsis_bpkmattr_cmts_designation_org_unit,
10125
15
     {"Organizational Unit", "docsis_bpkm.attr.cmts_designation.org_unit",
10126
15
      FT_STRING, BASE_NONE, NULL, 0x0,
10127
15
      NULL, HFILL}
10128
15
    },
10129
15
    {&hf_docsis_bpkmattr_cmts_designation_org_name,
10130
15
     {"Organization Name", "docsis_bpkm.attr.cmts_designation.org_name",
10131
15
      FT_STRING, BASE_NONE, NULL, 0x0,
10132
15
      NULL, HFILL}
10133
15
    },
10134
15
    {&hf_docsis_bpkmattr_cmts_designation_serial_number,
10135
15
     {"Serial Number", "docsis_bpkm.attr.cmts_designation.serial_number",
10136
15
      FT_STRING, BASE_NONE, NULL, 0x0,
10137
15
      NULL, HFILL}
10138
15
    },
10139
15
    {&hf_docsis_bpkmattr_cmts_designation_issuing_ca_fingerprint,
10140
15
     {"Issuing CA Fingerprint", "docsis_bpkm.attr.cmts_designation.issuing_ca_fingerprint",
10141
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
10142
15
      NULL, HFILL}
10143
15
    },
10144
15
    {&hf_docsis_bpkmattr_cmts_designation_issuing_ca_common_name,
10145
15
     {"Issuing CA Common Name", "docsis_bpkm.attr.cmts_designation.issuing_ca_common_name",
10146
15
      FT_STRING, BASE_NONE, NULL, 0x0,
10147
15
      NULL, HFILL}
10148
15
    },
10149
15
    {&hf_docsis_bpkmattr_cmts_designation_issuing_ca_org_unit,
10150
15
     {"Issuing CA Organizational Unit", "docsis_bpkm.attr.cmts_designation.issuing_ca_org_unit",
10151
15
      FT_STRING, BASE_NONE, NULL, 0x0,
10152
15
      NULL, HFILL}
10153
15
    },
10154
15
    {&hf_docsis_bpkmattr_cmts_designation_issuing_ca_org_name,
10155
15
     {"Issuing CA Organization Name", "docsis_bpkm.attr.cmts_designation.issuing_ca_org_name",
10156
15
      FT_STRING, BASE_NONE, NULL, 0x0,
10157
15
      NULL, HFILL}
10158
15
    },
10159
15
    {&hf_docsis_bpkmattr_cmts_designation_issuing_ca_serial_number,
10160
15
     {"Issuing CA Serial Number", "docsis_bpkm.attr.cmts_designation.issuing_ca_serial_number",
10161
15
      FT_STRING, BASE_NONE, NULL, 0x0,
10162
15
      NULL, HFILL}
10163
15
    },
10164
15
    {&hf_docsis_bpkmattr_cm_status_code,
10165
15
     {"CM-Status Code", "docsis_bpkm.attr.cm_status_code",
10166
15
      FT_UINT8, BASE_DEC, VALS(bpkm_cm_status_code_vals), 0x0,
10167
15
      NULL, HFILL}
10168
15
    },
10169
15
    {&hf_docsis_bpkmattr_detected_errors,
10170
15
     {"Detected Errors", "docsis_bpkm.attr.detected_errors",
10171
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10172
15
      NULL, HFILL}
10173
15
    },
10174
15
    {&hf_docsis_bpkmattr_vendor_def,
10175
15
     {"Vendor Defined", "docsis_bpkm.attr.vendordef",
10176
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
10177
15
      NULL, HFILL}
10178
15
    },
10179
    /* REG-ACK */
10180
15
    {&hf_docsis_regack_sid,
10181
15
     {"Service Identifier", "docsis_regack.sid",
10182
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
10183
15
      NULL, HFILL}
10184
15
    },
10185
15
    {&hf_docsis_regack_response,
10186
15
     {"Response Code", "docsis_regack.respnse",
10187
15
      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10188
15
      NULL, HFILL}
10189
15
    },
10190
    /* DAS-RSP */
10191
15
    {&hf_docsis_dsarsp_response,
10192
15
     {"Confirmation Code", "docsis_dsarsp.confcode",
10193
15
      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10194
15
      NULL, HFILL}
10195
15
    },
10196
15
    {&hf_docsis_dsaack_response,
10197
15
     {"Confirmation Code", "docsis_dsaack.confcode",
10198
15
      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10199
15
      NULL, HFILL}
10200
15
    },
10201
    /* DSC-RSP */
10202
15
    {&hf_docsis_dscrsp_response,
10203
15
     {"Confirmation Code", "docsis_dscrsp.confcode",
10204
15
      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10205
15
      NULL, HFILL}
10206
15
    },
10207
15
    {&hf_docsis_dscack_response,
10208
15
     {"Confirmation Code", "docsis_dscack.confcode",
10209
15
      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10210
15
      NULL, HFILL}
10211
15
    },
10212
    /* DSD-REQ */
10213
15
    {&hf_docsis_dsdreq_rsvd,
10214
15
     {"Reserved", "docsis_dsdreq.rsvd",
10215
15
      FT_UINT16, BASE_HEX, NULL, 0x0,
10216
15
      NULL, HFILL}
10217
15
    },
10218
15
    {&hf_docsis_dsdreq_sfid,
10219
15
     {"Service Flow ID", "docsis_dsdreq.sfid",
10220
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
10221
15
      NULL, HFILL}
10222
15
    },
10223
    /* DSD-RSP */
10224
15
    {&hf_docsis_dsdrsp_confcode,
10225
15
     {"Confirmation Code", "docsis_dsdrsp.confcode",
10226
15
      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10227
15
      NULL, HFILL}
10228
15
    },
10229
15
    {&hf_docsis_dsdrsp_rsvd,
10230
15
     {"Reserved", "docsis_dsdrsp.rsvd",
10231
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10232
15
      NULL, HFILL}
10233
15
    },
10234
    /* DCC-REQ */
10235
15
    {&hf_docsis_dccreq_type,
10236
15
     {
10237
15
      "Type",
10238
15
      "docsis_dccreq.tlvtype",
10239
15
      FT_UINT8, BASE_DEC, VALS(dcc_tlv_vals), 0x0,
10240
15
      NULL,
10241
15
      HFILL
10242
15
     }
10243
15
    },
10244
15
    {&hf_docsis_dccreq_length,
10245
15
     {
10246
15
      "Length",
10247
15
      "docsis_dccreq.tlvlen",
10248
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10249
15
      NULL,
10250
15
      HFILL
10251
15
     }
10252
15
    },
10253
15
    {&hf_docsis_dccreq_tran_id ,
10254
15
     {
10255
15
       "Transaction ID",
10256
15
       "docsis_dccreq.tran_id",
10257
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10258
15
       NULL,
10259
15
       HFILL
10260
15
     }
10261
15
    },
10262
15
    {&hf_docsis_dccreq_up_chan_id ,
10263
15
     {
10264
15
       "Up Channel ID",
10265
15
       "docsis_dccreq.up_chan_id",
10266
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10267
15
       NULL,
10268
15
       HFILL
10269
15
     }
10270
15
    },
10271
15
    {&hf_docsis_dcc_ds_params_subtype,
10272
15
     {
10273
15
      "Type",
10274
15
      "docsis_dccreq.ds_tlvtype",
10275
15
      FT_UINT8, BASE_DEC, VALS(ds_param_subtlv_vals), 0x0,
10276
15
      NULL,
10277
15
      HFILL
10278
15
     }
10279
15
    },
10280
15
    {&hf_docsis_dcc_ds_params_length,
10281
15
     {
10282
15
      "Length",
10283
15
      "docsis_dccreq.ds_tlvlen",
10284
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10285
15
      NULL,
10286
15
      HFILL
10287
15
     }
10288
15
    },
10289
15
    {&hf_docsis_dccreq_ds_freq ,
10290
15
     {
10291
15
       "Frequency",
10292
15
       "docsis_dccreq.ds_freq",
10293
15
       FT_UINT32, BASE_DEC, NULL, 0x0,
10294
15
       NULL,
10295
15
       HFILL
10296
15
     }
10297
15
    },
10298
15
    {&hf_docsis_dccreq_ds_mod_type ,
10299
15
     {
10300
15
       "Modulation Type",
10301
15
       "docsis_dccreq.ds_mod_type",
10302
15
       FT_UINT8, BASE_DEC, VALS (ds_mod_type_vals), 0x0,
10303
15
       NULL,
10304
15
       HFILL
10305
15
     }
10306
15
    },
10307
15
    {&hf_docsis_dccreq_ds_sym_rate ,
10308
15
     {
10309
15
       "Symbol Rate",
10310
15
       "docsis_dccreq.ds_sym_rate",
10311
15
       FT_UINT8, BASE_DEC, VALS (ds_sym_rate_vals), 0x0,
10312
15
       NULL,
10313
15
       HFILL
10314
15
     }
10315
15
    },
10316
15
    {&hf_docsis_dccreq_ds_intlv_depth_i ,
10317
15
     {
10318
15
       "Interleaver Depth I Value",
10319
15
       "docsis_dccreq.ds_intlv_depth_i",
10320
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10321
15
       NULL,
10322
15
       HFILL
10323
15
     }
10324
15
    },
10325
15
    {&hf_docsis_dccreq_ds_intlv_depth_j ,
10326
15
     {
10327
15
       "Interleaver Depth J Value",
10328
15
       "docsis_dccreq.ds_intlv_depth_j",
10329
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10330
15
       NULL,
10331
15
       HFILL
10332
15
     }
10333
15
    },
10334
15
    {&hf_docsis_dccreq_ds_chan_id ,
10335
15
     {
10336
15
       "Downstream Channel ID",
10337
15
       "docsis_dccreq.ds_chan_id",
10338
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10339
15
       NULL,
10340
15
       HFILL
10341
15
     }
10342
15
    },
10343
15
    {&hf_docsis_dccreq_ds_sync_sub ,
10344
15
     {
10345
15
       "SYNC Substitution",
10346
15
       "docsis_dccreq.ds_sync_sub",
10347
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10348
15
       NULL,
10349
15
       HFILL
10350
15
     }
10351
15
    },
10352
15
    {&hf_docsis_dccreq_ds_ofdm_block_freq ,
10353
15
     {
10354
15
       "OFDM Block Frequency",
10355
15
       "docsis_dccreq.ds_ofdm_block_freq",
10356
15
       FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_hz), 0x0,
10357
15
       NULL,
10358
15
       HFILL
10359
15
     }
10360
15
    },
10361
15
    {&hf_docsis_dccreq_init_tech ,
10362
15
     {
10363
15
       "Initialization Technique",
10364
15
       "docsis_dccreq.init_tech",
10365
15
       FT_UINT8, BASE_DEC, VALS (init_tech_vals), 0x0,
10366
15
       NULL,
10367
15
       HFILL
10368
15
     }
10369
15
    },
10370
15
    {&hf_docsis_dccreq_ucd_sub ,
10371
15
     {
10372
15
       "UCD Substitution",
10373
15
       "docsis_dccreq.ucd_sub",
10374
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
10375
15
       NULL,
10376
15
       HFILL
10377
15
     }
10378
15
    },
10379
15
    {&hf_docsis_dccreq_said_sub_cur ,
10380
15
     {
10381
15
       "SAID Sub - Current Value",
10382
15
       "docsis_dccreq.said_sub_cur",
10383
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10384
15
       NULL,
10385
15
       HFILL
10386
15
     }
10387
15
    },
10388
15
    {&hf_docsis_dccreq_said_sub_new ,
10389
15
     {
10390
15
       "SAID Sub - New Value",
10391
15
       "docsis_dccreq.said_sub_new",
10392
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10393
15
       NULL,
10394
15
       HFILL
10395
15
     }
10396
15
    },
10397
15
    {&hf_docsis_dcc_sf_sub_subtype,
10398
15
     {
10399
15
      "Type",
10400
15
      "docsis_dccreq.sf_tlvtype",
10401
15
      FT_UINT8, BASE_DEC, VALS(sf_sub_subtlv_vals), 0x0,
10402
15
      NULL,
10403
15
      HFILL
10404
15
     }
10405
15
    },
10406
15
    {&hf_docsis_dcc_sf_sub_length,
10407
15
     {
10408
15
      "Length",
10409
15
      "docsis_dccreq.sf_tlvlen",
10410
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10411
15
      NULL,
10412
15
      HFILL
10413
15
     }
10414
15
    },
10415
15
    {&hf_docsis_dccreq_sf_sfid_cur ,
10416
15
     {
10417
15
       "SF Sub - SFID Current Value",
10418
15
       "docsis_dccreq.sf_sfid_cur",
10419
15
       FT_UINT32, BASE_DEC, NULL, 0x0,
10420
15
       NULL,
10421
15
       HFILL
10422
15
     }
10423
15
    },
10424
15
    {&hf_docsis_dccreq_sf_sfid_new ,
10425
15
     {
10426
15
       "SF Sub - SFID New Value",
10427
15
       "docsis_dccreq.sf_sfid_new",
10428
15
       FT_UINT32, BASE_DEC, NULL, 0x0,
10429
15
       NULL,
10430
15
       HFILL
10431
15
     }
10432
15
    },
10433
15
    {&hf_docsis_dccreq_sf_sid_cur ,
10434
15
     {
10435
15
       "SF Sub - SID Current Value",
10436
15
       "docsis_dccreq.sf_sid_cur",
10437
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10438
15
       NULL,
10439
15
       HFILL
10440
15
     }
10441
15
    },
10442
15
    {&hf_docsis_dccreq_sf_sid_new ,
10443
15
     {
10444
15
       "SF Sub - SID New Value",
10445
15
       "docsis_dccreq.sf_sid_new",
10446
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10447
15
       NULL,
10448
15
       HFILL
10449
15
     }
10450
15
    },
10451
15
    {&hf_docsis_dccreq_sf_unsol_grant_tref ,
10452
15
     {
10453
15
       "SF Sub - Unsolicited Grant Time Reference",
10454
15
       "docsis_dccreq.sf_unsol_grant_tref",
10455
15
       FT_UINT32, BASE_DEC, NULL, 0x0,
10456
15
       NULL,
10457
15
       HFILL
10458
15
     }
10459
15
    },
10460
15
    {&hf_docsis_dccreq_cmts_mac_addr ,
10461
15
     {
10462
15
       "CMTS MAC Address",
10463
15
       "docsis_dccreq.cmts_mac_addr",
10464
15
       FT_ETHER, BASE_NONE, NULL, 0x0,
10465
15
       NULL,
10466
15
       HFILL
10467
15
     }
10468
15
    },
10469
15
    {&hf_docsis_dccreq_key_seq_num ,
10470
15
     {
10471
15
       "Auth Key Sequence Number",
10472
15
       "docsis_dccreq.key_seq_num",
10473
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10474
15
       NULL,
10475
15
       HFILL
10476
15
     }
10477
15
    },
10478
15
    {&hf_docsis_dccreq_hmac_digest ,
10479
15
     {
10480
15
       "HMAC-DigestNumber",
10481
15
       "docsis_dccreq.hmac_digest",
10482
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
10483
15
       NULL,
10484
15
       HFILL
10485
15
     }
10486
15
    },
10487
    /* DCC-RSP */
10488
15
    {&hf_docsis_dccrsp_conf_code ,
10489
15
     {
10490
15
       "Confirmation Code",
10491
15
       "docsis_dccrsp.conf_code",
10492
15
       FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
10493
15
       NULL,
10494
15
       HFILL
10495
15
     }
10496
15
    },
10497
15
    {&hf_docsis_dccrsp_type,
10498
15
     {
10499
15
      "Type",
10500
15
      "docsis_dccrsp.tlvtype",
10501
15
      FT_UINT8, BASE_DEC, VALS(dccrsp_tlv_vals), 0x0,
10502
15
      NULL,
10503
15
      HFILL
10504
15
     }
10505
15
    },
10506
15
    {&hf_docsis_dccrsp_length,
10507
15
     {
10508
15
      "Length",
10509
15
      "docsis_dccrsp.tlvlen",
10510
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10511
15
      NULL,
10512
15
      HFILL
10513
15
     }
10514
15
    },
10515
15
    {&hf_docsis_dcc_cm_jump_subtype,
10516
15
     {
10517
15
      "Type",
10518
15
      "docsis_dccrsp.cm_jump_tlvtype",
10519
15
      FT_UINT8, BASE_DEC, VALS(cm_jump_subtlv_vals), 0x0,
10520
15
      NULL,
10521
15
      HFILL
10522
15
     }
10523
15
    },
10524
15
    {&hf_docsis_dcc_cm_jump_length,
10525
15
     {
10526
15
      "Length",
10527
15
      "docsis_dccrsp.cm_jump_tlvlen",
10528
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10529
15
      NULL,
10530
15
      HFILL
10531
15
     }
10532
15
    },
10533
15
    {&hf_docsis_dccrsp_cm_jump_time_length ,
10534
15
     {
10535
15
       "Length of Jump",
10536
15
       "docsis_dccrsp.cm_jump_time_length",
10537
15
       FT_UINT32, BASE_DEC, NULL, 0x0,
10538
15
       NULL,
10539
15
       HFILL
10540
15
     }
10541
15
    },
10542
15
    {&hf_docsis_dccrsp_cm_jump_time_start ,
10543
15
     {
10544
15
       "Start Time of Jump",
10545
15
       "docsis_dccrsp.cm_jump_time_start",
10546
15
       FT_UINT64, BASE_DEC, NULL, 0x0,
10547
15
       NULL,
10548
15
       HFILL
10549
15
     }
10550
15
    },
10551
15
    {&hf_docsis_dccrsp_key_seq_num ,
10552
15
     {
10553
15
       "Auth Key Sequence Number",
10554
15
       "docsis_dccrsp.key_seq_num",
10555
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10556
15
       NULL,
10557
15
       HFILL
10558
15
     }
10559
15
    },
10560
15
    {&hf_docsis_dccrsp_hmac_digest ,
10561
15
     {
10562
15
       "HMAC-Digest Number",
10563
15
       "docsis_dccrsp.hmac_digest",
10564
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
10565
15
       NULL,
10566
15
       HFILL
10567
15
     }
10568
15
    },
10569
    /* DCC-ACK */
10570
15
    {&hf_docsis_dccack_type,
10571
15
     {
10572
15
      "Type",
10573
15
      "docsis_dccack.tlvtype",
10574
15
      FT_UINT8, BASE_DEC, VALS(dccack_tlv_vals), 0x0,
10575
15
      NULL,
10576
15
      HFILL
10577
15
     }
10578
15
    },
10579
15
    {&hf_docsis_dccack_length,
10580
15
     {
10581
15
      "Length",
10582
15
      "docsis_dccack.tlvlen",
10583
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10584
15
      NULL,
10585
15
      HFILL
10586
15
     }
10587
15
    },
10588
15
    {&hf_docsis_dccack_key_seq_num ,
10589
15
     {
10590
15
       "Auth Key Sequence Number",
10591
15
       "docsis_dccack.key_seq_num",
10592
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10593
15
       NULL,
10594
15
       HFILL
10595
15
     }
10596
15
    },
10597
15
    {&hf_docsis_dccack_hmac_digest ,
10598
15
     {
10599
15
       "HMAC-DigestNumber",
10600
15
       "docsis_dccack.hmac_digest",
10601
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
10602
15
       NULL,
10603
15
       HFILL
10604
15
     }
10605
15
    },
10606
    /* INIT_RNG_REQ */
10607
15
    {&hf_docsis_intrngreq_sid,
10608
15
     {"Service Identifier", "docsis_intrngreq.sid",
10609
15
      FT_UINT16, BASE_DEC, NULL, 0x3FFF,
10610
15
      NULL, HFILL}
10611
15
    },
10612
    /* DCD */
10613
15
    {&hf_docsis_dcd_config_ch_cnt,
10614
15
     {
10615
15
       "Configuration Change Count",
10616
15
       "docsis_dcd.config_ch_cnt",
10617
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10618
15
       NULL,
10619
15
       HFILL
10620
15
     }
10621
15
    },
10622
15
    {&hf_docsis_dcd_num_of_frag,
10623
15
     {
10624
15
       "Number of Fragments",
10625
15
       "docsis_dcd.num_of_frag",
10626
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10627
15
       NULL,
10628
15
       HFILL
10629
15
     }
10630
15
    },
10631
15
    {&hf_docsis_dcd_frag_sequence_num,
10632
15
     {
10633
15
       "Fragment Sequence Number",
10634
15
       "docsis_dcd.frag_sequence_num",
10635
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10636
15
       NULL,
10637
15
       HFILL
10638
15
     }
10639
15
    },
10640
15
    {&hf_docsis_dcd_type,
10641
15
     {
10642
15
      "Type",
10643
15
      "docsis_dcd.tlvtype",
10644
15
      FT_UINT8, BASE_DEC, VALS(dcd_tlv_vals), 0x0,
10645
15
      NULL,
10646
15
      HFILL
10647
15
     }
10648
15
    },
10649
15
    {&hf_docsis_dcd_length,
10650
15
     {
10651
15
      "Length",
10652
15
      "docsis_dcd.tlvlen",
10653
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10654
15
      NULL,
10655
15
      HFILL
10656
15
     }
10657
15
    },
10658
15
    {&hf_docsis_dcd_down_classifier_subtype,
10659
15
     {
10660
15
      "Type",
10661
15
      "docsis_dcd.down_classifier_tlvtype",
10662
15
      FT_UINT8, BASE_DEC, VALS(dcd_down_classifier_vals), 0x0,
10663
15
      NULL,
10664
15
      HFILL
10665
15
     }
10666
15
    },
10667
15
    {&hf_docsis_dcd_down_classifier_length,
10668
15
     {
10669
15
      "Length",
10670
15
      "docsis_dcd.down_classifier_tlvlen",
10671
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10672
15
      NULL,
10673
15
      HFILL
10674
15
     }
10675
15
    },
10676
15
    {&hf_docsis_dcd_cfr_id,
10677
15
     {
10678
15
       "Downstream Classifier ID",
10679
15
       "docsis_dcd.cfr_id",
10680
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10681
15
       NULL,
10682
15
       HFILL
10683
15
     }
10684
15
    },
10685
15
    {&hf_docsis_dcd_cfr_rule_pri,
10686
15
     {
10687
15
       "Downstream Classifier Rule Priority",
10688
15
       "docsis_dcd.cfr_rule_pri",
10689
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10690
15
       NULL,
10691
15
       HFILL
10692
15
     }
10693
15
    },
10694
15
    {&hf_docsis_dcd_cfr_ip_subtype,
10695
15
     {
10696
15
      "Type",
10697
15
      "docsis_dcd.cfr_ip_tlvtype",
10698
15
      FT_UINT8, BASE_DEC, VALS(dcd_cfr_ip_vals), 0x0,
10699
15
      NULL,
10700
15
      HFILL
10701
15
     }
10702
15
    },
10703
15
    {&hf_docsis_dcd_cfr_ip_length,
10704
15
     {
10705
15
      "Length",
10706
15
      "docsis_dcd.cfr_ip_tlvlen",
10707
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10708
15
      NULL,
10709
15
      HFILL
10710
15
     }
10711
15
    },
10712
15
    {&hf_docsis_dcd_cfr_ip_source_addr,
10713
15
     {
10714
15
       "Downstream Classifier IP Source Address",
10715
15
       "docsis_dcd.cfr_ip_source_addr",
10716
15
       FT_IPv4, BASE_NONE, NULL, 0x0,
10717
15
       NULL,
10718
15
       HFILL
10719
15
     }
10720
15
    },
10721
15
    {&hf_docsis_dcd_cfr_ip_source_mask,
10722
15
     {
10723
15
       "Downstream Classifier IP Source Mask",
10724
15
       "docsis_dcd.cfr_ip_source_mask",
10725
15
       FT_IPv4, BASE_NETMASK, NULL, 0x0,
10726
15
       NULL,
10727
15
       HFILL
10728
15
     }
10729
15
    },
10730
15
    {&hf_docsis_dcd_cfr_ip_dest_addr,
10731
15
     {
10732
15
       "Downstream Classifier IP Destination Address",
10733
15
       "docsis_dcd.cfr_ip_dest_addr",
10734
15
       FT_IPv4, BASE_NONE, NULL, 0x0,
10735
15
       NULL,
10736
15
       HFILL
10737
15
     }
10738
15
    },
10739
15
    {&hf_docsis_dcd_cfr_ip_dest_mask,
10740
15
     {
10741
15
       "Downstream Classifier IP Destination Mask",
10742
15
       "docsis_dcd.cfr_ip_dest_mask",
10743
15
       FT_IPv4, BASE_NETMASK, NULL, 0x0,
10744
15
       "Downstream Classifier IP Destination Address",
10745
15
       HFILL
10746
15
     }
10747
15
    },
10748
15
    {&hf_docsis_dcd_cfr_tcpudp_srcport_start,
10749
15
     {
10750
15
       "Downstream Classifier IP TCP/UDP Source Port Start",
10751
15
       "docsis_dcd.cfr_ip_tcpudp_srcport_start",
10752
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10753
15
       NULL,
10754
15
       HFILL
10755
15
     }
10756
15
    },
10757
15
    {&hf_docsis_dcd_cfr_tcpudp_srcport_end,
10758
15
     {
10759
15
       "Downstream Classifier IP TCP/UDP Source Port End",
10760
15
       "docsis_dcd.cfr_ip_tcpudp_srcport_end",
10761
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10762
15
       NULL,
10763
15
       HFILL
10764
15
     }
10765
15
    },
10766
15
    {&hf_docsis_dcd_cfr_tcpudp_dstport_start,
10767
15
     {
10768
15
       "Downstream Classifier IP TCP/UDP Destination Port Start",
10769
15
       "docsis_dcd.cfr_ip_tcpudp_dstport_start",
10770
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10771
15
       NULL,
10772
15
       HFILL
10773
15
     }
10774
15
    },
10775
15
    {&hf_docsis_dcd_cfr_tcpudp_dstport_end,
10776
15
     {
10777
15
       "Downstream Classifier IP TCP/UDP Destination Port End",
10778
15
       "docsis_dcd.cfr_ip_tcpudp_dstport_end",
10779
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10780
15
       NULL,
10781
15
       HFILL
10782
15
     }
10783
15
    },
10784
15
    {&hf_docsis_dcd_rule_id,
10785
15
     {
10786
15
       "DSG Rule ID",
10787
15
       "docsis_dcd.rule_id",
10788
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10789
15
       NULL,
10790
15
       HFILL
10791
15
     }
10792
15
    },
10793
15
    {&hf_docsis_dcd_rule_pri,
10794
15
     {
10795
15
       "DSG Rule Priority",
10796
15
       "docsis_dcd.rule_pri",
10797
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
10798
15
       NULL,
10799
15
       HFILL
10800
15
     }
10801
15
    },
10802
15
    {&hf_docsis_dcd_rule_ucid_list,
10803
15
     {
10804
15
       "DSG Rule UCID Range",
10805
15
       "docsis_dcd.rule_ucid_list",
10806
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
10807
15
       NULL,
10808
15
       HFILL
10809
15
     }
10810
15
    },
10811
15
    {&hf_docsis_dcd_clid_subtype,
10812
15
     {
10813
15
      "Type",
10814
15
      "docsis_dcd.clid_tlvtype",
10815
15
      FT_UINT8, BASE_DEC, VALS(dcd_clid_vals), 0x0,
10816
15
      NULL,
10817
15
      HFILL
10818
15
     }
10819
15
    },
10820
15
    {&hf_docsis_dcd_clid_length,
10821
15
     {
10822
15
      "Length",
10823
15
      "docsis_dcd.clid_tlvlen",
10824
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10825
15
      NULL,
10826
15
      HFILL
10827
15
     }
10828
15
    },
10829
15
    {&hf_docsis_dcd_clid_bcast_id,
10830
15
     {
10831
15
       "DSG Rule Client ID Broadcast ID",
10832
15
       "docsis_dcd.clid_bcast_id",
10833
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10834
15
       NULL,
10835
15
       HFILL
10836
15
     }
10837
15
    },
10838
15
    {&hf_docsis_dcd_clid_known_mac_addr,
10839
15
     {
10840
15
       "DSG Rule Client ID Known MAC Address",
10841
15
       "docsis_dcd.clid_known_mac_addr",
10842
15
       FT_ETHER, BASE_NONE, NULL, 0x0,
10843
15
       NULL,
10844
15
       HFILL
10845
15
     }
10846
15
    },
10847
15
    {&hf_docsis_dcd_clid_ca_sys_id,
10848
15
     {
10849
15
       "DSG Rule Client ID CA System ID",
10850
15
       "docsis_dcd.clid_ca_sys_id",
10851
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10852
15
       NULL,
10853
15
       HFILL
10854
15
     }
10855
15
    },
10856
15
    {&hf_docsis_dcd_clid_app_id,
10857
15
     {
10858
15
       "DSG Rule Client ID Application ID",
10859
15
       "docsis_dcd.clid_app_id",
10860
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10861
15
       NULL,
10862
15
       HFILL
10863
15
     }
10864
15
    },
10865
15
    {&hf_docsis_dcd_dsg_rule_subtype,
10866
15
     {
10867
15
      "Type",
10868
15
      "docsis_dcd.rule_tlvtype",
10869
15
      FT_UINT8, BASE_DEC, VALS(dcd_dsg_rule_vals), 0x0,
10870
15
      NULL,
10871
15
      HFILL
10872
15
     }
10873
15
    },
10874
15
    {&hf_docsis_dcd_dsg_rule_length,
10875
15
     {
10876
15
      "Length",
10877
15
      "docsis_dcd.rule_tlvlen",
10878
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10879
15
      NULL,
10880
15
      HFILL
10881
15
     }
10882
15
    },
10883
15
    {&hf_docsis_dcd_rule_tunl_addr,
10884
15
     {
10885
15
       "DSG Rule Tunnel MAC Address",
10886
15
       "docsis_dcd.rule_tunl_addr",
10887
15
       FT_ETHER, BASE_NONE, NULL, 0x0,
10888
15
       NULL,
10889
15
       HFILL
10890
15
     }
10891
15
    },
10892
15
    {&hf_docsis_dcd_rule_cfr_id,
10893
15
     {
10894
15
       "DSG Rule Classifier ID",
10895
15
       "docsis_dcd.rule_cfr_id",
10896
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10897
15
       NULL,
10898
15
       HFILL
10899
15
     }
10900
15
    },
10901
15
    {&hf_docsis_dcd_rule_vendor_spec,
10902
15
     {
10903
15
       "DSG Rule Vendor Specific Parameters",
10904
15
       "docsis_dcd.rule_vendor_spec",
10905
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
10906
15
       NULL,
10907
15
       HFILL
10908
15
     }
10909
15
    },
10910
15
    {&hf_docsis_dcd_cfg_subtype,
10911
15
     {
10912
15
      "Type",
10913
15
      "docsis_dcd.cfg_tlvtype",
10914
15
      FT_UINT8, BASE_DEC, VALS(dcd_cfg_vals), 0x0,
10915
15
      NULL,
10916
15
      HFILL
10917
15
     }
10918
15
    },
10919
15
    {&hf_docsis_dcd_cfg_length,
10920
15
     {
10921
15
      "Length",
10922
15
      "docsis_dcd.cfg_tlvlen",
10923
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10924
15
      NULL,
10925
15
      HFILL
10926
15
     }
10927
15
    },
10928
15
    {&hf_docsis_dcd_cfg_chan,
10929
15
     {
10930
15
       "DSG Configuration Channel",
10931
15
       "docsis_dcd.cfg_chan",
10932
15
       FT_UINT32, BASE_DEC, NULL, 0x0,
10933
15
       NULL,
10934
15
       HFILL
10935
15
     }
10936
15
    },
10937
15
    {&hf_docsis_dcd_cfg_tdsg1,
10938
15
     {
10939
15
       "DSG Initialization Timeout (Tdsg1)",
10940
15
       "docsis_dcd.cfg_tdsg1",
10941
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10942
15
       NULL,
10943
15
       HFILL
10944
15
     }
10945
15
    },
10946
15
    {&hf_docsis_dcd_cfg_tdsg2,
10947
15
     {
10948
15
       "DSG Operational Timeout (Tdsg2)",
10949
15
       "docsis_dcd.cfg_tdsg2",
10950
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10951
15
       NULL,
10952
15
       HFILL
10953
15
     }
10954
15
    },
10955
15
    {&hf_docsis_dcd_cfg_tdsg3,
10956
15
     {
10957
15
       "DSG Two-Way Retry Timer (Tdsg3)",
10958
15
       "docsis_dcd.cfg_tdsg3",
10959
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10960
15
       NULL,
10961
15
       HFILL
10962
15
     }
10963
15
    },
10964
15
    {&hf_docsis_dcd_cfg_tdsg4,
10965
15
     {
10966
15
       "DSG One-Way Retry Timer (Tdsg4)",
10967
15
       "docsis_dcd.cfg_tdsg4",
10968
15
       FT_UINT16, BASE_DEC, NULL, 0x0,
10969
15
       NULL,
10970
15
       HFILL
10971
15
     }
10972
15
    },
10973
15
    {&hf_docsis_dcd_cfg_vendor_spec,
10974
15
     {
10975
15
       "DSG Configuration Vendor Specific Parameters",
10976
15
       "docsis_dcd.cfg_vendor_spec",
10977
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
10978
15
       NULL,
10979
15
       HFILL
10980
15
     }
10981
15
    },
10982
    /* MDD */
10983
15
    {&hf_docsis_mdd_ccc,
10984
15
     {"Configuration Change Count", "docsis_mdd.ccc",
10985
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10986
15
      "MDD Configuration Change Count", HFILL}
10987
15
    },
10988
15
    {&hf_docsis_mdd_number_of_fragments,
10989
15
     {"Number of Fragments", "docsis_mdd.number_of_fragments",
10990
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10991
15
      "MDD Number of Fragments", HFILL}
10992
15
    },
10993
15
    {&hf_docsis_mdd_fragment_sequence_number,
10994
15
     {"Fragment Sequence Number", "docsis_mdd.fragment_sequence_number",
10995
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
10996
15
      "MDD Fragment Sequence Number", HFILL}
10997
15
    },
10998
15
    {&hf_docsis_mdd_current_channel_dcid,
10999
15
     {"Current Channel DCID", "docsis_mdd.current_channel_dcid",
11000
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11001
15
      "MDD Current Channel DCID", HFILL}
11002
15
    },
11003
15
    {&hf_docsis_mdd_tlv,
11004
15
     {"TLV", "docsis_mdd.tlv",
11005
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
11006
15
      NULL, HFILL}
11007
15
    },
11008
15
    {&hf_docsis_mdd_tlv_type,
11009
15
     {"Type", "docsis_mdd.tlv.type",
11010
15
      FT_UINT8, BASE_DEC, VALS(mdd_tlv_vals), 0x0,
11011
15
      NULL, HFILL}
11012
15
    },
11013
15
    {&hf_docsis_mdd_tlv_length,
11014
15
     {"Length", "docsis_mdd.tlv.length",
11015
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11016
15
      NULL, HFILL}
11017
15
    },
11018
15
    {&hf_docsis_mdd_ds_active_channel_list_subtype,
11019
15
     {"Type", "docsis_mdd.downstream_active_channel_list_tlvtype",
11020
15
      FT_UINT8, BASE_DEC, VALS(mdd_ds_active_channel_list_vals), 0x0,
11021
15
      NULL, HFILL}
11022
15
    },
11023
15
    {&hf_docsis_mdd_ds_active_channel_list_length,
11024
15
     {"Length", "docsis_mdd.downstream_active_channel_list_tlvlen",
11025
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11026
15
      NULL, HFILL}
11027
15
    },
11028
15
    {&hf_docsis_mdd_downstream_active_channel_list_channel_id,
11029
15
     {"Channel ID", "docsis_mdd.downstream_active_channel_list_channel_id",
11030
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11031
15
      "MDD Downstream Active Channel List Channel ID", HFILL}
11032
15
    },
11033
15
    {&hf_docsis_mdd_downstream_active_channel_list_frequency,
11034
15
     {"Frequency", "docsis_mdd.downstream_active_channel_list_frequency",
11035
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
11036
15
      "MDD Downstream Active Channel List Frequency", HFILL}
11037
15
    },
11038
15
    {&hf_docsis_mdd_downstream_active_channel_list_annex,
11039
15
     {"Annex", "docsis_mdd.downstream_active_channel_list_annex",
11040
15
      FT_UINT8, BASE_DEC, VALS(J83_annex_vals), 0xF0,
11041
15
      "MDD Downstream Active Channel List Annex", HFILL}
11042
15
    },
11043
15
    {&hf_docsis_mdd_downstream_active_channel_list_modulation_order,
11044
15
     {"Modulation Order", "docsis_mdd.downstream_active_channel_list_modulation_order",
11045
15
      FT_UINT8, BASE_DEC, VALS(modulation_order_vals), 0x0F,
11046
15
      "MDD Downstream Active Channel List Modulation Order", HFILL}
11047
15
    },
11048
15
    {&hf_docsis_mdd_downstream_active_channel_list_primary_capable,
11049
15
     {"Primary Capable", "docsis_mdd.downstream_active_channel_list_primary_capable",
11050
15
      FT_UINT8, BASE_DEC, VALS(primary_capable_vals), 0x0,
11051
15
      "MDD Downstream Active Channel List Primary Capable", HFILL}
11052
15
    },
11053
15
    {&hf_docsis_mdd_cm_status_event_enable_bitmask,
11054
15
     {"CM-STATUS Event Enable Bitmask", "docsis_mdd.cm_status_event_enable_bitmask",
11055
15
      FT_UINT16, BASE_HEX, NULL, 0x0,
11056
15
      NULL, HFILL}
11057
15
    },
11058
15
    {&hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_timeout,
11059
15
     {"MDD Timeout", "docsis_mdd.downstream_active_channel_list_mdd_timeout",
11060
15
      FT_UINT16, BASE_DEC, NULL, 0x0002,
11061
15
      "MDD Downstream Active Channel List MDD Timeout", HFILL}
11062
15
    },
11063
15
    {&hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_failure,
11064
15
     {"QAM/FEC Lock Failure", "docsis_mdd.cm_status_event_enable_bitmask_qam_fec_lock_failure",
11065
15
      FT_UINT16, BASE_DEC, NULL, 0x0004,
11066
15
      "MDD Downstream Active Channel List QAM/FEC Lock Failure", HFILL}
11067
15
    },
11068
15
    {&hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_recovery,
11069
15
     {"MDD Recovery", "docsis_mdd.cm_status_event_enable_bitmask_mdd_recovery",
11070
15
      FT_UINT16, BASE_DEC, NULL, 0x0010,
11071
15
      "CM-STATUS event MDD Recovery", HFILL}
11072
15
    },
11073
15
    {&hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_recovery,
11074
15
     {"QAM/FEC Lock Recovery", "docsis_mdd.cm_status_event_enable_bitmask_qam_fec_lock_recovery",
11075
15
      FT_UINT16, BASE_DEC, NULL, 0x0020,
11076
15
      "CM-STATUS event QAM/FEC Lock Recovery", HFILL}
11077
15
    },
11078
15
    {&hf_docsis_mdd_downstream_active_channel_list_map_ucd_transport_indicator,
11079
15
     {"MAP and UCD transport indicator", "docsis_mdd.downstream_active_channel_list_map_ucd_transport_indicator",
11080
15
      FT_UINT8, BASE_DEC, VALS(map_ucd_transport_indicator_vals), 0x0,
11081
15
      "MDD Downstream Active Channel List MAP and UCD Transport Indicator", HFILL}
11082
15
    },
11083
15
    {&hf_docsis_mdd_downstream_active_channel_list_fdx_sub_band_id,
11084
15
     {"Full Duplex Sub-band ID", "docsis_mdd.downstream_active_channel_list_fdx_subband_id",
11085
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11086
15
      NULL, HFILL}
11087
15
    },
11088
15
    {&hf_docsis_mdd_downstream_active_channel_list_fdx_ds,
11089
15
     {"FDX Downstream", "docsis_mdd.downstream_active_channel_list_fdx_ds",
11090
15
      FT_UINT8, BASE_DEC, VALS(mdd_downstream_active_channel_list_fdx_vals), 0x0,
11091
15
      "MDD Downstream Active Channel List FDX Downstream Indicator", HFILL}
11092
15
    },
11093
15
    {&hf_docsis_mdd_ofdm_plc_parameters,
11094
15
     {"OFDM PLC Parameters", "docsis_mdd.ofdm_plc_parameters",
11095
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
11096
15
      NULL, HFILL}
11097
15
    },
11098
15
    {&hf_docsis_mdd_ofdm_plc_parameters_tukey_raised_cosine_window,
11099
15
     {"Tukey raised cosine window", "docsis_mdd.ofdm_plc_parameters_tukey_raised_cosine_window",
11100
15
      FT_UINT8, BASE_DEC, VALS(tukey_raised_cosine_vals), 0x07,
11101
15
      "OFDM PLC Parameters Tukey raised cosine window", HFILL}
11102
15
    },
11103
15
    {&hf_docsis_mdd_ofdm_plc_parameters_cyclic_prefix,
11104
15
     {"Cyclic prefix", "docsis_mdd.ofdm_plc_parameters_cyclic_prefix",
11105
15
      FT_UINT8, BASE_DEC, VALS(cyclic_prefix_vals), 0x38,
11106
15
      "OFDM PLC parameters Cyclic prefix", HFILL}
11107
15
    },
11108
15
    {&hf_docsis_mdd_ofdm_plc_parameters_sub_carrier_spacing,
11109
15
     {"Sub carrier spacing", "docsis_mdd.ofdm_plc_parameters_sub_carrier_spacing",
11110
15
      FT_UINT8, BASE_DEC, VALS(spacing_vals), 0x40,
11111
15
      "OFDM PLC parameters Sub carrier spacing", HFILL}
11112
15
    },
11113
15
    {&hf_docsis_mdd_up_active_channel_list_subtype,
11114
15
     {"Type", "docsis_mdd.up_active_channel_list_tlvtype",
11115
15
      FT_UINT8, BASE_DEC, VALS(mdd_up_active_channel_list_vals), 0x0,
11116
15
      NULL, HFILL}
11117
15
    },
11118
15
    {&hf_docsis_mdd_up_active_channel_list_length,
11119
15
     {"Length", "docsis_mdd.up_active_channel_list_tlvlen",
11120
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11121
15
      NULL, HFILL}
11122
15
    },
11123
15
    {&hf_docsis_mdd_cm_status_event_enable_bitmask_t4_timeout,
11124
15
     {"T4 timeout", "docsis_mdd.cm_status_event_enable_bitmask_t4_timeout",
11125
15
      FT_UINT16, BASE_DEC, NULL, 0x0040,
11126
15
      "CM-STATUS event T4 timeout", HFILL}
11127
15
    },
11128
15
    {&hf_docsis_mdd_cm_status_event_enable_bitmask_t3_retries_exceeded,
11129
15
     {"T3 Retries Exceeded", "docsis_mdd.cm_status_event_enable_bitmask_t3_retries_exceeded",
11130
15
      FT_UINT16, BASE_DEC, NULL, 0x0080,
11131
15
      "CM-STATUS event T3 Retries Exceeded", HFILL}
11132
15
    },
11133
15
    {&hf_docsis_mdd_cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded,
11134
15
     {"Successful Ranging after T3 Retries Exceeded", "docsis_mdd.cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded",
11135
15
      FT_UINT16, BASE_DEC, NULL, 0x0100,
11136
15
      "CM-STATUS event Successful Ranging after T3 Retries Exceeded", HFILL}
11137
15
    },
11138
15
    {&hf_docsis_mdd_mac_domain_downstream_service_group_channel_id,
11139
15
     {"Channel ID", "docsis_mdd.mac_domain_downstream_service_group_channel_id",
11140
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11141
15
      "MDD MAC Domain Downstream Service Group Channel ID", HFILL}
11142
15
    },
11143
15
    {&hf_docsis_mdd_ds_service_group_subtype,
11144
15
     {"Type", "docsis_mdd.ds_service_group_type",
11145
15
      FT_UINT8, BASE_DEC, VALS(mdd_ds_service_group_vals), 0x0,
11146
15
      NULL, HFILL}
11147
15
    },
11148
15
    {&hf_docsis_mdd_ds_service_group_length,
11149
15
     {"Length", "docsis_mdd.ds_service_group_length",
11150
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11151
15
      NULL, HFILL}
11152
15
    },
11153
15
    {&hf_docsis_mdd_mac_domain_downstream_service_group_md_ds_sg_identifier,
11154
15
     {"MD-DS-SG Identifier", "docsis_mdd.mac_domain_downstream_service_group_md_ds_sg_identifier",
11155
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11156
15
      "MDD MAC Domain Downstream Service Group MD-DS-SG Identifier", HFILL}
11157
15
    },
11158
15
    {&hf_docsis_mdd_downstream_ambiguity_resolution_frequency,
11159
15
     {"Frequency", "docsis_mdd.downstream_ambiguity_resolution_frequency",
11160
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
11161
15
      "MDD Downstream Ambiguity Resolution frequency", HFILL}
11162
15
    },
11163
15
    {&hf_docsis_mdd_channel_profile_reporting_control_subtype,
11164
15
     {"Type", "docsis_mdd.channel_profile_reporting_control_type",
11165
15
      FT_UINT8, BASE_DEC, VALS(mdd_channel_profile_reporting_control_vals), 0x0,
11166
15
      NULL, HFILL}
11167
15
    },
11168
15
    {&hf_docsis_mdd_channel_profile_reporting_control_length,
11169
15
     {"Length", "docsis_mdd.channel_profile_reporting_control_length",
11170
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11171
15
      NULL, HFILL}
11172
15
    },
11173
15
    {&hf_docsis_mdd_rcp_center_frequency_spacing,
11174
15
     {"RCP Center Frequency Spacing", "docsis_mdd.rcp_center_frequency_spacing",
11175
15
      FT_UINT8, BASE_DEC, VALS(rcp_center_frequency_spacing_vals), 0x0,
11176
15
      "MDD RCP Center Frequency Spacing", HFILL}
11177
15
    },
11178
15
    {&hf_docsis_mdd_verbose_rcp_reporting,
11179
15
     {"Verbose RCP reporting", "docsis_mdd.verbose_rcp_reporting",
11180
15
      FT_UINT8, BASE_DEC, VALS(verbose_rcp_reporting_vals), 0x0,
11181
15
      "MDD Verbose RCP Reporting", HFILL}
11182
15
    },
11183
15
    {&hf_docsis_mdd_fragmented_rcp_transmission,
11184
15
     {"Fragmented RCP transmission", "docsis_mdd.fragmented_rcp_transmission",
11185
15
      FT_UINT8, BASE_DEC, VALS(fragmented_rcp_transmission_vals), 0x0,
11186
15
      "MDD Fragmented RCP transmission", HFILL}
11187
15
    },
11188
15
    {&hf_docsis_mdd_ip_init_param_subtype,
11189
15
     {"Type", "docsis_mdd.ip_init_param_type",
11190
15
      FT_UINT8, BASE_DEC, VALS(mdd_ip_init_param_vals), 0x0,
11191
15
      NULL, HFILL}
11192
15
    },
11193
15
    {&hf_docsis_mdd_ip_init_param_length,
11194
15
     {"Length", "docsis_mdd.ip_init_param_length",
11195
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11196
15
      NULL, HFILL}
11197
15
    },
11198
15
    {&hf_docsis_mdd_ip_provisioning_mode,
11199
15
     {"IP Provisioning Mode", "docsis_mdd.ip_provisioning_mode",
11200
15
      FT_UINT8, BASE_DEC, VALS(ip_provisioning_mode_vals), 0x0,
11201
15
      "MDD IP Provisioning Mode", HFILL}
11202
15
    },
11203
15
    {&hf_docsis_mdd_pre_registration_dsid,
11204
15
     {"Pre-registration DSID", "docsis_mdd.pre_registration_dsid",
11205
15
      FT_UINT24, BASE_DEC, NULL, 0x0FFFFF,
11206
15
      "MDD Pre-registration DSID", HFILL}
11207
15
    },
11208
15
    {&hf_docsis_mdd_early_authentication_and_encryption,
11209
15
     {"Early Authentication and Encryption", "docsis_mdd.early_authentication_and_encryption",
11210
15
      FT_UINT8, BASE_DEC, VALS(eae_vals), 0x0,
11211
15
      "MDD Early Authentication and Encryption", HFILL}
11212
15
    },
11213
15
    {&hf_docsis_mdd_upstream_active_channel_list_upstream_channel_id,
11214
15
     {"Upstream Channel ID", "docsis_mdd.upstream_active_channel_list_upstream_channel_id",
11215
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11216
15
      "MDD Upstream Active Channel List - Upstream Channel ID", HFILL}
11217
15
    },
11218
15
    {&hf_docsis_mdd_upstream_active_channel_list_upstream_channel_priority,
11219
15
     {"Upstream Channel Priority", "docsis_mdd.upstream_active_channel_list_upstream_channel_priority",
11220
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11221
15
      "MDD Upstream Active Channel List - Upstream Channel Priority", HFILL}
11222
15
    },
11223
15
    {&hf_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds,
11224
15
     {"Downstream Channel(s) on which MAPs and UCDs for this Upstream Channel are sent", "docsis_mdd.upstream_active_channel_list_dschids_maps_ucds",
11225
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
11226
15
      "MDD Upstream Active Channel List - Downstream Channel(s) on which MAPs and UCDs for this Upstream Channel are sent", HFILL}
11227
15
    },
11228
15
    {&hf_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds_dschid,
11229
15
     {"Downstream Channel ID", "docsis_mdd.upstream_active_channel_list_dschids_maps_ucds.dschid",
11230
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11231
15
      "MDD Upstream Active Channel List - ID of Downstream Channel on which MAPs and UCDs for this Upstream Channel are sent", HFILL}
11232
15
    },
11233
15
    {&hf_docsis_mdd_upstream_active_channel_list_fdx_upstream_channel,
11234
15
     {"FDX Upstream Channel", "docsis_mdd.upstream_active_channel_list_fdx_upstream_channel",
11235
15
      FT_UINT8, BASE_DEC, VALS(extended_us_channel_vals), 0x0,
11236
15
      "MDD Upstream Active Channel List - FDX Upstream Channel", HFILL}
11237
15
    },
11238
15
    {&hf_docsis_mdd_upstream_active_channel_list_fdx_subband_id,
11239
15
     {"FDX Sub-band ID", "docsis_mdd.upstream_active_channel_list_fdx_subband_id",
11240
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11241
15
      "MDD Upstream Active Channel List - FDX Sub-band ID", HFILL}
11242
15
    },
11243
15
    {&hf_docsis_mdd_upstream_ambiguity_resolution_channel_list_channel_id,
11244
15
     {"Channel ID", "docsis_mdd.upstream_ambiguity_resolution_channel_list_channel_id",
11245
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11246
15
      "MDD MAC Domain Upstream Ambiguity Resolution Channel List Channel ID", HFILL}
11247
15
    },
11248
15
    {&hf_docsis_mdd_upstream_frequency_range,
11249
15
     {"Upstream Frequency Range", "docsis_mdd.upstream_frequency_range",
11250
15
      FT_UINT8, BASE_DEC, VALS(upstream_frequency_range_vals), 0x0,
11251
15
      "MDD Upstream Frequency Range", HFILL}
11252
15
    },
11253
15
    {&hf_docsis_mdd_symbol_clock_locking_indicator,
11254
15
     {"Symbol Clock Locking Indicator", "docsis_mdd.symbol_clock_locking_indicator",
11255
15
      FT_UINT8, BASE_DEC, VALS(symbol_clock_locking_indicator_vals), 0x0,
11256
15
      "MDD Symbol Clock Locking Indicator", HFILL}
11257
15
    },
11258
15
    {&hf_docsis_mdd_cm_status_event_control_subtype,
11259
15
     {"Type", "docsis_mdd.cm_status_event_control_type",
11260
15
      FT_UINT8, BASE_DEC, VALS(mdd_cm_status_event_control_vals), 0x0,
11261
15
      NULL, HFILL}
11262
15
    },
11263
15
    {&hf_docsis_mdd_cm_status_event_control_length,
11264
15
     {"Length", "docsis_mdd.cm_status_event_control_length",
11265
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11266
15
      NULL, HFILL}
11267
15
    },
11268
15
    {&hf_docsis_mdd_event_type,
11269
15
     {"Event Type", "docsis_mdd.event_type",
11270
15
      FT_UINT8, BASE_DEC, VALS(symbol_cm_status_event_vals), 0x0,
11271
15
      "MDD CM-STATUS Event Type", HFILL}
11272
15
    },
11273
15
    {&hf_docsis_mdd_maximum_event_holdoff_timer,
11274
15
     {"Maximum Event Holdoff Timer (units of 20 ms)", "docsis_mdd.maximum_event_holdoff_timer",
11275
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
11276
15
      "MDD Maximum Event Holdoff Timer", HFILL}
11277
15
    },
11278
15
    {&hf_docsis_mdd_maximum_number_of_reports_per_event,
11279
15
     {"Maximum Number of Reports per Event", "docsis_mdd.maximum_number_of_reports_per_event",
11280
15
      FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(unique_unlimited), 0x0,
11281
15
      "MDD Maximum Number of Reports per Event", HFILL}
11282
15
    },
11283
15
    {&hf_docsis_mdd_upstream_transmit_power_reporting,
11284
15
     {"Upstream Transmit Power Reporting", "docsis_mdd.upstream_transmit_power_reporting",
11285
15
      FT_UINT8, BASE_DEC, VALS(upstream_transmit_power_reporting_vals), 0x0,
11286
15
      "MDD Upstream Transmit Power Reporting", HFILL}
11287
15
    },
11288
15
    {&hf_docsis_mdd_dsg_da_to_dsid_subtype,
11289
15
     {"Type", "docsis_mdd.dsg_da_to_dsid_type",
11290
15
      FT_UINT8, BASE_DEC, VALS(mdd_cm_dsg_da_to_dsid_vals), 0x0,
11291
15
      NULL, HFILL}
11292
15
    },
11293
15
    {&hf_docsis_mdd_dsg_da_to_dsid_length,
11294
15
     {"Length", "docsis_mdd.dsg_da_to_dsid_length",
11295
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11296
15
      NULL, HFILL}
11297
15
    },
11298
15
    {&hf_docsis_mdd_dsg_da_to_dsid_association_da,
11299
15
     {"Destination Address", "docsis_mdd.dsg_da_to_dsid_association_da",
11300
15
      FT_ETHER, BASE_NONE, NULL, 0x0,
11301
15
      "MDD DSG DA to DSID association Destination Address", HFILL}
11302
15
    },
11303
15
    {&hf_docsis_mdd_dsg_da_to_dsid_association_dsid,
11304
15
     {"DSID", "docsis_mdd.dsg_da_to_dsid_association_dsid",
11305
15
      FT_UINT24, BASE_DEC, NULL, 0x0FFFFF,
11306
15
      "MDD MDD DSG DA to DSID association DSID", HFILL}
11307
15
    },
11308
15
    {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events,
11309
15
     {"CM-STATUS Event Enable Bitmask for Non-Channel-Specific Events", "docsis_mdd.cm_status_event_enable_non_channel_specific_events",
11310
15
      FT_UINT16, BASE_HEX, NULL, 0x0,
11311
15
      NULL, HFILL}
11312
15
    },
11313
15
    {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_sequence_out_of_range,
11314
15
     {"Sequence out of range", "docsis_mdd.cm_status_event_enable_non_channel_specific_events_sequence_out_of_range",
11315
15
      FT_UINT16, BASE_DEC, NULL, 0x0008,
11316
15
      "CM-STATUS event non-channel-event Sequence out of range", HFILL}
11317
15
    },
11318
15
    {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup,
11319
15
     {"CM operating on battery backup", "docsis_mdd.cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup",
11320
15
      FT_UINT16, BASE_DEC, NULL, 0x0200,
11321
15
      "CM-STATUS event non-channel-event Cm operating on battery backup", HFILL}
11322
15
    },
11323
15
    {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power,
11324
15
     {"Returned to AC power", "docsis_mdd.cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power",
11325
15
      FT_UINT16, BASE_DEC, NULL, 0x0400,
11326
15
      "CM-STATUS event non-channel-event Cm returned to AC power", HFILL}
11327
15
    },
11328
15
    {&hf_docsis_mdd_extended_upstream_transmit_power_support,
11329
15
     { "Extended Upstream Transmit Power Support", "docsis_mdd.extended_upstream_transmit_power_support",
11330
15
       FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x0,
11331
15
       "MDD Extended Upstream Transmit Power Support", HFILL}
11332
15
    },
11333
15
    {&hf_docsis_mdd_cmts_major_docsis_version,
11334
15
     { "CMTS Major DOCSIS Version (legacy)", "docsis_mdd.cmts_major_docsis_version",
11335
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11336
15
      NULL, HFILL}
11337
15
    },
11338
15
    {&hf_docsis_mdd_cmts_minor_docsis_version,
11339
15
     { "CMTS Minor DOCSIS Version (legacy)", "docsis_mdd.cmts_minor_docsis_version",
11340
15
       FT_UINT8, BASE_DEC, NULL, 0x0,
11341
15
       NULL, HFILL}
11342
15
    },
11343
15
    {&hf_docsis_mdd_docsis_version_tlv,
11344
15
     {"TLV", "docsis_mdd.docsis_version.tlv",
11345
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
11346
15
      NULL, HFILL}
11347
15
    },
11348
15
    {&hf_docsis_mdd_docsis_version_tlv_type,
11349
15
     {"Type", "docsis_mdd.docsis_version.tlv.type",
11350
15
      FT_UINT8, BASE_DEC, VALS(mdd_docsis_version_vals), 0x0,
11351
15
      NULL, HFILL}
11352
15
    },
11353
15
    {&hf_docsis_mdd_docsis_version_tlv_length,
11354
15
     {"Length", "docsis_mdd.docsis_version.tlv.length",
11355
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11356
15
      NULL, HFILL}
11357
15
    },
11358
15
    {&hf_docsis_mdd_docsis_version_major_pre_40,
11359
15
     { "CMTS Pre-DOCSIS 4.0 Major DOCSIS Version", "docsis_mdd.docsis_version.major_pre_40",
11360
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11361
15
      NULL, HFILL}
11362
15
    },
11363
15
    {&hf_docsis_mdd_docsis_version_minor_pre_40,
11364
15
     { "CMTS Pre-DOCSIS 4.0 Minor DOCSIS Version", "docsis_mdd.docsis_version.minor_pre_40",
11365
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11366
15
      NULL, HFILL}
11367
15
    },
11368
15
    {&hf_docsis_mdd_docsis_version_major,
11369
15
     { "CMTS Major DOCSIS Version", "docsis_mdd.docsis_version.major",
11370
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11371
15
      NULL, HFILL}
11372
15
    },
11373
15
    {&hf_docsis_mdd_docsis_version_minor,
11374
15
     { "CMTS Minor DOCSIS Version", "docsis_mdd.docsis_version.minor",
11375
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11376
15
      NULL, HFILL}
11377
15
    },
11378
15
    {&hf_docsis_mdd_docsis_version_ext_spectrum_mode,
11379
15
     {"CMTS Extended Spectrum Mode of Operation", "docsis_mdd.docsis_version.ext_spectrum_mode",
11380
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
11381
15
      NULL, HFILL}
11382
15
    },
11383
15
    {&hf_docsis_mdd_docsis_version_ext_spectrum_mode_fdd,
11384
15
     {"FDD", "docsis_mdd.docsis_version.fdd",
11385
15
      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDD,
11386
15
      NULL, HFILL}
11387
15
    },
11388
15
    {&hf_docsis_mdd_docsis_version_ext_spectrum_mode_fdx,
11389
15
     {"FDX", "docsis_mdd.docsis_version.fdx",
11390
15
      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), CMTS_DOCSIS_VERSION_EXT_SPECTRUM_MODE_FDX,
11391
15
      NULL, HFILL}
11392
15
    },
11393
15
    {&hf_docsis_mdd_cm_periodic_maintenance_timeout_indicator,
11394
15
     { "CM periodic maintenance timeout indicator", "docsis_mdd.cm_periodic_maintenance_timeout_indicator",
11395
15
       FT_UINT8, BASE_DEC, VALS(cm_periodic_maintenance_timeout_indicator_vals), 0x0,
11396
15
       NULL, HFILL}
11397
15
    },
11398
15
    {&hf_docsis_mdd_dls_broadcast_and_multicast_delivery_method,
11399
15
     { "DLS Broadcast and Multicast Delivery Method", "docsis_mdd.dls_broadcast_and_multicast_delivery_method",
11400
15
       FT_UINT8, BASE_DEC, VALS(dls_broadcast_and_multicast_delivery_method_vals), 0x0,
11401
15
       NULL, HFILL}
11402
15
    },
11403
15
    {&hf_docsis_mdd_cm_status_event_d31_ofdm_prof_fail,
11404
15
     { "Downstream OFDM Profile Failure", "docsis_mdd.cm_status_event_d31_ofdm_prof_fail",
11405
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000001,
11406
15
       NULL, HFILL}
11407
15
    },
11408
15
    {&hf_docsis_mdd_cm_status_event_d31_prim_down_chan_change,
11409
15
     { "Primary Downstream Channel Change", "docsis_mdd.cm_status_event_d31_prim_down_chan_change",
11410
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000002,
11411
15
       NULL, HFILL}
11412
15
    },
11413
15
    {&hf_docsis_mdd_cm_status_event_d31_dpd_mismatch,
11414
15
     { "DPD Mismatch", "docsis_mdd.cm_status_event_d31_dpd_mismatch",
11415
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000004,
11416
15
       NULL, HFILL}
11417
15
    },
11418
15
    {&hf_docsis_mdd_cm_status_event_d31_deprecated,
11419
15
     { "Deprecated", "docsis_mdd.cm_status_event_d31_deprecated",
11420
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000008,
11421
15
       NULL, HFILL}
11422
15
    },
11423
15
    {&hf_docsis_mdd_cm_status_event_d31_ncp_prof_fail,
11424
15
     { "NCP Profile Failure", "docsis_mdd.cm_status_event_d31_ncp_prof_fail",
11425
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000010,
11426
15
       NULL, HFILL}
11427
15
    },
11428
15
    {&hf_docsis_mdd_cm_status_event_d31_loss_fec_plc,
11429
15
     { "Loss of FEC lock on PLC", "docsis_mdd.cm_status_event_d31_loss_fec_plc",
11430
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000020,
11431
15
       NULL, HFILL}
11432
15
    },
11433
15
    {&hf_docsis_mdd_cm_status_event_d31_ncp_prof_recover,
11434
15
     { "NCP Profile Recovery", "docsis_mdd.cm_status_event_d31_ncp_prof_recover",
11435
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000040,
11436
15
       NULL, HFILL}
11437
15
    },
11438
15
    {&hf_docsis_mdd_cm_status_event_d31_fec_recover_on_plc,
11439
15
     { "FEC Recovery on PLC", "docsis_mdd.cm_status_event_d31_fec_recover_on_plc",
11440
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000080,
11441
15
       NULL, HFILL}
11442
15
    },
11443
15
    {&hf_docsis_mdd_cm_status_event_d31_fec_recover_on_ofdm_prof,
11444
15
     { "FEC Recovery on OFDM Profile", "docsis_mdd.cm_status_event_d31_fec_recover_on_ofdm_prof",
11445
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000100,
11446
15
       NULL, HFILL}
11447
15
    },
11448
15
    {&hf_docsis_mdd_cm_status_event_d31_ofdma_prof_fail,
11449
15
     { "OFDMA Profile Failure", "docsis_mdd.cm_status_event_d31_ofdma_prof_fail",
11450
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000200,
11451
15
       NULL, HFILL}
11452
15
    },
11453
15
    {&hf_docsis_mdd_cm_status_event_d31_map_stor_overflow_ind,
11454
15
     { "MAP Storage Overflow Indicator", "docsis_mdd.cm_status_event_d31_map_stor_overflow_ind",
11455
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000400,
11456
15
       NULL, HFILL}
11457
15
    },
11458
15
    {&hf_docsis_mdd_cm_status_event_d31_ofdm_map_stor_almost_full_ind,
11459
15
     { "MAP Storage Almost Full Indicator", "docsis_mdd.cm_status_event_d31_ofdm_map_stor_almost_full_ind",
11460
15
       FT_BOOLEAN, 32, TFS(&tfs_enabled_disabled), 0x00000800,
11461
15
       NULL, HFILL}
11462
15
    },
11463
15
    {&hf_docsis_mdd_cm_status_event_d31_reserved,
11464
15
     { "Reserved for future use", "docsis_mdd.cm_status_event_d31_reserved",
11465
15
       FT_UINT32, BASE_HEX, NULL, 0xFFFFF000,
11466
15
       NULL, HFILL}
11467
15
    },
11468
15
    {&hf_docsis_mdd_diplexer_band_edge,
11469
15
     { "Diplexer Band Edge", "docsis_mdd.diplexer_band_edge",
11470
15
       FT_UINT8, BASE_DEC, VALS(mdd_diplexer_band_edge_vals), 0x0,
11471
15
       NULL, HFILL}
11472
15
    },
11473
15
    {&hf_docsis_mdd_diplexer_band_edge_length,
11474
15
     {"Length", "docsis_mdd.diplexer_band_edge_length",
11475
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11476
15
      NULL, HFILL}
11477
15
    },
11478
15
    {&hf_docsis_mdd_diplexer_us_upper_band_edge,
11479
15
     {"Diplexer Upstream Upper Band Edge", "docsis_mdd.diplexer_us_upper_band_edge",
11480
15
      FT_UINT8, BASE_DEC, VALS(mdd_diplexer_us_upper_band_edge_vals), 0x0,
11481
15
      NULL, HFILL}
11482
15
    },
11483
15
    {&hf_docsis_mdd_diplexer_ds_lower_band_edge,
11484
15
     {"Diplexer Downstream Lower Band Edge", "docsis_mdd.diplexer_ds_lower_band_edge",
11485
15
      FT_UINT8, BASE_DEC, VALS(mdd_diplexer_ds_lower_band_edge_vals), 0x0,
11486
15
      NULL, HFILL}
11487
15
    },
11488
15
    {&hf_docsis_mdd_diplexer_ds_upper_band_edge,
11489
15
     {"Diplexer Downstream Upper Band Edge", "docsis_mdd.diplexer_ds_upper_band_edge",
11490
15
      FT_UINT8, BASE_DEC, VALS(mdd_diplexer_ds_upper_band_edge_vals), 0x0,
11491
15
      NULL, HFILL}
11492
15
    },
11493
15
    {&hf_docsis_mdd_diplexer_us_upper_band_edge_override,
11494
15
     {"Diplexer Upstream Upper Band Edge Override", "docsis_mdd.diplexer_us_upper_band_edge_override",
11495
15
      FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
11496
15
      NULL, HFILL}
11497
15
    },
11498
15
    {&hf_docsis_mdd_diplexer_ds_lower_band_edge_override,
11499
15
     {"Diplexer Downstream Lower Band Edge Override", "docsis_mdd.diplexer_ds_lower_band_edge_override",
11500
15
      FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
11501
15
      NULL, HFILL}
11502
15
    },
11503
15
    {&hf_docsis_mdd_diplexer_ds_upper_band_edge_override,
11504
15
     {"Diplexer Downstream Upper Band Edge Override", "docsis_mdd.diplexer_ds_upper_band_edge_override",
11505
15
      FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_mhz), 0x0,
11506
15
      NULL, HFILL}
11507
15
    },
11508
    /* MDD Advanced Band Plan Descriptor */
11509
15
    {&hf_docsis_mdd_abp_tlv,
11510
15
     {"TLV", "docsis_mdd.advanced_band_plan.tlv",
11511
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
11512
15
      NULL, HFILL}
11513
15
    },
11514
15
    {&hf_docsis_mdd_abp_tlv_type,
11515
15
     {"Type", "docsis_mdd.advanced_band_plan.tlv.type",
11516
15
      FT_UINT8, BASE_DEC, VALS(mdd_abp_vals), 0x0,
11517
15
      NULL, HFILL}
11518
15
    },
11519
15
    {&hf_docsis_mdd_abp_tlv_length,
11520
15
     {"Length", "docsis_mdd.advanced_band_plan.tlv.length",
11521
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11522
15
      NULL, HFILL}
11523
15
    },
11524
15
    {&hf_docsis_mdd_abp_sub_band_count,
11525
15
     {"Total number of sub-bands", "docsis_mdd.advanced_band_plan.subband_count",
11526
15
      FT_UINT8, BASE_DEC, VALS(mdd_abp_sub_band_vals), 0x0, NULL, HFILL}
11527
15
    },
11528
15
    {&hf_docsis_mdd_abp_sub_band_width,
11529
15
     {"Full Duplex Sub-band Width", "docsis_mdd.advanced_band_plan.subband_width",
11530
15
      FT_UINT8, BASE_DEC, VALS(mdd_abp_sub_band_width_vals), 0x0, NULL, HFILL}
11531
15
    },
11532
    /* MDD BPI+*/
11533
15
    {&hf_docsis_mdd_bpi_plus_tlv,
11534
15
     {"TLV", "docsis_mdd.bpi_plus.tlv",
11535
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
11536
15
      NULL, HFILL}
11537
15
    },
11538
15
    {&hf_docsis_mdd_bpi_plus_tlv_type,
11539
15
     {"Type", "docsis_mdd.bpi_plus.tlv.type",
11540
15
      FT_UINT8, BASE_DEC, VALS(mdd_bpi_plus_vals), 0x0,
11541
15
      NULL, HFILL}
11542
15
    },
11543
15
    {&hf_docsis_mdd_bpi_plus_tlv_length,
11544
15
     {"Length", "docsis_mdd.bpi_plus.tlv.length",
11545
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11546
15
      NULL, HFILL}
11547
15
    },
11548
15
    {&hf_docsis_mdd_bpi_plus_version,
11549
15
     {"Version", "docsis_mdd.bpi_plus.version",
11550
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11551
15
      "BPI+ Version Number", HFILL}
11552
15
    },
11553
15
    {&hf_docsis_mdd_bpi_plus_cfg,
11554
15
     {"Configuration", "docsis_mdd.bpi_plus.cfg",
11555
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
11556
15
      "BPI+ Configuration Bitmask", HFILL}
11557
15
    },
11558
15
    {&hf_docsis_mdd_bpi_plus_cfg_eae,
11559
15
     {"Early Authentication and Encryption", "docsis_mdd.bpi_plus.eae",
11560
15
      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
11561
15
      NULL, HFILL}
11562
15
    },
11563
    /* B_INIT_RNG_REQ */
11564
15
    {&hf_docsis_bintrngreq_capflags,
11565
15
     {"Capability Flags", "docsis_bintrngreq.capflags",
11566
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
11567
15
      NULL, HFILL}
11568
15
    },
11569
15
    {&hf_docsis_bintrngreq_capflags_frag,
11570
15
     {"Pre-3.0 Fragmentation", "docsis_bintrngreq.capflags.frag",
11571
15
      FT_BOOLEAN, 8, NULL, (1<<7),
11572
15
      "Pre-3.0 DOCSIS fragmentation is supported prior to registration", HFILL }
11573
15
    },
11574
15
    {&hf_docsis_bintrngreq_capflags_encrypt,
11575
15
     {"Early Auth. & Encrypt", "docsis_bintrngreq.capflags.encrypt",
11576
15
      FT_BOOLEAN, 8, NULL, (1<<6),
11577
15
      "Early Authentication and Encryption supported", HFILL }
11578
15
    },
11579
15
    {&hf_docsis_bintrngreq_mddsgid,
11580
15
     {"MD-DS-SG-ID", "docsis_bintrngreq.mddsgid",
11581
15
      FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
11582
15
      "MAC Domain Downstream Service Group Identifier", HFILL}
11583
15
    },
11584
    /* DBC_REQ */
11585
15
    {&hf_docsis_dbcreq_number_of_fragments,
11586
15
     {"Number of Fragments", "docsis_dbcreq.number_of_fragments",
11587
15
      FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
11588
15
      NULL, HFILL}
11589
15
    },
11590
15
    {&hf_docsis_dbcreq_fragment_sequence_number,
11591
15
     {"Fragment Seq No", "docsis_dbcreq.fragment_sequence_number",
11592
15
      FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
11593
15
      NULL, HFILL}
11594
15
    },
11595
    /* DBC_RSP */
11596
15
    {&hf_docsis_dbcrsp_conf_code,
11597
15
     {"Confirmation Code", "docsis_dbcrsp.conf_code",
11598
15
      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
11599
15
      NULL, HFILL}
11600
15
    },
11601
    /* DPV_REQ/RSP */
11602
15
    {&hf_docsis_dpv_flags,
11603
15
     {"Flags", "docsis_dpv.flags",
11604
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11605
15
      NULL, HFILL}
11606
15
    },
11607
15
    {&hf_docsis_dpv_us_sf,
11608
15
     {"Upstream Service Flow ID", "docsis_dpv.us_sf",
11609
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
11610
15
      NULL, HFILL}
11611
15
    },
11612
15
    {&hf_docsis_dpv_n,
11613
15
     {"N (Measurement avaraging factor)", "docsis_dpv.n",
11614
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
11615
15
      NULL, HFILL}
11616
15
    },
11617
15
    {&hf_docsis_dpv_start,
11618
15
     {"Start Reference Point", "docsis_dpv.start",
11619
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11620
15
      NULL, HFILL}
11621
15
    },
11622
15
    {&hf_docsis_dpv_end,
11623
15
     {"End Reference Point", "docsis_dpv.end",
11624
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11625
15
      NULL, HFILL}
11626
15
    },
11627
15
    {&hf_docsis_dpv_ts_start,
11628
15
     {"Timestamp Start", "docsis_dpv.ts_start",
11629
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
11630
15
      NULL, HFILL}
11631
15
    },
11632
15
    {&hf_docsis_dpv_ts_end,
11633
15
     {"Timestamp End", "docsis_dpv.ts_end",
11634
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
11635
15
      NULL, HFILL}
11636
15
    },
11637
    /* CM Status */
11638
15
    {&hf_docsis_cmstatus_e_t_mdd_t,
11639
15
     {"Event Type: Secondary Channel MDD timeout", "docsis_cmstatus.mdd_timeout", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11640
15
    },
11641
15
    {&hf_docsis_cmstatus_e_t_qfl_f,
11642
15
     {"Event Type: QAM/FEC lock failure", "docsis_cmstatus.qam_fec_lock_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11643
15
    },
11644
15
    {&hf_docsis_cmstatus_e_t_s_o,
11645
15
     {"Event Type: Sequence out-of-range", "docsis_cmstatus.sequence_out_of_range", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11646
15
    },
11647
15
    {&hf_docsis_cmstatus_e_t_mdd_r,
11648
15
     {"Event Type: Secondary Channel MDD Recovery", "docsis_cmstatus.mdd_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11649
15
    },
11650
15
    {&hf_docsis_cmstatus_e_t_qfl_r,
11651
15
     {"Event Type: QAM/FEC Lock Recovery", "docsis_cmstatus.qam_fec_lock_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11652
15
    },
11653
15
    {&hf_docsis_cmstatus_e_t_t4_t,
11654
15
     {"Event Type: T4 timeout", "docsis_cmstatus.t4_timeout", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11655
15
    },
11656
15
    {&hf_docsis_cmstatus_e_t_t3_e,
11657
15
     {"Event Type: T3 retries exceeded", "docsis_cmstatus.t3_retries_exceeded", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11658
15
    },
11659
15
    {&hf_docsis_cmstatus_e_t_rng_s,
11660
15
     {"Event Type: Successful ranging after T3 retries exceeded", "docsis_cmstatus.successful_ranging_after_t3_retries_exceeded", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11661
15
    },
11662
15
    {&hf_docsis_cmstatus_e_t_cm_b,
11663
15
     {"Event Type: CM operating on battery backup", "docsis_cmstatus.cm_on_battery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11664
15
    },
11665
15
    {&hf_docsis_cmstatus_e_t_cm_a,
11666
15
     {"Event Type: CM returned to A/C power", "docsis_cmstatus.cm_on_ac_power", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11667
15
    },
11668
15
    {&hf_docsis_cmstatus_e_t_mac_removal,
11669
15
     {"Event Type: MAC Removal event", "docsis_cmstatus.mac_removal", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11670
15
    },
11671
15
    {&hf_docsis_cmstatus_e_t_ds_ofdm_profile_failure,
11672
15
     {"Event Type: DS OFDM profile failure", "docsis_cmstatus.ds_ofdm_profile_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11673
15
    },
11674
15
    {&hf_docsis_cmstatus_e_t_prim_ds_change,
11675
15
     {"Event Type: Primary Downstream Change", "docsis_cmstatus.primary_downstream_change", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11676
15
    },
11677
15
    {&hf_docsis_cmstatus_e_t_dpd_mismatch,
11678
15
     {"Event Type: DPD Mismatch", "docsis_cmstatus.dpd_mismatch", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11679
15
    },
11680
15
    {&hf_docsis_cmstatus_e_t_ncp_profile_failure,
11681
15
     {"Event Type: NCP Profile failure", "docsis_cmstatus.ncp_profile_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11682
15
    },
11683
15
    {&hf_docsis_cmstatus_e_t_plc_failure,
11684
15
     {"Event Type: PLC failure", "docsis_cmstatus.plc_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11685
15
    },
11686
15
    {&hf_docsis_cmstatus_e_t_ncp_profile_recovery,
11687
15
     {"Event Type: NCP profile recovery", "docsis_cmstatus.ncp_profile_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11688
15
    },
11689
15
    {&hf_docsis_cmstatus_e_t_plc_recovery,
11690
15
     {"Event Type: PLC recovery", "docsis_cmstatus.plc_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11691
15
    },
11692
15
    {&hf_docsis_cmstatus_e_t_ofdm_profile_recovery,
11693
15
     {"Event Type: OFDM profile recovery", "docsis_cmstatus.ofdm_profile_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11694
15
    },
11695
15
    {&hf_docsis_cmstatus_e_t_ofdma_profile_failure,
11696
15
     {"Event Type: OFDMA profile failure", "docsis_cmstatus.ofdma_profile_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11697
15
    },
11698
15
    {&hf_docsis_cmstatus_e_t_map_storage_overflow_indicator,
11699
15
     {"Event Type: MAP Storage overflow indicator", "docsis_cmstatus.map_storage_overflow_indicator", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11700
15
    },
11701
15
    {&hf_docsis_cmstatus_e_t_map_storage_almost_full_indicator,
11702
15
     {"Event Type: MAP Storage almost full indicator", "docsis_cmstatus.map_storage_almost_full_indicator", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11703
15
    },
11704
15
    {&hf_docsis_cmstatus_e_t_unknown,
11705
15
     {"Unknown Event Type", "docsis_cmstatus.unknown_event_type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11706
15
    },
11707
15
    {&hf_docsis_cmstatus_status_event_descr,
11708
15
     {"Description", "docsis_cmstatus.status_event.description", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
11709
15
    },
11710
15
    {&hf_docsis_cmstatus_status_event_ds_ch_id,
11711
15
     {"Downstream Channel ID", "docsis_cmstatus.status_event.ds_chid", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11712
15
    },
11713
15
    {&hf_docsis_cmstatus_status_event_us_ch_id,
11714
15
     {"Upstream Channel ID", "docsis_cmstatus.status_event.us_chid", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11715
15
    },
11716
15
    {&hf_docsis_cmstatus_status_event_dsid,
11717
15
     {"DSID", "docsis_cmstatus.status_event.dsid", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL}
11718
15
    },
11719
15
    {&hf_docsis_cmstatus_status_event_mac_address,
11720
15
     {"MAC Address", "docsis_cmstatus.status_event.mac_address", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL}
11721
15
    },
11722
15
    {&hf_docsis_cmstatus_status_event_ds_ofdm_profile_id,
11723
15
     {"Downstream OFDM Profile ID", "docsis_cmstatus.status_event.ds_ofdm_profile_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11724
15
    },
11725
15
    {&hf_docsis_cmstatus_status_event_us_ofdma_profile_id,
11726
15
     {"US OFDMA Profile ID", "docsis_cmstatus.status_event.us_ofdma_profile_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11727
15
    },
11728
15
    {&hf_docsis_cmstatus_tlv_data,
11729
15
     {"TLV Data", "docsis_cmstatus.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
11730
15
    },
11731
15
    {&hf_docsis_cmstatus_type,
11732
15
     {"Type", "docsis_cmstatus.type", FT_UINT8, BASE_DEC, VALS(cmstatus_tlv_vals), 0x0, NULL, HFILL}
11733
15
    },
11734
15
    {&hf_docsis_cmstatus_length,
11735
15
     {"Length", "docsis_cmstatus.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11736
15
    },
11737
15
    {&hf_docsis_cmstatus_status_event_tlv_data,
11738
15
     {"Status Event TLV Data", "docsis_cmstatus.status_event.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
11739
15
    },
11740
15
    {&hf_docsis_cmstatus_status_event_type,
11741
15
     {"Status Event Type", "docsis_cmstatus.status_event.type", FT_UINT8, BASE_DEC, VALS(cmstatus_status_event_tlv_vals), 0x0, NULL, HFILL}
11742
15
    },
11743
15
    {&hf_docsis_cmstatus_status_event_length,
11744
15
     {"Status Event Length", "docsis_cmstatus.status_event.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11745
15
    },
11746
11747
    /* CM_CTRL_REQ */
11748
15
    {&hf_docsis_cmctrl_tlv_mute,
11749
15
     {"Upstream Channel RF Mute", "docsis_cmctrl.mute",
11750
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11751
15
      NULL, HFILL}
11752
15
    },
11753
15
    {&hf_docsis_cmctrl_tlv_mute_timeout,
11754
15
     {"RF Mute Timeout Interval", "docsis_cmctrl.mute_timeout",
11755
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
11756
15
      NULL, HFILL}
11757
15
    },
11758
15
    {&hf_docsis_cmctrl_tlv_reinit,
11759
15
     {"CM Reinitialize", "docsis_cmctrl.reinit",
11760
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11761
15
      NULL, HFILL}
11762
15
    },
11763
15
    {&hf_docsis_cmctrl_tlv_disable_fwd,
11764
15
     {"Disable Forwarding", "docsis_cmctrl.disable_fwd",
11765
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11766
15
      NULL, HFILL}
11767
15
    },
11768
15
    {&hf_docsis_cmctrl_tlv_ds_event,
11769
15
     {"Override Downstream Events", "docsis_cmctrl.ds_event",
11770
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
11771
15
      NULL, HFILL}
11772
15
    },
11773
15
    {&hf_docsis_cmctrl_tlv_us_event,
11774
15
     {"Override Upstream Events", "docsis_cmctrl.us_event",
11775
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
11776
15
      NULL, HFILL}
11777
15
    },
11778
15
    {&hf_docsis_cmctrl_tlv_event,
11779
15
     {"Override Non-Channel-Specific Events", "docsis_cmctrl.event",
11780
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
11781
15
      NULL, HFILL}
11782
15
    },
11783
15
    {&hf_docsis_cmctrlreq_tlv_data,
11784
15
     {"TLV Data", "docsis_cmctrl.tlv_data",
11785
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
11786
15
      NULL, HFILL}
11787
15
    },
11788
15
    {&hf_docsis_cmctrlreq_type,
11789
15
     {"Type", "docsis_cmctrl.tlv_type",
11790
15
      FT_UINT8, BASE_DEC, VALS(cmctrlreq_tlv_vals), 0x0,
11791
15
      NULL, HFILL}
11792
15
    },
11793
15
    {&hf_docsis_cmctrlreq_length,
11794
15
     {"Length", "docsis_cmctrl.tlv_length",
11795
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11796
15
      NULL, HFILL}
11797
15
    },
11798
15
    {&hf_docsis_cmctrlreq_us_type,
11799
15
     {"Type", "docsis_cmctrl.us_event_type",
11800
15
      FT_UINT8, BASE_DEC, VALS(cmctrlreq_us_tlv_vals), 0x0,
11801
15
      NULL, HFILL}
11802
15
    },
11803
15
    {&hf_docsis_cmctrlreq_us_length,
11804
15
     {"Length", "docsis_cmctrl.us_event_length",
11805
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11806
15
      NULL, HFILL}
11807
15
    },
11808
15
    {&hf_docsis_cmctrl_us_event_ch_id,
11809
15
     {"Upstream Channel ID", "docsis_cmctrl.us_event.chid",
11810
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11811
15
      NULL, HFILL}
11812
15
    },
11813
15
    {&hf_docsis_cmctrl_us_event_mask,
11814
15
     {"Upstream Status Event Enable Bitmask", "docsis_cmctrl.us_event.mask",
11815
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
11816
15
      NULL, HFILL}
11817
15
    },
11818
15
    {&hf_docsis_cmctrl_ds_type,
11819
15
     {"Type", "docsis_cmctrl.ds_event_type",
11820
15
      FT_UINT8, BASE_DEC, VALS(cmctrlreq_ds_tlv_vals), 0x0,
11821
15
      NULL, HFILL}
11822
15
    },
11823
15
    {&hf_docsis_cmctrl_ds_length,
11824
15
     {"Length", "docsis_cmctrl.ds_event_length",
11825
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11826
15
      NULL, HFILL}
11827
15
    },
11828
15
    {&hf_docsis_cmctrl_ds_event_ch_id,
11829
15
     {"Downstream Channel ID", "docsis_cmctrl.ds_event.chid",
11830
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11831
15
      NULL, HFILL}
11832
15
    },
11833
15
    {&hf_docsis_cmctrl_ds_event_mask,
11834
15
     {"Downstream Status Event Enable Bitmask", "docsis_cmctrl.ds_event.mask",
11835
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
11836
15
      NULL, HFILL}
11837
15
    },
11838
    /* REG_REQ_MP */
11839
15
    {&hf_docsis_regreqmp_sid,
11840
15
     {"Sid", "docsis_regreqmp.sid",
11841
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
11842
15
      "Reg-Req-Mp Sid", HFILL}
11843
15
    },
11844
15
    {&hf_docsis_regreqmp_number_of_fragments,
11845
15
     {"Number of Fragments", "docsis_regreqmp.number_of_fragments",
11846
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11847
15
      "Reg-Req-Mp Number of Fragments", HFILL}
11848
15
    },
11849
15
    {&hf_docsis_regreqmp_fragment_sequence_number,
11850
15
     {"Fragment Sequence Number", "docsis_regreqmp.fragment_sequence_number",
11851
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11852
15
      "Reg-Req-Mp Fragment Sequence Number", HFILL}
11853
15
    },
11854
    /* REG_RSP_MP */
11855
15
    {&hf_docsis_regrspmp_sid,
11856
15
     {"Sid", "docsis_regrspmp.sid",
11857
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
11858
15
      "Reg-Rsp-Mp Sid", HFILL}
11859
15
    },
11860
15
    {&hf_docsis_regrspmp_response,
11861
15
     {"Response", "docsis_regrspmp.response",
11862
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11863
15
      "Reg-Rsp-Mp Response", HFILL}
11864
15
    },
11865
15
    {&hf_docsis_regrspmp_number_of_fragments,
11866
15
     {"Number of Fragments", "docsis_regrspmp.number_of_fragments",
11867
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11868
15
      "Reg-Rsp-Mp Number of Fragments", HFILL}
11869
15
    },
11870
15
    {&hf_docsis_regrspmp_fragment_sequence_number,
11871
15
     {"Fragment Sequence Number", "docsis_regrspmp.fragment_sequence_number",
11872
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11873
15
      "Reg-Rsp-Mp Fragment Sequence Number", HFILL}
11874
15
    },
11875
    /* EM */
11876
15
    {&hf_docsis_emrsp_tlv_data,
11877
15
     {"Energy Management TLV data", "docsis_emrsp.tlv_data",
11878
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
11879
15
      NULL, HFILL}
11880
15
    },
11881
15
    {&hf_docsis_emrsp_tlv_type,
11882
15
     {"Energy Management TLV Type", "docsis_emrsp.tlv.type",
11883
15
      FT_UINT8, BASE_DEC, VALS(emrsp_tlv_vals), 0x0,
11884
15
      NULL, HFILL}
11885
15
    },
11886
15
    {&hf_docsis_emrsp_tlv_length,
11887
15
     {"Energy Management TLV Length", "docsis_emrsp.tlv.length",
11888
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
11889
15
      NULL, HFILL}
11890
15
    },
11891
15
    {&hf_docsis_emrsp_tlv_holdoff_timer,
11892
15
     {"Hold-Off Timer", "docsis_emrsp.tlv.holdoff_timer",
11893
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
11894
15
      NULL, HFILL}
11895
15
    },
11896
15
    {&hf_docsis_emreq_req_power_mode,
11897
15
     {"Requested Power Mode", "docsis_emreq.req_power_mode",
11898
15
      FT_UINT8, BASE_DEC, VALS(emreq_req_power_mode_vals), 0x0,
11899
15
      NULL, HFILL}
11900
15
    },
11901
15
    {&hf_docsis_emreq_reserved,
11902
15
     {"Reserved", "docsis_emreq.reserved",
11903
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
11904
15
      NULL, HFILL}
11905
15
    },
11906
15
    {&hf_docsis_emrsp_rsp_code,
11907
15
     {"Response Code", "docsis_emrsp.resp_code",
11908
15
      FT_UINT8, BASE_DEC, VALS(emrsp_rsp_code_vals), 0x0,
11909
15
      NULL, HFILL}
11910
15
    },
11911
15
    {&hf_docsis_emrsp_reserved,
11912
15
     {"Reserved", "docsis_emrsp.reserved",
11913
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
11914
15
      NULL, HFILL}
11915
15
    },
11916
15
    {&hf_docsis_emrsp_tlv_unknown,
11917
15
      {"Unknown TLV", "docsis_emrsp.unknown_tlv",
11918
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
11919
15
       NULL, HFILL}
11920
15
    },
11921
    /* OCD */
11922
15
    {&hf_docsis_ocd_tlv_unknown,
11923
15
      {"Unknown TLV", "docsis_ocd.unknown_tlv", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
11924
15
    },
11925
15
    {&hf_docsis_ocd_ccc,
11926
15
      {"Configuration Change Count", "docsis_ocd.ccc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11927
15
    },
11928
15
    {&hf_docsis_ocd_tlv_four_trans_size,
11929
15
      {"Discrete Fourier Transform Size", "docsis_ocd.tlv.four_trans_size", FT_UINT8, BASE_DEC, VALS (docsis_ocd_four_trans_size), 0x0, NULL, HFILL}
11930
15
    },
11931
15
    {&hf_docsis_ocd_tlv_cycl_pref,
11932
15
      {"Cyclic Prefix", "docsis_ocd.tlv.cyc_pref", FT_UINT8, BASE_DEC, VALS (docsis_ocd_cyc_prefix), 0x0, NULL, HFILL}
11933
15
    },
11934
15
    {&hf_docsis_ocd_tlv_roll_off,
11935
15
      {"Roll Off", "docsis_ocd.tlv.roll_off", FT_UINT8, BASE_DEC, VALS (docsis_ocd_roll_off), 0x0, NULL, HFILL}
11936
15
    },
11937
15
    {&hf_docsis_ocd_tlv_ofdm_spec_loc,
11938
15
      {"OFDM Spectrum Location", "docsis_ocd.tlv.ofdm_spec_loc", FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_hz), 0x0, NULL, HFILL}
11939
15
    },
11940
15
    {&hf_docsis_ocd_tlv_time_int_depth,
11941
15
      {"Time Interleaving Depth", "docsis_ocd.tlv.time_int_depth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11942
15
    },
11943
15
    {&hf_docsis_ocd_tlv_prim_cap_ind,
11944
15
      {"Primary Capable Indicator", "docsis_ocd.tlv.prim_cap_ind", FT_UINT8, BASE_DEC, VALS(docsis_ocd_prim_cap_ind_str), 0x0, NULL, HFILL}
11945
15
    },
11946
15
    {&hf_docsis_ocd_tlv_fdx_ind,
11947
15
      {"FDX Indicator", "docsis_ocd.tlv.fdx_indicator", FT_UINT8, BASE_DEC, VALS(docsis_ocd_fdx_ind_str), 0x0, NULL, HFILL}
11948
15
    },
11949
15
    {&hf_docsis_ocd_tlv_subc_assign_type,
11950
15
      {"Assignment type", "docsis_ocd.tlv.subc_assign.type", FT_UINT8, BASE_DEC, VALS(docsis_ocd_subc_assign_type_str), 0xC0, NULL, HFILL}
11951
15
    },
11952
15
    {&hf_docsis_ocd_tlv_subc_assign_value,
11953
15
      {"Assignment value", "docsis_ocd.tlv.subc_assign.value", FT_UINT8, BASE_DEC, VALS(docsis_ocd_subc_assign_value_str), 0x20, NULL, HFILL}
11954
15
    },
11955
15
    {&hf_docsis_ocd_subc_assign_subc_type,
11956
15
      {"Subcarrier Type", "docsis_ocd.tlv.subc_assign.subc_type", FT_UINT8, BASE_DEC, VALS(docsis_ocd_subc_assign_subc_type_str), 0x1F, NULL, HFILL}
11957
15
    },
11958
15
    {&hf_docsis_ocd_subc_assign_range,
11959
15
      {"Subcarrier index range", "docsis_ocd.tlv.subc_assign.range", FT_UINT32, BASE_CUSTOM, CF_FUNC(subc_assign_range), 0x00, NULL, HFILL}
11960
15
    },
11961
15
    {&hf_docsis_ocd_subc_assign_index,
11962
15
      {"Subcarrier index", "docsis_ocd.tlv.subc_assign.index", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL}
11963
15
    },
11964
15
    {&hf_docsis_ocd_tlv_data,
11965
15
     {"TLV Data", "docsis_ocd.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
11966
15
    },
11967
15
    {&hf_docsis_ocd_type,
11968
15
     {"Type", "docsis_ocd.type", FT_UINT8, BASE_DEC, VALS(ocd_tlv_vals), 0x0, NULL, HFILL}
11969
15
    },
11970
15
    {&hf_docsis_ocd_length,
11971
15
     {"Length", "docsis_ocd.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11972
15
    },
11973
    /* DPD */
11974
15
    {&hf_docsis_dpd_tlv_unknown,
11975
15
     {"Unknown TLV", "docsis_dpd.unknown_tlv",
11976
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
11977
15
      NULL, HFILL}
11978
15
    },
11979
15
    {&hf_docsis_dpd_prof_id,
11980
15
     {"Profile Identifier", "docsis_dpd.prof_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11981
15
    },
11982
15
    {&hf_docsis_dpd_ccc,
11983
15
     {"Configuration Change Count", "docsis_dpd.ccc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
11984
15
    },
11985
15
    {&hf_docsis_dpd_tlv_subc_assign_type,
11986
15
      {"Subcarrier Assignment Type", "docsis_dpd.tlv.subc_assign.type", FT_UINT8, BASE_DEC, VALS(docsis_dpd_subc_assign_type_str), 0xC0, NULL, HFILL}
11987
15
    },
11988
15
    {&hf_docsis_dpd_tlv_subc_assign_value,
11989
15
      {"Subcarrier Assignment Value", "docsis_dpd.tlv.subc_assign.value", FT_UINT8, BASE_DEC, VALS(docsis_dpd_subc_assign_value_str), 0x20, NULL, HFILL}
11990
15
    },
11991
15
    {&hf_docsis_dpd_tlv_subc_assign_reserved,
11992
15
      {"reserved", "docsis_dpd.tlv.subc_assign.reserved", FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL}
11993
15
    },
11994
15
    {&hf_docsis_dpd_tlv_subc_assign_modulation,
11995
15
     {"Subcarrier Assignment Modulation", "docsis_dpd.tlv.subc_assign.modulation", FT_UINT8, BASE_DEC, VALS(docsis_dpd_subc_assign_modulation_str), 0x0F, NULL, HFILL}
11996
15
    },
11997
15
    {&hf_docsis_dpd_subc_assign_range,
11998
15
     {"Subcarrier index range", "docsis_dpd.tlv.subc_assign.range", FT_UINT32, BASE_CUSTOM, CF_FUNC(subc_assign_range), 0x00, NULL, HFILL}
11999
15
    },
12000
15
    {&hf_docsis_dpd_subc_assign_index,
12001
15
     {"Subcarrier index", "docsis_dpd.tlv.subc_assign.index", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL}
12002
15
    },
12003
15
    {&hf_docsis_dpd_tlv_subc_assign_vector_oddness,
12004
15
     {"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}
12005
15
    },
12006
15
    {&hf_docsis_dpd_tlv_subc_assign_vector_reserved,
12007
15
     {"Reserved", "docsis_dpd.tlv.subc_assign_vect.reserved", FT_UINT8, BASE_DEC, NULL, 0x60, NULL, HFILL}
12008
15
    },
12009
15
    {&hf_docsis_dpd_tlv_subc_assign_vector_subc_start,
12010
15
     {"Subcarrier start", "docsis_dpd.tlv.subc_assign_vect.subc_start", FT_UINT16, BASE_DEC, NULL, 0x1FFF, NULL, HFILL}
12011
15
    },
12012
15
    {&hf_docsis_dpd_tlv_subc_assign_vector_modulation_odd,
12013
15
     {"Modulation", "docsis_dpd.tlv.subc_assign_vect.modulation", FT_UINT8, BASE_DEC, VALS(docsis_dpd_tlv_subc_assign_vector_modulation_str), 0xF0, NULL, HFILL}
12014
15
    },
12015
15
    {&hf_docsis_dpd_tlv_subc_assign_vector_modulation_even,
12016
15
     {"Modulation", "docsis_dpd.tlv.subc_assign_vect.modulation", FT_UINT8, BASE_DEC, VALS(docsis_dpd_tlv_subc_assign_vector_modulation_str), 0x0F, NULL, HFILL}
12017
15
    },
12018
15
    {&hf_docsis_dpd_tlv_data,
12019
15
     {"TLV Data", "docsis_dpd.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12020
15
    },
12021
15
    {&hf_docsis_dpd_type,
12022
15
     {"Type", "docsis_dpd.type" ,FT_UINT8, BASE_DEC, VALS(dpd_tlv_vals), 0x0, NULL, HFILL}
12023
15
    },
12024
15
    {&hf_docsis_dpd_length,
12025
15
     {"Length", "docsis_dpd.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12026
15
    },
12027
    /* OPT-REQ */
12028
15
    {&hf_docsis_optreq_tlv_unknown,
12029
15
     {"Unknown TLV", "docsis_optreq.unknown_tlv", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
12030
15
    },
12031
15
    {&hf_docsis_optreq_reserved,
12032
15
     {"Reserved", "docsis_optreq.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}
12033
15
    },
12034
15
    {&hf_docsis_optreq_prof_id,
12035
15
     {"Profile Identifier", "docsis_optreq.prof_id", FT_UINT8, BASE_DEC, VALS(profile_id_vals), 0x0, NULL, HFILL}
12036
15
    },
12037
15
    {&hf_docsis_optreq_opcode,
12038
15
     {"Opcode", "docsis_optreq.opcode", FT_UINT8, BASE_DEC, VALS(opt_opcode_vals), 0x0, NULL, HFILL}
12039
15
    },
12040
15
    {&hf_docsis_optreq_tlv_data,
12041
15
     {"TLV Data", "docsis_optreq.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12042
15
    },
12043
15
    {&hf_docsis_optreq_type,
12044
15
     {"Type", "docsis_optreq.type", FT_UINT8, BASE_DEC, VALS(optreq_tlv_vals), 0x0, NULL, HFILL}
12045
15
    },
12046
15
    {&hf_docsis_optreq_length,
12047
15
     {"Length", "docsis_optreq.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12048
15
    },
12049
15
    {&hf_docsis_optreq_reqstat_rxmer_stat_subc,
12050
15
     {"RxMER Statistics per subcarrier", "docsis_optreq.reqstat.rxmer_stat_per_subcarrier", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x1, NULL, HFILL}
12051
15
    },
12052
15
    {&hf_docsis_optreq_reqstat_rxmer_subc_threshold_comp,
12053
15
     {"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}
12054
15
    },
12055
15
    {&hf_docsis_optreq_reqstat_snr_marg_cand_prof,
12056
15
     {"SNR Margin for Candidate Profile", "docsis_optreq.reqstat.snr_marg_cand_prof", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x4, NULL, HFILL}
12057
15
    },
12058
15
    {&hf_docsis_optreq_reqstat_codew_stat_cand_prof,
12059
15
     {"Codeword Statistics for Candidate Profile", "docsis_optreq.reqstat.codew_stat_cand_prof", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x8, NULL, HFILL}
12060
15
    },
12061
15
    {&hf_docsis_optreq_reqstat_codew_thresh_comp_cand_prof,
12062
15
     {"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}
12063
15
    },
12064
15
    {&hf_docsis_optreq_reqstat_ncp_field_stat,
12065
15
     {"NCP Field Statistics", "docsis_optreq.reqstat.ncp_field_stats", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x00000020, NULL, HFILL}
12066
15
    },
12067
15
    {&hf_docsis_optreq_reqstat_ncp_crc_thresh_comp,
12068
15
     {"NCP CRC Threshold Comparison", "docsis_optreq.reqstat.ncp_crc_thresh_comp", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x00000040, NULL, HFILL}
12069
15
    },
12070
15
    {&hf_docsis_optreq_reqstat_reserved,
12071
15
     {"Reserved", "docsis_optreq.reqstat.reserved", FT_BOOLEAN, 32, TFS(&tfs_requested_not_requested), 0x00000080, NULL, HFILL}
12072
15
    },
12073
15
    {&hf_docsis_optreq_tlv_rxmer_thresh_data,
12074
15
     {"TLV Data", "docsis_optreq.rxmer_thresh_params.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12075
15
    },
12076
15
    {&hf_docsis_optreq_xmer_thresh_params_type,
12077
15
     {"Type", "docsis_optreq.rxmer_thres_params.type", FT_UINT8, BASE_DEC, VALS(optreq_tlv_rxmer_thresh_params_vals), 0x0, NULL, HFILL}
12078
15
    },
12079
15
    {&hf_docsis_optreq_xmer_thresh_params_length,
12080
15
     {"Length", "docsis_optreq.rxmer_thres_params.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12081
15
    },
12082
15
    {&hf_docsis_optreq_tlv_rxmer_thresh_data_mod_order,
12083
15
     {"Modulation Order", "docsis_optreq.rxmer_thres_params.mod_order", FT_UINT8, BASE_DEC, VALS(opreq_tlv_rxmer_thresh_params_mod_order), 0x0, NULL, HFILL}
12084
15
    },
12085
15
    {&hf_docsis_optreq_tlv_trigger_definition_data,
12086
15
     {"TLV Data", "docsis_optreq.trigger_definition.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12087
15
    },
12088
15
    {&hf_docsis_optreq_tlv_trigger_definition_data_type,
12089
15
     {"Type", "docsis_optreq.trigger_definition.type", FT_UINT8, BASE_DEC, VALS(optreq_tlv_trigger_definition_vals), 0x0, NULL, HFILL}
12090
15
    },
12091
15
    {&hf_docsis_optreq_tlv_trigger_definition_data_length,
12092
15
     {"Length", "docsis_optreq.trigger_definition.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12093
15
    },
12094
15
    {&hf_docsis_optreq_tlv_trigger_definition_trigger_type,
12095
15
     {"Trigger Type", "docsis_optreq.trigger_definition.trigger_type", FT_UINT8, BASE_DEC, VALS(optreq_tlv_triggered_definition_trigger_type_vals), 0x0, NULL, HFILL}
12096
15
    },
12097
15
    {&hf_docsis_optreq_tlv_trigger_definition_measure_duration,
12098
15
     {"Measurement Duration", "docsis_optreq.trigger_definition.measurement_duration", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12099
15
    },
12100
15
    {&hf_docsis_optreq_tlv_trigger_definition_triggering_sid,
12101
15
     {"Triggering SID", "docsis_optreq.trigger_definition.triggering_sid", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12102
15
    },
12103
15
    {&hf_docsis_optreq_tlv_trigger_definition_us_chan_id,
12104
15
     {"US Channel ID", "docsis_optreq.trigger_definition.us_chan_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12105
15
    },
12106
15
    {&hf_docsis_optreq_tlv_trigger_definition_sound_ambig_offset,
12107
15
     {"OUDP Sounding Ambiguity Offset", "docsis_optreq.trigger_definition.sound_ambig_offset", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12108
15
    },
12109
15
    {&hf_docsis_optreq_tlv_trigger_definition_rx_mer_to_report,
12110
15
     {"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}
12111
15
    },
12112
15
    {&hf_docsis_optreq_tlv_trigger_definition_start_time,
12113
15
     {"Time-Triggered Start Time", "docsis_optreq.trigger_definition.start_time", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12114
15
    },
12115
    /* OPT-RSP */
12116
15
    {&hf_docsis_optrsp_reserved,
12117
15
     {"Reserved", "docsis_optrsp.reserved",
12118
15
      FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL}
12119
15
    },
12120
15
    {&hf_docsis_optrsp_prof_id,
12121
15
     {"Profile Identifier", "docsis_optrsp.prof_id",
12122
15
      FT_UINT8, BASE_DEC, VALS(profile_id_vals), 0x0, NULL, HFILL}
12123
15
    },
12124
15
    {&hf_docsis_optrsp_status,
12125
15
     {"Status", "docsis_optrsp.status",
12126
15
      FT_UINT8, BASE_DEC, VALS(opt_status_vals), 0x0, NULL, HFILL}
12127
15
    },
12128
15
    {&hf_docsis_optrsp_tlv,
12129
15
     {"TLV", "docsis_optrsp.tlv",
12130
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12131
15
    },
12132
15
    {&hf_docsis_optrsp_tlv_type,
12133
15
     {"Type", "docsis_optrsp.tlv.type",
12134
15
      FT_UINT8, BASE_DEC, VALS(optrsp_tlv_vals), 0x0, "OPT-RSP TLV type", HFILL}
12135
15
    },
12136
15
    {&hf_docsis_optrsp_tlv_length,
12137
15
     {"Length", "docsis_optrsp.tlv.length",
12138
15
      FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12139
15
    },
12140
15
    {&hf_docsis_optrsp_rxmer_tlv,
12141
15
     {"TLV", "docsis_optrsp.rxmer_snr_margin.tlv",
12142
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12143
15
    },
12144
15
    {&hf_docsis_optrsp_rxmer_tlv_type,
12145
15
     {"Type", "docsis_optrsp.rxmer_snr_margin.tlv.type",
12146
15
      FT_UINT8, BASE_DEC, VALS(optrsp_rxmer_vals), 0x0, NULL, HFILL}
12147
15
    },
12148
15
    {&hf_docsis_optrsp_rxmer_tlv_length,
12149
15
     {"Length", "docsis_optrsp.rxmer_snr_margin.tlv.length",
12150
15
      FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12151
15
    },
12152
15
    {&hf_docsis_optrsp_rxmer_subcarrier,
12153
15
     {"RxMER", "docsis_optrsp.rxmer_snr_margin.rxmer_per_subc",
12154
15
      FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0, NULL, HFILL}
12155
15
    },
12156
15
    {&hf_docsis_optrsp_rxmer_subcarrier_threshold,
12157
15
     {"Result", "docsis_optrsp.rxmer_snr_margin.threshold_per_subc",
12158
15
      FT_BYTES, BASE_NONE, NULL, 0x0,
12159
15
      "RxMER per Subcarrier Threshold Comparison Result", HFILL}
12160
15
    },
12161
15
    {&hf_docsis_optrsp_rxmer_subcarrier_threshold_count,
12162
15
     {"Number of Subcarriers", "docsis_optrsp.rxmer_snr_margin.threshold_count",
12163
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
12164
15
      "Number of Subcarriers whose RxMER is RxMER Margin below the RxMER Target", HFILL}
12165
15
    },
12166
15
    {&hf_docsis_optrsp_rxmer_snr_margin,
12167
15
     {"SNR Margin", "docsis_optrsp.rxmer_snr_margin.snr_margin",
12168
15
      FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0, NULL, HFILL}
12169
15
    },
12170
15
    {&hf_docsis_optrsp_rxmer_avg,
12171
15
     {"Average RxMER", "docsis_optrsp.rxmer_snr_margin.rxmer_avg",
12172
15
      FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0, NULL, HFILL}
12173
15
    },
12174
15
    {&hf_docsis_optrsp_rxmer_ect_rba_subband_direction,
12175
15
     {"ECT RxMER Probe-Triggered RBA Sub-band Direction Set", "docsis_optrsp.rxmer_snr_margin.ect_rba_subband_direction",
12176
15
      FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}
12177
15
    },
12178
15
    {&hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb0,
12179
15
     {"Direction Sub-band 0", "docsis_optrsp.rxmer_snr_margin.ect_rba_subband_direction.0",
12180
15
      FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x04, NULL, HFILL}
12181
15
    },
12182
15
    {&hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb1,
12183
15
     {"Direction Sub-band 1", "docsis_optrsp.rxmer_snr_margin.ect_rba_subband_direction.1",
12184
15
      FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x02, NULL, HFILL}
12185
15
    },
12186
15
    {&hf_docsis_optrsp_rxmer_ect_rba_subband_direction_sb2,
12187
15
     {"Direction Sub-band 2", "docsis_optrsp.rxmer_snr_margin.ect_rba_subband_direction.2",
12188
15
      FT_BOOLEAN, 8, TFS(&tfs_up_down), 0x01, NULL, HFILL}
12189
15
    },
12190
15
    {&hf_docsis_optrsp_data_cw_tlv,
12191
15
     {"TLV", "docsis_optrsp.data_cw.tlv",
12192
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12193
15
    },
12194
15
    {&hf_docsis_optrsp_data_cw_tlv_type,
12195
15
     {"Type", "docsis_optrsp.data_cw.tlv.type",
12196
15
      FT_UINT8, BASE_DEC, VALS(optrsp_data_cw_vals), 0x0, NULL, HFILL}
12197
15
    },
12198
15
    {&hf_docsis_optrsp_data_cw_tlv_length,
12199
15
     {"Length", "docsis_optrsp.data_cw.tlv.length",
12200
15
      FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12201
15
    },
12202
15
    {&hf_docsis_optrsp_data_cw_count,
12203
15
     {"Codeword Count", "docsis_optrsp.data_cw.count",
12204
15
      FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12205
15
    },
12206
15
    {&hf_docsis_optrsp_data_cw_corrected,
12207
15
     {"Corrected Codeword Count", "docsis_optrsp.data_cw.corrected",
12208
15
      FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12209
15
    },
12210
15
    {&hf_docsis_optrsp_data_cw_uncorrectable,
12211
15
     {"Uncorrectable Codeword Count", "docsis_optrsp.data_cw.uncorrectable",
12212
15
      FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12213
15
    },
12214
15
    {&hf_docsis_optrsp_data_cw_threshold_comparison,
12215
15
     {"Comparison Result", "docsis_optrsp.data_cw.threshold_comparison",
12216
15
      FT_UINT8, BASE_DEC, VALS(optrsp_data_cw_threshold_comparison_vals), 0x0,
12217
15
      "Codeword Threshold Comparison Result for Candidate Profile", HFILL}
12218
15
    },
12219
15
    {&hf_docsis_optrsp_ncp_fields_tlv,
12220
15
     {"TLV", "docsis_optrsp.ncp_fields.tlv",
12221
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12222
15
    },
12223
15
    {&hf_docsis_optrsp_ncp_fields_tlv_type,
12224
15
     {"Type", "docsis_optrsp.ncp_fields.tlv.type",
12225
15
      FT_UINT8, BASE_DEC, VALS(optrsp_ncp_fields_vals), 0x0, NULL, HFILL}
12226
15
    },
12227
15
    {&hf_docsis_optrsp_ncp_fields_tlv_length,
12228
15
     {"Length", "docsis_optrsp.ncp_fields.tlv.length",
12229
15
      FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12230
15
    },
12231
15
    {&hf_docsis_optrsp_ncp_fields_count,
12232
15
     {"NCP Fields Count", "docsis_optrsp.ncp_fields.count",
12233
15
      FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12234
15
    },
12235
15
    {&hf_docsis_optrsp_ncp_fields_failure,
12236
15
     {"NCP CRC Failure Count", "docsis_optrsp.ncp_fields.failure",
12237
15
      FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}
12238
15
    },
12239
15
    {&hf_docsis_optrsp_ncp_fields_threshold_comparison,
12240
15
     {"Comparison Result", "docsis_optrsp.ncp_fields.threshold_comparison",
12241
15
      FT_UINT8, BASE_DEC, VALS(optrsp_ncp_fields_threshold_comparison_vals), 0x0,
12242
15
      "NCP CRC Threshold Comparison Result", HFILL
12243
15
     }
12244
15
    },
12245
    /* OPT-ACK */
12246
15
    {&hf_docsis_optack_prof_id,
12247
15
     {"Profile Identifier", "docsis_optack.prof_id", FT_UINT8, BASE_DEC, VALS(profile_id_vals), 0x0, NULL, HFILL}
12248
15
    },
12249
15
    {&hf_docsis_optack_reserved,
12250
15
     {"Reserved", "docsis_optack.reserved", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
12251
15
    },
12252
    /* RBA */
12253
15
    {&hf_docsis_rba_tg_id,
12254
15
     {"Transmission Group ID", "docsis_rba.tg_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12255
15
    },
12256
15
    {&hf_docsis_rba_ccc,
12257
15
     {"Change Count", "docsis_rba.ccc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12258
15
    },
12259
15
    {&hf_docsis_rba_dcid,
12260
15
     {"Current Channel DCID", "docsis_rba.dcid", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12261
15
    },
12262
15
    {&hf_docsis_rba_control_byte_bitmask,
12263
15
     {"Control byte bitmask", "docsis_rba.control_byte_bitmask", FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL}
12264
15
    },
12265
15
    {&hf_docsis_rba_resource_block_change_bit,
12266
15
     {"Resource Block Change bit", "docsis_rba.rb_change_bit", FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL}
12267
15
    },
12268
15
    {&hf_docsis_rba_expiration_time_valid_bit,
12269
15
     {"Expiration Time Valid bit", "docsis_rba.exp_time_valid_bit", FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL}
12270
15
    },
12271
15
    {&hf_docsis_rba_control_byte_bitmask_rsvd,
12272
15
     {"Control byte bitmask reserved", "docsis_rba.control_byte_bitmask_rsvd", FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL}
12273
15
    },
12274
15
    {&hf_docsis_rba_rba_time,
12275
15
     {"RBA Time", "docsis_rba.rba_time", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}
12276
15
    },
12277
15
    {&hf_docsis_rba_rba_expiration_time,
12278
15
     {"RBA Expiration Time", "docsis_rba.rba_expiration_time", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL}
12279
15
    },
12280
15
    {&hf_docsis_rba_number_of_subbands,
12281
15
     {"Number of Sub-bands", "docsis_rba.nr_subbands", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12282
15
    },
12283
15
    {&hf_docsis_rba_subband_direction,
12284
15
     {"Sub-band direction", "docsis_rba.subband_direction", FT_UINT8, BASE_DEC, VALS(rba_subband_direction_vals), 0x0, NULL, HFILL}
12285
15
    },
12286
    /* CWT-REQ and CWT-RSP */
12287
15
    {&hf_docsis_cwt_trans_id,
12288
15
     {"Transaction ID", "docsis_cwt.trans_id",
12289
15
      FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12290
15
    },
12291
15
    {&hf_docsis_cwt_sub_band_id,
12292
15
     {"Sub-band ID", "docsis_cwt.subband_id",
12293
15
      FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12294
15
    },
12295
15
    {&hf_docsis_cwt_op_code,
12296
15
     {"Operation Code", "docsis_cwt.op_code",
12297
15
      FT_UINT8, BASE_DEC, VALS(cwt_op_code_vals), 0x0, NULL, HFILL}
12298
15
    },
12299
15
    {&hf_docsis_cwt_status,
12300
15
     {"Status", "docsis_cwt.status",
12301
15
      FT_UINT8, BASE_DEC, VALS(cwt_status_vals), 0x0, NULL, HFILL}
12302
15
    },
12303
15
    {&hf_docsis_cwt_tlv,
12304
15
     {"TLV", "docsis_cwt.tlv",
12305
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
12306
15
    },
12307
15
    {&hf_docsis_cwt_tlv_type,
12308
15
     {"Type", "docsis_cwt.tlv.type",
12309
15
      FT_UINT8, BASE_DEC, VALS(cwt_tlv_vals), 0x0, NULL, HFILL}
12310
15
    },
12311
15
    {&hf_docsis_cwt_tlv_length,
12312
15
     {"Length", "docsis_cwt.tlv.length",
12313
15
      FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12314
15
    },
12315
15
    {&hf_docsis_cwt_phase_rotation,
12316
15
     {"Phase Rotation", "docsis_cwt.phase_rotation",
12317
15
      FT_UINT8, BASE_DEC, VALS(cwt_phase_rotation_vals), 0x0,
12318
15
      NULL, HFILL}
12319
15
    },
12320
15
    {&hf_docsis_cwt_max_duration,
12321
15
     {"Maximum Duration", "docsis_cwt.max_duration",
12322
15
      FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
12323
15
      NULL, HFILL}
12324
15
    },
12325
15
    {&hf_docsis_cwt_us_encodings_tlv,
12326
15
     {"TLV", "docsis_cwt.us_encodings.tlv",
12327
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12328
15
      NULL, HFILL}
12329
15
    },
12330
15
    {&hf_docsis_cwt_us_encodings_tlv_type,
12331
15
     {"Type", "docsis_cwt.us_encodings.tlv.type",
12332
15
      FT_UINT8, BASE_DEC, VALS(cwt_us_encodings_tlv_vals), 0x0,
12333
15
      NULL, HFILL}
12334
15
    },
12335
15
    {&hf_docsis_cwt_us_encodings_tlv_length,
12336
15
     {"Length", "docsis_cwt.us_encodings.tlv.length",
12337
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12338
15
      NULL, HFILL}
12339
15
    },
12340
15
    {&hf_docsis_cwt_us_encodings_cid,
12341
15
     {"Extended Upstream Channel ID", "docsis_cwt.us_encodings.cid",
12342
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12343
15
      NULL, HFILL}
12344
15
    },
12345
15
    {&hf_docsis_cwt_us_encodings_sc_index,
12346
15
     {"Upstream Subcarrier Index", "docsis_cwt.us_encodings.sc_index",
12347
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
12348
15
      NULL, HFILL}
12349
15
    },
12350
15
    {&hf_docsis_cwt_us_encodings_power_boost,
12351
15
     {"CWT Power Boost", "docsis_cwt.us_encodings.power_boost",
12352
15
      FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0,
12353
15
      NULL, HFILL}
12354
15
    },
12355
    /* ECT-REQ and ECT-RSP */
12356
15
    {&hf_docsis_ect_trans_id,
12357
15
    {"Transaction ID", "docsis_ect.trans_id",
12358
15
      FT_UINT16, BASE_CUSTOM, CF_FUNC(ect_trans_id_val), 0x0,
12359
15
      NULL, HFILL}
12360
15
    },
12361
15
    {&hf_docsis_ect_rsp_code,
12362
15
    {"Response Code", "docsis_ect.rsp_code",
12363
15
      FT_UINT8, BASE_DEC, VALS(ect_rsp_code_vals), 0x0,
12364
15
      NULL, HFILL}
12365
15
    },
12366
15
    {&hf_docsis_ect_tlv,
12367
15
    {"TLV", "docsis_ect.tlv",
12368
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12369
15
      NULL, HFILL}
12370
15
    },
12371
15
    {&hf_docsis_ect_tlv_type,
12372
15
    {"Type", "docsis_ect.tlv.type",
12373
15
      FT_UINT8, BASE_DEC, VALS(ect_tlv_vals), 0x0,
12374
15
      NULL, HFILL}
12375
15
    },
12376
15
    {&hf_docsis_ect_tlv_length,
12377
15
    {"Length", "docsis_ect.tlv.length",
12378
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12379
15
      NULL, HFILL}
12380
15
    },
12381
15
    {&hf_docsis_ect_control_tlv,
12382
15
    {"TLV", "docsis_ect.control.tlv",
12383
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12384
15
      NULL, HFILL}
12385
15
    },
12386
15
    {&hf_docsis_ect_control_tlv_type,
12387
15
    {"Type", "docsis_ect.control.tlv.type",
12388
15
      FT_UINT8, BASE_DEC, VALS(ect_control_tlv_vals), 0x0,
12389
15
      NULL, HFILL}
12390
15
    },
12391
15
    {&hf_docsis_ect_control_tlv_length,
12392
15
    {"Length", "docsis_ect.control.tlv.length",
12393
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12394
15
      NULL, HFILL}
12395
15
    },
12396
15
    {&hf_docsis_ect_control_subband_direction,
12397
15
    {"Direction", "docsis_ect.control.subband_direction",
12398
15
      FT_UINT8, BASE_DEC, VALS(rba_subband_direction_vals), 0x0,
12399
15
      NULL, HFILL}
12400
15
    },
12401
15
    {&hf_docsis_ect_control_status,
12402
15
    {"Training Status", "docsis_ect.control.status",
12403
15
      FT_UINT8, BASE_DEC, VALS(ect_control_status_vals), 0x0,
12404
15
      NULL, HFILL}
12405
15
    },
12406
15
    {&hf_docsis_ect_control_method_tlv,
12407
15
    {"TLV", "docsis_ect.control.method.tlv",
12408
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12409
15
      NULL, HFILL}
12410
15
    },
12411
15
    {&hf_docsis_ect_control_method_tlv_type,
12412
15
    {"Type", "docsis_ect.control.method.tlv.type",
12413
15
      FT_UINT8, BASE_DEC, VALS(ect_control_method_tlv_vals), 0x0,
12414
15
      NULL, HFILL}
12415
15
    },
12416
15
    {&hf_docsis_ect_control_method_tlv_length,
12417
15
    {"Length", "docsis_ect.control.method.tlv.length",
12418
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12419
15
      NULL, HFILL}
12420
15
    },
12421
15
    {&hf_docsis_ect_control_method_fg_tlv,
12422
15
    {"TLV", "docsis_ect.control.method.fg.tlv",
12423
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12424
15
      NULL, HFILL}
12425
15
    },
12426
15
    {&hf_docsis_ect_control_method_fg_tlv_type,
12427
15
    {"Type", "docsis_ect.control.method.fg.tlv.type",
12428
15
      FT_UINT8, BASE_DEC, VALS(ect_control_method_fg_tlv_vals), 0x0,
12429
15
      NULL, HFILL}
12430
15
    },
12431
15
    {&hf_docsis_ect_control_method_fg_tlv_length,
12432
15
    {"Length", "docsis_ect.control.method.fg.tlv.length",
12433
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12434
15
      NULL, HFILL}
12435
15
    },
12436
15
    {&hf_docsis_ect_control_method_fg_duration,
12437
15
    {"Duration", "docsis_ect.control.method.fg.duration",
12438
15
      FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_symbols), 0x0,
12439
15
      NULL, HFILL}
12440
15
    },
12441
15
    {&hf_docsis_ect_control_method_fg_periodicity,
12442
15
    {"Periodicity", "docsis_ect.control.method.fg.periodicity",
12443
15
      FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
12444
15
      NULL, HFILL}
12445
15
    },
12446
15
    {&hf_docsis_ect_control_method_fg_expiration_time,
12447
15
    {"Expiration Time", "docsis_ect.control.method.fg.expiration_time",
12448
15
      FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
12449
15
      NULL, HFILL}
12450
15
    },
12451
15
    {&hf_docsis_ect_control_method_fg_ds_zbl,
12452
15
    {"Downstream Zero Bit Loading", "docsis_ect.control.method.fg.ds_zbl",
12453
15
      FT_UINT8, BASE_DEC, VALS(ect_ds_zbl_vals), 0x0,
12454
15
      NULL, HFILL}
12455
15
    },
12456
15
    {&hf_docsis_ect_control_method_bg_tlv,
12457
15
    {"TLV", "docsis_ect.control.method.bg.tlv",
12458
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12459
15
      NULL, HFILL}
12460
15
    },
12461
15
    {&hf_docsis_ect_control_method_bg_tlv_type,
12462
15
    {"Type", "docsis_ect.control.method.bg.tlv.type",
12463
15
      FT_UINT8, BASE_DEC, VALS(ect_control_method_bg_tlv_vals), 0x0,
12464
15
      NULL, HFILL}
12465
15
    },
12466
15
    {&hf_docsis_ect_control_method_bg_tlv_length,
12467
15
    {"Length", "docsis_ect.control.method.bg.tlv.length",
12468
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12469
15
      NULL, HFILL}
12470
15
    },
12471
15
    {&hf_docsis_ect_control_method_bg_duration,
12472
15
    {"Duration", "docsis_ect.control.method.bg.duration",
12473
15
      FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
12474
15
      NULL, HFILL}
12475
15
    },
12476
15
    {&hf_docsis_ect_control_method_bg_periodicity,
12477
15
    {"Periodicity", "docsis_ect.control.method.bg.periodicity",
12478
15
      FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
12479
15
      NULL, HFILL}
12480
15
    },
12481
15
    {&hf_docsis_ect_control_method_bg_expiration_time,
12482
15
    {"Expiration Time", "docsis_ect.control.method.bg.expiration_time",
12483
15
      FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
12484
15
      NULL, HFILL}
12485
15
    },
12486
15
    {&hf_docsis_ect_control_method_bg_start_time,
12487
15
    {"Start Time", "docsis_ect.control.method.bg.start_time",
12488
15
      FT_UINT32, BASE_DEC, NULL, 0x0,
12489
15
      NULL, HFILL}
12490
15
    },
12491
15
    {&hf_docsis_ect_control_partial_service_tlv,
12492
15
    {"TLV", "docsis_ect.control.partial_service.tlv",
12493
15
      FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
12494
15
      NULL, HFILL}
12495
15
    },
12496
15
    {&hf_docsis_ect_control_partial_service_tlv_type,
12497
15
    {"Type", "docsis_ect.control.partial_service.tlv.type",
12498
15
      FT_UINT8, BASE_DEC, VALS(ect_control_partial_service_tlv_vals), 0x0,
12499
15
      NULL, HFILL}
12500
15
    },
12501
15
    {&hf_docsis_ect_control_partial_service_tlv_length,
12502
15
    {"Length", "docsis_ect.control.partial_service.tlv.length",
12503
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12504
15
      NULL, HFILL}
12505
15
    },
12506
15
    {&hf_docsis_ect_control_partial_service_dcid,
12507
15
    {"DCID", "docsis_ect.control.partial_service.dcid",
12508
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12509
15
      NULL, HFILL}
12510
15
    },
12511
15
    {&hf_docsis_ect_control_partial_service_ucid,
12512
15
    {"UCID", "docsis_ect.control.partial_service.ucid",
12513
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12514
15
      NULL, HFILL}
12515
15
    },
12516
15
    {&hf_docsis_ect_control_deferral_time,
12517
15
    {"Deferral Time", "docsis_ect.control.deferral_time",
12518
15
      FT_UINT8, BASE_CUSTOM, CF_FUNC(ect_deferral_time_val), 0x0,
12519
15
      NULL, HFILL}
12520
15
    },
12521
15
    {&hf_docsis_ect_control_rxmer_duration,
12522
15
    {"RxMER Duration", "docsis_ect.control.rxmer_duration",
12523
15
      FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_symbols), 0x0,
12524
15
      NULL, HFILL}
12525
15
    },
12526
    /* DPR */
12527
15
    {&hf_docsis_dpr_carrier,
12528
15
    {"Carrier DCID", "docsis_dpr.carrier",
12529
15
      FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12530
15
    },
12531
15
    {&hf_docsis_dpr_dcid,
12532
15
    {"Protected DCID", "docsis_dpr.dcid",
12533
15
      FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
12534
15
    },
12535
15
    {&hf_docsis_dpr_tg_id,
12536
15
    {"Protected TG ID", "docsis_dpr.tg_id",
12537
15
      FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(dpr_tg_id_vals), 0x0,
12538
15
      NULL, HFILL}
12539
15
    },
12540
15
    {&hf_docsis_dpr_reserved,
12541
15
    {"Reserved", "docsis_dpr.reserved",
12542
15
      FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL}
12543
15
    },
12544
15
    {&hf_docsis_dpr_start_time,
12545
15
    {"Start time", "docsis_dpr.start_time",
12546
15
      FT_UINT32, BASE_CUSTOM, CF_FUNC(d30_time_ticks), 0x0,
12547
15
      NULL, HFILL}
12548
15
    },
12549
15
    {&hf_docsis_dpr_duration,
12550
15
    {"Duration", "docsis_dpr.duration",
12551
15
      FT_UINT32, BASE_CUSTOM, CF_FUNC(d30_time_ticks), 0x0,
12552
15
      NULL, HFILL}
12553
15
    },
12554
    /* MAC Management */
12555
15
    {&hf_docsis_mgt_upstream_chid,
12556
15
     {"Upstream Channel ID", "docsis_mgmt.upchid",
12557
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12558
15
      NULL, HFILL}
12559
15
    },
12560
15
    {&hf_docsis_mgt_down_chid,
12561
15
     {"Downstream Channel ID", "docsis_mgmt.downchid",
12562
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12563
15
      "Management Message", HFILL}
12564
15
    },
12565
15
    {&hf_docsis_mgt_tranid,
12566
15
     {"Transaction ID", "docsis_mgmt.tranid",
12567
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
12568
15
      NULL, HFILL}
12569
15
    },
12570
15
    {&hf_docsis_mgt_dst_addr,
12571
15
     {"Destination Address", "docsis_mgmt.dst",
12572
15
      FT_ETHER, BASE_NONE, NULL, 0x0,
12573
15
      NULL, HFILL}
12574
15
    },
12575
15
    {&hf_docsis_mgt_src_addr,
12576
15
     {"Source Address", "docsis_mgmt.src",
12577
15
      FT_ETHER, BASE_NONE, NULL, 0x0,
12578
15
      NULL, HFILL}
12579
15
    },
12580
15
    {&hf_docsis_mgt_msg_len,
12581
15
     {"Message Length - DSAP to End (Bytes)", "docsis_mgmt.msglen",
12582
15
      FT_UINT16, BASE_DEC, NULL, 0x0,
12583
15
      NULL, HFILL}
12584
15
    },
12585
15
    {&hf_docsis_mgt_dsap,
12586
15
     {"DSAP", "docsis_mgmt.dsap",
12587
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
12588
15
      "Destination SAP", HFILL}
12589
15
    },
12590
15
    {&hf_docsis_mgt_ssap,
12591
15
     {"SSAP", "docsis_mgmt.ssap",
12592
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
12593
15
      "Source SAP", HFILL}
12594
15
    },
12595
15
    {&hf_docsis_mgt_30_transmit_power,
12596
15
     {"Upstream Transmit Power, sent to 3.0 CMTS", "docsis_mgmt.30_transmit_power",
12597
15
      FT_UINT8, BASE_CUSTOM, CF_FUNC(fourth_db), 0x0,
12598
15
      NULL, HFILL}
12599
15
    },
12600
15
    {&hf_docsis_mgt_31_transmit_power,
12601
15
     {"Upstream Transmit Power, sent to 3.1 CMTS", "docsis_mgmt.31_transmit_power",
12602
15
      FT_UINT16, BASE_CUSTOM, CF_FUNC(fourth_db), 0x01FF,
12603
15
      NULL, HFILL}
12604
15
    },
12605
15
    {&hf_docsis_mgt_40_transmit_power,
12606
15
     {"Upstream Transmit Power, sent to 4.0 CMTS", "docsis_mgmt.40_transmit_power",
12607
15
      FT_INT16, BASE_CUSTOM, CF_FUNC(fourth_db), 0x01FF,
12608
15
      NULL, HFILL}
12609
15
    },
12610
15
    {&hf_docsis_mgt_control,
12611
15
     {"Control", "docsis_mgmt.control",
12612
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
12613
15
      NULL, HFILL}
12614
15
    },
12615
15
    {&hf_docsis_mgt_version,
12616
15
     {"Version", "docsis_mgmt.version",
12617
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12618
15
      NULL, HFILL}
12619
15
    },
12620
15
    {&hf_docsis_mgt_type,
12621
15
     {"Type", "docsis_mgmt.type",
12622
15
      FT_UINT8, BASE_DEC, VALS (mgmt_type_vals), 0x0,
12623
15
      NULL, HFILL}
12624
15
    },
12625
15
    {&hf_docsis_mgt_rsvd,
12626
15
     {"Reserved", "docsis_mgmt.rsvd",
12627
15
      FT_UINT8, BASE_DEC, NULL, 0x0,
12628
15
      NULL, HFILL}
12629
15
    },
12630
15
    {&hf_docsis_mgt_multipart,
12631
15
     {"Multipart", "docsis_mgmt.multipart",
12632
15
      FT_UINT8, BASE_HEX, NULL, 0x0,
12633
15
      NULL, HFILL}
12634
15
    },
12635
15
    {&hf_docsis_mgt_multipart_number_of_fragments,
12636
15
     {"Multipart - Number of Fragments", "docsis_mgmt.multipart.number_of_fragments",
12637
15
      FT_UINT8, BASE_CUSTOM, CF_FUNC(multipart_number_of_fragments), 0xF0,
12638
15
      NULL, HFILL}
12639
15
    },
12640
15
    {&hf_docsis_mgt_multipart_fragment_sequence_number,
12641
15
     {"Multipart - Fragment Sequence Number", "docsis_mgmt.multipart.fragment_sequence_number",
12642
15
      FT_UINT8, BASE_DEC, NULL, 0x0F,
12643
15
      NULL, HFILL}
12644
15
    },
12645
15
    { &hf_docsis_tlv_fragment_overlap,
12646
15
     { "Fragment overlap", "docsis_mgmt.tlv.fragment.overlap",
12647
15
       FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12648
15
       "Fragment overlaps with other fragments", HFILL}
12649
15
    },
12650
15
    { &hf_docsis_tlv_fragment_overlap_conflict,
12651
15
     { "Conflicting data in fragment overlap", "docsis_mgmt.tlv.fragment.overlap.conflict",
12652
15
       FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12653
15
       "Overlapping fragments contained conflicting data", HFILL}
12654
15
    },
12655
15
    { &hf_docsis_tlv_fragment_multiple_tails,
12656
15
     { "Multiple tail fragments found", "docsis_mgmt.tlv.fragment.multipletails",
12657
15
       FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12658
15
       "Several tails were found when defragmenting the packet", HFILL}
12659
15
    },
12660
15
    { &hf_docsis_tlv_fragment_too_long_fragment,
12661
15
     { "Fragment too long", "docsis_mgmt.tlv.fragment.toolongfragment",
12662
15
       FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12663
15
       "Fragment contained data past end of packet", HFILL}
12664
15
    },
12665
15
    { &hf_docsis_tlv_fragment_error,
12666
15
     { "Defragmentation error", "docsis_mgmt.tlv.fragment.error",
12667
15
       FT_FRAMENUM, BASE_NONE, NULL, 0x0,
12668
15
       "Defragmentation error due to illegal fragments", HFILL}
12669
15
    },
12670
15
    { &hf_docsis_tlv_fragment_count,
12671
15
     { "Fragment count", "docsis_mgmt.tlv.fragment.count",
12672
15
       FT_UINT32, BASE_DEC, NULL, 0x0,
12673
15
       NULL, HFILL}
12674
15
    },
12675
15
    { &hf_docsis_tlv_fragment,
12676
15
     { "TLV Fragment", "docsis_mgmt.tlv.fragment",
12677
15
       FT_FRAMENUM, BASE_NONE, NULL, 0x0,
12678
15
       NULL, HFILL}
12679
15
    },
12680
15
    { &hf_docsis_tlv_fragments,
12681
15
     { "TLV Fragments", "docsis_mgmt.tlv.fragments",
12682
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
12683
15
       NULL, HFILL}
12684
15
    },
12685
15
    { &hf_docsis_tlv_reassembled_in,
12686
15
     { "Reassembled TLV in frame", "docsis_mgmt.tlv.reassembled_in",
12687
15
       FT_FRAMENUM, BASE_NONE, NULL, 0x0,
12688
15
       "This TLV packet is reassembled in this frame", HFILL}
12689
15
    },
12690
15
    { &hf_docsis_tlv_reassembled_length,
12691
15
     { "Reassembled TLV length", "docsis_mgmt.tlv.reassembled.length",
12692
15
       FT_UINT32, BASE_DEC, NULL, 0x0,
12693
15
       "The total length of the reassembled payload", HFILL}
12694
15
    },
12695
15
    { &hf_docsis_tlv_reassembled_data,
12696
15
     { "Reassembled TLV data", "docsis_mgmt.tlv.reassembled.data",
12697
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
12698
15
       "The reassembled payload", HFILL}
12699
15
    },
12700
15
    { &hf_docsis_tlv_reassembled,
12701
15
     { "Reassembled TLV", "docsis_mgmt.tlv.reassembled",
12702
15
       FT_BYTES, BASE_NONE, NULL, 0x0,
12703
15
       NULL, HFILL}
12704
15
    },
12705
15
  };
12706
12707
15
  static int *ett[] = {
12708
15
    &ett_docsis_sync,
12709
15
    &ett_docsis_ucd,
12710
15
    &ett_docsis_tlv,
12711
15
    &ett_docsis_burst_tlv,
12712
15
    &ett_docsis_map,
12713
15
    &ett_docsis_map_ie,
12714
15
    &ett_docsis_map_probe_ie,
12715
15
    &ett_docsis_rngreq,
12716
15
    &ett_docsis_rngrsp,
12717
15
    &ett_docsis_rngrsptlv,
12718
15
    &ett_docsis_rngrsp_tlv_transmit_equalization_encodings,
12719
15
    &ett_docsis_rngrsp_tlv_transmit_equalization_encodings_coef,
12720
15
    &ett_docsis_rngrsp_tlv_commanded_power,
12721
15
    &ett_docsis_rngrsp_tlv_commanded_power_subtlv,
12722
15
    &ett_docsis_regreq,
12723
15
    &ett_docsis_regrsp,
12724
15
    &ett_docsis_uccreq,
12725
15
    &ett_docsis_uccrsp,
12726
15
    &ett_docsis_bpkmreq,
12727
15
    &ett_docsis_bpkmrsp,
12728
15
    &ett_docsis_bpkmattr,
12729
15
    &ett_docsis_bpkmattr_tlv,
12730
15
    &ett_docsis_bpkmattr_cmid,
12731
15
    &ett_docsis_bpkmattr_scap,
12732
15
    &ett_docsis_bpkmattr_crypto_suite,
12733
15
    &ett_docsis_bpkmattr_crypto_suite_list,
12734
15
    &ett_docsis_bpkmattr_allowed_bpi_versions,
12735
15
    &ett_docsis_bpkmattr_ocsp_responses,
12736
15
    &ett_docsis_bpkmattr_cmts_designation,
12737
15
    &ett_docsis_bpkmattr_tekp,
12738
15
    &ett_docsis_bpkmattr_sadsc,
12739
15
    &ett_docsis_bpkmattr_saqry,
12740
15
    &ett_docsis_bpkmattr_dnld,
12741
15
    &ett_docsis_regack,
12742
15
    &ett_docsis_dsareq,
12743
15
    &ett_docsis_dsarsp,
12744
15
    &ett_docsis_dsaack,
12745
15
    &ett_docsis_dscreq,
12746
15
    &ett_docsis_dscrsp,
12747
15
    &ett_docsis_dscack,
12748
15
    &ett_docsis_dsdreq,
12749
15
    &ett_docsis_dsdrsp,
12750
15
    &ett_docsis_dccreq,
12751
15
    &ett_docsis_dccreq_sf_sub,
12752
15
    &ett_docsis_dccreq_ds_params,
12753
15
    &ett_docsis_dccreq_tlv,
12754
15
    &ett_docsis_dccrsp,
12755
15
    &ett_docsis_dccrsp_cm_jump_time,
12756
15
    &ett_docsis_dccrsp_tlv,
12757
15
    &ett_docsis_dccack,
12758
15
    &ett_docsis_dccack_tlv,
12759
15
    &ett_docsis_intrngreq,
12760
15
    &ett_docsis_dcd,
12761
15
    &ett_docsis_dcd_cfr,
12762
15
    &ett_docsis_dcd_cfr_ip,
12763
15
    &ett_docsis_dcd_rule,
12764
15
    &ett_docsis_dcd_clid,
12765
15
    &ett_docsis_dcd_cfg,
12766
15
    &ett_docsis_dcd_tlv,
12767
15
    &ett_docsis_mdd,
12768
15
    &ett_tlv,
12769
15
    &ett_sub_tlv,
12770
15
    &ett_docsis_mdd_cm_status_ev_en_for_docsis31,
12771
15
    &ett_docsis_mdd_ds_active_channel_list,
12772
15
    &ett_docsis_mdd_ds_service_group,
12773
15
    &ett_docsis_mdd_channel_profile_reporting_control,
12774
15
    &ett_docsis_mdd_ip_init_param,
12775
15
    &ett_docsis_mdd_up_active_channel_list,
12776
15
    &ett_docsis_mdd_upstream_active_channel_list_dschids_maps_ucds_dschids,
12777
15
    &ett_docsis_mdd_cm_status_event_control,
12778
15
    &ett_docsis_mdd_dsg_da_to_dsid,
12779
15
    &ett_docsis_mdd_docsis_version,
12780
15
    &ett_docsis_mdd_docsis_version_tlv,
12781
15
    &ett_docsis_mdd_diplexer_band_edge,
12782
15
    &ett_docsis_mdd_advanced_band_plan,
12783
15
    &ett_docsis_mdd_bpi_plus,
12784
15
    &ett_docsis_bintrngreq,
12785
15
    &ett_docsis_dbcreq,
12786
15
    &ett_docsis_dbcrsp,
12787
15
    &ett_docsis_dbcack,
12788
15
    &ett_docsis_dpvreq,
12789
15
    &ett_docsis_dpvrsp,
12790
15
    &ett_docsis_cmstatus,
12791
15
    &ett_docsis_cmstatus_tlv,
12792
15
    &ett_docsis_cmstatus_tlvtlv,
12793
15
    &ett_docsis_cmstatus_status_event_tlv,
12794
15
    &ett_docsis_cmstatus_status_event_tlvtlv,
12795
15
    &ett_docsis_cmstatusack,
12796
15
    &ett_docsis_cmctrlreq,
12797
15
    &ett_docsis_cmctrlreq_tlv,
12798
15
    &ett_docsis_cmctrlreq_tlvtlv,
12799
15
    &ett_docsis_cmctrl_tlv_us_event,
12800
15
    &ett_docsis_cmctrl_tlv_ds_event,
12801
15
    &ett_docsis_cmctrlrsp,
12802
15
    &ett_docsis_regreqmp,
12803
15
    &ett_docsis_regrspmp,
12804
15
    &ett_docsis_emreq,
12805
15
    &ett_docsis_emrsp,
12806
15
    &ett_docsis_emrsp_tlv,
12807
15
    &ett_docsis_emrsp_tlvtlv,
12808
15
    &ett_docsis_ocd,
12809
15
    &ett_docsis_ocd_tlv,
12810
15
    &ett_docsis_ocd_tlvtlv,
12811
15
    &ett_docsis_dpd,
12812
15
    &ett_docsis_dpd_tlv,
12813
15
    &ett_docsis_dpd_tlvtlv,
12814
15
    &ett_docsis_dpd_tlv_subcarrier_assignment,
12815
15
    &ett_docsis_dpd_tlv_subcarrier_assignment_vector,
12816
15
    &ett_docsis_optreq,
12817
15
    &ett_docsis_optreq_tlv,
12818
15
    &ett_docsis_optreq_tlvtlv,
12819
15
    &ett_docsis_optreq_tlv_rxmer_thresh_params,
12820
15
    &ett_docsis_optreq_tlv_rxmer_thresh_params_tlv,
12821
15
    &ett_docsis_optreq_tlv_trigger_definition_params,
12822
15
    &ett_docsis_optreq_tlv_trigger_definition_params_tlv,
12823
15
    &ett_docsis_optrsp,
12824
15
    &ett_docsis_optrsp_tlv,
12825
15
    &ett_docsis_optrsp_rxmer_tlv,
12826
15
    &ett_docsis_optrsp_rxmer_subcarrier_tlv,
12827
15
    &ett_docsis_optrsp_data_cw_tlv,
12828
15
    &ett_docsis_optrsp_ncp_fields_tlv,
12829
15
    &ett_docsis_optack,
12830
15
    &ett_docsis_rba,
12831
15
    &ett_docsis_rba_control_byte,
12832
15
    &ett_docsis_cwt_req,
12833
15
    &ett_docsis_cwt_rsp,
12834
15
    &ett_docsis_cwt_tlv,
12835
15
    &ett_docsis_cwt_subtlv,
12836
15
    &ett_docsis_ect_req,
12837
15
    &ett_docsis_ect_rsp,
12838
15
    &ett_docsis_ect_tlv,
12839
15
    &ett_docsis_ext_rngreq,
12840
15
    &ett_docsis_dpr,
12841
15
    &ett_docsis_mgmt,
12842
15
    &ett_mgmt_pay,
12843
15
    &ett_docsis_tlv_fragment,
12844
15
    &ett_docsis_tlv_fragments,
12845
15
    &ett_docsis_tlv_reassembled
12846
15
  };
12847
12848
15
  static ei_register_info ei[] = {
12849
15
    {&ei_docsis_mgmt_tlvlen_bad, {"docsis_mgmt.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
12850
15
    {&ei_docsis_mgmt_tlvtype_unknown, { "docsis_mgmt.tlvtypeunknown", PI_PROTOCOL, PI_WARN, "Unknown TLV type", EXPFILL}},
12851
15
    {&ei_docsis_mgmt_version_unknown, { "docsis_mgmt.versionunknown", PI_PROTOCOL, PI_WARN, "Unknown mac management version", EXPFILL}},
12852
15
    {&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
15
    {&ei_docsis_cwt_out_of_range, {"docsis_cwt.out_of_range", PI_PROTOCOL, PI_WARN, "CWT value out-of-range", EXPFILL}},
12854
15
    {&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
15
    {&ei_docsis_dpr_out_of_range, {"docsis_dpr.out_of_range", PI_PROTOCOL, PI_WARN, "DPR Duration out-of-range", EXPFILL}}
12856
15
   };
12857
12858
15
  expert_module_t* expert_docsis_mgmt;
12859
12860
15
  proto_docsis_mgmt = proto_register_protocol ("DOCSIS MAC Management", "DOCSIS MAC MGMT", "docsis_mgmt");
12861
12862
15
  proto_register_field_array (proto_docsis_mgmt, hf, array_length (hf));
12863
15
  proto_register_subtree_array (ett, array_length (ett));
12864
15
  expert_docsis_mgmt = expert_register_protocol(proto_docsis_mgmt);
12865
15
  expert_register_field_array(expert_docsis_mgmt, ei, array_length(ei));
12866
12867
15
  docsis_mgmt_dissector_table = register_dissector_table ("docsis_mgmt",
12868
15
                                                          "DOCSIS MAC Management", proto_docsis_mgmt,
12869
15
                                                          FT_UINT8, BASE_DEC);
12870
12871
  /* Register MAC Management commands as their own protocols so we can get the name of the option */
12872
15
  proto_docsis_sync = proto_register_protocol_in_name_only("DOCSIS Synchronisation Message", "SYNC Message", "docsis_sync", proto_docsis_mgmt, FT_BYTES);
12873
15
  proto_docsis_ucd = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Descriptor", "DOCSIS UCD", "docsis_ucd", proto_docsis_mgmt, FT_BYTES);
12874
15
  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
15
  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
15
  proto_docsis_rngreq = proto_register_protocol_in_name_only("DOCSIS Range Request Message", "DOCSIS RNG-REQ", "docsis_rngreq", proto_docsis_mgmt, FT_BYTES);
12877
15
  proto_docsis_rngrsp = proto_register_protocol_in_name_only("DOCSIS Ranging Response", "DOCSIS RNG-RSP", "docsis_rngrsp", proto_docsis_mgmt, FT_BYTES);
12878
15
  proto_docsis_regreq = proto_register_protocol_in_name_only("DOCSIS Registration Requests", "DOCSIS REG-REQ", "docsis_regreq", proto_docsis_mgmt, FT_BYTES);
12879
15
  proto_docsis_regrsp = proto_register_protocol_in_name_only("DOCSIS Registration Responses", "DOCSIS REG-RSP", "docsis_regrsp", proto_docsis_mgmt, FT_BYTES);
12880
15
  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
15
  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
15
  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
15
  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
15
  proto_docsis_regack = proto_register_protocol_in_name_only("DOCSIS Registration Acknowledge", "DOCSIS REG-ACK", "docsis_regack", proto_docsis_mgmt, FT_BYTES);
12885
15
  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
15
  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
15
  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
15
  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
15
  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
15
  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
15
  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
15
  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
15
  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
15
  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
15
  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
15
  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
15
  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
15
  proto_docsis_dcd = proto_register_protocol_in_name_only("DOCSIS Downstream Channel Descriptor", "DOCSIS DCD", "docsis_dcd", proto_docsis_mgmt, FT_BYTES);
12899
15
  proto_docsis_mdd = proto_register_protocol_in_name_only("DOCSIS MAC Domain Description", "DOCSIS MDD", "docsis_mdd", proto_docsis_mgmt, FT_BYTES);
12900
15
  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
15
  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
15
  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
15
  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
15
  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
15
  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
15
  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
15
  proto_docsis_cmstatus = proto_register_protocol_in_name_only("DOCSIS CM-STATUS Report", "DOCSIS CM-STATUS", "docsis_cmstatus", proto_docsis_mgmt, FT_BYTES);
12908
15
  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
15
  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
15
  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
15
  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
15
  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
15
  proto_docsis_emreq = proto_register_protocol_in_name_only("DOCSIS Energy Management Request", "DOCSIS EM-REQ", "docsis_emreq", proto_docsis_mgmt, FT_BYTES);
12914
15
  proto_docsis_emrsp = proto_register_protocol_in_name_only("DOCSIS Energy Management Response", "DOCSIS EM-RSP", "docsis_emrsp", proto_docsis_mgmt, FT_BYTES);
12915
15
  proto_docsis_ocd = proto_register_protocol_in_name_only("DOCSIS OFDM Channel Descriptor", "DOCSIS OCD", "docsis_ocd", proto_docsis_mgmt, FT_BYTES);
12916
15
  proto_docsis_dpd = proto_register_protocol_in_name_only("DOCSIS Downstream Profile Descriptor", "DOCSIS DPD", "docsis_dpd", proto_docsis_mgmt, FT_BYTES);
12917
15
  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
15
  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
15
  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
15
  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
15
  proto_docsis_rba = proto_register_protocol_in_name_only("DOCSIS Resource Block Assignment Message", "DOCSIS RBA", "docsis_rba", proto_docsis_mgmt, FT_BYTES);
12922
15
  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
15
  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
15
  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
15
  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
15
  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
15
  proto_docsis_dpr = proto_register_protocol_in_name_only("DOCSIS Downstream Protection", "DOCSIS DPR", "docsis_dpr", proto_docsis_mgmt, FT_BYTES);
12928
12929
15
  register_dissector ("docsis_mgmt", dissect_macmgmt, proto_docsis_mgmt);
12930
15
  docsis_ucd_handle = register_dissector ("docsis_ucd", dissect_ucd, proto_docsis_ucd);
12931
15
  docsis_rba_handle = register_dissector ("docsis_rba", dissect_rba, proto_docsis_rba);
12932
15
}
12933
12934
void
12935
proto_reg_handoff_docsis_mgmt (void)
12936
15
{
12937
  /* Create dissection function handles for all MAC Management commands */
12938
15
  dissector_add_uint ("docsis_mgmt", MGT_SYNC, create_dissector_handle( dissect_sync, proto_docsis_sync ));
12939
15
  dissector_add_uint ("docsis_mgmt", MGT_UCD, docsis_ucd_handle);
12940
15
  dissector_add_uint ("docsis_mgmt", 256*MAP_v1 + MGT_MAP, create_dissector_handle( dissect_map_v1, proto_docsis_map_v1 ));
12941
15
  dissector_add_uint ("docsis_mgmt", 256*MAP_v5 + MGT_MAP, create_dissector_handle( dissect_map_v5, proto_docsis_map_v5 ));
12942
15
  dissector_add_uint ("docsis_mgmt", MGT_RNG_REQ, create_dissector_handle( dissect_rngreq, proto_docsis_rngreq ));
12943
15
  dissector_add_uint ("docsis_mgmt", MGT_RNG_RSP, create_dissector_handle( dissect_rngrsp, proto_docsis_rngrsp ));
12944
15
  dissector_add_uint ("docsis_mgmt", MGT_REG_REQ, create_dissector_handle( dissect_regreq, proto_docsis_regreq ));
12945
15
  dissector_add_uint ("docsis_mgmt", MGT_REG_RSP, create_dissector_handle( dissect_regrsp, proto_docsis_regrsp ));
12946
15
  dissector_add_uint ("docsis_mgmt", MGT_UCC_REQ, create_dissector_handle( dissect_uccreq, proto_docsis_uccreq ));
12947
15
  dissector_add_uint ("docsis_mgmt", MGT_UCC_RSP, create_dissector_handle( dissect_uccrsp, proto_docsis_uccrsp ));
12948
15
  dissector_add_uint ("docsis_mgmt", MGT_BPKM_REQ, create_dissector_handle( dissect_bpkmreq, proto_docsis_bpkmreq ));
12949
15
  dissector_add_uint ("docsis_mgmt", MGT_BPKM_RSP, create_dissector_handle( dissect_bpkmrsp, proto_docsis_bpkmrsp ));
12950
15
  dissector_add_uint ("docsis_mgmt", MGT_REG_ACK, create_dissector_handle( dissect_regack, proto_docsis_regack ));
12951
15
  dissector_add_uint ("docsis_mgmt", MGT_DSA_REQ, create_dissector_handle( dissect_dsareq, proto_docsis_dsareq ));
12952
15
  dissector_add_uint ("docsis_mgmt", MGT_DSA_RSP, create_dissector_handle( dissect_dsarsp, proto_docsis_dsarsp ));
12953
15
  dissector_add_uint ("docsis_mgmt", MGT_DSA_ACK, create_dissector_handle( dissect_dsaack, proto_docsis_dsaack ));
12954
15
  dissector_add_uint ("docsis_mgmt", MGT_DSC_REQ, create_dissector_handle( dissect_dscreq, proto_docsis_dscreq ));
12955
15
  dissector_add_uint ("docsis_mgmt", MGT_DSC_RSP, create_dissector_handle( dissect_dscrsp, proto_docsis_dscrsp ));
12956
15
  dissector_add_uint ("docsis_mgmt", MGT_DSC_ACK, create_dissector_handle( dissect_dscack, proto_docsis_dscack ));
12957
15
  dissector_add_uint ("docsis_mgmt", MGT_DSD_REQ, create_dissector_handle( dissect_dsdreq, proto_docsis_dsdreq ));
12958
15
  dissector_add_uint ("docsis_mgmt", MGT_DSD_RSP, create_dissector_handle( dissect_dsdrsp, proto_docsis_dsdrsp ));
12959
15
  dissector_add_uint ("docsis_mgmt", MGT_DCC_REQ, create_dissector_handle( dissect_dccreq, proto_docsis_dccreq ));
12960
15
  dissector_add_uint ("docsis_mgmt", MGT_DCC_RSP, create_dissector_handle( dissect_dccrsp, proto_docsis_dccrsp ));
12961
15
  dissector_add_uint ("docsis_mgmt", MGT_DCC_ACK, create_dissector_handle( dissect_dccack, proto_docsis_dccack ));
12962
15
  dissector_add_uint ("docsis_mgmt", MGT_TYPE29UCD, create_dissector_handle( dissect_type29ucd, proto_docsis_type29ucd ));
12963
15
  dissector_add_uint ("docsis_mgmt", MGT_INIT_RNG_REQ, create_dissector_handle( dissect_intrngreq, proto_docsis_intrngreq ));
12964
15
  dissector_add_uint ("docsis_mgmt", MGT_DS_CH_DESC, create_dissector_handle( dissect_dcd, proto_docsis_dcd ));
12965
15
  dissector_add_uint ("docsis_mgmt", MGT_MDD, create_dissector_handle( dissect_mdd, proto_docsis_mdd ));
12966
15
  dissector_add_uint ("docsis_mgmt", MGT_B_INIT_RNG_REQ, create_dissector_handle( dissect_bintrngreq, proto_docsis_bintrngreq ));
12967
15
  dissector_add_uint ("docsis_mgmt", MGT_TYPE35UCD, create_dissector_handle( dissect_type35ucd, proto_docsis_type35ucd ));
12968
15
  dissector_add_uint ("docsis_mgmt", MGT_DBC_REQ, create_dissector_handle( dissect_dbcreq, proto_docsis_dbcreq ));
12969
15
  dissector_add_uint ("docsis_mgmt", MGT_DBC_RSP, create_dissector_handle( dissect_dbcrsp, proto_docsis_dbcrsp ));
12970
15
  dissector_add_uint ("docsis_mgmt", MGT_DBC_ACK, create_dissector_handle( dissect_dbcack, proto_docsis_dbcack ));
12971
15
  dissector_add_uint ("docsis_mgmt", MGT_DPV_REQ, create_dissector_handle( dissect_dpvreq, proto_docsis_dpvreq ));
12972
15
  dissector_add_uint ("docsis_mgmt", MGT_DPV_RSP, create_dissector_handle( dissect_dpvrsp, proto_docsis_dpvrsp ));
12973
15
  dissector_add_uint ("docsis_mgmt", MGT_CM_STATUS, create_dissector_handle( dissect_cmstatus, proto_docsis_cmstatus ));
12974
15
  dissector_add_uint ("docsis_mgmt", MGT_CM_STATUS_ACK, create_dissector_handle( dissect_cmstatusack, proto_docsis_cmstatusack ));
12975
15
  dissector_add_uint ("docsis_mgmt", MGT_CM_CTRL_REQ, create_dissector_handle( dissect_cmctrlreq, proto_docsis_cmctrlreq ));
12976
15
  dissector_add_uint ("docsis_mgmt", MGT_CM_CTRL_RSP, create_dissector_handle( dissect_cmctrlrsp, proto_docsis_cmctrlrsp ));
12977
15
  dissector_add_uint ("docsis_mgmt", MGT_REG_REQ_MP, create_dissector_handle( dissect_regreqmp, proto_docsis_regreqmp ));
12978
15
  dissector_add_uint ("docsis_mgmt", MGT_REG_RSP_MP, create_dissector_handle( dissect_regrspmp, proto_docsis_regrspmp ));
12979
15
  dissector_add_uint ("docsis_mgmt", MGT_EM_REQ, create_dissector_handle( dissect_emreq, proto_docsis_emreq ));
12980
15
  dissector_add_uint ("docsis_mgmt", MGT_EM_RSP, create_dissector_handle( dissect_emrsp, proto_docsis_emrsp ));
12981
15
  dissector_add_uint ("docsis_mgmt", MGT_OCD, create_dissector_handle( dissect_ocd, proto_docsis_ocd ));
12982
15
  dissector_add_uint ("docsis_mgmt", MGT_DPD, create_dissector_handle( dissect_dpd, proto_docsis_dpd ));
12983
15
  dissector_add_uint ("docsis_mgmt", MGT_TYPE51UCD, create_dissector_handle( dissect_type51ucd, proto_docsis_type51ucd ));
12984
15
  dissector_add_uint ("docsis_mgmt", MGT_OPT_REQ, create_dissector_handle( dissect_optreq, proto_docsis_optreq ));
12985
15
  dissector_add_uint ("docsis_mgmt", MGT_OPT_RSP, create_dissector_handle( dissect_optrsp, proto_docsis_optrsp ));
12986
15
  dissector_add_uint ("docsis_mgmt", MGT_OPT_ACK, create_dissector_handle( dissect_optack, proto_docsis_optack ));
12987
15
  dissector_add_uint ("docsis_mgmt", MGT_RBA_SW, docsis_rba_handle);
12988
15
  dissector_add_uint ("docsis_mgmt", MGT_RBA_HW, docsis_rba_handle);
12989
15
  dissector_add_uint ("docsis_mgmt", MGT_CWT_REQ, create_dissector_handle(dissect_cwt_req, proto_docsis_cwt_req));
12990
15
  dissector_add_uint ("docsis_mgmt", MGT_CWT_RSP, create_dissector_handle(dissect_cwt_rsp, proto_docsis_cwt_rsp));
12991
15
  dissector_add_uint ("docsis_mgmt", MGT_ECT_REQ, create_dissector_handle(dissect_ect_req, proto_docsis_ect_req));
12992
15
  dissector_add_uint ("docsis_mgmt", MGT_ECT_RSP, create_dissector_handle(dissect_ect_rsp, proto_docsis_ect_rsp));
12993
15
  dissector_add_uint ("docsis_mgmt", MGT_EXT_RNG_REQ, create_dissector_handle( dissect_ext_rngreq, proto_docsis_ext_rngreq ));
12994
15
  dissector_add_uint ("docsis_mgmt", MGT_DPR, create_dissector_handle(dissect_dpr, proto_docsis_dpr));
12995
15
  dissector_add_uint ("docsis_mgmt", MGT_BPKM_REQ_V5, create_dissector_handle(dissect_bpkmreq, proto_docsis_bpkmreq));
12996
15
  dissector_add_uint ("docsis_mgmt", MGT_BPKM_RSP_V5, create_dissector_handle(dissect_bpkmrsp, proto_docsis_bpkmrsp));
12997
12998
15
  docsis_tlv_handle = find_dissector ("docsis_tlv");
12999
13000
15
  reassembly_table_register(&docsis_tlv_reassembly_table, &addresses_reassembly_table_functions);
13001
15
}
13002
13003
/*
13004
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
13005
 *
13006
 * Local Variables:
13007
 * c-basic-offset: 2
13008
 * tab-width: 8
13009
 * indent-tabs-mode: nil
13010
 * End:
13011
 *
13012
 * ex: set shiftwidth=2 tabstop=8 expandtab:
13013
 * :indentSize=2:tabSize=8:noTabs=true:
13014
 */