diff options
author | Guy Harris <guy@alum.mit.edu> | 2018-02-13 11:47:23 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2018-02-13 20:15:19 +0000 |
commit | feb8f6b14d7e342db369656ab44c38546b0140bb (patch) | |
tree | be9e003bb3c220f47cbfa8968c61562823ed44a5 /plugins/epan/docsis | |
parent | 048c4373e15a401a8700bc57b403282c7830d27e (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/epan/docsis')
-rw-r--r-- | plugins/epan/docsis/AUTHORS | 3 | ||||
-rw-r--r-- | plugins/epan/docsis/CMakeLists.txt | 85 | ||||
-rw-r--r-- | plugins/epan/docsis/ChangeLog | 15 | ||||
-rw-r--r-- | plugins/epan/docsis/Makefile.am | 71 | ||||
-rw-r--r-- | plugins/epan/docsis/README | 52 | ||||
-rw-r--r-- | plugins/epan/docsis/packet-docsis.c | 1177 | ||||
-rw-r--r-- | plugins/epan/docsis/packet-macmgmt.c | 8607 | ||||
-rw-r--r-- | plugins/epan/docsis/packet-tlv.c | 6518 | ||||
-rw-r--r-- | plugins/epan/docsis/packet-tlv.h | 472 | ||||
-rw-r--r-- | plugins/epan/docsis/packet-vendor.c | 887 |
10 files changed, 0 insertions, 17887 deletions
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, ðclsfr_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: - */ |