aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2018-02-13 11:47:23 -0800
committerGuy Harris <guy@alum.mit.edu>2018-02-13 20:15:19 +0000
commitfeb8f6b14d7e342db369656ab44c38546b0140bb (patch)
treebe9e003bb3c220f47cbfa8968c61562823ed44a5 /plugins
parent048c4373e15a401a8700bc57b403282c7830d27e (diff)
Make the DOCSIS dissector a built-in dissector.
Stuff that calls it is built in, and stuff it calls is built in, so there's not much point in having it be a plugin; we already have examples of plugin dissectors. Change-Id: I512e0fda62faedb5f03f476fbece2e267e1d644f Reviewed-on: https://code.wireshark.org/review/25775 Petri-Dish: Guy Harris <guy@alum.mit.edu> Tested-by: Petri Dish Buildbot Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'plugins')
-rw-r--r--plugins/Makefile.am1
-rw-r--r--plugins/epan/docsis/AUTHORS3
-rw-r--r--plugins/epan/docsis/CMakeLists.txt85
-rw-r--r--plugins/epan/docsis/ChangeLog15
-rw-r--r--plugins/epan/docsis/Makefile.am71
-rw-r--r--plugins/epan/docsis/README52
-rw-r--r--plugins/epan/docsis/packet-docsis.c1177
-rw-r--r--plugins/epan/docsis/packet-macmgmt.c8607
-rw-r--r--plugins/epan/docsis/packet-tlv.c6518
-rw-r--r--plugins/epan/docsis/packet-tlv.h472
-rw-r--r--plugins/epan/docsis/packet-vendor.c887
11 files changed, 0 insertions, 17888 deletions
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 3db6a690ad..7e56bcf379 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -23,7 +23,6 @@
SUBDIRS = \
$(_CUSTOM_SUBDIRS_) \
- epan/docsis \
epan/ethercat \
epan/gryphon \
epan/irda \
diff --git a/plugins/epan/docsis/AUTHORS b/plugins/epan/docsis/AUTHORS
deleted file mode 100644
index b9ad1a9152..0000000000
--- a/plugins/epan/docsis/AUTHORS
+++ /dev/null
@@ -1,3 +0,0 @@
-Author :
-Anand Narwani <anand[AT]narwani.org>
-Brian Wheeler <brian.wheeler[AT]arrisi.com>
diff --git a/plugins/epan/docsis/CMakeLists.txt b/plugins/epan/docsis/CMakeLists.txt
deleted file mode 100644
index 63aad88ad3..0000000000
--- a/plugins/epan/docsis/CMakeLists.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-# CMakeLists.txt
-#
-# Wireshark - Network traffic analyzer
-# By Gerald Combs <gerald@wireshark.org>
-# Copyright 1998 Gerald Combs
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-
-include(WiresharkPlugin)
-
-# Plugin name and version info (major minor micro extra)
-set_module_info(docsis 0 0 5 0)
-
-# The sources for the plugin
-set(DISSECTOR_SRC
- packet-docsis.c
- packet-macmgmt.c
- packet-tlv.c
- packet-vendor.c
-)
-
-set(PLUGIN_FILES
- plugin.c
- ${DISSECTOR_SRC}
-)
-
-set(CLEAN_FILES
- ${PLUGIN_FILES}
-)
-
-set_source_files_properties(
- ${CLEAN_FILES}
- PROPERTIES
- COMPILE_FLAGS "${WERROR_COMMON_FLAGS}"
-)
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
-register_plugin_files(plugin.c
- plugin
- ${DISSECTOR_SRC}
-)
-
-add_plugin_library(docsis epan)
-
-target_link_libraries(docsis epan)
-
-install_plugin(docsis epan)
-
-file(GLOB DISSECTOR_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*.h")
-CHECKAPI(
- NAME
- docsis
- SWITCHES
- -g abort -g termoutput -build
- SOURCES
- ${DISSECTOR_SRC}
- ${DISSECTOR_HEADERS}
-)
-
-#
-# Editor modelines - http://www.wireshark.org/tools/modelines.html
-#
-# Local variables:
-# c-basic-offset: 8
-# tab-width: 8
-# indent-tabs-mode: t
-# End:
-#
-# vi: set shiftwidth=8 tabstop=8 noexpandtab:
-# :indentSize=8:tabSize=8:noTabs=false:
-#
diff --git a/plugins/epan/docsis/ChangeLog b/plugins/epan/docsis/ChangeLog
deleted file mode 100644
index 9251dbc0e2..0000000000
--- a/plugins/epan/docsis/ChangeLog
+++ /dev/null
@@ -1,15 +0,0 @@
-Overview of changes in Wireshark DOCSIS Plugin 0.0.2
-* Fixed a number of cosmetic things.
-
-Overview of changes in Wireshark DOCSIS Plugin 0.0.3
-* Added Checks to each TLV Type to validate length. If the length is invalid
- an Exception is thrown.
-* Cleaned up the code in all dissctors so that they are a little more readable.
-
-Overview of changes in Wireshark DOCSIS Plugin 0.0.4
-* Added Support for Baseline Privacy Key Management Messages
-* Added Concatenation Support
-
-Overview of changes in Wireshark DOCSIS Plugin 0.0.5
-* Added Support in packet-tlv.c for SNMPv3 Kickstart TLV's
-* Added Support in packet-tlv.c for Subscriber Management TLV's
diff --git a/plugins/epan/docsis/Makefile.am b/plugins/epan/docsis/Makefile.am
deleted file mode 100644
index 33200bf47c..0000000000
--- a/plugins/epan/docsis/Makefile.am
+++ /dev/null
@@ -1,71 +0,0 @@
-# Makefile.am
-#
-# Wireshark - Network traffic analyzer
-# By Gerald Combs <gerald@wireshark.org>
-# Copyright 1998 Gerald Combs
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-include $(top_srcdir)/Makefile.am.inc
-include $(top_srcdir)/plugins/epan/Makefile.am.inc
-
-# the name of the plugin
-PLUGIN_NAME = docsis
-
-PLUGIN_VERSION = 0.0.5
-
-BUILT_SOURCES = \
- plugin.c
-
-# Non-generated sources to be scanned for registration routines
-NONGENERATED_REGISTER_C_FILES = \
- packet-docsis.c \
- packet-macmgmt.c \
- packet-tlv.c \
- packet-vendor.c
-
-# Non-generated sources
-NONGENERATED_C_FILES = \
- $(NONGENERATED_REGISTER_C_FILES)
-
-# Headers.
-CLEAN_HEADER_FILES = \
- packet-tlv.h
-
-HEADER_FILES = \
- $(FLEX_GENERATED_HEADER_FILES) \
- $(CLEAN_HEADER_FILES)
-
-epan_plugin_LTLIBRARIES = docsis.la
-
-docsis_la_SOURCES = \
- $(SRC_FILES) \
- $(HEADER_FILES)
-
-nodist_docsis_la_SOURCES = \
- plugin.c
-
-docsis_la_CPPFLAGS = $(AM_CPPFLAGS) $(PLUGIN_CPPFLAGS)
-
-docsis_la_CFLAGS = $(AM_CFLAGS) $(PLUGIN_CFLAGS)
-
-docsis_la_LDFLAGS = $(PLUGIN_LDFLAGS)
-
-DISTCLEANFILES = \
- plugin.c
-
-EXTRA_DIST = \
- README \
- CMakeLists.txt
diff --git a/plugins/epan/docsis/README b/plugins/epan/docsis/README
deleted file mode 100644
index 2e083a81c8..0000000000
--- a/plugins/epan/docsis/README
+++ /dev/null
@@ -1,52 +0,0 @@
-
-Overview:
-=========
-The dissectors provided by this plugin allow the dissection of DOCSIS 1.1
-Frames. Captures of DOCSIS 1.1 frames can be facilitated using Cisco's
-Cable Monitor Features found on Cicso UBR7200 and UBR10000 Series Cable Modem
-Termination Systems. Captures of DOCSIS 1.1 and DOCSIS 2.0 frames can be
-facilitated using the ARRIS Cadant C4 and the ARRIS Cadant C3.
-
-
-Features:
-=========
-+ Decode the DOCSIS header + Extended Header. For Data PDU's it will
- automatically decode as far up the stack that it can.
-+ Decode Mac Management Header. The following Mac Messages
- are decoded at present:
- REG-REQ
- REG-RSP
- REG-ACK
- RNG-REQ
- RNG-RSP
- UCC-REQ
- UCC-RSP
- UCD Messages
- MAP Messages
- DSA-REQ
- DSA-RSP
- DSA-ACK
- DSC-REQ
- DSC-RSP
- DSC-ACK
- DSD-REQ
- DSD-RSP
- BPKM-REQ
- BPKM-RSP
- BPKM Attributes
-+ Decode All Appendix C TLV's
-+ Decode Concatenated Frames via a recursive call to dissect_docsis()
-+ Decode DOCSIS 2.0 packets including:
- Type 29 UCD Messages (DOCSIS 2.0 only)
- INT-RNG-REQ
-
-References:
-===========
-DOCSIS 1.1 and DOCSIS 2.0 Specifications can be found at:
-http://www.cablemodem.com/specifications.html
-
-Information on Cisco's Cable Monitor Feature can be found at:
-http://www.cisco.com/univercd/cc/td/doc/product/cable/cab_rout/cmtsfg/ufg_cmon.htm
-
-Information on the ARRIS Cadant line of products
-http://www.arrisi.com/products_solutions/product_families/Cadant/index.asp
diff --git a/plugins/epan/docsis/packet-docsis.c b/plugins/epan/docsis/packet-docsis.c
deleted file mode 100644
index 6280ea4728..0000000000
--- a/plugins/epan/docsis/packet-docsis.c
+++ /dev/null
@@ -1,1177 +0,0 @@
-/* packet-docsis.c
- * Routines for docsis dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.org>
- * Copyright 1998 Gerald Combs
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-
-/* This code is based on the DOCSIS 1.1 specification available at:
- * http://www.cablelabs.com/wp-content/uploads/specdocs/CM-SP-RFIv1.1-C01-050907.pdf
- *
- * This code was updated to include DOCSIS 3.1 specification details available at:
- * http://www.cablelabs.com/wp-content/uploads/specdocs/CM-SP-MULPIv3.1-I09-160602.pdf
- *
- * Updates are backward compatible with previous DOCSIS spcifications.
- *
- * DOCSIS Captures can be facilitated using the Cable Monitor Feature
- * available on Cisco Cable Modem Termination Systems :
- * http://www.cisco.com/univercd/cc/td/doc/product/cable/cab_rout/cmtsfg/ufg_cmon.htm
- *
- * This dissector depends on the presence of a DOCSIS enapsulation type.
- * There is no simple way to distinguish DOCSIS Frames from Ethernet frames,
- * since the frames are copied from the RF interface on the CMTS to
- * a Fast Ethernet interface; thus a preference was needed to enable
- * the DOCSIS encapsulation type.
- *
- * Libpcap 0.7 and later allow a link-layer header type to be specified for
- * some interfaces on some platforms; for Ethernet interfaces, they allow
- * DOCSIS to be specified. If an Ethernet capture is done with a link-layer
- * type of DOCSIS, the file will have a link-layer header type of DLT_DOCSIS;
- * Wireshark will treat the frames in that capture as DOCSIS frames.
- */
-
-#include "config.h"
-
-#include <epan/etypes.h>
-#include <epan/expert.h>
-#include <epan/packet.h>
-#include <epan/prefs.h>
-#include <epan/reassemble.h>
-#include <wiretap/wtap.h>
-#include <epan/exceptions.h>
-#include <epan/crc16-tvb.h>
-#include <epan/crc32-tvb.h>
-
-void proto_register_docsis(void);
-void proto_reg_handoff_docsis(void);
-
-/* Assume all packets have an FCS */
-static gboolean docsis_check_fcs = TRUE;
-
-#define DOCSIS_MIN_HEADER_LEN 6
-
-#define FCTYPE_PACKET 0x00
-#define FCTYPE_RESERVED 0x01
-#define FCTYPE_ISOLAT 0x02
-#define FCTYPE_MACSPC 0x03
-
-#define FCPARM_TIMING_HDR 0x00
-#define FCPARM_MAC_MGMT_HDR 0x01
-#define FCPARM_RQST_FRM 0x02
-#define FCPARM_FRAG_HDR 0x03
-#define FCPARM_QUEUE_DEPTH_REQ_FRM 0x04
-#define FCPARM_CONCAT_HDR 0x1C
-
-#define EXT_HDR_OFF 0x00
-#define EXT_HDR_ON 0x01
-
-#define FRAG_FCS_LEN 4
-#define FRAG_FIRST 0x20
-#define FRAG_MIDDLE 0x00
-#define FRAG_LAST 0x10
-
-#define EH_NULL_CONFIG 0
-#define EH_REQUEST 1
-#define EH_ACK_REQ 2
-#define EH_BP_UP 3
-#define EH_BP_DOWN 4
-#define EH_SFLOW_HDR_DOWN 5
-#define EH_SFLOW_HDR_UP 6
-#define EH_BP_UP2 7
-#define EH_DS_SERVICE 8
-#define EH_PATH_VERIFY 9
-#define EH_RESERVED_10 10
-#define EH_RESERVED_11 11
-#define EH_RESERVED_12 12
-#define EH_RESERVED_13 13
-#define EH_RESERVED_14 14
-#define EH_EXTENDED 15
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis = -1;
-static int hf_docsis_fctype = -1;
-static int hf_docsis_machdr_fcparm = -1;
-static int hf_docsis_fcparm = -1;
-static int hf_docsis_exthdr = -1;
-static int hf_docsis_concat_cnt = -1;
-static int hf_docsis_macparm = -1;
-static int hf_docsis_ehdrlen = -1;
-static int hf_docsis_len = -1;
-static int hf_docsis_eh_type = -1;
-static int hf_docsis_eh_len = -1;
-static int hf_docsis_eh_val = -1;
-static int hf_docsis_frag_rsvd = -1;
-static int hf_docsis_frag_first = -1;
-static int hf_docsis_frag_last = -1;
-static int hf_docsis_frag_seq = -1;
-static int hf_docsis_sid = -1;
-static int hf_docsis_mini_slots = -1;
-static int hf_docsis_requested_size = -1;
-static int hf_docsis_hcs = -1;
-static int hf_docsis_hcs_status = -1;
-static int hf_docsis_bpi_en = -1;
-static int hf_docsis_toggle_bit = -1;
-static int hf_docsis_key_seq = -1;
-static int hf_docsis_ehdr_ver = -1;
-static int hf_docsis_said = -1;
-static int hf_docsis_ehdr_phsi = -1;
-static int hf_docsis_ehdr_qind = -1;
-static int hf_docsis_ehdr_grants = -1;
-static int hf_docsis_reserved = -1;
-static int hf_docsis_ehdr_ds_traffic_pri = -1;
-static int hf_docsis_ehdr_ds_seq_chg_cnt = -1;
-static int hf_docsis_ehdr_ds_dsid = -1;
-static int hf_docsis_ehdr_ds_pkt_seq_num = -1;
-static int hf_docsis_ehdr_bpup2_bpi_en = -1;
-static int hf_docsis_ehdr_bpup2_toggle_bit = -1;
-static int hf_docsis_ehdr_bpup2_key_seq = -1;
-static int hf_docsis_ehdr_bpup2_ver = -1;
-static int hf_docsis_ehdr_bpup2_sid = -1;
-static int hf_docsis_ehdr_pv_st_refpt = -1;
-static int hf_docsis_ehdr_pv_timestamp = -1;
-
-static int hf_docsis_fragments = -1;
-static int hf_docsis_fragment = -1;
-static int hf_docsis_fragment_overlap = -1;
-static int hf_docsis_fragment_overlap_conflict = -1;
-static int hf_docsis_fragment_multiple_tails = -1;
-static int hf_docsis_fragment_too_long_fragment = -1;
-static int hf_docsis_fragment_error = -1;
-static int hf_docsis_fragment_count = -1;
-static int hf_docsis_reassembled_in = -1;
-static int hf_docsis_reassembled_length = -1;
-static int hf_docsis_reassembled_data = -1;
-static int hf_docsis_frag_fcs = -1;
-static int hf_docsis_frag_fcs_status = -1;
-
-static dissector_handle_t docsis_handle;
-static dissector_handle_t eth_withoutfcs_handle;
-static dissector_handle_t docsis_mgmt_handle;
-#if 0
-static dissector_table_t docsis_dissector_table;
-#endif
-
-static expert_field ei_docsis_hcs_bad = EI_INIT;
-static expert_field ei_docsis_len = EI_INIT;
-static expert_field ei_docsis_frag_fcs_bad = EI_INIT;
-static expert_field ei_docsis_eh_len = EI_INIT;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis = -1;
-static gint ett_ehdr = -1;
-static gint ett_docsis_fragments = -1;
-static gint ett_docsis_fragment = -1;
-
-static const value_string fctype_vals[] = {
- {FCTYPE_PACKET, "Packet PDU"},
- {FCTYPE_RESERVED, "Reserved"},
- {FCTYPE_ISOLAT, "Isolation PDU"},
- {FCTYPE_MACSPC, "MAC Specific"},
- {0, NULL}
-};
-
-static const value_string eh_type_vals[] = {
- {0, "NULL Configuration Parameter"},
- {EH_REQUEST, "Request"},
- {EH_ACK_REQ, "Acknowledgement Requested"},
- {EH_BP_UP, "Upstream Privacy Element"},
- {EH_BP_DOWN, "Downstream Privacy Element"},
- {EH_SFLOW_HDR_UP, "Service Flow EH; PHS Header Upstream"},
- {EH_SFLOW_HDR_DOWN, "Service Flow EH; PHS Header Downstream"},
- {EH_BP_UP2, "Upstream Privacy with Multi Channel"},
- {EH_DS_SERVICE, "Downstream Service"},
- {EH_PATH_VERIFY, "Path Verify"},
- {EH_RESERVED_10, "Reserved"},
- {EH_RESERVED_11, "Reserved"},
- {EH_RESERVED_12, "Reserved"},
- {EH_RESERVED_13, "Reserved"},
- {EH_RESERVED_14, "Reserved"},
- {EH_EXTENDED, "Extended"},
- {0, NULL}
-};
-
-static const value_string ms_fcparm_vals[] = {
- {FCPARM_TIMING_HDR, "Timing Header"},
- {FCPARM_MAC_MGMT_HDR, "MAC Management Message"},
- {FCPARM_RQST_FRM, "Request Frame"},
- {FCPARM_FRAG_HDR, "Fragmentation Header"},
- {FCPARM_QUEUE_DEPTH_REQ_FRM, "Queue Depth-based Request Frame"},
- {FCPARM_CONCAT_HDR, "Concatenation Header"},
- {0, NULL}
-};
-
-static const value_string pkt_fcparm_vals[] = {
- {0x00, "PDU MAC"},
- {0x01, "DELAY/DUPLICATE/MULTICAST/BROADCAST"},
- {0, NULL}
-};
-
-static const true_false_string exthdr_tfs = {
- "Extended Header Present",
- "Extended Header Absent"
-};
-
-/* Plugins can't use true_false_string and value_string const from /epan on Windows
- Duplicated here because of that */
-static const true_false_string ena_dis_tfs = {
- "Enabled",
- "Disabled"
-};
-
-static const value_string local_proto_checksum_vals[] = {
- { PROTO_CHECKSUM_E_BAD, "Bad" },
- { PROTO_CHECKSUM_E_GOOD, "Good" },
- { PROTO_CHECKSUM_E_UNVERIFIED, "Unverified" },
- { PROTO_CHECKSUM_E_NOT_PRESENT, "Not present" },
-
- { 0, NULL }
-};
-
-static const true_false_string qind_tfs = {
- "Rate overrun",
- "Rate non-overrun"
-};
-
-static const true_false_string odd_even_tfs = {
- "Odd Key",
- "Even Key",
-};
-
-static const value_string unique_no_phs[] = {
- { 0, "No PHS on current packet" },
- { 0, NULL }
-};
-
-/* Fragmentation Flags / Sequence */
-static guint8 frag_flags;
-static guint8 frag_seq;
-static guint16 frag_sid;
-
-/*
- * Defragmentation of DOCSIS
- */
-static reassembly_table docsis_reassembly_table;
-
-
-static const fragment_items docsis_frag_items = {
- &ett_docsis_fragment,
- &ett_docsis_fragments,
- &hf_docsis_fragments,
- &hf_docsis_fragment,
- &hf_docsis_fragment_overlap,
- &hf_docsis_fragment_overlap_conflict,
- &hf_docsis_fragment_multiple_tails,
- &hf_docsis_fragment_too_long_fragment,
- &hf_docsis_fragment_error,
- &hf_docsis_fragment_count,
- &hf_docsis_reassembled_in,
- &hf_docsis_reassembled_length,
- &hf_docsis_reassembled_data,
- "DOCSIS fragments"
-};
-
-/* Dissection */
-/* Code to Dissect the extended header; TLV Formatted headers */
-static void
-dissect_ehdr (tvbuff_t * tvb, proto_tree * tree, packet_info * pinfo)
-{
- proto_tree *ehdr_tree;
- proto_item *eh_length_item;
- gint ehdrlen;
- int pos;
- guint8 type;
- guint8 len;
-
- ehdrlen = tvb_get_guint8 (tvb, 1);
- pos = 4;
-
- ehdr_tree = proto_tree_add_subtree(tree, tvb, pos, ehdrlen, ett_ehdr, NULL, "Extended Header");
-
- while (pos < ehdrlen + 4)
- {
- type = (tvb_get_guint8 (tvb, pos) & 0xF0);
- len = (tvb_get_guint8 (tvb, pos) & 0x0F);
- if ((((type >> 4) & 0x0F)== 6) && (len == 2))
- {
- proto_tree_add_uint_format_value(ehdr_tree, hf_docsis_eh_type, tvb, pos, 1, 0x60, "Unsolicited Grant Sync EHDR Sub-Element");
- }
- else
- {
- proto_tree_add_item (ehdr_tree, hf_docsis_eh_type, tvb, pos, 1, ENC_BIG_ENDIAN);
- }
-
- eh_length_item = proto_tree_add_item (ehdr_tree, hf_docsis_eh_len, tvb, pos, 1, ENC_BIG_ENDIAN);
-
-
- switch ((type >> 4) & 0x0F)
- {
- case EH_REQUEST:
- /* Request: Minislots Requested */
- if (len == 3)
- {
- proto_tree_add_item(ehdr_tree, hf_docsis_mini_slots, tvb, pos + 1, 1, ENC_NA);
- proto_tree_add_item(ehdr_tree, hf_docsis_sid, tvb, pos + 2, 2, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info(pinfo, eh_length_item, &ei_docsis_eh_len);
- return;
- }
- break;
- case EH_ACK_REQ:
- /* Deprecated in DOCSIS 3.1 */
- if (len == 2)
- {
- proto_tree_add_item(ehdr_tree, hf_docsis_sid, tvb, pos + 1, 2, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info(pinfo, eh_length_item, &ei_docsis_eh_len);
- return;
- }
- break;
- case EH_BP_UP:
- /* Upstream Privacy EH Element or Upstream Privacy with fragmentation */
- proto_tree_add_item (ehdr_tree, hf_docsis_key_seq, tvb, pos + 1, 1,
- ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_ver, tvb, pos + 1, 1,
- ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_bpi_en, tvb, pos + 2, 1,
- ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_toggle_bit, tvb, pos + 2,
- 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_sid, tvb, pos + 2, 2,
- ENC_BIG_ENDIAN);
- frag_sid = tvb_get_guint8 (tvb, pos+2) & 0xCFFF;
- proto_tree_add_item (ehdr_tree, hf_docsis_mini_slots, tvb, pos + 4,
- 1, ENC_BIG_ENDIAN);
- if (pinfo->fragmented)
- {
- proto_tree_add_item (ehdr_tree, hf_docsis_frag_rsvd, tvb, pos+5,
- 1, ENC_BIG_ENDIAN);
- frag_flags = tvb_get_guint8 (tvb, pos+5) & 0x30;
- proto_tree_add_item (ehdr_tree, hf_docsis_frag_first, tvb, pos+5,
- 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_frag_last, tvb, pos+5,
- 1, ENC_BIG_ENDIAN);
- frag_seq = tvb_get_guint8 (tvb, pos+5) & 0x0F;
- proto_tree_add_item (ehdr_tree, hf_docsis_frag_seq, tvb, pos+5,
- 1, ENC_BIG_ENDIAN);
- }
- break;
- case EH_BP_DOWN:
- /* Downstream Privacy EH Element */
- proto_tree_add_item (ehdr_tree, hf_docsis_key_seq, tvb, pos + 1, 1,
- ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_ver, tvb, pos + 1, 1,
- ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_bpi_en, tvb, pos + 2, 1,
- ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_toggle_bit, tvb, pos + 2,
- 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_said, tvb, pos + 2, 2,
- ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_reserved, tvb, pos + 4, 1,
- ENC_BIG_ENDIAN);
- break;
- case EH_SFLOW_HDR_DOWN:
- /* Deprecated in DOCSIS 3.1, was Downstream Service Flow EH Element in earlier revisions */
- case EH_SFLOW_HDR_UP:
- /* Deprecated in DOCSIS 3.1, was Upstream Service Flow EH Element in earlier revisions */
- proto_tree_add_item(ehdr_tree, hf_docsis_ehdr_phsi, tvb, pos+1, 1, ENC_BIG_ENDIAN);
-
- if (len == 2)
- {
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_qind, tvb, pos+2, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_grants, tvb, pos+2, 1, ENC_BIG_ENDIAN);
- }
- break;
- case EH_BP_UP2:
- /* Upstream Privacy EH Element, version 2, with no piggyback request */
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_bpup2_key_seq, tvb, pos + 1, 1,
- ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_bpup2_ver, tvb, pos + 1, 1,
- ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_bpup2_bpi_en, tvb, pos + 2, 1,
- ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_bpup2_toggle_bit, tvb, pos + 2,
- 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_bpup2_sid, tvb, pos + 2, 2,
- ENC_BIG_ENDIAN);
- break;
- case EH_DS_SERVICE:
- /* Downstream Service EH Element */
- proto_tree_add_item(ehdr_tree, hf_docsis_ehdr_ds_traffic_pri, tvb, pos+1, 1, ENC_BIG_ENDIAN);
-
- if (len == 3)
- {
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_ds_dsid, tvb, pos+1, 3, ENC_BIG_ENDIAN);
- }
-
- if (len == 5)
- {
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_ds_seq_chg_cnt, tvb, pos+1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_ds_dsid, tvb, pos+1, 3, ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_ds_pkt_seq_num, tvb, pos+4, 2, ENC_BIG_ENDIAN);
- }
- break;
- case EH_PATH_VERIFY:
- /* Path Verify EH Element */
- if (len == 5)
- {
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_pv_st_refpt, tvb, pos+1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (ehdr_tree, hf_docsis_ehdr_pv_timestamp, tvb, pos+2, 4, ENC_BIG_ENDIAN);
- }
- break;
- case EH_EXTENDED:
- /* Extended EH Element, one or more Sub EH fields may follow; simply recurse */
- {
- tvbuff_t *subset = tvb_new_subset_remaining(tvb, pos);
- dissect_ehdr (subset, ehdr_tree, pinfo);
- }
- break;
- default:
- if (len > 0)
- proto_tree_add_item (ehdr_tree, hf_docsis_eh_val, tvb, pos + 1,
- len, ENC_NA);
- }
- pos += len + 1;
- }
-
- return;
-}
-
-/* Code to Dissect the Header Check Sequence field */
-static void
-dissect_hcs_field (tvbuff_t * tvb, packet_info * pinfo, proto_tree * docsis_tree, gint hdrlen)
-{
- /* dissect the header check sequence */
- if(docsis_check_fcs){
- /* CRC-CCITT(16+12+5+1) */
- guint16 fcs = g_ntohs(crc16_ccitt_tvb(tvb, (hdrlen - 2)));
- proto_tree_add_checksum(docsis_tree, tvb, (hdrlen - 2), hf_docsis_hcs, hf_docsis_hcs_status, &ei_docsis_hcs_bad, pinfo, fcs, ENC_BIG_ENDIAN, PROTO_CHECKSUM_VERIFY);
- }
- else
- {
- proto_tree_add_checksum(docsis_tree, tvb, (hdrlen - 2), hf_docsis_hcs, hf_docsis_hcs_status, &ei_docsis_hcs_bad, pinfo, 0, ENC_BIG_ENDIAN, PROTO_CHECKSUM_NO_FLAGS);
- }
- return;
-}
-
-/* Code to Dissect the extended header length / MAC Param field and Length field */
-/* The length field may condain a SID, but this logic is not handled here */
-static void
-dissect_exthdr_length_field (tvbuff_t * tvb, packet_info * pinfo, proto_tree * docsis_tree, guint8 exthdr, guint16 mac_parm, guint16 len_sid, guint16 *payload_length)
-{
- proto_item *length_item;
- if (exthdr == EXT_HDR_ON)
- {
- /* Add in Extended Header Length */
- proto_tree_add_item (docsis_tree, hf_docsis_ehdrlen, tvb, 1, 1, ENC_BIG_ENDIAN);
- length_item = proto_tree_add_item (docsis_tree, hf_docsis_len, tvb, 2, 2, ENC_BIG_ENDIAN);
- /* Validate PDU length */
- if ((len_sid - mac_parm) > *payload_length)
- {
- *payload_length = len_sid;
- expert_add_info(pinfo, length_item, &ei_docsis_len);
- }
- /* Pass off to the Extended Header dissection */
- dissect_ehdr (tvb, docsis_tree, pinfo);
- }
- else
- {
- /* Add in MAC Parm field only */
- proto_tree_add_item (docsis_tree, hf_docsis_macparm, tvb, 1, 1, ENC_BIG_ENDIAN);
- length_item = proto_tree_add_item (docsis_tree, hf_docsis_len, tvb, 2, 2, ENC_BIG_ENDIAN);
- /* Validate PDU length */
- if (len_sid > *payload_length)
- {
- *payload_length = len_sid;
- expert_add_info(pinfo, length_item, &ei_docsis_len);
- }
- }
- return;
-}
-
-/* Main DOCSIS Dissection Entry Point */
-/* Code to Dissect the DOCSIS Frames */
-static int
-dissect_docsis (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- guint8 fc = 0;
- guint8 fctype = 0;
- guint8 fcparm = 0;
- guint8 exthdr = 0;
- guint16 mac_parm = 0;
- guint8 hdrlen = DOCSIS_MIN_HEADER_LEN;
- guint16 len_sid = 0;
- tvbuff_t *next_tvb = NULL;
- tvbuff_t *mgt_tvb = NULL;
- gint pdulen = 0;
- guint16 payload_length = 0;
- guint16 framelen = 0;
- gboolean save_fragmented;
-
- proto_item *ti;
- proto_tree *docsis_tree;
-
- /* concatlen and concatpos are declared static to allow for recursive calls to
- * the dissect_docsis routine when dissecting Concatenated frames
- */
- static guint16 concatlen;
- static guint16 concatpos;
-
- /* Extract Frame Control parts */
- fc = tvb_get_guint8 (tvb, 0); /* Frame Control Byte */
- fctype = (fc >> 6) & 0x03; /* Frame Control Type: 2 MSB Bits */
- fcparm = (fc >> 1) & 0x1F; /* Frame Control Parameter: Next 5 Bits */
- exthdr = (fc & 0x01); /* Extended Header Bit: LSB */
-
- /* Extract the MAC Parm; MAC Parm and SID offsets; change for a Queue Depth Request */
- if (fcparm == FCPARM_QUEUE_DEPTH_REQ_FRM) {
- mac_parm = tvb_get_ntohs (tvb, 1);
- len_sid = tvb_get_ntohs (tvb, 3);
- hdrlen = DOCSIS_MIN_HEADER_LEN + 1; // 7-byte header for this message type
- } else {
- mac_parm = tvb_get_guint8 (tvb, 1);
- len_sid = tvb_get_ntohs (tvb, 2);
- }
-
- /* Set Header Length based on presence of Extended header */
- if (exthdr == EXT_HDR_ON) {
- hdrlen += mac_parm;
- }
-
- /* Captured Payload Length is based on the length of the header */
- payload_length = tvb_captured_length_remaining (tvb, hdrlen);
-
- /* If this is a Request Frame, then pdulen is 0 and framelen is 6 */
- if ((fctype == FCTYPE_MACSPC) && (fcparm == FCPARM_RQST_FRM || fcparm == FCPARM_QUEUE_DEPTH_REQ_FRM))
- {
- pdulen = 0;
- if (fcparm == FCPARM_QUEUE_DEPTH_REQ_FRM)
- framelen = DOCSIS_MIN_HEADER_LEN + 1;
- else
- framelen = DOCSIS_MIN_HEADER_LEN;
- } else {
- framelen = DOCSIS_MIN_HEADER_LEN + len_sid;
- pdulen = len_sid - (mac_parm + 2);
- }
-
- /* Make entries in Protocol column and Info column on summary display */
- col_set_str (pinfo->cinfo, COL_PROTOCOL, "DOCSIS");
-
- switch (fctype)
- {
- case FCTYPE_PACKET:
- col_set_str (pinfo->cinfo, COL_INFO, "Packet PDU");
- break;
- case FCTYPE_RESERVED:
- col_set_str (pinfo->cinfo, COL_INFO, "Reserved PDU");
- break;
- case FCTYPE_ISOLAT:
- col_set_str (pinfo->cinfo, COL_INFO, "Isolation PDU");
- break;
- case FCTYPE_MACSPC:
- if (fcparm == FCPARM_RQST_FRM)
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Request Frame SID = %u Mini Slots = %u", len_sid,
- mac_parm);
- else if (fcparm == FCPARM_QUEUE_DEPTH_REQ_FRM)
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Request Frame SID = %u Bytes Requested = %u", len_sid,
- mac_parm);
- else if (fcparm == FCPARM_FRAG_HDR)
- col_set_str (pinfo->cinfo, COL_INFO, "Fragmented Frame");
- else
- col_set_str (pinfo->cinfo, COL_INFO, "Mac Specific");
- break;
- } /* switch fctype */
-
- ti = proto_tree_add_item(tree, proto_docsis, tvb, 0, hdrlen, ENC_NA);
- docsis_tree = proto_item_add_subtree (ti, ett_docsis);
-
- /* add an item to the subtree, see section 1.6 for more information */
-
- /* Add in FC Byte fields */
- proto_tree_add_item (docsis_tree, hf_docsis_fctype, tvb, 0, 1, ENC_BIG_ENDIAN);
-
- switch (fctype)
- {
- case FCTYPE_PACKET:
- {
- proto_item_append_text (ti, " Packet PDU");
- proto_tree_add_item (docsis_tree, hf_docsis_fcparm, tvb, 0, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (docsis_tree, hf_docsis_exthdr, tvb, 0, 1, ENC_BIG_ENDIAN);
- /* Dissect Length field for a PDU */
- dissect_exthdr_length_field (tvb, pinfo, docsis_tree, exthdr, mac_parm, len_sid, &payload_length);
- /* Dissect Header Check Sequence field for a PDU */
- dissect_hcs_field (tvb, pinfo, docsis_tree, hdrlen);
- if (pdulen > 0)
- {
- next_tvb = tvb_new_subset_remaining(tvb, hdrlen);
- call_dissector (eth_withoutfcs_handle, next_tvb, pinfo, docsis_tree);
- }
- if (concatlen > 0)
- {
- concatlen = concatlen - framelen;
- concatpos += framelen;
- }
- break;
- }
- case FCTYPE_RESERVED:
- {
- proto_item_append_text (ti, " Reserved PDU");
- proto_tree_add_item (docsis_tree, hf_docsis_fcparm, tvb, 0, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (docsis_tree, hf_docsis_exthdr, tvb, 0, 1, ENC_BIG_ENDIAN);
- /* Dissect Length field for a PDU */
- dissect_exthdr_length_field (tvb, pinfo, docsis_tree, exthdr, mac_parm, len_sid, &payload_length);
- /* Dissect Header Check Sequence field for a PDU */
- dissect_hcs_field (tvb, pinfo, docsis_tree, hdrlen);
-
- if (concatlen > 0)
- {
- concatlen = concatlen - framelen;
- concatpos += framelen;
- }
-
- /* Don't do anything for a Reserved Frame */
- next_tvb = tvb_new_subset_remaining(tvb, hdrlen);
- call_data_dissector(next_tvb, pinfo, tree);
- break;
- }
- case FCTYPE_ISOLAT:
- {
- proto_item_append_text (ti, " Isolation PDU");
- proto_tree_add_item (docsis_tree, hf_docsis_fcparm, tvb, 0, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (docsis_tree, hf_docsis_exthdr, tvb, 0, 1, ENC_BIG_ENDIAN);
- /* Dissect Length field for a PDU */
- dissect_exthdr_length_field (tvb, pinfo, docsis_tree, exthdr, mac_parm, len_sid, &payload_length);
- /* Dissect Header Check Sequence field for a PDU */
- dissect_hcs_field (tvb, pinfo, docsis_tree, hdrlen);
- if (pdulen > 0)
- {
- next_tvb = tvb_new_subset_remaining(tvb, hdrlen);
- call_dissector (eth_withoutfcs_handle, next_tvb, pinfo, docsis_tree);
- }
- if (concatlen > 0)
- {
- concatlen = concatlen - framelen;
- concatpos += framelen;
- }
- break;
- }
- case FCTYPE_MACSPC:
- {
- proto_item_append_text (ti, " MAC-Specific PDU");
- proto_tree_add_item (docsis_tree, hf_docsis_machdr_fcparm, tvb, 0, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (docsis_tree, hf_docsis_exthdr, tvb, 0, 1, ENC_BIG_ENDIAN);
- switch(fcparm)
- {
- case FCPARM_TIMING_HDR:
- // no break
- case FCPARM_MAC_MGMT_HDR:
- {
- /* Dissect Length field for a PDU */
- dissect_exthdr_length_field (tvb, pinfo, docsis_tree, exthdr, mac_parm, len_sid, &payload_length);
- /* Dissect Header Check Sequence field for a PDU */
- dissect_hcs_field (tvb, pinfo, docsis_tree, hdrlen);
-
- /* Pass off to the DOCSIS Management dissector/s */
- mgt_tvb = tvb_new_subset_remaining(tvb, hdrlen);
- call_dissector (docsis_mgmt_handle, mgt_tvb, pinfo, docsis_tree);
-
- if (concatlen > 0)
- {
- concatlen = concatlen - framelen;
- concatpos += framelen;
- }
-
- break;
- }
- case FCPARM_RQST_FRM:
- {
- /* Decode for a Request Frame. No extended header */
- proto_tree_add_uint (docsis_tree, hf_docsis_mini_slots, tvb, 1, 1, mac_parm);
- proto_tree_add_uint (docsis_tree, hf_docsis_sid, tvb, 2, 2, len_sid);
- /* Dissect Header Check Sequence field for a PDU */
- dissect_hcs_field (tvb, pinfo, docsis_tree, hdrlen);
-
- if (concatlen > 0)
- {
- concatlen = concatlen - framelen;
- concatpos += framelen;
- }
-
- /* Don't do anything for a Request Frame, there is no data following it*/
- break;
- }
- case FCPARM_FRAG_HDR:
- {
- /* Check if this is a fragmentation header */
- save_fragmented = pinfo->fragmented;
- pinfo->fragmented = TRUE;
-
- /* Dissect Length field for a PDU */
- dissect_exthdr_length_field (tvb, pinfo, docsis_tree, exthdr, mac_parm, len_sid, &payload_length);
- /* Dissect Header Check Sequence field for a PDU */
- dissect_hcs_field (tvb, pinfo, docsis_tree, hdrlen);
-
- /* Grab the Fragment FCS */
- guint32 sent_fcs = tvb_get_ntohl(tvb, (hdrlen + len_sid - 4));
- guint32 fcs = crc32_802_tvb(tvb, tvb_captured_length(tvb) - 4);
-
- /* Only defragment valid frames with a good FCS */
- if (sent_fcs == fcs)
- {
- fragment_item *frag_msg = NULL;
- frag_msg = fragment_add_seq_check(&docsis_reassembly_table,
- tvb, hdrlen, pinfo,
- frag_sid, NULL, /* ID for fragments belonging together */
- frag_seq, /* Fragment Sequence Number */
- (len_sid - 4), /* fragment length - to the end */
- !(frag_flags & FRAG_LAST)); /* More fragments? */
-
- next_tvb = process_reassembled_data(tvb, hdrlen, pinfo,
- "Reassembled Message", frag_msg, &docsis_frag_items,
- NULL, docsis_tree);
-
- if (frag_flags == FRAG_LAST)
- pinfo->fragmented = FALSE;
- else
- pinfo->fragmented = TRUE;
-
- if (frag_msg) { /* Reassembled */
- proto_item_append_text (ti, " (Message Reassembled)");
- } else { /* Not last packet of reassembled Short Message */
- proto_item_append_text (ti, " (Message fragment %u)", frag_seq);
-
- }
-
- if(next_tvb)
- {
- /* By default assume an Ethernet payload */
- call_dissector (eth_withoutfcs_handle, next_tvb, pinfo, docsis_tree);
- } else {
- /* Otherwise treat as Data */
- tvbuff_t *payload_tvb = tvb_new_subset_length_caplen(tvb, hdrlen, (len_sid - 4), -1);
- call_data_dissector(payload_tvb, pinfo, docsis_tree);
- }
- } else {
- /* Report frames with a bad FCS */
- expert_add_info(pinfo, ti, &ei_docsis_frag_fcs_bad);
- }
-
- /* Add the Fragment FCS to the end of the parent tree */
- proto_tree_add_checksum(docsis_tree, tvb, (hdrlen + len_sid - 4), hf_docsis_frag_fcs, hf_docsis_frag_fcs_status, &ei_docsis_frag_fcs_bad, pinfo, fcs, ENC_BIG_ENDIAN, PROTO_CHECKSUM_VERIFY);
-
- pinfo->fragmented = save_fragmented;
-
- if (concatlen > 0)
- {
- concatlen = concatlen - framelen;
- concatpos += framelen;
- }
-
- break;
- }
- case FCPARM_QUEUE_DEPTH_REQ_FRM:
- {
- /* Decode for a Queue-depth Based Request */
- proto_tree_add_uint (docsis_tree, hf_docsis_requested_size, tvb, 1, 2, mac_parm);
- proto_tree_add_uint (docsis_tree, hf_docsis_sid, tvb, 3, 2, len_sid);
- /* Dissect Header Check Sequence field for a PDU */
- dissect_hcs_field (tvb, pinfo, docsis_tree, hdrlen);
-
- if (concatlen > 0)
- {
- concatlen = concatlen - framelen;
- concatpos += framelen;
- }
-
- /* No PDU Payload for this frame */
- break;
- }
- case FCPARM_CONCAT_HDR:
- {
- /* Decode for a Concatenated Header; ONLY for DOCSIS versions < 3.1. No Extended Header */
- proto_item_append_text (ti, " (Concatenated Header)");
- proto_tree_add_item (docsis_tree, hf_docsis_concat_cnt, tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (docsis_tree, hf_docsis_len, tvb, 2, 2, ENC_BIG_ENDIAN);
- /* Dissect Header Check Sequence field for a PDU */
- dissect_hcs_field (tvb, pinfo, docsis_tree, hdrlen);
-
- /* If this is a concatenated frame setup the length of the concatenated
- * frame and set the position to the first byte of the first frame
- */
- concatlen = len_sid;
- concatpos = DOCSIS_MIN_HEADER_LEN;
-
- /* Call the docsis dissector on the same frame
- * to dissect DOCSIS frames within the concatenated
- * frame. concatpos and concatlen are declared
- * static and are decremented and incremented
- * respectively when the inner
- * docsis frames are dissected. */
- while (concatlen > 0)
- {
- next_tvb = tvb_new_subset_length_caplen (tvb, concatpos, -1, concatlen);
- call_dissector (docsis_handle, next_tvb, pinfo, docsis_tree);
- }
- concatlen = 0;
- concatpos = 0;
- break;
- }
- default:
- /* Unknown parameter, stop dissection */
- concatlen = 0;
- break;
- } /* switch fcparm */
- break;
- }
- } /* switch fctype*/
-
- return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis (void)
-{
- static hf_register_info hf[] = {
- {&hf_docsis_fctype,
- {"FCType", "docsis.fctype",
- FT_UINT8, BASE_HEX, VALS (fctype_vals), 0xC0,
- "Frame Control Type", HFILL}
- },
- {&hf_docsis_fcparm,
- {"FCParm", "docsis.fcparm",
- FT_UINT8, BASE_DEC, VALS (pkt_fcparm_vals), 0x3E,
- "Parameter Field", HFILL}
- },
- {&hf_docsis_machdr_fcparm,
- {"FCParm", "docsis.fcparm",
- FT_UINT8, BASE_DEC, VALS (ms_fcparm_vals), 0x3E,
- "Parameter Field", HFILL}
- },
- {&hf_docsis_exthdr,
- {"EXTHDR", "docsis.exthdr",
- FT_BOOLEAN, 8, TFS (&exthdr_tfs), 0x01,
- "Extended Header Presence", HFILL}
- },
- {&hf_docsis_macparm,
- {"MacParm", "docsis.macparm",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- "Mac Parameter Field", HFILL}
- },
- {&hf_docsis_concat_cnt,
- {"Number of Concatenated Frames", "docsis.concat_cnt",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ehdrlen,
- {"Extended Header Length (bytes)", "docsis.ehdrlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_len,
- {"Length of the MAC frame (bytes)", "docsis.len",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Length of the MAC frame, not counting the fixed-length MAC header", HFILL}
- },
- {&hf_docsis_eh_type,
- {"Type", "docsis.ehdr.type",
- FT_UINT8, BASE_DEC, VALS (eh_type_vals), 0xF0,
- "TLV Type", HFILL}
- },
- {&hf_docsis_eh_len,
- {"Length", "docsis.ehdr.len",
- FT_UINT8, BASE_DEC, NULL, 0x0F,
- "TLV Len", HFILL}
- },
- {&hf_docsis_eh_val,
- {"Value", "docsis.ehdr.value",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "TLV Value", HFILL}
- },
- {&hf_docsis_frag_rsvd,
- {"Reserved", "docsis.frag_rsvd",
- FT_UINT8, BASE_DEC, NULL, 0xC0,
- NULL, HFILL}
- },
- {&hf_docsis_frag_first,
- {"First Frame", "docsis.frag_first",
- FT_BOOLEAN, 8, NULL, 0x20,
- NULL, HFILL}
- },
- {&hf_docsis_frag_last,
- {"Last Frame", "docsis.frag_last",
- FT_BOOLEAN, 8, NULL, 0x10,
- NULL, HFILL}
- },
- {&hf_docsis_frag_seq,
- {"Fragmentation Sequence #", "docsis.frag_seq",
- FT_UINT8, BASE_DEC, NULL, 0x0F,
- "Fragmentation Sequence Number", HFILL}
- },
- {&hf_docsis_sid,
- {"SID", "docsis.ehdr.sid",
- FT_UINT16, BASE_DEC_HEX, NULL, 0x3FFF,
- "Service Identifier", HFILL}
- },
- {&hf_docsis_said,
- {"SAID", "docsis.ehdr.said",
- FT_UINT16, BASE_DEC, NULL, 0x3FFF,
- "Security Association Identifier", HFILL}
- },
- {&hf_docsis_reserved,
- {"Reserved", "docsis.ehdr.rsvd",
- FT_UINT8, BASE_HEX, NULL, 0x3FFF,
- "Reserved Byte", HFILL}
- },
- {&hf_docsis_mini_slots,
- {"MiniSlots", "docsis.ehdr.minislots",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Mini Slots Requested", HFILL}
- },
- {&hf_docsis_requested_size,
- {"Bytes Requested", "docsis.ehdr.reqsize",
- FT_UINT16, BASE_DEC, NULL, 0xFFFF,
- NULL, HFILL}
- },
- {&hf_docsis_key_seq,
- {"Key Sequence", "docsis.ehdr.keyseq",
- FT_UINT8, BASE_DEC, NULL, 0xF0,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_ver,
- {"Version", "docsis.ehdr.ver",
- FT_UINT8, BASE_DEC, NULL, 0x0F,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_phsi,
- {"Payload Header Suppression Index", "docsis.ehdr.phsi",
- FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(unique_no_phs), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_qind,
- {"Queue Indicator", "docsis.ehdr.qind",
- FT_BOOLEAN, 8, TFS(&qind_tfs), 0x80,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_grants,
- {"Active Grants", "docsis.ehdr.act_grants",
- FT_UINT8, BASE_DEC, NULL, 0x7F,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_bpup2_key_seq,
- {"Key Sequence", "docsis.ehdr.bpup2_keyseq",
- FT_UINT8, BASE_DEC, NULL, 0xF0,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_bpup2_ver,
- {"Version", "docsis.ehdr.bpup2_ver",
- FT_UINT8, BASE_DEC, NULL, 0x0F,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_bpup2_bpi_en,
- {"Encryption", "docsis.ehdr.bpup2_bpi_en",
- FT_BOOLEAN, 8, TFS (&ena_dis_tfs), 0x80,
- "BPI Enable", HFILL}
- },
- {&hf_docsis_ehdr_bpup2_toggle_bit,
- {"Toggle", "docsis.ehdr.bpup2_toggle_bit",
- FT_BOOLEAN, 8, TFS (&odd_even_tfs), 0x40,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_bpup2_sid,
- {"SID", "docsis.ehdr.bpup2_sid",
- FT_UINT16, BASE_DEC, NULL, 0x3FFF,
- "Service Identifier", HFILL}
- },
- { &hf_docsis_ehdr_pv_st_refpt,
- { "Start Reference Point", "docsis.ehdr.pv_start_ref",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- { &hf_docsis_ehdr_pv_timestamp,
- { "Timestamp", "docsis.ehdr.pv_timestamp",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_ds_traffic_pri,
- {"DS Traffic Priority", "docsis.ehdr.ds_traffic_pri",
- FT_UINT8, BASE_DEC, NULL, 0xE0,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_ds_seq_chg_cnt,
- {"DS Sequence Change Count", "docsis.ehdr.ds_seq_chg_cnt",
- FT_UINT8, BASE_DEC, NULL, 0x10,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_ds_dsid,
- {"DS DSID", "docsis.ehdr.ds_dsid",
- FT_UINT32, BASE_DEC, NULL, 0x0FFFFF,
- NULL, HFILL}
- },
- {&hf_docsis_ehdr_ds_pkt_seq_num,
- {"DS Packet Sequence Number", "docsis.ehdr.ds_pkt_seq_num",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_hcs,
- {"Header check sequence", "docsis.hcs",
- FT_UINT16, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- { &hf_docsis_hcs_status,
- { "HCS Status", "docsis.hcs.status",
- FT_UINT8, BASE_NONE, VALS(local_proto_checksum_vals), 0x0,
- NULL, HFILL}
- },
- { &hf_docsis_bpi_en,
- { "Encryption", "docsis.bpi_en",
- FT_BOOLEAN, 8, TFS (&ena_dis_tfs), 0x80,
- "BPI Enable", HFILL}
- },
- { &hf_docsis_toggle_bit,
- { "Toggle", "docsis.toggle_bit",
- FT_BOOLEAN, 8, TFS (&odd_even_tfs), 0x40,
- NULL, HFILL}
- },
- { &hf_docsis_fragment_overlap,
- { "Fragment overlap", "docsis.fragment.overlap",
- FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Fragment overlaps with other fragments", HFILL}
- },
- { &hf_docsis_fragment_overlap_conflict,
- { "Conflicting data in fragment overlap", "docsis.fragment.overlap.conflict",
- FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Overlapping fragments contained conflicting data", HFILL}
- },
- { &hf_docsis_fragment_multiple_tails,
- { "Multiple tail fragments found", "docsis.fragment.multipletails",
- FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Several tails were found when defragmenting the packet", HFILL}
- },
- { &hf_docsis_fragment_too_long_fragment,
- { "Fragment too long", "docsis.fragment.toolongfragment",
- FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Fragment contained data past end of packet", HFILL}
- },
- { &hf_docsis_fragment_error,
- { "Defragmentation error", "docsis.fragment.error",
- FT_FRAMENUM, BASE_NONE, NULL, 0x0,
- "Defragmentation error due to illegal fragments", HFILL}
- },
- { &hf_docsis_fragment_count,
- { "Fragment count", "docsis.fragment.count",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- { &hf_docsis_fragment,
- { "DOCSIS Fragment", "docsis.fragment",
- FT_FRAMENUM, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- { &hf_docsis_fragments,
- { "DOCSIS Fragments", "docsis.fragments",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- { &hf_docsis_reassembled_in,
- { "Reassembled DOCSIS in frame", "docsis.reassembled_in",
- FT_FRAMENUM, BASE_NONE, NULL, 0x0,
- "This DOCSIS packet is reassembled in this frame", HFILL}
- },
- { &hf_docsis_reassembled_length,
- { "Reassembled DOCSIS length", "docsis.reassembled.length",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "The total length of the reassembled payload", HFILL}
- },
- { &hf_docsis_reassembled_data,
- { "Reassembled DOCSIS data", "docsis.reassembled.data",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "The reassembled payload", HFILL}
- },
- { &hf_docsis_frag_fcs,
- { "Fragment FCS", "docsis.frag.fcs",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- { &hf_docsis_frag_fcs_status,
- { "Fragment FCS Status", "docsis.frag.fcs.status",
- FT_UINT8, BASE_NONE, VALS(local_proto_checksum_vals), 0x0,
- NULL, HFILL}
- }
- };
-
- static ei_register_info ei[] = {
- { &ei_docsis_hcs_bad, { "docsis.hcs_bad", PI_CHECKSUM, PI_ERROR, "Bad checksum", EXPFILL }},
- { &ei_docsis_len, { "docsis.len.past_end", PI_MALFORMED, PI_ERROR, "Length field value goes past the end of the payload", EXPFILL }},
- { &ei_docsis_frag_fcs_bad, { "docsis.frag.fcs_bad", PI_CHECKSUM, PI_ERROR, "Bad checksum", EXPFILL }},
- { &ei_docsis_eh_len, { "docsis.ehdr.len.past_end", PI_MALFORMED, PI_ERROR, "Extended Header Length Invalid!", EXPFILL }}
- };
-
- static gint *ett[] = {
- &ett_docsis,
- &ett_ehdr,
- &ett_docsis_fragment,
- &ett_docsis_fragments
- };
-
- module_t *docsis_module;
- expert_module_t* expert_docsis;
-
- proto_docsis = proto_register_protocol ("DOCSIS", "DOCSIS", "docsis");
- proto_register_field_array (proto_docsis, hf, array_length (hf));
- proto_register_subtree_array (ett, array_length (ett));
-
- /* register expert notifications */
- expert_docsis = expert_register_protocol(proto_docsis);
- expert_register_field_array(expert_docsis, ei, array_length(ei));
-
- /* Register configuration preferences */
- docsis_module = prefs_register_protocol(proto_docsis, NULL);
- prefs_register_bool_preference(docsis_module, "check_fcs",
- "Validate the DOCSIS checksum if possible",
- "Whether or not to validate the Header Check Sequence",
- &docsis_check_fcs);
-
-#if 0
- docsis_dissector_table = register_dissector_table ("docsis",
- "DOCSIS Encapsulation Type", proto_docsis,
- FT_UINT8, BASE_DEC);
-#endif
-
- docsis_handle = register_dissector ("docsis", dissect_docsis, proto_docsis);
- reassembly_table_register(&docsis_reassembly_table,
- &addresses_reassembly_table_functions);
-}
-
-void
-proto_reg_handoff_docsis (void)
-{
- dissector_add_uint ("wtap_encap", WTAP_ENCAP_DOCSIS, docsis_handle);
-
- docsis_mgmt_handle = find_dissector ("docsis_mgmt");
- eth_withoutfcs_handle = find_dissector_add_dependency("eth_withoutfcs", proto_docsis);
-}
-
-/*
- * Editor modelines - http://www.wireshark.org/tools/modelines.html
- *
- * Local Variables:
- * c-basic-offset: 2
- * tab-width: 8
- * indent-tabs-mode: nil
- * End:
- *
- * ex: set shiftwidth=2 tabstop=8 expandtab:
- * :indentSize=2:tabSize=8:noTabs=true:
- */
diff --git a/plugins/epan/docsis/packet-macmgmt.c b/plugins/epan/docsis/packet-macmgmt.c
deleted file mode 100644
index 5113f3657a..0000000000
--- a/plugins/epan/docsis/packet-macmgmt.c
+++ /dev/null
@@ -1,8607 +0,0 @@
-/* packet-macmgmt.c
- * Routines for docsis Mac Management Header dissection
- * Routines for Upstream Channel Change dissection
- * Routines for Ranging Message dissection
- * Routines for Registration Message dissection
- * Routines for Baseline Privacy Key Management Message dissection
- * Routines for Dynamic Service Addition Message dissection
- * Routines for Dynamic Service Change Request dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * Routines for Type 2 UCD Message dissection
- * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * Routines for Sync Message dissection
- * Routines for REG-REQ-MP dissection
- * Copyright 2007, Bruno Verstuyft <bruno.verstuyft@excentis.com>
- *
- * Routines for DOCSIS 3.1 OFDM Channel Descriptor dissection.
- * Routines for DOCSIS 3.1 Downstream Profile Descriptor dissection.
- * Routines for Type 51 UCD - DOCSIS 3.1 only - Message dissection
- * Copyright 2016, Bruno Verstuyft <bruno.verstuyft@excentis.com>
- *
- * Routines for DCC Message dissection
- * Routines for DCD Message dissection
- * Copyright 2004, Darryl Hymel <darryl.hymel[AT]arrisi.com>
- *
- * Routines for Type 29 UCD - DOCSIS 2.0 only - Message dissection
- * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
- * Copyright 2003, Brian Wheeler <brian.wheeler[AT]arrisi.com>
- *
- * Routines for Intial Ranging Request Message dissection
- * Copyright 2003, Brian Wheeler <brian.wheeler[AT]arrisi.com>
- *
- * Routines for Baseline Privacy Key Management Attributes dissection
- * Copyright 2017, Adrian Simionov <daniel.simionov@gmail.com>
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * Routines for MDD Message dissection
- * Copyright 2014, Adrian Simionov <adrian.simionov@arrisi.com>
- * Copyright 2007, Bruno Verstuyft <bruno.verstuyft@excentis.com>
- *
- * Routines for DOCSIS 3.0 Bonded Intial Ranging Request Message dissection.
- * Copyright 2009, Geoffrey Kimball <gekimbal[AT]cisco.com>
- *
- * Routines for Type 35 UCD - DOCSIS 3.0 only - Message dissection
- * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
- *
- * Routines for DOCSIS 3.0 Dynamic Bonding Change Message dissection.
- * Routines for DOCSIS 3.0 DOCSIS Path Verify Message dissection.
- * Routines for DOCSIS 3.0 CM Control Message dissection.
- * Copyright 2010, Guido Reismueller <g.reismueller[AT]avm.de>
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.org>
- * Copyright 1998 Gerald Combs
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#include "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-#include <wsutil/utf8_entities.h>
-#include "packet-tlv.h"
-
-void proto_register_docsis_mgmt(void);
-void proto_reg_handoff_docsis_mgmt(void);
-
-#define MGT_SYNC 1
-#define MGT_UCD 2
-#define MGT_MAP 3
-#define MGT_RNG_REQ 4
-#define MGT_RNG_RSP 5
-#define MGT_REG_REQ 6
-#define MGT_REG_RSP 7
-#define MGT_UCC_REQ 8
-#define MGT_UCC_RSP 9
-#define MGT_TRI_TCD 10
-#define MGT_TRI_TSI 11
-#define MGT_BPKM_REQ 12
-#define MGT_BPKM_RSP 13
-#define MGT_REG_ACK 14
-#define MGT_DSA_REQ 15
-#define MGT_DSA_RSP 16
-#define MGT_DSA_ACK 17
-#define MGT_DSC_REQ 18
-#define MGT_DSC_RSP 19
-#define MGT_DSC_ACK 20
-#define MGT_DSD_REQ 21
-#define MGT_DSD_RSP 22
-#define MGT_DCC_REQ 23
-#define MGT_DCC_RSP 24
-#define MGT_DCC_ACK 25
-#define MGT_DCI_REQ 26
-#define MGT_DCI_RSP 27
-#define MGT_UP_DIS 28
-#define MGT_TYPE29UCD 29
-#define MGT_INIT_RNG_REQ 30
-#define MGT_TEST_REQ 31
-#define MGT_DS_CH_DESC 32
-#define MGT_MDD 33
-#define MGT_B_INIT_RNG_REQ 34
-#define MGT_TYPE35UCD 35
-#define MGT_DBC_REQ 36
-#define MGT_DBC_RSP 37
-#define MGT_DBC_ACK 38
-#define MGT_DPV_REQ 39
-#define MGT_DPV_RSP 40
-#define MGT_CM_STATUS 41
-#define MGT_CM_CTRL_REQ 42
-#define MGT_CM_CTRL_RSP 43
-#define MGT_REG_REQ_MP 44
-#define MGT_REG_RSP_MP 45
-#define MGT_EM_REQ 46
-#define MGT_EM_RSP 47
-#define MGT_STATUS_ACK 48
-#define MGT_OCD 49
-#define MGT_DPD 50
-#define MGT_TYPE51UCD 51
-
-#define UCD_SYMBOL_RATE 1
-#define UCD_FREQUENCY 2
-#define UCD_PREAMBLE 3
-#define UCD_BURST_DESCR 4
-#define UCD_BURST_DESCR5 5
-#define UCD_EXT_PREAMBLE 6
-#define UCD_SCDMA_MODE_ENABLED 7
-#define UCD_SCDMA_SPREADING_INTERVAL 8
-#define UCD_SCDMA_CODES_PER_MINI_SLOT 9
-#define UCD_SCDMA_ACTIVE_CODES 10
-#define UCD_SCDMA_CODE_HOPPING_SEED 11
-#define UCD_SCDMA_US_RATIO_NUM 12
-#define UCD_SCDMA_US_RATIO_DENOM 13
-#define UCD_SCDMA_TIMESTAMP_SNAPSHOT 14
-#define UCD_MAINTAIN_POWER_SPECTRAL_DENSITY 15
-#define UCD_RANGING_REQUIRED 16
-#define UCD_MAX_SCHEDULED_CODES 17
-#define UCD_RANGING_HOLD_OFF_PRIORITY_FIELD 18
-#define UCD_RANGING_CHANNEL_CLASS_ID 19
-#define UCD_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING 20
-#define UCD_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES 21
-#define UCD_HIGHER_UCD_FOR_SAME_UCID 22
-#define UCD_BURST_DESCR23 23
-#define UCD_CHANGE_IND_BITMASK 24
-#define UCD_OFDMA_TIMESTAMP_SNAPSHOT 25
-#define UCD_OFDMA_CYCLIC_PREFIX_SIZE 26
-#define UCD_OFDMA_ROLLOFF_PERIOD_SIZE 27
-#define UCD_SUBCARRIER_SPACING 28
-#define UCD_CENTER_FREQ_SUBC_0 29
-#define UCD_SUBC_EXCL_BAND 30
-#define UCD_UNUSED_SUBC_SPEC 31
-#define UCD_SYMB_IN_OFDMA_FRAME 32
-#define UCD_RAND_SEED 33
-
-#define UCD_MODULATION 1
-#define UCD_DIFF_ENCODING 2
-#define UCD_PREAMBLE_LEN 3
-#define UCD_PREAMBLE_VAL_OFF 4
-#define UCD_FEC 5
-#define UCD_FEC_CODEWORD 6
-#define UCD_SCRAMBLER_SEED 7
-#define UCD_MAX_BURST 8
-#define UCD_GUARD_TIME 9
-#define UCD_LAST_CW_LEN 10
-#define UCD_SCRAMBLER_ONOFF 11
-#define UCD_RS_INT_DEPTH 12
-#define UCD_RS_INT_BLOCK 13
-#define UCD_PREAMBLE_TYPE 14
-#define UCD_SCMDA_SCRAMBLER_ONOFF 15
-#define UCD_SCDMA_CODES_PER_SUBFRAME 16
-#define UCD_SCDMA_FRAMER_INT_STEP_SIZE 17
-#define UCD_TCM_ENABLED 18
-#define UCD_SUBC_INIT_RANG 19
-#define UCD_SUBC_FINE_RANG 20
-#define UCD_OFDMA_PROFILE 21
-#define UCD_OFDMA_IR_POWER_CONTROL 22
-
-#define IUC_REQUEST 1
-#define IUC_REQ_DATA 2
-#define IUC_INIT_MAINT 3
-#define IUC_STATION_MAINT 4
-#define IUC_SHORT_DATA_GRANT 5
-#define IUC_LONG_DATA_GRANT 6
-#define IUC_NULL_IE 7
-#define IUC_DATA_ACK 8
-#define IUC_ADV_PHY_SHORT_DATA_GRANT 9
-#define IUC_ADV_PHY_LONG_DATA_GRANT 10
-#define IUC_ADV_PHY_UGS 11
-#define IUC_DATA_PROFILE_IUC12 12
-#define IUC_DATA_PROFILE_IUC13 13
-#define IUC_RESERVED14 14
-#define IUC_EXPANSION 15
-
-#define MAP_v1 1
-#define MAP_v5 5
-
-#define RNGRSP_TIMING 1
-#define RNGRSP_PWR_LEVEL_ADJ 2
-#define RNGRSP_OFFSET_FREQ_ADJ 3
-#define RNGRSP_TRANSMIT_EQ_ADJ 4
-#define RNGRSP_RANGING_STATUS 5
-#define RNGRSP_DOWN_FREQ_OVER 6
-#define RNGRSP_UP_CHID_OVER 7
-#define RNGRSP_DYNAMIC_RANGE_WINDOW_UPPER_EDGE 14
-#define RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS 15
-#define RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS 16
-#define RNGRSP_COMMANDED_POWER 17
-
-/* Commanded Power Sub TLVs*/
-#define RNGRSP_COMMANDED_POWER_DYNAMIC_RANGE_WINDOW 1
-#define RNGRSP_COMMANDED_POWER_UCID_AND_POWER_LEVEL_LIST 2
-
-
-
-/* BPKM Attributes defined in:
- * http://www.cablemodem.com/downloads/specs/SP-BPI+_I10-030730.pdf
- */
-#define BPKM_RESERVED 0
-#define BPKM_SERIAL_NUM 1
-#define BPKM_MANUFACTURER_ID 2
-#define BPKM_MAC_ADDR 3
-#define BPKM_RSA_PUB_KEY 4
-#define BPKM_CM_ID 5
-#define BPKM_DISPLAY_STR 6
-#define BPKM_AUTH_KEY 7
-#define BPKM_TEK 8
-#define BPKM_KEY_LIFETIME 9
-#define BPKM_KEY_SEQ_NUM 10
-#define BPKM_HMAC_DIGEST 11
-#define BPKM_SAID 12
-#define BPKM_TEK_PARAM 13
-#define BPKM_OBSOLETED 14
-#define BPKM_CBC_IV 15
-#define BPKM_ERROR_CODE 16
-#define BPKM_CA_CERT 17
-#define BPKM_CM_CERT 18
-#define BPKM_SEC_CAPABILITIES 19
-#define BPKM_CRYPTO_SUITE 20
-#define BPKM_CRYPTO_SUITE_LIST 21
-#define BPKM_BPI_VERSION 22
-#define BPKM_SA_DESCRIPTOR 23
-#define BPKM_SA_TYPE 24
-#define BPKM_SA_QUERY 25
-#define BPKM_SA_QUERY_TYPE 26
-#define BPKM_IP_ADDRESS 27
-#define BPKM_DNLD_PARAMS 28
-#define BPKM_VENDOR_DEFINED 127
-
-#define DCCREQ_UP_CHAN_ID 1
-#define DCCREQ_DS_PARAMS 2
-#define DCCREQ_INIT_TECH 3
-#define DCCREQ_UCD_SUB 4
-#define DCCREQ_SAID_SUB 6
-#define DCCREQ_SF_SUB 7
-#define DCCREQ_CMTS_MAC_ADDR 8
-#define DCCREQ_KEY_SEQ_NUM 31
-#define DCCREQ_HMAC_DIGEST 27
-
-/* Define Downstrean Parameters subtypes
- * These are subtype of DCCREQ_DS_PARAMS (2)
- */
-
-#define DCCREQ_DS_FREQ 1
-#define DCCREQ_DS_MOD_TYPE 2
-#define DCCREQ_DS_SYM_RATE 3
-#define DCCREQ_DS_INTLV_DEPTH 4
-#define DCCREQ_DS_CHAN_ID 5
-#define DCCREQ_DS_SYNC_SUB 6
-#define DCCREQ_DS_OFDM_BLOCK_FREQ 7
-
-/* Define Service Flow Substitution subtypes
- * These are subtypes of DCCREQ_SF_SUB (7)
- */
-#define DCCREQ_SF_SFID 1
-#define DCCREQ_SF_SID 2
-#define DCCREQ_SF_UNSOL_GRANT_TREF 5
-
-#define DCCRSP_CM_JUMP_TIME 1
-#define DCCRSP_KEY_SEQ_NUM 31
-#define DCCRSP_HMAC_DIGEST 27
-
-/* Define DCC-RSP CM Jump Time subtypes
- * These are subtype of DCCRSP_CM_JUMP_TIME (1)
- */
-#define DCCRSP_CM_JUMP_TIME_LENGTH 1
-#define DCCRSP_CM_JUMP_TIME_START 2
-
-#define DCCACK_KEY_SEQ_NUM 31
-#define DCCACK_HMAC_DIGEST 27
-
-#define DCD_DOWN_CLASSIFIER 23
-#define DCD_DSG_RULE 50
-#define DCD_DSG_CONFIG 51
-
-/* Define Downstrean Classifier subtypes
- * These are subtype of DCD_DOWN_CLASSIFIER (23)
- */
-
-#define DCD_CFR_ID 2
-#define DCD_CFR_RULE_PRI 5
-#define DCD_CFR_IP_CLASSIFIER 9
-
-/* Define IP Classifier sub-subtypes
- * These are subtypes of DCD_CFR_IP_CLASSIFIER (23.9)
- */
-#define DCD_CFR_IP_SOURCE_ADDR 3
-#define DCD_CFR_IP_SOURCE_MASK 4
-#define DCD_CFR_IP_DEST_ADDR 5
-#define DCD_CFR_IP_DEST_MASK 6
-#define DCD_CFR_TCPUDP_SRCPORT_START 7
-#define DCD_CFR_TCPUDP_SRCPORT_END 8
-#define DCD_CFR_TCPUDP_DSTPORT_START 9
-#define DCD_CFR_TCPUDP_DSTPORT_END 10
-
-/* Define DSG Rule subtypes
- * These are subtype of DCD_DSG_RULE (50)
- */
-
-#define DCD_RULE_ID 1
-#define DCD_RULE_PRI 2
-#define DCD_RULE_UCID_RNG 3
-#define DCD_RULE_CLIENT_ID 4
-#define DCD_RULE_TUNL_ADDR 5
-#define DCD_RULE_CFR_ID 6
-#define DCD_RULE_VENDOR_SPEC 43
-/* Define DSG Rule Client ID sub-subtypes
- * These are subtypes of DCD_RULE_CLIENT_ID (50.4)
- */
-#define DCD_CLID_BCAST_ID 1
-#define DCD_CLID_KNOWN_MAC_ADDR 2
-#define DCD_CLID_CA_SYS_ID 3
-#define DCD_CLID_APP_ID 4
-
-/* Define DSG Configuration subtypes
- * These are subtype of DCD_DSG_CONFIG (51)
- */
-
-#define DCD_CFG_CHAN_LST 1
-#define DCD_CFG_TDSG1 2
-#define DCD_CFG_TDSG2 3
-#define DCD_CFG_TDSG3 4
-#define DCD_CFG_TDSG4 5
-#define DCD_CFG_VENDOR_SPEC 43
-
-#define DOWNSTREAM_ACTIVE_CHANNEL_LIST 1
-#define MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP 2
-#define DOWNSTREAM_AMBIGUITY_RESOLUTION_FREQUENCY_LIST 3
-#define RECEIVE_CHANNEL_PROFILE_REPORTING_CONTROL 4
-#define IP_INITIALIZATION_PARAMETERS 5
-#define EARLY_AUTHENTICATION_AND_ENCRYPTION 6
-#define UPSTREAM_ACTIVE_CHANNEL_LIST 7
-#define UPSTREAM_AMBIGUITY_RESOLUTION_CHANNEL_LIST 8
-#define UPSTREAM_FREQUENCY_RANGE 9
-#define SYMBOL_CLOCK_LOCKING_INDICATOR 10
-#define CM_STATUS_EVENT_CONTROL 11
-#define UPSTREAM_TRANSMIT_POWER_REPORTING 12
-#define DSG_DA_TO_DSID_ASSOCIATION_ENTRY 13
-#define CM_STATUS_EVENT_ENABLE_NON_CHANNEL_SPECIFIC_EVENTS 15
-#define EXTENDED_UPSTREAM_TRANSMIT_POWER_SUPPORT 16
-#define CMTS_DOCSIS_VERSION 17
-#define CM_PERIODIC_MAINTENANCE_TIMEOUT_INDICATOR 18
-#define DLS_BROADCAST_AND_MULTICAST_DELIVERY_METHOD 19
-#define CM_STATUS_EVENT_ENABLE_FOR_DOCSIS_3_1_EVENTS 20
-
-
-/*Downstream Active Channel List*/
-#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_CHANNEL_ID 1
-#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_FREQUENCY 2
-#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_MODULATION_ORDER_ANNEX 3
-#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_PRIMARY_CAPABLE 4
-#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK 5
-#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_MAP_UCD_TRANSPORT_INDICATOR 6
-#define DOWNSTREAM_ACTIVE_CHANNEL_LIST_OFDM_PLC_PARAMETERS 7
-
-/*Mac Domain Downstream Service Group*/
-#define MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_MD_DS_SG_IDENTIFIER 1
-#define MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_CHANNEL_IDS 2
-
-/*Modulation Orders*/
-#define QAM64 0
-#define QAM256 1
-
-/*Annexes*/
-#define J83_ANNEX_A 0
-#define J83_ANNEX_B 1
-#define J83_ANNEX_C 2
-
-/*Primary Capable*/
-#define NOT_PRIMARY_CAPABLE 0
-#define PRIMARY_CAPABLE 1
-
-/*Can carry MAP and UCD*/
-#define CANNOT_CARRY_MAP_UCD 0
-#define CAN_CARRY_MAP_UCD 1
-
-/*Receive Channel Profile Reporting Control*/
-#define RCP_CENTER_FREQUENCY_SPACING 1
-#define VERBOSE_RCP_REPORTING 2
-
-/*Frequency spacing*/
-#define ASSUME_6MHZ_CENTER_FREQUENCY_SPACING 0
-#define ASSUME_8MHZ_CENTER_FREQUENCY_SPACING 1
-
-/*Verbose RCP reporting*/
-#define RCP_NO_VERBOSE_REPORTING 0
-#define RCP_VERBOSE_REPORTING 1
-
-/*Sub-TLVs for IP Initialization Parameters*/
-#define IP_PROVISIONING_MODE 1
-#define PRE_REGISTRATION_DSID 2
-
-/*IP Provisioning Modes*/
-#define IPv4_ONLY 0
-#define IPv6_ONLY 1
-#define IP_ALTERNATE 2
-#define DUAL_STACK 3
-
-/*Early authentication and encryption*/
-#define EAE_DISABLED 0
-#define EAE_ENABLED 1
-
-/*Upstream Active Channel List*/
-#define UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_ID 1
-#define UPSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK 2
-
-/*Upstream Frequency Range*/
-#define STANDARD_UPSTREAM_FREQUENCY_RANGE 0
-#define EXTENDED_UPSTREAM_FREQUENCY_RANGE 1
-
-/*Symbol Clock Locking Indicator*/
-#define NOT_LOCKED_TO_MASTER_CLOCK 0
-#define LOCKED_TO_MASTER_CLOCK 1
-
-/*CM-STATUS Event Control */
-#define EVENT_TYPE_CODE 1
-#define MAXIMUM_EVENT_HOLDOFF_TIMER 2
-#define MAXIMUM_NUMBER_OF_REPORTS_PER_EVENT 3
-
-/*CM-STATUS Events*/
-#define SECONDARY_CHANNEL_MDD_TIMEOUT 1
-#define QAM_FEC_LOCK_FAILURE 2
-#define SEQUENCE_OUT_OF_RANGE 3
-#define MDD_RECOVERY 4
-#define QAM_FEC_LOCK_RECOVERY 5
-#define T4_TIMEOUT 6
-#define T3_RETRIES_EXCEEDED 7
-#define SUCCESFUL_RANGING_AFTER_T3_RETRIES_EXCEEDED 8
-#define CM_OPERATING_ON_BATTERY_BACKUP 9
-#define CM_RETURNED_TO_AC_POWER 10
-
-/*Upstream Transmit Power Reporting*/
-#define CM_DOESNT_REPORT_TRANSMIT_POWER 0
-#define CM_REPORTS_TRANSMIT_POWER 1
-
-/*Dsg DA to DSID association entry*/
-#define DSG_DA_TO_DSID_ASSOCIATION_DA 1
-#define DSG_DA_TO_DSID_ASSOCIATION_DSID 2
-
-/*CMTS DOCSIS VERSION*/
-#define CMTS_MAJOR_DOCSIS_VERSION 1
-#define CMTS_MINOR_DOCSIS_VERSION 2
-
-/* Define Tukey raised cosine window */
-#define TUKEY_0TS 0
-#define TUKEY_64TS 1
-#define TUKEY_128TS 2
-#define TUKEY_192TS 3
-#define TUKEY_256TS 4
-
-/* Define Cyclic prefix */
-#define CYCLIC_PREFIX_192_TS 0
-#define CYCLIC_PREFIX_256_TS 1
-#define CYCLIC_PREFIX_512_TS 2
-#define CYCLIC_PREFIX_768_TS 3
-#define CYCLIC_PREFIX_1024_TS 4
-
-/* Define Sub carrier spacing */
-#define SPACING_25KHZ 0
-#define SPACING_50KHZ 1
-
-#define SEC_CH_MDD_TIMEOUT 1
-#define QAM_FEC_LOCK_FAILURE 2
-#define SEQ_OUT_OF_RANGE 3
-#define SEC_CH_MDD_RECOVERY 4
-#define QAM_FEC_LOCK_RECOVERY 5
-#define T4_TIMEOUT 6
-#define T3_RETRIES_EXCEEDED 7
-#define SUCCESS_RANGING_AFTER_T3_RETRIES_EXCEEDED 8
-#define CM_ON_BATTERY 9
-#define CM_ON_AC_POWER 10
-
-#define EVENT_DESCR 2
-#define EVENT_DS_CH_ID 4
-#define EVENT_US_CH_ID 5
-#define EVENT_DSID 6
-
-#define CM_CTRL_MUTE 1
-#define CM_CTRL_MUTE_TIMEOUT 2
-#define CM_CTRL_REINIT 3
-#define CM_CTRL_DISABLE_FWD 4
-#define CM_CTRL_DS_EVENT 5
-#define CM_CTRL_US_EVENT 6
-#define CM_CTRL_EVENT 7
-
-#define DS_EVENT_CH_ID 1
-#define DS_EVENT_MASK 2
-
-#define US_EVENT_CH_ID 1
-#define US_EVENT_MASK 2
-
-#define DISCRETE_FOURIER_TRANSFORM_SIZE 0
-#define CYCLIC_PREFIX 1
-#define ROLL_OFF 2
-#define OFDM_SPECTRUM_LOCATION 3
-#define TIME_INTERLEAVING_DEPTH 4
-#define SUBCARRIER_ASSIGNMENT_RANGE_LIST 5
-#define PRIMARY_CAPABILITY_INDICATOR 6
-#define SUBCARRIER_ASSIGNMENT_VECTOR 6
-
-#define SUBCARRIER_ASSIGNMENT_RANGE_CONT 0
-#define SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1 1
-#define SUBCARRIER_ASSIGNMENT_LIST 2
-
-
-static int proto_docsis_mgmt = -1;
-static int proto_docsis_sync = -1;
-static int proto_docsis_ucd = -1;
-static int proto_docsis_map_v1 = -1;
-static int proto_docsis_map_v5 = -1;
-static int proto_docsis_rngreq = -1;
-static int proto_docsis_rngrsp = -1;
-static int proto_docsis_regreq = -1;
-static int proto_docsis_regrsp = -1;
-static int proto_docsis_uccreq = -1;
-static int proto_docsis_uccrsp = -1;
-static int proto_docsis_bpkmreq = -1;
-static int proto_docsis_bpkmrsp = -1;
-static int proto_docsis_regack = -1;
-static int proto_docsis_dsareq = -1;
-static int proto_docsis_dsarsp = -1;
-static int proto_docsis_dsaack = -1;
-static int proto_docsis_dscreq = -1;
-static int proto_docsis_dscrsp = -1;
-static int proto_docsis_dscack = -1;
-static int proto_docsis_dsdreq = -1;
-static int proto_docsis_dsdrsp = -1;
-static int proto_docsis_dccreq = -1;
-static int proto_docsis_dccrsp = -1;
-static int proto_docsis_dccack = -1;
-static int proto_docsis_type29ucd = -1;
-static int proto_docsis_intrngreq = -1;
-static int proto_docsis_dcd = -1;
-static int proto_docsis_mdd = -1;
-static int proto_docsis_bintrngreq = -1;
-static int proto_docsis_type35ucd = -1;
-static int proto_docsis_dbcreq = -1;
-static int proto_docsis_dbcrsp = -1;
-static int proto_docsis_dbcack = -1;
-static int proto_docsis_dpvreq = -1;
-static int proto_docsis_dpvrsp = -1;
-static int proto_docsis_cmstatus = -1;
-static int proto_docsis_cmctrlreq = -1;
-static int proto_docsis_cmctrlrsp = -1;
-static int proto_docsis_regreqmp = -1;
-static int proto_docsis_regrspmp = -1;
-static int proto_docsis_ocd = -1;
-static int proto_docsis_dpd = -1;
-static int proto_docsis_type51ucd = -1;
-
-static int hf_docsis_sync_cmts_timestamp = -1;
-
-static int hf_docsis_ucd_config_ch_cnt = -1;
-static int hf_docsis_ucd_mini_slot_size = -1;
-static int hf_docsis_ucd_type = -1;
-static int hf_docsis_ucd_length = -1;
-static int hf_docsis_ucd_burst_type = -1;
-static int hf_docsis_ucd_burst_length = -1;
-static int hf_docsis_ucd_symbol_rate = -1;
-static int hf_docsis_ucd_frequency = -1;
-static int hf_docsis_ucd_preamble_pat = -1;
-static int hf_docsis_ucd_ext_preamble_pat = -1;
-static int hf_docsis_ucd_scdma_mode_enabled = -1;
-static int hf_docsis_ucd_scdma_spreading_interval = -1;
-static int hf_docsis_ucd_scdma_codes_per_mini_slot = -1;
-static int hf_docsis_ucd_scdma_active_codes = -1;
-static int hf_docsis_ucd_scdma_code_hopping_seed = -1;
-static int hf_docsis_ucd_scdma_us_ratio_num = -1;
-static int hf_docsis_ucd_scdma_us_ratio_denom = -1;
-static int hf_docsis_ucd_scdma_timestamp_snapshot = -1;
-static int hf_docsis_ucd_maintain_power_spectral_density = -1;
-static int hf_docsis_ucd_ranging_required = -1;
-static int hf_docsis_ucd_max_scheduled_codes = -1;
-static int hf_docsis_ucd_rnghoff_cm = -1;
-static int hf_docsis_ucd_rnghoff_erouter = -1;
-static int hf_docsis_ucd_rnghoff_emta = -1;
-static int hf_docsis_ucd_rnghoff_estb = -1;
-static int hf_docsis_ucd_rnghoff_rsvd = -1;
-static int hf_docsis_ucd_rnghoff_id_ext = -1;
-static int hf_docsis_ucd_chan_class_id_cm = -1;
-static int hf_docsis_ucd_chan_class_id_erouter = -1;
-static int hf_docsis_ucd_chan_class_id_emta = -1;
-static int hf_docsis_ucd_chan_class_id_estb = -1;
-static int hf_docsis_ucd_chan_class_id_rsvd = -1;
-static int hf_docsis_ucd_chan_class_id_id_ext = -1;
-static int hf_docsis_ucd_scdma_scrambler_onoff = -1;
-static int hf_docsis_ucd_scdma_codes_per_subframe = -1;
-static int hf_docsis_ucd_scdma_framer_int_step_size = -1;
-static int hf_docsis_ucd_tcm_enabled = -1;
-static int hf_docsis_ucd_active_code_hopping = -1;
-static int hf_docsis_ucd_higher_ucd_for_same_ucid = -1;
-static int hf_docsis_ucd_higher_ucd_for_same_ucid_resv = -1;
-static int hf_docsis_ucd_scdma_selection_active_codes = -1;
-static int hf_docsis_ucd_iuc = -1;
-static int hf_docsis_ucd_change_ind_bitmask_subc_excl_band = -1;
-static int hf_docsis_ucd_change_ind_bitmask_unused_subc = -1;
-static int hf_docsis_ucd_change_ind_bitmask_other_subc = -1;
-static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc5 = -1;
-static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc6 = -1;
-static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc9 = -1;
-static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc10 = -1;
-static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc11 = -1;
-static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc12 = -1;
-static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc13 = -1;
-static int hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc3_or_4 = -1;
-static int hf_docsis_ucd_change_ind_bitmask_reserved = -1;
-static int hf_docsis_ucd_ofdma_timestamp_snapshot = -1;
-static int hf_docsis_ucd_ofdma_cyclic_prefix_size = -1;
-static int hf_docsis_ucd_ofdma_rolloff_period_size = -1;
-static int hf_docsis_ucd_subc_spacing = -1;
-static int hf_docsis_ucd_cent_freq_subc0 = -1;
-static int hf_docsis_ucd_subcarrier_range = -1;
-static int hf_docsis_ucd_symb_ofdma_frame = -1;
-static int hf_docsis_ucd_rand_seed = -1;
-
-static int hf_docsis_burst_mod_type = -1;
-static int hf_docsis_burst_diff_encoding = -1;
-static int hf_docsis_burst_preamble_len = -1;
-static int hf_docsis_burst_preamble_val_off = -1;
-static int hf_docsis_burst_fec = -1;
-static int hf_docsis_burst_fec_codeword = -1;
-static int hf_docsis_burst_scrambler_seed = -1;
-static int hf_docsis_burst_max_burst = -1;
-static int hf_docsis_burst_guard_time = -1;
-static int hf_docsis_burst_last_cw_len = -1;
-static int hf_docsis_burst_scrambler_onoff = -1;
-static int hf_docsis_rs_int_depth = -1;
-static int hf_docsis_rs_int_block = -1;
-static int hf_docsis_preamble_type = -1;
-static int hf_docsis_subc_init_rang = -1;
-static int hf_docsis_subc_fine_rang = -1;
-static int hf_docsis_ofdma_prof_mod_order = -1;
-static int hf_docsis_ofdma_prof_pilot_pattern = -1;
-static int hf_docsis_ofdma_prof_num_add_minislots = -1;
-static int hf_docsis_ofdma_ir_pow_ctrl_start_pow = -1;
-static int hf_docsis_ofdma_ir_pow_ctrl_step_size = -1;
-
-static int hf_docsis_map_ucd_count = -1;
-static int hf_docsis_map_numie = -1;
-static int hf_docsis_map_numie_v5 = -1;
-static int hf_docsis_map_alloc_start = -1;
-static int hf_docsis_map_ack_time = -1;
-static int hf_docsis_map_rng_start = -1;
-static int hf_docsis_map_rng_end = -1;
-static int hf_docsis_map_data_start = -1;
-static int hf_docsis_map_data_end = -1;
-static int hf_docsis_map_ie = -1;
-static int hf_docsis_map_probe_ie = -1;
-
-static int hf_docsis_map_rsvd = -1;
-static int hf_docsis_map_rsvd_v5 = -1;
-static int hf_docsis_map_cat = -1;
-
-static int hf_docsis_map_sid = -1;
-static int hf_docsis_map_iuc = -1;
-static int hf_docsis_map_offset = -1;
-static int hf_docsis_map_mer = -1;
-static int hf_docsis_map_pw = -1;
-static int hf_docsis_map_eq = -1;
-static int hf_docsis_map_st = -1;
-static int hf_docsis_map_probe_frame = -1;
-static int hf_docsis_map_symbol_in_frame = -1;
-static int hf_docsis_map_start_subc = -1;
-static int hf_docsis_map_subc_skip = -1;
-
-
-static int hf_docsis_rngreq_sid = -1;
-static int hf_docsis_rngreq_pend_compl = -1;
-
-static int hf_docsis_rngrsp_type = -1;
-static int hf_docsis_rngrsp_length = -1;
-static int hf_docsis_rngrsp_sid = -1;
-static int hf_docsis_rngrsp_timing_adj = -1;
-static int hf_docsis_rngrsp_power_adj = -1;
-static int hf_docsis_rngrsp_freq_adj = -1;
-static int hf_docsis_rngrsp_xmit_eq_adj = -1;
-static int hf_docsis_rngrsp_ranging_status = -1;
-static int hf_docsis_rngrsp_down_freq_over = -1;
-static int hf_docsis_rngrsp_upstream_ch_over = -1;
-static int hf_docsis_rngrsp_dynamic_range_window_upper_edge = -1;
-static int hf_docsis_rngrsp_tlv_unknown = -1;
-static int hf_docsis_rngrsp_trans_eq_data = -1;
-static int hf_docsis_rngrsp_trans_eq_enc_lowest_subc = -1;
-static int hf_docsis_rngrsp_trans_eq_enc_highest_subc = -1;
-static int hf_docsis_rngrsp_trans_eq_enc_coef_real = -1;
-static int hf_docsis_rngrsp_trans_eq_enc_coef_imag = -1;
-static int hf_docsis_rngrsp_commanded_power_data = -1;
-static int hf_docsis_rngrsp_commanded_power_dynamic_range_window = -1;
-static int hf_docsis_rngrsp_commanded_power_ucid = -1;
-static int hf_docsis_rngrsp_commanded_power_trans_pow_lvl = -1;
-
-
-static int hf_docsis_regreq_sid = -1;
-static int hf_docsis_regrsp_sid = -1;
-static int hf_docsis_regrsp_response = -1;
-
-static int hf_docsis_bpkm_code = -1;
-static int hf_docsis_bpkm_length = -1;
-static int hf_docsis_bpkm_ident = -1;
-static int hf_docsis_bpkmattr = -1;
-static int hf_docsis_bpkmattr_serial_num = -1;
-static int hf_docsis_bpkmattr_manf_id = -1;
-static int hf_docsis_bpkmattr_mac_addr = -1;
-static int hf_docsis_bpkmattr_rsa_pub_key = -1;
-static int hf_docsis_bpkmattr_cm_id = -1;
-static int hf_docsis_bpkmattr_display_str = -1;
-static int hf_docsis_bpkmattr_auth_key = -1;
-static int hf_docsis_bpkmattr_tek = -1;
-static int hf_docsis_bpkmattr_key_life = -1;
-static int hf_docsis_bpkmattr_key_seq = -1;
-static int hf_docsis_bpkmattr_hmac_digest = -1;
-static int hf_docsis_bpkmattr_said = -1;
-static int hf_docsis_bpkmattr_tek_params = -1;
-static int hf_docsis_bpkmattr_cbc_iv = -1;
-static int hf_docsis_bpkmattr_error_code = -1;
-static int hf_docsis_bpkmattr_vendor_def = -1;
-static int hf_docsis_bpkmattr_ca_cert = -1;
-static int hf_docsis_bpkmattr_cm_cert = -1;
-static int hf_docsis_bpkmattr_security_cap = -1;
-static int hf_docsis_bpkmattr_crypto_suite = -1;
-static int hf_docsis_bpkmattr_crypto_suite_list = -1;
-static int hf_docsis_bpkmattr_bpi_version = -1;
-static int hf_docsis_bpkmattr_sa_descr = -1;
-static int hf_docsis_bpkmattr_sa_type = -1;
-static int hf_docsis_bpkmattr_sa_query = -1;
-static int hf_docsis_bpkmattr_sa_query_type = -1;
-static int hf_docsis_bpkmattr_ip_address = -1;
-static int hf_docsis_bpkmattr_download_param = -1;
-static int hf_docsis_bpkmattr_type = -1;
-static int hf_docsis_bpkmattr_length = -1;
-
-static int hf_docsis_regack_sid = -1;
-static int hf_docsis_regack_response = -1;
-
-static int hf_docsis_dsarsp_response = -1;
-static int hf_docsis_dsaack_response = -1;
-
-static int hf_docsis_dscrsp_response = -1;
-static int hf_docsis_dscack_response = -1;
-
-static int hf_docsis_dsdreq_rsvd = -1;
-static int hf_docsis_dsdreq_sfid = -1;
-
-static int hf_docsis_dsdrsp_confcode = -1;
-static int hf_docsis_dsdrsp_rsvd = -1;
-
-static int hf_docsis_dccreq_type = -1;
-static int hf_docsis_dccreq_length = -1;
-static int hf_docsis_dccreq_tran_id = -1;
-static int hf_docsis_dccreq_up_chan_id = -1;
-static int hf_docsis_dcc_ds_params_subtype = -1;
-static int hf_docsis_dcc_ds_params_length = -1;
-static int hf_docsis_dccreq_ds_freq = -1;
-static int hf_docsis_dccreq_ds_mod_type = -1;
-static int hf_docsis_dccreq_ds_sym_rate = -1;
-static int hf_docsis_dccreq_ds_intlv_depth_i = -1;
-static int hf_docsis_dccreq_ds_intlv_depth_j = -1;
-static int hf_docsis_dccreq_ds_chan_id = -1;
-static int hf_docsis_dccreq_ds_sync_sub = -1;
-static int hf_docsis_dccreq_ds_ofdm_block_freq = -1;
-static int hf_docsis_dccreq_init_tech = -1;
-static int hf_docsis_dccreq_ucd_sub = -1;
-static int hf_docsis_dccreq_said_sub_cur = -1;
-static int hf_docsis_dccreq_said_sub_new = -1;
-static int hf_docsis_dcc_sf_sub_subtype = -1;
-static int hf_docsis_dcc_sf_sub_length = -1;
-static int hf_docsis_dccreq_sf_sfid_cur = -1;
-static int hf_docsis_dccreq_sf_sfid_new = -1;
-static int hf_docsis_dccreq_sf_sid_cur = -1;
-static int hf_docsis_dccreq_sf_sid_new = -1;
-static int hf_docsis_dccreq_sf_unsol_grant_tref = -1;
-static int hf_docsis_dccreq_cmts_mac_addr = -1;
-static int hf_docsis_dccreq_key_seq_num = -1;
-static int hf_docsis_dccreq_hmac_digest = -1;
-static int hf_docsis_dccrsp_conf_code = -1;
-static int hf_docsis_dccrsp_type = -1;
-static int hf_docsis_dccrsp_length = -1;
-static int hf_docsis_dcc_cm_jump_subtype = -1;
-static int hf_docsis_dcc_cm_jump_length = -1;
-static int hf_docsis_dccrsp_cm_jump_time_length = -1;
-static int hf_docsis_dccrsp_cm_jump_time_start = -1;
-static int hf_docsis_dccrsp_key_seq_num = -1;
-static int hf_docsis_dccrsp_hmac_digest = -1;
-static int hf_docsis_dccack_type = -1;
-static int hf_docsis_dccack_length = -1;
-static int hf_docsis_dccack_key_seq_num = -1;
-static int hf_docsis_dccack_hmac_digest = -1;
-
-static int hf_docsis_intrngreq_sid = -1;
-
-static int hf_docsis_dcd_config_ch_cnt = -1;
-static int hf_docsis_dcd_num_of_frag = -1;
-static int hf_docsis_dcd_frag_sequence_num = -1;
-static int hf_docsis_dcd_type = -1;
-static int hf_docsis_dcd_length = -1;
-static int hf_docsis_dcd_down_classifier_subtype = -1;
-static int hf_docsis_dcd_down_classifier_length = -1;
-static int hf_docsis_dcd_cfr_id = -1;
-static int hf_docsis_dcd_cfr_rule_pri = -1;
-static int hf_docsis_dcd_cfr_ip_subtype = -1;
-static int hf_docsis_dcd_cfr_ip_length = -1;
-static int hf_docsis_dcd_cfr_ip_source_addr = -1;
-static int hf_docsis_dcd_cfr_ip_source_mask = -1;
-static int hf_docsis_dcd_cfr_ip_dest_addr = -1;
-static int hf_docsis_dcd_cfr_ip_dest_mask = -1;
-static int hf_docsis_dcd_cfr_tcpudp_srcport_start = -1;
-static int hf_docsis_dcd_cfr_tcpudp_srcport_end = -1;
-static int hf_docsis_dcd_cfr_tcpudp_dstport_start = -1;
-static int hf_docsis_dcd_cfr_tcpudp_dstport_end = -1;
-static int hf_docsis_dcd_rule_id = -1;
-static int hf_docsis_dcd_rule_pri = -1;
-static int hf_docsis_dcd_rule_ucid_list = -1;
-static int hf_docsis_dcd_clid_subtype = -1;
-static int hf_docsis_dcd_clid_length = -1;
-static int hf_docsis_dcd_clid_bcast_id = -1;
-static int hf_docsis_dcd_clid_known_mac_addr = -1;
-static int hf_docsis_dcd_clid_ca_sys_id = -1;
-static int hf_docsis_dcd_clid_app_id = -1;
-static int hf_docsis_dcd_dsg_rule_subtype = -1;
-static int hf_docsis_dcd_dsg_rule_length = -1;
-static int hf_docsis_dcd_rule_tunl_addr = -1;
-static int hf_docsis_dcd_rule_cfr_id = -1;
-static int hf_docsis_dcd_rule_vendor_spec = -1;
-static int hf_docsis_dcd_cfg_subtype = -1;
-static int hf_docsis_dcd_cfg_length = -1;
-static int hf_docsis_dcd_cfg_chan = -1;
-static int hf_docsis_dcd_cfg_tdsg1 = -1;
-static int hf_docsis_dcd_cfg_tdsg2 = -1;
-static int hf_docsis_dcd_cfg_tdsg3 = -1;
-static int hf_docsis_dcd_cfg_tdsg4 = -1;
-static int hf_docsis_dcd_cfg_vendor_spec = -1;
-
-static int hf_docsis_mdd_ccc = -1;
-static int hf_docsis_mdd_number_of_fragments = -1;
-static int hf_docsis_mdd_fragment_sequence_number = -1;
-static int hf_docsis_mdd_current_channel_dcid = -1;
-static int hf_docsis_mdd_ds_active_channel_list_subtype = -1;
-static int hf_docsis_mdd_ds_active_channel_list_length = -1;
-static int hf_docsis_mdd_downstream_active_channel_list_channel_id = -1;
-static int hf_docsis_mdd_downstream_active_channel_list_frequency = -1;
-static int hf_docsis_mdd_downstream_active_channel_list_annex = -1;
-static int hf_docsis_mdd_downstream_active_channel_list_modulation_order = -1;
-static int hf_docsis_mdd_downstream_active_channel_list_primary_capable = -1;
-static int hf_docsis_mdd_downstream_active_channel_list_map_ucd_transport_indicator = -1;
-static int hf_docsis_mdd_cm_status_event_enable_bitmask = -1;
-static int hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_timeout = -1;
-static int hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_failure = -1;
-static int hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_recovery = -1;
-static int hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_recovery = -1;
-static int hf_docsis_mdd_ofdm_plc_parameters = -1;
-static int hf_docsis_mdd_ofdm_plc_parameters_tukey_raised_cosine_window = -1;
-static int hf_docsis_mdd_ofdm_plc_parameters_cyclic_prefix = -1;
-static int hf_docsis_mdd_ofdm_plc_parameters_sub_carrier_spacing = -1;
-static int hf_docsis_mdd_up_active_channel_list_subtype = -1;
-static int hf_docsis_mdd_up_active_channel_list_length = -1;
-static int hf_docsis_mdd_cm_status_event_enable_bitmask_t4_timeout = -1;
-static int hf_docsis_mdd_cm_status_event_enable_bitmask_t3_retries_exceeded = -1;
-static int hf_docsis_mdd_cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded = -1;
-static int hf_docsis_mdd_ds_service_group_subtype = -1;
-static int hf_docsis_mdd_ds_service_group_length = -1;
-static int hf_docsis_mdd_mac_domain_downstream_service_group_md_ds_sg_identifier = -1;
-static int hf_docsis_mdd_mac_domain_downstream_service_group_channel_id = -1;
-static int hf_docsis_mdd_type = -1;
-static int hf_docsis_mdd_length = -1;
-static int hf_docsis_mdd_downstream_ambiguity_resolution_frequency = -1;
-static int hf_docsis_mdd_channel_profile_reporting_control_subtype = -1;
-static int hf_docsis_mdd_channel_profile_reporting_control_length = -1;
-static int hf_docsis_mdd_rpc_center_frequency_spacing = -1;
-static int hf_docsis_mdd_verbose_rcp_reporting = -1;
-static int hf_docsis_mdd_ip_init_param_subtype = -1;
-static int hf_docsis_mdd_ip_init_param_length = -1;
-static int hf_docsis_mdd_ip_provisioning_mode = -1;
-static int hf_docsis_mdd_pre_registration_dsid = -1;
-static int hf_docsis_mdd_early_authentication_and_encryption = -1;
-static int hf_docsis_mdd_upstream_active_channel_list_upstream_channel_id = -1;
-static int hf_docsis_mdd_upstream_ambiguity_resolution_channel_list_channel_id = -1;
-static int hf_docsis_mdd_upstream_frequency_range = -1;
-static int hf_docsis_mdd_symbol_clock_locking_indicator = -1;
-static int hf_docsis_mdd_cm_status_event_control_subtype = -1;
-static int hf_docsis_mdd_cm_status_event_control_length = -1;
-static int hf_docsis_mdd_event_type = -1;
-static int hf_docsis_mdd_maximum_event_holdoff_timer = -1;
-static int hf_docsis_mdd_maximum_number_of_reports_per_event = -1;
-static int hf_docsis_mdd_upstream_transmit_power_reporting = -1;
-static int hf_docsis_mdd_dsg_da_to_dsid_subtype = -1;
-static int hf_docsis_mdd_dsg_da_to_dsid_length = -1;
-static int hf_docsis_mdd_dsg_da_to_dsid_association_da = -1;
-static int hf_docsis_mdd_dsg_da_to_dsid_association_dsid = -1;
-static int hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events = -1;
-static int hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_sequence_out_of_range = -1;
-static int hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup = -1;
-static int hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power = -1;
-static int hf_docsis_mdd_extended_upstream_transmit_power_support = -1;
-
-static int hf_docsis_mdd_cmts_major_docsis_version = -1;
-static int hf_docsis_mdd_cmts_minor_docsis_version = -1;
-
-static int hf_docsis_mdd_cm_periodic_maintenance_timeout_indicator = -1;
-static int hf_docsis_mdd_dls_broadcast_and_multicast_delivery_method = -1;
-static int hf_docsis_mdd_cm_status_event_d31_ofdm_prof_fail = -1;
-static int hf_docsis_mdd_cm_status_event_d31_prim_down_chan_change = -1;
-static int hf_docsis_mdd_cm_status_event_d31_dpd_mismatch = -1;
-static int hf_docsis_mdd_cm_status_event_d31_deprecated = -1;
-static int hf_docsis_mdd_cm_status_event_d31_ncp_prof_fail = -1;
-static int hf_docsis_mdd_cm_status_event_d31_loss_fec_plc = -1;
-static int hf_docsis_mdd_cm_status_event_d31_ncp_prof_recover = -1;
-static int hf_docsis_mdd_cm_status_event_d31_fec_recover_on_plc = -1;
-static int hf_docsis_mdd_cm_status_event_d31_fec_recover_on_ofdm_prof = -1;
-static int hf_docsis_mdd_cm_status_event_d31_ofdma_prof_fail = -1;
-static int hf_docsis_mdd_cm_status_event_d31_map_stor_overflow_ind = -1;
-static int hf_docsis_mdd_cm_status_event_d31_ofdm_map_stor_almost_full_ind = -1;
-static int hf_docsis_mdd_cm_status_event_d31_reserved = -1;
-
-
-static int hf_docsis_bintrngreq_mddsgid = -1;
-static int hf_docsis_bintrngreq_capflags = -1;
-static int hf_docsis_bintrngreq_capflags_frag = -1;
-static int hf_docsis_bintrngreq_capflags_encrypt = -1;
-
-static int hf_docsis_dbcreq_number_of_fragments = -1;
-static int hf_docsis_dbcreq_fragment_sequence_number = -1;
-
-static int hf_docsis_dbcrsp_conf_code = -1;
-
-static int hf_docsis_dpv_flags = -1;
-static int hf_docsis_dpv_us_sf = -1;
-static int hf_docsis_dpv_n = -1;
-static int hf_docsis_dpv_start = -1;
-static int hf_docsis_dpv_end = -1;
-static int hf_docsis_dpv_ts_start = -1;
-static int hf_docsis_dpv_ts_end = -1;
-
-static int hf_docsis_cmstatus_e_t_mdd_t = -1;
-static int hf_docsis_cmstatus_e_t_qfl_f = -1;
-static int hf_docsis_cmstatus_e_t_s_o = -1;
-static int hf_docsis_cmstatus_e_t_mdd_r = -1;
-static int hf_docsis_cmstatus_e_t_qfl_r = -1;
-static int hf_docsis_cmstatus_e_t_t4_t = -1;
-static int hf_docsis_cmstatus_e_t_t3_e = -1;
-static int hf_docsis_cmstatus_e_t_rng_s = -1;
-static int hf_docsis_cmstatus_e_t_cm_b = -1;
-static int hf_docsis_cmstatus_e_t_cm_a = -1;
-static int hf_docsis_cmstatus_ds_ch_id = -1;
-static int hf_docsis_cmstatus_us_ch_id = -1;
-static int hf_docsis_cmstatus_dsid = -1;
-static int hf_docsis_cmstatus_descr = -1;
-static int hf_docsis_cmstatus_tlv_data = -1;
-static int hf_docsis_cmstatus_type = -1;
-static int hf_docsis_cmstatus_length = -1;
-
-static int hf_docsis_cmctrl_tlv_mute = -1;
-static int hf_docsis_cmctrl_tlv_mute_timeout = -1;
-static int hf_docsis_cmctrl_tlv_reinit = -1;
-static int hf_docsis_cmctrl_tlv_disable_fwd = -1;
-static int hf_docsis_cmctrl_tlv_ds_event = -1;
-static int hf_docsis_cmctrl_tlv_us_event = -1;
-static int hf_docsis_cmctrl_tlv_event = -1;
-static int hf_docsis_cmctrlreq_tlv_data = -1;
-static int hf_docsis_cmctrlreq_type = -1;
-static int hf_docsis_cmctrlreq_length = -1;
-static int hf_docsis_cmctrlreq_us_type = -1;
-static int hf_docsis_cmctrlreq_us_length = -1;
-static int hf_docsis_cmctrl_us_event_ch_id = -1;
-static int hf_docsis_cmctrl_us_event_mask = -1;
-static int hf_docsis_cmctrl_ds_type = -1;
-static int hf_docsis_cmctrl_ds_length = -1;
-static int hf_docsis_cmctrl_ds_event_ch_id = -1;
-static int hf_docsis_cmctrl_ds_event_mask = -1;
-
-static int hf_docsis_regreqmp_sid = -1;
-static int hf_docsis_regreqmp_number_of_fragments = -1;
-static int hf_docsis_regreqmp_fragment_sequence_number = -1;
-static int hf_docsis_regrspmp_sid = -1;
-static int hf_docsis_regrspmp_response = -1;
-static int hf_docsis_regrspmp_number_of_fragments = -1;
-static int hf_docsis_regrspmp_fragment_sequence_number = -1;
-
-static int hf_docsis_ocd_tlv_unknown = -1;
-static int hf_docsis_ocd_ccc = -1;
-static int hf_docsis_ocd_tlv_four_trans_size = -1;
-static int hf_docsis_ocd_tlv_cycl_pref = -1;
-static int hf_docsis_ocd_tlv_roll_off = -1;
-static int hf_docsis_ocd_tlv_ofdm_spec_loc = -1;
-static int hf_docsis_ocd_tlv_time_int_depth = -1;
-static int hf_docsis_ocd_tlv_prim_cap_ind = -1;
-static int hf_docsis_ocd_tlv_subc_assign_type = -1;
-static int hf_docsis_ocd_tlv_subc_assign_value = -1;
-static int hf_docsis_ocd_subc_assign_subc_type = -1;
-static int hf_docsis_ocd_subc_assign_range = -1;
-static int hf_docsis_ocd_subc_assign_index = -1;
-static int hf_docsis_ocd_tlv_data = -1;
-static int hf_docsis_ocd_type = -1;
-static int hf_docsis_ocd_length = -1;
-
-static int hf_docsis_dpd_tlv_unknown = -1;
-static int hf_docsis_dpd_prof_id = -1;
-static int hf_docsis_dpd_ccc = -1;
-static int hf_docsis_dpd_tlv_subc_assign_type = -1;
-static int hf_docsis_dpd_tlv_subc_assign_value = -1;
-static int hf_docsis_dpd_subc_assign_range = -1;
-static int hf_docsis_dpd_tlv_subc_assign_reserved = -1;
-static int hf_docsis_dpd_tlv_subc_assign_modulation = -1;
-static int hf_docsis_dpd_subc_assign_index = -1;
-static int hf_docsis_dpd_tlv_subc_assign_vector_oddness = -1;
-static int hf_docsis_dpd_tlv_subc_assign_vector_reserved = -1;
-static int hf_docsis_dpd_tlv_subc_assign_vector_subc_start = -1;
-static int hf_docsis_dpd_tlv_subc_assign_vector_modulation_odd = -1;
-static int hf_docsis_dpd_tlv_subc_assign_vector_modulation_even = -1;
-static int hf_docsis_dpd_tlv_data = -1;
-static int hf_docsis_dpd_type = -1;
-static int hf_docsis_dpd_length = -1;
-
-static int hf_docsis_mgt_upstream_chid = -1;
-static int hf_docsis_mgt_down_chid = -1;
-static int hf_docsis_mgt_tranid = -1;
-static int hf_docsis_mgt_dst_addr = -1;
-static int hf_docsis_mgt_src_addr = -1;
-static int hf_docsis_mgt_msg_len = -1;
-static int hf_docsis_mgt_dsap = -1;
-static int hf_docsis_mgt_ssap = -1;
-static int hf_docsis_mgt_control = -1;
-static int hf_docsis_mgt_version = -1;
-static int hf_docsis_mgt_type = -1;
-static int hf_docsis_mgt_rsvd = -1;
-
-
-static gint ett_docsis_sync = -1;
-
-static gint ett_docsis_ucd = -1;
-static gint ett_docsis_tlv = -1;
-static gint ett_docsis_burst_tlv = -1;
-
-static gint ett_docsis_map = -1;
-static gint ett_docsis_map_ie = -1;
-static gint ett_docsis_map_probe_ie = -1;
-
-
-static gint ett_docsis_rngreq = -1;
-
-static gint ett_docsis_rngrsp = -1;
-static gint ett_docsis_rngrsptlv = -1;
-static gint ett_docsis_rngrsp_tlv_transmit_equalization_encodings = -1;
-static gint ett_docsis_rngrsp_tlv_transmit_equalization_encodings_coef = -1;
-static gint ett_docsis_rngrsp_tlv_commanded_power_subtlv = -1;
-static gint ett_docsis_rngrsp_tlv_commanded_power = -1;
-
-
-static gint ett_docsis_regreq = -1;
-static gint ett_docsis_regrsp = -1;
-
-static gint ett_docsis_uccreq = -1;
-static gint ett_docsis_uccrsp = -1;
-
-static gint ett_docsis_bpkmreq = -1;
-static gint ett_docsis_bpkmrsp = -1;
-static gint ett_docsis_bpkmattr = -1;
-static gint ett_docsis_bpkmattr_cmid = -1;
-static gint ett_docsis_bpkmattr_scap = -1;
-static gint ett_docsis_bpkmattr_tekp = -1;
-static gint ett_docsis_bpkmattr_sadsc = -1;
-static gint ett_docsis_bpkmattr_saqry = -1;
-static gint ett_docsis_bpkmattr_dnld = -1;
-static gint ett_docsis_bpkmattrtlv = -1;
-
-static gint ett_docsis_regack = -1;
-
-static gint ett_docsis_dsareq = -1;
-static gint ett_docsis_dsarsp = -1;
-static gint ett_docsis_dsaack = -1;
-
-static gint ett_docsis_dscreq = -1;
-static gint ett_docsis_dscrsp = -1;
-static gint ett_docsis_dscack = -1;
-
-static gint ett_docsis_dsdreq = -1;
-static gint ett_docsis_dsdrsp = -1;
-
-static gint ett_docsis_dccreq = -1;
-static gint ett_docsis_dccreq_tlv = -1;
-static gint ett_docsis_dccreq_ds_params = -1;
-static gint ett_docsis_dccreq_sf_sub = -1;
-static gint ett_docsis_dccrsp = -1;
-static gint ett_docsis_dccrsp_cm_jump_time = -1;
-static gint ett_docsis_dccrsp_tlv = -1;
-static gint ett_docsis_dccack = -1;
-static gint ett_docsis_dccack_tlv = -1;
-
-static gint ett_docsis_intrngreq = -1;
-
-static gint ett_docsis_dcd = -1;
-static gint ett_docsis_dcd_cfr = -1;
-static gint ett_docsis_dcd_cfr_ip = -1;
-static gint ett_docsis_dcd_rule = -1;
-static gint ett_docsis_dcd_clid = -1;
-static gint ett_docsis_dcd_cfg = -1;
-static gint ett_docsis_dcd_tlv = -1;
-
-static gint ett_docsis_mdd = -1;
-static gint ett_tlv = -1;
-static gint ett_sub_tlv = -1;
-static gint ett_docsis_mdd_cm_status_ev_en_for_docsis31 = -1;
-static gint ett_docsis_mdd_ds_active_channel_list = -1;
-static gint ett_docsis_mdd_ds_service_group = -1;
-static gint ett_docsis_mdd_channel_profile_reporting_control = -1;
-static gint ett_docsis_mdd_ip_init_param = -1;
-static gint ett_docsis_mdd_up_active_channel_list = -1;
-static gint ett_docsis_mdd_cm_status_event_control = -1;
-static gint ett_docsis_mdd_dsg_da_to_dsid = -1;
-
-static gint ett_docsis_bintrngreq = -1;
-
-static gint ett_docsis_dbcreq = -1;
-static gint ett_docsis_dbcrsp = -1;
-static gint ett_docsis_dbcack = -1;
-
-static gint ett_docsis_dpvreq = -1;
-static gint ett_docsis_dpvrsp = -1;
-
-static gint ett_docsis_cmstatus = -1;
-static gint ett_docsis_cmstatus_tlv = -1;
-static gint ett_docsis_cmstatus_tlvtlv = -1;
-
-static gint ett_docsis_cmctrlreq = -1;
-static gint ett_docsis_cmctrlreq_tlv = -1;
-static gint ett_docsis_cmctrlreq_tlvtlv = -1;
-static gint ett_docsis_cmctrl_tlv_us_event = -1;
-static gint ett_docsis_cmctrl_tlv_ds_event = -1;
-static gint ett_docsis_cmctrlrsp = -1;
-
-static gint ett_docsis_regreqmp = -1;
-static gint ett_docsis_regrspmp = -1;
-
-static gint ett_docsis_ocd = -1;
-static gint ett_docsis_ocd_tlv = -1;
-static gint ett_docsis_ocd_tlvtlv = -1;
-
-static gint ett_docsis_dpd = -1;
-static gint ett_docsis_dpd_tlv = -1;
-static gint ett_docsis_dpd_tlvtlv = -1;
-static gint ett_docsis_dpd_tlv_subcarrier_assignment = -1;
-static gint ett_docsis_dpd_tlv_subcarrier_assignment_vector = -1;
-
-static gint ett_docsis_mgmt = -1;
-static gint ett_mgmt_pay = -1;
-
-static expert_field ei_docsis_mgmt_tlvlen_bad = EI_INIT;
-static expert_field ei_docsis_mgmt_tlvtype_unknown = EI_INIT;
-static expert_field ei_docsis_mgmt_version_unknown = EI_INIT;
-
-static dissector_table_t docsis_mgmt_dissector_table;
-static dissector_handle_t docsis_tlv_handle;
-static dissector_handle_t docsis_ucd_handle;
-
-static const value_string channel_tlv_vals[] = {
- {UCD_SYMBOL_RATE, "Symbol Rate"},
- {UCD_FREQUENCY, "Frequency"},
- {UCD_PREAMBLE, "Preamble Pattern"},
- {UCD_BURST_DESCR, "Burst Descriptor Type 4"},
- {UCD_BURST_DESCR5, "Burst Descriptor Type 5"},
- {UCD_EXT_PREAMBLE, "Extended Preamble Pattern"},
- {UCD_SCDMA_MODE_ENABLED, "S-CDMA Mode Enabled"},
- {UCD_SCDMA_SPREADING_INTERVAL, "S-CDMA Spreading Intervals per Frame"},
- {UCD_SCDMA_CODES_PER_MINI_SLOT, "S-CDMA Codes per Mini-slot"},
- {UCD_SCDMA_ACTIVE_CODES, "S-CDMA Number of Active Codes"},
- {UCD_SCDMA_CODE_HOPPING_SEED, "S-CDMA Code Hopping Seed"},
- {UCD_SCDMA_US_RATIO_NUM, "S-CDMA US ratio numerator M"},
- {UCD_SCDMA_US_RATIO_DENOM, "S-CDMA US ratio denominator N"},
- {UCD_SCDMA_TIMESTAMP_SNAPSHOT, "S-CDMA Timestamp Snapshot"},
- {UCD_MAINTAIN_POWER_SPECTRAL_DENSITY, "Maintain Power Spectral Density"},
- {UCD_RANGING_REQUIRED, "Ranging Required"},
- {UCD_MAX_SCHEDULED_CODES, "S-CDMA Maximum Scheduled Codes"},
- {UCD_RANGING_HOLD_OFF_PRIORITY_FIELD, "Ranging Hold-Off Priority Field"},
- {UCD_RANGING_CHANNEL_CLASS_ID, "Ranging Channel Class ID"},
- {UCD_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING, "S-CDMA Selection Mode for Active Codes and Code Hopping"},
- {UCD_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES, "S-CDMA Selection String for Active Codes"},
- {UCD_HIGHER_UCD_FOR_SAME_UCID, "Higher UCD for the same UCID present bitmap"},
- {UCD_BURST_DESCR23, "Burst Descriptor Type 23"},
- {UCD_CHANGE_IND_BITMASK, "UCD Change Indicator Bitmask"},
- {UCD_OFDMA_TIMESTAMP_SNAPSHOT, "OFDMA Timestamp Snapshot"},
- {UCD_OFDMA_CYCLIC_PREFIX_SIZE, "OFDMA Cyclic Prefix Size"},
- {UCD_OFDMA_ROLLOFF_PERIOD_SIZE, "OFDMA Rolloff Period Size"},
- {UCD_SUBCARRIER_SPACING, "Subcarrier Spacing"},
- {UCD_CENTER_FREQ_SUBC_0, "Center Frequency of Subcarrier 0"},
- {UCD_SUBC_EXCL_BAND, "Subcarrier Exclusion Band"},
- {UCD_UNUSED_SUBC_SPEC, "Unused Subcarrier Specification"},
- {UCD_SYMB_IN_OFDMA_FRAME, "Symbols in OFDMA frame"},
- {UCD_RAND_SEED, "Randomization Seed"},
- {0, NULL}
-};
-
-static const value_string burst_tlv_vals[] = {
- {UCD_MODULATION, "Modulation Type"},
- {UCD_DIFF_ENCODING, "Differential Encoding"},
- {UCD_PREAMBLE_LEN, "Preamble Length"},
- {UCD_PREAMBLE_VAL_OFF, "Preamble Value Offset"},
- {UCD_FEC, "FEC Error Correction (T)"},
- {UCD_FEC_CODEWORD, "FEC Codeword Information Bytes (k)"},
- {UCD_SCRAMBLER_SEED, "Scrambler Seed"},
- {UCD_MAX_BURST, "Maximum Burst Size"},
- {UCD_GUARD_TIME, "Guard Time Size"},
- {UCD_LAST_CW_LEN, "Last Codeword Length"},
- {UCD_SCRAMBLER_ONOFF, "Scrambler on/off"},
- {UCD_RS_INT_DEPTH, "R-S Interleaver Depth (Ir)"},
- {UCD_RS_INT_BLOCK, "R-S Interleaver Block Size (Br)"},
- {UCD_PREAMBLE_TYPE, "Preamble Type"},
- {UCD_SCMDA_SCRAMBLER_ONOFF, "S-CDMA Spreader on/off"},
- {UCD_SCDMA_CODES_PER_SUBFRAME, "S-CDMA Codes per Subframe"},
- {UCD_SCDMA_FRAMER_INT_STEP_SIZE, "S-CDMA Framer Interleaving Step Size"},
- {UCD_TCM_ENABLED, "TCM Encoding"},
- {UCD_SUBC_INIT_RANG, "Subcarriers (Nir) Initial Ranging"},
- {UCD_SUBC_FINE_RANG, "Subcarriers (Nfr) Fine Ranging"},
- {UCD_OFDMA_PROFILE, "OFDMA Profile"},
- {UCD_OFDMA_IR_POWER_CONTROL, "OFDMA Power Control (Ir)"},
- {0, NULL}
-};
-
-static const value_string mgmt_type_vals[] = {
- {MGT_SYNC, "Timing Synchronisation"},
- {MGT_UCD, "Upstream Channel Descriptor"},
- {MGT_TYPE29UCD, "Upstream Channel Descriptor Type 29"},
- {MGT_TYPE35UCD, "Upstream Channel Descriptor Type 35"},
- {MGT_MAP, "Upstream Bandwidth Allocation"},
- {MGT_RNG_REQ, "Ranging Request"},
- {MGT_RNG_RSP, "Ranging Response"},
- {MGT_REG_REQ, "Registration Request"},
- {MGT_REG_RSP, "Registration Response"},
- {MGT_UCC_REQ, "Upstream Channel Change Request"},
- {MGT_UCC_RSP, "Upstream Channel Change Response"},
- {MGT_TRI_TCD, "Telephony Channel Descriptor"},
- {MGT_TRI_TSI, "Termination System Information"},
- {MGT_BPKM_REQ, "Privacy Key Management Request"},
- {MGT_BPKM_RSP, "Privacy Key Management Response"},
- {MGT_REG_ACK, "Registration Acknowledge"},
- {MGT_DSA_REQ, "Dynamic Service Addition Request"},
- {MGT_DSA_RSP, "Dynamic Service Addition Response"},
- {MGT_DSA_ACK, "Dynamic Service Addition Acknowledge"},
- {MGT_DSC_REQ, "Dynamic Service Change Request"},
- {MGT_DSC_RSP, "Dynamic Service Change Response"},
- {MGT_DSC_ACK, "Dynamic Service Change Acknowledge"},
- {MGT_DSD_REQ, "Dynamic Service Delete Request"},
- {MGT_DSD_RSP, "Dynamic Service Delete Response"},
- {MGT_DCC_REQ, "Dynamic Channel Change Request"},
- {MGT_DCC_RSP, "Dynamic Channel Change Response"},
- {MGT_DCC_ACK, "Dynamic Channel Change Acknowledge"},
- {MGT_DCI_REQ, "Device Class Identification Request"},
- {MGT_DCI_RSP, "Device Class Identification Response"},
- {MGT_UP_DIS, "Upstream Channel Disable"},
- {MGT_INIT_RNG_REQ, "Initial Ranging Request"},
- {MGT_TEST_REQ, "Test Request Message"},
- {MGT_DS_CH_DESC, "Downstream Channel Descriptor"},
- {MGT_MDD, "MAC Domain Descriptor"},
- {MGT_B_INIT_RNG_REQ, "Bonded Initial Ranging Request"},
- {MGT_DBC_REQ, "Dynamic Bonding Change Request"},
- {MGT_DBC_RSP, "Dynamic Bonding Change Response"},
- {MGT_DBC_ACK, "Dynamic Bonding Change Acknowledge"},
- {MGT_DPV_REQ, "DOCSIS Path Verify Request"},
- {MGT_DPV_RSP, "DOCSIS Path Verify Response"},
- {MGT_CM_STATUS, "CM Status Report"},
- {MGT_CM_CTRL_REQ, "CM Control Request"},
- {MGT_CM_CTRL_RSP, "CM Control Response"},
- {MGT_REG_REQ_MP, "Multipart Registration Request"},
- {MGT_REG_RSP_MP, "Multipart Registration Response"},
- {MGT_EM_REQ, "Energy Management Request"},
- {MGT_EM_RSP, "Energy Management Response"},
- {MGT_STATUS_ACK, "Status Report Acknowledge"},
- {MGT_OCD, "OFDM Channel Descriptor"},
- {MGT_DPD, "Downstream Profile Descriptor"},
- {MGT_TYPE51UCD, "Upstream Channel Descriptor Type 51"},
- {0, NULL}
-};
-
-static const value_string on_off_vals[] = {
- {1, "On"},
- {2, "Off"},
- {0, NULL}
-};
-
-static const value_string inhibit_allow_vals[] = {
- {0, "Inhibit Initial Ranging"},
- {1, "Ranging Allowed"},
- {0, NULL},
-};
-
-static const value_string mod_vals[] = {
- {1, "QPSK"},
- {2, "16-QAM"},
- {3, "8-QAM"},
- {4, "32-QAM"},
- {5, "64-QAM"},
- {6, "128-QAM (SCDMA-only)"},
- {7, "Reserved for C-DOCSIS"},
- {0, NULL}
-};
-
-static const value_string iuc_vals[] = {
- {IUC_REQUEST, "Request"},
- {IUC_REQ_DATA, "REQ/Data"},
- {IUC_INIT_MAINT, "Initial Maintenance"},
- {IUC_STATION_MAINT, "Station Maintenance"},
- {IUC_SHORT_DATA_GRANT, "Short Data Grant"},
- {IUC_LONG_DATA_GRANT, "Long Data Grant"},
- {IUC_NULL_IE, "NULL IE"},
- {IUC_DATA_ACK, "Data Ack"},
- {IUC_ADV_PHY_SHORT_DATA_GRANT, "Advanced Phy Short Data Grant"},
- {IUC_ADV_PHY_LONG_DATA_GRANT, "Advanced Phy Long Data Grant"},
- {IUC_ADV_PHY_UGS, "Advanced Phy UGS"},
- {IUC_DATA_PROFILE_IUC12, "Data Profile IUC12"},
- {IUC_DATA_PROFILE_IUC13, "Data Profile IUC13"},
- {IUC_RESERVED14, "Reserved"},
- {IUC_EXPANSION, "Expanded IUC"},
- {0, NULL}
-};
-
-static const true_false_string mer_vals = {"measure RxMER at the CMTS on this probe", "do not measure RxMER at the CMTS on this probe"};
-
-static const true_false_string pw_vals = {"transmit using alternate power setting specified by the Start Subc field.", "transmit using normal power settings"};
-
-static const true_false_string eq_vals = {"equalizer disabled", "equalizer enabled"};
-
-static const true_false_string st_vals = {"stagger", "no stagger"};
-
-static const value_string last_cw_len_vals[] = {
- {1, "Fixed"},
- {2, "Shortened"},
- {0, NULL}
-};
-
-static const value_string ranging_req_vals[] = {
- {0, "No ranging required"},
- {1, "Unicast initial ranging required"},
- {2, "Broadcast initial ranging required"},
- {0, NULL}
-};
-
-static const value_string rng_stat_vals[] = {
- {1, "Continue"},
- {2, "Abort"},
- {3, "Success"},
- {0, NULL}
-};
-
-static void
-two_compl_frac(
- char *buf,
- gint16 value)
-{
- gint16 frac = value;
-
-
- g_snprintf(buf, ITEM_LABEL_LENGTH,
- "%f",
- frac/16384.0);
-}
-
-static const value_string rngrsp_tlv_vals[] = {
- {RNGRSP_TIMING, "Timing Adjust (6.25us/64)"},
- {RNGRSP_PWR_LEVEL_ADJ, "Power Level Adjust (0.25dB units)"},
- {RNGRSP_OFFSET_FREQ_ADJ, "Offset Freq Adjust (Hz)"},
- {RNGRSP_TRANSMIT_EQ_ADJ, "Transmit Equalisation Adjust"},
- {RNGRSP_RANGING_STATUS, "Ranging Status"},
- {RNGRSP_DOWN_FREQ_OVER, "Downstream Frequency Override (Hz)"},
- {RNGRSP_UP_CHID_OVER, "Upstream Channel ID Override"},
- {RNGRSP_DYNAMIC_RANGE_WINDOW_UPPER_EDGE, "Dynamic Range Window Upper Edge"},
- {RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS, "Transmit Equalization Adjust for OFDMA Channels"},
- {RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS, "Transmit Equalization Set for OFDMA Channels"},
- {RNGRSP_COMMANDED_POWER, "Commanded Power"},
- {0, NULL}
-};
-
-
-static const value_string rngrsp_tlv_commanded_power_subtlv_vals[] = {
- {RNGRSP_COMMANDED_POWER_DYNAMIC_RANGE_WINDOW, "Dynamic Range Window"},
- {RNGRSP_COMMANDED_POWER_UCID_AND_POWER_LEVEL_LIST, "List of Upstream Channel IDs and Corresponding Transmit Power Levels"},
- {0, NULL}
-};
-
-static const value_string code_field_vals[] = {
- { 0, "Reserved"},
- { 1, "Reserved"},
- { 2, "Reserved"},
- { 3, "Reserved"},
- { 4, "Auth Request"},
- { 5, "Auth Reply"},
- { 6, "Auth Reject"},
- { 7, "Key Request"},
- { 8, "Key Reply"},
- { 9, "Key Reject"},
- {10, "Auth Invalid"},
- {11, "TEK Invalid"},
- {12, "Authent Info"},
- {13, "Map Request"},
- {14, "Map Reply"},
- {15, "Map Reject"},
- {0, NULL},
-};
-
-static const value_string ds_mod_type_vals[] = {
- {0 , "64 QAM"},
- {1 , "256 QAM"},
- {0, NULL}
-};
-
-static const value_string ds_sym_rate_vals[] = {
- {0 , "5.056941 Msym/sec"},
- {1 , "5.360537 Msym/sec"},
- {2 , "6.952 Msym/sec"},
- {0, NULL}
-};
-static const value_string init_tech_vals[] = {
- {0 , "Reinitialize MAC"},
- {1 , "Broadcast Init RNG on new chanbefore normal op"},
- {2 , "Unicast RNG on new chan before normal op"},
- {3 , "Either Unicast or broadcast RNG on new chan before normal op"},
- {4 , "Use new chan directly without re-init or RNG"},
- {0, NULL}
-};
-
-static const value_string dcc_tlv_vals[] = {
- {DCCREQ_UP_CHAN_ID, "Up Channel ID"},
- {DCCREQ_DS_PARAMS, "Downstream Params Encodings"},
- {DCCREQ_INIT_TECH, "Initialization Technique"},
- {DCCREQ_UCD_SUB, "UCD Substitution"},
- {DCCREQ_SAID_SUB, "SAID Sub"},
- {DCCREQ_SF_SUB, "Service Flow Substitution Encodings"},
- {DCCREQ_CMTS_MAC_ADDR, "CMTS Mac Address"},
- {DCCREQ_KEY_SEQ_NUM, "Auth Key Sequence Number"},
- {DCCREQ_HMAC_DIGEST, "HMAC-DigestNumber"},
- {0, NULL}
-};
-
-static const value_string ds_param_subtlv_vals[] = {
- {DCCREQ_DS_FREQ, "Frequency"},
- {DCCREQ_DS_MOD_TYPE, "Modulation Type"},
- {DCCREQ_DS_SYM_RATE, "Symbol Rate"},
- {DCCREQ_DS_INTLV_DEPTH, "Interleaver Depth"},
- {DCCREQ_DS_CHAN_ID, "Downstream Channel ID"},
- {DCCREQ_DS_SYNC_SUB, "SYNC Substitution"},
- {DCCREQ_DS_OFDM_BLOCK_FREQ, "OFDM Block Frequency"},
- {0, NULL}
-};
-
-static const value_string sf_sub_subtlv_vals[] = {
- {DCCREQ_SF_SFID, "SFID"},
- {DCCREQ_SF_SID, "SID"},
- {DCCREQ_SF_UNSOL_GRANT_TREF, "Unsolicited Grant Time Reference"},
- {0, NULL}
-};
-
-static const value_string dccrsp_tlv_vals[] = {
- {DCCRSP_CM_JUMP_TIME, "CM Jump Time Encodings"},
- {DCCRSP_KEY_SEQ_NUM, "Auth Key Sequence Number"},
- {DCCRSP_HMAC_DIGEST, "HMAC-Digest Number"},
- {0, NULL}
-};
-
-static const value_string cm_jump_subtlv_vals[] = {
- {DCCRSP_CM_JUMP_TIME_LENGTH, "Length of Jump"},
- {DCCRSP_CM_JUMP_TIME_START, "Start Time of Jump"},
- {0, NULL}
-};
-
-static const value_string dccack_tlv_vals[] = {
- {DCCACK_HMAC_DIGEST, "HMAC-DigestNumber"},
- {DCCACK_KEY_SEQ_NUM, "Auth Key Sequence Number"},
- {0, NULL}
-};
-
-static const value_string max_scheduled_codes_vals[] = {
- {1, "Enabled"},
- {2, "Disabled"},
- {0, NULL}
-};
-
-static const value_string dcd_tlv_vals[] = {
- {DCD_DOWN_CLASSIFIER, "DCD_CFR Encodings"},
- {DCD_DSG_RULE, "DCD DSG Rule Encodings"},
- {DCD_DSG_CONFIG, "DCD DSG Config Encodings"},
- {0, NULL}
-};
-
-static const value_string dcd_down_classifier_vals[] = {
- {DCD_CFR_ID, "Downstream Classifier Id"},
- {DCD_CFR_RULE_PRI, "Downstream Classifier Rule Priority"},
- {DCD_CFR_IP_CLASSIFIER, "DCD_CFR_IP Encodings"},
- {0, NULL}
-};
-
-static const value_string dcd_dsg_rule_vals[] = {
- {DCD_RULE_ID, "DSG Rule Id"},
- {DCD_RULE_PRI, "DSG Rule Priority"},
- {DCD_RULE_UCID_RNG, "DSG Rule UCID Range"},
- {DCD_RULE_CLIENT_ID, "DCD Rule ClientID Encodings"},
- {DCD_RULE_TUNL_ADDR, "DSG Rule Tunnel MAC Address"},
- {DCD_RULE_CFR_ID, "DSG Rule Classifier ID"},
- {DCD_RULE_VENDOR_SPEC, "DSG Rule Vendor Specific Parameters"},
- {0, NULL}
-};
-
-static const value_string dcd_clid_vals[] = {
- {DCD_CLID_BCAST_ID, "DSG Rule Client ID Broadcast ID"},
- {DCD_CLID_KNOWN_MAC_ADDR, "DSG Rule Client ID Known MAC Address"},
- {DCD_CLID_CA_SYS_ID, "DSG Rule Client ID CA System ID"},
- {DCD_CLID_APP_ID, "DSG Rule Client ID Application ID"},
- {0, NULL}
-};
-
-static const value_string dcd_cfr_ip_vals[] = {
- {DCD_CFR_IP_SOURCE_ADDR, "Downstream Classifier IP Source Address"},
- {DCD_CFR_IP_SOURCE_MASK, "Downstream Classifier IP Source Mask"},
- {DCD_CFR_IP_DEST_ADDR, "Downstream Classifier IP Destination Address"},
- {DCD_CFR_IP_DEST_MASK, "Downstream Classifier IP Destination Mask"},
- {DCD_CFR_TCPUDP_SRCPORT_START, "Downstream Classifier IP TCP/UDP Source Port Start"},
- {DCD_CFR_TCPUDP_SRCPORT_END, "Downstream Classifier IP TCP/UDP Source Port End"},
- {DCD_CFR_TCPUDP_DSTPORT_START, "Downstream Classifier IP TCP/UDP Destination Port Start"},
- {DCD_CFR_TCPUDP_DSTPORT_END, "Downstream Classifier IP TCP/UDP Destination Port End"},
- {0, NULL}
-};
-
-static const value_string dcd_cfg_vals[] = {
- {DCD_CFG_CHAN_LST, "DSG Configuration Channel"},
- {DCD_CFG_TDSG1, "DSG Initialization Timeout (Tdsg1)"},
- {DCD_CFG_TDSG2, "DSG Initialization Timeout (Tdsg2)"},
- {DCD_CFG_TDSG3, "DSG Initialization Timeout (Tdsg3)"},
- {DCD_CFG_TDSG4, "DSG Initialization Timeout (Tdsg4)"},
- {DCD_CFG_VENDOR_SPEC, "DSG Configuration Vendor Specific Parameters"},
- {0, NULL}
-};
-
-static const value_string J83_annex_vals[] = {
- {J83_ANNEX_A, "J.83 Annex A"},
- {J83_ANNEX_B, "J.83 Annex B"},
- {J83_ANNEX_C, "J.83 Annex C"},
- {0, NULL}
-};
-
-static const value_string modulation_order_vals[] = {
- {QAM64, "64 QAM"},
- {QAM256, "256 QAM"},
- {0, NULL}
-};
-
-static const value_string primary_capable_vals[] = {
- {NOT_PRIMARY_CAPABLE, "Channel is not primary-capable"},
- {PRIMARY_CAPABLE, "channel is primary-capable"},
- {0, NULL}
-};
-
-static const value_string map_ucd_transport_indicator_vals[] = {
- {CANNOT_CARRY_MAP_UCD, "Channel cannot carry MAPs and UCDs for the MAC domain for which the MDD is sent"},
- {CAN_CARRY_MAP_UCD, "Channel can carry MAPs and UCDs for the MAC domain for which the MDD is sent"},
- {0, NULL}
-};
-
-static const value_string tukey_raised_cosine_vals[] = {
- {TUKEY_0TS, "0 microseconds (0 * Ts)"},
- {TUKEY_64TS, "0.3125 microseconds (64 * Ts)"},
- {TUKEY_128TS, "0.625 microseconds (128 * Ts)"},
- {TUKEY_192TS, "0.9375 microseconds (192 * Ts)"},
- {TUKEY_256TS, "1.25 microseconds (256 * Ts)"},
- {0, NULL}
-};
-
-static const value_string cyclic_prefix_vals[] = {
- {CYCLIC_PREFIX_192_TS, "0.9375 microseconds (192 * Ts)"},
- {CYCLIC_PREFIX_256_TS, "1.25 microseconds (256 * Ts)"},
- {CYCLIC_PREFIX_512_TS, "2.5 microseconds (512 * Ts) 3"},
- {CYCLIC_PREFIX_768_TS, "3.75 microseconds (768 * Ts)"},
- {CYCLIC_PREFIX_1024_TS, "5 microseconds (1024 * Ts)"},
- {0, NULL}
-};
-
-static const value_string spacing_vals[] = {
- {SPACING_25KHZ, "25Khz"},
- {SPACING_50KHZ, "50Khz"},
- {0, NULL}
-};
-
-static const value_string bpkmattr_tlv_vals[] = {
- {BPKM_RESERVED, "Reserved"},
- {BPKM_SERIAL_NUM, "Serial Number"},
- {BPKM_MANUFACTURER_ID, "Manufacturer Id"},
- {BPKM_MAC_ADDR, "Mac Address"},
- {BPKM_RSA_PUB_KEY, "RSA Public Key"},
- {BPKM_CM_ID, "CM Identification"},
- {BPKM_DISPLAY_STR, "Display String"},
- {BPKM_AUTH_KEY, "Auth Key"},
- {BPKM_TEK, "Traffic Encryption Key"},
- {BPKM_KEY_LIFETIME, "Key Lifetime"},
- {BPKM_KEY_SEQ_NUM, "Key Sequence Number"},
- {BPKM_HMAC_DIGEST, "HMAC Digest"},
- {BPKM_SAID, "SAID"},
- {BPKM_TEK_PARAM, "TEK Parameters"},
- {BPKM_OBSOLETED, "Obsoleted"},
- {BPKM_CBC_IV, "CBC IV"},
- {BPKM_ERROR_CODE, "Error Code"},
- {BPKM_CA_CERT, "CA Certificate"},
- {BPKM_CM_CERT, "CM Certificate"},
- {BPKM_SEC_CAPABILITIES, "Security Capabilities"},
- {BPKM_CRYPTO_SUITE, "Cryptographic Suite"},
- {BPKM_CRYPTO_SUITE_LIST, "Cryptographic Suite List"},
- {BPKM_BPI_VERSION, "BPI Version"},
- {BPKM_SA_DESCRIPTOR, "SA Descriptor"},
- {BPKM_SA_TYPE, "SA Type"},
- {BPKM_SA_QUERY, "SA Query"},
- {BPKM_SA_QUERY_TYPE, "SA Query Type"},
- {BPKM_IP_ADDRESS, "IP Address"},
- {BPKM_DNLD_PARAMS, "Download Parameters"},
- {BPKM_VENDOR_DEFINED, "Vendor Defined"},
- {0, NULL}
-};
-
-static const value_string error_code_vals[] = {
- {0, "No Information"},
- {1, "Unauthorized CM"},
- {2, "Unauthorized SAID"},
- {3, "Unsolicited"},
- {4, "Invalid Key Sequence Number"},
- {5, "Message (Key Request) authentication failure"},
- {6, "Permanent Authorization Failure"},
- {7, "Not authorized for requested downstream traffic flow"},
- {8, "Downstream traffic flow not mapped to SAID"},
- {9, "Time of day not acquired"},
- {10, "EAE Disabled"},
- {0, NULL},
-};
-
-static const value_string crypto_suite_attr_vals[] = {
- {0x0100, "CBC-Mode 56-bit DES, no data authentication"},
- {0x0200, "CBC-Mode 40-bit DES, no data authentication"},
- {0x0300, "CBC-Mode 128-bit AES, no data authentication"},
- {0, NULL},
-};
-
-static const value_string bpi_ver_vals[] = {
- {0, "Reserved"},
- {1, "BPI+"},
- {0, NULL},
-};
-
-static const value_string mdd_tlv_vals[] = {
- {DOWNSTREAM_ACTIVE_CHANNEL_LIST, "Downstream Active Channel List"},
- {MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP, "Mac Domain Downstream Service Group"},
- {DOWNSTREAM_AMBIGUITY_RESOLUTION_FREQUENCY_LIST, "Downstream Ambiguity Resolution Frequency List "},
- {RECEIVE_CHANNEL_PROFILE_REPORTING_CONTROL , "Receive Channel Profile Reporting Control"},
- {IP_INITIALIZATION_PARAMETERS , "IP Initialization Parameters"},
- {EARLY_AUTHENTICATION_AND_ENCRYPTION , "Early Authentication and Encryption"},
- {UPSTREAM_ACTIVE_CHANNEL_LIST , "Upstream Active Channel List"},
- {UPSTREAM_AMBIGUITY_RESOLUTION_CHANNEL_LIST , "Upstream Ambiguity Resolution Channel List"},
- {UPSTREAM_FREQUENCY_RANGE , "Upstream Frequency Range"},
- {SYMBOL_CLOCK_LOCKING_INDICATOR , "Symbol Clock Locking Indicator"},
- {CM_STATUS_EVENT_CONTROL , "CM-STATUS Event Control"},
- {UPSTREAM_TRANSMIT_POWER_REPORTING , "Upstream Transmit Power Reporting"},
- {DSG_DA_TO_DSID_ASSOCIATION_ENTRY , "DSG DA-to-DSID Association Entry"},
- {CM_STATUS_EVENT_ENABLE_NON_CHANNEL_SPECIFIC_EVENTS , "CM-STATUS Event Enable for Non-Channel-Specific-Events"},
- {EXTENDED_UPSTREAM_TRANSMIT_POWER_SUPPORT , "Extended Upstream Transmit Power Support"},
- {CMTS_DOCSIS_VERSION , "CMTS DOCSIS Version"},
- {CM_PERIODIC_MAINTENANCE_TIMEOUT_INDICATOR , "CM Periodic Maintenance Timeout Indicator"},
- {DLS_BROADCAST_AND_MULTICAST_DELIVERY_METHOD , "DLS Broadcast and Multicast Delivery Method"},
- {CM_STATUS_EVENT_ENABLE_FOR_DOCSIS_3_1_EVENTS , "CM-STATUS Event Enable for DOCSIS 3.1 Specific Events"},
- {0, NULL}
-};
-
-
-static const value_string rpc_center_frequency_spacing_vals[] = {
- {ASSUME_6MHZ_CENTER_FREQUENCY_SPACING , "CM MUST report only Receive Channel Profiles assuming 6 MHz center frequency spacing"},
- {ASSUME_8MHZ_CENTER_FREQUENCY_SPACING , "CM MUST report only Receive Channel Profiles assuming 8 MHz center frequency spacing"},
- {0, NULL}
-};
-
-static const value_string verbose_rpc_reporting_vals[] = {
- {RCP_NO_VERBOSE_REPORTING , "CM MUST NOT provide verbose reporting of all its Receive Channel Profile(s) (both standard profiles and manufacturers profiles)."},
- {RCP_VERBOSE_REPORTING , "CM MUST provide verbose reporting of Receive Channel Profile(s) (both standard profiles and manufacturers profiles)."},
- {0, NULL}
-};
-
-static const value_string ip_provisioning_mode_vals[] = {
- {IPv4_ONLY , "IPv4 Only"},
- {IPv6_ONLY , "IPv6 Only"},
- {IP_ALTERNATE, "Alternate"},
- {DUAL_STACK , "Dual Stack"},
- {0, NULL}
-};
-
-static const value_string eae_vals[] = {
- {EAE_DISABLED , "early authentication and encryption disabled"},
- {EAE_ENABLED , "early authentication and encryption enabled"},
- {0, NULL}
-};
-
-static const value_string upstream_frequency_range_vals[] = {
- {STANDARD_UPSTREAM_FREQUENCY_RANGE, "Standard Upstream Frequency Range"},
- {EXTENDED_UPSTREAM_FREQUENCY_RANGE, "Extended Upstream Frequency Range"},
- {0, NULL}
-};
-
-static const value_string symbol_clock_locking_indicator_vals[] = {
- {NOT_LOCKED_TO_MASTER_CLOCK, "Symbol Clock is not locked to Master Clock"},
- {LOCKED_TO_MASTER_CLOCK, "Symbol Clock is locked to Master Clock"},
- {0, NULL}
-};
-
-static const value_string symbol_cm_status_event_vals[] = {
- {SECONDARY_CHANNEL_MDD_TIMEOUT, "Secondary Channel MDD timeout"},
- {QAM_FEC_LOCK_FAILURE, "Qam FEC Lock Failure"},
- {SEQUENCE_OUT_OF_RANGE, "Sequence out of Range"},
- {MDD_RECOVERY, "MDD Recovery"},
- {QAM_FEC_LOCK_RECOVERY, "Qam FEC Lock Recovery"},
- {T4_TIMEOUT, "T4 Timeout"},
- {T3_RETRIES_EXCEEDED, "T3 Retries Exceeded"},
- {SUCCESFUL_RANGING_AFTER_T3_RETRIES_EXCEEDED, "Successful ranging after T3 Retries Exceeded"},
- {CM_OPERATING_ON_BATTERY_BACKUP, "CM Operating on Battery Backup"},
- {CM_RETURNED_TO_AC_POWER, "CM Returned to AC Power"},
- {0, NULL}
-};
-
-static const value_string upstream_transmit_power_reporting_vals[] = {
- {CM_DOESNT_REPORT_TRANSMIT_POWER, "CM does not report transmit power in RNG-REQ, INIT-RNG-REQ, and B-INIT-RNG-REQ messages"},
- {CM_REPORTS_TRANSMIT_POWER, "CM reports transmit power in RNG-REQ, INIT-RNG-REQ, and B-INIT-RNG-REQ messages"},
- {0, NULL}
-};
-
-static const value_string cm_periodic_maintenance_timeout_indicator_vals[] = {
- {0, "use Unicast Ranging opportunity"},
- {1, "use Probe opportunity"},
- {2, "use Unicast Ranging or Probe opportunity"},
- {0, NULL}
-};
-
-static const value_string dls_broadcast_and_multicast_delivery_method_vals[] = {
- {1, "delayed selected multicast method"},
- {2, "selectively replicated multicast method"},
- {0, NULL}
-};
-
-
-static const value_string mdd_ds_active_channel_list_vals[] = {
- {DOWNSTREAM_ACTIVE_CHANNEL_LIST_CHANNEL_ID, "Channel ID"},
- {DOWNSTREAM_ACTIVE_CHANNEL_LIST_FREQUENCY, "Frequency"},
- {DOWNSTREAM_ACTIVE_CHANNEL_LIST_MODULATION_ORDER_ANNEX, "Annex/Modulation Order"},
- {DOWNSTREAM_ACTIVE_CHANNEL_LIST_PRIMARY_CAPABLE, "Primary Capable"},
- {DOWNSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK, "CM-STATUS Event Enable Bitmask"},
- {DOWNSTREAM_ACTIVE_CHANNEL_LIST_MAP_UCD_TRANSPORT_INDICATOR, "MAP and UCD transport indicator"},
- {DOWNSTREAM_ACTIVE_CHANNEL_LIST_OFDM_PLC_PARAMETERS, "OFDM PLC Parameters"},
- {0, NULL}
-};
-
-static const value_string mdd_ds_service_group_vals[] = {
- {MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_MD_DS_SG_IDENTIFIER, "MD-DS-SG Identifier"},
- {MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_CHANNEL_IDS, "Channel Ids"},
- {0, NULL}
-};
-
-static const value_string mdd_channel_profile_reporting_control_vals[] = {
- {RCP_CENTER_FREQUENCY_SPACING, "RPC Center Frequency Spacing"},
- {VERBOSE_RCP_REPORTING, "Verbose RCP reporting"},
- {0, NULL}
-};
-
-static const value_string mdd_ip_init_param_vals[] = {
- {IP_PROVISIONING_MODE, "IP Provisioning Mode"},
- {PRE_REGISTRATION_DSID, "Pre-registration DSID"},
- {0, NULL}
-};
-
-static const value_string mdd_up_active_channel_list_vals[] = {
- {UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_ID, "Upstream Channel Id"},
- {UPSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK, "CM-STATUS Event Enable Bitmask"},
- {0, NULL}
-};
-
-static const value_string mdd_cm_status_event_control_vals[] = {
- {EVENT_TYPE_CODE, "Event Type"},
- {MAXIMUM_EVENT_HOLDOFF_TIMER, "Maximum Event Holdoff Timer"},
- {MAXIMUM_NUMBER_OF_REPORTS_PER_EVENT, "Maximum Number of Reports per Event"},
- {0, NULL}
-};
-
-static const value_string mdd_cm_dsg_da_to_dsid_vals[] = {
- {DSG_DA_TO_DSID_ASSOCIATION_DA, "Destination Address"},
- {DSG_DA_TO_DSID_ASSOCIATION_DSID, "DSID"},
- {0, NULL}
-};
-
-static const value_string tlv20_vals[] = {
- {0, "Selectable active codes mode 1 enabled and code hopping disabled"},
- {1, "Selectable active codes mode 1 enabled and code hopping mode 1 enabled"},
- {2, "Selectable active codes mode 2 enabled and code hopping mode 2 enabled"},
- {3, "Selectable active codes mode 2 enabled and code hopping disabled"},
- {0, NULL}
-};
-
-static const value_string cmstatus_tlv_vals[] = {
- {EVENT_DS_CH_ID, "Downstream Channel ID"},
- {EVENT_US_CH_ID, "Upstream Channel ID"},
- {EVENT_DSID, "DSID"},
- {EVENT_DESCR, "Description"},
- {0, NULL}
-};
-
-static const value_string cmctrlreq_tlv_vals[] = {
- {CM_CTRL_MUTE, "Upstream Channel RF Mute"},
- {CM_CTRL_MUTE_TIMEOUT, "RF Mute Timeout Interval"},
- {CM_CTRL_REINIT, "CM Reinitialize"},
- {CM_CTRL_DISABLE_FWD, "Disable Forwarding"},
- {CM_CTRL_DS_EVENT, "Override Downstream Events"},
- {CM_CTRL_US_EVENT, "Override Upstream Events"},
- {CM_CTRL_EVENT, "Override Non-Channel-Specific Events"},
- {0, NULL}
-};
-
-static const value_string cmctrlreq_us_tlv_vals[] = {
- {US_EVENT_CH_ID, "Upstream Channel ID"},
- {US_EVENT_MASK, "Upstream Status Event Enable Bitmask"},
- {0, NULL}
-};
-
-static const value_string cmctrlreq_ds_tlv_vals[] = {
- {DS_EVENT_CH_ID, "Downstream Channel ID"},
- {DS_EVENT_MASK, "Downstream Status Event Enable Bitmask"},
- {0, NULL}
-};
-
-
-static const value_string docsis_ocd_subc_assign_type_str[] = {
- {0, "range, continuous"},
- {1, "range, skip by 1"},
- {2, "list"},
- {3, "reserved"},
- {0, NULL}
-};
-
-static const value_string docsis_ocd_subc_assign_value_str[] = {
- {0, "specific value"},
- {1, "default value"},
- {0, NULL}
-};
-
-static const value_string docsis_ocd_subc_assign_subc_type_str[] = {
- {1, "continuous pilot"},
- {16, "excluded subcarriers"},
- {20, "PLC, 16-QAM"},
- {0, NULL}
-};
-
-static const value_string docsis_ocd_four_trans_size[] = {
- {0, "4096 subcarriers at 50 kHz spacing"},
- {1, "8192 subcarriers at 25 kHz spacing"},
- {0, NULL}
-};
-
-static const value_string docsis_ocd_cyc_prefix[] = {
- {0, "0.9375 "UTF8_MICRO_SIGN"s with 192 samples"},
- {1, "1.25 "UTF8_MICRO_SIGN"s with 256 samples"},
- {2, "2.5 "UTF8_MICRO_SIGN"s with 512 samples"},
- {3, "3.75 "UTF8_MICRO_SIGN"s with 768 samples"},
- {4, "5.0 "UTF8_MICRO_SIGN"s with 1024 samples"},
- {0, NULL}
-};
-
-static const value_string docsis_ocd_roll_off[] = {
- {0, "0 "UTF8_MICRO_SIGN"s with 0 samples"},
- {1, "0.3125 "UTF8_MICRO_SIGN"s with 64 samples"},
- {2, "0.625 "UTF8_MICRO_SIGN"s with 128 samples"},
- {3, "0.9375 "UTF8_MICRO_SIGN"s with 192 samples"},
- {4, "1.25 "UTF8_MICRO_SIGN"s with 256 samples"},
- {0, NULL}
-};
-
-static const value_string docsis_ocd_prim_cap_ind_str[] = {
- {0, "channel is not primary capable"},
- {1, "channel is primary capable"},
- {0, NULL}
-};
-
-static const value_string ocd_tlv_vals[] = {
- {DISCRETE_FOURIER_TRANSFORM_SIZE, "Discrete Fourier Transform Size"},
- {CYCLIC_PREFIX, "Cylic Prefix"},
- {ROLL_OFF, "Roll Off"},
- {OFDM_SPECTRUM_LOCATION, "OFDM Spectrum Location"},
- {TIME_INTERLEAVING_DEPTH, "Time Interleaving Depth"},
- {SUBCARRIER_ASSIGNMENT_RANGE_LIST, "Subcarrier Assignment Range/List"},
- {PRIMARY_CAPABILITY_INDICATOR, "Primary Capable Indicator"},
- {0, NULL}
-};
-
-static const value_string docsis_dpd_subc_assign_type_str[] = {
- {0, "range, continuous"},
- {1, "range, skip by 1"},
- {2, "list"},
- {3, "reserved"},
- {0, NULL}
-};
-
-static const value_string docsis_dpd_subc_assign_value_str[] = {
- {0, "specific value"},
- {1, "default value"},
- {0, NULL}
-};
-
-static const value_string docsis_dpd_subc_assign_modulation_str[] = {
- {0, "zero-bit loaded"},
- {1, "reserved"},
- {2, "QPSK (for NCP profile only)"},
- {3, "reserved"},
- {4, "16-QAM"},
- {5, "reserved"},
- {6, "64-QAM"},
- {7, "128-QAM"},
- {8, "256-QAM"},
- {9, "512-QAM"},
- {10, "1024-QAM"},
- {11, "2048-QAM"},
- {12, "4096-QAM"},
- {13, "8192-QAM"},
- {14, "16384-QAM"},
- {15, "reserved"},
- {0, NULL}
-};
-
-static const value_string docsis_dpd_tlv_subc_assign_vector_oddness_str[] = {
- {0, "N is even"},
- {1, "N is odd"},
- {0, NULL}
-};
-
-static const value_string docsis_dpd_tlv_subc_assign_vector_modulation_str[] = {
- {0, "zero-bit loaded"},
- {1, "continuous pilot"},
- {2, "QPSK (for NCP profile only)"},
- {3, "reserved"},
- {4, "16-QAM"},
- {5, "reserved"},
- {6, "64-QAM"},
- {7, "128-QAM"},
- {8, "256-QAM"},
- {9, "512-QAM"},
- {10, "1024-QAM"},
- {11, "2048-QAM"},
- {12, "4096-QAM"},
- {13, "8192-QAM"},
- {14, "16384-QAM"},
- {15, "reserved"},
- {0, NULL}
-};
-
-static const value_string dpd_tlv_vals[] = {
- {SUBCARRIER_ASSIGNMENT_RANGE_LIST, "Subcarrier Assignment Range/List"},
- {SUBCARRIER_ASSIGNMENT_VECTOR, "Subcarrier Assignment Vector"},
- {0, NULL}
-};
-
-static const value_string ofdma_cyclic_prefix_size_vals[] = {
- {1, "96 samples"},
- {2, "128 samples"},
- {3, "160 samples"},
- {4, "192 samples"},
- {5, "224 samples"},
- {6, "256 samples"},
- {7, "288 samples"},
- {8, "320 samples"},
- {9, "384 samples"},
- {10, "512 samples"},
- {11, "640 samples"},
- {0, NULL}
-};
-
-static const value_string ofdma_rolloff_period_size_vals[] = {
- {1, "0 samples"},
- {2, "32 samples"},
- {3, "64 samples"},
- {4, "96 samples"},
- {5, "128 samples"},
- {6, "160 samples"},
- {7, "192 samples"},
- {8, "224 samples"},
- {0, NULL}
-};
-
-static const value_string subc_spacing_vals[] = {
- {1, "25 kHz (corresponds to 4096 subcarriers and 16 subcarriers per minislot)"},
- {2, "50 kHz (corresponds to 2048 subcarriers and 8 subcarriers per minislot)"},
- {0, NULL}
-};
-
-static const value_string ofdma_prof_mod_order[] = {
- {0, "no bit-loading"},
- {1, "BPSK"},
- {2, "QPSK"},
- {3, "8-QAM"},
- {4, "16-QAM"},
- {5, "32-QAM"},
- {6, "64-QAM"},
- {7, "128-QAM"},
- {8, "256-QAM"},
- {9, "512-QAM"},
- {10, "1024-QAM"},
- {11, "2048-QAM"},
- {12, "4096-QAM"},
- {0, NULL}
-};
-
-/* Windows does not allow data copy between dlls */
-static const true_false_string mdd_tfs_on_off = { "On", "Off" };
-static const true_false_string mdd_tfs_en_dis = { "Enabled", "Disabled" };
-
-static const true_false_string tfs_ucd_change_ind_vals = {"Changes", "No changes"};
-
-static const true_false_string tfs_allow_inhibit = { "Inhibit Initial Ranging", "Ranging Allowed" };
-const true_false_string type35ucd_tfs_present_not_present = { "UCD35 is present for this UCID",
- "UCD35 is not present for this UCID" };
-
-static const value_string unique_unlimited[] = {
- { 0, "Unlimited" },
- {0, NULL}
-};
-
-static const unit_name_string local_units_hz = { "Hz", NULL };
-
-static void
-ofdma_ir_pow_ctrl_start_pow(char *buf, guint32 value)
-{
- g_snprintf(buf, ITEM_LABEL_LENGTH, "%f dBmV/1.6MHz", value/4.0);
-}
-
-static void
-ofdma_ir_pow_ctrl_step_size(char *buf, guint32 value)
-{
- g_snprintf(buf, ITEM_LABEL_LENGTH, "%f dB", value/4.0);
-}
-
-static void
-subc_assign_range(char *buf, guint32 value)
-{
- g_snprintf(buf, ITEM_LABEL_LENGTH, "%u - %u", value >> 16, value &0xFFFF);
-}
-
-static int
-dissect_sync (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *sync_tree;
-
- col_set_str(pinfo->cinfo, COL_INFO, "Sync Message");
-
- it = proto_tree_add_item(tree, proto_docsis_sync, tvb, 0, -1, ENC_NA);
- sync_tree = proto_item_add_subtree (it, ett_docsis_sync);
-
- proto_tree_add_item (sync_tree, hf_docsis_sync_cmts_timestamp, tvb, 0, 4, ENC_BIG_ENDIAN);
-
- return tvb_captured_length(tvb);
-}
-
-static void
-dissect_ucd_burst_descr(tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, proto_item * item, int pos, guint16 len)
-{
- int tlvpos, endtlvpos;
- guint8 tlvtype;
- guint32 i, tlvlen;
- proto_tree *burst_tree;
- proto_item *burst_item, *burst_len_item;
- guint iuc;
-
- tlvpos = pos;
- endtlvpos = tlvpos + len;
- proto_tree_add_item_ret_uint (tree, hf_docsis_ucd_iuc, tvb, tlvpos++, 1, ENC_BIG_ENDIAN, &iuc);
- proto_item_append_text(item, ": IUC %d (%s)", iuc, val_to_str(iuc,iuc_vals, "Unknown IUC"));
- while (tlvpos < endtlvpos)
- {
- tlvtype = tvb_get_guint8 (tvb, tlvpos);
- burst_tree = proto_tree_add_subtree (tree, tvb, tlvpos, -1,
- ett_docsis_burst_tlv, &burst_item,
- val_to_str(tlvtype, burst_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (burst_tree, hf_docsis_ucd_burst_type, tvb, tlvpos++, 1, tlvtype);
- burst_len_item = proto_tree_add_item_ret_uint (burst_tree, hf_docsis_ucd_burst_length, tvb, tlvpos++, 1, ENC_NA, &tlvlen);
- proto_item_set_len(burst_item, tlvlen + 2);
- switch (tlvtype)
- {
- case UCD_MODULATION:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_mod_type, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_DIFF_ENCODING:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_diff_encoding, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_PREAMBLE_LEN:
- if (tlvlen == 2)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_preamble_len, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_PREAMBLE_VAL_OFF:
- if (tlvlen == 2)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_preamble_val_off, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_FEC:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_fec, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_FEC_CODEWORD:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_fec_codeword, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_SCRAMBLER_SEED:
- if (tlvlen == 2)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_scrambler_seed, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_MAX_BURST:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_max_burst, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_GUARD_TIME:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_guard_time, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_LAST_CW_LEN:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_last_cw_len, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_SCRAMBLER_ONOFF:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_burst_scrambler_onoff, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_RS_INT_DEPTH:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_rs_int_depth, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_RS_INT_BLOCK:
- if (tlvlen == 2)
- {
- proto_tree_add_item (burst_tree, hf_docsis_rs_int_block, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_PREAMBLE_TYPE:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_preamble_type, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_SCMDA_SCRAMBLER_ONOFF:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_ucd_scdma_scrambler_onoff, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_SCDMA_CODES_PER_SUBFRAME:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_ucd_scdma_codes_per_subframe, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_SCDMA_FRAMER_INT_STEP_SIZE:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_ucd_scdma_framer_int_step_size, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_TCM_ENABLED:
- if (tlvlen == 1)
- {
- proto_tree_add_item (burst_tree, hf_docsis_ucd_tcm_enabled, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_SUBC_INIT_RANG:
- if (tlvlen == 2)
- {
- proto_tree_add_item (burst_tree, hf_docsis_subc_init_rang, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_SUBC_FINE_RANG:
- if (tlvlen == 2)
- {
- proto_tree_add_item (burst_tree, hf_docsis_subc_fine_rang, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case UCD_OFDMA_PROFILE:
- if ((tlvlen % 2) == 0)
- {
- for(i =0; i < tlvlen; i+=2) {
- proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_mod_order, tvb, tlvpos + i, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_pilot_pattern, tvb, tlvpos + i, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_num_add_minislots, tvb, tlvpos + i + 1, 1, ENC_BIG_ENDIAN);
- }
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u (even length expected)", tlvlen);
- }
- break;
- case UCD_OFDMA_IR_POWER_CONTROL:
- if (tlvlen == 2)
- {
- proto_tree_add_item (burst_tree, hf_docsis_ofdma_ir_pow_ctrl_start_pow, tvb, tlvpos, tlvlen, ENC_BIG_ENDIAN);
- proto_tree_add_item (burst_tree, hf_docsis_ofdma_ir_pow_ctrl_step_size, tvb, tlvpos + 1, tlvlen, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, burst_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
-
- } /* switch(tlvtype) */
-
- tlvpos += tlvlen;
- } /* while (tlvpos < endtlvpos) */
-
-}
-
-static int
-dissect_any_ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, int proto_id, int type_number)
-{
- int pos;
- guint32 i, upchid, length;
- guint8 type, symrate;
- proto_tree *ucd_tree, *tlv_tree;
- proto_item *ucd_item, *tlv_item, *tlv_len_item;
-
- ucd_item = proto_tree_add_item(tree, proto_id, tvb, 0, -1, ENC_NA);
- ucd_tree = proto_item_add_subtree (ucd_item, ett_docsis_ucd);
- proto_tree_add_item_ret_uint (ucd_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &upchid);
- proto_tree_add_item (ucd_tree, hf_docsis_ucd_config_ch_cnt, tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (ucd_tree, hf_docsis_ucd_mini_slot_size, tvb, 2, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (ucd_tree, hf_docsis_mgt_down_chid, tvb, 3, 1, ENC_BIG_ENDIAN);
-
- /* if the upstream Channel ID is 0 then this is for Telephony Return) */
- if (upchid > 0)
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Type %d UCD Message: Channel ID = %u (U%u)", type_number, upchid,
- upchid - 1);
- else
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Type %d UCD Message: Channel ID = %u (Telephony Return)",
- type_number, upchid);
-
- pos = 4;
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- type = tvb_get_guint8 (tvb, pos);
- tlv_tree = proto_tree_add_subtree(ucd_tree, tvb, pos, -1,
- ett_docsis_tlv, &tlv_item,
- val_to_str(type, channel_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (tlv_tree, hf_docsis_ucd_type, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_ucd_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(tlv_item, length + 2);
-
- switch (type)
- {
- case UCD_SYMBOL_RATE:
- if (length == 1)
- {
- symrate = tvb_get_guint8 (tvb, pos);
- proto_tree_add_uint (tlv_tree, hf_docsis_ucd_symbol_rate, tvb, pos, length, symrate * 160);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_FREQUENCY:
- if (length == 4)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_frequency, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_PREAMBLE:
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_preamble_pat, tvb, pos, length, ENC_NA);
- break;
- case UCD_BURST_DESCR:
- case UCD_BURST_DESCR5: /* DOCSIS 2.0 Upstream Channel Descriptor */
- case UCD_BURST_DESCR23:
- dissect_ucd_burst_descr(tvb, pinfo, tlv_tree, tlv_item, pos, length);
- break;
- case UCD_EXT_PREAMBLE:
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_ext_preamble_pat, tvb, pos, length, ENC_NA);
- break;
- case UCD_SCDMA_MODE_ENABLED:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_mode_enabled, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SCDMA_SPREADING_INTERVAL:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_spreading_interval, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SCDMA_CODES_PER_MINI_SLOT:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_codes_per_mini_slot, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SCDMA_ACTIVE_CODES:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_active_codes, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SCDMA_CODE_HOPPING_SEED:
- if (length == 2)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_code_hopping_seed, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SCDMA_US_RATIO_NUM:
- if (length == 2)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_us_ratio_num, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SCDMA_US_RATIO_DENOM:
- if (length == 2)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_us_ratio_denom, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SCDMA_TIMESTAMP_SNAPSHOT:
- if (length == 9)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_timestamp_snapshot, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_MAINTAIN_POWER_SPECTRAL_DENSITY:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_maintain_power_spectral_density, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_RANGING_REQUIRED:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_ranging_required, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_MAX_SCHEDULED_CODES:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_max_scheduled_codes, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_RANGING_HOLD_OFF_PRIORITY_FIELD:
- if (length == 4)
- {
- static const int * ucd_rnghoff[] = {
- &hf_docsis_ucd_rnghoff_cm,
- &hf_docsis_ucd_rnghoff_erouter,
- &hf_docsis_ucd_rnghoff_emta,
- &hf_docsis_ucd_rnghoff_estb,
- &hf_docsis_ucd_rnghoff_rsvd,
- &hf_docsis_ucd_rnghoff_id_ext,
- NULL
- };
-
- proto_tree_add_bitmask_list(tlv_tree, tvb, pos, length, ucd_rnghoff, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_RANGING_CHANNEL_CLASS_ID:
- if (length == 4)
- {
- static const int * ucd_chan_class_id[] = {
- &hf_docsis_ucd_chan_class_id_cm,
- &hf_docsis_ucd_chan_class_id_erouter,
- &hf_docsis_ucd_chan_class_id_emta,
- &hf_docsis_ucd_chan_class_id_estb,
- &hf_docsis_ucd_chan_class_id_rsvd,
- &hf_docsis_ucd_chan_class_id_id_ext,
- NULL
- };
-
- proto_tree_add_bitmask_list(tlv_tree, tvb, pos, length, ucd_chan_class_id, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_active_code_hopping, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES:
- if (length == 16)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_scdma_selection_active_codes, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_HIGHER_UCD_FOR_SAME_UCID:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_higher_ucd_for_same_ucid, tvb, pos, length, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_higher_ucd_for_same_ucid_resv, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_CHANGE_IND_BITMASK:
- if (length == 2)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_subc_excl_band, tvb, pos + 1, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_unused_subc, tvb, pos + 1, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_other_subc, tvb, pos + 1, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc5, tvb, pos + 1, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc6, tvb, pos + 1, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc9, tvb, pos + 1, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc10, tvb, pos + 1, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc11, tvb, pos + 1, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc12, tvb, pos, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc13, tvb, pos, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc3_or_4, tvb, pos, 1, ENC_NA);
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_change_ind_bitmask_reserved, tvb, pos, 1, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_OFDMA_TIMESTAMP_SNAPSHOT:
- if (length == 9)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_timestamp_snapshot, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_OFDMA_CYCLIC_PREFIX_SIZE:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_cyclic_prefix_size, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_OFDMA_ROLLOFF_PERIOD_SIZE:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_ofdma_rolloff_period_size, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SUBCARRIER_SPACING:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_subc_spacing, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_CENTER_FREQ_SUBC_0:
- if (length == 4)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_cent_freq_subc0, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SUBC_EXCL_BAND:
- if ((length % 4) == 0)
- {
- for(i = 0; i < length; i+=4) {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_subcarrier_range, tvb, pos+i, 4, ENC_NA);
- }
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_UNUSED_SUBC_SPEC:
- if ((length % 4) == 0)
- {
- for(i = 0; i < length; i+=4) {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_subcarrier_range, tvb, pos+i, 4, ENC_NA);
- }
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_SYMB_IN_OFDMA_FRAME:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_symb_ofdma_frame, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case UCD_RAND_SEED:
- if (length == 3)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_ucd_rand_seed, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- } /* switch(type) */
- pos += length;
- } /* tvb_reported_length_remaining(tvb, pos) > 0 */
-
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_ucd, MGT_UCD);
-}
-
-static int
-dissect_any_map (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, guint8 version, void* data _U_)
-{
- guint32 i, numie, upchid, ucd_count, cat = 0;
- int pos;
- proto_item *it;
- proto_tree *map_tree;
- static const int * ies[] = {
- &hf_docsis_map_sid,
- &hf_docsis_map_iuc,
- &hf_docsis_map_offset,
- NULL
- };
-
- static const int * probe_ies[] = {
- &hf_docsis_map_sid,
- &hf_docsis_map_mer,
- &hf_docsis_map_pw,
- &hf_docsis_map_eq,
- &hf_docsis_map_st,
- &hf_docsis_map_probe_frame,
- &hf_docsis_map_symbol_in_frame,
- &hf_docsis_map_start_subc,
- &hf_docsis_map_subc_skip,
- NULL
- };
-
- switch (version) {
- case 1:
- it = proto_tree_add_item(tree, proto_docsis_map_v1, tvb, 0, -1, ENC_NA);
- break;
- case 5:
- it = proto_tree_add_item(tree, proto_docsis_map_v5, tvb, 0, -1, ENC_NA);
- break;
- default:
- it = proto_tree_add_item(tree, proto_docsis_map_v1, tvb, 0, -1, ENC_NA);
- expert_add_info_format(pinfo, it, &ei_docsis_mgmt_version_unknown, "Unknown MAP Mac Management version: %u", version);
- return tvb_captured_length(tvb);
- }
-
- map_tree = proto_item_add_subtree (it, ett_docsis_map);
-
- proto_tree_add_item_ret_uint (map_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &upchid);
- proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_ucd_count, tvb, 1, 1, ENC_BIG_ENDIAN, &ucd_count);
- switch (version) {
- case 1:
- proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_numie, tvb, 2, 1, ENC_BIG_ENDIAN, &numie);
- proto_tree_add_item (map_tree, hf_docsis_map_rsvd, tvb, 3, 1, ENC_BIG_ENDIAN);
- break;
- case 5:
- proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_numie_v5, tvb, 2, 2, ENC_BIG_ENDIAN, &numie);
- proto_tree_add_item (map_tree, hf_docsis_map_rsvd_v5, tvb, 3, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_cat, tvb, 3, 1, ENC_BIG_ENDIAN, &cat);
- break;
- default:
- it = proto_tree_add_item(tree, proto_docsis_map_v1, tvb, 0, -1, ENC_NA);
- expert_add_info_format(pinfo, it, &ei_docsis_mgmt_version_unknown, "Unknown MAP Mac Management version: %u", version);
- return tvb_captured_length(tvb);
- }
-
- if (upchid > 0)
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Map Message: Version: %d, Channel ID = %u (U%u), UCD Count = %u, # IE's = %u",
- version, upchid, upchid - 1, ucd_count, numie);
- else
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Map Message: Version: %d, Channel ID = %u (Telephony Return), UCD Count = %u, # IE's = %u",
- version, upchid, ucd_count, numie);
-
- proto_tree_add_item (map_tree, hf_docsis_map_alloc_start, tvb, 4, 4, ENC_BIG_ENDIAN);
- if (cat == 0) {
- proto_tree_add_item (map_tree, hf_docsis_map_ack_time, tvb, 8, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item (map_tree, hf_docsis_map_rng_start, tvb, 12, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (map_tree, hf_docsis_map_rng_end, tvb, 13, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (map_tree, hf_docsis_map_data_start, tvb, 14, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (map_tree, hf_docsis_map_data_end, tvb, 15, 1, ENC_BIG_ENDIAN);
-
- pos = 16;
- for (i = 0; i < numie; i++)
- {
- 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);
- pos = pos + 4;
- }
- }
- if (cat == 1) {
- pos = 8;
- for (i = 0; i < numie; i++)
- {
- 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);
- pos = pos + 4;
- }
- }
-
- return tvb_captured_length(tvb);
-}
-
-
-static int dissect_map_v1 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_) {
- return dissect_any_map(tvb, pinfo, tree, MAP_v1, data);
-}
-
-static int dissect_map_v5 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_) {
- return dissect_any_map(tvb, pinfo, tree, MAP_v5, data);
-}
-
-static int
-dissect_rngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *rngreq_tree;
- guint32 sid;
-
- it = proto_tree_add_item(tree, proto_docsis_rngreq, tvb, 0, -1, ENC_NA);
- rngreq_tree = proto_item_add_subtree (it, ett_docsis_rngreq);
- proto_tree_add_item_ret_uint (rngreq_tree, hf_docsis_rngreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
-
- if (sid > 0)
- col_add_fstr (pinfo->cinfo, COL_INFO, "Ranging Request: SID = %u",
- sid);
- else
- col_set_str(pinfo->cinfo, COL_INFO, "Initial Ranging Request SID = 0");
-
- proto_tree_add_item (rngreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (rngreq_tree, hf_docsis_rngreq_pend_compl, tvb, 3, 1, ENC_BIG_ENDIAN);
-
- return tvb_captured_length(tvb);
-}
-
-static void
-dissect_rngrsp_transmit_equalization_encodings(tvbuff_t * tvb, proto_tree * tree, guint8 start, guint16 len)
-{
- guint16 i;
- proto_item *it;
- proto_tree *transmit_equalization_encodings_tree, *coef_tree;
- guint lowest_subc;
-
- it = proto_tree_add_item(tree, hf_docsis_rngrsp_trans_eq_data, tvb, start-2, len+2, ENC_NA);
- transmit_equalization_encodings_tree = proto_item_add_subtree (it, ett_docsis_rngrsp_tlv_transmit_equalization_encodings);
-
- 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);
- proto_tree_add_item (transmit_equalization_encodings_tree, hf_docsis_rngrsp_trans_eq_enc_highest_subc, tvb, start, 3, ENC_BIG_ENDIAN);
- for(i=3; i < len; i+=4) {
- gint real, imag;
- 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);
- proto_tree_add_item_ret_int (coef_tree, hf_docsis_rngrsp_trans_eq_enc_coef_real, tvb, start + i, 2, ENC_BIG_ENDIAN, &real);
- 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);
- proto_item_append_text(coef_tree, "real: %f, imag: %f", (gint16) real/16384.0, (gint16) imag/16384.0);
- }
-}
-
-static void
-dissect_rngrsp_commanded_power(tvbuff_t * tvb, proto_tree * tree, guint8 start, guint16 len)
-{
- guint16 pos;
- guint16 i;
- guint8 tlvtype, tlvlen;
- proto_item *it;
- proto_tree *commanded_power_tree;
- proto_tree *commanded_power_subtlv_tree;
- proto_item *rngrsptlv_commanded_power_subtlv;
-
-
- it = proto_tree_add_item(tree, hf_docsis_rngrsp_commanded_power_data, tvb, start-2, len+2, ENC_NA);
- commanded_power_tree = proto_item_add_subtree (it, ett_docsis_rngrsp_tlv_commanded_power);
-
-
- pos = start;
- while (pos < start + len)
- {
- tlvtype = tvb_get_guint8 (tvb, pos);
- commanded_power_subtlv_tree = proto_tree_add_subtree(commanded_power_tree, tvb, pos, -1,
- ett_docsis_rngrsp_tlv_commanded_power_subtlv, &rngrsptlv_commanded_power_subtlv,
- val_to_str(tlvtype, rngrsp_tlv_commanded_power_subtlv_vals,
- "Unknown TLV (%u)"));
- pos++;
- tlvlen = tvb_get_guint8 (tvb, pos);
- pos++;
-
- switch (tlvtype)
- {
- case RNGRSP_COMMANDED_POWER_DYNAMIC_RANGE_WINDOW:
- if (tlvlen == 1)
- {
- proto_tree_add_item (commanded_power_subtlv_tree,
- hf_docsis_rngrsp_commanded_power_dynamic_range_window, tvb, pos,
- tlvlen, ENC_BIG_ENDIAN);
- }
- break;
- case RNGRSP_COMMANDED_POWER_UCID_AND_POWER_LEVEL_LIST:
- if ((tlvlen %3)== 0)
- {
- for(i=0; i < tlvlen; i+=3)
- {
- proto_tree_add_item (commanded_power_subtlv_tree,
- hf_docsis_rngrsp_commanded_power_ucid, tvb, pos + i,
- 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (commanded_power_subtlv_tree,
- hf_docsis_rngrsp_commanded_power_trans_pow_lvl, tvb, pos + i +1,
- 2, ENC_BIG_ENDIAN);
- }
- }
- break;
- }
- pos += tlvlen;
- }
-}
-
-
-
-
-static int
-dissect_rngrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *rngrsp_tree;
- proto_item *rngrsptlv_item;
- proto_tree *rngrsptlv_tree;
- guint8 tlvtype;
- int pos;
- guint tlvlen;
- guint32 sid, upchid;
-
- it = proto_tree_add_item(tree, proto_docsis_rngrsp, tvb, 0, -1, ENC_NA);
- rngrsp_tree = proto_item_add_subtree (it, ett_docsis_rngrsp);
-
- proto_tree_add_item_ret_uint (rngrsp_tree, hf_docsis_rngrsp_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
- proto_tree_add_item_ret_uint (rngrsp_tree, hf_docsis_mgt_upstream_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &upchid);
-
- if (upchid > 0)
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Ranging Response: SID = %u, Upstream Channel = %u (U%u)",
- sid, upchid, upchid - 1);
- else
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Ranging Response: SID = %u, Telephony Return", sid);
-
- pos = 3;
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- tlvtype = tvb_get_guint8 (tvb, pos);
- rngrsptlv_tree = proto_tree_add_subtree(rngrsp_tree, tvb, pos, -1,
- ett_docsis_rngrsptlv, &rngrsptlv_item,
- val_to_str(tlvtype, rngrsp_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (rngrsptlv_tree, hf_docsis_rngrsp_type, tvb, pos, 1, tlvtype);
- pos++;
- tlvlen = tvb_get_guint8 (tvb, pos);
- if (tlvtype == RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS || tlvtype == RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS) {
- proto_tree_add_item_ret_uint (rngrsptlv_tree, hf_docsis_rngrsp_length, tvb, pos, 2, ENC_NA, &tlvlen);
- pos += 2;
- } else {
- proto_tree_add_item_ret_uint (rngrsptlv_tree, hf_docsis_rngrsp_length, tvb, pos, 1, ENC_NA, &tlvlen);
- pos++;
- }
- proto_item_set_len(rngrsptlv_item, tlvlen + 2);
- switch (tlvtype)
- {
- case RNGRSP_TIMING:
- if (tlvlen == 4)
- {
- proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_timing_adj, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
- }
- break;
- case RNGRSP_PWR_LEVEL_ADJ:
- if (tlvlen == 1)
- {
- proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_power_adj, tvb, pos, tlvlen, ENC_NA);
- }
- break;
- case RNGRSP_OFFSET_FREQ_ADJ:
- if (tlvlen == 2)
- {
- proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_freq_adj, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
- }
- break;
- case RNGRSP_TRANSMIT_EQ_ADJ:
- proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_xmit_eq_adj, tvb, pos, tlvlen, ENC_NA);
- break;
- case RNGRSP_RANGING_STATUS:
- if (tlvlen == 1)
- {
- proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_ranging_status, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
- }
- break;
- case RNGRSP_DOWN_FREQ_OVER:
- if (tlvlen == 4)
- {
- proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_down_freq_over, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
- }
- break;
- case RNGRSP_UP_CHID_OVER:
- if (tlvlen == 1)
- {
- proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_upstream_ch_over, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
- }
- break;
- case RNGRSP_DYNAMIC_RANGE_WINDOW_UPPER_EDGE:
- if (tlvlen == 1)
- proto_tree_add_item (rngrsptlv_tree, hf_docsis_rngrsp_dynamic_range_window_upper_edge, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
- else
- {
- expert_add_info_format(pinfo, rngrsptlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", tlvlen);
- }
- break;
- case RNGRSP_TRANSMIT_EQ_ADJUST_OFDMA_CHANNELS:
- dissect_rngrsp_transmit_equalization_encodings(tvb, rngrsptlv_tree, pos, tlvlen);
- break;
- case RNGRSP_TRANSMIT_EQ_SET_OFDMA_CHANNELS:
- dissect_rngrsp_transmit_equalization_encodings(tvb, rngrsptlv_tree, pos, tlvlen);
- break;
- case RNGRSP_COMMANDED_POWER:
- dissect_rngrsp_commanded_power(tvb, rngrsptlv_tree, pos, tlvlen);
- break;
-
- default:
- proto_tree_add_item (rngrsp_tree, hf_docsis_rngrsp_tlv_unknown, tvb, pos, tlvlen, ENC_NA);
- } /* switch(tlvtype) */
- pos += tlvlen;
- } /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_regreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *regreq_tree;
- guint32 sid;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item(tree, proto_docsis_regreq, tvb, 0, -1, ENC_NA);
- regreq_tree = proto_item_add_subtree (it, ett_docsis_regreq);
-
- proto_tree_add_item_ret_uint (regreq_tree, hf_docsis_regreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
-
- col_add_fstr (pinfo->cinfo, COL_INFO, "Registration Request SID = %u", sid);
-
- /* Call Dissector for Appendix C TlV's */
- next_tvb = tvb_new_subset_remaining (tvb, 2);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, regreq_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_regrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *regrsp_tree;
- guint32 sid, response;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item(tree, proto_docsis_regrsp, tvb, 0, -1, ENC_NA);
- regrsp_tree = proto_item_add_subtree (it, ett_docsis_regrsp);
- proto_tree_add_item_ret_uint (regrsp_tree, hf_docsis_regrsp_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
- proto_tree_add_item_ret_uint (regrsp_tree, hf_docsis_regrsp_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Registration Response SID = %u (%s)", sid,
- val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 3);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, regrsp_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_uccreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *uccreq_tree;
- guint32 chid;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item (tree, proto_docsis_uccreq, tvb, 0, -1, ENC_NA);
- uccreq_tree = proto_item_add_subtree (it, ett_docsis_uccreq);
-
- proto_tree_add_item_ret_uint (uccreq_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &chid);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Upstream Channel Change request Channel ID = %u (U%u)",
- chid, (chid > 0 ? chid - 1 : chid));
-
- /* call dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 1);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, uccreq_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_uccrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *uccrsp_tree;
- guint32 chid;
-
- it = proto_tree_add_item(tree, proto_docsis_uccrsp, tvb, 0, -1, ENC_NA);
- uccrsp_tree = proto_item_add_subtree (it, ett_docsis_uccrsp);
-
- proto_tree_add_item_ret_uint (uccrsp_tree, hf_docsis_mgt_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &chid);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Upstream Channel Change response Channel ID = %u (U%u)",
- chid, (chid > 0 ? chid - 1 : chid));
-
- return tvb_captured_length(tvb);
-}
-
-/* The dissect_attrs() function does the actual work to dissect the
- * attributes. It's called recursively, to dissect embedded attributes
- */
-static void
-dissect_attrs (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
-{
- guint8 type;
- guint32 length;
- int pos = 0;
- gint total_len;
- proto_tree *attr_tree, *attr_subtree;
- proto_item *ti, *tlv_item, *tlv_len_item;
- tvbuff_t *attr_tvb;
-
- total_len = tvb_reported_length_remaining (tvb, 0);
- while (pos < total_len)
- {
- type = tvb_get_guint8 (tvb, pos);
- attr_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_bpkmattrtlv, &tlv_item,
- val_to_str(type, bpkmattr_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (attr_tree, hf_docsis_bpkmattr_type, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (attr_tree, hf_docsis_bpkmattr_length,
- tvb, pos, 2, ENC_BIG_ENDIAN, &length);
- pos += 2;
- proto_item_set_len(tlv_item, length + 2);
-
- switch (type)
- {
- case BPKM_RESERVED:
- break;
- case BPKM_SERIAL_NUM:
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_serial_num, tvb, pos, length, ENC_ASCII|ENC_NA);
- break;
- case BPKM_MANUFACTURER_ID:
- if (length == 3)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_manf_id, tvb, pos, length, ENC_NA);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_MAC_ADDR:
- if (length == 6)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_mac_addr, tvb, pos, length, ENC_NA);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_RSA_PUB_KEY:
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_rsa_pub_key, tvb, pos, length, ENC_NA);
- break;
- case BPKM_CM_ID:
- ti = proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_cm_id, tvb, pos, length, ENC_NA);
- attr_subtree = proto_item_add_subtree(ti, ett_docsis_bpkmattr_cmid);
- attr_tvb = tvb_new_subset_length (tvb, pos, length);
- dissect_attrs (attr_tvb, pinfo, attr_subtree);
- break;
- case BPKM_DISPLAY_STR:
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_display_str, tvb, pos, length, ENC_ASCII|ENC_NA);
- break;
- case BPKM_AUTH_KEY:
- if ((length == 96) || (length == 128) || (length == 256))
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_auth_key, tvb, pos, length, ENC_NA);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_TEK:
- if (length == 8 || length == 16)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_tek, tvb, pos, length, ENC_NA);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_KEY_LIFETIME:
- if (length == 4)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_key_life, tvb, pos, length, ENC_BIG_ENDIAN);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_KEY_SEQ_NUM:
- if (length == 1)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_key_seq, tvb, pos, length, ENC_BIG_ENDIAN);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_HMAC_DIGEST:
- if (length == 20)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_hmac_digest, tvb, pos, length, ENC_NA);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_SAID:
- if (length == 2)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_said, tvb, pos, length, ENC_BIG_ENDIAN);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_TEK_PARAM:
- ti = proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_tek_params, tvb, pos, length, ENC_NA);
- attr_subtree = proto_item_add_subtree(ti, ett_docsis_bpkmattr_tekp);
- attr_tvb = tvb_new_subset_length (tvb, pos, length);
- dissect_attrs (attr_tvb, pinfo, attr_subtree);
- break;
- case BPKM_OBSOLETED:
- break;
- case BPKM_CBC_IV:
- if (length == 8 || length == 16)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_cbc_iv, tvb, pos, length, ENC_NA);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_ERROR_CODE:
- if (length == 1)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_error_code, tvb, pos, length, ENC_BIG_ENDIAN);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_CA_CERT:
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_ca_cert, tvb, pos, length, ENC_NA);
- break;
- case BPKM_CM_CERT:
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_cm_cert, tvb, pos, length, ENC_NA);
- break;
- case BPKM_SEC_CAPABILITIES:
- ti = proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_security_cap, tvb, pos, length, ENC_NA);
- attr_subtree = proto_item_add_subtree(ti, ett_docsis_bpkmattr_scap);
- attr_tvb = tvb_new_subset_length (tvb, pos, length);
- dissect_attrs (attr_tvb, pinfo, attr_subtree);
- break;
- case BPKM_CRYPTO_SUITE:
- if (length == 2)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_crypto_suite, tvb, pos, length, ENC_BIG_ENDIAN);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_CRYPTO_SUITE_LIST:
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_crypto_suite_list, tvb, pos, length, ENC_NA);
- break;
- case BPKM_BPI_VERSION:
- if (length == 1)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_bpi_version, tvb, pos, length, ENC_BIG_ENDIAN);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_SA_DESCRIPTOR:
- ti = proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_sa_descr, tvb, pos, length, ENC_NA);
- attr_subtree = proto_item_add_subtree(ti, ett_docsis_bpkmattr_sadsc);
- attr_tvb = tvb_new_subset_length (tvb, pos, length);
- dissect_attrs (attr_tvb, pinfo, attr_subtree);
- break;
- case BPKM_SA_TYPE:
- if (length == 1)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_sa_type, tvb, pos, length, ENC_BIG_ENDIAN);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_SA_QUERY:
- ti = proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_sa_query, tvb, pos, length, ENC_NA);
- attr_subtree = proto_item_add_subtree(ti, ett_docsis_bpkmattr_saqry);
- attr_tvb = tvb_new_subset_length (tvb, pos, length);
- dissect_attrs (attr_tvb, pinfo, attr_subtree);
- break;
- case BPKM_SA_QUERY_TYPE:
- if (length == 1)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_sa_query_type, tvb, pos, length, ENC_BIG_ENDIAN);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_IP_ADDRESS:
- if (length == 4)
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_ip_address, tvb, pos, length, ENC_BIG_ENDIAN);
- else
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- case BPKM_VENDOR_DEFINED:
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_vendor_def, tvb, pos, length, ENC_NA);
- break;
- case BPKM_DNLD_PARAMS:
- ti = proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_download_param, tvb, pos, length, ENC_NA);
- attr_subtree = proto_item_add_subtree(ti, ett_docsis_bpkmattr_dnld);
- attr_tvb = tvb_new_subset_length (tvb, pos, length);
- dissect_attrs (attr_tvb, pinfo, attr_subtree);
- break;
- default:
- proto_tree_add_item (attr_tree, hf_docsis_bpkmattr_vendor_def, tvb, pos, length, ENC_NA);
- break;
- }
-
- pos += length; /* switch */
- } /* while */
-}
-
-static int
-dissect_bpkmreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *bpkmreq_tree, *bpkmattr_tree;
- guint32 code;
- tvbuff_t *attrs_tvb;
-
- it = proto_tree_add_item(tree, proto_docsis_bpkmreq, tvb, 0, -1, ENC_NA);
- bpkmreq_tree = proto_item_add_subtree (it, ett_docsis_bpkmreq);
- proto_tree_add_item_ret_uint (bpkmreq_tree, hf_docsis_bpkm_code, tvb, 0, 1,
- ENC_BIG_ENDIAN, &code);
-
- col_add_fstr (pinfo->cinfo, COL_INFO, "BPKM Request (%s)",
- val_to_str (code, code_field_vals, "%d"));
-
- proto_tree_add_item (bpkmreq_tree, hf_docsis_bpkm_ident, tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (bpkmreq_tree, hf_docsis_bpkm_length, tvb, 2, 2, ENC_BIG_ENDIAN);
- it = proto_tree_add_item(bpkmreq_tree, hf_docsis_bpkmattr, tvb, 4, tvb_reported_length_remaining(tvb, 4), ENC_NA);
- bpkmattr_tree = proto_item_add_subtree (it, ett_docsis_bpkmattr);
-
- attrs_tvb = tvb_new_subset_remaining (tvb, 4);
- dissect_attrs(attrs_tvb, pinfo, bpkmattr_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_bpkmrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *bpkmrsp_tree, *bpkmattr_tree;
- guint32 code;
- tvbuff_t *attrs_tvb;
-
- it = proto_tree_add_item(tree, proto_docsis_bpkmrsp, tvb, 0, -1, ENC_NA);
- bpkmrsp_tree = proto_item_add_subtree (it, ett_docsis_bpkmrsp);
-
- proto_tree_add_item_ret_uint (bpkmrsp_tree, hf_docsis_bpkm_code, tvb, 0, 1, ENC_BIG_ENDIAN, &code);
-
- col_add_fstr (pinfo->cinfo, COL_INFO, "BPKM Response (%s)",
- val_to_str (code, code_field_vals, "Unknown code %u"));
-
- proto_tree_add_item (bpkmrsp_tree, hf_docsis_bpkm_ident, tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (bpkmrsp_tree, hf_docsis_bpkm_length, tvb, 2, 2, ENC_BIG_ENDIAN);
- it = proto_tree_add_item(bpkmrsp_tree, hf_docsis_bpkmattr, tvb, 4, tvb_reported_length_remaining(tvb, 4), ENC_NA);
- bpkmattr_tree = proto_item_add_subtree (it, ett_docsis_bpkmattr);
-
- attrs_tvb = tvb_new_subset_remaining (tvb, 4);
- dissect_attrs(attrs_tvb, pinfo, bpkmattr_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_regack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *regack_tree;
- guint32 sid, response;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item (tree, proto_docsis_regack, tvb, 0, -1, ENC_NA);
- regack_tree = proto_item_add_subtree (it, ett_docsis_regack);
-
- proto_tree_add_item_ret_uint (regack_tree, hf_docsis_regack_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
- proto_tree_add_item_ret_uint (regack_tree, hf_docsis_regack_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Registration Acknowledge SID = %u (%s)", sid,
- val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 3);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, regack_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dsareq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dsareq_tree;
- guint32 transid;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item(tree, proto_docsis_dsareq, tvb, 0, -1, ENC_NA);
- dsareq_tree = proto_item_add_subtree (it, ett_docsis_dsareq);
-
- proto_tree_add_item_ret_uint (dsareq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Service Addition Request Tran-id = %u", transid);
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 2);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsareq_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dsarsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dsarsp_tree;
- guint32 transid, response;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item (tree, proto_docsis_dsarsp, tvb, 0, -1, ENC_NA);
- dsarsp_tree = proto_item_add_subtree (it, ett_docsis_dsarsp);
- proto_tree_add_item_ret_uint (dsarsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
- proto_tree_add_item_ret_uint (dsarsp_tree, hf_docsis_dsarsp_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Service Add Response ID = %u (%s)", transid,
- val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
-
- /* Call dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 3);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsarsp_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dsaack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dsaack_tree;
- guint32 transid, response;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item (tree, proto_docsis_dsaack, tvb, 0, -1, ENC_NA);
- dsaack_tree = proto_item_add_subtree (it, ett_docsis_dsaack);
- proto_tree_add_item_ret_uint (dsaack_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
- proto_tree_add_item_ret_uint (dsaack_tree, hf_docsis_dsaack_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Service Add Ack ID = %u (%s)", transid,
- val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 3);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsaack_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dscreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dscreq_tree;
- guint32 transid;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item (tree, proto_docsis_dscreq, tvb, 0, -1, ENC_NA);
- dscreq_tree = proto_item_add_subtree (it, ett_docsis_dscreq);
-
- proto_tree_add_item_ret_uint (dscreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Service Change Request Tran-id = %u", transid);
-
- /* Call dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 2);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, dscreq_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dscrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dscrsp_tree;
- guint32 transid, response;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item(tree, proto_docsis_dscrsp, tvb, 0, -1, ENC_NA);
- dscrsp_tree = proto_item_add_subtree (it, ett_docsis_dscrsp);
- proto_tree_add_item_ret_uint (dscrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
- proto_tree_add_item_ret_uint (dscrsp_tree, hf_docsis_dscrsp_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Service Change Response ID = %u (%s)", transid,
- val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 3);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, dscrsp_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dscack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dscack_tree;
- guint32 transid, response;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item(tree, proto_docsis_dscack, tvb, 0, -1, ENC_NA);
- dscack_tree = proto_item_add_subtree (it, ett_docsis_dscack);
-
- proto_tree_add_item_ret_uint (dscack_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
- proto_tree_add_item_ret_uint (dscack_tree, hf_docsis_dscack_response, tvb, 2, 1, ENC_BIG_ENDIAN, &response);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Service Change Ack ID = %u (%s)", transid,
- val_to_str_ext (response, &docsis_conf_code_ext, "%d"));
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 3);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, dscack_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dsdreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dsdreq_tree;
- guint32 transid;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item (tree, proto_docsis_dsdreq, tvb, 0, -1, ENC_NA);
- dsdreq_tree = proto_item_add_subtree (it, ett_docsis_dsdreq);
-
- proto_tree_add_item_ret_uint (dsdreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Service Delete Request Tran-id = %u", transid);
-
- proto_tree_add_item (dsdreq_tree, hf_docsis_dsdreq_rsvd, tvb, 2, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item (dsdreq_tree, hf_docsis_dsdreq_sfid, tvb, 4, 4, ENC_BIG_ENDIAN);
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 8);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, dsdreq_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dsdrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dsdrsp_tree;
- guint32 tranid, confcode;
-
- it = proto_tree_add_item(tree, proto_docsis_dsdrsp, tvb, 0, -1, ENC_NA);
- dsdrsp_tree = proto_item_add_subtree (it, ett_docsis_dsdrsp);
- proto_tree_add_item_ret_uint (dsdrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &tranid);
- proto_tree_add_item_ret_uint (dsdrsp_tree, hf_docsis_dsdrsp_confcode, tvb, 2, 1, ENC_BIG_ENDIAN, &confcode);
- proto_tree_add_item (dsdrsp_tree, hf_docsis_dsdrsp_rsvd, tvb, 3, 1, ENC_BIG_ENDIAN);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Service Delete Response Tran id = %u (%s)",
- tranid, val_to_str_ext (confcode, &docsis_conf_code_ext, "%d"));
-
- return tvb_captured_length(tvb);
-}
-
-static void
-dissect_dccreq_ds_params (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *dcc_tree;
- proto_item *dcc_item, *tlv_len_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- dcc_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_dccreq_ds_params, &dcc_item,
- val_to_str(type, ds_param_subtlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (dcc_tree, hf_docsis_dcc_ds_params_subtype, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (dcc_tree, hf_docsis_dcc_ds_params_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(dcc_item, length + 2);
-
- switch (type)
- {
- case DCCREQ_DS_FREQ:
- if (length == 4)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_freq, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_DS_MOD_TYPE:
- if (length == 1)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_mod_type, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_DS_SYM_RATE:
- if (length == 1)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_sym_rate, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_DS_INTLV_DEPTH:
- if (length == 2)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_intlv_depth_i, tvb, pos, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_intlv_depth_j, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_DS_CHAN_ID:
- if (length == 1)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_chan_id, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_DS_SYNC_SUB:
- if (length == 1)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_sync_sub, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_DS_OFDM_BLOCK_FREQ:
- if (length == 4)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_ds_ofdm_block_freq, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_dccreq_sf_sub (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *dcc_tree;
- proto_item *dcc_item, *tlv_len_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- dcc_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_dccreq_sf_sub, &dcc_item,
- val_to_str(type, sf_sub_subtlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (dcc_tree, hf_docsis_dcc_sf_sub_subtype, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (dcc_tree, hf_docsis_dcc_sf_sub_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(dcc_item, length + 2);
-
- switch (type)
- {
- case DCCREQ_SF_SFID:
- if (length == 8)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sfid_cur, tvb, pos, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sfid_new, tvb, pos + 4, 4, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_SF_SID:
- if (length == 4)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sid_cur, tvb, pos, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_sid_new, tvb, pos + 2, 2, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_SF_UNSOL_GRANT_TREF:
- if (length == 4)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_sf_unsol_grant_tref, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- }
-
- pos += length;
- }
-}
-
-static int
-dissect_dccreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- guint16 pos;
- guint8 type;
- guint32 length;
- proto_tree *dcc_tree, *tlv_tree;
- proto_item *dcc_item, *tlv_item, *tlv_len_item;
-
- col_set_str(pinfo->cinfo, COL_INFO, "DCC-REQ Message");
-
- dcc_item = proto_tree_add_item (tree, proto_docsis_dccreq, tvb, 0, -1, ENC_NA);
- dcc_tree = proto_item_add_subtree (dcc_item, ett_docsis_dccreq);
-
- proto_tree_add_item (dcc_tree, hf_docsis_dccreq_tran_id, tvb, 0, 2, ENC_BIG_ENDIAN);
-
- pos = 2;
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- type = tvb_get_guint8 (tvb, pos);
- tlv_tree = proto_tree_add_subtree(dcc_tree, tvb, pos, -1,
- ett_docsis_dccreq_tlv, &tlv_item,
- val_to_str(type, dcc_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (tlv_tree, hf_docsis_dccreq_type, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dccreq_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(tlv_item, length + 2);
-
- switch (type)
- {
- case DCCREQ_UP_CHAN_ID:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_dccreq_up_chan_id, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_DS_PARAMS:
- dissect_dccreq_ds_params (tvb, pinfo, tlv_tree, pos, length);
- break;
- case DCCREQ_INIT_TECH:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_dccreq_init_tech, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_UCD_SUB:
- proto_tree_add_item (tlv_tree, hf_docsis_dccreq_ucd_sub, tvb, pos, length, ENC_NA);
- break;
- case DCCREQ_SAID_SUB:
- if (length == 4)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_dccreq_said_sub_cur, tvb, pos, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item (tlv_tree, hf_docsis_dccreq_said_sub_new, tvb, pos + 2, 2, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_SF_SUB:
- dissect_dccreq_sf_sub (tvb, pinfo, tlv_tree, pos, length );
- break;
- case DCCREQ_CMTS_MAC_ADDR:
- if (length == 6)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_dccreq_cmts_mac_addr, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_KEY_SEQ_NUM:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_dccreq_key_seq_num, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCREQ_HMAC_DIGEST:
- if (length == 20)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_dccreq_hmac_digest, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- } /* switch(type) */
- pos += length;
- } /* (tvb_reported_length_remaining(tvb, pos) > 0) */
- return tvb_captured_length(tvb);
-}
-
-static void
-dissect_dccrsp_cm_jump_time (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *dcc_tree;
- proto_item *dcc_item, *tlv_len_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- dcc_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_dccrsp_cm_jump_time, &dcc_item,
- val_to_str(type, cm_jump_subtlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (dcc_tree, hf_docsis_dcc_cm_jump_subtype, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (dcc_tree, hf_docsis_dcc_cm_jump_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(dcc_item, length + 2);
-
- switch (type)
- {
- case DCCRSP_CM_JUMP_TIME_LENGTH:
- if (length == 4)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccrsp_cm_jump_time_length, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCRSP_CM_JUMP_TIME_START:
- if (length == 8)
- {
- proto_tree_add_item (dcc_tree, hf_docsis_dccrsp_cm_jump_time_start, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- }
-
- pos += length;
- }
-}
-
-static int
-dissect_dccrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- guint16 pos;
- guint8 type;
- guint32 length;
- proto_tree *dcc_tree, *tlv_tree;
- proto_item *dcc_item, *tlv_item, *tlv_len_item;
-
- col_set_str(pinfo->cinfo, COL_INFO, "DCC-RSP Message");
-
- dcc_item = proto_tree_add_item (tree, proto_docsis_dccrsp, tvb, 0, -1, ENC_NA);
- dcc_tree = proto_item_add_subtree (dcc_item, ett_docsis_dccrsp);
- proto_tree_add_item (dcc_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item (dcc_tree, hf_docsis_dccrsp_conf_code, tvb, 2, 1, ENC_BIG_ENDIAN);
-
- pos = 3;
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- type = tvb_get_guint8 (tvb, pos);
- tlv_tree = proto_tree_add_subtree(dcc_tree, tvb, pos, -1,
- ett_docsis_dccrsp_tlv, &tlv_item,
- val_to_str(type, dccrsp_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (tlv_tree, hf_docsis_dccrsp_type, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dccrsp_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(tlv_item, length + 2);
-
- switch (type)
- {
- case DCCRSP_CM_JUMP_TIME:
- dissect_dccrsp_cm_jump_time (tvb, pinfo, tlv_tree, pos, length );
- break;
- case DCCRSP_KEY_SEQ_NUM:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_dccrsp_key_seq_num, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCRSP_HMAC_DIGEST:
- if (length == 20)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_dccrsp_hmac_digest, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- } /* switch(type) */
-
- pos += length;
- } /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
-
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dccack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- guint16 pos;
- guint8 type;
- guint32 length;
- proto_tree *dcc_tree, *tlv_tree;
- proto_item *dcc_item, *tlv_item, *tlv_len_item;
-
- col_set_str(pinfo->cinfo, COL_INFO, "DCC-ACK Message");
-
- dcc_item = proto_tree_add_item(tree, proto_docsis_dccack, tvb, 0, -1, ENC_NA);
- dcc_tree = proto_item_add_subtree (dcc_item, ett_docsis_dccack);
- proto_tree_add_item (dcc_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN);
-
- pos = 2;
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- type = tvb_get_guint8 (tvb, pos);
- tlv_tree = proto_tree_add_subtree(dcc_tree, tvb, pos, -1,
- ett_docsis_dccack_tlv, &tlv_item,
- val_to_str(type, dccack_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (tlv_tree, hf_docsis_dccack_type, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dccack_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(tlv_item, length + 2);
-
- switch (type)
- {
- case DCCACK_KEY_SEQ_NUM:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_dccack_key_seq_num, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCCACK_HMAC_DIGEST:
- if (length == 20)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_dccack_hmac_digest, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- } /* switch(type) */
-
- pos += length;
- } /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
-
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_type29ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_type29ucd, MGT_TYPE29UCD);
-}
-
-static int
-dissect_intrngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *intrngreq_item;
- proto_tree *intrngreq_tree;
- guint32 sid;
-
- intrngreq_item = proto_tree_add_item(tree, proto_docsis_intrngreq, tvb, 0, -1, ENC_NA);
- intrngreq_tree = proto_item_add_subtree (intrngreq_item, ett_docsis_intrngreq);
-
- proto_tree_add_item_ret_uint (intrngreq_tree, hf_docsis_intrngreq_sid, tvb, 0, 2, ENC_BIG_ENDIAN, &sid);
- col_add_fstr (pinfo->cinfo, COL_INFO, "Initial Ranging Request: SID = %u",sid);
-
- proto_tree_add_item (intrngreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (intrngreq_tree, hf_docsis_mgt_upstream_chid, tvb, 3, 1, ENC_BIG_ENDIAN);
-
- return tvb_captured_length(tvb);
-}
-
-static void
-dissect_dcd_dsg_cfg (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *dcd_tree;
- proto_tree *dcd_item, *tlv_len_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_dcd_cfg, &dcd_item,
- val_to_str(type, dcd_cfg_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (dcd_tree, hf_docsis_dcd_cfg_subtype, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_cfg_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(dcd_item, length + 2);
-
- switch (type)
- {
- case DCD_CFG_CHAN_LST:
- if (length == 4)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_chan, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFG_TDSG1:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg1, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFG_TDSG2:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg2, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFG_TDSG3:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg3, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFG_TDSG4:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_tdsg4, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFG_VENDOR_SPEC:
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfg_vendor_spec, tvb, pos, length, ENC_NA);
- break;
-
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_dcd_down_classifier_ip (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *dcd_tree;
- proto_tree *dcd_item, *tlv_len_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_dcd_cfr_ip, &dcd_item,
- val_to_str(type, dcd_cfr_ip_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (dcd_tree, hf_docsis_dcd_cfr_ip_subtype, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_cfr_ip_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(dcd_item, length + 2);
-
- switch (type)
- {
- case DCD_CFR_IP_SOURCE_ADDR:
- if (length == 4)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_source_addr, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFR_IP_SOURCE_MASK:
- if (length == 4)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_source_mask, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFR_IP_DEST_ADDR:
- if (length == 4)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_dest_addr, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFR_IP_DEST_MASK:
- if (length == 4)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_ip_dest_mask, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFR_TCPUDP_SRCPORT_START:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_srcport_start, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFR_TCPUDP_SRCPORT_END:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_srcport_end, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFR_TCPUDP_DSTPORT_START:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_dstport_start, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFR_TCPUDP_DSTPORT_END:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_tcpudp_dstport_end, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_dcd_clid (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *dcd_tree;
- proto_tree *dcd_item, *tlv_len_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_dcd_clid, &dcd_item,
- val_to_str(type, dcd_clid_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (dcd_tree, hf_docsis_dcd_clid_subtype, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_clid_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(dcd_item, length + 2);
-
- switch (type)
- {
- case DCD_CLID_BCAST_ID:
- if (length == 2)
- {
- proto_tree_add_item(dcd_tree, hf_docsis_dcd_clid_bcast_id, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CLID_KNOWN_MAC_ADDR:
- if (length == 6)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_clid_known_mac_addr, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CLID_CA_SYS_ID:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_clid_ca_sys_id, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CLID_APP_ID:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_clid_app_id, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_dcd_dsg_rule (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *dcd_tree;
- proto_tree *dcd_item, *tlv_len_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_dcd_rule, &dcd_item,
- val_to_str(type, dcd_dsg_rule_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (dcd_tree, hf_docsis_dcd_dsg_rule_subtype, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_dsg_rule_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(dcd_item, length + 2);
-
- switch (type)
- {
- case DCD_RULE_ID:
- if (length == 1)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_id, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_RULE_PRI:
- if (length == 1)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_pri, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_RULE_UCID_RNG:
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_ucid_list, tvb, pos, length, ENC_NA);
- break;
- case DCD_RULE_CLIENT_ID:
- dissect_dcd_clid (tvb, pinfo, dcd_tree, pos, length );
- break;
- case DCD_RULE_TUNL_ADDR:
- if (length == 6)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_tunl_addr, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_RULE_CFR_ID:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_cfr_id, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_RULE_VENDOR_SPEC:
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_rule_vendor_spec, tvb, pos, length, ENC_NA);
- break;
-
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_dcd_down_classifier (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *dcd_tree;
- proto_tree *dcd_item, *tlv_len_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- dcd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_dcd_cfr, &dcd_item,
- val_to_str(type, dcd_down_classifier_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (dcd_tree, hf_docsis_dcd_down_classifier_subtype, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (dcd_tree, hf_docsis_dcd_down_classifier_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(dcd_item, length + 2);
-
- switch (type)
- {
- case DCD_CFR_ID:
- if (length == 2)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_id, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFR_RULE_PRI:
- if (length == 1)
- {
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_cfr_rule_pri, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DCD_CFR_IP_CLASSIFIER:
- dissect_dcd_down_classifier_ip (tvb , pinfo , dcd_tree , pos , length );
- break;
- }
-
- pos += length;
- }
-}
-
-static int
-dissect_dcd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- guint16 pos;
- guint8 type;
- guint32 length;
- proto_tree *dcd_tree, *tlv_tree;
- proto_item *dcd_item, *tlv_item;
-
- col_set_str(pinfo->cinfo, COL_INFO, "DCD Message: ");
-
- dcd_item = proto_tree_add_item(tree, proto_docsis_dcd, tvb, 0, -1, ENC_NA);
- dcd_tree = proto_item_add_subtree (dcd_item, ett_docsis_dcd);
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_config_ch_cnt, tvb, 0, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_num_of_frag, tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (dcd_tree, hf_docsis_dcd_frag_sequence_num, tvb, 2, 1, ENC_BIG_ENDIAN);
-
- pos = 3;
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- type = tvb_get_guint8 (tvb, pos);
- tlv_tree = proto_tree_add_subtree(dcd_tree, tvb, pos, -1,
- ett_docsis_dcd_tlv, &tlv_item,
- val_to_str(type, dcd_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (tlv_tree, hf_docsis_dcd_type, tvb, pos, 1, type);
- pos++;
- proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dcd_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(tlv_item, length + 2);
-
- switch (type)
- {
- case DCD_DOWN_CLASSIFIER:
- dissect_dcd_down_classifier (tvb, pinfo, tlv_tree, pos, length);
- break;
- case DCD_DSG_RULE:
- dissect_dcd_dsg_rule (tvb, pinfo, tlv_tree, pos, length);
- break;
- case DCD_DSG_CONFIG:
- dissect_dcd_dsg_cfg (tvb, pinfo, tlv_tree, pos, length);
- break;
- } /* switch(type) */
-
- pos += length;
- } /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
-
- return tvb_captured_length(tvb);
-}
-
-static void
-dissect_mdd_ds_active_channel_list(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *mdd_tree;
- proto_item *mdd_item;
- int pos;
- static const int * order_annex[] = {
- &hf_docsis_mdd_downstream_active_channel_list_modulation_order,
- &hf_docsis_mdd_downstream_active_channel_list_annex,
- NULL
- };
- static const int * cm_status_event[] = {
- &hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_timeout,
- &hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_failure,
- &hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_recovery,
- &hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_recovery,
- NULL
- };
- static const int * ofdm_plc_parameters[] = {
- &hf_docsis_mdd_ofdm_plc_parameters_tukey_raised_cosine_window,
- &hf_docsis_mdd_ofdm_plc_parameters_cyclic_prefix,
- &hf_docsis_mdd_ofdm_plc_parameters_sub_carrier_spacing,
- NULL
- };
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_mdd_ds_active_channel_list, &mdd_item,
- val_to_str(type, mdd_ds_active_channel_list_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (mdd_tree, hf_docsis_mdd_ds_active_channel_list_subtype, tvb, pos, 1, type);
- pos++;
- proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_ds_active_channel_list_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(mdd_item, length + 2);
-
- switch(type)
- {
- case DOWNSTREAM_ACTIVE_CHANNEL_LIST_CHANNEL_ID:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_channel_id, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case DOWNSTREAM_ACTIVE_CHANNEL_LIST_FREQUENCY:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_frequency, tvb, pos, 4, ENC_BIG_ENDIAN);
- break;
- case DOWNSTREAM_ACTIVE_CHANNEL_LIST_MODULATION_ORDER_ANNEX:
- proto_tree_add_bitmask_list(mdd_tree, tvb, pos, 1, order_annex, ENC_BIG_ENDIAN);
- break;
- case DOWNSTREAM_ACTIVE_CHANNEL_LIST_PRIMARY_CAPABLE:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_primary_capable, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case DOWNSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK:
- 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);
- break;
- case DOWNSTREAM_ACTIVE_CHANNEL_LIST_MAP_UCD_TRANSPORT_INDICATOR:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_downstream_active_channel_list_map_ucd_transport_indicator, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case DOWNSTREAM_ACTIVE_CHANNEL_LIST_OFDM_PLC_PARAMETERS:
- proto_tree_add_bitmask(mdd_tree, tvb, pos, hf_docsis_mdd_ofdm_plc_parameters, ett_sub_tlv, ofdm_plc_parameters, ENC_BIG_ENDIAN);
- break;
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_mdd_ds_service_group(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 i, length;
- proto_tree *mdd_tree;
- proto_item *mdd_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_mdd_ds_service_group, &mdd_item,
- val_to_str(type, mdd_ds_service_group_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (mdd_tree, hf_docsis_mdd_ds_service_group_subtype, tvb, pos, 1, type);
- pos++;
- proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_ds_service_group_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(mdd_item, length + 2);
-
- switch(type)
- {
- case MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_MD_DS_SG_IDENTIFIER:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_mac_domain_downstream_service_group_md_ds_sg_identifier, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP_CHANNEL_IDS:
- for (i = 0; i < length; i++) {
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_mac_domain_downstream_service_group_channel_id, tvb, pos + i , 1, ENC_BIG_ENDIAN);
- }
- break;
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_mdd_channel_profile_reporting_control(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *mdd_tree;
- proto_item *mdd_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_mdd_channel_profile_reporting_control, &mdd_item,
- val_to_str(type, mdd_channel_profile_reporting_control_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (mdd_tree, hf_docsis_mdd_channel_profile_reporting_control_subtype, tvb, pos, 1, type);
- pos++;
- proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_channel_profile_reporting_control_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(mdd_item, length + 2);
-
- switch(type)
- {
- case RCP_CENTER_FREQUENCY_SPACING:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_rpc_center_frequency_spacing, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case VERBOSE_RCP_REPORTING:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_verbose_rcp_reporting, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_mdd_ip_init_param(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *mdd_tree;
- proto_item *mdd_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_mdd_ip_init_param, &mdd_item,
- val_to_str(type, mdd_ip_init_param_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (mdd_tree, hf_docsis_mdd_ip_init_param_subtype, tvb, pos, 1, type);
- pos++;
- proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_ip_init_param_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(mdd_item, length + 2);
-
- switch(type)
- {
- case IP_PROVISIONING_MODE:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_ip_provisioning_mode, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case PRE_REGISTRATION_DSID:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_pre_registration_dsid, tvb, pos, 3, ENC_BIG_ENDIAN);
- break;
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_mdd_upstream_active_channel_list(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *mdd_tree;
- proto_item *mdd_item;
- int pos;
- static const int * cm_status_event[] = {
- &hf_docsis_mdd_cm_status_event_enable_bitmask_t4_timeout,
- &hf_docsis_mdd_cm_status_event_enable_bitmask_t3_retries_exceeded,
- &hf_docsis_mdd_cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded,
- NULL
- };
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_mdd_up_active_channel_list, &mdd_item,
- val_to_str(type, mdd_up_active_channel_list_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (mdd_tree, hf_docsis_mdd_up_active_channel_list_subtype, tvb, pos, 1, type);
- pos++;
- proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_up_active_channel_list_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(mdd_item, length + 2);
-
- switch(type)
- {
- case UPSTREAM_ACTIVE_CHANNEL_LIST_UPSTREAM_CHANNEL_ID:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_upstream_active_channel_list_upstream_channel_id, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case UPSTREAM_ACTIVE_CHANNEL_LIST_CM_STATUS_EVENT_ENABLE_BITMASK:
- 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);
- break;
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_mdd_cm_status_event_control(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length, timer;
- proto_tree *mdd_tree;
- proto_item *mdd_item, *text_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_mdd_cm_status_event_control, &mdd_item,
- val_to_str(type, mdd_cm_status_event_control_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (mdd_tree, hf_docsis_mdd_cm_status_event_control_subtype, tvb, pos, 1, type);
- pos++;
- proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_cm_status_event_control_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(mdd_item, length + 2);
-
- switch(type)
- {
- case EVENT_TYPE_CODE:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_event_type, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case MAXIMUM_EVENT_HOLDOFF_TIMER:
- text_item = proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_maximum_event_holdoff_timer, tvb, pos, 2, ENC_BIG_ENDIAN, &timer);
- proto_item_append_text(text_item, " (%d ms)", timer * 20);
- break;
- case MAXIMUM_NUMBER_OF_REPORTS_PER_EVENT:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_maximum_number_of_reports_per_event, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- }
-
- pos += length;
- }
-}
-
-static void
-dissect_mdd_dsg_da_to_dsid(tvbuff_t * tvb, packet_info* pinfo _U_, proto_tree * tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *mdd_tree;
- proto_item *mdd_item;
- int pos;
-
- pos = start;
- while ( pos < ( start + len) )
- {
- type = tvb_get_guint8 (tvb, pos);
- mdd_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_mdd_dsg_da_to_dsid, &mdd_item,
- val_to_str(type, mdd_cm_dsg_da_to_dsid_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_subtype, tvb, pos, 1, type);
- pos++;
- proto_tree_add_item_ret_uint (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(mdd_item, length + 2);
-
- switch(type)
- {
- case DSG_DA_TO_DSID_ASSOCIATION_DA:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_association_da, tvb, pos, 6, ENC_NA);
- break;
- case DSG_DA_TO_DSID_ASSOCIATION_DSID:
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_dsg_da_to_dsid_association_dsid, tvb, pos, 3, ENC_BIG_ENDIAN);
- break;
- }
-
- pos += length;
- }
-}
-
-static int
-dissect_mdd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *mdd_tree;
-
- int pos;
- guint subpos = 0;
- guint8 type;
- guint32 i, length;
- guint8 subtype;
- guint32 sublength;
-
- proto_tree *tlv_tree;
- proto_item *tlv_item;
- static const int * non_channel_events[] = {
- &hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_sequence_out_of_range,
- &hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup,
- &hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power,
- NULL
- };
-
- col_set_str(pinfo->cinfo, COL_INFO, "MDD Message:");
-
- it = proto_tree_add_item (tree, proto_docsis_mdd, tvb, 0, -1,ENC_NA);
- mdd_tree = proto_item_add_subtree (it, ett_docsis_mdd);
-
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_ccc, tvb, 0, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_number_of_fragments, tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_fragment_sequence_number, tvb, 2, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (mdd_tree, hf_docsis_mdd_current_channel_dcid, tvb, 3, 1, ENC_BIG_ENDIAN);
-
- /*TLVs...*/
- pos = 4;
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- type = tvb_get_guint8 (tvb, pos);
- tlv_tree = proto_tree_add_subtree(mdd_tree, tvb, pos, -1,
- ett_tlv, &tlv_item,
- val_to_str(type, mdd_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (tlv_tree, hf_docsis_mdd_type, tvb, pos, 1, type);
- pos++;
- proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_mdd_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(tlv_item, length + 2);
-
- switch(type)
- {
- case DOWNSTREAM_ACTIVE_CHANNEL_LIST:
- dissect_mdd_ds_active_channel_list(tvb, pinfo, tlv_tree, pos, length );
- break;
- case MAC_DOMAIN_DOWNSTREAM_SERVICE_GROUP:
- dissect_mdd_ds_service_group(tvb, pinfo, tlv_tree, pos, length );
- break;
- case DOWNSTREAM_AMBIGUITY_RESOLUTION_FREQUENCY_LIST:
- for (i = 0; i < length; i+=4) {
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_downstream_ambiguity_resolution_frequency, tvb, pos + i, 4, ENC_BIG_ENDIAN);
- }
- break;
- case RECEIVE_CHANNEL_PROFILE_REPORTING_CONTROL:
- dissect_mdd_channel_profile_reporting_control(tvb, pinfo, tlv_tree, pos, length );
- break;
- case IP_INITIALIZATION_PARAMETERS:
- dissect_mdd_ip_init_param(tvb, pinfo, tlv_tree, pos, length );
- break;
- case EARLY_AUTHENTICATION_AND_ENCRYPTION:
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_early_authentication_and_encryption, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case UPSTREAM_ACTIVE_CHANNEL_LIST:
- dissect_mdd_upstream_active_channel_list(tvb, pinfo, tlv_tree, pos, length );
- break;
- case UPSTREAM_AMBIGUITY_RESOLUTION_CHANNEL_LIST:
- for (i = 0; i < length; i++) {
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_upstream_ambiguity_resolution_channel_list_channel_id, tvb, pos + i , 1, ENC_BIG_ENDIAN);
- }
- break;
- case UPSTREAM_FREQUENCY_RANGE:
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_upstream_frequency_range, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case SYMBOL_CLOCK_LOCKING_INDICATOR:
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_symbol_clock_locking_indicator, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case CM_STATUS_EVENT_CONTROL:
- dissect_mdd_cm_status_event_control(tvb, pinfo, tlv_tree, pos, length );
- break;
- case UPSTREAM_TRANSMIT_POWER_REPORTING:
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_upstream_transmit_power_reporting, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case DSG_DA_TO_DSID_ASSOCIATION_ENTRY:
- dissect_mdd_dsg_da_to_dsid(tvb, pinfo, tlv_tree, pos, length );
- break;
- case CM_STATUS_EVENT_ENABLE_NON_CHANNEL_SPECIFIC_EVENTS:
- 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);
- break;
- case EXTENDED_UPSTREAM_TRANSMIT_POWER_SUPPORT:
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_extended_upstream_transmit_power_support, tvb, pos, 1, ENC_BIG_ENDIAN);
- break;
- case CMTS_DOCSIS_VERSION:
- subpos = pos;
- while (subpos < pos + length + 2) {
- subtype = tvb_get_guint8 (tvb, subpos);
- sublength = tvb_get_guint8 (tvb, subpos + 1);
- switch(subtype) {
- case CMTS_MAJOR_DOCSIS_VERSION:
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_cmts_major_docsis_version, tvb, subpos + 2, sublength, ENC_NA);
- break;
- case CMTS_MINOR_DOCSIS_VERSION:
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_cmts_minor_docsis_version, tvb, subpos + 2, sublength, ENC_BIG_ENDIAN);
- break;
- }
- subpos += sublength + 2;
- }
- break;
- case CM_PERIODIC_MAINTENANCE_TIMEOUT_INDICATOR:
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_cm_periodic_maintenance_timeout_indicator, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- case DLS_BROADCAST_AND_MULTICAST_DELIVERY_METHOD:
- proto_tree_add_item (tlv_tree, hf_docsis_mdd_dls_broadcast_and_multicast_delivery_method, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- case CM_STATUS_EVENT_ENABLE_FOR_DOCSIS_3_1_EVENTS:
- if (length == 4) {
- static const int * mdd_cm_status_event_d31[] = {
- &hf_docsis_mdd_cm_status_event_d31_ofdm_prof_fail,
- &hf_docsis_mdd_cm_status_event_d31_prim_down_chan_change,
- &hf_docsis_mdd_cm_status_event_d31_dpd_mismatch,
- &hf_docsis_mdd_cm_status_event_d31_deprecated,
- &hf_docsis_mdd_cm_status_event_d31_ncp_prof_fail,
- &hf_docsis_mdd_cm_status_event_d31_loss_fec_plc,
- &hf_docsis_mdd_cm_status_event_d31_ncp_prof_recover,
- &hf_docsis_mdd_cm_status_event_d31_fec_recover_on_plc,
- &hf_docsis_mdd_cm_status_event_d31_fec_recover_on_ofdm_prof,
- &hf_docsis_mdd_cm_status_event_d31_ofdma_prof_fail,
- &hf_docsis_mdd_cm_status_event_d31_map_stor_overflow_ind,
- &hf_docsis_mdd_cm_status_event_d31_ofdm_map_stor_almost_full_ind,
- &hf_docsis_mdd_cm_status_event_d31_reserved,
- NULL
- };
-
- proto_tree_add_bitmask_list(tlv_tree, tvb, pos, length, mdd_cm_status_event_d31, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- }
-
- pos += length;
- }
-
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_bintrngreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *bintrngreq_item;
- proto_tree *bintrngreq_tree;
- guint16 md_ds_sg_id;
- guint16 offset = 0;
-
- md_ds_sg_id = tvb_get_ntohs (tvb, 0);
-
- col_add_fstr (pinfo->cinfo, COL_INFO, "Bonded Ranging Request: MD-DS-SG-ID = %u (0x%X)",
- md_ds_sg_id, md_ds_sg_id );
-
- bintrngreq_item = proto_tree_add_item(tree, proto_docsis_bintrngreq, tvb, offset, -1, ENC_NA);
- bintrngreq_tree = proto_item_add_subtree (bintrngreq_item, ett_docsis_bintrngreq);
- proto_tree_add_item (bintrngreq_tree, hf_docsis_bintrngreq_capflags, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item( bintrngreq_tree, hf_docsis_bintrngreq_capflags_frag, tvb, offset, 1, ENC_BIG_ENDIAN );
- proto_tree_add_item( bintrngreq_tree, hf_docsis_bintrngreq_capflags_encrypt, tvb, offset, 1, ENC_BIG_ENDIAN );
- offset++;
- proto_tree_add_item (bintrngreq_tree, hf_docsis_bintrngreq_mddsgid, tvb, offset, 1, ENC_BIG_ENDIAN);
- offset++;
- proto_tree_add_item (bintrngreq_tree, hf_docsis_mgt_down_chid, tvb, offset, 1, ENC_BIG_ENDIAN);
- offset++;
- proto_tree_add_item (bintrngreq_tree, hf_docsis_mgt_upstream_chid, tvb, offset, 1, ENC_BIG_ENDIAN);
-
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_type35ucd(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_type35ucd, MGT_TYPE35UCD);
-}
-
-static int
-dissect_dbcreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *dbcreq_item;
- proto_tree *dbcreq_tree;
- guint32 transid;
- tvbuff_t *next_tvb;
-
- dbcreq_item = proto_tree_add_item(tree, proto_docsis_dbcreq, tvb, 0, -1, ENC_NA);
- dbcreq_tree = proto_item_add_subtree (dbcreq_item, ett_docsis_dbcreq);
- proto_tree_add_item_ret_uint(dbcreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
- proto_tree_add_item( dbcreq_tree, hf_docsis_dbcreq_number_of_fragments, tvb, 2, 1, ENC_BIG_ENDIAN );
- proto_tree_add_item( dbcreq_tree, hf_docsis_dbcreq_fragment_sequence_number, tvb, 3, 1, ENC_BIG_ENDIAN );
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Bonding Change Request: Tran-Id = %u", transid);
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 4);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, dbcreq_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dbcrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *dbcrsp_item;
- proto_tree *dbcrsp_tree;
- guint32 transid, confcode;
- tvbuff_t *next_tvb;
-
- dbcrsp_item = proto_tree_add_item(tree, proto_docsis_dbcrsp, tvb, 0, -1, ENC_NA);
- dbcrsp_tree = proto_item_add_subtree (dbcrsp_item, ett_docsis_dbcrsp);
- proto_tree_add_item_ret_uint(dbcrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
- proto_tree_add_item_ret_uint( dbcrsp_tree, hf_docsis_dbcrsp_conf_code, tvb, 2, 1, ENC_BIG_ENDIAN, &confcode);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Bonding Change Response: Tran-Id = %u (%s)", transid,
- val_to_str_ext (confcode, &docsis_conf_code_ext, "%d"));
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 3);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, dbcrsp_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dbcack (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *dbcack_item;
- proto_tree *dbcack_tree = NULL;
- guint16 transid;
- tvbuff_t *next_tvb;
-
- transid = tvb_get_ntohs (tvb, 0);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "Dynamic Bonding Change Acknowledge: Tran-Id = %u", transid);
-
- dbcack_item = proto_tree_add_item(tree, proto_docsis_dbcack, tvb, 0, -1, ENC_NA);
- dbcack_tree = proto_item_add_subtree (dbcack_item, ett_docsis_dbcack);
- proto_tree_add_item (dbcack_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN);
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 2);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, dbcack_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dpvreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dpvreq_tree;
- guint32 transid, dschan;
-
- it = proto_tree_add_item(tree, proto_docsis_dpvreq, tvb, 0, -1, ENC_NA);
- dpvreq_tree = proto_item_add_subtree (it, ett_docsis_dpvreq);
- proto_tree_add_item_ret_uint (dpvreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
- proto_tree_add_item_ret_uint (dpvreq_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &dschan);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "DOCSIS Path Verify Request: Transaction-Id = %u DS-Ch %d",
- transid, dschan);
-
- proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_flags, tvb, 3, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_us_sf, tvb, 4, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_n, tvb, 8, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_start, tvb, 10, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_end, tvb, 11, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_ts_start, tvb, 12, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvreq_tree, hf_docsis_dpv_ts_end, tvb, 16, 4, ENC_BIG_ENDIAN);
-
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_dpvrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dpvrsp_tree = NULL;
- guint32 transid, dschan;
-
- it = proto_tree_add_item (tree, proto_docsis_dpvrsp, tvb, 0, -1, ENC_NA);
- dpvrsp_tree = proto_item_add_subtree (it, ett_docsis_dpvrsp);
- proto_tree_add_item_ret_uint (dpvrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
- proto_tree_add_item_ret_uint (dpvrsp_tree, hf_docsis_mgt_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN, &dschan);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "DOCSIS Path Verify Response: Transaction-Id = %u DS-Ch %d",
- transid, dschan);
-
- proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_flags, tvb, 3, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_us_sf, tvb, 4, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_n, tvb, 8, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_start, tvb, 10, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_end, tvb, 11, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_ts_start, tvb, 12, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item (dpvrsp_tree, hf_docsis_dpv_ts_end, tvb, 16, 4, ENC_BIG_ENDIAN);
-
- return tvb_captured_length(tvb);
-}
-
-static void
-dissect_cmstatus_tlv (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
-{
- proto_item *it, *tlv_item, *tlv_len_item;
- proto_tree *tlv_tree;
- guint16 pos = 0;
- guint8 type;
- guint32 length;
-
- it = proto_tree_add_item(tree, hf_docsis_cmstatus_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
- tlv_tree = proto_item_add_subtree (it, ett_docsis_cmstatus_tlv);
-
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- type = tvb_get_guint8 (tvb, pos);
- tlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, -1,
- ett_docsis_cmstatus_tlvtlv, &tlv_item,
- val_to_str(type, cmstatus_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (tlv_tree, hf_docsis_cmstatus_type, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_cmstatus_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(tlv_item, length + 2);
-
- switch (type)
- {
- case EVENT_DS_CH_ID:
- if (length == 3)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmstatus_ds_ch_id, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
-
- case EVENT_US_CH_ID:
- if (length == 3)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmstatus_us_ch_id, tvb, pos + 1, 1, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
-
- case EVENT_DSID:
- if (length == 5)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmstatus_dsid, tvb, pos + 1, 3, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
-
- case EVENT_DESCR:
- if (length >= 3 && length <= 82)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmstatus_descr, tvb, pos + 1, length - 2, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- } /* switch */
- pos += length;
- } /* while */
-}
-
-static int
-dissect_cmstatus (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *cmstatus_tree;
- guint32 transid;
- guint8 event_type;
- tvbuff_t* next_tvb;
-
- it = proto_tree_add_item(tree, proto_docsis_cmstatus, tvb, 0, -1, ENC_NA);
- cmstatus_tree = proto_item_add_subtree (it, ett_docsis_cmstatus);
- proto_tree_add_item_ret_uint (cmstatus_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
-
- col_add_fstr (pinfo->cinfo, COL_INFO, "CM-STATUS Report: Transaction ID = %u", transid);
-
- event_type = tvb_get_guint8 (tvb, 2);
- switch (event_type)
- {
- case SEC_CH_MDD_TIMEOUT:
- proto_tree_add_item (cmstatus_tree, hf_docsis_cmstatus_e_t_mdd_t, tvb, 2, 1, ENC_BIG_ENDIAN);
- break;
-
- case QAM_FEC_LOCK_FAILURE:
- proto_tree_add_item (cmstatus_tree, hf_docsis_cmstatus_e_t_qfl_f, tvb, 2, 1, ENC_BIG_ENDIAN);
- break;
-
- case SEQ_OUT_OF_RANGE:
- proto_tree_add_item (cmstatus_tree, hf_docsis_cmstatus_e_t_s_o, tvb, 2, 1, ENC_BIG_ENDIAN);
- break;
-
- case SEC_CH_MDD_RECOVERY:
- proto_tree_add_item (cmstatus_tree, hf_docsis_cmstatus_e_t_mdd_r, tvb, 2, 1, ENC_BIG_ENDIAN);
- break;
-
- case QAM_FEC_LOCK_RECOVERY:
- proto_tree_add_item (cmstatus_tree, hf_docsis_cmstatus_e_t_qfl_r, tvb, 2, 1, ENC_BIG_ENDIAN);
- break;
-
- case T4_TIMEOUT:
- proto_tree_add_item (cmstatus_tree, hf_docsis_cmstatus_e_t_t4_t, tvb, 2, 1, ENC_BIG_ENDIAN);
- break;
-
- case T3_RETRIES_EXCEEDED:
- proto_tree_add_item (cmstatus_tree, hf_docsis_cmstatus_e_t_t3_e, tvb, 2, 1, ENC_BIG_ENDIAN);
- break;
-
- case SUCCESS_RANGING_AFTER_T3_RETRIES_EXCEEDED:
- proto_tree_add_item (cmstatus_tree, hf_docsis_cmstatus_e_t_rng_s, tvb, 2, 1, ENC_BIG_ENDIAN);
- break;
-
- case CM_ON_BATTERY:
- proto_tree_add_item (cmstatus_tree, hf_docsis_cmstatus_e_t_cm_b, tvb, 2, 1, ENC_BIG_ENDIAN);
- break;
-
- case CM_ON_AC_POWER:
- proto_tree_add_item (cmstatus_tree, hf_docsis_cmstatus_e_t_cm_a, tvb, 2, 1, ENC_BIG_ENDIAN);
- break;
- } /* switch */
-
- /* Call Dissector TLV's */
- next_tvb = tvb_new_subset_remaining(tvb, 3);
- dissect_cmstatus_tlv(next_tvb, pinfo, cmstatus_tree);
- return tvb_captured_length(tvb);
-}
-
-static void
-dissect_ds_event(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *event_tree;
- proto_item *event_item, *tlv_len_item;
- int pos = start;
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos);
- event_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_cmctrl_tlv_ds_event, &event_item,
- val_to_str(type, cmctrlreq_ds_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (event_tree, hf_docsis_cmctrl_ds_type, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (event_tree, hf_docsis_cmctrl_ds_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(event_item, length + 2);
-
- switch (type)
- {
- case DS_EVENT_CH_ID:
- if (length == 1)
- {
- proto_tree_add_item (event_tree, hf_docsis_cmctrl_ds_event_ch_id, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DS_EVENT_MASK:
- if (length == 2)
- {
- proto_tree_add_item (event_tree, hf_docsis_cmctrl_ds_event_mask, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- } /* switch */
-
- pos += length;
- } /* while */
-}
-
-static void
-dissect_us_event(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type;
- guint32 length;
- proto_tree *event_tree;
- proto_item *event_item, *tlv_len_item;
- int pos = start;
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos);
- event_tree = proto_tree_add_subtree(tree, tvb, pos, -1,
- ett_docsis_cmctrl_tlv_us_event, &event_item,
- val_to_str(type, cmctrlreq_us_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (event_tree, hf_docsis_cmctrlreq_us_type, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (event_tree, hf_docsis_cmctrlreq_us_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(event_item, length + 2);
-
- switch (type)
- {
- case US_EVENT_CH_ID:
- if (length == 1)
- {
- proto_tree_add_item (event_tree, hf_docsis_cmctrl_us_event_ch_id, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case US_EVENT_MASK:
- if (length == 2)
- {
- proto_tree_add_item (event_tree, hf_docsis_cmctrl_us_event_mask, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- } /* switch */
- pos += length;
- } /* while */
-}
-
-static void
-dissect_cmctrlreq_tlv(tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
-{
- proto_item *it, *tlv_item, *tlv_len_item;
- proto_tree *tlv_tree;
- guint16 pos = 0;
- guint8 type;
- guint32 length;
-
- it = proto_tree_add_item(tree, hf_docsis_cmctrlreq_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
- tlv_tree = proto_item_add_subtree (it, ett_docsis_cmctrlreq_tlv);
-
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- type = tvb_get_guint8 (tvb, pos);
- tlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, -1,
- ett_docsis_cmctrlreq_tlvtlv, &tlv_item,
- val_to_str(type, cmctrlreq_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (tlv_tree, hf_docsis_cmctrlreq_type, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_cmctrlreq_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(tlv_item, length + 2);
-
- switch (type)
- {
- case CM_CTRL_MUTE:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmctrl_tlv_mute, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CM_CTRL_MUTE_TIMEOUT:
- if (length == 4 || length == 1) /* response TLV always with len 1 */
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmctrl_tlv_mute_timeout, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CM_CTRL_REINIT:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmctrl_tlv_reinit, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CM_CTRL_DISABLE_FWD:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmctrl_tlv_disable_fwd, tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CM_CTRL_DS_EVENT:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmctrl_tlv_ds_event, tvb, pos, length, ENC_NA);
- }
- else
- {
- dissect_ds_event(tvb, pinfo, tlv_tree, pos, length);
- }
- break;
- case CM_CTRL_US_EVENT:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmctrl_tlv_us_event, tvb, pos, length, ENC_NA);
- }
- else
- {
- dissect_us_event(tvb, pinfo, tlv_tree, pos, length);
- }
- break;
- case CM_CTRL_EVENT:
- if (length == 2 || length == 1) /* response TLV always with len 1 */
- {
- proto_tree_add_item (tlv_tree, hf_docsis_cmctrl_tlv_event, tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
-
- } /* switch */
-
- pos += length;
- }
-}
-
-static int
-dissect_cmctrlreq(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *cmctrlreq_tree;
- guint32 transid;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item (tree, proto_docsis_cmctrlreq, tvb, 0, -1, ENC_NA);
- cmctrlreq_tree = proto_item_add_subtree (it, ett_docsis_cmctrlreq);
- proto_tree_add_item_ret_uint (cmctrlreq_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "CM Control Request: Transaction-Id = %u", transid);
-
- next_tvb = tvb_new_subset_remaining(tvb, 2);
- dissect_cmctrlreq_tlv(next_tvb, pinfo, cmctrlreq_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_cmctrlrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *cmctrlrsp_tree;
- guint32 transid;
- tvbuff_t *next_tvb;
-
- it = proto_tree_add_item(tree, proto_docsis_cmctrlrsp, tvb, 0, -1, ENC_NA);
- cmctrlrsp_tree = proto_item_add_subtree (it, ett_docsis_cmctrlrsp);
- proto_tree_add_item_ret_uint (cmctrlrsp_tree, hf_docsis_mgt_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
-
- col_add_fstr (pinfo->cinfo, COL_INFO,
- "CM Control Response: Transaction-Id = %u", transid);
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 2);
- dissect_cmctrlreq_tlv(next_tvb, pinfo, cmctrlrsp_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_regreqmp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *regreqmp_tree;
- tvbuff_t *next_tvb;
-
- col_set_str(pinfo->cinfo, COL_INFO, "REG-REQ-MP Message:");
-
- it = proto_tree_add_item(tree, proto_docsis_regreqmp, tvb, 0, -1, ENC_NA);
- regreqmp_tree = proto_item_add_subtree (it, ett_docsis_regreqmp);
-
- proto_tree_add_item (regreqmp_tree, hf_docsis_regreqmp_sid, tvb, 0, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item (regreqmp_tree, hf_docsis_regreqmp_number_of_fragments, tvb, 2, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (regreqmp_tree, hf_docsis_regreqmp_fragment_sequence_number, tvb, 3, 1, ENC_BIG_ENDIAN);
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 4);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, regreqmp_tree);
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_regrspmp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *regrspmp_tree;
- tvbuff_t *next_tvb;
-
- col_set_str(pinfo->cinfo, COL_INFO, "REG-RSP-MP Message:");
-
- it = proto_tree_add_item(tree, proto_docsis_regrspmp, tvb, 0, -1, ENC_NA);
- regrspmp_tree = proto_item_add_subtree (it, ett_docsis_regrspmp);
-
- proto_tree_add_item (regrspmp_tree, hf_docsis_regrspmp_sid, tvb, 0, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item (regrspmp_tree, hf_docsis_regrspmp_response, tvb, 2, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (regrspmp_tree, hf_docsis_regrspmp_number_of_fragments, tvb, 3, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (regrspmp_tree, hf_docsis_regrspmp_fragment_sequence_number, tvb, 4, 1, ENC_BIG_ENDIAN);
-
- /* Call Dissector for Appendix C TLV's */
- next_tvb = tvb_new_subset_remaining (tvb, 5);
- call_dissector (docsis_tlv_handle, next_tvb, pinfo, regrspmp_tree);
- return tvb_captured_length(tvb);
-}
-
-static void
-dissect_subcarrier_assignment_range_list(tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, guint16 pos, guint32 len)
-{
- proto_item* type_item;
- guint32 i, subcarrier_assignment_type;
-
- 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);
- proto_tree_add_item (tree, hf_docsis_ocd_tlv_subc_assign_value, tvb, pos, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (tree, hf_docsis_ocd_subc_assign_subc_type, tvb, pos, 1, ENC_BIG_ENDIAN);
- pos++;
-
- switch (subcarrier_assignment_type) {
- case SUBCARRIER_ASSIGNMENT_RANGE_CONT:
- case SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1:
- proto_tree_add_item (tree, hf_docsis_ocd_subc_assign_range, tvb, pos, 4, ENC_BIG_ENDIAN);
- break;
- case SUBCARRIER_ASSIGNMENT_LIST:
- for (i = 0; i < len/2; ++i) {
- proto_tree_add_item (tree, hf_docsis_ocd_subc_assign_index, tvb, pos, 2, ENC_BIG_ENDIAN);
- pos += 2;
- }
- break;
- default:
- expert_add_info_format(pinfo, type_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown subcarrier assignment type %d", subcarrier_assignment_type);
- break;
- }
-}
-
-static void
-dissect_ocd_tlv (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree)
-{
- proto_item *it, *tlv_item, *tlv_len_item;
- proto_tree *tlv_tree, *tlvtlv_tree;
- guint16 pos = 0;
- guint8 type;
- guint32 length;
-
- it = proto_tree_add_item(tree, hf_docsis_ocd_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
- tlv_tree = proto_item_add_subtree (it, ett_docsis_ocd_tlv);
-
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- type = tvb_get_guint8 (tvb, pos);
- tlvtlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, -1,
- ett_docsis_ocd_tlvtlv, &tlv_item,
- val_to_str(type, ocd_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (tlvtlv_tree, hf_docsis_ocd_type, tvb, pos, 1, type);
- pos++;
- tlv_len_item = proto_tree_add_item_ret_uint (tlvtlv_tree, hf_docsis_ocd_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(tlv_item, length + 2);
-
- switch (type)
- {
- case DISCRETE_FOURIER_TRANSFORM_SIZE:
- if (length == 1)
- {
- proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_four_trans_size, tvb, pos, 1, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CYCLIC_PREFIX:
- if (length == 1)
- {
- proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_cycl_pref, tvb, pos, 1, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case ROLL_OFF:
- if (length == 1)
- {
- proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_roll_off, tvb, pos, 1, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case OFDM_SPECTRUM_LOCATION:
- if (length == 4)
- {
- proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_ofdm_spec_loc, tvb, pos, 4, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TIME_INTERLEAVING_DEPTH:
- if (length == 1)
- {
- proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_time_int_depth, tvb, pos, 1, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SUBCARRIER_ASSIGNMENT_RANGE_LIST:
- if (length >= 5)
- {
- dissect_subcarrier_assignment_range_list(tvb, pinfo, tlvtlv_tree, pos, length);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PRIMARY_CAPABILITY_INDICATOR:
- if (length == 1)
- {
- proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_prim_cap_ind, tvb, pos, 1, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (tlvtlv_tree, hf_docsis_ocd_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
- break;
- } /* switch */
- pos += length;
- } /* while */
-}
-
-static int
-dissect_ocd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *ocd_tree;
- tvbuff_t *next_tvb;
- guint32 downstream_channel_id, configuration_change_count;
-
- it = proto_tree_add_item(tree, proto_docsis_ocd, tvb, 0, -1, ENC_NA);
- ocd_tree = proto_item_add_subtree (it, ett_docsis_ocd);
-
- proto_tree_add_item_ret_uint (ocd_tree, hf_docsis_mgt_down_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
- proto_tree_add_item_ret_uint (ocd_tree, hf_docsis_ocd_ccc, tvb, 1, 1, ENC_BIG_ENDIAN, &configuration_change_count);
-
- col_add_fstr (pinfo->cinfo, COL_INFO, "OCD: DS CH ID: %u, CCC: %u", downstream_channel_id, configuration_change_count);
-
- /* Call Dissector TLV's */
- next_tvb = tvb_new_subset_remaining(tvb, 2);
- dissect_ocd_tlv(next_tvb, pinfo, ocd_tree);
-
- return tvb_captured_length(tvb);
-}
-
-static void
-dissect_dpd_subcarrier_assignment_range_list(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, guint pos, guint len)
-{
- guint32 i, subcarrier_assignment_type;
- proto_item* type_item;
- guint modulation;
-
- 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);
- proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_value, tvb, pos, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_reserved, tvb, pos, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item_ret_uint (tree, hf_docsis_dpd_tlv_subc_assign_modulation, tvb, pos, 1, ENC_BIG_ENDIAN, &modulation);
- col_append_str(pinfo->cinfo, COL_INFO, val_to_str(modulation, docsis_dpd_subc_assign_modulation_str, "%s"));
- pos++;
-
- switch (subcarrier_assignment_type)
- {
- case SUBCARRIER_ASSIGNMENT_RANGE_CONT:
- case SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1:
- proto_tree_add_item (tree, hf_docsis_dpd_subc_assign_range, tvb, pos, 4, ENC_BIG_ENDIAN);
- break;
- case SUBCARRIER_ASSIGNMENT_LIST:
- for (i = 0; i < len/2; ++i) {
- proto_tree_add_item (tree, hf_docsis_dpd_subc_assign_index, tvb, pos, 2, ENC_BIG_ENDIAN);
- pos += 2;
- }
- break;
- default:
- expert_add_info_format(pinfo, type_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown subcarrier assignment type: %u", subcarrier_assignment_type);
- break;
- }
-}
-
-static void
-dissect_dpd_subcarrier_assignment_vector(tvbuff_t * tvb, proto_tree * tree, guint start, guint len)
-{
- guint32 subcarrier_assignment_vector_oddness;
- guint vector_index;
-
- 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);
- proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_reserved, tvb, start, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_subc_start, tvb, start, 2, ENC_BIG_ENDIAN);
-
- for(vector_index = 0; vector_index < len; ++vector_index)
- {
- proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_modulation_odd, tvb, start + 2 + vector_index, 1, ENC_BIG_ENDIAN);
- if (!((vector_index == len -1) && subcarrier_assignment_vector_oddness))
- {
- proto_tree_add_item (tree, hf_docsis_dpd_tlv_subc_assign_vector_modulation_even, tvb, start + 2 + vector_index, 1, ENC_BIG_ENDIAN);
- }
- }
-}
-
-
-static void
-dissect_dpd_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
-{
- proto_item *it, *tlv_item, *tlv_len_item;
- proto_tree *tlv_tree;
- guint pos = 0;
- guint length;
- guint8 type;
- guint first_subc_assign_list = 1;
-
- it = proto_tree_add_item(tree, hf_docsis_dpd_tlv_data, tvb, 0, tvb_reported_length(tvb), ENC_NA);
- tlv_tree = proto_item_add_subtree (it, ett_docsis_dpd_tlv);
-
- while (tvb_reported_length_remaining(tvb, pos) > 0)
- {
- type = tvb_get_guint8 (tvb, pos);
- tlv_tree = proto_tree_add_subtree(tlv_tree, tvb, pos, -1,
- ett_docsis_dpd_tlvtlv, &tlv_item,
- val_to_str(type, dpd_tlv_vals,
- "Unknown TLV (%u)"));
- proto_tree_add_uint (tlv_tree, hf_docsis_dpd_type, tvb, pos, 1, type);
- pos++;
- if (type != SUBCARRIER_ASSIGNMENT_VECTOR)
- {
- tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dpd_length, tvb, pos, 1, ENC_NA, &length);
- pos++;
- proto_item_set_len(tlv_item, length + 2);
- }
-
- switch (type)
- {
- case SUBCARRIER_ASSIGNMENT_RANGE_LIST:
- if (length >= 5)
- {
- if(first_subc_assign_list) {
- col_append_str(pinfo->cinfo, COL_INFO, ", Modulation: ");
- first_subc_assign_list = 0;
- } else {
- col_append_str(pinfo->cinfo, COL_INFO, " | ");
- }
- dissect_dpd_subcarrier_assignment_range_list(tvb, pinfo, tlv_tree, pos, length);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SUBCARRIER_ASSIGNMENT_VECTOR:
- /*FOR THIS TYPE, LENGTH IS 2 BYTES INSTEAD OF 1 */
- tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dpd_length, tvb, pos, 2, ENC_BIG_ENDIAN, &length);
- pos += 2;
- proto_item_set_len(tlv_item, length + 2);
- if (length >=2)
- {
- dissect_dpd_subcarrier_assignment_vector(tvb, tlv_tree, pos, length);
- }
- else
- {
- expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_mgmt_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (tlv_tree, hf_docsis_dpd_tlv_unknown, tvb, pos - 2, length+2, ENC_NA);
- expert_add_info_format(pinfo, tlv_item, &ei_docsis_mgmt_tlvtype_unknown, "Unknown TLV: %u", type);
- break;
- } /* switch */
- pos += length;
- } /* while */
-}
-
-static int
-dissect_dpd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *dpd_tree;
- tvbuff_t *next_tvb;
-
- guint32 downstream_channel_id, profile_identifier, configuration_change_count;
-
- it = proto_tree_add_item(tree, proto_docsis_dpd, tvb, 0, -1, ENC_NA);
- dpd_tree = proto_item_add_subtree (it, ett_docsis_dpd);
- proto_tree_add_item_ret_uint (dpd_tree, hf_docsis_mgt_down_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &downstream_channel_id);
- proto_tree_add_item_ret_uint (dpd_tree, hf_docsis_dpd_prof_id, tvb, 1, 1, ENC_BIG_ENDIAN, &profile_identifier);
- proto_tree_add_item_ret_uint (dpd_tree, hf_docsis_dpd_ccc, tvb, 2, 1, ENC_BIG_ENDIAN, &configuration_change_count);
-
- 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);
-
- /* Call Dissector TLV's */
- next_tvb = tvb_new_subset_remaining(tvb, 3);
- dissect_dpd_tlv(next_tvb, pinfo, dpd_tree);
-
- return tvb_captured_length(tvb);
-}
-
-static int
-dissect_type51ucd(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- return dissect_any_ucd(tvb, pinfo, tree, proto_docsis_type51ucd, MGT_TYPE51UCD);
-}
-
-static int
-dissect_macmgmt (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- guint32 type, version, msg_len;
- proto_item *mgt_hdr_it;
- proto_tree *mgt_hdr_tree;
- tvbuff_t *payload_tvb;
-
- col_set_str (pinfo->cinfo, COL_PROTOCOL, "DOCSIS MGMT");
-
- col_clear(pinfo->cinfo, COL_INFO);
-
- set_address_tvb (&pinfo->dl_src, AT_ETHER, 6, tvb, 6);
- copy_address_shallow(&pinfo->src, &pinfo->dl_src);
- set_address_tvb (&pinfo->dl_dst, AT_ETHER, 6, tvb, 0);
- copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
-
- mgt_hdr_it = proto_tree_add_item (tree, proto_docsis_mgmt, tvb, 0, 20, ENC_NA);
- mgt_hdr_tree = proto_item_add_subtree (mgt_hdr_it, ett_docsis_mgmt);
- proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_dst_addr, tvb, 0, 6, ENC_NA);
- proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_src_addr, tvb, 6, 6, ENC_NA);
- proto_tree_add_item_ret_uint (mgt_hdr_tree, hf_docsis_mgt_msg_len, tvb, 12, 2, ENC_BIG_ENDIAN, &msg_len);
- proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_dsap, tvb, 14, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_ssap, tvb, 15, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_control, tvb, 16, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item_ret_uint (mgt_hdr_tree, hf_docsis_mgt_version, tvb, 17, 1, ENC_BIG_ENDIAN, &version);
- proto_tree_add_item_ret_uint (mgt_hdr_tree, hf_docsis_mgt_type, tvb, 18, 1, ENC_BIG_ENDIAN, &type);
- proto_tree_add_item (mgt_hdr_tree, hf_docsis_mgt_rsvd, tvb, 19, 1, ENC_BIG_ENDIAN);
-
- /* Code to Call subdissector */
- /* sub-dissectors are based on the type field */
- payload_tvb = tvb_new_subset_length (tvb, 20, msg_len - 6);
-
- /* Special case: map needs version. Two types of MAPs exist, with some difference in encoding: MAPv1 and MAPv5. See also DOCSIS3.1 MULPI spec */
- if (type == MGT_MAP) {
- if (!dissector_try_uint(docsis_mgmt_dissector_table, 256*version + type, payload_tvb, pinfo, tree)) {
- call_data_dissector(payload_tvb, pinfo, tree);
- }
- } else {
- if (!dissector_try_uint(docsis_mgmt_dissector_table, type, payload_tvb, pinfo, tree)) {
- call_data_dissector(payload_tvb, pinfo, tree);
- }
- }
-
- return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_mgmt (void)
-{
- static hf_register_info hf[] = {
- /* Sync Message */
- {&hf_docsis_sync_cmts_timestamp,
- {"CMTS Timestamp", "docsis_sync.cmts_timestamp",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Sync CMTS Timestamp", HFILL}
- },
- /* UCD */
- {&hf_docsis_ucd_config_ch_cnt,
- {"Config Change Count", "docsis_ucd.confcngcnt",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Configuration Change Count", HFILL}
- },
- {&hf_docsis_ucd_mini_slot_size,
- {"Mini Slot Size (6.25us TimeTicks)", "docsis_ucd.mslotsize",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_type,
- {"Type", "docsis_ucd.type",
- FT_UINT8, BASE_DEC, VALS(channel_tlv_vals), 0x0,
- "Channel TLV type", HFILL}
- },
- {&hf_docsis_ucd_length,
- {"Length", "docsis_ucd.length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Channel TLV length", HFILL}
- },
- {&hf_docsis_ucd_burst_type,
- {"Type", "docsis_ucd.burst.tlvtype",
- FT_UINT8, BASE_DEC, VALS(burst_tlv_vals), 0x0,
- "Burst TLV type", HFILL}
- },
- {&hf_docsis_ucd_burst_length,
- {"Length", "docsis_ucd.burst.tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Burst TLV length", HFILL}
- },
- {&hf_docsis_ucd_symbol_rate,
- {"Symbol Rate (ksym/sec)", "docsis_ucd.symrate",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Symbol Rate", HFILL}
- },
- {&hf_docsis_ucd_frequency,
- {"Frequency (Hz)", "docsis_ucd.freq",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Upstream Center Frequency", HFILL}
- },
- {&hf_docsis_ucd_preamble_pat,
- {"Preamble Pattern", "docsis_ucd.preamble",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Preamble Superstring", HFILL}
- },
- {&hf_docsis_ucd_ext_preamble_pat,
- {"Extended Preamble Pattern", "docsis_ucd.extpreamble",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Extended Preamble Superstring", HFILL}
- },
- {&hf_docsis_ucd_scdma_mode_enabled,
- {"S-CDMA Mode Enabled", "docsis_ucd.scdma",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_scdma_spreading_interval,
- {"SCDMA Spreading Interval", "docsis_ucd.scdmaspreadinginterval",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_scdma_codes_per_mini_slot,
- {"SCDMA Codes per mini slot", "docsis_ucd.scdmacodesperminislot",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_scdma_active_codes,
- {"SCDMA Active Codes", "docsis_ucd.scdmaactivecodes",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_scdma_code_hopping_seed,
- {"SCDMA Code Hopping Seed", "docsis_ucd.scdmacodehoppingseed",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_scdma_us_ratio_num,
- {"SCDMA US Ratio Numerator", "docsis_ucd.scdmausrationum",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_scdma_us_ratio_denom,
- {"SCDMA US Ratio Denominator", "docsis_ucd.scdmausratiodenom",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_scdma_timestamp_snapshot,
- {"SCDMA Timestamp Snapshot", "docsis_ucd.scdmatimestamp",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_maintain_power_spectral_density,
- {"Maintain Power Spectral Density", "docsis_ucd.maintpower",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_ranging_required,
- {"Ranging Required", "docsis_ucd.rangingreq",
- FT_UINT8, BASE_DEC, VALS (ranging_req_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_max_scheduled_codes,
- {"S-CDMA Max Scheduled Codes", "docsis_ucd.scdmamaxcodes",
- FT_UINT8, BASE_DEC, VALS (max_scheduled_codes_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_rnghoff_cm,
- {"Ranging Hold-Off (CM)","docsis_ucd.rnghoffcm",
- FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x1,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_rnghoff_erouter,
- {"Ranging Hold-Off (eRouter)",
- "docsis_ucd.rnghofferouter",
- FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x2,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_rnghoff_emta,
- {"Ranging Hold-Off (eMTA or EDVA)",
- "docsis_ucd.rnghoffemta",
- FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x4,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_rnghoff_estb,
- {"Ranging Hold-Off (DSG/eSTB)",
- "docsis_ucd.rnghoffestb",
- FT_BOOLEAN, 32, TFS(&tfs_allow_inhibit), 0x8,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_rnghoff_rsvd,
- {"Reserved",
- "docsis_ucd.rnghoffrsvd",
- FT_UINT32, BASE_HEX, NULL, 0xFFF0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_rnghoff_id_ext,
- {"CM Ranging Class ID Extension",
- "docsis_ucd.rngidext",
- FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_chan_class_id_cm,
- {"Channel Class ID (CM)","docsis_ucd.classidcm",
- FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x1,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_chan_class_id_erouter,
- {"Channel Class ID (eRouter)",
- "docsis_ucd.classiderouter",
- FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x2,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_chan_class_id_emta,
- {"Channel Class ID (eMTA or EDVA)",
- "docsis_ucd.classidemta",
- FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x4,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_chan_class_id_estb,
- {"Channel Class ID (DSG/eSTB)",
- "docsis_ucd.classidestb",
- FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x8,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_chan_class_id_rsvd,
- {"Reserved",
- "docsis_ucd.classidrsvd",
- FT_UINT32, BASE_HEX, NULL, 0xFFF0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_chan_class_id_id_ext,
- {"CM Ranging Class ID Extension",
- "docsis_ucd.classidext",
- FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_subc_excl_band,
- {"UCD Change Indicator Bitmask: Subcarrier Exclusion Band TLV", "docsis_ucd.burst.ucd_change_ind_bitmask_subc_excl_band",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x01,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_unused_subc,
- {"UCD Change Indicator Bitmask: Unused Subcarrier Specification TLV", "docsis_ucd.burst.ucd_change_ind_bitmask_unused_subc",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x02,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_other_subc,
- {"UCD Change Indicator Bitmask: Other than Subcarrier Exclusion Band and Unused Subcarrier Specification TLV", "docsis_ucd.burst.ucd_change_ind_bitmask_other_subc",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x04,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc5,
- {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC5", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc5",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x08,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc6,
- {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC6", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc6",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x10,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc9,
- {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC9", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc9",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x20,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc10,
- {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC10", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc10",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x40,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc11,
- {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC11", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc11",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x80,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc12,
- {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC12", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc12",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x01,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc13,
- {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC13", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc13",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x02,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_burst_attr_iuc3_or_4,
- {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC3 or IUC4", "docsis_ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc3_or_4",
- FT_BOOLEAN, 8, TFS(&tfs_ucd_change_ind_vals), 0x04,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_change_ind_bitmask_reserved,
- {"UCD Change Indicator Bitmask: Reserved", "docsis_ucd.burst.ucd_change_ind_bitmask_reserved",
- FT_UINT8, BASE_HEX, NULL, 0xF8,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_ofdma_timestamp_snapshot,
- {"OFDMA Timestamp Snapshot", "docsis_ucd.ofdma_timestamp_snapshot",
- FT_BYTES, BASE_NONE, NULL, 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_ofdma_cyclic_prefix_size,
- {"OFDMA Cyclic Prefix Size", "docsis_ucd.ofdma_cyclic_prefix_size",
- FT_UINT8, BASE_DEC, VALS(ofdma_cyclic_prefix_size_vals), 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_ofdma_rolloff_period_size,
- {"OFDMA Rolloff Period Size", "docsis_ucd.ofdma_rolloff_period_size",
- FT_UINT8, BASE_DEC, VALS(ofdma_rolloff_period_size_vals), 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_subc_spacing,
- {"Subcarrier Spacing", "docsis_ucd.subc_spacing",
- FT_UINT8, BASE_DEC, VALS(subc_spacing_vals), 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_cent_freq_subc0,
- {"Center Frequency of Subcarrier 0", "docsis_ucd.cent_freq_subc0",
- FT_UINT8, BASE_DEC, NULL, 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_subcarrier_range,
- {"Subcarrier range", "docsis_ucd.subc_range",
- FT_UINT32, BASE_CUSTOM, CF_FUNC(subc_assign_range), 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_symb_ofdma_frame,
- {"Symbols in OFDMA frame", "docsis_ucd.symb_ofdma_frame",
- FT_UINT8, BASE_DEC, NULL, 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_rand_seed,
- {"Randomization Seed", "docsis_ucd.rand_seed",
- FT_BYTES, BASE_NONE, NULL, 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_iuc,
- {"Interval Usage Code", "docsis_ucd.iuc",
- FT_UINT8, BASE_DEC, VALS (iuc_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_burst_mod_type,
- {"Modulation Type", "docsis_ucd.burst.modtype",
- FT_UINT8, BASE_DEC, VALS (mod_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_burst_diff_encoding,
- {"Differential Encoding", "docsis_ucd.burst.diffenc",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_burst_preamble_len,
- {"Preamble Length (Bits)", "docsis_ucd.burst.preamble_len",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_burst_preamble_val_off,
- {"Preamble Offset (Bits)", "docsis_ucd.burst.preamble_off",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_burst_fec,
- {"FEC (T)", "docsis_ucd.burst.fec",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "FEC (T) Codeword Parity Bits = 2^T", HFILL}
- },
- {&hf_docsis_burst_fec_codeword,
- {"FEC Codeword Info bytes (k)", "docsis_ucd.burst.fec_codeword",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_burst_scrambler_seed,
- {"Scrambler Seed", "docsis_ucd.burst.scrambler_seed",
- FT_UINT16, BASE_HEX, NULL, 0x0,
- "Burst Descriptor", HFILL}
- },
- {&hf_docsis_burst_max_burst,
- {"Max Burst Size (Minislots)", "docsis_ucd.burst.maxburst",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_burst_guard_time,
- {"Guard Time Size (Symbol Times)", "docsis_ucd.burst.guardtime",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Guard Time Size", HFILL}
- },
- {&hf_docsis_burst_last_cw_len,
- {"Last Codeword Length", "docsis_ucd.burst.last_cw_len",
- FT_UINT8, BASE_DEC, VALS (last_cw_len_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_burst_scrambler_onoff,
- {"Scrambler On/Off", "docsis_ucd.burst.scrambleronoff",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_rs_int_depth,
- {"RS Interleaver Depth", "docsis_ucd.burst.rsintdepth",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "R-S Interleaver Depth", HFILL}
- },
- {&hf_docsis_rs_int_block,
- {"RS Interleaver Block Size", "docsis_ucd.burst.rsintblock",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "R-S Interleaver Block", HFILL}
- },
- {&hf_docsis_preamble_type,
- {"Preamble Type", "docsis_ucd.burst.preambletype",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_scdma_scrambler_onoff,
- {"Scrambler On/Off", "docsis_ucd.burst.scdmascrambleronoff",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
- "SCDMA Scrambler On/Off", HFILL}
- },
- {&hf_docsis_ucd_scdma_codes_per_subframe,
- {"SCDMA Codes per Subframe", "docsis_ucd.burst.scdmacodespersubframe",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_scdma_framer_int_step_size,
- {"SCDMA Framer Interleaving Step Size", "docsis_ucd.burst.scdmaframerintstepsize",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_tcm_enabled,
- {"TCM Enabled", "docsis_ucd.burst.tcmenabled",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_active_code_hopping,
- {"S-CDMA Selection Mode for Active Codes and Code Hopping", "docsis_ucd.selectcodehop",
- FT_UINT8, BASE_DEC, VALS (tlv20_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_scdma_selection_active_codes,
- {"S-CDMA Selection String for Active Codes", "docsis_ucd.selectcode",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_higher_ucd_for_same_ucid,
- {"Higher UCD for the same UCID", "docsis_ucd.highucdpresent",
- FT_BOOLEAN, 8, TFS(&type35ucd_tfs_present_not_present), 0x1,
- NULL, HFILL}
- },
- {&hf_docsis_ucd_higher_ucd_for_same_ucid_resv,
- {"Reserved", "docsis_ucd.highucdresv",
- FT_UINT8, BASE_HEX, NULL, 0xFE,
- NULL, HFILL}
- },
- {&hf_docsis_subc_init_rang,
- {"Subcarriers (Nir) Initial Ranging", "docsis_ucd.burst.subc_init_rang",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_subc_fine_rang,
- {"Subcarriers (Nfr) Fine Ranging", "docsis_ucd.burst.subc_fine_rang",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_ofdma_prof_mod_order,
- {"OFDMA Profile: modulation", "docsis_ucd.burst.ofma_prof_mod_order",
- FT_UINT8, BASE_DEC, VALS(ofdma_prof_mod_order), 0xF0,
- NULL, HFILL}
- },
- {&hf_docsis_ofdma_prof_pilot_pattern,
- {"OFDMA Profile: pilot pattern", "docsis_ucd.burst.ofma_prof_pilot_pattern",
- FT_UINT8, BASE_DEC, NULL, 0x0F,
- NULL, HFILL}
- },
- {&hf_docsis_ofdma_prof_num_add_minislots,
- {"OFDMA Profile: Additional Minislots that have identical bit-loading and pilot pattern index", "docsis_ucd.burst.ofma_prof_add_minislots",
- FT_UINT8, BASE_DEC, NULL, 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_ofdma_ir_pow_ctrl_start_pow,
- {"OFDMA IR Power Control Starting Power Level", "docsis_ucd.burst.ofma_ir_pow_ctrl_start_pow",
- FT_UINT8, BASE_CUSTOM, CF_FUNC(ofdma_ir_pow_ctrl_start_pow), 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_ofdma_ir_pow_ctrl_step_size,
- {"OFDMA IR Power Control Step Size", "docsis_ucd.burst.ofma_ir_pow_ctrl_step_size",
- FT_UINT8, BASE_CUSTOM, CF_FUNC(ofdma_ir_pow_ctrl_step_size), 0x00,
- NULL, HFILL}
- },
- /* MAP */
- {&hf_docsis_map_ucd_count,
- {"UCD Count", "docsis_map.ucdcount",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Map UCD Count", HFILL}
- },
- {&hf_docsis_map_numie,
- {"Number of IE's", "docsis_map.numie",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Number of Information Elements", HFILL}
- },
- {&hf_docsis_map_numie_v5,
- {"Number of IE's", "docsis_map.numie",
- FT_UINT16, BASE_DEC, NULL, 0xFF80,
- "Number of Information Elements", HFILL}
- },
- {&hf_docsis_map_rsvd_v5,
- {"Reserved [0x00]", "docsis_map.rsvd",
- FT_UINT8, BASE_HEX, NULL, 0x70,
- "Reserved Byte", HFILL}
- },
- {&hf_docsis_map_cat,
- {"CAT", "docsis_map.cat",
- FT_UINT8, BASE_HEX, NULL, 0x0F,
- NULL, HFILL}
- },
-
- {&hf_docsis_map_alloc_start,
- {"Alloc Start Time (minislots)", "docsis_map.allocstart",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_map_ack_time,
- {"ACK Time (minislots)", "docsis_map.acktime",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_map_rng_start,
- {"Ranging Backoff Start", "docsis_map.rng_start",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_map_rng_end,
- {"Ranging Backoff End", "docsis_map.rng_end",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_map_data_start,
- {"Data Backoff Start", "docsis_map.data_start",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_map_data_end,
- {"Data Backoff End", "docsis_map.data_end",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_map_ie,
- {"Information Element", "docsis_map.ie",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_map_probe_ie,
- {"Probe Information Element", "docsis_map.probe_ie",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_map_rsvd,
- {"Reserved", "docsis_map.rsvd",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- "Reserved Byte", HFILL}
- },
- {&hf_docsis_map_sid,
- {"Service Identifier", "docsis_map.sid",
- FT_UINT32, BASE_DEC, NULL, 0xFFFC0000,
- NULL, HFILL}
- },
- {&hf_docsis_map_iuc,
- {"Interval Usage Code", "docsis_map.iuc",
- FT_UINT32, BASE_DEC, VALS(iuc_vals), 0x0003c000,
- NULL, HFILL}
- },
- {&hf_docsis_map_offset,
- {"Offset", "docsis_map.offset",
- FT_UINT32, BASE_DEC, NULL, 0x00003fff,
- NULL, HFILL}
- },
- {&hf_docsis_map_mer,
- {"MER", "docsis_map.mer",
- FT_BOOLEAN, 32, TFS(&mer_vals), 0x00020000,
- NULL, HFILL}
- },
- {&hf_docsis_map_pw,
- {"PW (Power)", "docsis_map.pw",
- FT_BOOLEAN, 32, TFS(&pw_vals), 0x00010000,
- NULL, HFILL}
- },
- {&hf_docsis_map_eq,
- {"EQ (TX Equalization)", "docsis_map.eq",
- FT_BOOLEAN, 32, TFS(&eq_vals), 0x00008000,
- NULL, HFILL}
- },
- {&hf_docsis_map_st,
- {"St (Stagger)", "docsis_map.st",
- FT_BOOLEAN, 32, TFS(&st_vals), 0x00004000,
- NULL, HFILL}
- },
- {&hf_docsis_map_probe_frame,
- {"Probe Frame", "docsis_map.probe_frame",
- FT_UINT32, BASE_DEC, NULL, 0x00003000,
- NULL, HFILL}
- },
- {&hf_docsis_map_symbol_in_frame,
- {"Symbol in Frame", "docsis_map.symbol_in_frame",
- FT_UINT32, BASE_DEC, NULL, 0x00000fc0,
- NULL, HFILL}
- },
- {&hf_docsis_map_start_subc,
- {"Start Subc", "docsis_map.start_subc",
- FT_UINT32, BASE_DEC, NULL, 0x00000038,
- NULL, HFILL}
- },
- {&hf_docsis_map_subc_skip,
- {"Subc Skip", "docsis_map.subc_skip",
- FT_UINT32, BASE_DEC, NULL, 0x00000007,
- NULL, HFILL}
- },
-
- /* RNG-REQ */
- {&hf_docsis_rngreq_sid,
- {"Service Identifier", "docsis_rngreq.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_rngreq_pend_compl,
- {"Pending Till Complete", "docsis_rngreq.pendcomp",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Upstream Channel ID", HFILL}
- },
- /* RNG-RSP */
- {&hf_docsis_rngrsp_type,
- {"Type", "docsis_rngrsp.type",
- FT_UINT8, BASE_DEC, VALS(rngrsp_tlv_vals), 0x0,
- "TLV Type", HFILL}
- },
- {&hf_docsis_rngrsp_length,
- {"Length", "docsis_rngrsp.length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "TLV Length", HFILL}
- },
- {&hf_docsis_rngrsp_sid,
- {"Service Identifier", "docsis_rngrsp.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_timing_adj,
- {"Timing Adjust (6.25us/64)", "docsis_rngrsp.timingadj",
- FT_INT32, BASE_DEC, NULL, 0x0,
- "Timing Adjust", HFILL}
- },
- {&hf_docsis_rngrsp_power_adj,
- {"Power Level Adjust (0.25dB units)", "docsis_rngrsp.poweradj",
- FT_INT8, BASE_DEC, NULL, 0x0,
- "Power Level Adjust", HFILL}
- },
- {&hf_docsis_rngrsp_freq_adj,
- {"Offset Freq Adjust (Hz)", "docsis_rngrsp.freqadj",
- FT_INT16, BASE_DEC, NULL, 0x0,
- "Frequency Adjust", HFILL}
- },
- {&hf_docsis_rngrsp_xmit_eq_adj,
- {"Transmit Equalisation Adjust", "docsis_rngrsp.xmit_eq_adj",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Timing Equalisation Adjust", HFILL}
- },
- {&hf_docsis_rngrsp_ranging_status,
- {"Ranging Status", "docsis_rngrsp.rng_stat",
- FT_UINT8, BASE_DEC, VALS (rng_stat_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_down_freq_over,
- {"Downstream Frequency Override (Hz)", "docsis_rngrsp.freq_over",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Downstream Frequency Override", HFILL}
- },
- {&hf_docsis_rngrsp_upstream_ch_over,
- {"Upstream Channel ID Override", "docsis_rngrsp.chid_override",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_dynamic_range_window_upper_edge,
- {"Dynamic Range Window Upper Edge (in units of 0.25 db below the max allowable setting)", "docsis_rngrsp.dynamic_range_window_upper_edge",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Dynamic Range Window Upper EDGE", HFILL}
- },
- {&hf_docsis_rngrsp_tlv_unknown,
- {"Unknown TLV", "docsis_rngrsp.tlv.unknown",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_trans_eq_data,
- {"Transmit equalization data", "docsis_rngrsp.tlv.trans_eq_data",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_trans_eq_enc_lowest_subc,
- {"Lowest Subcarrier for this TLV", "docsis_rngrsp.tlv.trans_eq_enc_lowest_subc",
- FT_UINT24, BASE_DEC, NULL, 0xFFF000,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_trans_eq_enc_highest_subc,
- {"Highest Subcarrier for this TLV", "docsis_rngrsp.tlv.trans_eq_enc_highest_subc",
- FT_UINT24, BASE_DEC, NULL, 0x0FFF,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_trans_eq_enc_coef_real,
- {"Coefficient (real)", "docsis_rngrsp.tlv.trans_eq_enc_coef_real",
- FT_INT16, BASE_CUSTOM, CF_FUNC(two_compl_frac), 0x000,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_trans_eq_enc_coef_imag,
- {"Coefficient (imag)", "docsis_rngrsp.tlv.trans_eq_enc_coef_imag",
- FT_INT16, BASE_CUSTOM, CF_FUNC(two_compl_frac), 0x000,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_commanded_power_data,
- {"Commanded Power Data", "docsis_rngrsp.tlv.comm_pwr_data",
- FT_BYTES, BASE_NONE, NULL, 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_commanded_power_dynamic_range_window,
- {"Dynamic Range Window", "docsis_rngrsp.tlv.comm_pwr_dyn_range_window",
- FT_INT8, BASE_DEC, NULL, 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_commanded_power_ucid,
- {"UCID", "docsis_rngrsp.tlv.comm_pwr_ucid",
- FT_INT8, BASE_DEC, NULL, 0x00,
- NULL, HFILL}
- },
- {&hf_docsis_rngrsp_commanded_power_trans_pow_lvl,
- {"Transmit Power Level (quarter dBmV)", "docsis_rngrsp.tlv.comm_pwr_trans_pow_lvl",
- FT_INT16, BASE_DEC, NULL, 0x00,
- NULL, HFILL}
- },
-
- /* REG_REQ */
- {&hf_docsis_regreq_sid,
- {"Service Identifier", "docsis_regreq.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- /* REG_RSP */
- {&hf_docsis_regrsp_sid,
- {"Service Identifier", "docsis_regrsp.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_regrsp_response,
- {"Response Code", "docsis_regrsp.respnse",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- NULL, HFILL}
- },
- /* BPKM */
- {&hf_docsis_bpkm_code,
- {"BPKM Code", "docsis_bpkm.code",
- FT_UINT8, BASE_DEC, VALS (code_field_vals), 0x0,
- "BPKM Request Message", HFILL}
- },
- {&hf_docsis_bpkm_ident,
- {"BPKM Identifier", "docsis_bpkm.ident",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr,
- {"BPKM Attributes", "docsis_bpkm.attr",
- FT_BYTES, BASE_NONE|BASE_NO_DISPLAY_VALUE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkm_length,
- {"BPKM Length", "docsis_bpkm.length",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_serial_num,
- {"Serial Number", "docsis_bpkm.attr.serialnum",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_manf_id,
- {"Manufacturer Id", "docsis_bpkm.attr.manfid",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_mac_addr,
- {"Mac Address", "docsis_bpkm.attr.macaddr",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_rsa_pub_key,
- {"RSA Public Key", "docsis_bpkm.attr.rsa_pub_key",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_cm_id,
- {"CM Identification", "docsis_bpkm.attr.cmid",
- FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_display_str,
- {"Display String", "docsis_bpkm.attr.dispstr",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_auth_key,
- {"Auth Key", "docsis_bpkm.attr.auth_key",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_tek,
- {"Traffic Encryption Key", "docsis_bpkm.attr.tek",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_key_life,
- {"Key Lifetime(s)", "docsis_bpkm.attr.keylife",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_key_seq,
- {"Key Sequence Number", "docsis_bpkm.attr.keyseq",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_hmac_digest,
- {"HMAC Digest", "docsis_bpkm.attr.hmacdigest",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_said,
- {"SAID", "docsis_bpkm.attr.said",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Security Association ID", HFILL}
- },
- {&hf_docsis_bpkmattr_tek_params,
- {"TEK Parameters", "docsis_bpkm.attr.tekparams",
- FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_cbc_iv,
- {"CBC IV", "docsis_bpkm.attr.cbciv",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Cypher Block Chaining", HFILL}
- },
- {&hf_docsis_bpkmattr_error_code,
- {"Error Code", "docsis_bpkm.attr.errcode",
- FT_UINT8, BASE_DEC, VALS (error_code_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_vendor_def,
- {"Vendor Defined", "docsis_bpkm.attr.vendordef",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_ca_cert,
- {"CA Certificate", "docsis_bpkm.attr.cacert",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_cm_cert,
- {"CM Certificate", "docsis_bpkm.attr.cmcert",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_security_cap,
- {"Security Capabilities", "docsis_bpkm.attr.seccap",
- FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_crypto_suite,
- {"Cryptographic Suite", "docsis_bpkm.attr.cryptosuite",
- FT_UINT16, BASE_HEX, VALS(crypto_suite_attr_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_crypto_suite_list,
- {"Cryptographic Suite List", "docsis_bpkm.attr.crypto_suite_lst",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_bpi_version,
- {"BPI Version", "docsis_bpkm.attr.bpiver",
- FT_UINT8, BASE_DEC, VALS (bpi_ver_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_sa_descr,
- {"SA Descriptor", "docsis_bpkm.attr.sadescr",
- FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_sa_type,
- {"SA Type", "docsis_bpkm.attr.satype",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_sa_query,
- {"SA Query", "docsis_bpkm.attr.saquery",
- FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_sa_query_type,
- {"SA Query Type", "docsis_bpkm.attr.saquery_type",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_ip_address,
- {"IP Address", "docsis_bpkm.attr.ipaddr",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_download_param,
- {"Download Parameters", "docsis_bpkm.attr.dnld_params",
- FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bpkmattr_type,
- {"Type", "docsis_bpkm.attr.type",
- FT_UINT8, BASE_DEC, VALS(bpkmattr_tlv_vals), 0x0,
- "TLV Type", HFILL}
- },
- {&hf_docsis_bpkmattr_length,
- {"Length", "docsis_bpkm.attr.length",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "TLV Length", HFILL}
- },
- /* REG-ACK */
- {&hf_docsis_regack_sid,
- {"Service Identifier", "docsis_regack.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_regack_response,
- {"Response Code", "docsis_regack.respnse",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- NULL, HFILL}
- },
- /* DAS-RSP */
- {&hf_docsis_dsarsp_response,
- {"Confirmation Code", "docsis_dsarsp.confcode",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dsaack_response,
- {"Confirmation Code", "docsis_dsaack.confcode",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- NULL, HFILL}
- },
- /* DSC-RSP */
- {&hf_docsis_dscrsp_response,
- {"Confirmation Code", "docsis_dscrsp.confcode",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dscack_response,
- {"Confirmation Code", "docsis_dscack.confcode",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- NULL, HFILL}
- },
- /* DSD-REQ */
- {&hf_docsis_dsdreq_rsvd,
- {"Reserved", "docsis_dsdreq.rsvd",
- FT_UINT16, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dsdreq_sfid,
- {"Service Flow ID", "docsis_dsdreq.sfid",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- /* DSD-RSP */
- {&hf_docsis_dsdrsp_confcode,
- {"Confirmation Code", "docsis_dsdrsp.confcode",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dsdrsp_rsvd,
- {"Reserved", "docsis_dsdrsp.rsvd",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- /* DCC-REQ */
- {&hf_docsis_dccreq_type,
- {
- "Type",
- "docsis_dccreq.tlvtype",
- FT_UINT8, BASE_DEC, VALS(dcc_tlv_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_length,
- {
- "Length",
- "docsis_dccreq.tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_tran_id ,
- {
- "Transaction ID",
- "docsis_dccreq.tran_id",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_up_chan_id ,
- {
- "Up Channel ID",
- "docsis_dccreq.up_chan_id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcc_ds_params_subtype,
- {
- "Type",
- "docsis_dccreq.ds_tlvtype",
- FT_UINT8, BASE_DEC, VALS(ds_param_subtlv_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcc_ds_params_length,
- {
- "Length",
- "docsis_dccreq.ds_tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_ds_freq ,
- {
- "Frequency",
- "docsis_dccreq.ds_freq",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_ds_mod_type ,
- {
- "Modulation Type",
- "docsis_dccreq.ds_mod_type",
- FT_UINT8, BASE_DEC, VALS (ds_mod_type_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_ds_sym_rate ,
- {
- "Symbol Rate",
- "docsis_dccreq.ds_sym_rate",
- FT_UINT8, BASE_DEC, VALS (ds_sym_rate_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_ds_intlv_depth_i ,
- {
- "Interleaver Depth I Value",
- "docsis_dccreq.ds_intlv_depth_i",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_ds_intlv_depth_j ,
- {
- "Interleaver Depth J Value",
- "docsis_dccreq.ds_intlv_depth_j",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_ds_chan_id ,
- {
- "Downstream Channel ID",
- "docsis_dccreq.ds_chan_id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_ds_sync_sub ,
- {
- "SYNC Substitution",
- "docsis_dccreq.ds_sync_sub",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_ds_ofdm_block_freq ,
- {
- "OFDM Block Frequency",
- "docsis_dccreq.ds_ofdm_block_freq",
- FT_UINT32, BASE_DEC|BASE_UNIT_STRING, &local_units_hz, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_init_tech ,
- {
- "Initialization Technique",
- "docsis_dccreq.init_tech",
- FT_UINT8, BASE_DEC, VALS (init_tech_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_ucd_sub ,
- {
- "UCD Substitution",
- "docsis_dccreq.ucd_sub",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_said_sub_cur ,
- {
- "SAID Sub - Current Value",
- "docsis_dccreq.said_sub_cur",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_said_sub_new ,
- {
- "SAID Sub - New Value",
- "docsis_dccreq.said_sub_new",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcc_sf_sub_subtype,
- {
- "Type",
- "docsis_dccreq.sf_tlvtype",
- FT_UINT8, BASE_DEC, VALS(sf_sub_subtlv_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcc_sf_sub_length,
- {
- "Length",
- "docsis_dccreq.sf_tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_sf_sfid_cur ,
- {
- "SF Sub - SFID Current Value",
- "docsis_dccreq.sf_sfid_cur",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_sf_sfid_new ,
- {
- "SF Sub - SFID New Value",
- "docsis_dccreq.sf_sfid_new",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_sf_sid_cur ,
- {
- "SF Sub - SID Current Value",
- "docsis_dccreq.sf_sid_cur",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_sf_sid_new ,
- {
- "SF Sub - SID New Value",
- "docsis_dccreq.sf_sid_new",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_sf_unsol_grant_tref ,
- {
- "SF Sub - Unsolicited Grant Time Reference",
- "docsis_dccreq.sf_unsol_grant_tref",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_cmts_mac_addr ,
- {
- "CMTS Mac Address",
- "docsis_dccreq.cmts_mac_addr",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_key_seq_num ,
- {
- "Auth Key Sequence Number",
- "docsis_dccreq.key_seq_num",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccreq_hmac_digest ,
- {
- "HMAC-DigestNumber",
- "docsis_dccreq.hmac_digest",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- /* DCC-RSP */
- {&hf_docsis_dccrsp_conf_code ,
- {
- "Confirmation Code",
- "docsis_dccrsp.conf_code",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccrsp_type,
- {
- "Type",
- "docsis_dccrsp.tlvtype",
- FT_UINT8, BASE_DEC, VALS(dccrsp_tlv_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccrsp_length,
- {
- "Length",
- "docsis_dccrsp.tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcc_cm_jump_subtype,
- {
- "Type",
- "docsis_dccrsp.cm_jump_tlvtype",
- FT_UINT8, BASE_DEC, VALS(cm_jump_subtlv_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcc_cm_jump_length,
- {
- "Length",
- "docsis_dccrsp.cm_jump_tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccrsp_cm_jump_time_length ,
- {
- "Length of Jump",
- "docsis_dccrsp.cm_jump_time_length",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccrsp_cm_jump_time_start ,
- {
- "Start Time of Jump",
- "docsis_dccrsp.cm_jump_time_start",
- FT_UINT64, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccrsp_key_seq_num ,
- {
- "Auth Key Sequence Number",
- "docsis_dccrsp.key_seq_num",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccrsp_hmac_digest ,
- {
- "HMAC-Digest Number",
- "docsis_dccrsp.hmac_digest",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- /* DCC-ACK */
- {&hf_docsis_dccack_type,
- {
- "Type",
- "docsis_dccack.tlvtype",
- FT_UINT8, BASE_DEC, VALS(dccack_tlv_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccack_length,
- {
- "Length",
- "docsis_dccack.tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccack_key_seq_num ,
- {
- "Auth Key Sequence Number",
- "docsis_dccack.key_seq_num",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dccack_hmac_digest ,
- {
- "HMAC-DigestNumber",
- "docsis_dccack.hmac_digest",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- /* INIT_RNG_REQ */
- {&hf_docsis_intrngreq_sid,
- {"Service Identifier", "docsis_intrngreq.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- /* DCD */
- {&hf_docsis_dcd_config_ch_cnt,
- {
- "Configuration Change Count",
- "docsis_dcd.config_ch_cnt",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_num_of_frag,
- {
- "Number of Fragments",
- "docsis_dcd.num_of_frag",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_frag_sequence_num,
- {
- "Fragment Sequence Number",
- "docsis_dcd.frag_sequence_num",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_type,
- {
- "Type",
- "docsis_dcd.tlvtype",
- FT_UINT8, BASE_DEC, VALS(dcd_tlv_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_length,
- {
- "Length",
- "docsis_dcd.tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_down_classifier_subtype,
- {
- "Type",
- "docsis_dcd.down_classifier_tlvtype",
- FT_UINT8, BASE_DEC, VALS(dcd_down_classifier_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_down_classifier_length,
- {
- "Length",
- "docsis_dcd.down_classifier_tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_id,
- {
- "Downstream Classifier Id",
- "docsis_dcd.cfr_id",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_rule_pri,
- {
- "Downstream Classifier Rule Priority",
- "docsis_dcd.cfr_rule_pri",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_ip_subtype,
- {
- "Type",
- "docsis_dcd.cfr_ip_tlvtype",
- FT_UINT8, BASE_DEC, VALS(dcd_cfr_ip_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_ip_length,
- {
- "Length",
- "docsis_dcd.cfr_ip_tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_ip_source_addr,
- {
- "Downstream Classifier IP Source Address",
- "docsis_dcd.cfr_ip_source_addr",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_ip_source_mask,
- {
- "Downstream Classifier IP Source Mask",
- "docsis_dcd.cfr_ip_source_mask",
- FT_IPv4, BASE_NETMASK, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_ip_dest_addr,
- {
- "Downstream Classifier IP Destination Address",
- "docsis_dcd.cfr_ip_dest_addr",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_ip_dest_mask,
- {
- "Downstream Classifier IP Destination Mask",
- "docsis_dcd.cfr_ip_dest_mask",
- FT_IPv4, BASE_NETMASK, NULL, 0x0,
- "Downstream Classifier IP Destination Address",
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_tcpudp_srcport_start,
- {
- "Downstream Classifier IP TCP/UDP Source Port Start",
- "docsis_dcd.cfr_ip_tcpudp_srcport_start",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_tcpudp_srcport_end,
- {
- "Downstream Classifier IP TCP/UDP Source Port End",
- "docsis_dcd.cfr_ip_tcpudp_srcport_end",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_tcpudp_dstport_start,
- {
- "Downstream Classifier IP TCP/UDP Destination Port Start",
- "docsis_dcd.cfr_ip_tcpudp_dstport_start",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfr_tcpudp_dstport_end,
- {
- "Downstream Classifier IP TCP/UDP Destination Port End",
- "docsis_dcd.cfr_ip_tcpudp_dstport_end",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_rule_id,
- {
- "DSG Rule Id",
- "docsis_dcd.rule_id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_rule_pri,
- {
- "DSG Rule Priority",
- "docsis_dcd.rule_pri",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_rule_ucid_list,
- {
- "DSG Rule UCID Range",
- "docsis_dcd.rule_ucid_list",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_clid_subtype,
- {
- "Type",
- "docsis_dcd.clid_tlvtype",
- FT_UINT8, BASE_DEC, VALS(dcd_clid_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_clid_length,
- {
- "Length",
- "docsis_dcd.clid_tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_clid_bcast_id,
- {
- "DSG Rule Client ID Broadcast ID",
- "docsis_dcd.clid_bcast_id",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_clid_known_mac_addr,
- {
- "DSG Rule Client ID Known MAC Address",
- "docsis_dcd.clid_known_mac_addr",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_clid_ca_sys_id,
- {
- "DSG Rule Client ID CA System ID",
- "docsis_dcd.clid_ca_sys_id",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_clid_app_id,
- {
- "DSG Rule Client ID Application ID",
- "docsis_dcd.clid_app_id",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_dsg_rule_subtype,
- {
- "Type",
- "docsis_dcd.rule_tlvtype",
- FT_UINT8, BASE_DEC, VALS(dcd_dsg_rule_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_dsg_rule_length,
- {
- "Length",
- "docsis_dcd.rule_tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_rule_tunl_addr,
- {
- "DSG Rule Tunnel MAC Address",
- "docsis_dcd.rule_tunl_addr",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_rule_cfr_id,
- {
- "DSG Rule Classifier ID",
- "docsis_dcd.rule_cfr_id",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_rule_vendor_spec,
- {
- "DSG Rule Vendor Specific Parameters",
- "docsis_dcd.rule_vendor_spec",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfg_subtype,
- {
- "Type",
- "docsis_dcd.cfg_tlvtype",
- FT_UINT8, BASE_DEC, VALS(dcd_cfg_vals), 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfg_length,
- {
- "Length",
- "docsis_dcd.cfg_tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfg_chan,
- {
- "DSG Configuration Channel",
- "docsis_dcd.cfg_chan",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfg_tdsg1,
- {
- "DSG Initialization Timeout (Tdsg1)",
- "docsis_dcd.cfg_tdsg1",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfg_tdsg2,
- {
- "DSG Operational Timeout (Tdsg2)",
- "docsis_dcd.cfg_tdsg2",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfg_tdsg3,
- {
- "DSG Two-Way Retry Timer (Tdsg3)",
- "docsis_dcd.cfg_tdsg3",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfg_tdsg4,
- {
- "DSG One-Way Retry Timer (Tdsg4)",
- "docsis_dcd.cfg_tdsg4",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- {&hf_docsis_dcd_cfg_vendor_spec,
- {
- "DSG Configuration Vendor Specific Parameters",
- "docsis_dcd.cfg_vendor_spec",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL,
- HFILL
- }
- },
- /* MDD */
- {&hf_docsis_mdd_ccc,
- {"Configuration Change Count", "docsis_mdd.ccc",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Mdd Configuration Change Count", HFILL}
- },
- {&hf_docsis_mdd_number_of_fragments,
- {"Number of Fragments", "docsis_mdd.number_of_fragments",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Mdd Number of Fragments", HFILL}
- },
- {&hf_docsis_mdd_fragment_sequence_number,
- {"Fragment Sequence Number", "docsis_mdd.fragment_sequence_number",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Mdd Fragment Sequence Number", HFILL}
- },
- {&hf_docsis_mdd_current_channel_dcid,
- {"Current Channel DCID", "docsis_mdd.current_channel_dcid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Mdd Current Channel DCID", HFILL}
- },
- {&hf_docsis_mdd_ds_active_channel_list_subtype,
- {"Type", "docsis_mdd.downstream_active_channel_list_tlvtype",
- FT_UINT8, BASE_DEC, VALS(mdd_ds_active_channel_list_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_ds_active_channel_list_length,
- {"Length", "docsis_mdd.downstream_active_channel_list_tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_downstream_active_channel_list_channel_id,
- {"Channel ID", "docsis_mdd.downstream_active_channel_list_channel_id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Mdd Downstream Active Channel List Channel ID", HFILL}
- },
- {&hf_docsis_mdd_downstream_active_channel_list_frequency,
- {"Frequency", "docsis_mdd.downstream_active_channel_list_frequency",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Mdd Downstream Active Channel List Frequency", HFILL}
- },
- {&hf_docsis_mdd_downstream_active_channel_list_annex,
- {"Annex", "docsis_mdd.downstream_active_channel_list_annex",
- FT_UINT8, BASE_DEC, VALS(J83_annex_vals), 0xF0,
- "Mdd Downstream Active Channel List Annex", HFILL}
- },
- {&hf_docsis_mdd_downstream_active_channel_list_modulation_order,
- {"Modulation Order", "docsis_mdd.downstream_active_channel_list_modulation_order",
- FT_UINT8, BASE_DEC, VALS(modulation_order_vals), 0x0F,
- "Mdd Downstream Active Channel List Modulation Order", HFILL}
- },
- {&hf_docsis_mdd_downstream_active_channel_list_primary_capable,
- {"Primary Capable", "docsis_mdd.downstream_active_channel_list_primary_capable",
- FT_UINT8, BASE_DEC, VALS(primary_capable_vals), 0x0,
- "Mdd Downstream Active Channel List Primary Capable", HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_bitmask,
- {"CM-STATUS Event Enable Bitmask", "docsis_mdd.cm_status_event_enable_bitmask",
- FT_UINT16, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_timeout,
- {"MDD Timeout", "docsis_mdd.downstream_active_channel_list_mdd_timeout",
- FT_UINT16, BASE_DEC, NULL, 0x0002,
- "Mdd Downstream Active Channel List MDD Timeout", HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_failure,
- {"QAM/FEC Lock Failure", "docsis_mdd.cm_status_event_enable_bitmask_qam_fec_lock_failure",
- FT_UINT16, BASE_DEC, NULL, 0x0004,
- "Mdd Downstream Active Channel List QAM/FEC Lock Failure", HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_bitmask_mdd_recovery,
- {"MDD Recovery", "docsis_mdd.cm_status_event_enable_bitmask_mdd_recovery",
- FT_UINT16, BASE_DEC, NULL, 0x0010,
- "CM-STATUS event MDD Recovery", HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_bitmask_qam_fec_lock_recovery,
- {"QAM/FEC Lock Recovery", "docsis_mdd.cm_status_event_enable_bitmask_qam_fec_lock_recovery",
- FT_UINT16, BASE_DEC, NULL, 0x0020,
- "CM-STATUS event QAM/FEC Lock Recovery", HFILL}
- },
- {&hf_docsis_mdd_downstream_active_channel_list_map_ucd_transport_indicator,
- {"MAP and UCD transport indicator", "docsis_mdd.downstream_active_channel_list_map_ucd_transport_indicator",
- FT_UINT8, BASE_DEC, VALS(map_ucd_transport_indicator_vals), 0x0,
- "Mdd Downstream Active Channel List MAP and UCD Transport Indicator", HFILL}
- },
- {&hf_docsis_mdd_ofdm_plc_parameters,
- {"OFDM PLC Parameters", "docsis_mdd.ofdm_plc_parameters",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_ofdm_plc_parameters_tukey_raised_cosine_window,
- {"Tukey raised cosine window", "docsis_mdd.ofdm_plc_parameters_tukey_raised_cosine_window",
- FT_UINT8, BASE_DEC, VALS(tukey_raised_cosine_vals), 0x07,
- "OFDM PLC Parameters Tukey raised cosine window", HFILL}
- },
- {&hf_docsis_mdd_ofdm_plc_parameters_cyclic_prefix,
- {"Cyclic prefix", "docsis_mdd.ofdm_plc_parameters_cyclic_prefix",
- FT_UINT8, BASE_DEC, VALS(cyclic_prefix_vals), 0x38,
- "OFDM PLC parameters Cyclic prefix", HFILL}
- },
- {&hf_docsis_mdd_ofdm_plc_parameters_sub_carrier_spacing,
- {"Sub carrier spacing", "docsis_mdd.ofdm_plc_parameters_sub_carrier_spacing",
- FT_UINT8, BASE_DEC, VALS(spacing_vals), 0x40,
- "OFDM PLC parameters Sub carrier spacing", HFILL}
- },
- {&hf_docsis_mdd_up_active_channel_list_subtype,
- {"Type", "docsis_mdd.up_active_channel_list_tlvtype",
- FT_UINT8, BASE_DEC, VALS(mdd_up_active_channel_list_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_up_active_channel_list_length,
- {"Length", "docsis_mdd.up_active_channel_list_tlvlen",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_bitmask_t4_timeout,
- {"T4 timeout", "docsis_mdd.cm_status_event_enable_bitmask_t4_timeout",
- FT_UINT16, BASE_DEC, NULL, 0x0040,
- "CM-STATUS event T4 timeout", HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_bitmask_t3_retries_exceeded,
- {"T3 Retries Exceeded", "docsis_mdd.cm_status_event_enable_bitmask_t3_retries_exceeded",
- FT_UINT16, BASE_DEC, NULL, 0x0080,
- "CM-STATUS event T3 Retries Exceeded", HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded,
- {"Successful Ranging after T3 Retries Exceeded", "docsis_mdd.cm_status_event_enable_bitmask_successful_ranging_after_t3_retries_exceeded",
- FT_UINT16, BASE_DEC, NULL, 0x0100,
- "CM-STATUS event Successful Ranging after T3 Retries Exceeded", HFILL}
- },
- {&hf_docsis_mdd_mac_domain_downstream_service_group_channel_id,
- {"Channel Id", "docsis_mdd.mac_domain_downstream_service_group_channel_id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Mdd Mac Domain Downstream Service Group Channel Id", HFILL}
- },
- {&hf_docsis_mdd_ds_service_group_subtype,
- {"Type", "docsis_mdd.ds_service_group_type",
- FT_UINT8, BASE_DEC, VALS(mdd_ds_service_group_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_ds_service_group_length,
- {"Length", "docsis_mdd.ds_service_group_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_mac_domain_downstream_service_group_md_ds_sg_identifier,
- {"MD-DS-SG Identifier", "docsis_mdd.mac_domain_downstream_service_group_md_ds_sg_identifier",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Mdd Mac Domain Downstream Service Group MD-DS-SG Identifier", HFILL}
- },
- {&hf_docsis_mdd_type,
- {"Type", "docsis_mdd.type",
- FT_UINT8, BASE_DEC, VALS(mdd_tlv_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_length,
- {"Length", "docsis_mdd.length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_downstream_ambiguity_resolution_frequency,
- {"Frequency", "docsis_mdd.downstream_ambiguity_resolution_frequency",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Mdd Downstream Ambiguity Resolution frequency", HFILL}
- },
- {&hf_docsis_mdd_channel_profile_reporting_control_subtype,
- {"Type", "docsis_mdd.channel_profile_reporting_control_type",
- FT_UINT8, BASE_DEC, VALS(mdd_channel_profile_reporting_control_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_channel_profile_reporting_control_length,
- {"Length", "docsis_mdd.channel_profile_reporting_control_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_rpc_center_frequency_spacing,
- {"RPC Center Frequency Spacing", "docsis_mdd.rpc_center_frequency_spacing",
- FT_UINT8, BASE_DEC, VALS(rpc_center_frequency_spacing_vals), 0x0,
- "Mdd RPC Center Frequency Spacing", HFILL}
- },
- {&hf_docsis_mdd_verbose_rcp_reporting,
- {"Verbose RCP reporting", "docsis_mdd.verbose_rpc_reporting",
- FT_UINT8, BASE_DEC, VALS(verbose_rpc_reporting_vals), 0x0,
- "Mdd Verbose RPC Reporting", HFILL}
- },
- {&hf_docsis_mdd_ip_init_param_subtype,
- {"Type", "docsis_mdd.ip_init_param_type",
- FT_UINT8, BASE_DEC, VALS(mdd_ip_init_param_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_ip_init_param_length,
- {"Length", "docsis_mdd.ip_init_param_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_ip_provisioning_mode,
- {"IP Provisioning Mode", "docsis_mdd.ip_provisioning_mode",
- FT_UINT8, BASE_DEC, VALS(ip_provisioning_mode_vals), 0x0,
- "Mdd IP Provisioning Mode", HFILL}
- },
- {&hf_docsis_mdd_pre_registration_dsid,
- {"Pre-registration DSID", "docsis_mdd.pre_registration_dsid",
- FT_UINT24, BASE_DEC, NULL, 0x0FFFFF,
- "Mdd Pre-registration DSID", HFILL}
- },
- {&hf_docsis_mdd_early_authentication_and_encryption,
- {"Early Authentication and Encryption", "docsis_mdd.early_authentication_and_encryption",
- FT_UINT8, BASE_DEC, VALS(eae_vals), 0x0,
- "Mdd Early Authentication and Encryption", HFILL}
- },
- {&hf_docsis_mdd_upstream_active_channel_list_upstream_channel_id,
- {"Upstream Channel Id", "docsis_mdd.upstream_active_channel_list_upstream_channel_id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Mdd Upstream Active Channel List Upstream Channel Id", HFILL}
- },
- {&hf_docsis_mdd_upstream_ambiguity_resolution_channel_list_channel_id,
- {"Channel Id", "docsis_mdd.upstream_ambiguity_resolution_channel_list_channel_id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Mdd Mac Domain Upstream Ambiguity Resolution Channel List Channel Id", HFILL}
- },
- {&hf_docsis_mdd_upstream_frequency_range,
- {"Upstream Frequency Range", "docsis_mdd.upstream_frequency_range",
- FT_UINT8, BASE_DEC, VALS(upstream_frequency_range_vals), 0x0,
- "Mdd Upstream Frequency Range", HFILL}
- },
- {&hf_docsis_mdd_symbol_clock_locking_indicator,
- {"Symbol Clock Locking Indicator", "docsis_mdd.symbol_clock_locking_indicator",
- FT_UINT8, BASE_DEC, VALS(symbol_clock_locking_indicator_vals), 0x0,
- "Mdd Symbol Clock Locking Indicator", HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_control_subtype,
- {"Type", "docsis_mdd.cm_status_event_control_type",
- FT_UINT8, BASE_DEC, VALS(mdd_cm_status_event_control_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_control_length,
- {"Length", "docsis_mdd.cm_status_event_control_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_event_type,
- {"Event Type", "docsis_mdd.event_type",
- FT_UINT8, BASE_DEC, VALS(symbol_cm_status_event_vals), 0x0,
- "Mdd CM-STATUS Event Type", HFILL}
- },
- {&hf_docsis_mdd_maximum_event_holdoff_timer,
- {"Maximum Event Holdoff Timer (units of 20 ms)", "docsis_mdd.maximum_event_holdoff_timer",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Mdd Maximum Event Holdoff Timer", HFILL}
- },
- {&hf_docsis_mdd_maximum_number_of_reports_per_event,
- {"Maximum Number of Reports per Event", "docsis_mdd.maximum_number_of_reports_per_event",
- FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(unique_unlimited), 0x0,
- "Mdd Maximum Number of Reports per Event", HFILL}
- },
- {&hf_docsis_mdd_upstream_transmit_power_reporting,
- {"Upstream Transmit Power Reporting", "docsis_mdd.upstream_transmit_power_reporting",
- FT_UINT8, BASE_DEC, VALS(upstream_transmit_power_reporting_vals), 0x0,
- "Mdd Upstream Transmit Power Reporting", HFILL}
- },
- {&hf_docsis_mdd_dsg_da_to_dsid_subtype,
- {"Type", "docsis_mdd.dsg_da_to_dsid_type",
- FT_UINT8, BASE_DEC, VALS(mdd_cm_dsg_da_to_dsid_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_dsg_da_to_dsid_length,
- {"Length", "docsis_mdd.dsg_da_to_dsid_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_dsg_da_to_dsid_association_da,
- {"Destination Address", "docsis_mdd.dsg_da_to_dsid_association_da",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- "Mdd DSG DA to DSID association Destination Address", HFILL}
- },
- {&hf_docsis_mdd_dsg_da_to_dsid_association_dsid,
- {"DSID", "docsis_mdd.dsg_da_to_dsid_association_dsid",
- FT_UINT24, BASE_DEC, NULL, 0x0FFFFF,
- "Mdd Mdd DSG DA to DSID association DSID", HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events,
- {"CM-STATUS Event Enable Bitmask for Non-Channel-Specific Events", "docsis_mdd.cm_status_event_enable_non_channel_specific_events",
- FT_UINT16, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_sequence_out_of_range,
- {"Sequence out of range", "docsis_mdd.cm_status_event_enable_non_channel_specific_events_sequence_out_of_range",
- FT_UINT16, BASE_DEC, NULL, 0x0008,
- "CM-STATUS event non-channel-event Sequence out of range", HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup,
- {"CM operating on battery backup", "docsis_mdd.cm_status_event_enable_non_channel_specific_events_cm_operating_on_battery_backup",
- FT_UINT16, BASE_DEC, NULL, 0x0200,
- "CM-STATUS event non-channel-event Cm operating on battery backup", HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power,
- {"Returned to AC power", "docsis_mdd.cm_status_event_enable_non_channel_specific_events_cm_returned_to_ac_power",
- FT_UINT16, BASE_DEC, NULL, 0x0400,
- "CM-STATUS event non-channel-event Cm returned to AC power", HFILL}
- },
- {&hf_docsis_mdd_extended_upstream_transmit_power_support,
- { "Extended Upstream Transmit Power Support", "docsis_mdd.extended_upstream_transmit_power_support",
- FT_BOOLEAN, BASE_NONE, TFS(&mdd_tfs_on_off), 0x0,
- "Mdd Extended Upstream Transmit Power Support", HFILL}
- },
- {&hf_docsis_mdd_cmts_major_docsis_version,
- { "CMTS Major DOCSIS Version", "docsis_mdd.cmts_major_docsis_version",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cmts_minor_docsis_version,
- { "CMTS Minor DOCSIS Version", "docsis_mdd.cmts_minor_docsis_version",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_periodic_maintenance_timeout_indicator,
- { "CM periodic maintenance timeout indicator", "docsis_mdd.cm_periodic_maintenance_timeout_indicator",
- FT_UINT8, BASE_DEC, VALS(cm_periodic_maintenance_timeout_indicator_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_dls_broadcast_and_multicast_delivery_method,
- { "DLS Broadcast and Multicast Delivery Method", "docsis_mdd.dls_broadcast_and_multicast_delivery_method",
- FT_UINT8, BASE_DEC, VALS(dls_broadcast_and_multicast_delivery_method_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_ofdm_prof_fail,
- { "Downstream OFDM Profile Failure", "docsis_mdd.cm_status_event_d31_ofdm_prof_fail",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x01,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_prim_down_chan_change,
- { "Primary Downstream Channel Change", "docsis_mdd.cm_status_event_d31_prim_down_chan_change",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x02,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_dpd_mismatch,
- { "DPD Mismatch", "docsis_mdd.cm_status_event_d31_dpd_mismatch",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x04,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_deprecated,
- { "Deprecated", "docsis_mdd.cm_status_event_d31_deprecated",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x08,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_ncp_prof_fail,
- { "NCP Profile Failure", "docsis_mdd.cm_status_event_d31_ncp_prof_fail",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x10,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_loss_fec_plc,
- { "Loss of FEC lock on PLC", "docsis_mdd.cm_status_event_d31_loss_fec_plc",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x20,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_ncp_prof_recover,
- { "NCP Profile Recovery", "docsis_mdd.cm_status_event_d31_ncp_prof_recover",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x40,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_fec_recover_on_plc,
- { "FEC Recovery on PLC", "docsis_mdd.cm_status_event_d31_fec_recover_on_plc",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x80,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_fec_recover_on_ofdm_prof,
- { "FEC Recovery on OFDM Profile", "docsis_mdd.cm_status_event_d31_fec_recover_on_ofdm_prof",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x0100,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_ofdma_prof_fail,
- { "OFDMA Profile Failure", "docsis_mdd.cm_status_event_d31_ofdma_prof_fail",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x0200,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_map_stor_overflow_ind,
- { "MAP Storage Overflow Indicator", "docsis_mdd.cm_status_event_d31_map_stor_overflow_ind",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x0400,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_ofdm_map_stor_almost_full_ind,
- { "MAP Storage Almost Full Indicator", "docsis_mdd.cm_status_event_d31_ofdm_map_stor_almost_full_ind",
- FT_BOOLEAN, 32, TFS(&mdd_tfs_en_dis), 0x0800,
- NULL, HFILL}
- },
- {&hf_docsis_mdd_cm_status_event_d31_reserved,
- { "Reserved for future use", "docsis_mdd.cm_status_event_d31_reserved",
- FT_UINT32, BASE_HEX, NULL, 0xFFFFF000,
- NULL, HFILL}
- },
-
- /* B_INIT_RNG_REQ */
- {&hf_docsis_bintrngreq_capflags,
- {"Capability Flags", "docsis_bintrngreq.capflags",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_bintrngreq_capflags_frag,
- {"Pre-3.0 Fragmentation", "docsis_bintrngreq.capflags.frag",
- FT_BOOLEAN, 8, NULL, (1<<7),
- "Pre-3.0 DOCSIS fragmentation is supported prior to registration", HFILL }
- },
- {&hf_docsis_bintrngreq_capflags_encrypt,
- {"Early Auth. & Encrypt", "docsis_bintrngreq.capflags.encrypt",
- FT_BOOLEAN, 8, NULL, (1<<6),
- "Early Authentication and Encryption supported", HFILL }
- },
- {&hf_docsis_bintrngreq_mddsgid,
- {"MD-DS-SG-ID", "docsis_bintrngreq.mddsgid",
- FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
- "MAC Domain Downstream Service Group Identifier", HFILL}
- },
- /* DBC_REQ */
- {&hf_docsis_dbcreq_number_of_fragments,
- {"Number of Fragments", "docsis_dbcreq.number_of_fragments",
- FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dbcreq_fragment_sequence_number,
- {"Fragment Seq No", "docsis_dbcreq.fragment_sequence_number",
- FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- /* DBC_RSP */
- {&hf_docsis_dbcrsp_conf_code,
- {"Confirmation Code", "docsis_dbcrsp.conf_code",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- NULL, HFILL}
- },
- /* DPV_REQ/RSP */
- {&hf_docsis_dpv_flags,
- {"Flags", "docsis_dpv.flags",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dpv_us_sf,
- {"Upstream Service Flow ID", "docsis_dpv.us_sf",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dpv_n,
- {"N (Measurement avaraging factor)", "docsis_dpv.n",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dpv_start,
- {"Start Reference Point", "docsis_dpv.start",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dpv_end,
- {"End Reference Point", "docsis_dpv.end",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dpv_ts_start,
- {"Timestamp Start", "docsis_dpv.ts_start",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dpv_ts_end,
- {"Timestamp End", "docsis_dpv.ts_end",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- /* CM Status */
- {&hf_docsis_cmstatus_e_t_mdd_t,
- {"Secondary Channel MDD timeout", "docsis_cmstatus.mdd_timeout", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_e_t_qfl_f,
- {"QAM/FEC lock failure", "docsis_cmstatus.qam_fec_lock_failure", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_e_t_s_o,
- {"Sequence out-of-range", "docsis_cmstatus.sequence_out_of_range", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_e_t_mdd_r,
- {"Secondary Channel MDD Recovery", "docsis_cmstatus.mdd_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_e_t_qfl_r,
- {"QAM/FEC Lock Recovery", "docsis_cmstatus.qam_fec_lock_recovery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_e_t_t4_t,
- {"T4 timeout", "docsis_cmstatus.t4_timeout", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_e_t_t3_e,
- {"T3 retries exceeded", "docsis_cmstatus.t3_retries_exceeded", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_e_t_rng_s,
- {"Successful ranging after T3 retries exceeded", "docsis_cmstatus.successful_ranging_after_t3_retries_exceeded", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_e_t_cm_b,
- {"CM operating on battery backup", "docsis_cmstatus.cm_on_battery", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_e_t_cm_a,
- {"CM returned to A/C power", "docsis_cmstatus.cm_on_ac_power", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_descr,
- {"Description", "docsis_cmstatus.description",FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_ds_ch_id,
- {"Downstream Channel ID", "docsis_cmstatus.ds_chid",FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_us_ch_id,
- {"Upstream Channel ID", "docsis_cmstatus.us_chid",FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_dsid,
- {"DSID", "docsis_cmstatus.dsid", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_tlv_data,
- {"TLV Data", "docsis_cmstatus.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_type,
- {"Type", "docsis_cmstatus.type",FT_UINT8, BASE_DEC, VALS(cmstatus_tlv_vals), 0x0, NULL, HFILL}
- },
- {&hf_docsis_cmstatus_length,
- {"Length", "docsis_cmstatus.length",FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- /* CM_CTRL_REQ */
- {&hf_docsis_cmctrl_tlv_mute,
- {"Upstream Channel RF Mute", "docsis_cmctrl.mute",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_tlv_mute_timeout,
- {"RF Mute Timeout Interval", "docsis_cmctrl.mute_timeout",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_tlv_reinit,
- {"CM Reinitialize", "docsis_cmctrl.reinit",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_tlv_disable_fwd,
- {"Disable Forwarding", "docsis_cmctrl.disable_fwd",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_tlv_ds_event,
- {"Override Downstream Events", "docsis_cmctrl.ds_event",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_tlv_us_event,
- {"Override Upstream Events", "docsis_cmctrl.us_event",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_tlv_event,
- {"Override Non-Channel-Specific Events", "docsis_cmctrl.event",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrlreq_tlv_data,
- {"TLV Data", "docsis_cmctrl.tlv_data",
- FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrlreq_type,
- {"Type", "docsis_cmctrl.tlv_type",
- FT_UINT8, BASE_DEC, VALS(cmctrlreq_tlv_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrlreq_length,
- {"Length", "docsis_cmctrl.tlv_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrlreq_us_type,
- {"Type", "docsis_cmctrl.us_event_type",
- FT_UINT8, BASE_DEC, VALS(cmctrlreq_us_tlv_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrlreq_us_length,
- {"Length", "docsis_cmctrl.us_event_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_us_event_ch_id,
- {"Upstream Channel ID", "docsis_cmctrl.us_event.chid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_us_event_mask,
- {"Upstream Status Event Enable Bitmask", "docsis_cmctrl.us_event.mask",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_ds_type,
- {"Type", "docsis_cmctrl.ds_event_type",
- FT_UINT8, BASE_DEC, VALS(cmctrlreq_ds_tlv_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_ds_length,
- {"Length", "docsis_cmctrl.ds_event_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_ds_event_ch_id,
- {"Downstream Channel ID", "docsis_cmctrl.ds_event.chid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_cmctrl_ds_event_mask,
- {"Downstream Status Event Enable Bitmask", "docsis_cmctrl.ds_event.mask",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- /* REG_REQ_MP */
- {&hf_docsis_regreqmp_sid,
- {"Sid", "docsis_regreqmp.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Reg-Req-Mp Sid", HFILL}
- },
- {&hf_docsis_regreqmp_number_of_fragments,
- {"Number of Fragments", "docsis_regreqmp.number_of_fragments",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Reg-Req-Mp Number of Fragments", HFILL}
- },
- {&hf_docsis_regreqmp_fragment_sequence_number,
- {"Fragment Sequence Number", "docsis_regreqmp.fragment_sequence_number",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Reg-Req-Mp Fragment Sequence Number", HFILL}
- },
- /* REG_RSP_MP */
- {&hf_docsis_regrspmp_sid,
- {"Sid", "docsis_regrspmp.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Reg-Rsp-Mp Sid", HFILL}
- },
- {&hf_docsis_regrspmp_response,
- {"Response", "docsis_regrspmp.response",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Reg-Rsp-Mp Response", HFILL}
- },
- {&hf_docsis_regrspmp_number_of_fragments,
- {"Number of Fragments", "docsis_regrspmp.number_of_fragments",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Reg-Rsp-Mp Number of Fragments", HFILL}
- },
- {&hf_docsis_regrspmp_fragment_sequence_number,
- {"Fragment Sequence Number", "docsis_regrspmp.fragment_sequence_number",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Reg-Rsp-Mp Fragment Sequence Number", HFILL}
- },
- /* OCD */
- {&hf_docsis_ocd_tlv_unknown,
- {"Unknown TLV", "docsis_ocd.unknown_tlv", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_ocd_ccc,
- {"Configuration Change Count", "docsis_ocd.ccc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_ocd_tlv_four_trans_size,
- {"Discrete Fourier Transform Size", "docsis_ocd.tlv.four_trans_size", FT_UINT8, BASE_DEC, VALS (docsis_ocd_four_trans_size), 0x0, NULL, HFILL}
- },
- {&hf_docsis_ocd_tlv_cycl_pref,
- {"Cylic Prefix", "docsis_ocd.tlv.cyc_pref", FT_UINT8, BASE_DEC, VALS (docsis_ocd_cyc_prefix), 0x0, NULL, HFILL}
- },
- {&hf_docsis_ocd_tlv_roll_off,
- {"Roll Off", "docsis_ocd.tlv.roll_off", FT_UINT8, BASE_DEC, VALS (docsis_ocd_roll_off), 0x0, NULL, HFILL}
- },
- {&hf_docsis_ocd_tlv_ofdm_spec_loc,
- {"OFDM Spectrum Location", "docsis_ocd.tlv.ofdm_spec_loc", FT_UINT32, BASE_DEC|BASE_UNIT_STRING, &local_units_hz, 0x0, NULL, HFILL}
- },
- {&hf_docsis_ocd_tlv_time_int_depth,
- {"Time Interleaving Depth", "docsis_ocd.tlv.time_int_depth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_ocd_tlv_prim_cap_ind,
- {"Primary Capable Indicator", "docsis_ocd.tlv.prim_cap_ind", FT_UINT8, BASE_DEC, VALS(docsis_ocd_prim_cap_ind_str), 0x0, NULL, HFILL}
- },
- {&hf_docsis_ocd_tlv_subc_assign_type,
- {"Assignment type", "docsis_ocd.tlv.subc_assign.type", FT_UINT8, BASE_DEC, VALS(docsis_ocd_subc_assign_type_str), 0xC0, NULL, HFILL}
- },
- {&hf_docsis_ocd_tlv_subc_assign_value,
- {"Assignment value", "docsis_ocd.tlv.subc_assign.value", FT_UINT8, BASE_DEC, VALS(docsis_ocd_subc_assign_value_str), 0x20, NULL, HFILL}
- },
- {&hf_docsis_ocd_subc_assign_subc_type,
- {"Subcarrier Type", "docsis_ocd.tlv.subc_assign.subc_type", FT_UINT8, BASE_DEC, VALS(docsis_ocd_subc_assign_subc_type_str), 0x1F, NULL, HFILL}
- },
- {&hf_docsis_ocd_subc_assign_range,
- {"Subcarrier index range", "docsis_ocd.tlv.subc_assign.range", FT_UINT32, BASE_CUSTOM, CF_FUNC(subc_assign_range), 0x00, NULL, HFILL}
- },
- {&hf_docsis_ocd_subc_assign_index,
- {"Subcarrier index", "docsis_ocd.tlv.subc_assign.index", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL}
- },
- {&hf_docsis_ocd_tlv_data,
- {"TLV Data", "docsis_ocd.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_ocd_type,
- {"Type", "docsis_ocd.type",FT_UINT8, BASE_DEC, VALS(ocd_tlv_vals), 0x0, NULL, HFILL}
- },
- {&hf_docsis_ocd_length,
- {"Length", "docsis_ocd.length",FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- /* DPD */
- {&hf_docsis_dpd_tlv_unknown,
- {"Unknown TLV", "docsis_dpd.unknown_tlv",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_dpd_prof_id,
- {"Profile Identifier", "docsis_dpd.prof_id", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_dpd_ccc,
- {"Configuration Change Count", "docsis_dpd.ccc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_dpd_tlv_subc_assign_type,
- {"Subcarrier Assignment Type", "docsis_dpd.tlv.subc_assign.type", FT_UINT8, BASE_DEC, VALS(docsis_dpd_subc_assign_type_str), 0xC0, NULL, HFILL}
- },
- {&hf_docsis_dpd_tlv_subc_assign_value,
- {"Subcarrier Assignment Value", "docsis_dpd.tlv.subc_assign.value", FT_UINT8, BASE_DEC, VALS(docsis_dpd_subc_assign_value_str), 0x20, NULL, HFILL}
- },
- {&hf_docsis_dpd_tlv_subc_assign_reserved,
- {"reserved", "docsis_dpd.tlv.subc_assign.reserved", FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL}
- },
- {&hf_docsis_dpd_tlv_subc_assign_modulation,
- {"Subcarrier Assignment Modulation", "docsis_dpd.tlv.subc_assign.modulation", FT_UINT8, BASE_DEC, VALS(docsis_dpd_subc_assign_modulation_str), 0x0F, NULL, HFILL}
- },
- {&hf_docsis_dpd_subc_assign_range,
- {"Subcarrier index range", "docsis_dpd.tlv.subc_assign.range", FT_UINT32, BASE_CUSTOM, CF_FUNC(subc_assign_range), 0x00, NULL, HFILL}
- },
- {&hf_docsis_dpd_subc_assign_index,
- {"Subcarrier index", "docsis_dpd.tlv.subc_assign.index", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL}
- },
- {&hf_docsis_dpd_tlv_subc_assign_vector_oddness,
- {"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}
- },
- {&hf_docsis_dpd_tlv_subc_assign_vector_reserved,
- {"Reserved", "docsis_dpd.tlv.subc_assign_vect.reserved", FT_UINT8, BASE_DEC, NULL, 0x60, NULL, HFILL}
- },
- {&hf_docsis_dpd_tlv_subc_assign_vector_subc_start,
- {"Subcarrier start", "docsis_dpd.tlv.subc_assign_vect.subc_start", FT_UINT16, BASE_DEC, NULL, 0x1FFF, NULL, HFILL}
- },
- {&hf_docsis_dpd_tlv_subc_assign_vector_modulation_odd,
- {"Modulation", "docsis_dpd.tlv.subc_assign_vect.modulation", FT_UINT8, BASE_DEC, VALS(docsis_dpd_tlv_subc_assign_vector_modulation_str), 0xF0, NULL, HFILL}
- },
- {&hf_docsis_dpd_tlv_subc_assign_vector_modulation_even,
- {"Modulation", "docsis_dpd.tlv.subc_assign_vect.modulation", FT_UINT8, BASE_DEC, VALS(docsis_dpd_tlv_subc_assign_vector_modulation_str), 0x0F, NULL, HFILL}
- },
- {&hf_docsis_dpd_tlv_data,
- {"TLV Data", "docsis_dpd.tlv_data", FT_BYTES, BASE_NO_DISPLAY_VALUE, NULL, 0x0, NULL, HFILL}
- },
- {&hf_docsis_dpd_type,
- {"Type", "docsis_dpd.type",FT_UINT8, BASE_DEC, VALS(dpd_tlv_vals), 0x0, NULL, HFILL}
- },
- {&hf_docsis_dpd_length,
- {"Length", "docsis_dpd.length",FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
- },
- /* MAC Management */
- {&hf_docsis_mgt_upstream_chid,
- {"Upstream Channel ID", "docsis_mgmt.upchid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mgt_down_chid,
- {"Downstream Channel ID", "docsis_ucd.downchid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Management Message", HFILL}
- },
- {&hf_docsis_mgt_tranid,
- {"Transaction Id", "docsis_mgmt.tranid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mgt_dst_addr,
- {"Destination Address", "docsis_mgmt.dst",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mgt_src_addr,
- {"Source Address", "docsis_mgmt.src",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mgt_msg_len,
- {"Message Length - DSAP to End (Bytes)", "docsis_mgmt.msglen",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mgt_dsap,
- {"DSAP", "docsis_mgmt.dsap",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- "Destination SAP", HFILL}
- },
- {&hf_docsis_mgt_ssap,
- {"SSAP", "docsis_mgmt.ssap",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- "Source SAP", HFILL}
- },
- {&hf_docsis_mgt_control,
- {"Control", "docsis_mgmt.control",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mgt_version,
- {"Version", "docsis_mgmt.version",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mgt_type,
- {"Type", "docsis_mgmt.type",
- FT_UINT8, BASE_DEC, VALS (mgmt_type_vals), 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_mgt_rsvd,
- {"Reserved", "docsis_mgmt.rsvd",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- };
-
- static gint *ett[] = {
- &ett_docsis_sync,
- &ett_docsis_ucd,
- &ett_docsis_tlv,
- &ett_docsis_burst_tlv,
- &ett_docsis_map,
- &ett_docsis_map_ie,
- &ett_docsis_map_probe_ie,
- &ett_docsis_rngreq,
- &ett_docsis_rngrsp,
- &ett_docsis_rngrsptlv,
- &ett_docsis_rngrsp_tlv_transmit_equalization_encodings,
- &ett_docsis_rngrsp_tlv_transmit_equalization_encodings_coef,
- &ett_docsis_rngrsp_tlv_commanded_power,
- &ett_docsis_rngrsp_tlv_commanded_power_subtlv,
- &ett_docsis_regreq,
- &ett_docsis_regrsp,
- &ett_docsis_uccreq,
- &ett_docsis_uccrsp,
- &ett_docsis_bpkmreq,
- &ett_docsis_bpkmrsp,
- &ett_docsis_bpkmattr,
- &ett_docsis_bpkmattr_cmid,
- &ett_docsis_bpkmattr_scap,
- &ett_docsis_bpkmattr_tekp,
- &ett_docsis_bpkmattr_sadsc,
- &ett_docsis_bpkmattr_saqry,
- &ett_docsis_bpkmattr_dnld,
- &ett_docsis_bpkmattrtlv,
- &ett_docsis_regack,
- &ett_docsis_dsareq,
- &ett_docsis_dsarsp,
- &ett_docsis_dsaack,
- &ett_docsis_dscreq,
- &ett_docsis_dscrsp,
- &ett_docsis_dscack,
- &ett_docsis_dsdreq,
- &ett_docsis_dsdrsp,
- &ett_docsis_dccreq,
- &ett_docsis_dccreq_sf_sub,
- &ett_docsis_dccreq_ds_params,
- &ett_docsis_dccreq_tlv,
- &ett_docsis_dccrsp,
- &ett_docsis_dccrsp_cm_jump_time,
- &ett_docsis_dccrsp_tlv,
- &ett_docsis_dccack,
- &ett_docsis_dccack_tlv,
- &ett_docsis_intrngreq,
- &ett_docsis_dcd,
- &ett_docsis_dcd_cfr,
- &ett_docsis_dcd_cfr_ip,
- &ett_docsis_dcd_rule,
- &ett_docsis_dcd_clid,
- &ett_docsis_dcd_cfg,
- &ett_docsis_dcd_tlv,
- &ett_docsis_mdd,
- &ett_tlv,
- &ett_sub_tlv,
- &ett_docsis_mdd_cm_status_ev_en_for_docsis31,
- &ett_docsis_mdd_ds_active_channel_list,
- &ett_docsis_mdd_ds_service_group,
- &ett_docsis_mdd_channel_profile_reporting_control,
- &ett_docsis_mdd_ip_init_param,
- &ett_docsis_mdd_up_active_channel_list,
- &ett_docsis_mdd_cm_status_event_control,
- &ett_docsis_mdd_dsg_da_to_dsid,
- &ett_docsis_bintrngreq,
- &ett_docsis_dbcreq,
- &ett_docsis_dbcrsp,
- &ett_docsis_dbcack,
- &ett_docsis_dpvreq,
- &ett_docsis_dpvrsp,
- &ett_docsis_cmstatus,
- &ett_docsis_cmstatus_tlv,
- &ett_docsis_cmstatus_tlvtlv,
- &ett_docsis_cmctrlreq,
- &ett_docsis_cmctrlreq_tlv,
- &ett_docsis_cmctrlreq_tlvtlv,
- &ett_docsis_cmctrl_tlv_us_event,
- &ett_docsis_cmctrl_tlv_ds_event,
- &ett_docsis_cmctrlrsp,
- &ett_docsis_regreqmp,
- &ett_docsis_regrspmp,
- &ett_docsis_ocd,
- &ett_docsis_ocd_tlv,
- &ett_docsis_ocd_tlvtlv,
- &ett_docsis_dpd,
- &ett_docsis_dpd_tlv,
- &ett_docsis_dpd_tlvtlv,
- &ett_docsis_dpd_tlv_subcarrier_assignment,
- &ett_docsis_dpd_tlv_subcarrier_assignment_vector,
- &ett_docsis_mgmt,
- &ett_mgmt_pay,
- };
-
- static ei_register_info ei[] = {
- {&ei_docsis_mgmt_tlvlen_bad, {"docsis_mgmt.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
- {&ei_docsis_mgmt_tlvtype_unknown, { "docsis_mgmt.tlvtypeunknown", PI_PROTOCOL, PI_WARN, "Unknown TLV type", EXPFILL}},
- {&ei_docsis_mgmt_version_unknown, { "docsis_mgmt.versionunknown", PI_PROTOCOL, PI_WARN, "Unknown mac management version", EXPFILL}},
- };
-
- expert_module_t* expert_docsis_mgmt;
-
- proto_docsis_mgmt = proto_register_protocol ("DOCSIS Mac Management", "DOCSIS MAC MGMT", "docsis_mgmt");
-
- proto_register_field_array (proto_docsis_mgmt, hf, array_length (hf));
- proto_register_subtree_array (ett, array_length (ett));
- expert_docsis_mgmt = expert_register_protocol(proto_docsis_mgmt);
- expert_register_field_array(expert_docsis_mgmt, ei, array_length(ei));
-
- docsis_mgmt_dissector_table = register_dissector_table ("docsis_mgmt",
- "DOCSIS Mac Management", proto_docsis_mgmt,
- FT_UINT8, BASE_DEC);
-
- /* Register Mac Management commands as their own protocols so we can get the name of the option */
- proto_docsis_sync = proto_register_protocol_in_name_only("DOCSIS Synchronisation Message", "SYNC Message", "docsis_sync", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_ucd = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Descriptor", "DOCSIS UCD", "docsis_ucd", proto_docsis_mgmt, FT_BYTES);
- 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);
- 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);
- proto_docsis_rngreq = proto_register_protocol_in_name_only("DOCSIS Range Request Message", "DOCSIS RNG-REQ", "docsis_rngreq", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_rngrsp = proto_register_protocol_in_name_only("DOCSIS Ranging Response", "DOCSIS RNG-RSP", "docsis_rngrsp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_regreq = proto_register_protocol_in_name_only("DOCSIS Registration Requests", "DOCSIS REG-REQ", "docsis_regreq", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_regrsp = proto_register_protocol_in_name_only("DOCSIS Registration Responses", "DOCSIS REG-RSP", "docsis_regrsp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_uccreq = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Change Request", "DOCSIS UCC-REQ", "docsis_uccreq", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_uccrsp = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Change Response", "DOCSIS UCC-RSP", "docsis_uccrsp", proto_docsis_mgmt, FT_BYTES);
- 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);
- 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);
- proto_docsis_regack = proto_register_protocol_in_name_only("DOCSIS Registration Acknowledge", "DOCSIS REG-ACK", "docsis_regack", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dsareq = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Addition Request", "DOCSIS DSA-REQ", "docsis_dsareq", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dsarsp = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Addition Response", "DOCSIS DSA-RSP", "docsis_dsarsp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dsaack = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Addition Acknowledge", "DOCSIS DSA-ACK", "docsis_dsaack", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dscreq = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Change Request", "DOCSIS DSC-REQ", "docsis_dscreq", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dscrsp = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Change Response", "DOCSIS DSC-RSP", "docsis_dscrsp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dscack = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Change Acknowledgement", "DOCSIS DSC-ACK", "docsis_dscack", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dsdreq = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Delete Request", "DOCSIS DSD-REQ", "docsis_dsdreq", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dsdrsp = proto_register_protocol_in_name_only("DOCSIS Dynamic Service Delete Response", "DOCSIS DSD-RSP", "docsis_dsdrsp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dccreq = proto_register_protocol_in_name_only("DOCSIS Downstream Channel Change Request", "DOCSIS DCC-REQ", "docsis_dccreq", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dccrsp = proto_register_protocol_in_name_only("DOCSIS Downstream Channel Change Response", "DOCSIS DCC-RSP", "docsis_dccrsp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dccack = proto_register_protocol_in_name_only("DOCSIS Downstream Channel Change Acknowledge", "DOCSIS DCC-ACK", "docsis_dccack", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_type29ucd = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Descriptor Type 29", "DOCSIS type29ucd", "docsis_type29ucd", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_intrngreq = proto_register_protocol_in_name_only("DOCSIS Initial Ranging Message", "DOCSIS INT-RNG-REQ", "docsis_intrngreq", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dcd = proto_register_protocol_in_name_only("DOCSIS Downstream Channel Descriptor", "DOCSIS DCD", "docsis_dcd", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_mdd = proto_register_protocol_in_name_only("DOCSIS Mac Domain Description", "DOCSIS Mdd", "docsis_mdd", proto_docsis_mgmt, FT_BYTES);
- 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);
- proto_docsis_type35ucd = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Descriptor Type 35", "DOCSIS type35ucd", "docsis_type35ucd", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dbcreq = proto_register_protocol_in_name_only("DOCSIS Dynamic Bonding Change Request", "DOCSIS DBC-REQ", "docsis_dbcreq", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dbcrsp = proto_register_protocol_in_name_only("DOCSIS Dynamic Bonding Change Response", "DOCSIS DBC-RSP", "docsis_dbcrsp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dbcack = proto_register_protocol_in_name_only("DOCSIS Dynamic Bonding Change Acknowledge", "DOCSIS DBC-ACK", "docsis_dbcack", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dpvreq = proto_register_protocol_in_name_only("DOCSIS Path Verify Request", "DOCSIS DPV-REQ", "docsis_dpv.req", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dpvrsp = proto_register_protocol_in_name_only("DOCSIS Path Verify Response", "DOCSIS DPV-RSP", "docsis_dpv.rsp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_cmstatus = proto_register_protocol_in_name_only("DOCSIS CM-STATUS Report", "DOCSIS CM-STATUS", "docsis_cmstatus", proto_docsis_mgmt, FT_BYTES);
- 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);
- proto_docsis_cmctrlrsp = proto_register_protocol_in_name_only("DOCSIS CM Control Response", "DOCSIS CM-CTRL-RSP", "docsis_cmctrlrsp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_regreqmp = proto_register_protocol_in_name_only("DOCSIS Registration Request Multipart", "DOCSIS Reg-Req-Mp", "docsis_regreqmp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_regrspmp = proto_register_protocol_in_name_only("DOCSIS Registration Response Multipart", "DOCSIS Reg-Rsp-Mp", "docsis_regrspmp", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_ocd = proto_register_protocol_in_name_only("DOCSIS OFDM Channel Descriptor", "DOCSIS OCD", "docsis_ocd", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_dpd = proto_register_protocol_in_name_only("DOCSIS Downstream Profile Descriptor", "DOCSIS DPD", "docsis_dpd", proto_docsis_mgmt, FT_BYTES);
- proto_docsis_type51ucd = proto_register_protocol_in_name_only("DOCSIS Upstream Channel Descriptor Type 51", "DOCSIS type51ucd", "docsis_type51ucd", proto_docsis_mgmt, FT_BYTES);
-
- register_dissector ("docsis_mgmt", dissect_macmgmt, proto_docsis_mgmt);
- docsis_ucd_handle = register_dissector ("docsis_ucd", dissect_ucd, proto_docsis_ucd);
-}
-
-void
-proto_reg_handoff_docsis_mgmt (void)
-{
- /* Create dissection function handles for all Mac Management commands */
- dissector_add_uint ("docsis_mgmt", MGT_SYNC, create_dissector_handle( dissect_sync, proto_docsis_sync ));
- dissector_add_uint ("docsis_mgmt", MGT_UCD, docsis_ucd_handle);
- dissector_add_uint ("docsis_mgmt", 256*MAP_v1 + MGT_MAP, create_dissector_handle( dissect_map_v1, proto_docsis_map_v1 ));
- dissector_add_uint ("docsis_mgmt", 256*MAP_v5 + MGT_MAP, create_dissector_handle( dissect_map_v5, proto_docsis_map_v5 ));
- dissector_add_uint ("docsis_mgmt", MGT_RNG_REQ, create_dissector_handle( dissect_rngreq, proto_docsis_rngreq ));
- dissector_add_uint ("docsis_mgmt", MGT_RNG_RSP, create_dissector_handle( dissect_rngrsp, proto_docsis_rngrsp ));
- dissector_add_uint ("docsis_mgmt", MGT_REG_REQ, create_dissector_handle( dissect_regreq, proto_docsis_regreq ));
- dissector_add_uint ("docsis_mgmt", MGT_REG_RSP, create_dissector_handle( dissect_regrsp, proto_docsis_regrsp ));
- dissector_add_uint ("docsis_mgmt", MGT_UCC_REQ, create_dissector_handle( dissect_uccreq, proto_docsis_uccreq ));
- dissector_add_uint ("docsis_mgmt", MGT_UCC_RSP, create_dissector_handle( dissect_uccrsp, proto_docsis_uccrsp ));
- dissector_add_uint ("docsis_mgmt", MGT_BPKM_REQ, create_dissector_handle( dissect_bpkmreq, proto_docsis_bpkmreq ));
- dissector_add_uint ("docsis_mgmt", MGT_BPKM_RSP, create_dissector_handle( dissect_bpkmrsp, proto_docsis_bpkmrsp ));
- dissector_add_uint ("docsis_mgmt", MGT_REG_ACK, create_dissector_handle( dissect_regack, proto_docsis_regack ));
- dissector_add_uint ("docsis_mgmt", MGT_DSA_REQ, create_dissector_handle( dissect_dsareq, proto_docsis_dsareq ));
- dissector_add_uint ("docsis_mgmt", MGT_DSA_RSP, create_dissector_handle( dissect_dsarsp, proto_docsis_dsarsp ));
- dissector_add_uint ("docsis_mgmt", MGT_DSA_ACK, create_dissector_handle( dissect_dsaack, proto_docsis_dsaack ));
- dissector_add_uint ("docsis_mgmt", MGT_DSC_REQ, create_dissector_handle( dissect_dscreq, proto_docsis_dscreq ));
- dissector_add_uint ("docsis_mgmt", MGT_DSC_RSP, create_dissector_handle( dissect_dscrsp, proto_docsis_dscrsp ));
- dissector_add_uint ("docsis_mgmt", MGT_DSC_ACK, create_dissector_handle( dissect_dscack, proto_docsis_dscack ));
- dissector_add_uint ("docsis_mgmt", MGT_DSD_REQ, create_dissector_handle( dissect_dsdreq, proto_docsis_dsdreq ));
- dissector_add_uint ("docsis_mgmt", MGT_DSD_RSP, create_dissector_handle( dissect_dsdrsp, proto_docsis_dsdrsp ));
- dissector_add_uint ("docsis_mgmt", MGT_DCC_REQ, create_dissector_handle( dissect_dccreq, proto_docsis_dccreq ));
- dissector_add_uint ("docsis_mgmt", MGT_DCC_RSP, create_dissector_handle( dissect_dccrsp, proto_docsis_dccrsp ));
- dissector_add_uint ("docsis_mgmt", MGT_DCC_ACK, create_dissector_handle( dissect_dccack, proto_docsis_dccack ));
- dissector_add_uint ("docsis_mgmt", MGT_TYPE29UCD, create_dissector_handle( dissect_type29ucd, proto_docsis_type29ucd ));
- dissector_add_uint ("docsis_mgmt", MGT_INIT_RNG_REQ, create_dissector_handle( dissect_intrngreq, proto_docsis_intrngreq ));
- dissector_add_uint ("docsis_mgmt", MGT_DS_CH_DESC, create_dissector_handle( dissect_dcd, proto_docsis_dcd ));
- dissector_add_uint ("docsis_mgmt", MGT_MDD, create_dissector_handle( dissect_mdd, proto_docsis_mdd ));
- dissector_add_uint ("docsis_mgmt", MGT_B_INIT_RNG_REQ, create_dissector_handle( dissect_bintrngreq, proto_docsis_bintrngreq ));
- dissector_add_uint ("docsis_mgmt", MGT_TYPE35UCD, create_dissector_handle( dissect_type35ucd, proto_docsis_type35ucd ));
- dissector_add_uint ("docsis_mgmt", MGT_DBC_REQ, create_dissector_handle( dissect_dbcreq, proto_docsis_dbcreq ));
- dissector_add_uint ("docsis_mgmt", MGT_DBC_RSP, create_dissector_handle( dissect_dbcrsp, proto_docsis_dbcrsp ));
- dissector_add_uint ("docsis_mgmt", MGT_DBC_ACK, create_dissector_handle( dissect_dbcack, proto_docsis_dbcack ));
- dissector_add_uint ("docsis_mgmt", MGT_DPV_REQ, create_dissector_handle( dissect_dpvreq, proto_docsis_dpvreq ));
- dissector_add_uint ("docsis_mgmt", MGT_DPV_RSP, create_dissector_handle( dissect_dpvrsp, proto_docsis_dpvrsp ));
- dissector_add_uint ("docsis_mgmt", MGT_CM_STATUS, create_dissector_handle( dissect_cmstatus, proto_docsis_cmstatus ));
- dissector_add_uint ("docsis_mgmt", MGT_CM_CTRL_REQ, create_dissector_handle( dissect_cmctrlreq, proto_docsis_cmctrlreq ));
- dissector_add_uint ("docsis_mgmt", MGT_CM_CTRL_RSP, create_dissector_handle( dissect_cmctrlrsp, proto_docsis_cmctrlrsp ));
- dissector_add_uint ("docsis_mgmt", MGT_REG_REQ_MP, create_dissector_handle( dissect_regreqmp, proto_docsis_regreqmp ));
- dissector_add_uint ("docsis_mgmt", MGT_REG_RSP_MP, create_dissector_handle( dissect_regrspmp, proto_docsis_regrspmp ));
- dissector_add_uint ("docsis_mgmt", MGT_OCD, create_dissector_handle( dissect_ocd, proto_docsis_ocd ));
- dissector_add_uint ("docsis_mgmt", MGT_DPD, create_dissector_handle( dissect_dpd, proto_docsis_dpd ));
- dissector_add_uint ("docsis_mgmt", MGT_TYPE51UCD, create_dissector_handle( dissect_type51ucd, proto_docsis_type51ucd ));
-
- docsis_tlv_handle = find_dissector ("docsis_tlv");
-}
-
-/*
- * Editor modelines - http://www.wireshark.org/tools/modelines.html
- *
- * Local Variables:
- * c-basic-offset: 2
- * tab-width: 8
- * indent-tabs-mode: nil
- * End:
- *
- * ex: set shiftwidth=2 tabstop=8 expandtab:
- * :indentSize=2:tabSize=8:noTabs=true:
- */
diff --git a/plugins/epan/docsis/packet-tlv.c b/plugins/epan/docsis/packet-tlv.c
deleted file mode 100644
index 3ab692e841..0000000000
--- a/plugins/epan/docsis/packet-tlv.c
+++ /dev/null
@@ -1,6518 +0,0 @@
-/* packet-tlv.c
- *
- * Routines to Dissect Appendix C TLV's
- * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- * Copyright 2017, Bruno Verstuyft <bruno.verstuyft@excentis.com>
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.org>
- * Copyright 1998 Gerald Combs
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#include "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-#include "packet-tlv.h"
-
-/* This module will dissect the Appendix C TLV's. Please see:
- * http://www.cablemodem.com/specifications/specifications.html
- *
- * The main dissector is dissect_tlv. This routine will dissect
- * top level TLV's and call sub-dissectors for the sub-TLV's.
- */
-
-void proto_register_docsis_tlv(void);
-void proto_reg_handoff_docsis_tlv(void);
-
-/* Initialize the protocol and registered fields */
-static dissector_handle_t docsis_vsif_handle;
-static dissector_handle_t docsis_ucd_handle;
-
-static int proto_docsis_tlv = -1;
-static int hf_docsis_tlv_down_freq = -1;
-static int hf_docsis_tlv_upstream_chid = -1;
-static int hf_docsis_tlv_net_access = -1;
-/* static int hf_docsis_tlv_cos = -1; */
-/* static int hf_docsis_tlv_mcap = -1; */
-static int hf_docsis_tlv_privacy_enable = -1;
-static int hf_docsis_tlv_max_cpe = -1;
-static int hf_docsis_tlv_max_classifiers = -1;
-static int hf_docsis_tlv_snmp_access = -1;
-static int hf_docsis_tlv_snmp_obj = -1;
-static int hf_docsis_tlv_svc_unavail = -1;
-static int hf_docsis_tlv_svc_unavail_classid = -1;
-static int hf_docsis_tlv_svc_unavail_type = -1;
-static int hf_docsis_tlv_svc_unavail_code = -1;
-static int hf_docsis_tlv_bpi = -1;
-/* static int hf_docsis_tlv_phs = -1; */
-static int hf_docsis_tlv_hmac_digest = -1;
-static int hf_docsis_tlv_tftp_server_timestamp = -1;
-static int hf_docsis_tlv_tftp_prov_modem_address = -1;
-/* static int hf_docsis_tlv_upclsfr = -1; */
-/* static int hf_docsis_tlv_downclsfr = -1; */
-/* static int hf_docsis_tlv_upsflow = -1; */
-/* static int hf_docsis_tlv_downsflow = -1; */
-/* static int hf_docsis_tlv_vendor_spec = -1; */
-static int hf_docsis_tlv_cm_mic = -1;
-static int hf_docsis_tlv_cmts_mic = -1;
-static int hf_docsis_tlv_auth_block = -1;
-static int hf_docsis_tlv_key_seq_num = -1;
-static int hf_docsis_tlv_snmpv3_kick = -1;
-static int hf_docsis_tlv_snmpv3_kick_name = -1;
-static int hf_docsis_tlv_snmpv3_kick_publicnum = -1;
-static int hf_docsis_tlv_mfgr_cvc = -1;
-static int hf_docsis_tlv_cosign_cvc = -1;
-static int hf_docsis_tlv_vendor_id = -1;
-static int hf_docsis_tlv_sw_file = -1;
-static int hf_docsis_tlv_sw_upg_srvr = -1;
-static int hf_docsis_tlv_cpe_ethernet = -1;
-static int hf_docsis_tlv_modem_addr = -1;
-static int hf_docsis_tlv_rng_tech = -1;
-static int hf_docsis_tlv_subs_mgmt_ctrl = -1;
-static int hf_docsis_tlv_subs_mgmt_ip_table = -1;
-static int hf_docsis_tlv_subs_mgmt_ip_entry = -1;
-static int hf_docsis_tlv_subs_mgmt_filter_grps = -1;
-static int hf_docsis_tlv_snmpv3_ntfy_rcvr = -1;
-static int hf_docsis_tlv_enable_20_mode = -1;
-static int hf_docsis_tlv_enable_test_modes = -1;
-/* static int hf_docsis_tlv_ds_ch_list = -1; */
-static int hf_docsis_tlv_mc_mac_address = -1;
-/* static int hf_docsis_tlv_dut_filter = -1; */
-/* static int hf_docsis_tlv_tcc = -1; */
-/* static int hf_docsis_tlv_sid_cl = -1; */
-/* static int hf_docsis_tlv_rcp = -1; */
-/* static int hf_docsis_tlv_rcc = -1; */
-/* static int hf_docsis_tlv_dsid = -1; */
-/* static int hf_docsis_tlv_sec_assoc = -1; */
-static int hf_docsis_tlv_init_ch_timeout = -1;
-/* static int hf_docsis_tlv_ch_asgn = -1; */
-static int hf_docsis_tlv_cm_init_reason = -1;
-static int hf_docsis_tlv_sw_upg_srvr_ipv6 = -1;
-static int hf_docsis_tlv_tftp_prov_cm_ipv6_addr = -1;
-static int hf_docsis_tlv_us_drop_clfy = -1;
-static int hf_docsis_tlv_subs_mgmt_ipv6_lst = -1;
-static int hf_docsis_tlv_us_drop_clfy_group_id = -1;
-static int hf_docsis_tlv_subs_mgmt_ctrl_max_cpe_ipv6 = -1;
-/* static int hf_docsis_tlv_cmts_mc_sess_enc = -1; */
-
-static int hf_docsis_tlv_cos_id = -1;
-static int hf_docsis_tlv_cos_sid = -1;
-static int hf_docsis_tlv_cos_max_down = -1;
-static int hf_docsis_tlv_cos_max_up = -1;
-static int hf_docsis_tlv_cos_up_chnl_pri = -1;
-static int hf_docsis_tlv_cos_min_grntd_up = -1;
-static int hf_docsis_tlv_cos_max_up_burst = -1;
-static int hf_docsis_tlv_cos_privacy_enable = -1;
-
-static int hf_docsis_tlv_mcap_concat = -1;
-static int hf_docsis_tlv_mcap_docs_ver = -1;
-static int hf_docsis_tlv_mcap_frag = -1;
-static int hf_docsis_tlv_mcap_phs = -1;
-static int hf_docsis_tlv_mcap_igmp = -1;
-static int hf_docsis_tlv_mcap_down_said = -1;
-static int hf_docsis_tlv_mcap_up_sid = -1;
-static int hf_docsis_tlv_mcap_privacy = -1;
-static int hf_docsis_tlv_mcap_8021P_filter = -1;
-static int hf_docsis_tlv_mcap_8021Q_filter = -1;
-static int hf_docsis_tlv_mcap_xmit_eq_taps_per_sym = -1;
-static int hf_docsis_tlv_mcap_xmit_eq_taps = -1;
-static int hf_docsis_tlv_mcap_dcc = -1;
-static int hf_docsis_tlv_mcap_ip_filters = -1;
-static int hf_docsis_tlv_mcap_llc_filters = -1;
-static int hf_docsis_tlv_mcap_exp_unicast_sid = -1;
-static int hf_docsis_tlv_mcap_rnghoff_cm = -1;
-static int hf_docsis_tlv_mcap_rnghoff_erouter = -1;
-static int hf_docsis_tlv_mcap_rnghoff_emta = -1;
-static int hf_docsis_tlv_mcap_rnghoff_estb = -1;
-static int hf_docsis_tlv_mcap_l2vpn = -1;
-static int hf_docsis_tlv_mcap_l2vpn_esafe = -1;
-static int hf_docsis_tlv_mcap_dut_filtering = -1;
-static int hf_docsis_tlv_mcap_us_freq_range = -1;
-static int hf_docsis_tlv_mcap_us_srate_160 = -1;
-static int hf_docsis_tlv_mcap_us_srate_320 = -1;
-static int hf_docsis_tlv_mcap_us_srate_640 = -1;
-static int hf_docsis_tlv_mcap_us_srate_1280 = -1;
-static int hf_docsis_tlv_mcap_us_srate_2560 = -1;
-static int hf_docsis_tlv_mcap_us_srate_5120 = -1;
-static int hf_docsis_tlv_mcap_sac = -1;
-static int hf_docsis_tlv_mcap_code_hop_mode2 = -1;
-static int hf_docsis_tlv_mcap_mtc = -1;
-static int hf_docsis_tlv_mcap_512_msps_utc = -1;
-static int hf_docsis_tlv_mcap_256_msps_utc = -1;
-static int hf_docsis_tlv_mcap_total_sid_cluster = -1;
-static int hf_docsis_tlv_mcap_sid_per_sf = -1;
-static int hf_docsis_tlv_mcap_mrc = -1;
-static int hf_docsis_tlv_mcap_total_dsid = -1;
-static int hf_docsis_tlv_mcap_reseq_dsid = -1;
-static int hf_docsis_tlv_mcap_mc_dsid = -1;
-static int hf_docsis_tlv_mcap_mc_dsid_fwd = -1;
-static int hf_docsis_tlv_mcap_fctype_fwd = -1;
-static int hf_docsis_tlv_mcap_dpv_path = -1;
-static int hf_docsis_tlv_mcap_dpv_packet = -1;
-static int hf_docsis_tlv_mcap_ugs = -1;
-static int hf_docsis_tlv_mcap_map_ucd = -1;
-static int hf_docsis_tlv_mcap_udc = -1;
-static int hf_docsis_tlv_mcap_ipv6 = -1;
-static int hf_docsis_tlv_mcap_ext_us_trans_power = -1;
-static int hf_docsis_tlv_mcap_em = -1;
-static int hf_docsis_tlv_mcap_em_1x1 = -1;
-static int hf_docsis_tlv_mcap_em_light_sleep = -1;
-static int hf_docsis_tlv_mcap_cm_status_ack = -1;
-
-static int hf_docsis_tlv_clsfr_ref = -1;
-static int hf_docsis_tlv_clsfr_id = -1;
-static int hf_docsis_tlv_clsfr_sflow_ref = -1;
-static int hf_docsis_tlv_clsfr_sflow_id = -1;
-static int hf_docsis_tlv_clsfr_rule_pri = -1;
-static int hf_docsis_tlv_clsfr_act_state = -1;
-static int hf_docsis_tlv_clsfr_dsc_act = -1;
-/* static int hf_docsis_tlv_clsfr_err = -1; */
-/* static int hf_docsis_tlv_ipclsfr = -1; */
-/* static int hf_docsis_tlv_ethclsfr = -1; */
-/* static int hf_docsis_tlv_dot1qclsfr = -1; */
-
-static int hf_docsis_tlv_clsfr_vendor_spc = -1;
-
-static int hf_docsis_tlv_clsfr_err_param = -1;
-static int hf_docsis_tlv_clsfr_err_code = -1;
-static int hf_docsis_tlv_clsfr_err_msg = -1;
-
-static int hf_docsis_tlv_ipclsfr_tosmask = -1;
-static int hf_docsis_tlv_ipclsfr_ipproto = -1;
-static int hf_docsis_tlv_ipclsfr_src = -1;
-static int hf_docsis_tlv_ipclsfr_dst = -1;
-static int hf_docsis_tlv_ipclsfr_srcmask = -1;
-static int hf_docsis_tlv_ipclsfr_dstmask = -1;
-static int hf_docsis_tlv_ipclsfr_sport_start = -1;
-static int hf_docsis_tlv_ipclsfr_sport_end = -1;
-static int hf_docsis_tlv_ipclsfr_dport_start = -1;
-static int hf_docsis_tlv_ipclsfr_dport_end = -1;
-
-static int hf_docsis_tlv_ip6clsfr_tc_low = -1;
-static int hf_docsis_tlv_ip6clsfr_tc_high = -1;
-static int hf_docsis_tlv_ip6clsfr_tc_mask = -1;
-static int hf_docsis_tlv_ip6clsfr_flow_label = -1;
-static int hf_docsis_tlv_ip6clsfr_next_header = -1;
-static int hf_docsis_tlv_ip6clsfr_src = -1;
-static int hf_docsis_tlv_ip6clsfr_src_prefix_length = -1;
-static int hf_docsis_tlv_ip6clsfr_dst = -1;
-static int hf_docsis_tlv_ip6clsfr_dst_prefix_length = -1;
-
-static int hf_docsis_tlv_ethclsfr_dmac = -1;
-static int hf_docsis_tlv_ethclsfr_smac = -1;
-static int hf_docsis_tlv_ethclsfr_ethertype = -1;
-
-static int hf_docsis_tlv_dot1qclsfr_user_pri = -1;
-static int hf_docsis_tlv_dot1qclsfr_vlanid = -1;
-static int hf_docsis_tlv_dot1qclsfr_vendorspec = -1;
-
-static int hf_docsis_tlv_sflow_ref = -1;
-static int hf_docsis_tlv_sflow_id = -1;
-static int hf_docsis_tlv_sflow_sid = -1;
-static int hf_docsis_tlv_sflow_classname = -1;
-static int hf_docsis_tlv_sflow_qos_param = -1;
-/* static int hf_docsis_tlv_sflow_err = -1; */
-static int hf_docsis_tlv_sflow_traf_pri = -1;
-static int hf_docsis_tlv_sflow_max_sus = -1;
-static int hf_docsis_tlv_sflow_max_burst = -1;
-static int hf_docsis_tlv_sflow_min_traf = -1;
-static int hf_docsis_tlv_sflow_ass_min_pkt_size = -1;
-static int hf_docsis_tlv_sflow_timeout_active = -1;
-static int hf_docsis_tlv_sflow_timeout_admitted = -1;
-static int hf_docsis_tlv_sflow_req_attr_mask = -1;
-static int hf_docsis_tlv_sflow_forb_attr_mask = -1;
-static int hf_docsis_tlv_sflow_attr_aggr_rule_mask = -1;
-static int hf_docsis_tlv_sflow_vendor_spec = -1;
-static int hf_docsis_tlv_sflow_max_concat_burst = -1;
-static int hf_docsis_tlv_sflow_sched_type = -1;
-static int hf_docsis_tlv_sflow_reqxmit_pol = -1;
-static int hf_docsis_tlv_sflow_reqxmit_all_cm_broadcast = -1;
-static int hf_docsis_tlv_sflow_reqxmit_priority_multicast = -1;
-static int hf_docsis_tlv_sflow_reqxmit_req_data_requests = -1;
-static int hf_docsis_tlv_sflow_reqxmit_req_data_data = -1;
-static int hf_docsis_tlv_sflow_reqxmit_piggy_back = -1;
-static int hf_docsis_tlv_sflow_reqxmit_concatenate_data = -1;
-static int hf_docsis_tlv_sflow_reqxmit_fragment = -1;
-static int hf_docsis_tlv_sflow_reqxmit_suppress_payload = -1;
-static int hf_docsis_tlv_sflow_reqxmit_drop_packets = -1;
-static int hf_docsis_tlv_sflow_nominal_polling = -1;
-static int hf_docsis_tlv_sflow_tolerated_jitter = -1;
-static int hf_docsis_tlv_sflow_ugs_size = -1;
-static int hf_docsis_tlv_sflow_nom_grant_intvl = -1;
-static int hf_docsis_tlv_sflow_tol_grant_jitter = -1;
-static int hf_docsis_tlv_sflow_grants_per_intvl = -1;
-static int hf_docsis_tlv_sflow_ip_tos_overwrite = -1;
-static int hf_docsis_tlv_sflow_ugs_timeref = -1;
-static int hf_docsis_tlv_sflow_max_down_latency = -1;
-
-static int hf_docsis_tlv_sflow_err_param = -1;
-static int hf_docsis_tlv_sflow_err_code = -1;
-static int hf_docsis_tlv_sflow_err_msg = -1;
-
-static int hf_docsis_tlv_phs_class_ref = -1;
-static int hf_docsis_tlv_phs_class_id = -1;
-static int hf_docsis_tlv_phs_sflow_ref = -1;
-static int hf_docsis_tlv_phs_sflow_id = -1;
-static int hf_docsis_tlv_phs_dsc_action = -1;
-/* static int hf_docsis_tlv_phs_err = -1; */
-static int hf_docsis_tlv_phs_phsf = -1;
-static int hf_docsis_tlv_phs_phsm = -1;
-/* static int hf_docsis_tlv_phs_phsv = -1; */
-static int hf_docsis_tlv_phs_phsi = -1;
-static int hf_docsis_tlv_phs_phss = -1;
-static int hf_docsis_tlv_phs_vendorspec = -1;
-
-static int hf_docsis_tlv_phs_err_param = -1;
-static int hf_docsis_tlv_phs_err_code = -1;
-static int hf_docsis_tlv_phs_err_msg = -1;
-
-/* static int hf_docsis_tlv_ds_ch_list_single = -1; */
-/* static int hf_docsis_tlv_ds_ch_list_range = -1; */
-static int hf_docsis_tlv_ds_ch_list_default_timeout = -1;
-
-static int hf_docsis_tlv_single_ch_timeout = -1;
-static int hf_docsis_tlv_single_ch_freq = -1;
-
-static int hf_docsis_tlv_freq_rng_timeout = -1;
-static int hf_docsis_tlv_freq_rng_start = -1;
-static int hf_docsis_tlv_freq_rng_end = -1;
-static int hf_docsis_tlv_freq_rng_step = -1;
-
-static int hf_docsis_tlv_dut_filter_control = -1;
-static int hf_docsis_tlv_dut_filter_cmim = -1;
-
-static int hf_docsis_tlv_tcc_refid = -1;
-static int hf_docsis_tlv_tcc_us_ch_action= -1;
-static int hf_docsis_tlv_tcc_us_ch_id= -1;
-static int hf_docsis_tlv_tcc_new_us_ch_id= -1;
-/* static int hf_docsis_tlv_tcc_ucd = -1; */
-static int hf_docsis_tlv_tcc_rng_sid= -1;
-static int hf_docsis_tlv_tcc_init_tech= -1;
-/* static int hf_docsis_tlv_tcc_rng_parms= -1; */
-static int hf_docsis_tlv_tcc_dyn_rng_win= -1;
-/* static int hf_docsis_tlv_tcc_err = -1; */
-
-static int hf_docsis_rng_parms_us_ch_id = -1;
-static int hf_docsis_rng_parms_time_off_int = -1;
-static int hf_docsis_rng_parms_time_off_frac = -1;
-static int hf_docsis_rng_parms_power_off = -1;
-static int hf_docsis_rng_parms_freq_off = -1;
-
-static int hf_docsis_tcc_err_subtype = -1;
-static int hf_docsis_tcc_err_code = -1;
-static int hf_docsis_tcc_err_msg = -1;
-
-static int hf_docsis_sid_cl_sf_id = -1;
-/* static int hf_docsis_sid_cl_enc = -1; */
-/* static int hf_docsis_sid_cl_so_crit = -1; */
-
-static int hf_docsis_sid_cl_enc_id = -1;
-/* static int hf_docsis_sid_cl_enc_map = -1; */
-
-static int hf_docsis_sid_cl_map_us_ch_id = -1;
-static int hf_docsis_sid_cl_map_sid = -1;
-static int hf_docsis_sid_cl_map_action = -1;
-
-static int hf_docsis_sid_cl_so_max_req = -1;
-static int hf_docsis_sid_cl_so_max_out_bytes = -1;
-static int hf_docsis_sid_cl_so_max_req_bytes = -1;
-static int hf_docsis_sid_cl_so_max_time = -1;
-
-static int hf_docsis_tlv_rcp_id = -1;
-static int hf_docsis_tlv_rcp_name = -1;
-static int hf_docsis_tlv_rcp_freq_spc = -1;
-/* static int hf_docsis_tlv_rcp_rcv_mod_enc = -1; */
-/* static int hf_docsis_tlv_rcp_rcv_ch = -1; */
-/* static int hf_docsis_tlv_rcp_ven_spec = -1; */
-
-static int hf_docsis_rcv_mod_enc_idx = -1;
-/* static int hf_docsis_rcv_mod_enc_adj_ch = -1; */
-/* static int hf_docsis_rcv_mod_enc_ch_bl_rng = -1; */
-static int hf_docsis_rcv_mod_enc_ctr_freq_asgn = -1;
-static int hf_docsis_rcv_mod_enc_rsq_ch_subs_cap = -1;
-static int hf_docsis_rcv_mod_enc_conn = -1;
-static int hf_docsis_rcv_mod_enc_phy_layr_parms = -1;
-
-static int hf_docsis_rcc_rcv_mod_enc_idx = -1;
-static int hf_docsis_rcc_rcv_mod_enc_ctr_freq_asgn = -1;
-static int hf_docsis_rcc_rcv_mod_enc_conn = -1;
-
-static int hf_docsis_ch_bl_rng_min_ctr_freq = -1;
-static int hf_docsis_ch_bl_rng_max_ctr_freq = -1;
-
-static int hf_docsis_rcv_ch_idx = -1;
-static int hf_docsis_rcv_ch_conn = -1;
-static int hf_docsis_rcv_ch_conn_off = -1;
-static int hf_docsis_rcv_ch_prim_ds_ch_ind = -1;
-
-static int hf_docsis_rcc_rcv_ch_idx = -1;
-static int hf_docsis_rcc_rcv_ch_conn = -1;
-static int hf_docsis_rcc_rcv_ch_ctr_freq_asgn = -1;
-static int hf_docsis_rcc_rcv_ch_prim_ds_ch_ind = -1;
-
-static int hf_docsis_tlv_rcc_id = -1;
-/* static int hf_docsis_tlv_rcc_rcv_mod_enc = -1; */
-/* static int hf_docsis_tlv_rcc_rcv_ch = -1; */
-/* static int hf_docsis_tlv_rcc_part_serv_ds_ch = -1; */
-/* static int hf_docsis_tlv_rcc_ven_spec = -1; */
-/* static int hf_docsis_tlv_rcc_err = -1; */
-
-static int hf_docsis_tlv_rcc_err_mod_or_ch = -1;
-static int hf_docsis_tlv_rcc_err_idx = -1;
-static int hf_docsis_tlv_rcc_err_param = -1;
-static int hf_docsis_tlv_rcc_err_code = -1;
-static int hf_docsis_tlv_rcc_err_msg = -1;
-
-static int hf_docsis_tlv_dsid_id = -1;
-static int hf_docsis_tlv_dsid_action = -1;
-/* static int hf_docsis_tlv_dsid_ds_reseq = -1; */
-/* static int hf_docsis_tlv_dsid_mc = -1; */
-
-static int hf_docsis_ds_reseq_dsid = -1;
-static int hf_docsis_ds_reseq_ch_lst = -1;
-static int hf_docsis_ds_reseq_wait_time = -1;
-static int hf_docsis_ds_reseq_warn_thresh = -1;
-static int hf_docsis_ds_reseq_ho_timer = -1;
-
-/* static int hf_docsis_tlv_dsid_mc_addr = -1; */
-static int hf_docsis_tlv_dsid_mc_cmim = -1;
-static int hf_docsis_tlv_dsid_mc_group = -1;
-/* static int hf_docsis_tlv_dsid_mc_phs = -1; */
-
-static int hf_docsis_mc_addr_action = -1;
-static int hf_docsis_mc_addr_addr = -1;
-
-static int hf_docsis_tlv_sec_assoc_action = -1;
-static int hf_docsis_tlv_sec_assoc_desc = -1;
-
-static int hf_docsis_ch_asgn_us_ch_id = -1;
-static int hf_docsis_ch_asgn_rx_freq = -1;
-
-static int hf_docsis_cmts_mc_sess_enc_grp = -1;
-static int hf_docsis_cmts_mc_sess_enc_src = -1;
-
-static int hf_docsis_tlv_unknown = -1;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_tlv = -1;
-static gint ett_docsis_tlv_cos = -1;
-static gint ett_docsis_tlv_mcap = -1;
-static gint ett_docsis_tlv_mcap_em = -1;
-static gint ett_docsis_tlv_clsfr = -1;
-static gint ett_docsis_tlv_clsfr_ip = -1;
-static gint ett_docsis_tlv_clsfr_ip6 = -1;
-static gint ett_docsis_tlv_clsfr_ip6_tc = -1;
-static gint ett_docsis_tlv_clsfr_eth = -1;
-static gint ett_docsis_tlv_clsfr_err = -1;
-static gint ett_docsis_tlv_phs = -1;
-static gint ett_docsis_tlv_phs_err = -1;
-static gint ett_docsis_tlv_clsfr_dot1q = -1;
-static gint ett_docsis_tlv_reqxmitpol = -1;
-static gint ett_docsis_tlv_sflow_err = -1;
-static gint ett_docsis_tlv_svc_unavail = -1;
-static gint ett_docsis_tlv_snmpv3_kick = -1;
-static gint ett_docsis_tlv_ds_ch_list = -1;
-static gint ett_docsis_tlv_ds_ch_list_single = -1;
-static gint ett_docsis_tlv_ds_ch_list_range = -1;
-static gint ett_docsis_tlv_dut_filter = -1;
-static gint ett_docsis_tlv_tcc = -1;
-static gint ett_docsis_tlv_tcc_ucd = -1;
-static gint ett_docsis_tlv_tcc_rng_parms = -1;
-static gint ett_docsis_tlv_tcc_err = -1;
-static gint ett_docsis_tlv_sid_cl = -1;
-static gint ett_docsis_tlv_sid_cl_enc = -1;
-static gint ett_docsis_tlv_sid_cl_enc_map = -1;
-static gint ett_docsis_tlv_sid_cl_so = -1;
-static gint ett_docsis_tlv_rcp = -1;
-static gint ett_docsis_tlv_rcp_rcv_mod_enc = -1;
-static gint ett_docsis_tlv_rcp_ch_bl_rng = -1;
-static gint ett_docsis_tlv_rcp_rcv_ch = -1;
-static gint ett_docsis_tlv_rcc = -1;
-static gint ett_docsis_tlv_rcc_rcv_mod_enc = -1;
-static gint ett_docsis_tlv_rcc_rcv_ch = -1;
-static gint ett_docsis_tlv_rcc_err = -1;
-static gint ett_docsis_tlv_dsid = -1;
-static gint ett_docsis_tlv_dsid_ds_reseq = -1;
-static gint ett_docsis_tlv_dsid_mc = -1;
-static gint ett_docsis_tlv_dsid_mc_addr = -1;
-static gint ett_docsis_tlv_sec_assoc = -1;
-static gint ett_docsis_tlv_ch_asgn = -1;
-static gint ett_docsis_cmts_mc_sess_enc = -1;
-
-static expert_field ei_docsis_tlv_tlvlen_bad = EI_INIT;
-
-static const true_false_string on_off_tfs = {
- "On",
- "Off"
-};
-
-static const value_string on_off_vals[] = {
- {0, "Off"},
- {1, "On"},
- {0, NULL},
-};
-
-static const true_false_string ena_dis_tfs = {
- "Enable",
- "Disable"
-};
-
-static const value_string sup_unsup_vals[] = {
- {0, "Unsupported"},
- {1, "Supported"},
- {0, NULL},
-};
-
-static const true_false_string sup_unsup_tfs = {
- "Supported",
- "Unsupported"
-};
-
-static const value_string docs_ver_vals[] = {
- {0, "v1.0"},
- {1, "v1.1"},
- {2, "v2.0"},
- {3, "v3.0"},
- {4, "v3.1"},
- {0, NULL},
-};
-
-static const true_false_string activation_tfs = {
- "Active",
- "Inactive"
-};
-
-static const value_string dsc_act_vals[] = {
- {0, "DSC Add Classifier"},
- {1, "DSC Replace Classifier"},
- {2, "DSC Delete Classifier"},
- {0, NULL},
-};
-
-static const value_string qos_param_vals[] = {
- {0x01, "Apply to provisioned set only"},
- {0x02, "Perform admission control add apply to admitted set"},
- {0x03, "Apply to provisioned and admitted set; Perform admission control"},
- {0x04, "Perform admission control if needed and apply to active set"},
- {0x05,
- "Apply to provisioned and active sets; Admission control on admitted set in separate service flow, and activate service flow"},
- {0x06,
- "Perform admission control and activate; Apply to admitted and active sets"},
- {0x07,
- "Apply to Provisioned, Active and Admitted Sets; Admission Control and Activate Service Flow"},
- {0, NULL},
-};
-
-static const value_string sched_type_vals[] = {
- {0, "Reserved"},
- {1, "Undefined (CMTS Dependent)"},
- {2, "Best Effort Service"},
- {3, "Non-Real-Time Polling Service"},
- {4, "Real-Time Polling Service"},
- {5, "Unsolicited Grant Service w/Activity Detection"},
- {6, "Unsolicited Grant Service"},
- {0, NULL},
-};
-
-static const value_string action_vals[] = {
- {0, "Add PHS Rule"},
- {1, "Set PHS Rule"},
- {2, "Delete PHS Rule"},
- {3, "Delete all PHS Rules"},
- {0, NULL},
-};
-
-#if 0
-static const true_false_string verify_tfs = {
- "Don't Verify",
- "Verify"
-};
-#endif
-
-static const value_string rng_tech_vals[] = {
- {0, "Perform initial maintenance on new channel"},
- {1, "Perform only station maintenance on new channel"},
- {2, "Perform either initial maintenance or station maintenance on new channel"},
- {3, "Use the new channel directly without performing initial or station maintenance"},
- {0, NULL},
-};
-
-
-const value_string docsis_conf_code[] = {
- { 0, "okay/success"},
- { 1, "Reject: Other/Auth failure (1.0)"},
- { 2, "Reject: Unrecognized configuration setting/COS failure (1.0)"},
- { 3, "Reject: Temporary/Reject resource"},
- { 4, "Reject: Permanent/Reject admin"},
- { 5, "Reject: Not owner"},
- { 6, "Reject: Service flow not found"},
- { 7, "Reject: Service flow exists"},
- { 8, "Reject: Required parameter not present"},
- { 9, "Reject: Header suppression"},
- { 10, "Reject: Unknown transaction id"},
- { 11, "Reject: Authentication failure"},
- { 12, "Reject: Add aborted"},
- { 13, "Reject: Multiple errors"},
- { 14, "Reject: Classifier not found"},
- { 15, "Reject: Classifier exists"},
- { 16, "Reject: PHS rule not found"},
- { 17, "Reject: PHS rule exists"},
- { 18, "Reject: Duplicate reference ID or index in message"},
- { 19, "Reject: Multiple upstream service flows"},
- { 20, "Reject: Multiple downstream service flows"},
- { 21, "Reject: Classifier for another service flow"},
- { 22, "Reject: PHS for another service flow"},
- { 23, "Reject: Parameter invalid for context"},
- { 24, "Reject: Authorization failure"},
- { 25, "Reject: Temporary DCC"},
- { 26, "Reject: Downstream Inconsistency"},
- { 27, "Reject: Upstream Inconsistency"},
- { 28, "Reject: Insufficient SID Cluster Resources"},
- { 29, "Reject: Missing RCP"},
- { 30, "Partial Service"},
- { 31, "Reject: Temporary DBC"},
- { 32, "Reject: Unknown DSID"},
- { 33, "Reject: Unknown SID Cluster"},
- { 34, "Reject: Invalid Initialization Technique"},
- { 35, "Reject: No Change"},
- { 36, "Reject: Invalid DBC Request"},
- { 37, "Reject: Mode Switch"},
- { 38, "Reject: Insufficient Transmitters"},
- { 40, "Reject: Insufficient DSID Resources"},
- { 41, "Reject: Invalid DSID Encoding"},
- { 42, "Reject: Unknown Client MAC Address"},
- { 43, "Reject: Unknown SAID"},
- { 44, "Reject: Insufficient SA Resources"},
- { 45, "Reject: Invalid SA Encoding"},
- { 46, "Reject: Invalid SA Crypto Suite"},
- { 47, "Reject: TEK Exists"},
- { 48, "Reject: Invalid SID Cluster Encoding"},
- { 49, "Reject: Insufficient SID Resources"},
- { 50, "Reject: Unsupported Parameter Change"},
- { 51, "Reject: PHS Rule Fully Defined"},
- { 52, "Reject: No MAPs Or UCDs"},
- { 53, "Error: T3 Retries Exceeded"},
- { 54, "Error: T2 Timeout"},
- { 55, "Error: T4 Timeout"},
- { 56, "Error: Ranging Abort"},
- { 57, "Error: Initialization Channel Timeout"},
- { 58, "Error: DBC-REQ Incomplete"},
- { 59, "Reject: Too Many OFDMA Profiles"},
- { 60, "Reject: Too Many OFDM Profiles"},
- { 61, "Reject: EM Incorrect Primary DS"},
- { 62, "Reject: AQM Not Supported"},
- { 63, "Reject: Invalid DPD"},
- {100, "Reject: VLAD ID In Use"},
- {101, "Reject: Multipoint L2VPN"},
- {102, "Reject: Multipoint NSI"},
- {160, "Reject: Unknown RCP ID"},
- {161, "Reject: Multiple RCP IDs"},
- {162, "Reject: Missing Receive Module Index"},
- {163, "Reject: Invalid Receive Module Index"},
- {164, "Reject: Invalid Receive Channel Center Frequency"},
- {165, "Reject: Invalid Receive Module First Channel Center Frequency"},
- {166, "Reject: Missing Receive Module First Channel Center Frequency"},
- {167, "Reject: No Primary Downstream Channel Assigned"},
- {168, "Reject: Multiple Primary Downstream Channel Assigned"},
- {169, "Reject: Receive Module Connectivity Error"},
- {170, "Reject: Invalid Receive Channel Index"},
- {171, "Reject: Center Frequency Not Multiple of 62500 Hz"},
- {180, "Depart"},
- {181, "Arrive"},
- {182, "Reject: Already There"},
- {183, "Reject: Reject 2.0 Disable"},
- {200, "Reject: Major Service Flow Error"},
- {201, "Reject: Major Classifier Error"},
- {202, "Reject: Major PHS Rule Error"},
- {203, "Reject: Multiple Major Errors"},
- {204, "Reject: Message Syntax Error"},
- {205, "Reject: Primary Service Flow Error"},
- {206, "Reject: Message Too Big"},
- {207, "Reject: Invalid Modem Capabilities"},
- {208, "Reject: Bad RCC"},
- {209, "Reject: Bad TCC"},
- {210, "Reject: Dynamic Range Window Violation"},
- {211, "Reject: Unable to support Queue Depth"},
- {212, "Reject: Energy Management Parameters"},
- {213, "Reject: Invalid Backup Primary Downstream"},
- {0, NULL}
-};
-
-value_string_ext docsis_conf_code_ext = VALUE_STRING_EXT_INIT(docsis_conf_code);
-
-static const value_string next_header_vals[] = {
- {0, "Hop-by-Hop"},
- {60, "Destination"},
- {43, "Routing"},
- {44, "Fragment"},
- {51, "Authentication"},
- {50, "Encapsulation"},
- {59, "No"},
- {256, "All IPv6 Traffic"},
- {257, "All UDP and TCP Traffic"},
- {0, NULL},
-};
-
-static const value_string us_ch_action_vals[] = {
- {0, "No Action"},
- {1, "Add"},
- {2, "Change"},
- {3, "Delete"},
- {4, "Replace"},
- {5, "Re-range"},
- {0, NULL},
-};
-
-static const value_string init_tech_vals[] = {
- {0, "reserved"},
- {1, "Perform broadcast initial ranging before normal ops"},
- {2, "Perform unicast ranging before normal ops"},
- {3, "Perform either broadcast or unicast ranging before normal ops"},
- {4, "Use new channel directly without reinitializing or ranging"},
- {0, NULL},
-};
-
-static const value_string sid_ch_map_vals[] = {
- {0, "reserved"},
- {1, "Add"},
- {2, "Delete"},
- {0, NULL},
-};
-
-static const value_string mod_or_ch_vals[] = {
- {0, "reserved"},
- {1, "reserved"},
- {2, "reserved"},
- {3, "reserved"},
- {4, "Receive Module"},
- {5, "Receive Channel"},
- {0, NULL},
-};
-
-static const value_string dsid_action_vals[] = {
- {0, "Add"},
- {1, "Change"},
- {2, "Delete"},
- {0, NULL},
-};
-
-static const value_string add_del_vals[] = {
- {0, "Add"},
- {1, "Delete"},
- {0, NULL},
-};
-
-static const value_string init_reason_vals[] = {
- { 0, "reserved"},
- { 1, "Power On"},
- { 2, "T17 Lost Sync"},
- { 3, "All Upstream Failed"},
- { 4, "Bad DHCP Ack"},
- { 5, "Link Local Address in use"},
- { 6, "T6 Expired"},
- { 7, "REG-RSP not ok"},
- { 8, "BAD RCC/TCC"},
- { 9, "Failed Primary Downstream"},
- {10, "TCS failed on all upstreams"},
- {11, "reserved"},
- {12, "reserved"},
- {13, "reserved"},
- {14, "reserved"},
- {15, "MTCM Change"},
- {16, "T4 Expired"},
- {17, "No Primary SF on US Channel"},
- {18, "CM Control Init"},
- {19, "Dynamic Range Window Violation"},
- {0, NULL},
-};
-
-static const value_string docsis_freq_rng_vals[] = {
- {0, "Standard Upstream Frequency Range"},
- {1, "Standard and Extended Upstream Frequency Range"},
- {0, NULL},
-};
-
-static const value_string mc_dsid_fwd_vals[] = {
- {0, "No support for multicast DSID forwarding"},
- {1, "Support for GMAC explicit multicast DSID forwarding"},
- {2, "Support for GMAC promiscuous multicast DSID forwarding"},
- {0, NULL},
-};
-
-static const value_string fctype_fwd_vals[] = {
- {0, "Isolation Packet PDU Header (FC_Type of 10) is not forwarded"},
- {1, "Isolation Packet PDU Header (FC_Type of 10) is forwarded"},
- {0, NULL},
-};
-
-/* Dissection */
-static void
-dissect_phs_err (tvbuff_t * tvb, packet_info *pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *err_tree;
- proto_item *err_item;
- int pos = start;
-
- err_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sflow_err, &err_item,
- "5 Service Flow Error Encodings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case PHS_ERR_PARAM:
- if (length == 1)
- {
- proto_tree_add_item (err_tree, hf_docsis_tlv_phs_err_param, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PHS_ERR_CODE:
- if (length == 1)
- {
- proto_tree_add_item (err_tree, hf_docsis_tlv_phs_err_code, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PHS_ERR_MSG:
- proto_tree_add_item (err_tree, hf_docsis_tlv_phs_err_msg, tvb, pos,
- length, ENC_ASCII|ENC_NA);
- break;
- default:
- proto_tree_add_item (err_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static void
-dissect_phs (tvbuff_t * tvb, packet_info *pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *phs_tree;
- proto_item *phs_item;
- int pos = start;
-
- phs_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_phs, &phs_item,
- "26 PHS Encodings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case PHS_CLSFR_REF:
- if (length == 1)
- {
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_class_ref, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PHS_CLSFR_ID:
- if (length == 2)
- {
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_class_id, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PHS_SFLOW_REF:
- if (length == 2)
- {
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_sflow_ref, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PHS_SFLOW_ID:
- if (length == 4)
- {
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_sflow_id, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PHS_DSC_ACTION:
- if (length == 1)
- {
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_dsc_action,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PHS_ERRORS:
- dissect_phs_err (tvb, pinfo, phs_tree, pos, length);
- break;
- case PHS_FIELD:
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phsf, tvb, pos,
- length, ENC_NA);
- break;
- case PHS_INDEX:
- if (length == 1)
- {
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phsi, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PHS_MASK:
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phsm, tvb, pos,
- length, ENC_NA);
- break;
- case PHS_SUP_SIZE:
- if (length == 1)
- {
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phss, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PHS_VERIFICATION:
- if (length == 1)
- {
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phsf, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case PHS_VENDOR_SPEC:
- proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_vendorspec, tvb,
- pos, length, ENC_NA);
- break;
- default:
- proto_tree_add_item (phs_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static const true_false_string tfs_must_not_must = { "MUST NOT", "MUST" };
-static const true_false_string tfs_must_must_not = { "MUST", "MUST NOT" };
-
-static void
-dissect_reqxmit_policy (tvbuff_t * tvb, proto_tree * tree, int start)
-{
- static const gint *requests[] = {
- &hf_docsis_tlv_sflow_reqxmit_all_cm_broadcast,
- &hf_docsis_tlv_sflow_reqxmit_priority_multicast,
- &hf_docsis_tlv_sflow_reqxmit_req_data_requests,
- &hf_docsis_tlv_sflow_reqxmit_req_data_data,
- &hf_docsis_tlv_sflow_reqxmit_piggy_back,
- &hf_docsis_tlv_sflow_reqxmit_concatenate_data,
- &hf_docsis_tlv_sflow_reqxmit_fragment,
- &hf_docsis_tlv_sflow_reqxmit_suppress_payload,
- &hf_docsis_tlv_sflow_reqxmit_drop_packets,
- NULL
- };
- proto_tree_add_bitmask(tree, tvb, start, hf_docsis_tlv_sflow_reqxmit_pol,
- ett_docsis_tlv_reqxmitpol, requests, ENC_BIG_ENDIAN);
-}
-
-static void
-dissect_sflow_err (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
- guint16 len)
-{
- guint8 type, length;
- proto_tree *err_tree;
- proto_item *err_item;
- int pos = start;
-
- err_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sflow_err, &err_item,
- "5 Service Flow Error Encodings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case SFW_ERR_PARAM:
- if (length == 1)
- {
- proto_tree_add_item (err_tree, hf_docsis_tlv_sflow_err_param,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_ERR_CODE:
- if (length == 1)
- {
- proto_tree_add_item (err_tree, hf_docsis_tlv_sflow_err_code,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_ERR_MSG:
- proto_tree_add_item (err_tree, hf_docsis_tlv_sflow_err_msg, tvb,
- pos, length, ENC_ASCII|ENC_NA);
- break;
- default:
- proto_tree_add_item (err_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static void
-dissect_downstream_sflow (tvbuff_t * tvb, packet_info* pinfo, proto_tree * sflow_tree,
- proto_item* sflow_item, int start, guint16 len)
-{
- guint8 type, length;
- int pos = start;
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case SFW_MAX_DOWN_LAT:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_max_down_latency, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static void
-dissect_upstream_sflow (tvbuff_t * tvb, packet_info* pinfo, proto_tree * sflow_tree,
- proto_item* sflow_item, int start, guint16 len)
-{
- guint8 type, length;
- int pos = start;
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case SFW_MAX_CONCAT_BURST:
- if (length == 2)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_max_concat_burst, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_SCHEDULING_TYPE:
- if (length == 1)
- {
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_sched_type,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_REQ_XMIT_POL:
- dissect_reqxmit_policy (tvb, sflow_tree, pos);
- break;
- case SFW_NOM_POLL_INT:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_nominal_polling, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_POLL_JTTR_TOL:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_tolerated_jitter, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_UG_SIZE:
- if (length == 2)
- {
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_ugs_size,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_NOM_GRNT_INTV:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_nom_grant_intvl, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_GRNT_JTTR_TOL:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_tol_grant_jitter, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_GRNTS_PER_INTV:
- if (length == 1)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_grants_per_intvl, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_IP_TOS_OVERWRITE:
- if (length == 2)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_ip_tos_overwrite, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_UG_TIME_REF:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_ugs_timeref, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static void
-dissect_sflow (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len,
- guint8 direction)
-{
- guint8 type, length;
- proto_tree *sflow_tree;
- proto_item *sflow_item;
- int pos = start;
-
- if (direction == 24)
- sflow_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &sflow_item,
- "24 Upstream Service Flow (Length = %u)", len);
- else if (direction == 25)
- sflow_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &sflow_item,
- "25 Downstream Service Flow (Length = %u)", len);
- else
- return;
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case SFW_REF:
- if (length == 2)
- {
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_ref, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_ID:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_id, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_SID:
- if (length == 2)
- {
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_sid, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_SERVICE_CLASS_NAME:
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_classname, tvb,
- pos, length, ENC_ASCII|ENC_NA);
- break;
- case SFW_ERRORS:
- dissect_sflow_err (tvb, pinfo, sflow_tree, pos, length);
- break;
- case SFW_QOS_SET_TYPE:
- if (length == 1)
- {
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_qos_param,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_TRAF_PRI:
- if (length == 1)
- {
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_traf_pri,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_MAX_SUSTAINED:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_max_sus,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_MAX_BURST:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_max_burst,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_MIN_RSVD_TRAF:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_min_traf,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_MIN_RSVD_PACKETSIZE:
- if (length == 2)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_ass_min_pkt_size, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_ACTIVE_QOS_TIMEOUT:
- if (length == 2)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_timeout_active, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_ADMITT_QOS_TIMEOUT:
- if (length == 2)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_timeout_admitted, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_REQUIRED_ATTRIBUTE_MASK:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_req_attr_mask, tvb,
- pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
-
- }
- break;
- case SFW_FORBIDDEN_ATTRIBUTE_MASK:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_forb_attr_mask, tvb,
- pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_ATTRIBUTE_AGGREGATION_RULE_MASK:
- if (length == 4)
- {
- proto_tree_add_item (sflow_tree,
- hf_docsis_tlv_sflow_attr_aggr_rule_mask, tvb,
- pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SFW_VENDOR_SPEC:
- proto_tree_add_item (sflow_tree, hf_docsis_tlv_sflow_vendor_spec,
- tvb, pos, length, ENC_NA);
- break;
- default:
- if (direction == 24)
- dissect_upstream_sflow (tvb, pinfo, sflow_tree, sflow_item, pos - 2, length);
- else
- dissect_downstream_sflow (tvb, pinfo, sflow_tree, sflow_item, pos - 2, length);
- break;
-
- } /* switch (type) */
- pos = pos + length;
- } /* while(pos < start + len) */
-
-}
-
-static void
-dissect_dot1q_clsfr (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
- guint16 len)
-{
- guint8 type, length;
- proto_tree *dot1qclsfr_tree;
- proto_item *dot1qclsfr_item;
- int pos = start;
-
- dot1qclsfr_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, &dot1qclsfr_item,
- "11 801.1P/Q Classifiers (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case CFR_D1Q_USER_PRI:
- if (length == 2)
- {
- proto_tree_add_item (dot1qclsfr_tree,
- hf_docsis_tlv_dot1qclsfr_user_pri, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dot1qclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_D1Q_VLAN_ID:
- if (length == 2)
- {
- proto_tree_add_item (dot1qclsfr_tree,
- hf_docsis_tlv_dot1qclsfr_vlanid, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dot1qclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_D1Q_VENDOR_SPEC:
- proto_tree_add_item (dot1qclsfr_tree,
- hf_docsis_tlv_dot1qclsfr_vendorspec, tvb, pos,
- length, ENC_NA);
- break;
- default:
- proto_tree_add_item (dot1qclsfr_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static void
-dissect_eth_clsfr (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
- guint16 len)
-{
- guint8 type, length;
- proto_tree *ethclsfr_tree;
- proto_item *ethclsfr_item;
- int pos = start;
-
- ethclsfr_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_eth, &ethclsfr_item,
- "10 Ethernet Classifiers (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case CFR_ETH_DST_MAC:
- if (length == 6)
- {
- proto_tree_add_item (ethclsfr_tree, hf_docsis_tlv_ethclsfr_dmac,
- tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, ethclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_ETH_SRC_MAC:
- if (length == 6)
- {
- proto_tree_add_item (ethclsfr_tree, hf_docsis_tlv_ethclsfr_smac,
- tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, ethclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_ETH_DSAP:
- if (length == 3)
- {
- proto_tree_add_item (ethclsfr_tree,
- hf_docsis_tlv_ethclsfr_ethertype, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ethclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (ethclsfr_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static void
-dissect_clsfr_err (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
- guint16 len)
-{
- guint8 type, length;
- proto_tree *err_tree;
- proto_tree *err_item;
- int pos = start;
-
- err_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_err, &err_item,
- "8 Classifier Error Encodings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case CFR_ERR_PARAM:
- if (length == 1)
- proto_tree_add_item (err_tree, hf_docsis_tlv_clsfr_err_param, tvb,
- pos, length, ENC_BIG_ENDIAN);
- else if (length == 2)
- {
- proto_tree_add_item (err_tree, hf_docsis_tlv_clsfr_err_param,
- tvb, pos, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (err_tree, hf_docsis_tlv_clsfr_err_param,
- tvb, pos + 1, 1, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_ERR_CODE:
- if (length == 1)
- {
- proto_tree_add_item (err_tree, hf_docsis_tlv_clsfr_err_code,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_ERR_MSG:
- proto_tree_add_item (err_tree, hf_docsis_tlv_clsfr_err_msg, tvb,
- pos, length, ENC_ASCII|ENC_NA);
- break;
- default:
- proto_tree_add_item (err_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static void
-dissect_ip_classifier (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
- guint16 len)
-{
- guint8 type, length;
- proto_tree *ipclsfr_tree;
- proto_tree *ipclsfr_item;
- int pos = start;
-
- ipclsfr_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_ip, &ipclsfr_item,
- "9 IP Classifier (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case CFR_IP_TOS_RANGE_MASK:
- if (length == 3)
- {
- proto_tree_add_item (ipclsfr_tree,
- hf_docsis_tlv_ipclsfr_tosmask, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP_PROTO:
- if (length == 2)
- {
- proto_tree_add_item (ipclsfr_tree,
- hf_docsis_tlv_ipclsfr_ipproto, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP_SOURCE_ADDR:
- if (length == 4)
- {
- proto_tree_add_item (ipclsfr_tree, hf_docsis_tlv_ipclsfr_src,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP_SOURCE_MASK:
- if (length == 4)
- {
- proto_tree_add_item (ipclsfr_tree,
- hf_docsis_tlv_ipclsfr_srcmask, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP_DEST_ADDR:
- if (length == 4)
- {
- proto_tree_add_item (ipclsfr_tree, hf_docsis_tlv_ipclsfr_dst,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP_DEST_MASK:
- if (length == 4)
- {
- proto_tree_add_item (ipclsfr_tree,
- hf_docsis_tlv_ipclsfr_dstmask, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP_SRCPORT_START:
- if (length == 2)
- {
- proto_tree_add_item (ipclsfr_tree,
- hf_docsis_tlv_ipclsfr_sport_start, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP_SRCPORT_END:
- if (length == 2)
- {
- proto_tree_add_item (ipclsfr_tree,
- hf_docsis_tlv_ipclsfr_sport_end, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP_DSTPORT_START:
- if (length == 2)
- {
- proto_tree_add_item (ipclsfr_tree,
- hf_docsis_tlv_ipclsfr_dport_start, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP_DSTPORT_END:
- if (length == 2)
- {
- proto_tree_add_item (ipclsfr_tree,
- hf_docsis_tlv_ipclsfr_dport_end, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (ipclsfr_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static void
-dissect_ip6_classifier_tc (tvbuff_t * tvb, proto_tree * tree, int start,
- guint16 len)
-{
- proto_tree *ip6clsfr_tc_tree;
- proto_tree *ip6clsfr_tc_item;
-
- ip6clsfr_tc_tree = proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_ip6_tc, &ip6clsfr_tc_item,
- "..1 IPv6 Traffic Class Range and Mask");
-
- proto_tree_add_item(ip6clsfr_tc_tree, hf_docsis_tlv_ip6clsfr_tc_low, tvb, start, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(ip6clsfr_tc_tree, hf_docsis_tlv_ip6clsfr_tc_high, tvb, start + 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(ip6clsfr_tc_tree, hf_docsis_tlv_ip6clsfr_tc_mask, tvb, start + 2, 1, ENC_BIG_ENDIAN);
-
-}
-
-static void
-dissect_ip6_classifier (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
- guint16 len)
-{
- guint8 type, length;
- proto_tree *ip6clsfr_tree;
- proto_tree *ip6clsfr_item;
- int pos = start;
-
-
- ip6clsfr_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_ip6, &ip6clsfr_item,
- ".12 IPv6 Classifier (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case CFR_IP6_TRAFFIC_CLASS:
- if (length == 3)
- {
- dissect_ip6_classifier_tc(tvb, ip6clsfr_tree, pos, length);
- }
- else
- {
- expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP6_FLOW_LABEL:
- if (length == 4)
- {
- proto_tree_add_item (ip6clsfr_tree,
- hf_docsis_tlv_ip6clsfr_flow_label, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP6_NEXT_HEADER:
- if (length == 2)
- {
- proto_tree_add_item (ip6clsfr_tree,
- hf_docsis_tlv_ip6clsfr_next_header, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP6_SOURCE_ADDR:
- if (length == 16)
- {
- proto_tree_add_item (ip6clsfr_tree,
- hf_docsis_tlv_ip6clsfr_src, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP6_SOURCE_PREFIX_LENGTH:
- if (length == 1)
- {
- proto_tree_add_item (ip6clsfr_tree,
- hf_docsis_tlv_ip6clsfr_src_prefix_length, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP6_DESTINATION_ADDR:
- if (length == 16)
- {
- proto_tree_add_item (ip6clsfr_tree,
- hf_docsis_tlv_ip6clsfr_dst, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_IP6_DESTINATION_PREFIX_LENGTH:
- if (length == 1)
- {
- proto_tree_add_item (ip6clsfr_tree,
- hf_docsis_tlv_ip6clsfr_dst_prefix_length, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ip6clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (ip6clsfr_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_classifiers (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
- guint16 len, guint8 direction)
-{
- guint8 type, length;
- proto_tree *clsfr_tree;
- proto_item *clsfr_item;
- int pos = start;
-
- if (direction == 22)
- clsfr_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &clsfr_item,
- "22 Upstream Packet Classifier (Length = %u)",
- len);
- else if (direction == 23)
- clsfr_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &clsfr_item,
- "23 Downstream Packet Classifier (Length = %u)",
- len);
- else
- return;
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case CFR_REF:
- if (length == 1)
- {
- proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_ref, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_ID:
- if (length == 2)
- {
- proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_id, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_SFLOW_REF:
- if (length == 2)
- {
- proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_sflow_ref,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_SFLOW_ID:
- if (length == 4)
- {
- proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_sflow_id,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_RULE_PRI:
- if (length == 1)
- {
- proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_rule_pri,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_ACT_STATE:
- if (length == 1)
- {
- proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_act_state,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_DSA_ACTION:
- if (length == 1)
- {
- proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_dsc_act,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CFR_ERROR:
- dissect_clsfr_err (tvb, pinfo, clsfr_tree, pos, length);
- break;
- case CFR_IP_CLASSIFIER:
- dissect_ip_classifier (tvb, pinfo, clsfr_tree, pos, length);
- break;
- case CFR_IP6_CLASSIFIER:
- dissect_ip6_classifier (tvb, pinfo, clsfr_tree, pos, length);
- break;
- case CFR_ETH_CLASSIFIER:
- dissect_eth_clsfr (tvb, pinfo, clsfr_tree, pos, length);
- break;
- case CFR_8021Q_CLASSIFIER:
- dissect_dot1q_clsfr (tvb, pinfo, clsfr_tree, pos, length);
- break;
- case CFR_VENDOR_SPEC:
- proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_vendor_spc,
- tvb, pos, length, ENC_NA);
- break;
- default:
- proto_tree_add_item (clsfr_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static void
-dissect_doc10cos (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
- guint16 len)
-{
- guint8 type, length;
- proto_tree *doc10cos_tree;
- proto_tree *doc10cos_item;
- int pos = start;
-
- doc10cos_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, &doc10cos_item,
- "1 Docsis 1.0 Class of Service (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case 1:
- if (length == 1)
- {
- proto_tree_add_item (doc10cos_tree, hf_docsis_tlv_cos_id, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, doc10cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case 2:
- if (length == 2)
- {
- proto_tree_add_item (doc10cos_tree, hf_docsis_tlv_cos_sid, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, doc10cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (doc10cos_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
-
- } /* while */
-}
-
-static void
-dissect_modemcap (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start,
- guint16 len)
-{
- guint8 type, length;
- proto_tree *mcap_tree;
- proto_tree *mcap_item;
- int pos = start;
-
- mcap_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_mcap, &mcap_item,
- "5 Modem Capabilities Type (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case CAP_CONCAT:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_concat, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_DOCSIS_VER:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_docs_ver,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_FRAG:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_frag, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_PHS:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_phs, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_IGMP:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_igmp, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_PRIVACY:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_privacy, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_DOWN_SAID:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_down_said,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_UP_SID:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_up_sid, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_OPT_FILT:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_8021P_filter,
- tvb, pos, length, ENC_BIG_ENDIAN);
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_8021Q_filter,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_XMIT_EQPERSYM:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree,
- hf_docsis_tlv_mcap_xmit_eq_taps_per_sym,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_NUM_XMIT_EQ_TAPS:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_xmit_eq_taps,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_DCC:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_dcc, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_IP_FILTERS:
- if (length == 2)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ip_filters, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_LLC_FILTERS:
- if (length == 2)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_llc_filters, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_EXP_UNICAST_SID:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_exp_unicast_sid, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_RNG_HOFF:
- if (length == 4)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_rnghoff_cm, tvb,
- pos, length, ENC_BIG_ENDIAN);
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_rnghoff_erouter, tvb,
- pos, length, ENC_BIG_ENDIAN);
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_rnghoff_emta, tvb,
- pos, length, ENC_BIG_ENDIAN);
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_rnghoff_estb, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_L2VPN:
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_l2vpn, tvb,
- pos, length, ENC_NA);
- break;
- case CAP_L2VPN_ESAFE:
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_l2vpn_esafe, tvb,
- pos, length, ENC_NA);
- break;
- case CAP_DUT_FILTERING:
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_dut_filtering, tvb,
- pos, length, ENC_NA);
- break;
- case CAP_US_FREQ_RNG:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_freq_range, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_US_SRATE:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_160, tvb,
- pos, length, ENC_BIG_ENDIAN);
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_320, tvb,
- pos, length, ENC_BIG_ENDIAN);
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_640, tvb,
- pos, length, ENC_BIG_ENDIAN);
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_1280, tvb,
- pos, length, ENC_BIG_ENDIAN);
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_2560, tvb,
- pos, length, ENC_BIG_ENDIAN);
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_us_srate_5120, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_SAC:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_sac, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_CODE_HOP_M2:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_code_hop_mode2, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_MTC:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_mtc, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_512_MSPS_UTC:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_512_msps_utc, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_256_MSPS_UTC:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_256_msps_utc, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_TOTAL_SID_CLUST:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_total_sid_cluster, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_SID_PER_SF:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_sid_per_sf, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_MRC:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_mrc, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_TOTAL_DSID:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_total_dsid, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_RESEQ_DSID:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_reseq_dsid, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_MC_DSID:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_mc_dsid, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_MC_DSID_FWD:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_mc_dsid_fwd, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_FCTYPE_FWD:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_fctype_fwd, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_DPV:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_dpv_path, tvb,
- pos, length, ENC_BIG_ENDIAN);
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_dpv_packet, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_UGS:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ugs, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_MAP_UCD:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_map_ucd, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_UDC:
- if (length == 2)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_udc, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_IPV6:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ipv6, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_EXT_US_TRNS_PWR:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_ext_us_trans_power, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_EM:
- if (length == 4)
- {
- static const int * cap_em[] = {
- &hf_docsis_tlv_mcap_em_1x1,
- &hf_docsis_tlv_mcap_em_light_sleep,
- NULL
- };
-
- proto_tree_add_bitmask_with_flags(mcap_tree, tvb, pos, hf_docsis_tlv_mcap_em, ett_docsis_tlv_mcap_em, cap_em, ENC_BIG_ENDIAN, BMT_NO_FLAGS);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CAP_CM_STATUS_ACK:
- if (length == 1)
- {
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_mcap_cm_status_ack, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (mcap_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch (type) */
- pos = pos + length;
- } /* while (pos < pos+len) */
-}
-
-static void
-dissect_cos (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *cos_tree;
- proto_tree *cos_item;
- int pos = start;
-
- cos_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, &cos_item,
- "4 Class of Service Type (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case COS_CLASSID:
- if (length == 1)
- {
- proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_id, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case COS_MAX_DOWN:
- if (length == 4)
- {
- proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_max_down, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case COS_MAX_UP:
- if (length == 4)
- {
- proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_max_up, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case COS_UP_CH_PRIO:
- if (length == 1)
- {
- proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_up_chnl_pri,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case COS_MIN_UP_RATE:
- if (length == 4)
- {
- proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_min_grntd_up,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case COS_MAX_UP_BURST:
- if (length == 2)
- {
- proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_max_up_burst,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case COS_BP_ENABLE:
- if (length == 1)
- {
- proto_tree_add_item (cos_tree, hf_docsis_tlv_cos_privacy_enable,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (cos_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch (type) */
- pos = pos + length;
- } /* while (pos < pos+len) */
-}
-
-static void
-dissect_svc_unavail(tvbuff_t * tvb, proto_tree * tree, int pos, guint16 length) {
-
- proto_item *svc_unavail_it;
- proto_tree *svc_unavail_tree;
- svc_unavail_it = proto_tree_add_item (tree,
- hf_docsis_tlv_svc_unavail,
- tvb, pos, length, ENC_NA);
- svc_unavail_tree = proto_item_add_subtree(svc_unavail_it, ett_docsis_tlv_svc_unavail );
- proto_tree_add_item (svc_unavail_tree,
- hf_docsis_tlv_svc_unavail_classid, tvb,
- pos, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (svc_unavail_tree,
- hf_docsis_tlv_svc_unavail_type, tvb,
- pos+1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item (svc_unavail_tree,
- hf_docsis_tlv_svc_unavail_code, tvb,
- pos+2, 1, ENC_BIG_ENDIAN);
-
-}
-
-static void
-dissect_snmpv3_kickstart(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) {
- proto_item *snmpv3_it;
- proto_tree *snmpv3_tree;
- guint8 type, length;
- int pos = start;
-
- snmpv3_it = proto_tree_add_item (tree,
- hf_docsis_tlv_snmpv3_kick,
- tvb, start, len, ENC_NA);
- snmpv3_tree = proto_item_add_subtree(snmpv3_it, ett_docsis_tlv_snmpv3_kick);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case SNMPV3_SEC_NAME:
- proto_tree_add_item (snmpv3_tree,
- hf_docsis_tlv_snmpv3_kick_name, tvb,
- pos, length, ENC_ASCII|ENC_NA);
- break;
- case SNMPV3_MGR_PUB_NUM:
- proto_tree_add_item (snmpv3_tree,
- hf_docsis_tlv_snmpv3_kick_publicnum, tvb,
- pos, length, ENC_NA);
- break;
- default:
- proto_tree_add_item (snmpv3_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos += length;
- } /* while */
-}
-
-static void
-dissect_ds_ch_list_single (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree,
- int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *single_tree;
- proto_item *single_item;
- int pos = start;
-
- single_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list_single, &single_item,
- "1 Single Downstream Channel (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case SINGLE_CH_TIMEOUT:
- if (length == 2)
- {
- proto_tree_add_item (single_tree, hf_docsis_tlv_single_ch_timeout, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, single_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SINGLE_CH_FREQ:
- if (length == 4)
- {
- proto_tree_add_item (single_tree, hf_docsis_tlv_single_ch_freq, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, single_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (single_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_ds_ch_list_range (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree,
- int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *range_tree;
- proto_item *range_item;
- int pos = start;
-
- range_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list_range, &range_item,
- "2 Downstream Frequency Range (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case FREQ_RNG_TIMEOUT:
- if (length == 2)
- {
- proto_tree_add_item (range_tree, hf_docsis_tlv_freq_rng_timeout, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case FREQ_RNG_START:
- if (length == 4)
- {
- proto_tree_add_item (range_tree, hf_docsis_tlv_freq_rng_start, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case FREQ_RNG_END:
- if (length == 4)
- {
- proto_tree_add_item (range_tree, hf_docsis_tlv_freq_rng_end, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case FREQ_RNG_STEP:
- if (length == 4)
- {
- proto_tree_add_item (range_tree, hf_docsis_tlv_freq_rng_step, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (range_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_dut_filter (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree,
- int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *dut_tree;
- proto_item *dut_item;
- int pos = start;
-
- dut_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dut_filter, &dut_item,
- "45 Downstream Unencrypted Traffic (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case DUT_CONTROL:
- if (length == 1)
- {
- proto_tree_add_item (dut_tree, hf_docsis_tlv_dut_filter_control, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dut_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DUT_CMIM:
- proto_tree_add_item (dut_tree, hf_docsis_tlv_dut_filter_cmim, tvb,
- pos, length, ENC_NA);
- break;
- default:
- proto_tree_add_item (dut_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_ds_ch_list(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *dschlst_tree;
- proto_item *dschlst_item;
- int pos = start;
-
- dschlst_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list, &dschlst_item,
- "41 Downstream Channel List (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case DS_CH_LIST_SINGLE:
- dissect_ds_ch_list_single(tvb, pinfo, dschlst_tree, pos, length);
- break;
- case DS_CH_LIST_RANGE:
- dissect_ds_ch_list_range(tvb, pinfo, dschlst_tree, pos, length);
- break;
- case DS_CH_LIST_DEFAULT_TIMEOUT:
- if (length == 2)
- {
- proto_tree_add_item (dschlst_tree,
- hf_docsis_tlv_ds_ch_list_default_timeout, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dschlst_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (dschlst_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_tcc_err(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *tccerr_tree;
- proto_tree *tccerr_item;
- int pos = start;
-
- tccerr_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc_err, &tccerr_item,
- "TCC Error Encodings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case TCC_ERR_SUBTYPE:
- proto_tree_add_item (tccerr_tree,
- hf_docsis_tcc_err_subtype, tvb,
- pos, length, ENC_NA);
- break;
- case TCC_ERR_CODE:
- if (length == 1)
- {
- proto_tree_add_item (tccerr_tree,
- hf_docsis_tcc_err_code, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tccerr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TCC_ERR_MSG:
- proto_tree_add_item (tccerr_tree,
- hf_docsis_tcc_err_msg, tvb,
- pos, length, ENC_ASCII|ENC_NA);
- break;
- default:
- proto_tree_add_item (tccerr_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_tcc_rng_parms(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *rngparm_tree;
- proto_item *rngparm_item;
- int pos = start;
-
- rngparm_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc_rng_parms, &rngparm_item,
- "Ranging Parameters (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case RNG_PARMS_US_CH_ID:
- if (length == 1)
- {
- proto_tree_add_item (rngparm_tree,
- hf_docsis_rng_parms_us_ch_id, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RNG_PARMS_TIME_OFF_INT:
- if (length == 4)
- {
- proto_tree_add_item (rngparm_tree,
- hf_docsis_rng_parms_time_off_int, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RNG_PARMS_TIME_OFF_FRAC:
- if (length == 1)
- {
- proto_tree_add_item (rngparm_tree,
- hf_docsis_rng_parms_time_off_frac, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RNG_PARMS_POWER_OFF:
- if (length == 1)
- {
- proto_tree_add_item (rngparm_tree,
- hf_docsis_rng_parms_power_off, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RNG_PARMS_FREQ_OFF:
- if (length == 1)
- {
- proto_tree_add_item (rngparm_tree,
- hf_docsis_rng_parms_freq_off, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (rngparm_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_sid_cl_so_crit(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *crit_tree;
- proto_item *crit_item;
- int pos = start;
-
- crit_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_so, &crit_item,
- "SID Cluster Switchover Criteria (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case SID_CL_SO_MAX_REQ:
- if (length == 1)
- {
- proto_tree_add_item (crit_tree,
- hf_docsis_sid_cl_so_max_req, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SID_CL_SO_MAX_OUT_BYTES:
- if (length == 4)
- {
- proto_tree_add_item (crit_tree,
- hf_docsis_sid_cl_so_max_out_bytes, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SID_CL_SO_MAX_REQ_BYTES:
- if (length == 4)
- {
- proto_tree_add_item (crit_tree,
- hf_docsis_sid_cl_so_max_req_bytes, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SID_CL_SO_MAX_TIME:
- if (length == 2)
- {
- proto_tree_add_item (crit_tree,
- hf_docsis_sid_cl_so_max_time, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (crit_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_sid_cl_enc_map(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *map_tree;
- proto_item *map_item;
- int pos = start;
-
- map_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_enc_map, &map_item,
- "SID-to-Channel Mapping (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case SID_CL_MAP_US_CH_ID:
- if (length == 1)
- {
- proto_tree_add_item (map_tree,
- hf_docsis_sid_cl_map_us_ch_id, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, map_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SID_CL_MAP_SID:
- if (length == 2)
- {
- proto_tree_add_item (map_tree,
- hf_docsis_sid_cl_map_sid, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, map_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SID_CL_MAP_ACTION:
- if (length == 1)
- {
- proto_tree_add_item (map_tree,
- hf_docsis_sid_cl_map_action, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, map_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (map_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_sid_cl_enc(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *enc_tree;
- proto_item *enc_item;
- int pos = start;
-
- enc_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_enc, &enc_item,
- "SID Cluster Encoding (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case SID_CL_ENC_ID:
- if (length == 1)
- {
- proto_tree_add_item (enc_tree,
- hf_docsis_sid_cl_enc_id, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, enc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SID_CL_ENC_MAP:
- if (length == 10)
- dissect_sid_cl_enc_map(tvb, pinfo, enc_tree, pos, length);
- else
- expert_add_info_format(pinfo, enc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- break;
- default:
- proto_tree_add_item (enc_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_sid_cl(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *sid_tree;
- proto_item *sid_item;
- int pos = start;
-
- sid_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl, &sid_item,
- "47 Service Flow SID Cluster Assignments (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case SID_CL_SF_ID:
- if (length == 4)
- {
- proto_tree_add_item (sid_tree,
- hf_docsis_sid_cl_sf_id, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case SID_CL_ENC:
- dissect_sid_cl_enc(tvb, pinfo, sid_tree, pos, length);
- break;
- case SID_CL_SO_CRIT:
- dissect_sid_cl_so_crit(tvb, pinfo, sid_tree, pos, length);
- break;
- default:
- proto_tree_add_item (sid_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_tcc(tvbuff_t * tvb, packet_info * pinfo,
- proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *tcc_tree;
- proto_item *tcc_item;
- int pos = start;
- tvbuff_t *ucd_tvb;
-
- tcc_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc, &tcc_item,
- "46 Transmit Channel Configuration (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case TLV_TCC_REFID:
- if (length == 1)
- {
- proto_tree_add_item (tcc_tree,
- hf_docsis_tlv_tcc_refid, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TCC_US_CH_ACTION:
- if (length == 1)
- {
- proto_tree_add_item (tcc_tree,
- hf_docsis_tlv_tcc_us_ch_action, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TCC_US_CH_ID:
- if (length == 1)
- {
- proto_tree_add_item (tcc_tree,
- hf_docsis_tlv_tcc_us_ch_id, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TCC_NEW_US_CH_ID:
- if (length == 1)
- {
- proto_tree_add_item (tcc_tree,
- hf_docsis_tlv_tcc_new_us_ch_id, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TCC_UCD:
- ucd_tvb = tvb_new_subset_length (tvb, pos, length);
- call_dissector (docsis_ucd_handle, ucd_tvb, pinfo, tcc_tree);
- break;
- case TLV_TCC_RNG_SID:
- if (length == 2)
- {
- proto_tree_add_item (tcc_tree,
- hf_docsis_tlv_tcc_rng_sid, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TCC_INIT_TECH:
- if (length == 1)
- {
- proto_tree_add_item (tcc_tree,
- hf_docsis_tlv_tcc_init_tech, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TCC_RNG_PARMS:
- dissect_tcc_rng_parms(tvb, pinfo, tcc_tree, pos, length);
- break;
- case TLV_TCC_DYN_RNG_WIN:
- if (length == 1)
- {
- proto_tree_add_item (tcc_tree,
- hf_docsis_tlv_tcc_dyn_rng_win, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TCC_ERR:
- dissect_tcc_err(tvb, pinfo, tcc_tree, pos, length);
- break;
- default:
- proto_tree_add_item (tcc_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_ch_bl_rng(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *chblrng_tree;
- proto_item *chblrng_item;
- int pos = start;
-
- chblrng_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_ch_bl_rng, &chblrng_item,
- "Receive Module Channel Block Range (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case CH_BL_RNG_MIN_CTR_FREQ:
- if (length == 4)
- {
- proto_tree_add_item (chblrng_tree,
- hf_docsis_ch_bl_rng_min_ctr_freq, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, chblrng_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CH_BL_RNG_MAX_CTR_FREQ:
- if (length == 4)
- {
- proto_tree_add_item (chblrng_tree,
- hf_docsis_ch_bl_rng_max_ctr_freq, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, chblrng_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (chblrng_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_rcp_rcv_mod(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *rcvmod_tree;
- proto_item *rcvmod_item;
- int pos = start;
-
- rcvmod_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_rcv_mod_enc, &rcvmod_item,
- "Receive Module Capability (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case RCV_MOD_ENC_IDX:
- if (length == 1)
- {
- proto_tree_add_item (rcvmod_tree,
- hf_docsis_rcv_mod_enc_idx, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCV_MOD_ENC_CH_BL_RNG:
- dissect_ch_bl_rng(tvb, pinfo, rcvmod_tree, pos, length);
- break;
- case RCV_MOD_ENC_CTR_FREQ_ASGN:
- if (length == 4)
- {
- proto_tree_add_item (rcvmod_tree,
- hf_docsis_rcv_mod_enc_ctr_freq_asgn, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCV_MOD_ENC_RSQ_CH_SUBS_CAP:
- proto_tree_add_item (rcvmod_tree,
- hf_docsis_rcv_mod_enc_rsq_ch_subs_cap, tvb, pos,
- length, ENC_NA);
- break;
- case RCV_MOD_ENC_CONN:
- proto_tree_add_item (rcvmod_tree,
- hf_docsis_rcv_mod_enc_conn, tvb, pos,
- length, ENC_NA);
- break;
- case RCV_MOD_ENC_PHY_LAYR_PARMS:
- proto_tree_add_item (rcvmod_tree,
- hf_docsis_rcv_mod_enc_phy_layr_parms, tvb, pos,
- length, ENC_NA);
- break;
- default:
- proto_tree_add_item (rcvmod_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_rcp_rcv_ch(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *rcvch_tree;
- proto_item *rcvch_item;
- int pos = start;
-
- rcvch_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_rcv_ch, &rcvch_item,
- "Receive Channels (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case RCV_CH_IDX:
- if (length == 1)
- {
- proto_tree_add_item (rcvch_tree,
- hf_docsis_rcv_ch_idx, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCV_CH_CONN:
- proto_tree_add_item (rcvch_tree,
- hf_docsis_rcv_ch_conn, tvb, pos,
- length, ENC_NA);
- break;
- case RCV_CH_CONN_OFF:
- if (length == 1)
- {
- proto_tree_add_item (rcvch_tree,
- hf_docsis_rcv_ch_conn_off, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCV_CH_PRIM_DS_CH_IND:
- if (length == 1)
- {
- proto_tree_add_item (rcvch_tree,
- hf_docsis_rcv_ch_prim_ds_ch_ind, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (rcvch_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-
-static void
-dissect_rcp(tvbuff_t * tvb, packet_info * pinfo,
- proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *rcp_tree;
- proto_item *rcp_item;
- int pos = start;
- tvbuff_t *vsif_tvb;
-
- rcp_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp, &rcp_item,
- "48 Receive Channel Profile (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case TLV_RCP_ID:
- if (length == 5)
- {
- proto_tree_add_item (rcp_tree,
- hf_docsis_tlv_rcp_id, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, rcp_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_RCP_NAME:
- if (length <= 15)
- {
- proto_tree_add_item (rcp_tree,
- hf_docsis_tlv_rcp_name, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, rcp_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_RCP_FREQ_SPC:
- if (length == 1)
- {
- proto_tree_add_item (rcp_tree,
- hf_docsis_tlv_rcp_freq_spc, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcp_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_RCP_RCV_MOD_ENC:
- dissect_rcp_rcv_mod(tvb, pinfo, rcp_tree, pos, length);
- break;
- case TLV_RCP_RCV_CH:
- dissect_rcp_rcv_ch(tvb, pinfo, rcp_tree, pos, length);
- break;
- case TLV_RCP_VEN_SPEC:
- vsif_tvb = tvb_new_subset_length (tvb, pos, length);
- call_dissector (docsis_vsif_handle, vsif_tvb, pinfo, rcp_tree);
- break;
- default:
- proto_tree_add_item (rcp_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_rcc_rcv_mod(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *rcvmod_tree;
- proto_item *rcvmod_item;
- int pos = start;
-
- rcvmod_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_mod_enc, &rcvmod_item,
- "Receive Module Assignment (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case RCV_MOD_ENC_IDX:
- if (length == 1)
- {
- proto_tree_add_item (rcvmod_tree,
- hf_docsis_rcc_rcv_mod_enc_idx, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCV_MOD_ENC_CTR_FREQ_ASGN:
- if (length == 4)
- {
- proto_tree_add_item (rcvmod_tree,
- hf_docsis_rcc_rcv_mod_enc_ctr_freq_asgn, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCV_MOD_ENC_CONN:
- proto_tree_add_item (rcvmod_tree,
- hf_docsis_rcc_rcv_mod_enc_conn, tvb, pos,
- length, ENC_NA);
- break;
- default:
- proto_tree_add_item (rcvmod_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_rcc_rcv_ch(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *rcvch_tree;
- proto_item *rcvch_item;
- int pos = start;
-
- rcvch_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_ch, &rcvch_item,
- "Receive Channels (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case RCV_CH_IDX:
- if (length == 1)
- {
- proto_tree_add_item (rcvch_tree,
- hf_docsis_rcc_rcv_ch_idx, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCV_CH_CONN:
- proto_tree_add_item (rcvch_tree,
- hf_docsis_rcc_rcv_ch_conn, tvb, pos,
- length, ENC_NA);
- break;
- case RCV_CH_CTR_FREQ_ASGN:
- if (length == 4)
- {
- proto_tree_add_item (rcvch_tree,
- hf_docsis_rcc_rcv_ch_ctr_freq_asgn, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCV_CH_PRIM_DS_CH_IND:
- if (length == 1)
- {
- proto_tree_add_item (rcvch_tree,
- hf_docsis_rcc_rcv_ch_prim_ds_ch_ind, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (rcvch_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_rcc_err(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *err_tree;
- proto_item *err_item;
- int pos = start;
-
- err_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_ch, &err_item,
- "RCC Error Encodings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case RCC_ERR_MOD_OR_CH:
- if (length == 1)
- {
- proto_tree_add_item (err_tree,
- hf_docsis_tlv_rcc_err_mod_or_ch, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCC_ERR_IDX:
- if (length == 1)
- {
- proto_tree_add_item (err_tree,
- hf_docsis_tlv_rcc_err_idx, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCC_ERR_PARAM:
- if (length == 1)
- {
- proto_tree_add_item (err_tree,
- hf_docsis_tlv_rcc_err_param, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCC_ERR_CODE:
- if (length == 1)
- {
- proto_tree_add_item (err_tree,
- hf_docsis_tlv_rcc_err_code, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case RCC_ERR_MSG:
- proto_tree_add_item (err_tree,
- hf_docsis_tlv_rcc_err_msg, tvb, pos,
- length, ENC_NA);
- break;
- default:
- proto_tree_add_item (err_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_rcc(tvbuff_t * tvb, packet_info * pinfo,
- proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *rcc_tree;
- proto_item *rcc_item;
- int pos = start;
- tvbuff_t *vsif_tvb;
-
- rcc_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc, &rcc_item,
- "49 Receive Channel Configuration (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case TLV_RCP_ID:
- if (length == 5)
- {
- proto_tree_add_item (rcc_tree,
- hf_docsis_tlv_rcc_id, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, rcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_RCP_RCV_MOD_ENC:
- dissect_rcc_rcv_mod(tvb, pinfo, rcc_tree, pos, length);
- break;
- case TLV_RCP_RCV_CH:
- dissect_rcc_rcv_ch(tvb, pinfo, rcc_tree, pos, length);
- break;
- case TLV_RCP_VEN_SPEC:
- vsif_tvb = tvb_new_subset_length (tvb, pos, length);
- call_dissector (docsis_vsif_handle, vsif_tvb, pinfo, rcc_tree);
- break;
- case TLV_RCC_ERR:
- dissect_rcc_err(tvb, pinfo, rcc_tree, pos, length);
- break;
- default:
- proto_tree_add_item (rcc_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_dsid_ds_reseq(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *dsid_tree;
- proto_item *dsid_item;
- int pos = start;
-
- dsid_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid_ds_reseq, &dsid_item,
- "Resequencing DSID (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case DS_RESEQ_DSID:
- if (length == 1)
- {
- proto_tree_add_item (dsid_tree,
- hf_docsis_ds_reseq_dsid, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DS_RESEQ_CH_LST:
- proto_tree_add_item (dsid_tree,
- hf_docsis_ds_reseq_ch_lst, tvb, pos,
- length, ENC_NA);
- break;
- case DS_RESEQ_WAIT_TIME:
- if (length == 1)
- {
- proto_tree_add_item (dsid_tree,
- hf_docsis_ds_reseq_wait_time, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DS_RESEQ_WARN_THRESH:
- if (length == 1)
- {
- proto_tree_add_item (dsid_tree,
- hf_docsis_ds_reseq_warn_thresh, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case DS_RESEQ_HO_TIMER:
- if (length == 2)
- {
- proto_tree_add_item (dsid_tree,
- hf_docsis_ds_reseq_ho_timer, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (dsid_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_dsid_mc_addr(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *dsid_tree;
- proto_item *dsid_item;
- int pos = start;
-
- dsid_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid_mc_addr, &dsid_item,
- "Client MAC Address Encodings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case MC_ADDR_ACTION:
- if (length == 1)
- {
- proto_tree_add_item (dsid_tree,
- hf_docsis_mc_addr_action, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case MC_ADDR_ADDR:
- if (length == 6)
- {
- proto_tree_add_item (dsid_tree,
- hf_docsis_mc_addr_addr, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (dsid_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_dsid_mc(tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *dsid_tree;
- int pos = start;
-
- dsid_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid_mc, NULL,
- "Multicast Encodings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case TLV_DSID_MC_ADDR:
- dissect_dsid_mc_addr(tvb, pinfo, dsid_tree, pos, length);
- break;
- case TLV_DSID_MC_CMIM:
- proto_tree_add_item (dsid_tree,
- hf_docsis_tlv_dsid_mc_cmim, tvb, pos,
- length, ENC_NA);
- break;
- case TLV_DSID_MC_GROUP:
- proto_tree_add_item (dsid_tree,
- hf_docsis_tlv_dsid_mc_group, tvb, pos,
- length, ENC_NA);
- break;
- case TLV_DSID_MC_PHS:
- dissect_phs(tvb, pinfo, dsid_tree, pos, length);
- break;
- default:
- proto_tree_add_item (dsid_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_dsid(tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *dsid_tree;
- proto_item *dsid_item;
- int pos = start;
-
- dsid_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid, &dsid_item,
- "50 DSID Encodings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case TLV_DSID_ID:
- if (length == 3)
- {
- proto_tree_add_item (dsid_tree,
- hf_docsis_tlv_dsid_id, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_DSID_ACTION:
- if (length == 1)
- {
- proto_tree_add_item (dsid_tree,
- hf_docsis_tlv_dsid_action, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_DSID_DS_RESEQ:
- dissect_dsid_ds_reseq(tvb, pinfo, dsid_tree, pos, length);
- break;
- case TLV_DSID_MC:
- dissect_dsid_mc(tvb, pinfo, dsid_tree, pos, length);
- break;
- default:
- proto_tree_add_item (dsid_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_sec_assoc(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *sec_tree;
- proto_item *sec_item;
- int pos = start;
-
- sec_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid, &sec_item,
- "51 Security Association Encodings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case TLV_SEC_ASSOC_ACTION:
- if (length == 1)
- {
- proto_tree_add_item (sec_tree,
- hf_docsis_tlv_sec_assoc_action, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, sec_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_SEC_ASSOC_DESC:
- if (length == 14)
- {
- proto_tree_add_item (sec_tree,
- hf_docsis_tlv_sec_assoc_desc, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, sec_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (sec_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_ch_asgn(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *asgn_tree;
- proto_item *asgn_item;
- int pos = start;
-
- asgn_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ch_asgn, &asgn_item,
- "56 Channel Assignment Configuration Settings (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case TLV_CH_ASGN_US_CH_ID:
- if (length == 1)
- {
- proto_tree_add_item (asgn_tree,
- hf_docsis_ch_asgn_us_ch_id, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, asgn_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_CH_ASGN_RX_FREQ:
- if (length == 4)
- {
- proto_tree_add_item (asgn_tree,
- hf_docsis_ch_asgn_rx_freq, tvb, pos,
- length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, asgn_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (asgn_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-static void
-dissect_cmts_mc_sess_enc(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
- guint8 type, length;
- proto_tree *mc_tree;
- proto_item *mc_item;
- int pos = start;
-
- mc_tree =
- proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_cmts_mc_sess_enc, &mc_item,
- "64 CMTS Static Multicast Session Encoding (Length = %u)", len);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case CMTS_MC_SESS_ENC_GRP:
- if (length == 4 || length == 16)
- {
- proto_tree_add_item (mc_tree,
- hf_docsis_cmts_mc_sess_enc_grp, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, mc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case CMTS_MC_SESS_ENC_SRC:
- if (length == 4 || length == 16)
- {
- proto_tree_add_item (mc_tree,
- hf_docsis_cmts_mc_sess_enc_src, tvb, pos,
- length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, mc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (mc_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos = pos + length;
- } /* while */
-}
-
-
-static int
-dissect_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *tlv_tree;
- int pos = 0;
- gint total_len;
- guint8 type, length;
- guint16 x;
- tvbuff_t *vsif_tvb;
-
- total_len = tvb_reported_length_remaining (tvb, 0);
-
- {
- it =
- proto_tree_add_protocol_format (tree, proto_docsis_tlv, tvb, 0,
- total_len, "TLV Data");
- tlv_tree = proto_item_add_subtree (it, ett_docsis_tlv);
- while (pos < total_len)
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case TLV_DOWN_FREQ:
- /* This is ugly. There are multiple type 1 TLV's that may appear
- * in the TLV data, the problem is that they are dependent on
- * message type. */
- if (length == 4)
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_down_freq, tvb,
- pos, length, ENC_BIG_ENDIAN);
- else if (length == 1)
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_rng_tech, tvb,
- pos, length, ENC_BIG_ENDIAN);
- else
- dissect_doc10cos (tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_CHNL_ID:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_upstream_chid,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_NET_ACCESS:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_net_access,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_COS:
- dissect_cos (tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_MODEM_CAP:
- dissect_modemcap (tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_CM_MIC:
- if (length == 16)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_cm_mic, tvb,
- pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_CMTS_MIC:
- if (length == 16)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_cmts_mic, tvb,
- pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_VENDOR_ID:
- if (length == 3)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_vendor_id, tvb,
- pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_SW_UPG_FILE:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_sw_file, tvb, pos,
- length, ENC_ASCII|ENC_NA);
- break;
- case TLV_SNMP_WRITE_CTRL:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_snmp_access, tvb,
- pos, length, ENC_NA);
- break;
- case TLV_SNMP_OBJECT:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_snmp_obj, tvb,
- pos, length, ENC_NA);
- break;
- case TLV_MODEM_IP:
- if (length == 4)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_modem_addr,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_SVC_UNAVAIL:
- if (length == 3)
- {
- dissect_svc_unavail(tvb, tlv_tree, pos, length);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_ETHERNET_MAC:
- if (length == 6)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_cpe_ethernet,
- tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TEL_SETTINGS:
- break;
- case TLV_BPI_CONFIG:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_bpi, tvb,
- pos, length, ENC_NA);
- break;
- case TLV_MAX_CPES:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_max_cpe, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TFTP_TIME:
- if (length == 4)
- {
- proto_tree_add_item (tlv_tree,
- hf_docsis_tlv_tftp_server_timestamp,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TFTP_MODEM_ADDRESS:
- if (length == 4)
- {
- proto_tree_add_item (tlv_tree,
- hf_docsis_tlv_tftp_prov_modem_address,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_SW_UPG_SRVR:
- if (length == 4)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_sw_upg_srvr,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_UPSTREAM_CLASSIFIER:
- case TLV_DOWN_CLASSIFIER:
- dissect_classifiers (tvb, pinfo, tlv_tree, pos, length, type);
- break;
- case TLV_UPSTREAM_SERVICE_FLOW:
- case TLV_DOWN_SERVICE_FLOW:
- dissect_sflow (tvb, pinfo, tlv_tree, pos, length, type);
- break;
- case TLV_PHS:
- dissect_phs (tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_HMAC_DIGEST:
- if (length == 20)
- {
- proto_tree_add_item (tlv_tree,
- hf_docsis_tlv_hmac_digest, tvb,
- pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_MAX_CLASSIFIERS:
- if (length == 2)
- {
- proto_tree_add_item (tlv_tree,
- hf_docsis_tlv_max_classifiers, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_PRIVACY_ENABLE:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_privacy_enable,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_AUTH_BLOCK:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_auth_block,
- tvb, pos, length, ENC_NA);
- break;
- case TLV_KEY_SEQ_NUM:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_key_seq_num, tvb,
- pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_MFGR_CVC:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_mfgr_cvc,
- tvb, pos, length, ENC_NA);
- break;
- case TLV_COSIGN_CVC:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_cosign_cvc,
- tvb, pos, length, ENC_NA);
- break;
- case TLV_SNMPV3_KICKSTART:
- dissect_snmpv3_kickstart(tvb, tlv_tree, pos, length);
- break;
- case TLV_SUBS_MGMT_CTRL:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_subs_mgmt_ctrl,
- tvb, pos, length, ENC_NA);
- break;
- case TLV_SUBS_MGMT_CPE:
- if ((length % 4) == 0)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_subs_mgmt_ip_table,
- tvb, pos, length, ENC_NA);
- for (x = 0; x < length; x+=4)
- {
- proto_tree_add_item (tlv_tree,
- hf_docsis_tlv_subs_mgmt_ip_entry,
- tvb, pos + x, 4, ENC_BIG_ENDIAN);
- }
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_SUBS_MGMT_FLTR:
- proto_tree_add_item (tlv_tree,
- hf_docsis_tlv_subs_mgmt_filter_grps,
- tvb, pos, length, ENC_NA);
- break;
- case TLV_SNMPV3_NTFY_RCVR:
- proto_tree_add_item(tlv_tree,
- hf_docsis_tlv_snmpv3_ntfy_rcvr,
- tvb, pos, length, ENC_NA);
- break;
- case TLV_ENABLE_20_MODE:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_enable_20_mode,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_ENABLE_TEST_MODES:
- if (length == 1)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_enable_test_modes,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_DS_CH_LIST:
- dissect_ds_ch_list(tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_MC_MAC_ADDRESS:
- if (length == 6)
- {
- proto_tree_add_item(tlv_tree, hf_docsis_tlv_mc_mac_address,
- tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_VENDOR_SPEC:
- vsif_tvb = tvb_new_subset_length (tvb, pos, length);
- call_dissector (docsis_vsif_handle, vsif_tvb, pinfo, tlv_tree);
- break;
- case TLV_DUT_FILTER:
- dissect_dut_filter(tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_TCC:
- dissect_tcc(tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_SID_CL:
- dissect_sid_cl(tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_RCP:
- dissect_rcp(tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_RCC:
- dissect_rcc(tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_DSID:
- dissect_dsid(tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_SEC_ASSOC:
- dissect_sec_assoc(tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_INIT_CH_TIMEOUT:
- if (length == 2)
- {
- proto_tree_add_item(tlv_tree, hf_docsis_tlv_init_ch_timeout,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_CH_ASGN:
- dissect_ch_asgn(tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_CM_INIT_REASON:
- if (length == 1)
- {
- proto_tree_add_item(tlv_tree, hf_docsis_tlv_cm_init_reason,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_SW_UPG_SRVR_IPV6:
- if (length == 16)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_sw_upg_srvr_ipv6,
- tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_TFTP_PROV_CM_IPV6_ADDR:
- if (length == 16)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_tftp_prov_cm_ipv6_addr,
- tvb, pos, length, ENC_NA);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_US_DROP_CLFY:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_us_drop_clfy,
- tvb, pos, length, ENC_NA);
- break;
- case TLV_SUBS_MGMT_IPV6_LST:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_subs_mgmt_ipv6_lst,
- tvb, pos, length, ENC_NA);
- break;
- case TLV_US_DROP_CLFY_GROUP_ID:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_us_drop_clfy_group_id,
- tvb, pos, length, ENC_NA);
- break;
- case TLV_SUBS_MGMT_CTRL_MAX_CPE_IPV6:
- if (length == 2)
- {
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_subs_mgmt_ctrl_max_cpe_ipv6,
- tvb, pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case TLV_CMTS_MC_SESS_ENC:
- dissect_cmts_mc_sess_enc(tvb, pinfo, tlv_tree, pos, length);
- break;
- case TLV_END:
- break;
- default:
- proto_tree_add_item (tlv_tree, hf_docsis_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch(type) */
-
- pos = pos + length;
- } /* while (pos < total_len) */
- } /*if (tree) */
-
- return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_tlv (void)
-{
- static hf_register_info hf[] = {
- {&hf_docsis_tlv_down_freq,
- {"1 Downstream Frequency", "docsis_tlv.downfreq",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Downstream Frequency", HFILL}
- },
- {&hf_docsis_tlv_upstream_chid,
- {"2 Upstream Channel ID", "docsis_tlv.upchid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Service Identifier", HFILL}
- },
- {&hf_docsis_tlv_net_access,
- {"3 Network Access", "docsis_tlv.netaccess",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "Network Access TLV", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_cos,
- {"4 COS Encodings", "docsis_tlv.cos",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
-#endif
- {&hf_docsis_tlv_cos_id,
- {".1 Class ID", "docsis_tlv.cos.id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Class ID", HFILL}
- },
- {&hf_docsis_tlv_cos_sid,
- {".2 Service ID", "docsis_tlv.cos.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Service ID", HFILL}
- },
- {&hf_docsis_tlv_cos_max_down,
- {".2 Max Downstream Rate (bps)", "docsis_tlv.cos.maxdown",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Max Downstream Rate", HFILL}
- },
- {&hf_docsis_tlv_cos_max_up,
- {".3 Max Upstream Rate (bps)", "docsis_tlv.cos.maxup",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Max Upstream Rate", HFILL}
- },
- {&hf_docsis_tlv_cos_up_chnl_pri,
- {".4 Upstream Channel Priority", "docsis_tlv.cos.upchnlpri",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Upstream Channel Priority", HFILL}
- },
- {&hf_docsis_tlv_cos_min_grntd_up,
- {".5 Guaranteed Upstream Rate", "docsis_tlv.cos.mingrntdup",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Guaranteed Minimum Upstream Data Rate", HFILL}
- },
- {&hf_docsis_tlv_cos_max_up_burst,
- {".6 Maximum Upstream Burst", "docsis_tlv.cos.maxupburst",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Maximum Upstream Burst", HFILL}
- },
- {&hf_docsis_tlv_cos_privacy_enable,
- {".7 COS Privacy Enable", "docsis_tlv.cos.privacy_enable",
- FT_BOOLEAN, BASE_NONE, TFS (&ena_dis_tfs), 0x0,
- "Class of Service Privacy Enable", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_mcap,
- {"5 Modem Capabilities", "docsis_tlv.mcap",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Modem Capabilities", HFILL}
- },
-#endif
- {&hf_docsis_tlv_mcap_concat,
- {".1 Concatenation Support", "docsis_tlv.mcap.concat",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "Concatenation Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_docs_ver,
- {".2 Docsis Version", "docsis_tlv.map.docsver",
- FT_UINT8, BASE_DEC, VALS (docs_ver_vals), 0x0,
- "DOCSIS Version", HFILL}
- },
- {&hf_docsis_tlv_mcap_frag,
- {".3 Fragmentation Support", "docsis_tlv.mcap.frag",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "Fragmentation Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_phs,
- {".4 PHS Support", "docsis_tlv.mcap.phs",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "PHS Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_igmp,
- {".5 IGMP Support", "docsis_tlv.mcap.igmp",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "IGMP Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_privacy,
- {".6 Privacy Support", "docsis_tlv.mcap.privacy",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "Privacy Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_down_said,
- {".7 # Downstream SAIDs Supported", "docsis_tlv.mcap.downsaid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Downstream Said Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_up_sid,
- {".8 # Upstream Service Flows Supported", "docsis_tlv.mcap.upsid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Upstream Service Flows Supported", HFILL}
- },
- {&hf_docsis_tlv_mcap_8021P_filter,
- {".9 802.1P Filtering Support", "docsis_tlv.mcap.dot1pfiltering",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x80,
- "802.1P Filtering Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_8021Q_filter,
- {".9 802.1Q Filtering Support", "docsis_tlv.mcap.dot1qfilt",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x40,
- "802.1Q Filtering Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_xmit_eq_taps_per_sym,
- {".10 Xmit Equalizer Taps/Sym", "docsis_tlv.mcap.tapspersym",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Transmit Equalizer Taps per Symbol", HFILL}
- },
- {&hf_docsis_tlv_mcap_xmit_eq_taps,
- {".11 # Xmit Equalizer Taps", "docsis_tlv.mcap.numtaps",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Number of Transmit Equalizer Taps", HFILL}
- },
- {&hf_docsis_tlv_mcap_dcc,
- {".12 DCC Support", "docsis_tlv.mcap.dcc",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "DCC Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_ip_filters,
- {".13 IP Filters Support","docsis_tlv.mcap.ipfilters",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "IP Filters Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_llc_filters,
- {".14 LLC Filters Support","docsis_tlv.mcap.llcfilters",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "LLC Filters Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_exp_unicast_sid,
- {".15 Expanded Unicast SID Space","docsis_tlv.mcap.exucsid",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "Expanded Unicast SID Space", HFILL}
- },
- {&hf_docsis_tlv_mcap_rnghoff_cm,
- {".16 Ranging Hold-Off (CM)","docsis_tlv.mcap.rnghoffcm",
- FT_UINT32, BASE_DEC, VALS (on_off_vals), 0x1,
- "Ranging Hold-Off (CM)", HFILL}
- },
- {&hf_docsis_tlv_mcap_rnghoff_erouter,
- {".16 Ranging Hold-Off (ePS or eRouter)",
- "docsis_tlv.mcap.rnghofferouter",
- FT_UINT32, BASE_DEC, VALS (on_off_vals), 0x2,
- "Ranging Hold-Off (ePS or eRouter)", HFILL}
- },
- {&hf_docsis_tlv_mcap_rnghoff_emta,
- {".16 Ranging Hold-Off (eMTA or EDVA)",
- "docsis_tlv.mcap.rnghoffemta",
- FT_UINT32, BASE_DEC, VALS (on_off_vals), 0x4,
- "Ranging Hold-Off (eMTA or EDVA)", HFILL}
- },
- {&hf_docsis_tlv_mcap_rnghoff_estb,
- {".16 Ranging Hold-Off (DSG/eSTB)",
- "docsis_tlv.mcap.rnghoffestb",
- FT_UINT32, BASE_DEC, VALS (on_off_vals), 0x8,
- "Ranging Hold-Off (DSG/eSTB)", HFILL}
- },
- {&hf_docsis_tlv_mcap_l2vpn,
- {".17 L2VPN Capability","docsis_tlv.mcap.l2vpn",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "L2VPN Capability", HFILL}
- },
- {&hf_docsis_tlv_mcap_l2vpn_esafe,
- {".18 L2VPN eSAFE Host Capability","docsis_tlv.mcap.l2vpnesafe",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "L2VPN eSAFE Host Capability", HFILL}
- },
- {&hf_docsis_tlv_mcap_dut_filtering,
- {".19 Downstream Unencrypted Traffic (DUT) Filtering",
- "docsis_tlv.mcap.dut",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Downstream Unencrypted Traffic (DUT) Filtering", HFILL}
- },
- {&hf_docsis_tlv_mcap_us_freq_range,
- {".20 Upstream Frequency Range Support",
- "docsis_tlv.mcap.usfreqrng",
- FT_UINT8, BASE_DEC, VALS (docsis_freq_rng_vals), 0x0,
- "Upstream Frequency Range Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_us_srate_160,
- {".21 Upstream Symbol Rate 160ksps supported",
- "docsis_tlv.mcap.srate160",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x1,
- "Upstream Symbol Rate 160ksps supported", HFILL}
- },
- {&hf_docsis_tlv_mcap_us_srate_320,
- {".21 Upstream Symbol Rate 320ksps supported",
- "docsis_tlv.mcap.srate320",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x2,
- "Upstream Symbol Rate 320ksps supported", HFILL}
- },
- {&hf_docsis_tlv_mcap_us_srate_640,
- {".21 Upstream Symbol Rate 640ksps supported",
- "docsis_tlv.mcap.srate640",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x4,
- "Upstream Symbol Rate 640ksps supported", HFILL}
- },
- {&hf_docsis_tlv_mcap_us_srate_1280,
- {".21 Upstream Symbol Rate 1280ksps supported",
- "docsis_tlv.mcap.srate1280",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x8,
- "Upstream Symbol Rate 1280ksps supported", HFILL}
- },
- {&hf_docsis_tlv_mcap_us_srate_2560,
- {".21 Upstream Symbol Rate 2560ksps supported",
- "docsis_tlv.mcap.srate2560",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x10,
- "Upstream Symbol Rate 2560ksps supported", HFILL}
- },
- {&hf_docsis_tlv_mcap_us_srate_5120,
- {".21 Upstream Symbol Rate 5120ksps supported",
- "docsis_tlv.mcap.srate5120",
- FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x20,
- "Upstream Symbol Rate 5120ksps supported", HFILL}
- },
- {&hf_docsis_tlv_mcap_sac,
- {".22 Selectable Active Code Mode 2 Support","docsis_tlv.mcap.sac",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "Selectable Active Code Mode 2 Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_code_hop_mode2,
- {".23 Code Hopping Mode 2 Support","docsis_tlv.mcap.codehopm2",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "Code Hopping Mode 2 Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_mtc,
- {".24 Multiple Transmit Channel Support","docsis_tlv.mcap.mtc",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Multiple Transmit Channel Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_512_msps_utc,
- {".25 5.12 Msps Upstream Transmit Channel Support",
- "docsis_tlv.mcap.512mspsutc",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "5.12 Msps Upstream Transmit Channel Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_256_msps_utc,
- {".26 2.56 Msps Upstream Transmit Channel Support",
- "docsis_tlv.mcap.256mspsutc",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "2.56 Msps Upstream Transmit Channel Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_total_sid_cluster,
- {".27 Total SID Cluster Support","docsis_tlv.mcap.totalsidcl",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Total SID Cluster Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_sid_per_sf,
- {".28 SID Clusters per Service Flow Support",
- "docsis_tlv.mcap.sidpersf",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "SID Clusters per Service Flow Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_mrc,
- {".29 Multiple Receive Channel Support","docsis_tlv.mcap.mrc",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Multiple Receive Channel Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_total_dsid,
- {".30 Total Downstream Service ID (DSID) Support",
- "docsis_tlv.mcap.totaldsid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Total Downstream Service ID (DSID) Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_reseq_dsid,
- {".31 Resequencing Downstream Service ID (DSID) Support",
- "docsis_tlv.mcap.reseqdsid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Resequencing Downstream Service ID (DSID) Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_mc_dsid,
- {".32 Multicast Downstream Service ID (DSID) Support",
- "docsis_tlv.mcap.mcdsid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Multicast Downstream Service ID (DSID) Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_mc_dsid_fwd,
- {".33 Multicast DSID Forwarding","docsis_tlv.mcap.mcdsidfwd",
- FT_UINT8, BASE_DEC, VALS (mc_dsid_fwd_vals), 0x0,
- "Mulitcast DSID Forwarding", HFILL}
- },
- {&hf_docsis_tlv_mcap_fctype_fwd,
- {".34 Frame Control Type Forwarding Capability",
- "docsis_tlv.mcap.fctypefwd",
- FT_UINT8, BASE_DEC, VALS (fctype_fwd_vals), 0x0,
- "Frame Control Type Forwarding Capability", HFILL}
- },
- {&hf_docsis_tlv_mcap_dpv_path,
- {".35 DPV Capability (per Path)","docsis_tlv.mcap.dpvpath",
- FT_UINT8, BASE_DEC, NULL, 0x1,
- "DPV Capability (per Path)", HFILL}
- },
- {&hf_docsis_tlv_mcap_dpv_packet,
- {".35 DPV Capability (per Packet)","docsis_tlv.mcap.dpvpacket",
- FT_UINT8, BASE_DEC, NULL, 0x2,
- "DPV Capability (per Packet)", HFILL}
- },
- {&hf_docsis_tlv_mcap_ugs,
- {".36 Unsolicited Grant Service Support","docsis_tlv.mcap.ugs",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Unsolicited Grant Service Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_map_ucd,
- {".37 MAP and UCD Receipt Support","docsis_tlv.mcap.mapucd",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "MAP and UCD Receipt Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_udc,
- {".38 Upstream Drop Classifier Support","docsis_tlv.mcap.udc",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Upstream Drop Classifier Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_ipv6,
- {".39 IPv6 Support","docsis_tlv.mcap.ipv6",
- FT_BOOLEAN, BASE_NONE, TFS (&on_off_tfs), 0x0,
- "IPv6 Support", HFILL}
- },
- {&hf_docsis_tlv_mcap_ext_us_trans_power,
- {".40 Extended Upstream Transmit Power Capability",
- "docsis_tlv.mcap.extustrpwr",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Extended Upstream Transmit Power Capability", HFILL}
- },
- {&hf_docsis_tlv_mcap_em,
- {".44 Energy Management Capabilities", "docsis_tlv.mcap.em",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_mcap_em_1x1,
- {"Energy Management 1x1 Feature",
- "docsis_tlv.mcap.em.1x1",
- FT_BOOLEAN, 32, TFS (&sup_unsup_tfs), 0x1,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_mcap_em_light_sleep,
- {"DOCSIS Light Sleep Mode",
- "docsis_tlv.mcap.em.light_sleep",
- FT_BOOLEAN, 32, TFS (&sup_unsup_tfs), 0x2,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_mcap_cm_status_ack,
- {".46 CM-STATUS_ACK",
- "docsis_tlv.mcap.cm_status_ack",
- FT_UINT8, BASE_DEC, VALS (&sup_unsup_vals), 0x0,
- "CM_STATUS_ACK", HFILL}
- },
- {&hf_docsis_tlv_cm_mic,
- {"6 CM MIC", "docsis_tlv.cmmic",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Cable Modem Message Integrity Check", HFILL}
- },
- {&hf_docsis_tlv_cmts_mic,
- {"7 CMTS MIC", "docsis_tlv.cmtsmic",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "CMTS Message Integrity Check", HFILL}
- },
- {&hf_docsis_tlv_vendor_id,
- {"8 Vendor ID", "docsis_tlv.vendorid",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Vendor Identifier", HFILL}
- },
- {&hf_docsis_tlv_sw_file,
- {"9 Software Upgrade File", "docsis_tlv.sw_upg_file",
- FT_STRINGZ, BASE_NONE, NULL, 0x0,
- "Software Upgrade File", HFILL}
- },
- {&hf_docsis_tlv_snmp_access,
- {"10 SNMP Write Access", "docsis_tlv.snmp_access",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "SNMP Write Access", HFILL}
- },
- {&hf_docsis_tlv_snmp_obj,
- {"11 SNMP Object", "docsis_tlv.snmp_obj",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "SNMP Object", HFILL}
- },
- {&hf_docsis_tlv_modem_addr,
- {"12 Modem IP Address", "docsis_tlv.modemaddr",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "Modem IP Address", HFILL}
- },
- {&hf_docsis_tlv_svc_unavail,
- {"13 Service Not Available Response", "docsis_tlv.svcunavail",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Service Not Available Response", HFILL}
- },
- {&hf_docsis_tlv_svc_unavail_classid,
- {"Service Not Available: (Class ID)", "docsis_tlv.svcunavail.classid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Service Not Available (Class ID)", HFILL}
- },
- {&hf_docsis_tlv_svc_unavail_type,
- {"Service Not Available (Type)", "docsis_tlv.svcunavail.type",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_svc_unavail_code,
- {"Service Not Available (Code)", "docsis_tlv.svcunavail.code",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_cpe_ethernet,
- {"14 CPE Ethernet Addr", "docsis_tlv.cpe_ether",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- "CPE Ethernet Addr", HFILL}
- },
- {&hf_docsis_tlv_bpi,
- {"17 Baseline Privacy Encoding", "docsis_tlv.bpi",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Baseline Privacy Encoding", HFILL}
- },
- {&hf_docsis_tlv_max_cpe,
- {"18 Max # of CPE's", "docsis_tlv.maxcpe",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Max Number of CPE's", HFILL}
- },
- {&hf_docsis_tlv_tftp_server_timestamp,
- {"19 TFTP Server Timestamp", "docsis_tlv.tftp_time",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "TFTP Server TimeStamp", HFILL}
- },
- {&hf_docsis_tlv_tftp_prov_modem_address,
- {"20 TFTP Server Provisioned Modem Addr", "docsis_tlv.tftpmodemaddr",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "TFTP Server Provisioned Modem Addr", HFILL}
- },
- {&hf_docsis_tlv_sw_upg_srvr,
- {"21 Software Upgrade Server", "docsis_tlv.sw_upg_srvr",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "Software Upgrade Server", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_upclsfr,
- {"22 Upstream Classifier", "docsis_tlv.upclsfr",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_downclsfr,
- {"23 Downstream Classifier", "docsis_tlv.downclsfr",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
-#endif
- {&hf_docsis_tlv_clsfr_ref,
- {".1 Classifier Ref", "docsis_tlv.clsfr.ref",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Classifier Reference", HFILL}
- },
- {&hf_docsis_tlv_clsfr_id,
- {".2 Classifier ID", "docsis_tlv.clsfr.id",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Classifier ID", HFILL}
- },
- {&hf_docsis_tlv_clsfr_sflow_ref,
- {".3 Service Flow Ref", "docsis_tlv.clsfr.sflowref",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Service Flow Reference", HFILL}
- },
- {&hf_docsis_tlv_clsfr_sflow_id,
- {".4 Service Flow ID", "docsis_tlv.clsfr.sflowid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Service Flow ID", HFILL}
- },
- {&hf_docsis_tlv_clsfr_rule_pri,
- {".5 Rule Priority", "docsis_tlv.clsfr.rulepri",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Rule Priority", HFILL}
- },
- {&hf_docsis_tlv_clsfr_act_state,
- {".6 Activation State", "docsis_tlv.clsfr.actstate",
- FT_BOOLEAN, BASE_NONE, TFS (&activation_tfs), 0x0,
- "Classifier Activation State", HFILL}
- },
- {&hf_docsis_tlv_clsfr_dsc_act,
- {".7 DSC Action", "docsis_tlv.clsfr.dscact",
- FT_UINT8, BASE_DEC, VALS (dsc_act_vals), 0x0,
- "Dynamic Service Change Action", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_clsfr_err,
- {".8 Error Encodings", "docsis_tlv.clsfr.err",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Error Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tlv_clsfr_err_param,
- {"..1 Param Subtype", "docsis_tlv.clsfr.err.param",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Parameter Subtype", HFILL}
- },
- {&hf_docsis_tlv_clsfr_err_code,
- {"..2 Error Code", "docsis_tlv.clsfr.err.code",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- "Error Code", HFILL}
- },
- {&hf_docsis_tlv_clsfr_err_msg,
- {"..3 Error Message", "docsis_tlv.clsfr.err.msg",
- FT_STRINGZ, BASE_NONE, NULL, 0x0,
- "Error Message", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_ipclsfr,
- {".9 IP Classifier Encodings", "docsis_tlv.clsfr.ip",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "IP Classifier Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tlv_ipclsfr_tosmask,
- {"..1 Type Of Service Mask", "docsis_tlv.clsfr.ip.tosmask",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Type Of Service Mask", HFILL}
- },
- {&hf_docsis_tlv_ipclsfr_ipproto,
- {"..2 IP Protocol", "docsis_tlv.clsfr.ip.ipproto",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "IP Protocol", HFILL}
- },
- {&hf_docsis_tlv_ipclsfr_src,
- {"..3 Source Address", "docsis_tlv.clsfr.ip.src",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "Source Address", HFILL}
- },
- {&hf_docsis_tlv_ipclsfr_dst,
- {"..4 Destination Address", "docsis_tlv.clsfr.ip.dst",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "Destination Address", HFILL}
- },
- {&hf_docsis_tlv_ipclsfr_srcmask,
- {"..5 Source Mask", "docsis_tlv.clsfr.ip.smask",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "Source Mask", HFILL}
- },
- {&hf_docsis_tlv_ipclsfr_dstmask,
- {"..6 Destination Mask", "docsis_tlv.clsfr.ip.dmask",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "Destination Mask", HFILL}
- },
- {&hf_docsis_tlv_ipclsfr_sport_start,
- {"..7 Source Port Start", "docsis_tlv.clsfr.ip.sportstart",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "TCP/UDP Source Port Start", HFILL}
- },
- {&hf_docsis_tlv_ipclsfr_sport_end,
- {"..8 Source Port End", "docsis_tlv.clsfr.ip.sportend",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "TCP/UDP Source Port End", HFILL}
- },
- {&hf_docsis_tlv_ipclsfr_dport_start,
- {"..9 Dest Port Start", "docsis_tlv.clsfr.ip.dportstart",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "TCP/UDP Destination Port Start", HFILL}
- },
- {&hf_docsis_tlv_ipclsfr_dport_end,
- {"..10 Dest Port End", "docsis_tlv.clsfr.ip.dportend",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "TCP/UDP Destination Port End", HFILL}
- },
- {&hf_docsis_tlv_ip6clsfr_tc_low,
- {"tc-low", "docsis_tlv.clsfr.ip6.tc.low",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_ip6clsfr_tc_high,
- {"tc-high", "docsis_tlv.clsfr.ip6.tc.high",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_ip6clsfr_tc_mask,
- {"tc-mask", "docsis_tlv.clsfr.ip6.tc.mask",
- FT_UINT8, BASE_HEX, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_ip6clsfr_flow_label,
- {"..2 Flow Label", "docsis_tlv.clsfr.ip6.flowlabel",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- "Flow Label", HFILL}
- },
- {&hf_docsis_tlv_ip6clsfr_next_header,
- {"..3 Next Header", "docsis_tlv.clsfr.ip6.nextheader",
- FT_UINT16, BASE_DEC, VALS(next_header_vals), 0x0,
- "Next Header", HFILL}
- },
- {&hf_docsis_tlv_ip6clsfr_src,
- {"..4 Source Address", "docsis_tlv.clsfr.ip6.src",
- FT_IPv6, BASE_NONE, NULL, 0x0,
- "Source Address", HFILL}
- },
- {&hf_docsis_tlv_ip6clsfr_src_prefix_length,
- {"..5 Source Prefix Length", "docsis_tlv.clsfr.ip6.src_prefix_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Source Prefix Length", HFILL}
- },
- {&hf_docsis_tlv_ip6clsfr_dst,
- {"..6 Destination Address", "docsis_tlv.clsfr.ip6.dst",
- FT_IPv6, BASE_NONE, NULL, 0x0,
- "Destination Address", HFILL}
- },
- {&hf_docsis_tlv_ip6clsfr_dst_prefix_length,
- {"..7 Destination Prefix Length", "docsis_tlv.clsfr.ip6.dst_prefix_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Destination Prefix Length", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_ethclsfr,
- {".10 Ethernet Classifier Encodings", "docsis_tlv.clsfr.eth",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Ethernet Classifier Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tlv_ethclsfr_dmac,
- {"..1 Dest Mac Address", "docsis_tlv.clsfr.eth.dmac",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- "Destination Mac Address", HFILL}
- },
- {&hf_docsis_tlv_ethclsfr_smac,
- {"..2 Source Mac Address", "docsis_tlv.clsfr.eth.smac",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- "Source Mac Address", HFILL}
- },
- {&hf_docsis_tlv_ethclsfr_ethertype,
- {"..3 Ethertype", "docsis_tlv.clsfr.eth.ethertype",
- FT_UINT24, BASE_HEX, NULL, 0x0,
- "Ethertype", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_dot1qclsfr,
- {".11 802.1Q Classifier Encodings", "docsis_tlv.clsfr.dot1q",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "802.1Q Classifier Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tlv_dot1qclsfr_user_pri,
- {"..1 User Priority", "docsis_tlv.clsfr.dot1q.userpri",
- FT_UINT16, BASE_HEX, NULL, 0x0,
- "User Priority", HFILL}
- },
- {&hf_docsis_tlv_dot1qclsfr_vlanid,
- {"..2 VLAN id", "docsis_tlv.clsfr.dot1q.ethertype",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "VLAN Id", HFILL}
- },
- {&hf_docsis_tlv_dot1qclsfr_vendorspec,
- {"..43 Vendor Specific Encodings", "docsis_tlv.clsfr.dot1q.vendorspec",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Vendor Specific Encodings", HFILL}
- },
- {&hf_docsis_tlv_clsfr_vendor_spc,
- {".43 Vendor Specific Encodings", "docsis_tlv.clsfr.vendor",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Vendor Specific Encodings", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_upsflow,
- {"24 Upstream Service Flow", "docsis_tlv.upsflow",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_downsflow,
- {"25 Downstream Service Flow", "docsis_tlv.downsflow",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
-#endif
- {&hf_docsis_tlv_sflow_ref,
- {".1 Service Flow Ref", "docsis_tlv.sflow.ref",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Service Flow Reference", HFILL}
- },
- {&hf_docsis_tlv_sflow_id,
- {".2 Service Flow Id", "docsis_tlv.sflow.id",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Service Flow Id", HFILL}
- },
- {&hf_docsis_tlv_sflow_sid,
- {".3 Service Identifier", "docsis_tlv.sflow.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Service Identifier", HFILL}
- },
- {&hf_docsis_tlv_sflow_classname,
- {".4 Service Class Name", "docsis_tlv.sflow.cname",
- FT_STRINGZ, BASE_NONE, NULL, 0x0,
- "Service Class Name", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_sflow_err,
- {".5 Error Encodings", "docsis_tlv.sflow.err",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Error Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tlv_sflow_err_param,
- {"..1 Param Subtype", "docsis_tlv.sflow.err.param",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Parameter Subtype", HFILL}
- },
- {&hf_docsis_tlv_sflow_err_code,
- {"..2 Error Code", "docsis_tlv.sflow.err.code",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- "Error Code", HFILL}
- },
- {&hf_docsis_tlv_sflow_err_msg,
- {"..3 Error Message", "docsis_tlv.sflow.err.msg",
- FT_STRINGZ, BASE_NONE, NULL, 0x0,
- "Error Message", HFILL}
- },
- {&hf_docsis_tlv_sflow_qos_param,
- {".6 QOS Parameter Set", "docsis_tlv.sflow.qos",
- FT_UINT8, BASE_HEX, VALS (qos_param_vals), 0x0,
- "QOS Parameter Set", HFILL}
- },
- {&hf_docsis_tlv_sflow_traf_pri,
- {".7 Traffic Priority", "docsis_tlv.sflow.trafpri",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Traffic Priority", HFILL}
- },
- {&hf_docsis_tlv_sflow_max_sus,
- {".8 Maximum Sustained Traffic Rate (bps)", "docsis_tlv.sflow.maxtrafrate",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Maximum Sustained Traffic Rate (bps)", HFILL}
- },
- {&hf_docsis_tlv_sflow_max_burst,
- {".9 Maximum Burst (bps)", "docsis_tlv.sflow.maxburst",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Maximum Burst (bps)", HFILL}
- },
- {&hf_docsis_tlv_sflow_min_traf,
- {".10 Minimum Traffic Rate (bps)", "docsis_tlv.sflow.mintrafrate",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Minimum Traffic Rate (bps)", HFILL}
- },
- {&hf_docsis_tlv_sflow_ass_min_pkt_size,
- {".11 Assumed Min Reserved Packet Size", "docsis_tlv.sflow.assumed_min_pkt_size",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Assumed Minimum Reserved Packet Size", HFILL}
- },
- {&hf_docsis_tlv_sflow_timeout_active,
- {".12 Timeout for Active Params (secs)", "docsis_tlv.sflow.act_timeout",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Timeout for Active Params (secs)", HFILL}
- },
- {&hf_docsis_tlv_sflow_timeout_admitted,
- {".13 Timeout for Admitted Params (secs)", "docsis_tlv.sflow.adm_timeout",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Timeout for Admitted Params (secs)", HFILL}
- },
- {&hf_docsis_tlv_sflow_max_down_latency,
- {".14 Maximum Downstream Latency (usec)", "docsis_tlv.sflow.max_down_lat",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Maximum Downstream Latency (usec)", HFILL}
- },
- {&hf_docsis_tlv_sflow_max_concat_burst,
- {".14 Max Concat Burst", "docsis_tlv.sflow.maxconcat",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Max Concatenated Burst", HFILL}
- },
- {&hf_docsis_tlv_sflow_sched_type,
- {".15 Scheduling Type", "docsis_tlv.sflow.schedtype",
- FT_UINT32, BASE_HEX, VALS (sched_type_vals), 0x0,
- "Scheduling Type", HFILL}
- },
- {&hf_docsis_tlv_sflow_reqxmit_pol,
- {".16 Request/Transmission Policy", "docsis_tlv.sflow.reqxmitpol",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- "Request/Transmission Policy", HFILL}
- },
- {&hf_docsis_tlv_sflow_reqxmit_all_cm_broadcast,
- {"Service flow use \"all CMs\" broadcast request opportunities", "docsis_tlv.sflow.reqxmitpol.all_cm_broadcast",
- FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x01,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_sflow_reqxmit_priority_multicast,
- {"Service flow use priority multicast request opportunities", "docsis_tlv.sflow.reqxmitpol.priority_multicast",
- FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x02,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_sflow_reqxmit_req_data_requests,
- {"Service flow use Request/Data opportunities for requests", "docsis_tlv.sflow.reqxmitpol.req_data_requests",
- FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x04,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_sflow_reqxmit_req_data_data,
- {"Service flow use Request/Data opportunities for data", "docsis_tlv.sflow.reqxmitpol.req_data_data",
- FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x08,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_sflow_reqxmit_piggy_back,
- {"Service flow use piggy back requests with data", "docsis_tlv.sflow.reqxmitpol.piggy_back",
- FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x10,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_sflow_reqxmit_concatenate_data,
- {"Service flow concatenate data", "docsis_tlv.sflow.reqxmitpol.concatenate_data",
- FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x20,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_sflow_reqxmit_fragment,
- {"Service flow fragment data", "docsis_tlv.sflow.reqxmitpol.fragment",
- FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x40,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_sflow_reqxmit_suppress_payload,
- {"Service flow suppress payload headers", "docsis_tlv.sflow.reqxmitpol.suppress_payload",
- FT_BOOLEAN, 32, TFS(&tfs_must_not_must), 0x80,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_sflow_reqxmit_drop_packets,
- {"Service flow drop packets that do not fit in the UGS size", "docsis_tlv.sflow.reqxmitpol.drop_packets",
- FT_BOOLEAN, 32, TFS(&tfs_must_must_not), 0x100,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_sflow_nominal_polling,
- {".17 Nominal Polling Interval(usec)", "docsis_tlv.sflow.nominal_polling",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Nominal Polling Interval(usec)", HFILL}
- },
- {&hf_docsis_tlv_sflow_tolerated_jitter,
- {".18 Tolerated Poll Jitter (usec)", "docsis_tlv.sflow.toler_jitter",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Tolerated Poll Jitter (usec)", HFILL}
- },
- {&hf_docsis_tlv_sflow_ugs_size,
- {".19 Unsolicited Grant Size (bytes)", "docsis_tlv.sflow.ugs_size",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Unsolicited Grant Size (bytes)", HFILL}
- },
- {&hf_docsis_tlv_sflow_nom_grant_intvl,
- {".20 Nominal Grant Interval (usec)", "docsis_tlv.sflow.nom_grant_intvl",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Nominal Grant Interval (usec)", HFILL}
- },
- {&hf_docsis_tlv_sflow_tol_grant_jitter,
- {".21 Tolerated Grant Jitter (usec)", "docsis_tlv.sflow.tol_grant_jitter",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Tolerated Grant Jitter (usec)", HFILL}
- },
- {&hf_docsis_tlv_sflow_grants_per_intvl,
- {".22 Grants Per Interval", "docsis_tlv.sflow.grnts_per_intvl",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Grants Per Interval", HFILL}
- },
- {&hf_docsis_tlv_sflow_ip_tos_overwrite,
- {".23 IP TOS Overwrite", "docsis_tlv.sflow.iptos_overwrite",
- FT_UINT16, BASE_HEX, NULL, 0x0,
- "IP TOS Overwrite", HFILL}
- },
- {&hf_docsis_tlv_sflow_ugs_timeref,
- {".24 UGS Time Reference", "docsis_tlv.sflow.ugs_timeref",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "UGS Time Reference", HFILL}
- },
- {&hf_docsis_tlv_sflow_req_attr_mask,
- {".31 Required Attribute Mask", "docsis_tlv.sflow.req_attr_mask",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Required Attribute Mask", HFILL}
- },
- {&hf_docsis_tlv_sflow_forb_attr_mask,
- {".32 Forbidden Attribute Mask", "docsis_tlv.sflow.forb_attr_mask",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Forbidden Attribute Mask", HFILL}
- },
- {&hf_docsis_tlv_sflow_attr_aggr_rule_mask,
- {".33 Attribute Aggregation Rule Mask", "docsis_tlv.sflow.attr_aggr_rule_mask",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Attribute Aggregation Rule Mask", HFILL}
- },
- {&hf_docsis_tlv_sflow_vendor_spec,
- {".43 Vendor Specific Encodings", "docsis_tlv.sflow.vendorspec",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Vendor Specific Encodings", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_phs,
- {"26 PHS Rules", "docsis_tlv.phs",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "PHS Rules", HFILL}
- },
-#endif
- {&hf_docsis_tlv_phs_class_ref,
- {".1 Classifier Reference", "docsis_tlv.phs.classref",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Classifier Reference", HFILL}
- },
- {&hf_docsis_tlv_phs_class_id,
- {".2 Classifier Id", "docsis_tlv.phs.classid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Classifier Id", HFILL}
- },
- {&hf_docsis_tlv_phs_sflow_ref,
- {".3 Service flow reference", "docsis_tlv.phs.sflowref",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Service Flow Reference", HFILL}
- },
- {&hf_docsis_tlv_phs_sflow_id,
- {".4 Service flow Id", "docsis_tlv.phs.sflowid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Service Flow Id", HFILL}
- },
- {&hf_docsis_tlv_phs_dsc_action,
- {".5 DSC Action", "docsis_tlv.phs.dscaction",
- FT_UINT8, BASE_DEC, VALS (action_vals), 0x0,
- "Dynamic Service Change Action", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_phs_err,
- {".6 Error Encodings", "docsis_tlv.phs.err",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Error Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tlv_phs_err_param,
- {"..1 Param Subtype", "docsis_tlv.phs.err.param",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Parameter Subtype", HFILL}
- },
- {&hf_docsis_tlv_phs_err_code,
- {"..2 Error Code", "docsis_tlv.phs.err.code",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Error Code", HFILL}
- },
- {&hf_docsis_tlv_phs_err_msg,
- {"..3 Error Message", "docsis_tlv.phs.err.msg",
- FT_STRINGZ, BASE_NONE, NULL, 0x0,
- "Error Message", HFILL}
- },
- {&hf_docsis_tlv_phs_phsf,
- {".7 PHS Field", "docsis_tlv.phs.phsf",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "PHS Field", HFILL}
- },
- {&hf_docsis_tlv_phs_phsi,
- {".8 PHS Index", "docsis_tlv.phs.phsi",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "PHS Index", HFILL}
- },
- {&hf_docsis_tlv_phs_phsm,
- {".9 PHS Mask", "docsis_tlv.phs.phsm",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "PHS Mask", HFILL}
- },
- {&hf_docsis_tlv_phs_phss,
- {".10 PHS Size", "docsis_tlv.phs.phss",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "PHS Size", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_phs_phsv,
- {".11 PHS Verify", "docsis_tlv.phs.phsv",
- FT_BOOLEAN, BASE_NONE, TFS (&verify_tfs), 0x0,
- "PHS Verify", HFILL}
- },
-#endif
- {&hf_docsis_tlv_phs_vendorspec,
- {".43 PHS Vendor Specific", "docsis_tlv.phs.vendorspec",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "PHS Vendor Specific", HFILL}
- },
- {&hf_docsis_tlv_hmac_digest,
- {"27 HMAC Digest", "docsis_tlv.hmac_digest",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "HMAC Digest", HFILL}
- },
- {&hf_docsis_tlv_max_classifiers,
- {"28 Max # of Classifiers", "docsis_tlv.maxclass",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Max # of Classifiers", HFILL}
- },
- {&hf_docsis_tlv_privacy_enable,
- {"29 Privacy Enable", "docsis_tlv.bpi_en",
- FT_BOOLEAN, BASE_NONE, TFS (&ena_dis_tfs), 0x0,
- "Privacy Enable", HFILL}
- },
- {&hf_docsis_tlv_auth_block,
- {"30 Auth Block", "docsis_tlv.auth_block",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Auth Block", HFILL}
- },
- {&hf_docsis_tlv_key_seq_num,
- {"31 Key Sequence Number", "docsis_tlv.key_seq",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Key Sequence Number", HFILL}
- },
- {&hf_docsis_tlv_mfgr_cvc,
- {"32 Manufacturer CVC", "docsis_tlv.mfgr_cvc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Manufacturer CVC", HFILL}
- },
- {&hf_docsis_tlv_cosign_cvc,
- {"33 Co-Signer CVC", "docsis_tlv.cosign_cvc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Co-Signer CVC", HFILL}
- },
- {&hf_docsis_tlv_snmpv3_kick,
- {"34 SNMPv3 Kickstart Value", "docsis_tlv.snmpv3",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "SNMPv3 Kickstart Value", HFILL}
- },
- {&hf_docsis_tlv_snmpv3_kick_name,
- {".1 SNMPv3 Kickstart Security Name", "docsis_tlv.snmpv3.secname",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "SNMPv3 Kickstart Security Name", HFILL}
- },
- {&hf_docsis_tlv_snmpv3_kick_publicnum,
- {".2 SNMPv3 Kickstart Manager Public Number", "docsis_tlv.snmpv3.publicnum",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "SNMPv3 Kickstart Value Manager Public Number", HFILL}
- },
- {&hf_docsis_tlv_subs_mgmt_ctrl,
- {"35 Subscriber Management Control", "docsis_tlv.subsmgmtctrl",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Subscriber Management Control", HFILL}
- },
- {&hf_docsis_tlv_subs_mgmt_ip_table,
- {"36 Subscriber Management CPE IP Table", "docsis_tlv.subsiptable",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Subscriber Management CPE IP Table", HFILL}
- },
- {&hf_docsis_tlv_subs_mgmt_ip_entry,
- {"Subscriber Management CPE IP Entry", "docsis_tlv.subsipentry",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_subs_mgmt_filter_grps,
- {"37 Subscriber Management Filter Groups", "docsis_tlv.subsfltrgrps",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Subscriber Management Filter Groups", HFILL}
- },
- {&hf_docsis_tlv_snmpv3_ntfy_rcvr,
- {"38 SNMPv3 Notification Receiver", "docsis_tlv.snmpv3ntfy",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "SNMPv3 Notification Receiver", HFILL}
- },
- {&hf_docsis_tlv_enable_20_mode,
- {"39 Enable 2.0 Mode", "docsis_tlv.enable20mode",
- FT_BOOLEAN, BASE_NONE, TFS (&ena_dis_tfs), 0x0,
- "Enable 2.0 Mode", HFILL}
- },
- {&hf_docsis_tlv_enable_test_modes,
- {"40 Enable Test Modes", "docsis_tlv.enabletestmodes",
- FT_BOOLEAN, BASE_NONE, TFS (&ena_dis_tfs), 0x0,
- "Enable Test Modes", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_ds_ch_list,
- {"41 Downstream Channel List", "docsis_tlv.dschlist",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_tlv_ds_ch_list_single,
- {".1 Single Downstream Channel", "docsis_tlv.dschlist.single",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
-#endif
- {&hf_docsis_tlv_single_ch_timeout,
- {"..1 Timeout", "docsis_tlv.dschlist.single.timeout",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Timeout", HFILL}
- },
- {&hf_docsis_tlv_single_ch_freq,
- {"..2 Timeout", "docsis_tlv.dschlist.single.freq",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Timeout", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_ds_ch_list_range,
- {".2 Downstream Frequency Range", "docsis_tlv.dschlist.range",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
-#endif
- {&hf_docsis_tlv_freq_rng_timeout,
- {"..1 Timeout", "docsis_tlv.dschlist.range.timeout",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Timeout", HFILL}
- },
- {&hf_docsis_tlv_freq_rng_start,
- {"..2 Frequency Start", "docsis_tlv.dschlist.range.start",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Frequency Start", HFILL}
- },
- {&hf_docsis_tlv_freq_rng_end,
- {"..3 Frequency Start", "docsis_tlv.dschlist.range.end",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Frequency End", HFILL}
- },
- {&hf_docsis_tlv_freq_rng_step,
- {"..4 Frequency Step Size", "docsis_tlv.dschlist.range.step",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Frequency Step Size", HFILL}
- },
- {&hf_docsis_tlv_ds_ch_list_default_timeout,
- {".3 Default Scanning Timeout", "docsis_tlv.dschlist.defaulttimeout",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Default Scanning Timeout", HFILL}
- },
- {&hf_docsis_tlv_mc_mac_address,
- {"42 Static Multicast MAC Address", "docsis_tlv.mcmac",
- FT_ETHER, BASE_NONE, NULL, 0x0,
- "Static Multicast MAC Address", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_vendor_spec,
- {"43 Vendor Specific Encodings", "docsis_tlv.vendorspec",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Vendor Specific Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tlv_rng_tech,
- {"Ranging Technique", "docsis_tlv.rng_tech",
- FT_UINT8, BASE_DEC, VALS (rng_tech_vals), 0x0,
- NULL, HFILL}
- },
-#if 0
- {&hf_docsis_tlv_dut_filter,
- {"45 Downstream Unencrypted Traffic Filtering Encoding", "docsis_tlv.dut",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Downstream Unencrypted Traffic Filtering Encoding", HFILL}
- },
-#endif
- {&hf_docsis_tlv_dut_filter_control,
- {".1 DUT Control", "docsis_tlv.dut.control",
- FT_BOOLEAN, BASE_NONE, TFS (&ena_dis_tfs), 0x0,
- "DUT Control", HFILL}
- },
- {&hf_docsis_tlv_dut_filter_cmim,
- {".2 DUT CMIM", "docsis_tlv.dut.cmim",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "DUT CMIM", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_tcc,
- {"46 Transmit Channel Configuration", "docsis_tlv.tcc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Transmit Channel Configuration", HFILL}
- },
-#endif
- {&hf_docsis_tlv_tcc_refid,
- {".1 TCC Reference ID", "docsis_tlv.tcc.refid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "TCC Reference ID", HFILL}
- },
- {&hf_docsis_tlv_tcc_us_ch_action,
- {".2 Upstream Channel Action", "docsis_tlv.tcc.uschact",
- FT_UINT8, BASE_DEC, VALS (us_ch_action_vals), 0x0,
- "Upstream Channel Action", HFILL}
- },
- {&hf_docsis_tlv_tcc_us_ch_id,
- {".3 Upstream Channel ID", "docsis_tlv.tcc.uschid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Upstream Channel ID", HFILL}
- },
- {&hf_docsis_tlv_tcc_new_us_ch_id,
- {".4 New Upstream Channel ID", "docsis_tlv.tcc.newuschid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "New Upstream Channel ID", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_tcc_ucd,
- {".5 Upstream Channel Decsriptor", "docsis_tlv.tcc.ucd",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Upstream Channel Descriptor", HFILL}
- },
-#endif
- {&hf_docsis_tlv_tcc_rng_sid,
- {".6 Ranging SID", "docsis_tlv.tcc.rngsid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Ranging SID", HFILL}
- },
- {&hf_docsis_tlv_tcc_init_tech,
- {".7 Initialization Technique", "docsis_tlv.tcc.inittech",
- FT_UINT8, BASE_DEC, VALS (init_tech_vals), 0x0,
- "Initialization Technique", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_tcc_rng_parms,
- {".8 Ranging Parameters", "docsis_tlv.tcc.rngparms",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Ranging Parameters", HFILL}
- },
-#endif
- {&hf_docsis_rng_parms_us_ch_id,
- {"..1 Ranging Reference Channel ID", "docsis_tlv.tcc.rngparms.uschid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Upstream Channel ID", HFILL}
- },
- {&hf_docsis_rng_parms_time_off_int,
- {"..2 Timing Offset, Integer Part", "docsis_tlv.tcc.rngparms.timeoffint",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Timing Offset, Integer Part", HFILL}
- },
- {&hf_docsis_rng_parms_time_off_frac,
- {"..3 Timing Offset, Fractional Part", "docsis_tlv.tcc.rngparms.timeofffrac",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Timing Offset, Fractional Part", HFILL}
- },
- {&hf_docsis_rng_parms_power_off,
- {"..4 Power Offset", "docsis_tlv.tcc.rngparms.poweroff",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Power Offset", HFILL}
- },
- {&hf_docsis_rng_parms_freq_off,
- {"..5 Frequency Offset", "docsis_tlv.tcc.rngparms.freqoff",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Frequency Offset", HFILL}
- },
- {&hf_docsis_tlv_tcc_dyn_rng_win,
- {".9 Dynamic Range Window", "docsis_tlv.tcc.dynrngwin",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Dynamic Range Window", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_tcc_err,
- {".10 TCC Error Encodings", "docsis_tlv.tcc.err",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "TCC Error Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tcc_err_subtype,
- {"..1 TCC Subtype", "docsis_tlv.tcc.err.subtype",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "TCC Subtype", HFILL}
- },
- {&hf_docsis_tcc_err_code,
- {"..2 Error Code", "docsis_tlv.tcc.err.code",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- "Error Code", HFILL}
- },
- {&hf_docsis_tcc_err_msg,
- {"..3 Error Message", "docsis_tlv.tcc.err.msg",
- FT_STRINGZ, BASE_NONE, NULL, 0x0,
- "Error Message", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_sid_cl,
- {"47 Service Flow SID Cluster Assignments", "docsis_tlv.sid",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Service Flow SID Cluster Assignments", HFILL}
- },
-#endif
- {&hf_docsis_sid_cl_sf_id,
- {".1 Service Flow ID", "docsis_tlv.sid.sfid",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Upstream Channel ID", HFILL}
- },
-#if 0
- {&hf_docsis_sid_cl_enc,
- {".2 SID Cluster Encodings", "docsis_tlv.sid.enc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "SID Cluster Encodings", HFILL}
- },
-#endif
- {&hf_docsis_sid_cl_enc_id,
- {"..1 SID Cluster ID", "docsis_tlv.sid.enc.id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "SID Cluster ID", HFILL}
- },
-#if 0
- {&hf_docsis_sid_cl_enc_map,
- {"..2 SID-to-Channel Mapping", "docsis_tlv.sid.enc.map",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "SID Cluster ID", HFILL}
- },
-#endif
- {&hf_docsis_sid_cl_map_us_ch_id,
- {"...1 Upstream Channel ID", "docsis_tlv.sid.enc.map.uschid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Upstream Channel ID", HFILL}
- },
- {&hf_docsis_sid_cl_map_sid,
- {"...2 SID", "docsis_tlv.sid.enc.map.sid",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "SID", HFILL}
- },
- {&hf_docsis_sid_cl_map_action,
- {"...3 SID-to-Channel Mapping Action", "docsis_tlv.sid.enc.map.action",
- FT_UINT8, BASE_DEC, VALS (sid_ch_map_vals), 0x0,
- "SID-to-Channel Mapping Action", HFILL}
- },
-#if 0
- {&hf_docsis_sid_cl_so_crit,
- {".3 SID Cluster Switchover Criteria", "docsis_tlv.sid.socrit",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "SID Cluster Switchover Criteria", HFILL}
- },
-#endif
- {&hf_docsis_sid_cl_so_max_req,
- {"..1 Maximum Requests per SID Cluster", "docsis_tlv.sid.socrit.maxreq",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Maximum Requests per SID Cluster", HFILL}
- },
- {&hf_docsis_sid_cl_so_max_out_bytes,
- {"..2 Maximum Outstanding Bytes per SID Cluster", "docsis_tlv.sid.socrit.maxoutbytes",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Maximum Outstanding Bytes per SID Cluster", HFILL}
- },
- {&hf_docsis_sid_cl_so_max_req_bytes,
- {"..3 Maximum Total Bytes Requested per SID Cluster", "docsis_tlv.sid.socrit.maxreqbytes",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Maximum Total Bytes Requested per SID Cluster", HFILL}
- },
- {&hf_docsis_sid_cl_so_max_time,
- {"..4 Maximum Time in the SID Cluster", "docsis_tlv.sid.socrit.maxtime",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Maximum Time in the SID Cluster", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_rcp,
- {"48 Receive Channel Profile", "docsis_tlv.rcp",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Receive Channel Profile", HFILL}
- },
-#endif
- {&hf_docsis_tlv_rcp_id,
- {".1 RCP-ID", "docsis_tlv.rcp.id",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "RCP-ID", HFILL}
- },
- {&hf_docsis_tlv_rcp_name,
- {".2 RCP Name", "docsis_tlv.rcp.name",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "RCP Name", HFILL}
- },
- {&hf_docsis_tlv_rcp_freq_spc,
- {".3 RCP Center Frequency Spacing", "docsis_tlv.rcp.freq_spc",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "RCP Center Frequency Spacing", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_rcp_rcv_mod_enc,
- {".4 Receive Module Capability", "docsis_tlv.rcp.rcv_mod_enc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Receive Module Encoding", HFILL}
- },
-#endif
- {&hf_docsis_rcv_mod_enc_idx,
- {"..1 Receive Module Index", "docsis_tlv.rcp.rcv_mod_enc.idx",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Receive Module Index", HFILL}
- },
-#if 0
- {&hf_docsis_rcv_mod_enc_adj_ch,
- {"..2 Adjacent Channels", "docsis_tlv.rcp.rcv_mod_enc.adj_ch",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Adjacent Channels", HFILL}
- },
- {&hf_docsis_rcv_mod_enc_ch_bl_rng,
- {"..3 Channel Block Range", "docsis_tlv.rcp.rcv_mod_enc.ch_bl_rng",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Channel Block Range", HFILL}
- },
-#endif
- {&hf_docsis_rcv_mod_enc_ctr_freq_asgn,
- {"..4 First Channel Center Frequency Assignment", "docsis_tlv.rcv_mod_enc.ctr_freq_asgn",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "First Channel Center Frequency Assignment", HFILL}
- },
- {&hf_docsis_ch_bl_rng_min_ctr_freq,
- {"...1 Minimum Center Frequency", "docsis_tlv.rcp.rcv_mod_enc.ch_bl_rng.min_ctr_freq",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Minimum Center Frequency", HFILL}
- },
- {&hf_docsis_ch_bl_rng_max_ctr_freq,
- {"...2 Maximum Center Frequency", "docsis_tlv.rcp.rcv_mod_enc.ch_bl_rng.max_ctr_freq",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Maximum Center Frequency", HFILL}
- },
- {&hf_docsis_rcv_mod_enc_rsq_ch_subs_cap ,
- {"..5 Resequencing Channel Subset Capability", "docsis_tlv.rcp.rcv_mod_enc.rsq_ch_subs_cap",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Resequencing Channel Subset Capability", HFILL}
- },
- {&hf_docsis_rcv_mod_enc_conn ,
- {"..6 Receive Module Connectivity", "docsis_tlv.rcp.rcv_mod_enc.conn",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Receive Module Connectivity", HFILL}
- },
- {&hf_docsis_rcv_mod_enc_phy_layr_parms,
- {"..7 Physical Layer Parameter", "docsis_tlv.rcp.rcv_mod_enc.phy_layr_parms",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Physical Layer Parameter", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_rcp_rcv_ch,
- {".5 Receive Channel", "docsis_tlv.rcp.rcv_ch",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Receive Channel", HFILL}
- },
-#endif
- {&hf_docsis_rcv_ch_idx,
- {"..1 Receive Channel Index", "docsis_tlv.rcp.rcv_ch.idx",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Receive Channel Index", HFILL}
- },
- {&hf_docsis_rcv_ch_conn,
- {"..2 Receive Channel Connectivity", "docsis_tlv.rcp.rcv_ch.conn",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Receive Channel Connectivity", HFILL}
- },
- {&hf_docsis_rcv_ch_conn_off,
- {"..3 Receive Channel Connected Offset", "docsis_tlv.rcp.rcv_ch.conn_off",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Receive Channel Connected Offset", HFILL}
- },
- {&hf_docsis_rcv_ch_prim_ds_ch_ind,
- {"..5 Primary Downstream Channel Indicator", "docsis_tlv.rcp.rcv_ch.prim_ds_ch_ind",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Primary Downstream Channel Indicator", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_rcp_ven_spec,
- {".43 Vendor Specific Encodings", "docsis_tlv.rcp.vendorspec",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Vendor Specific Encodings", HFILL}
- },
- {&hf_docsis_tlv_rcc,
- {"49 Receive Channel Configuration", "docsis_tlv.rcc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Receive Channel Configuration", HFILL}
- },
-#endif
- {&hf_docsis_tlv_rcc_id,
- {".1 Assigned RCP-ID", "docsis_tlv.rcc.id",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Assigned RCP-ID", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_rcc_rcv_mod_enc,
- {".4 Receive Module Assignment", "docsis_tlv.rcc.rcv_mod_enc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Receive Module Assignment", HFILL}
- },
-#endif
- {&hf_docsis_rcc_rcv_mod_enc_idx,
- {"..1 Receive Module Index", "docsis_tlv.rcc.rcc_rcv_mod_enc.idx",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Receive Module Index", HFILL}
- },
- {&hf_docsis_rcc_rcv_mod_enc_ctr_freq_asgn,
- {"..4 First Channel Center Frequency Assignment", "docsis_tlv.rcc.rcv_mod_enc.ctr_freq_asgn",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "First Channel Center Frequency Assignment", HFILL}
- },
- {&hf_docsis_rcc_rcv_mod_enc_conn ,
- {"..6 Receive Module Connectivity", "docsis_tlv.rcc.rcv_mod_enc.conn",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Receive Module Connectivity", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_rcc_rcv_ch,
- {".5 Receive Channel", "docsis_tlv.rcc.rcv_ch",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Receive Channel", HFILL}
- },
-#endif
- {&hf_docsis_rcc_rcv_ch_idx,
- {"..1 Receive Channel Index", "docsis_tlv.rcc.rcv_ch.idx",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Receive Channel Index", HFILL}
- },
- {&hf_docsis_rcc_rcv_ch_conn,
- {"..2 Receive Channel Connectivity", "docsis_tlv.rcc.rcv_ch.conn",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Receive Channel Connectivity", HFILL}
- },
- {&hf_docsis_rcc_rcv_ch_ctr_freq_asgn,
- {"..4 Receive Channel Center Frequency Assignment", "docsis_tlv.rcc.rcv_ch.ctr_freq_asgn",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "Receive Channel Center Frequency Assignment", HFILL}
- },
- {&hf_docsis_rcc_rcv_ch_prim_ds_ch_ind,
- {"..5 Primary Downstream Channel Indicator", "docsis_tlv.rcc.rcv_ch.prim_ds_ch_ind",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Primary Downstream Channel Indicator", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_rcc_part_serv_ds_ch,
- {".6 Partial Service Downstream Channels", "docsis_tlv.rcc.part_serv_ds_ch",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Partial Service Downstream Channels", HFILL}
- },
- {&hf_docsis_tlv_rcc_ven_spec,
- {".43 Vendor Specific Encodings", "docsis_tlv.rcc.vendorspec",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Vendor Specific Encodings", HFILL}
- },
- {&hf_docsis_tlv_rcc_err,
- {".254 RCC Error Encodings", "docsis_tlv.rcc.err",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "RCC Error Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tlv_rcc_err_mod_or_ch,
- {".1 Receive Modul or Receive Channel", "docsis_tlv.rcc.err.mod_or_ch",
- FT_UINT8, BASE_DEC, VALS (mod_or_ch_vals), 0x0,
- "Receive Modul or Receive Channel", HFILL}
- },
- {&hf_docsis_tlv_rcc_err_idx,
- {".2 Receive Modul/Channel Index", "docsis_tlv.rcc.err.idx",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Receive Modul/Channel Index", HFILL}
- },
- {&hf_docsis_tlv_rcc_err_param,
- {".3 Reported Parameter", "docsis_tlv.rcc.err.param",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Reported Parameter", HFILL}
- },
- {&hf_docsis_tlv_rcc_err_code,
- {".4 Error Code", "docsis_tlv.rcc.err.code",
- FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
- "Error Code", HFILL}
- },
- {&hf_docsis_tlv_rcc_err_msg,
- {".5 Error Message", "docsis_tlv.rcc.err.msg",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Error Message", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_dsid,
- {"50 DSID Encodings", "docsis_tlv.dsid",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "DSID Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tlv_dsid_id,
- {".1 Downstream Service Identifier (DSID)", "docsis_tlv.dsid.id",
- FT_UINT24, BASE_DEC, NULL, 0x0,
- "Downstream Service Identifier (DSID)", HFILL}
- },
- {&hf_docsis_tlv_dsid_action,
- {".2 DSID Action", "docsis_tlv.dsid.action",
- FT_UINT8, BASE_DEC, VALS (dsid_action_vals), 0x0,
- "DSID Action", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_dsid_ds_reseq,
- {".3 Downstream Resequencing Encodings", "docsis_tlv.dsid.ds_reseq",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Downstream Resequencing Encodings", HFILL}
- },
-#endif
- {&hf_docsis_ds_reseq_dsid,
- {"..1 Resequencing DSID", "docsis_tlv.dsid.ds_reseq.dsid",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Resequencing DSID", HFILL}
- },
- {&hf_docsis_ds_reseq_ch_lst,
- {"..2 Downstream Resequencing Channel List", "docsis_tlv.dsid.ds_reseq.ch_lst",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Downstream Resequencing Channel List", HFILL}
- },
- {&hf_docsis_ds_reseq_wait_time,
- {"..3 Downstream Resequencing Wait Time", "docsis_tlv.dsid.ds_reseq.wait_time",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Downstream Resequencing Wait Time", HFILL}
- },
- {&hf_docsis_ds_reseq_warn_thresh,
- {"..4 Resequencing Warn Threshold", "docsis_tlv.dsid.ds_reseq.warn_thresh",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Resequencing Warn Threshold", HFILL}
- },
- {&hf_docsis_ds_reseq_ho_timer,
- {"..5 CM-Status max. Event Hold-Off Timer (Out-of-Range Events)", "docsis_tlv.dsid.ds_reseq.ho_timer",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "CM-Status max. Event Hold-Off Timer (Out-of-Range Events)", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_dsid_mc,
- {".4 Multicast Encodings", "docsis_tlv.dsid.mc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Multicast Encodings", HFILL}
- },
- {&hf_docsis_tlv_dsid_mc_addr,
- {"..1 Client MAC Address Encodings", "docsis_tlv.dsid.mc.addr",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Client MAC Address Encodings", HFILL}
- },
-#endif
- {&hf_docsis_mc_addr_action,
- {"...1 Client MAC Address Action", "docsis_tlv.dsid.mc.addr.action",
- FT_UINT8, BASE_DEC, VALS (add_del_vals), 0x0,
- "Client MAC Address Action", HFILL}
- },
- {&hf_docsis_mc_addr_addr,
- {"...2 Client MAC Address", "docsis_tlv.dsid.mc.addr.addr",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Client MAC Address", HFILL}
- },
- {&hf_docsis_tlv_dsid_mc_cmim,
- {"..2 Multicast CM Interface Mask", "docsis_tlv.dsid.mc.cmim",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Multicast CM Interface Mask", HFILL}
- },
- {&hf_docsis_tlv_dsid_mc_group,
- {"..3 Multicast Group MAC Addresses", "docsis_tlv.dsid.mc.group",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Multicast Group MAC Addresses", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_dsid_mc_phs,
- {"..26 Payload Header Suppression Encodings", "docsis_tlv.dsid.mc.phs",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Payload Header Suppression Encodings", HFILL}
- },
- {&hf_docsis_tlv_sec_assoc,
- {"51 Security Association Encodings", "docsis_tlv.sec_assoc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Security Association Encodings", HFILL}
- },
-#endif
- {&hf_docsis_tlv_sec_assoc_action,
- {".1 SA Action", "docsis_tlv.sec_assoc.action",
- FT_UINT8, BASE_DEC, VALS (add_del_vals), 0x0,
- "SA Action", HFILL}
- },
- {&hf_docsis_tlv_sec_assoc_desc,
- {".23 SA Descriptor", "docsis_tlv.sec_assoc.desc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "SA Descriptor", HFILL}
- },
- {&hf_docsis_tlv_init_ch_timeout,
- {"52 Initializing Channel Timeout", "docsis_tlv.init_ch_timeout",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Initializing Channel Timeout", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_ch_asgn,
- {"56 Channel Assignment Configuration Settings", "docsis_tlv.ch_asgn",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Channel Assignment Configuration Settings", HFILL}
- },
-#endif
- {&hf_docsis_ch_asgn_us_ch_id,
- {".1 Upstream Channel ID", "docsis_tlv.ch_asgn.us_ch_id",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "Upstream Channel ID", HFILL}
- },
- {&hf_docsis_ch_asgn_rx_freq,
- {".2 Rx Frequency", "docsis_tlv.ch_asgn.rx_freq",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Rx Frequency", HFILL}
- },
- {&hf_docsis_tlv_cm_init_reason,
- {"57 CM Initialization Reason", "docsis_tlv.cm_init_reason",
- FT_UINT16, BASE_DEC, VALS (init_reason_vals), 0x0,
- "CM Initialization Reason", HFILL}
- },
- {&hf_docsis_tlv_sw_upg_srvr_ipv6,
- {"58 Software Upgrade Server IPv6", "docsis_tlv.sw_upg_srvr_ipv6",
- FT_IPv6, BASE_NONE, NULL, 0x0,
- "Software Upgrade Server IPv6", HFILL}
- },
- {&hf_docsis_tlv_tftp_prov_cm_ipv6_addr,
- {"59 TFTP Server Provisioned Modem IPv6 Address", "docsis_tlv.tftp_prov_cm_ipv6_addr",
- FT_IPv6, BASE_NONE, NULL, 0x0,
- "TFTP Server Provisioned Modem IPv6 Address", HFILL}
- },
- {&hf_docsis_tlv_us_drop_clfy,
- {"60 Upstream Drop Packet Classification Encoding", "docsis_tlv.us_drop_clfy",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Upstream Drop Packet Classification Encoding", HFILL}
- },
- {&hf_docsis_tlv_subs_mgmt_ipv6_lst,
- {"61 Subscriber Management CPE IPv6 Prefix List", "docsis_tlv.subs_mgmt_ipv6_lst",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Subscriber Management CPE IPv6 Prefix List", HFILL}
- },
- {&hf_docsis_tlv_us_drop_clfy_group_id,
- {"62 Upstream Drop Classifier Group ID", "docsis_tlv.us_drop_clfy_group_id",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Upstream Drop Classifier Group ID", HFILL}
- },
- {&hf_docsis_tlv_subs_mgmt_ctrl_max_cpe_ipv6,
- {"63 Subscriber Management Control Max CPE IPv6 Prefix", "docsis_tlv.subs_mgmt_ctrl_max_cpe_ipv6",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "Subscriber Management Control Max CPE IPv6 Prefix", HFILL}
- },
-#if 0
- {&hf_docsis_tlv_cmts_mc_sess_enc,
- {"64 CMTS Static Multicast Session Encoding", "docsis_tlv.cmts_mc_sess_enc",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "CMTS Static Multicast Session Encoding", HFILL}
- },
-#endif
- {&hf_docsis_cmts_mc_sess_enc_grp,
- {".1 Multicast Group Address", "docsis_tlv.cmts_mc_sess_enc.grp",
- FT_IPXNET, BASE_NONE, NULL, 0x0,
- "Multicast Group Address", HFILL}
- },
- {&hf_docsis_cmts_mc_sess_enc_src,
- {".2 Source IP Address", "docsis_tlv.cmts_mc_sess_enc.src",
- FT_IPXNET, BASE_NONE, NULL, 0x0,
- "Source IP Address", HFILL}
- },
- {&hf_docsis_tlv_unknown,
- {"Unknown TLV", "docsis_tlv.unknown",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- };
-
- static gint *ett[] = {
- &ett_docsis_tlv,
- &ett_docsis_tlv_cos,
- &ett_docsis_tlv_mcap,
- &ett_docsis_tlv_mcap_em,
- &ett_docsis_tlv_clsfr,
- &ett_docsis_tlv_clsfr_ip,
- &ett_docsis_tlv_clsfr_ip6,
- &ett_docsis_tlv_clsfr_ip6_tc,
- &ett_docsis_tlv_clsfr_eth,
- &ett_docsis_tlv_clsfr_err,
- &ett_docsis_tlv_clsfr_dot1q,
- &ett_docsis_tlv_reqxmitpol,
- &ett_docsis_tlv_sflow_err,
- &ett_docsis_tlv_phs,
- &ett_docsis_tlv_phs_err,
- &ett_docsis_tlv_svc_unavail,
- &ett_docsis_tlv_snmpv3_kick,
- &ett_docsis_tlv_ds_ch_list,
- &ett_docsis_tlv_ds_ch_list_single,
- &ett_docsis_tlv_ds_ch_list_range,
- &ett_docsis_tlv_dut_filter,
- &ett_docsis_tlv_tcc,
- &ett_docsis_tlv_tcc_ucd,
- &ett_docsis_tlv_tcc_rng_parms,
- &ett_docsis_tlv_tcc_err,
- &ett_docsis_tlv_sid_cl,
- &ett_docsis_tlv_sid_cl_enc,
- &ett_docsis_tlv_sid_cl_enc_map,
- &ett_docsis_tlv_sid_cl_so,
- &ett_docsis_tlv_rcp,
- &ett_docsis_tlv_rcp_rcv_mod_enc,
- &ett_docsis_tlv_rcp_ch_bl_rng,
- &ett_docsis_tlv_rcp_rcv_ch,
- &ett_docsis_tlv_rcc,
- &ett_docsis_tlv_rcc_rcv_mod_enc,
- &ett_docsis_tlv_rcc_rcv_ch,
- &ett_docsis_tlv_rcc_err,
- &ett_docsis_tlv_dsid,
- &ett_docsis_tlv_dsid_ds_reseq,
- &ett_docsis_tlv_dsid_mc,
- &ett_docsis_tlv_dsid_mc_addr,
- &ett_docsis_tlv_sec_assoc,
- &ett_docsis_tlv_ch_asgn,
- &ett_docsis_cmts_mc_sess_enc,
- };
-
- static ei_register_info ei[] = {
- {&ei_docsis_tlv_tlvlen_bad, { "docsis_tlv.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
- };
-
- expert_module_t* expert_docsis_tlv;
-
- proto_docsis_tlv = proto_register_protocol ("DOCSIS Appendix C TLV's", "DOCSIS TLVs", "docsis_tlv");
-
- proto_register_field_array (proto_docsis_tlv, hf, array_length (hf));
- proto_register_subtree_array (ett, array_length (ett));
- expert_docsis_tlv = expert_register_protocol(proto_docsis_tlv);
- expert_register_field_array(expert_docsis_tlv, ei, array_length(ei));
-
- register_dissector ("docsis_tlv", dissect_tlv, proto_docsis_tlv);
-}
-
-void
-proto_reg_handoff_docsis_tlv (void)
-{
-#if 0
- dissector_handle_t docsis_tlv_handle;
-
- docsis_tlv_handle = find_dissector ("docsis_tlv");
- dissector_add_uint ("docsis", 0xFF, docsis_tlv_handle);
-#endif
-
- docsis_vsif_handle = find_dissector("docsis_vsif");
- docsis_ucd_handle = find_dissector("docsis_ucd");
-}
-
-/*
- * Editor modelines - http://www.wireshark.org/tools/modelines.html
- *
- * Local Variables:
- * c-basic-offset: 2
- * tab-width: 8
- * indent-tabs-mode: nil
- * End:
- *
- * ex: set shiftwidth=2 tabstop=8 expandtab:
- * :indentSize=2:tabSize=8:noTabs=true:
- */
diff --git a/plugins/epan/docsis/packet-tlv.h b/plugins/epan/docsis/packet-tlv.h
deleted file mode 100644
index e681a507b6..0000000000
--- a/plugins/epan/docsis/packet-tlv.h
+++ /dev/null
@@ -1,472 +0,0 @@
-/* packet-tlv.h
- * Contains Definitions for Configuration types
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.org>
- * Copyright 1998 Gerald Combs
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-
-/* Define Top Level TLV Types
- * Please see http://www.cablemodem.com/Specs/SP-RFIv1.1-I08-020301.pdf
- * Appendix C.
- */
-#ifndef __PACKET_TLV_H__
-#define __PACKET_TLV_H__
-#define TLV_DOWN_FREQ 1
-#define TLV_CHNL_ID 2
-#define TLV_NET_ACCESS 3
-#define TLV_COS 4
-#define TLV_MODEM_CAP 5
-#define TLV_CM_MIC 6
-#define TLV_CMTS_MIC 7
-#define TLV_VENDOR_ID 8
-#define TLV_SW_UPG_FILE 9
-#define TLV_SNMP_WRITE_CTRL 10
-#define TLV_SNMP_OBJECT 11
-#define TLV_MODEM_IP 12
-#define TLV_SVC_UNAVAIL 13
-#define TLV_ETHERNET_MAC 14
-#define TLV_TEL_SETTINGS 15
-#define TLV_BPI_CONFIG 17
-#define TLV_MAX_CPES 18
-#define TLV_TFTP_TIME 19
-#define TLV_TFTP_MODEM_ADDRESS 20
-#define TLV_SW_UPG_SRVR 21
-#define TLV_UPSTREAM_CLASSIFIER 22
-#define TLV_DOWN_CLASSIFIER 23
-#define TLV_UPSTREAM_SERVICE_FLOW 24
-#define TLV_DOWN_SERVICE_FLOW 25
-#define TLV_PHS 26
-#define TLV_HMAC_DIGEST 27
-#define TLV_MAX_CLASSIFIERS 28
-#define TLV_PRIVACY_ENABLE 29
-#define TLV_AUTH_BLOCK 30
-#define TLV_KEY_SEQ_NUM 31
-#define TLV_MFGR_CVC 32
-#define TLV_COSIGN_CVC 33
-#define TLV_SNMPV3_KICKSTART 34
-#define TLV_SUBS_MGMT_CTRL 35
-#define TLV_SUBS_MGMT_CPE 36
-#define TLV_SUBS_MGMT_FLTR 37
-#define TLV_SNMPV3_NTFY_RCVR 38
-#define TLV_ENABLE_20_MODE 39
-#define TLV_ENABLE_TEST_MODES 40
-#define TLV_DS_CH_LIST 41
-#define TLV_MC_MAC_ADDRESS 42
-#define TLV_VENDOR_SPEC 43 /* Vendor Specific is actually 44 ? */
-#define TLV_DUT_FILTER 45
-#define TLV_TCC 46
-#define TLV_SID_CL 47
-#define TLV_RCP 48
-#define TLV_RCC 49
-#define TLV_DSID 50
-#define TLV_SEC_ASSOC 51
-#define TLV_INIT_CH_TIMEOUT 52
-#define TLV_SNMPV1V2_COEX 53
-#define TLV_SNMPV3_ACC_VIEW 54
-#define TLV_SNMP_CPE_ACC_CTRL 55
-#define TLV_CH_ASGN 56
-#define TLV_CM_INIT_REASON 57
-#define TLV_SW_UPG_SRVR_IPV6 58
-#define TLV_TFTP_PROV_CM_IPV6_ADDR 59
-#define TLV_US_DROP_CLFY 60
-#define TLV_SUBS_MGMT_IPV6_LST 61
-#define TLV_US_DROP_CLFY_GROUP_ID 62
-#define TLV_SUBS_MGMT_CTRL_MAX_CPE_IPV6 63
-#define TLV_CMTS_MC_SESS_ENC 64
-#define TLV_L2VPN_MAC_AGING 65
-#define TLV_MGMT_EVENT_CTRL 66
-#define TLV_END 255
-
-/* Define DOCSIS 1.0 Class Of Service Configuration Types
- * These are subtypes of TLV_COS (4)
- */
-#define COS_CLASSID 1
-#define COS_MAX_DOWN 2
-#define COS_MAX_UP 3
-#define COS_UP_CH_PRIO 4
-#define COS_MIN_UP_RATE 5
-#define COS_MAX_UP_BURST 6
-#define COS_BP_ENABLE 7
-
-/* Define SNMPV3 KickStart subtypes
- * These are subtypes of TLV_SNMPV3_KICKSTART (34)
- */
-#define SNMPV3_SEC_NAME 1
-#define SNMPV3_MGR_PUB_NUM 2
-
-/* Define Modem Capabilities Subtypes
- * These are subtypes of TLV_MODEM_CAP (5)
- */
-#define CAP_CONCAT 1
-#define CAP_DOCSIS_VER 2
-#define CAP_FRAG 3
-#define CAP_PHS 4
-#define CAP_IGMP 5
-#define CAP_PRIVACY 6
-#define CAP_DOWN_SAID 7
-#define CAP_UP_SID 8
-#define CAP_OPT_FILT 9
-#define CAP_XMIT_EQPERSYM 10
-#define CAP_NUM_XMIT_EQ_TAPS 11
-#define CAP_DCC 12
-#define CAP_IP_FILTERS 13
-#define CAP_LLC_FILTERS 14
-#define CAP_EXP_UNICAST_SID 15
-#define CAP_RNG_HOFF 16
-#define CAP_L2VPN 17
-#define CAP_L2VPN_ESAFE 18
-#define CAP_DUT_FILTERING 19
-#define CAP_US_FREQ_RNG 20
-#define CAP_US_SRATE 21
-#define CAP_SAC 22
-#define CAP_CODE_HOP_M2 23
-#define CAP_MTC 24
-#define CAP_512_MSPS_UTC 25
-#define CAP_256_MSPS_UTC 26
-#define CAP_TOTAL_SID_CLUST 27
-#define CAP_SID_PER_SF 28
-#define CAP_MRC 29
-#define CAP_TOTAL_DSID 30
-#define CAP_RESEQ_DSID 31
-#define CAP_MC_DSID 32
-#define CAP_MC_DSID_FWD 33
-#define CAP_FCTYPE_FWD 34
-#define CAP_DPV 35
-#define CAP_UGS 36
-#define CAP_MAP_UCD 37
-#define CAP_UDC 38
-#define CAP_IPV6 39
-#define CAP_EXT_US_TRNS_PWR 40
-#define CAP_EM 44
-#define CAP_CM_STATUS_ACK 46
-
-/* Define Classifier subtypes
- * These are subtypes of either:
- * TLV_UPSTREAM_CLASSIFIER (22)
- * TLV_DOWN_CLASSIFIER (23)
- */
-#define CFR_REF 1
-#define CFR_ID 2
-#define CFR_SFLOW_REF 3
-#define CFR_SFLOW_ID 4
-#define CFR_RULE_PRI 5
-#define CFR_ACT_STATE 6
-#define CFR_DSA_ACTION 7
-#define CFR_ERROR 8
-#define CFR_IP_CLASSIFIER 9
-#define CFR_ETH_CLASSIFIER 10
-#define CFR_8021Q_CLASSIFIER 11
-#define CFR_IP6_CLASSIFIER 12
-#define CFR_VENDOR_SPEC 43
-
-/* Define Classifier Error sub-subtypes
- * These are subtypes of CFR_ERROR ([22/23].8)
- */
-#define CFR_ERR_PARAM 1
-#define CFR_ERR_CODE 2
-#define CFR_ERR_MSG 3
-
-/* Define IP Classifier sub-subtypes
- * These are subtypes of CFR_IP_CLASSIFIER ([22/23].9)
- */
-#define CFR_IP_TOS_RANGE_MASK 1
-#define CFR_IP_PROTO 2
-#define CFR_IP_SOURCE_ADDR 3
-#define CFR_IP_SOURCE_MASK 4
-#define CFR_IP_DEST_ADDR 5
-#define CFR_IP_DEST_MASK 6
-#define CFR_IP_SRCPORT_START 7
-#define CFR_IP_SRCPORT_END 8
-#define CFR_IP_DSTPORT_START 9
-#define CFR_IP_DSTPORT_END 10
-
-/* Define IPv6 Classifier sub-subtypes
- * These are subtypes of CFR_IP_CLASSIFIER ([22/23].12)
- */
-#define CFR_IP6_TRAFFIC_CLASS 1
-#define CFR_IP6_FLOW_LABEL 2
-#define CFR_IP6_NEXT_HEADER 3
-#define CFR_IP6_SOURCE_ADDR 4
-#define CFR_IP6_SOURCE_PREFIX_LENGTH 5
-#define CFR_IP6_DESTINATION_ADDR 6
-#define CFR_IP6_DESTINATION_PREFIX_LENGTH 7
-
-/* Define Ethertype Classifier sub-subtypes
- * These are subtypes of CFR_ETH_CLASSIFIER ([22/23].10)
- */
-#define CFR_ETH_DST_MAC 1
-#define CFR_ETH_SRC_MAC 2
-#define CFR_ETH_DSAP 3
-
-/* Define 802.1P/Q Classifier sub-subtypes
- * These are subtypes of CFR_8021Q_CLASSIFIER ([22/23].11)
- */
-#define CFR_D1Q_USER_PRI 1
-#define CFR_D1Q_VLAN_ID 2
-#define CFR_D1Q_VENDOR_SPEC 43
-
-/* Define Upstream/Downstream Service flow subtypes
- * These are subtypes of:
- * TLV_UPSTREAM_SERVICE_FLOW (24)
- * TLV_DOWN_SERVICE_FLOW (25)
- */
-#define SFW_REF 1
-#define SFW_ID 2
-#define SFW_SID 3
-#define SFW_SERVICE_CLASS_NAME 4
-#define SFW_ERRORS 5
-#define SFW_QOS_SET_TYPE 6
-#define SFW_TRAF_PRI 7
-#define SFW_MAX_SUSTAINED 8
-#define SFW_MAX_BURST 9
-#define SFW_MIN_RSVD_TRAF 10
-#define SFW_MIN_RSVD_PACKETSIZE 11
-#define SFW_ACTIVE_QOS_TIMEOUT 12
-#define SFW_ADMITT_QOS_TIMEOUT 13
-#define SFW_REQUIRED_ATTRIBUTE_MASK 31
-#define SFW_FORBIDDEN_ATTRIBUTE_MASK 32
-#define SFW_ATTRIBUTE_AGGREGATION_RULE_MASK 33
-#define SFW_VENDOR_SPEC 43
-/* The following types only apply to
- * TLV_UPSTREAM_SERVICE_FLOW (24)
- */
-#define SFW_MAX_CONCAT_BURST 14
-#define SFW_SCHEDULING_TYPE 15
-#define SFW_REQ_XMIT_POL 16
-#define SFW_NOM_POLL_INT 17
-#define SFW_POLL_JTTR_TOL 18
-#define SFW_UG_SIZE 19
-#define SFW_NOM_GRNT_INTV 20
-#define SFW_GRNT_JTTR_TOL 21
-#define SFW_GRNTS_PER_INTV 22
-#define SFW_IP_TOS_OVERWRITE 23
-#define SFW_UG_TIME_REF 24
-
-/* The following types only apply to
- * TLV_DOWN_SERVICE_FLOW (25)
- */
-#define SFW_MAX_DOWN_LAT 14
-
-/* Define Service Flow Error sub-subtypes
- * These are subtypes of
- * SFW_ERRORS ([24/25].5)
- */
-#define SFW_ERR_PARAM 1
-#define SFW_ERR_CODE 2
-#define SFW_ERR_MSG 3
-
-
-/* Define Payload Header Supression subtypes
- * These are subtypes of TLV_PHS (26)
- */
-#define PHS_CLSFR_REF 1
-#define PHS_CLSFR_ID 2
-#define PHS_SFLOW_REF 3
-#define PHS_SFLOW_ID 4
-#define PHS_DSC_ACTION 5
-#define PHS_ERRORS 6
-#define PHS_FIELD 7
-#define PHS_INDEX 8
-#define PHS_MASK 9
-#define PHS_SUP_SIZE 10
-#define PHS_VERIFICATION 11
-#define PHS_VENDOR_SPEC 43
-
-/* Define PHS Error sub-subtypes
- * These are subtypes of PHS_ERRORS (26.6)
- */
-#define PHS_ERR_PARAM 1
-#define PHS_ERR_CODE 2
-#define PHS_ERR_MSG 3
-
-
-/* Define DS Channel List sub-types
- * These are subtypes of TLV_DS_CHANNEL_LIST (41)
- */
-#define DS_CH_LIST_SINGLE 1
-#define DS_CH_LIST_RANGE 2
-#define DS_CH_LIST_DEFAULT_TIMEOUT 3
-
-/* Define Singe Downstream Channel sub-types
- * These are subtypes of DS_CH_LIST_SINGLE (41.1)
- */
-#define SINGLE_CH_TIMEOUT 1
-#define SINGLE_CH_FREQ 2
-
-/* Define Singe Downstream Channel sub-types
- * These are subtypes of DS_CH_LIST_RANGE (41.2)
- */
-#define FREQ_RNG_TIMEOUT 1
-#define FREQ_RNG_START 2
-#define FREQ_RNG_END 3
-#define FREQ_RNG_STEP 4
-
-/* Define DUT sub-types
- * These are subtypes of TLV_DUT_FILTER (45)
- */
-#define DUT_CONTROL 1
-#define DUT_CMIM 2
-
-/* Define TCC sub-types
- * These are subtypes of TLV_TCC (46)
- */
-#define TLV_TCC_REFID 1
-#define TLV_TCC_US_CH_ACTION 2
-#define TLV_TCC_US_CH_ID 3
-#define TLV_TCC_NEW_US_CH_ID 4
-#define TLV_TCC_UCD 5
-#define TLV_TCC_RNG_SID 6
-#define TLV_TCC_INIT_TECH 7
-#define TLV_TCC_RNG_PARMS 8
-#define TLV_TCC_DYN_RNG_WIN 9
-#define TLV_TCC_ERR 254
-
-/* Define TLV_TCC_RNG_PARMS sub-types
- * These are subtypes of TLV_TCC_RNG_PARMS (46.8)
- */
-#define RNG_PARMS_US_CH_ID 1
-#define RNG_PARMS_TIME_OFF_INT 2
-#define RNG_PARMS_TIME_OFF_FRAC 3
-#define RNG_PARMS_POWER_OFF 4
-#define RNG_PARMS_FREQ_OFF 5
-
-/* Define TLV_TCC_ERR sub-types
- * These are subtypes of TLV_TCC_ERR (46.254)
- */
-#define TCC_ERR_SUBTYPE 1
-#define TCC_ERR_CODE 2
-#define TCC_ERR_MSG 3
-
-/* Define TLV_SID_CLUSTER sub-types
- * These are subtypes of TLV_SID_CLUSTER (47)
- */
-#define SID_CL_SF_ID 1
-#define SID_CL_ENC 2
-#define SID_CL_SO_CRIT 3
-
-/* Define SID_CL_ENC sub-types
- * These are subtypes of SID_CL_ENC (47.2)
- */
-#define SID_CL_ENC_ID 1
-#define SID_CL_ENC_MAP 2
-
-/* Define SID_CL_ENC_MAP sub-types
- * These are subtypes of SID_CL_ENC_MAP (47.2.2)
- */
-#define SID_CL_MAP_US_CH_ID 1
-#define SID_CL_MAP_SID 2
-#define SID_CL_MAP_ACTION 3
-
-/* Define SID_CL_SO_CRIT sub-types
- * These are subtypes of SID_CL_SO_CRIT (47.3)
- */
-#define SID_CL_SO_MAX_REQ 1
-#define SID_CL_SO_MAX_OUT_BYTES 2
-#define SID_CL_SO_MAX_REQ_BYTES 3
-#define SID_CL_SO_MAX_TIME 4
-
-/* Define TLV_RCP sub-types
- * These are subtypes of TLV_RCP (48)
- */
-#define TLV_RCP_ID 1
-#define TLV_RCP_NAME 2
-#define TLV_RCP_FREQ_SPC 3
-#define TLV_RCP_RCV_MOD_ENC 4
-#define TLV_RCP_RCV_CH 5
-#define TLV_RCP_VEN_SPEC 43
-#define TLV_RCC_ERR 254
-
-/* Define TLV_RCP_RCV_MOD_ENC sub-types
- * These are subtypes of TLV_RCP_RCV_MOD_ENC (48.4)
- */
-#define RCV_MOD_ENC_IDX 1
-#define RCV_MOD_ENC_ADJ_CH 2
-#define RCV_MOD_ENC_CH_BL_RNG 3
-#define RCV_MOD_ENC_CTR_FREQ_ASGN 4
-#define RCV_MOD_ENC_RSQ_CH_SUBS_CAP 5
-#define RCV_MOD_ENC_CONN 6
-#define RCV_MOD_ENC_PHY_LAYR_PARMS 7
-
-/* Define RCV_MOD_ENC_CH_BL_RNG sub-types
- * These are subtypes of RCV_MOD_ENC_CH_BL_RNG (48.4.3)
- */
-#define CH_BL_RNG_MIN_CTR_FREQ 1
-#define CH_BL_RNG_MAX_CTR_FREQ 2
-
-/* Define TLV_RCP_RCV_CH sub-types
- * These are subtypes of TLV_RCP_RCV_CH (48.5)
- */
-#define RCV_CH_IDX 1
-#define RCV_CH_CONN 2
-#define RCV_CH_CONN_OFF 3
-#define RCV_CH_CTR_FREQ_ASGN 4
-#define RCV_CH_PRIM_DS_CH_IND 5
-
-/* Define TLV_RCC_ERR sub-types
- * These are subtypes of TLV_RCC_ERR (49.254)
- */
-#define RCC_ERR_MOD_OR_CH 1
-#define RCC_ERR_IDX 2
-#define RCC_ERR_PARAM 3
-#define RCC_ERR_CODE 4
-#define RCC_ERR_MSG 5
-
-
-/* Define TLV_DSID sub-types
- * These are subtypes of TLV_DSID (50)
- */
-#define TLV_DSID_ID 1
-#define TLV_DSID_ACTION 2
-#define TLV_DSID_DS_RESEQ 3
-#define TLV_DSID_MC 4
-
-/* Define TLV_DSID_DS_RESEQ sub-types
- * These are subtypes of TLV_DSID_DS_RESEQ (50.3)
- */
-#define DS_RESEQ_DSID 1
-#define DS_RESEQ_CH_LST 2
-#define DS_RESEQ_WAIT_TIME 3
-#define DS_RESEQ_WARN_THRESH 4
-#define DS_RESEQ_HO_TIMER 5
-
-/* Define TLV_DSID_MC sub-types
- * These are subtypes of TLV_DSID_DS_MC (50.4)
- */
-
-#define TLV_DSID_MC_ADDR 1
-#define TLV_DSID_MC_CMIM 2
-#define TLV_DSID_MC_GROUP 3
-#define TLV_DSID_MC_PHS 26
-
-/* Define TLV_DSID_MC_ADDR sub-types
- * These are subtypes of TLV_DSID_MC_ADDR (50.4.1)
- */
-#define MC_ADDR_ACTION 1
-#define MC_ADDR_ADDR 2
-
-/* Define TLV_SEC_ASSOC sub-types
- * These are subtypes of TLV_SEC_ASSOC (51)
- */
-#define TLV_SEC_ASSOC_ACTION 1
-#define TLV_SEC_ASSOC_DESC 2
-
-/* Define TLV_CH_ASGN sub-types
- * These are subtypes of TLV_CH_ASGN (56)
- */
-#define TLV_CH_ASGN_US_CH_ID 1
-#define TLV_CH_ASGN_RX_FREQ 2
-
-/* Define TLV_CMTS_MC_SESS_ENC sub-types
- * These are subtypes of TLV_CMTS_MC_SESS_ENC (64)
- */
-#define CMTS_MC_SESS_ENC_GRP 1
-#define CMTS_MC_SESS_ENC_SRC 2
-
-extern value_string_ext docsis_conf_code_ext;
-
-#endif
diff --git a/plugins/epan/docsis/packet-vendor.c b/plugins/epan/docsis/packet-vendor.c
deleted file mode 100644
index 2f5f46e73b..0000000000
--- a/plugins/epan/docsis/packet-vendor.c
+++ /dev/null
@@ -1,887 +0,0 @@
-/* packet-vendor.c
- * Routines for Vendor Specific Encodings dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.org>
- * Copyright 1998 Gerald Combs
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-
-/* Notes to Adding dissectors for Vendor specific TLV's:
- * 1. Create a dissect_<vendorname> function with the following prototype:
- * dissect_foovendor(tvbuff_t *tvb, proto_tree *tree, gint vsif_len)
- * 2. vsif_len will be the *entire* length of the vsif TLV (including the
- * Vendor Id TLV, which is 5 bytes long).
- * 3. Create a new 'case' statement in dissect_vsif, for your specific Vendor
- * id.
- * 4. In that 'case' statement you will make the following calls:
- * (assume for this example that your vendor id is 0x000054)
- * #define VENDOR_FOOVENDOR 0x00054
- * case VENDOR_FOOVENDOR:
- * proto_item_append_text (it, " (foo vendor)");
- * dissect_foovendor (tvb, vsif_tree, vsif_len);
- * break;
- * 5. Please see dissect_cisco for an example of how to do this.
- */
-
-#include "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-/* Define Vendor ID's here */
-#define VENDOR_CISCO 0x00000C
-#define VENDOR_GENERAL 0xFFFFFF
-
-void proto_register_docsis_vsif(void);
-void proto_reg_handoff_docsis_vsif(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_vsif = -1;
-static int hf_docsis_vsif_vendorid = -1;
-static int hf_docsis_vsif_vendor_unknown = -1;
-static int hf_docsis_vsif_cisco_numphones = -1;
-/* static int hf_docsis_vsif_cisco_ipprec = -1; */
-static int hf_docsis_vsif_cisco_ipprec_val = -1;
-static int hf_docsis_vsif_cisco_ipprec_bw = -1;
-static int hf_docsis_vsif_cisco_config_file = -1;
-
-static int hf_docsis_vsif_gex_loadbal_policy_id = -1;
-static int hf_docsis_vsif_gex_loadbal_priority = -1;
-static int hf_docsis_vsif_gex_loadbal_group_id = -1;
-static int hf_docsis_vsif_gex_ranging_class_id_extension = -1;
-static int hf_docsis_vsif_gex_l2vpn_encoding = -1;
-static int hf_docsis_vsif_gex_ecm = -1;
-static int hf_docsis_vsif_gex_sav = -1;
-static int hf_docsis_vsif_gex_cmam = -1;
-static int hf_docsis_vsif_gex_imja = -1;
-static int hf_docsis_vsif_gex_service_type_identifier = -1;
-
-static int hf_docsis_vsif_gex_ecm_extended_cmts_mic_hmac_type = -1;
-static int hf_docsis_vsif_gex_ecm_extended_cmts_mic_bitmap = -1;
-static int hf_docsis_vsif_gex_ecm_explicit_extended_cmts_mic_digest_subtype = -1;
-
-static int hf_docsis_vsif_gex_sav_group_name = -1;
-static int hf_docsis_vsif_gex_sav_static_prefix_rule = -1;
-
-static int hf_docsis_vsif_gex_sav_static_prefix_addressv4 = -1;
-static int hf_docsis_vsif_gex_sav_static_prefix_addressv6 = -1;
-static int hf_docsis_vsif_gex_sav_static_prefix_length = -1;
-
-static int hf_docsis_vsif_gex_cmam_cm_required_downstream_attribute_mask = -1;
-static int hf_docsis_vsif_gex_cmam_cm_forbidden_downstream_attribute_mask = -1;
-static int hf_docsis_vsif_gex_cmam_cm_required_upstream_attribute_mask = -1;
-static int hf_docsis_vsif_gex_cmam_cm_forbidden_upstream_attribute_mask = -1;
-
-static int hf_docsis_vsif_gex_imja_ip_multicast_profile_name = -1;
-static int hf_docsis_vsif_gex_imja_ssr = -1;
-static int hf_docsis_vsif_gex_imja_maximum_multicast_sessions = -1;
-
-static int hf_docsis_vsif_gex_imja_ssr_rule_priority = -1;
-static int hf_docsis_vsif_gex_imja_ssr_authorization_action = -1;
-static int hf_docsis_vsif_gex_imja_ssr_source_prefix_addressv4 = -1;
-static int hf_docsis_vsif_gex_imja_ssr_source_prefix_addressv6 = -1;
-static int hf_docsis_vsif_gex_imja_ssr_source_prefix_length = -1;
-static int hf_docsis_vsif_gex_imja_ssr_group_prefix_addressv4 = -1;
-static int hf_docsis_vsif_gex_imja_ssr_group_prefix_addressv6 = -1;
-static int hf_docsis_vsif_gex_imja_ssr_group_prefix_length = -1;
-
-static int hf_docsis_vsif_tlv_unknown = -1;
-
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_vsif = -1;
-static gint ett_docsis_vsif_ipprec = -1;
-static gint ett_docsis_vsif_gex_ecm = -1;
-static gint ett_docsis_vsif_gex_sav = -1;
-static gint ett_docsis_vsif_gex_sav_spr = -1;
-static gint ett_docsis_vsif_gex_cmam = -1;
-static gint ett_docsis_vsif_gex_imja = -1;
-static gint ett_docsis_vsif_gex_imja_ssr = -1;
-
-
-static expert_field ei_docsis_vsif_tlvlen_bad = EI_INIT;
-static expert_field ei_docsis_vsif_tlvtype_unknown = EI_INIT;
-
-static const value_string vendorid_vals[] = {
- {VENDOR_CISCO, "Cisco Systems, Inc."},
- {VENDOR_GENERAL, "General Extension Information"},
- {0, NULL},
-};
-
-static const value_string hmac_vals[] = {
- {1, "MD5 HMAC [RFC 2104]"},
- {2, "MMH16-sigma-n HMAC [DOCSIS SECv3.0]"},
- {43, "Vendor Specific"},
- {0, NULL},
-};
-
-static const value_string authorization_action_vals[] = {
- {0, "permit"},
- {1, "deny"},
- {0, NULL},
-};
-
-
-/* Dissector for Cisco Vendor Specific TLV's */
-
-#define NUM_PHONES 0x0a
-#define IOS_CONFIG_FILE 0x80
-#define IP_PREC 0x0b
-#define IP_PREC_VAL 0x01
-#define IP_PREC_BW 0x02
-
-static void dissect_general_extension_information (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree,
- gint vsif_len);
-
-
-static void
-dissect_cisco (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, gint vsif_len)
-{
- /* Start at pos = 5, since tvb includes the Vendor ID field */
- int pos = 5;
- guint8 type, length;
- proto_tree *ipprec_tree;
- proto_item *ipprec_item;
- int templen;
-
- while (pos < vsif_len)
- {
- /* Extract the type and length Fields from the TLV */
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case NUM_PHONES:
- proto_tree_add_item (tree, hf_docsis_vsif_cisco_numphones, tvb,
- pos, length, ENC_BIG_ENDIAN);
- break;
- case IP_PREC:
- ipprec_tree =
- proto_tree_add_subtree(tree, tvb, pos, length, ett_docsis_vsif_ipprec, &ipprec_item, "IP Precedence");
- /* Handle Sub-TLVs in IP Precedence */
- templen = pos + length;
- while (pos < templen)
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case IP_PREC_VAL:
- if (length == 1)
- {
- proto_tree_add_item (ipprec_tree,
- hf_docsis_vsif_cisco_ipprec_val, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipprec_item, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case IP_PREC_BW:
- if (length != 4)
- {
- proto_tree_add_item (ipprec_tree,
- hf_docsis_vsif_cisco_ipprec_bw, tvb,
- pos, length, ENC_BIG_ENDIAN);
- }
- else
- {
- expert_add_info_format(pinfo, ipprec_item, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- expert_add_info_format(pinfo, ipprec_item, &ei_docsis_vsif_tlvtype_unknown, "Unknown TLV: %u", type);
- }
- pos += length;
- }
- break;
- case IOS_CONFIG_FILE:
- proto_tree_add_item (tree, hf_docsis_vsif_cisco_config_file, tvb,
- pos, length, ENC_ASCII|ENC_NA);
- }
- pos += length;
- }
-}
-
-/* Dissection */
-static int
-dissect_vsif (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
- proto_item *it;
- proto_tree *vsif_tree;
- guint8 type;
- guint8 length;
- guint32 value;
- gint vsif_len;
-
- /* get the reported length of the VSIF TLV */
- vsif_len = tvb_reported_length_remaining (tvb, 0);
-
- it = proto_tree_add_protocol_format (tree, proto_docsis_vsif, tvb, 0, -1,
- "VSIF Encodings");
- vsif_tree = proto_item_add_subtree (it, ett_docsis_vsif);
- proto_tree_add_item_ret_uint(vsif_tree, hf_docsis_vsif_vendorid, tvb, 2, 3, ENC_BIG_ENDIAN, &value);
-
- /* The first TLV in the VSIF encodings must be type 0x08 (Vendor ID) and
- * length 3.
- */
- type = tvb_get_guint8 (tvb, 0);
- if (type != 0x08)
- expert_add_info_format(pinfo, it, &ei_docsis_vsif_tlvtype_unknown, "Unknown TLV: %u", type);
-
- length = tvb_get_guint8 (tvb, 1);
- if (length != 3)
- expert_add_info_format(pinfo, it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
-
- /* switch on the Vendor ID */
- switch (value)
- {
- case VENDOR_CISCO:
- proto_item_append_text (it, " (Cisco)");
- dissect_cisco (tvb, pinfo, vsif_tree, vsif_len);
- break;
- case VENDOR_GENERAL:
- proto_item_append_text (it, " (General Extension Information)");
- dissect_general_extension_information (tvb, pinfo, vsif_tree, vsif_len);
- break;
- default:
- proto_item_append_text (it, " (Unknown)");
- proto_tree_add_item (vsif_tree, hf_docsis_vsif_vendor_unknown, tvb,
- 0, -1, ENC_NA);
- break;
- }
-
- return tvb_captured_length(tvb);
-}
-
-
-#define GEX_ECM_EXTENDED_CMTS_MIC_HMAC_TYPE 1
-#define GEX_ECM_EXTENDED_CMTS_MIC_BITMAP 2
-#define GEX_ECM_EXPLICIT_EXTENDED_CMTS_MIC_DIGEST_SUBTYPE 3
-
-static void
-dissect_extended_cmts_mic(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len)
-{
- proto_item *ecm_it;
- proto_tree *ecm_tree;
- guint8 type, length;
- int pos = start;
-
- ecm_it = proto_tree_add_item (tree, hf_docsis_vsif_gex_ecm, tvb, start, len, ENC_NA);
- ecm_tree = proto_item_add_subtree(ecm_it, ett_docsis_vsif_gex_ecm);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case GEX_ECM_EXTENDED_CMTS_MIC_HMAC_TYPE:
- proto_tree_add_item (ecm_tree, hf_docsis_vsif_gex_ecm_extended_cmts_mic_hmac_type, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- case GEX_ECM_EXTENDED_CMTS_MIC_BITMAP:
- proto_tree_add_item (ecm_tree, hf_docsis_vsif_gex_ecm_extended_cmts_mic_bitmap, tvb, pos, length, ENC_NA);
- break;
- case GEX_ECM_EXPLICIT_EXTENDED_CMTS_MIC_DIGEST_SUBTYPE:
- proto_tree_add_item (ecm_tree, hf_docsis_vsif_gex_ecm_explicit_extended_cmts_mic_digest_subtype, tvb, pos, length, ENC_NA);
- break;
- default:
- proto_tree_add_item (ecm_tree, hf_docsis_vsif_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos += length;
- } /* while */
-}
-
-#define GEX_SAV_STATIC_PREFIX_ADDRESS 1
-#define GEX_SAV_STATIC_PREFIX_LENGTH 2
-
-static void
-dissect_sav_static_prefix_rule(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree, int start, guint16 len)
-{
- proto_item *sav_spr_it;
- proto_tree *sav_spr_tree;
- guint8 type, length;
- int pos = start;
-
- sav_spr_it = proto_tree_add_item (tree, hf_docsis_vsif_gex_sav_static_prefix_rule, tvb, start, len, ENC_NA);
- sav_spr_tree = proto_item_add_subtree(sav_spr_it, ett_docsis_vsif_gex_sav_spr);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case GEX_SAV_STATIC_PREFIX_ADDRESS:
- if (length == 4) {
- proto_tree_add_item (sav_spr_tree, hf_docsis_vsif_gex_sav_static_prefix_addressv4, tvb, pos, length, ENC_BIG_ENDIAN);
- } else if (length == 6) {
- proto_tree_add_item (sav_spr_tree, hf_docsis_vsif_gex_sav_static_prefix_addressv6, tvb, pos, length, ENC_NA);
- } else {
- expert_add_info_format(pinfo, sav_spr_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case GEX_SAV_STATIC_PREFIX_LENGTH:
- if (length == 1) {
- proto_tree_add_item (sav_spr_tree, hf_docsis_vsif_gex_sav_static_prefix_length, tvb, pos, length, ENC_BIG_ENDIAN);
- } else {
- expert_add_info_format(pinfo, sav_spr_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- default:
- proto_tree_add_item (sav_spr_tree, hf_docsis_vsif_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos += length;
- } /* while */
-}
-
-
-
-#define GEX_SAV_GROUP_NAME 1
-#define GEX_SAV_STATIC_PREFIX_RULE 2
-
-
-static void
-dissect_sav(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree, int start, guint16 len)
-{
- proto_item *sav_it;
- proto_tree *sav_tree;
- guint8 type, length;
- int pos = start;
-
- sav_it = proto_tree_add_item (tree, hf_docsis_vsif_gex_sav, tvb, start, len, ENC_NA);
- sav_tree = proto_item_add_subtree(sav_it, ett_docsis_vsif_gex_sav);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case GEX_SAV_GROUP_NAME:
- proto_tree_add_item (sav_tree, hf_docsis_vsif_gex_sav_group_name, tvb, pos, length, ENC_ASCII|ENC_NA);
- break;
- case GEX_SAV_STATIC_PREFIX_RULE:
- dissect_sav_static_prefix_rule(tvb, pinfo, sav_tree, pos, length);
- break;
- default:
- proto_tree_add_item (sav_tree, hf_docsis_vsif_tlv_unknown, tvb, pos, length, ENC_NA);
- break;
- } /* switch */
- pos += length;
- } /* while */
-}
-
-
-#define GEX_CM_REQUIRED_DOWNSTREAM_ATTRIBUTE_MASK 1
-#define GEX_CM_FORBIDDEN_DOWNSTREAM_ATTRIBUTE_MASK 2
-#define GEX_CM_REQUIRED_UPSTREAM_ATTRIBUTE_MASK 3
-#define GEX_CM_FORBIDDEN_UPSTREAM_ATTRIBUTE_MASK 4
-
-static void
-dissect_cable_modem_attribute_masks(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree, int start, guint16 len)
-{
- proto_item *cmam_it;
- proto_tree *cmam_tree;
- guint8 type, length;
- int pos = start;
-
- cmam_it = proto_tree_add_item (tree, hf_docsis_vsif_gex_cmam, tvb, start, len, ENC_NA);
- cmam_tree = proto_item_add_subtree(cmam_it, ett_docsis_vsif_gex_cmam);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case GEX_CM_REQUIRED_DOWNSTREAM_ATTRIBUTE_MASK:
- if (length != 4) {
- expert_add_info_format(pinfo, cmam_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- proto_tree_add_item (cmam_tree, hf_docsis_vsif_gex_cmam_cm_required_downstream_attribute_mask, tvb, pos, length, ENC_NA);
- break;
- case GEX_CM_FORBIDDEN_DOWNSTREAM_ATTRIBUTE_MASK:
- if (length != 4) {
- expert_add_info_format(pinfo, cmam_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- proto_tree_add_item (cmam_tree, hf_docsis_vsif_gex_cmam_cm_forbidden_downstream_attribute_mask, tvb, pos, length, ENC_NA);
- break;
- case GEX_CM_REQUIRED_UPSTREAM_ATTRIBUTE_MASK:
- if (length != 4) {
- expert_add_info_format(pinfo, cmam_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- proto_tree_add_item (cmam_tree, hf_docsis_vsif_gex_cmam_cm_required_upstream_attribute_mask, tvb, pos, length, ENC_NA);
- break;
- case GEX_CM_FORBIDDEN_UPSTREAM_ATTRIBUTE_MASK:
- if (length != 4) {
- expert_add_info_format(pinfo, cmam_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- proto_tree_add_item (cmam_tree, hf_docsis_vsif_gex_cmam_cm_forbidden_upstream_attribute_mask, tvb, pos, length, ENC_NA);
- break;
- default: proto_tree_add_item (cmam_tree, hf_docsis_vsif_tlv_unknown, tvb, pos, length, ENC_NA);
- } /* switch */
- pos += length;
- } /* while */
-}
-
-
-#define GEX_IMJA_SSR_RULE_PRIORITY 1
-#define GEX_IMJA_SSR_AUTHORIZATION_ACTION 2
-#define GEX_IMJA_SSR_AUTHORIZATION_SOURCE_PREFIX_ADDRESS 3
-#define GEX_IMJA_SSR_AUTHORIZATION_SOURCE_PREFIX_LENGTH 4
-#define GEX_IMJA_SSR_AUTHORIZATION_GROUP_PREFIX_ADDRESS 5
-#define GEX_IMJA_SSR_AUTHORIZATION_GROUP_PREFIX_LENGTH 6
-
-
-static void
-dissect_ip_multicast_join_authorization_static_session_rule(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree, int start, guint16 len)
-{
- proto_item *imja_ssr_it;
- proto_tree *imja_ssr_tree;
- guint8 type, length;
- int pos = start;
-
- imja_ssr_it = proto_tree_add_item (tree, hf_docsis_vsif_gex_imja_ssr, tvb, start, len, ENC_NA);
- imja_ssr_tree = proto_item_add_subtree(imja_ssr_it, ett_docsis_vsif_gex_imja_ssr);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case GEX_IMJA_SSR_RULE_PRIORITY:
- if (length != 1) {
- expert_add_info_format(pinfo, imja_ssr_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- proto_tree_add_item (imja_ssr_tree, hf_docsis_vsif_gex_imja_ssr_rule_priority, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- case GEX_IMJA_SSR_AUTHORIZATION_ACTION:
- if (length != 1) {
- expert_add_info_format(pinfo, imja_ssr_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- proto_tree_add_item (imja_ssr_tree, hf_docsis_vsif_gex_imja_ssr_authorization_action, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- case GEX_IMJA_SSR_AUTHORIZATION_SOURCE_PREFIX_ADDRESS:
- if (length == 4) {
- proto_tree_add_item (imja_ssr_tree, hf_docsis_vsif_gex_imja_ssr_source_prefix_addressv4, tvb, pos, length, ENC_BIG_ENDIAN);
- } else if (length == 6) {
- proto_tree_add_item (imja_ssr_tree, hf_docsis_vsif_gex_imja_ssr_source_prefix_addressv6, tvb, pos, length, ENC_NA);
- } else {
- expert_add_info_format(pinfo, imja_ssr_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case GEX_IMJA_SSR_AUTHORIZATION_SOURCE_PREFIX_LENGTH:
- if (length != 1) {
- expert_add_info_format(pinfo, imja_ssr_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- proto_tree_add_item (imja_ssr_tree, hf_docsis_vsif_gex_imja_ssr_source_prefix_length, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- case GEX_IMJA_SSR_AUTHORIZATION_GROUP_PREFIX_ADDRESS:
- if (length == 4) {
- proto_tree_add_item (imja_ssr_tree, hf_docsis_vsif_gex_imja_ssr_group_prefix_addressv4, tvb, pos, length, ENC_BIG_ENDIAN);
- } else if (length == 6) {
- proto_tree_add_item (imja_ssr_tree, hf_docsis_vsif_gex_imja_ssr_group_prefix_addressv6, tvb, pos, length, ENC_NA);
- } else {
- expert_add_info_format(pinfo, imja_ssr_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- break;
- case GEX_IMJA_SSR_AUTHORIZATION_GROUP_PREFIX_LENGTH:
- if (length != 1) {
- expert_add_info_format(pinfo, imja_ssr_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- proto_tree_add_item (imja_ssr_tree, hf_docsis_vsif_gex_imja_ssr_group_prefix_length, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- default: proto_tree_add_item (imja_ssr_tree, hf_docsis_vsif_tlv_unknown, tvb, pos, length, ENC_NA);
- } /* switch */
- pos += length;
- } /* while */
-}
-
-#define GEX_IMJA_IP_MULTICAST_PROFILE_NAME 1
-#define GEX_IMJA_IP_MULTICAST_PROFILE_JOIN_AUTHORIZATION_STATIC_SESSION_RULE 2
-#define GEX_IMJA_MAXIMUM_MULTICAST_SESSIONS 3
-
-
-static void
-dissect_ip_multicast_join_authorization(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree, int start, guint16 len)
-{
- proto_item *imja_it;
- proto_tree *imja_tree;
- guint8 type, length;
- int pos = start;
-
- imja_it = proto_tree_add_item (tree, hf_docsis_vsif_gex_imja, tvb, start, len, ENC_NA);
- imja_tree = proto_item_add_subtree(imja_it, ett_docsis_vsif_gex_imja);
-
- while (pos < (start + len))
- {
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case GEX_IMJA_IP_MULTICAST_PROFILE_NAME:
- if ((length < 1) || (length > 15)) {
- expert_add_info_format(pinfo, imja_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- proto_tree_add_item (imja_tree, hf_docsis_vsif_gex_imja_ip_multicast_profile_name, tvb, pos, length, ENC_ASCII|ENC_NA);
- break;
- case GEX_IMJA_IP_MULTICAST_PROFILE_JOIN_AUTHORIZATION_STATIC_SESSION_RULE:
- dissect_ip_multicast_join_authorization_static_session_rule(tvb, pinfo, imja_tree, pos, length);
- break;
- case GEX_IMJA_MAXIMUM_MULTICAST_SESSIONS:
- if (length != 2) {
- expert_add_info_format(pinfo, imja_it, &ei_docsis_vsif_tlvlen_bad, "Wrong TLV length: %u", length);
- }
- proto_tree_add_item (imja_tree, hf_docsis_vsif_gex_imja_maximum_multicast_sessions, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- default: proto_tree_add_item (imja_tree, hf_docsis_vsif_tlv_unknown, tvb, pos, length, ENC_NA);
- } /* switch */
- pos += length;
- } /* while */
-}
-
-
-
-/* Dissector for General Extension TLV's */
-
-#define GEX_CM_LOAD_BALANCING_POLICY_ID 1
-#define GEX_CM_LOAD_BALANCING_PRIORITY 2
-#define GEX_CM_LOAD_BALANCING_GROUP_ID 3
-#define GEX_CM_RANGING_CLASS_ID_EXTENSION 4
-#define GEX_L2VPN_ENCODING 5
-#define GEX_EXTENDED_CMTS_MIC_CONFIGURATION_SETTING 6
-#define GEX_EXTENDED_SAV 7
-#define GEX_CABLE_MODEM_ATTRIBUTE_MASKS 9
-#define GEX_IP_MULTICAST_JOIN_AUTHORIZATION 10
-#define GEX_SERVICE_TYPE_IDENTIFIER 11
-
-
-
-static void
-dissect_general_extension_information (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, gint vsif_len)
-{
- /* Start at pos = 5, since tvb includes the Vendor ID field */
- int pos = 5;
- guint8 type, length;
-
- while (pos < vsif_len)
- {
- /* Extract the type and length Fields from the TLV */
- type = tvb_get_guint8 (tvb, pos++);
- length = tvb_get_guint8 (tvb, pos++);
- switch (type)
- {
- case GEX_CM_LOAD_BALANCING_POLICY_ID:
- proto_tree_add_item (tree, hf_docsis_vsif_gex_loadbal_policy_id, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- case GEX_CM_LOAD_BALANCING_PRIORITY:
- proto_tree_add_item (tree, hf_docsis_vsif_gex_loadbal_priority, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- case GEX_CM_LOAD_BALANCING_GROUP_ID:
- proto_tree_add_item (tree, hf_docsis_vsif_gex_loadbal_group_id, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- case GEX_CM_RANGING_CLASS_ID_EXTENSION:
- proto_tree_add_item (tree, hf_docsis_vsif_gex_ranging_class_id_extension, tvb, pos, length, ENC_BIG_ENDIAN);
- break;
- case GEX_L2VPN_ENCODING:
- proto_tree_add_item (tree, hf_docsis_vsif_gex_l2vpn_encoding, tvb, pos, length, ENC_NA);
- break;
- case GEX_EXTENDED_CMTS_MIC_CONFIGURATION_SETTING:
- dissect_extended_cmts_mic(tvb, tree, pos, length);
- break;
- case GEX_EXTENDED_SAV:
- dissect_sav(tvb, pinfo, tree, pos, length);
- break;
- case GEX_CABLE_MODEM_ATTRIBUTE_MASKS:
- dissect_cable_modem_attribute_masks(tvb, pinfo, tree, pos, length);
- break;
- case GEX_IP_MULTICAST_JOIN_AUTHORIZATION:
- dissect_ip_multicast_join_authorization(tvb, pinfo, tree, pos, length);
- break;
- case GEX_SERVICE_TYPE_IDENTIFIER:
- proto_tree_add_item (tree, hf_docsis_vsif_gex_service_type_identifier, tvb, pos, length, ENC_ASCII|ENC_NA);
- break;
- default:
- proto_tree_add_item (tree, hf_docsis_vsif_tlv_unknown, tvb, pos, length, ENC_NA);
- }
- pos += length;
- }
-}
-
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_vsif (void)
-{
- static hf_register_info hf[] = {
- {&hf_docsis_vsif_vendorid,
- {"Vendor Id", "docsis_vsif.vendorid",
- FT_UINT24, BASE_HEX, VALS(vendorid_vals), 0x0,
- "Vendor Identifier", HFILL}
- },
- {&hf_docsis_vsif_vendor_unknown,
- {"VSIF Encodings", "docsis_vsif.unknown",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "Unknown Vendor", HFILL}
- },
- {&hf_docsis_vsif_cisco_numphones,
- {"Number of phone lines", "docsis_vsif.cisco.numphones",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
-#if 0
- {&hf_docsis_vsif_cisco_ipprec,
- {"IP Precedence Encodings", "docsis_vsif.cisco.ipprec",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
-#endif
- {&hf_docsis_vsif_cisco_ipprec_val,
- {"IP Precedence Value", "docsis_vsif.cisco.ipprec.value",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_vsif_cisco_ipprec_bw,
- {"IP Precedence Bandwidth", "docsis_vsif.cisco.ipprec.bw",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_vsif_cisco_config_file,
- {"IOS Config File", "docsis_vsif.cisco.iosfile",
- FT_STRING, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- {&hf_docsis_vsif_gex_loadbal_policy_id,
- {".1 CM Load Balancing Policy ID", "docsis_vsif.gex.loadbal_policyid",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "General Extension Information - CM Load Balancing Policy ID", HFILL}
- },
- {&hf_docsis_vsif_gex_loadbal_priority,
- {".2 CM Load Balancing Priority", "docsis_vsif.gex.loadbal_priority",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "General Extension Information - CM Load Balancing Priority", HFILL}
- },
- {&hf_docsis_vsif_gex_loadbal_group_id,
- {".3 CM Load Balancing Group ID", "docsis_vsif.gex.loadbal_group_id",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "General Extension Information - CM Load Balancing Group ID", HFILL}
- },
- {&hf_docsis_vsif_gex_ranging_class_id_extension,
- {".4 CM Ranging Class ID Extension", "docsis_vsif.gex.ranging_class_id_extension",
- FT_UINT32, BASE_DEC, NULL, 0x0,
- "General Extension Information - CM Ranging Class ID Extension", HFILL}
- },
- {&hf_docsis_vsif_gex_l2vpn_encoding,
- {".5 L2VPN Encoding", "docsis_vsif.gex.l2vpn_encoding",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - L2VPN Encoding", HFILL}
- },
- {&hf_docsis_vsif_gex_ecm,
- {".6 Extended CMTS MIC Configuration Setting", "docsis_vsif.gex.extended_cmts_mic_configuration_setting",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - Extended CMTS MIC Configuration Setting", HFILL}
- },
- {&hf_docsis_vsif_gex_ecm_extended_cmts_mic_hmac_type,
- {"..1 Extended CMTS MIC Hmac type", "docsis_vsif.gex.extended_cmts_mic_hmac_type",
- FT_UINT8, BASE_DEC, VALS(hmac_vals), 0x0,
- "General Extension Information - Extended CMTS MIC Hmac type", HFILL}
- },
- {&hf_docsis_vsif_gex_ecm_extended_cmts_mic_bitmap,
- {"..2 Extended CMTS MIC Bitmap", "docsis_vsif.gex.extended_cmts_mic_bitmap",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - Extended CMTS MIC Bitmap", HFILL}
- },
- {&hf_docsis_vsif_gex_ecm_explicit_extended_cmts_mic_digest_subtype,
- {"..3 Explicit Extended CMTS MIC Digest Subtype", "docsis_vsif.gex.extended_cmts_mic_digest_subtype",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - Explicit Extended CMTS MIC Digest Subtype", HFILL}
- },
- {&hf_docsis_vsif_gex_sav,
- {".7 Source Address Verification (SAV) Authorization Encoding", "docsis_vsif.gex.sav",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - Source Address Verification (SAV) Authorization Encoding", HFILL}
- },
- {&hf_docsis_vsif_gex_sav_group_name,
- {"..1 SAV Group Name", "docsis_vsif.gex.sav.sav_group_name",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "General Extension Information - SAV - SAV Group Name", HFILL}
- },
- {&hf_docsis_vsif_gex_sav_static_prefix_rule,
- {"..2 SAV Static Prefix Rule", "docsis_vsif.gex.sav.static_prefix_rule",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - SAV -Static Prefix Rule", HFILL}
- },
- {&hf_docsis_vsif_gex_sav_static_prefix_addressv4,
- {"...1 SAV Static Prefix Address", "docsis_vsif.gex.sav.spr.static_prefix_address4",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "General Extension Information - SAV -Static Prefix Rule - Static Prefix Address", HFILL}
- },
- {&hf_docsis_vsif_gex_sav_static_prefix_addressv6,
- {"...1 SAV Static Prefix Address", "docsis_vsif.gex.sav.spr.static_prefix_address6",
- FT_IPv6, BASE_NONE, NULL, 0x0,
- "General Extension Information - SAV -Static Prefix Rule - Static Prefix Address", HFILL}
- },
- {&hf_docsis_vsif_gex_sav_static_prefix_length,
- {"...2 SAV Static Prefix Length", "docsis_vsif.gex.sav.spr.static_prefix_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "General Extension Information - SAV -Static Prefix Rule - Static Prefix Length", HFILL}
- },
- {&hf_docsis_vsif_gex_cmam,
- {".9 CM Attribute Mask", "docsis_vsif.gex.cmam",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - CM Attribute Mask", HFILL}
- },
- {&hf_docsis_vsif_gex_cmam_cm_required_downstream_attribute_mask,
- {"..1 CM Required Downstream Attribute", "docsis_vsif.gex.cmam.cm_required_downstream_attribute",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - CM Attribute Mask - CM Required Downstream Attribute", HFILL}
- },
- {&hf_docsis_vsif_gex_cmam_cm_forbidden_downstream_attribute_mask,
- {"..2 CM Forbidden Downstream Attribute", "docsis_vsif.gex.cmam.cm_forbidden_downstream_attribute",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - CM Attribute Mask - CM Forbidden Downstream Attribute", HFILL}
- },
- {&hf_docsis_vsif_gex_cmam_cm_required_upstream_attribute_mask,
- {"..3 CM Required Upstream Attribute", "docsis_vsif.gex.cmam.cm_required_upstream_attribute",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - CM Attribute Mask - CM Required Upstream Attribute", HFILL}
- },
- {&hf_docsis_vsif_gex_cmam_cm_forbidden_upstream_attribute_mask,
- {"..4 CM Forbidden Upstream Attribute", "docsis_vsif.gex.cmam.cm_forbidden_upstream_attribute",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - CM Attribute Mask - CM Forbidden Upstream Attribute", HFILL}
- },
- {&hf_docsis_vsif_gex_imja,
- {".10 IP Multicast Join Authorization", "docsis_vsif.gex.imja",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_ip_multicast_profile_name,
- {"..1 IP Multicast Profile Name", "docsis_vsif.gex.imja.ip_multicast_profile_name",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization - IP Multicast Profile Name", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_ssr,
- {"..2 IP Multicast Profile Join Authorization Static Session Rule", "docsis_vsif.gex.imja.ip_multicast_join_authorization_static_session_rule",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization - IP Multicast Profile Join Authorization Static Session Rule", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_ssr_rule_priority,
- {"...1 Rule Priority", "docsis_vsif.gex.imja.imja_ssr_rule_priority",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization - IP Multicast Profile Join Authorization Static Session Rule - Rule Priority", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_ssr_authorization_action,
- {"...2 Authorization Action", "docsis_vsif.gex.imja.imja_ssr_authorization_action",
- FT_UINT8, BASE_DEC, VALS(authorization_action_vals), 0x0,
- "General Extension Information - IP Multicast Join Authorization - IP Multicast Profile Join Authorization Static Session Rule - Rule Priority", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_ssr_source_prefix_addressv4,
- {"...3 Source Prefix Address", "docsis_vsif.gex.imja.imja_ssr_source_prefix_address4",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization - IP Multicast Profile Join Authorization Static Session Rule - Source Prefix Address", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_ssr_source_prefix_addressv6,
- {"...3 Source Prefix Address", "docsis_vsif.gex.imja.imja_ssr_source_prefix_address6",
- FT_IPv6, BASE_NONE, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization - IP Multicast Profile Join Authorization Static Session Rule - Source Prefix Address", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_ssr_source_prefix_length,
- {"...4 Source Prefix Length", "docsis_vsif.gex.imja.imja_ssr_source_prefix_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization - IP Multicast Profile Join Authorization Static Session Rule - Source Prefix Length", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_ssr_group_prefix_addressv4,
- {"...5 Group Prefix Address", "docsis_vsif.gex.imja.imja_ssr_group_prefix_address4",
- FT_IPv4, BASE_NONE, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization - IP Multicast Profile Join Authorization Static Session Rule - Group Prefix Address", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_ssr_group_prefix_addressv6,
- {"...5 Group Prefix Address", "docsis_vsif.gex.imja.imja_ssr_group_prefix_address6",
- FT_IPv6, BASE_NONE, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization - IP Multicast Profile Join Authorization Static Session Rule - Group Prefix Address", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_ssr_group_prefix_length,
- {"...6 Group Prefix Length", "docsis_vsif.gex.imja.imja_ssr_group_prefix_length",
- FT_UINT8, BASE_DEC, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization - IP Multicast Profile Join Authorization Static Session Rule - Group Prefix Length", HFILL}
- },
- {&hf_docsis_vsif_gex_imja_maximum_multicast_sessions,
- {"..3 Maximum Multicast Sessions", "docsis_vsif.gex.imja.imja_maximum_multicast_sessions",
- FT_UINT16, BASE_DEC, NULL, 0x0,
- "General Extension Information - IP Multicast Join Authorization - Maximum Multicast Sessions", HFILL}
- },
- {&hf_docsis_vsif_gex_service_type_identifier,
- {".11 Service Type Identifier", "docsis_vsif.gex.service_type_identifier",
- FT_STRING, BASE_NONE, NULL, 0x0,
- "General Extension Information - Service Type Identifier", HFILL}
- },
- {&hf_docsis_vsif_tlv_unknown,
- {"Unknown VSIF TLV", "docsis_vsif.unknown",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- NULL, HFILL}
- },
- };
-
- static gint *ett[] = {
- &ett_docsis_vsif,
- &ett_docsis_vsif_ipprec,
- &ett_docsis_vsif_gex_ecm,
- &ett_docsis_vsif_gex_sav,
- &ett_docsis_vsif_gex_sav_spr,
- &ett_docsis_vsif_gex_cmam,
- &ett_docsis_vsif_gex_imja,
- &ett_docsis_vsif_gex_imja_ssr
- };
-
- expert_module_t* expert_docsis_vsif;
-
- static ei_register_info ei[] = {
- {&ei_docsis_vsif_tlvlen_bad, { "docsis_vsif.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
- {&ei_docsis_vsif_tlvtype_unknown, { "docsis_vsif.tlvtypeunknown", PI_PROTOCOL, PI_WARN, "Unknown TLV type", EXPFILL}},
- };
-
- proto_docsis_vsif =
- proto_register_protocol ("DOCSIS Vendor Specific Encodings",
- "DOCSIS VSIF", "docsis_vsif");
-
- proto_register_field_array (proto_docsis_vsif, hf, array_length (hf));
- proto_register_subtree_array (ett, array_length (ett));
- expert_docsis_vsif = expert_register_protocol(proto_docsis_vsif);
- expert_register_field_array(expert_docsis_vsif, ei, array_length(ei));
-
- register_dissector ("docsis_vsif", dissect_vsif, proto_docsis_vsif);
-}
-
-void
-proto_reg_handoff_docsis_vsif (void)
-{
-#if 0
- dissector_handle_t docsis_vsif_handle;
-
- docsis_vsif_handle = find_dissector ("docsis_vsif");
- dissector_add_uint ("docsis", 0xFD, docsis_vsif_handle);
-#endif
-}
-
-/*
- * Editor modelines - http://www.wireshark.org/tools/modelines.html
- *
- * Local Variables:
- * c-basic-offset: 2
- * tab-width: 8
- * indent-tabs-mode: nil
- * End:
- *
- * ex: set shiftwidth=2 tabstop=8 expandtab:
- * :indentSize=2:tabSize=8:noTabs=true:
- */