DOCSIS: Simplify all MAC Management into a single file.
authorMichael Mann <mmann78@netscape.net>
Wed, 10 May 2017 11:25:15 +0000 (07:25 -0400)
committerMichael Mann <mmann78@netscape.net>
Fri, 12 May 2017 18:39:46 +0000 (18:39 +0000)
Removes a bunch of duplication set up because commands were all in
different files.

Change-Id: I950bc70da0edcdef7aaf21a43328cf69267f79af
Reviewed-on: https://code.wireshark.org/review/21613
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
49 files changed:
plugins/docsis/CMakeLists.txt
plugins/docsis/Makefile.am
plugins/docsis/packet-bintrngreq.c [deleted file]
plugins/docsis/packet-bpkmattr.c [deleted file]
plugins/docsis/packet-bpkmreq.c [deleted file]
plugins/docsis/packet-bpkmrsp.c [deleted file]
plugins/docsis/packet-cmctrlreq.c [deleted file]
plugins/docsis/packet-cmctrlrsp.c [deleted file]
plugins/docsis/packet-cmstatus.c [deleted file]
plugins/docsis/packet-dbcack.c [deleted file]
plugins/docsis/packet-dbcreq.c [deleted file]
plugins/docsis/packet-dbcrsp.c [deleted file]
plugins/docsis/packet-dccack.c [deleted file]
plugins/docsis/packet-dccreq.c [deleted file]
plugins/docsis/packet-dccrsp.c [deleted file]
plugins/docsis/packet-dcd.c [deleted file]
plugins/docsis/packet-dpd.c [deleted file]
plugins/docsis/packet-dpvreq.c [deleted file]
plugins/docsis/packet-dpvrsp.c [deleted file]
plugins/docsis/packet-dsaack.c [deleted file]
plugins/docsis/packet-dsareq.c [deleted file]
plugins/docsis/packet-dsarsp.c [deleted file]
plugins/docsis/packet-dscack.c [deleted file]
plugins/docsis/packet-dscreq.c [deleted file]
plugins/docsis/packet-dscrsp.c [deleted file]
plugins/docsis/packet-dsdreq.c [deleted file]
plugins/docsis/packet-dsdrsp.c [deleted file]
plugins/docsis/packet-intrngreq.c [deleted file]
plugins/docsis/packet-macmgmt.c
plugins/docsis/packet-map.c [deleted file]
plugins/docsis/packet-mdd.c [deleted file]
plugins/docsis/packet-ocd.c [deleted file]
plugins/docsis/packet-regack.c [deleted file]
plugins/docsis/packet-regreq.c [deleted file]
plugins/docsis/packet-regreqmp.c [deleted file]
plugins/docsis/packet-regrsp.c [deleted file]
plugins/docsis/packet-regrspmp.c [deleted file]
plugins/docsis/packet-rngreq.c [deleted file]
plugins/docsis/packet-rngrsp.c [deleted file]
plugins/docsis/packet-sync.c [deleted file]
plugins/docsis/packet-tlv-cmctrl.c [deleted file]
plugins/docsis/packet-tlv.c
plugins/docsis/packet-tlv.h
plugins/docsis/packet-type29ucd.c [deleted file]
plugins/docsis/packet-type35ucd.c [deleted file]
plugins/docsis/packet-type51ucd.c [deleted file]
plugins/docsis/packet-uccreq.c [deleted file]
plugins/docsis/packet-uccrsp.c [deleted file]
plugins/docsis/packet-ucd.c [deleted file]

index 0025bc66cae09b113b9982e735812db97311e668..730fda199ca7572271c4f4ba7252bd62b487cb37 100644 (file)
@@ -26,53 +26,9 @@ set_module_info(docsis 0 0 5 0)
 
 # The sources for the plugin
 set(DISSECTOR_SRC
-       packet-bintrngreq.c
-       packet-bpkmattr.c
-       packet-bpkmreq.c
-       packet-bpkmrsp.c
-       packet-cmctrlreq.c
-       packet-cmctrlrsp.c
-       packet-cmstatus.c
-       packet-intrngreq.c
-       packet-dbcreq.c
-       packet-dbcrsp.c
-       packet-dbcack.c
-       packet-dccack.c
-       packet-dccreq.c
-       packet-dccrsp.c
-       packet-dcd.c
-       packet-dpd.c
-       packet-dpvreq.c
-       packet-dpvrsp.c
        packet-docsis.c
-       packet-dsaack.c
-       packet-dsareq.c
-       packet-dsarsp.c
-       packet-dscack.c
-       packet-dscreq.c
-       packet-dscrsp.c
-       packet-dsdreq.c
-       packet-dsdrsp.c
        packet-macmgmt.c
-       packet-map.c
-       packet-mdd.c
-       packet-ocd.c
-       packet-regack.c
-       packet-regreq.c
-       packet-regreqmp.c
-       packet-regrsp.c
-       packet-regrspmp.c
-       packet-rngreq.c
-       packet-rngrsp.c
-       packet-sync.c
        packet-tlv.c
-       packet-tlv-cmctrl.c
-       packet-type29ucd.c
-       packet-type35ucd.c
-       packet-type51ucd.c
-       packet-uccreq.c
-       packet-uccrsp.c
-       packet-ucd.c
        packet-vendor.c
 )
 
index 5415c6800fba34adcbd1e9a338512db0504638b1..7c4fbd4924a67ef9dacdd6e8cb737db5e5469ef1 100644 (file)
@@ -26,53 +26,9 @@ PLUGIN_NAME = docsis
 
 # Non-generated sources to be scanned for registration routines
 NONGENERATED_REGISTER_C_FILES = \
-       packet-bintrngreq.c \
-       packet-bpkmattr.c \
-       packet-bpkmreq.c \
-       packet-bpkmrsp.c \
-       packet-cmctrlreq.c \
-       packet-cmctrlrsp.c \
-       packet-cmstatus.c \
-       packet-intrngreq.c \
-       packet-dbcreq.c \
-       packet-dbcrsp.c \
-       packet-dbcack.c \
-       packet-dccack.c \
-       packet-dccreq.c \
-       packet-dccrsp.c \
-       packet-dcd.c \
-       packet-dpd.c \
-       packet-dpvreq.c \
-       packet-dpvrsp.c \
        packet-docsis.c \
-       packet-dsaack.c \
-       packet-dsareq.c \
-       packet-dsarsp.c \
-       packet-dscack.c \
-       packet-dscreq.c \
-       packet-dscrsp.c \
-       packet-dsdreq.c \
-       packet-dsdrsp.c \
        packet-macmgmt.c \
-       packet-map.c \
-       packet-mdd.c \
-       packet-ocd.c \
-       packet-regack.c \
-       packet-regreq.c \
-       packet-regreqmp.c \
-       packet-regrsp.c \
-       packet-regrspmp.c \
-       packet-rngreq.c \
-       packet-rngrsp.c \
-       packet-sync.c \
        packet-tlv.c \
-       packet-tlv-cmctrl.c \
-       packet-type29ucd.c \
-       packet-type35ucd.c \
-       packet-type51ucd.c \
-       packet-uccreq.c \
-       packet-uccrsp.c \
-       packet-ucd.c \
        packet-vendor.c
 
 # Non-generated sources
diff --git a/plugins/docsis/packet-bintrngreq.c b/plugins/docsis/packet-bintrngreq.c
deleted file mode 100644 (file)
index d9fe14e..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/* packet-bintrngreq.c
- * Routines for DOCSIS 3.0 Bonded Intial Ranging Request Message dissection.
- * Copyright 2009, Geoffrey Kimball <gekimbal[AT]cisco.com>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_bintrngreq(void);
-void proto_reg_handoff_docsis_bintrngreq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_bintrngreq = -1;
-static int hf_docsis_bintrngreq_down_chid = -1;
-static int hf_docsis_bintrngreq_mddsgid = -1;
-static int hf_docsis_bintrngreq_capflags = -1;
-static int hf_docsis_bintrngreq_up_chid = -1;
-static int hf_docsis_bintrngreq_capflags_frag = -1;
-static int hf_docsis_bintrngreq_capflags_encrypt = -1;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_bintrngreq = -1;
-
-static dissector_handle_t docsis_bintrngreq_handle;
-
-/* Dissection */
-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_bintrngreq_down_chid, tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
-  proto_tree_add_item (bintrngreq_tree, hf_docsis_bintrngreq_up_chid, tvb, offset, 1, ENC_BIG_ENDIAN);
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_bintrngreq (void)
-{
-  static hf_register_info hf[] = {
-    {&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}
-    },
-    {&hf_docsis_bintrngreq_down_chid,
-     {"DS Chan ID", "docsis_bintrngreq.downchid",
-      FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_bintrngreq_up_chid,
-     {"US Chan ID", "docsis_bintrngreq.upchid",
-      FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_bintrngreq,
-  };
-
-  proto_docsis_bintrngreq = proto_register_protocol ("DOCSIS Bonded Initial Ranging Message",
-                                                     "DOCSIS B-INT-RNG-REQ",
-                                                     "docsis_bintrngreq");
-
-  proto_register_field_array (proto_docsis_bintrngreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_bintrngreq_handle = register_dissector ("docsis_bintrngreq", dissect_bintrngreq, proto_docsis_bintrngreq);
-}
-
-void
-proto_reg_handoff_docsis_bintrngreq (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x22, docsis_bintrngreq_handle);
-}
-
-/*
- * 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/docsis/packet-bpkmattr.c b/plugins/docsis/packet-bpkmattr.c
deleted file mode 100644 (file)
index 1fc3183..0000000
+++ /dev/null
@@ -1,574 +0,0 @@
-/* packet-bpkmattr.c
- * 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>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-/* 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
-
-void proto_register_docsis_bpkmattr(void);
-void proto_reg_handoff_docsis_bpkmattr(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_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; */
-
-/* Initialize the subtree pointers */
-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 expert_field ei_docsis_bpkmattr_tlvlen_bad = EI_INIT;
-
-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},
-};
-
-/* 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, proto_item* item)
-{
-  guint8 type;
-  guint16 length;
-  int pos = 0;
-  gint total_len;
-  proto_tree *cmid_tree, *tekp_tree, *scap_tree;
-  proto_tree *saqry_tree, *dnld_tree, *sadsc_tree;
-  proto_item *ti;
-  tvbuff_t *cmid_tvb, *tekp_tvb, *scap_tvb;
-  tvbuff_t *saqry_tvb, *dnld_tvb, *sadsc_tvb;
-
-  total_len = tvb_reported_length_remaining (tvb, 0);
-  while (pos < total_len)
-    {
-      type = tvb_get_guint8 (tvb, pos++);
-      length = tvb_get_ntohs (tvb, pos);
-      pos += 2;
-      switch (type)
-        {
-          case BPKM_RESERVED:
-            break;
-          case BPKM_SERIAL_NUM:
-            proto_tree_add_item (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 (tree, hf_docsis_bpkmattr_manf_id, tvb, pos,
-                                   length, ENC_NA);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_MAC_ADDR:
-            if (length == 6)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_mac_addr, tvb, pos,
-                                   length, ENC_NA);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_RSA_PUB_KEY:
-            proto_tree_add_item (tree, hf_docsis_bpkmattr_rsa_pub_key, tvb, pos,
-                                 length, ENC_NA);
-            break;
-          case BPKM_CM_ID:
-            cmid_tree =
-              proto_tree_add_subtree(tree, tvb, pos, length,
-                                     ett_docsis_bpkmattr_cmid, &ti, "5 CM Identification");
-            cmid_tvb = tvb_new_subset_length (tvb, pos, length);
-            dissect_attrs (cmid_tvb, pinfo, cmid_tree, ti);
-            break;
-          case BPKM_DISPLAY_STR:
-            proto_tree_add_item (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 (tree, hf_docsis_bpkmattr_auth_key, tvb, pos,
-                                   length, ENC_NA);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_TEK:
-            if (length == 8 || length == 16)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_tek, tvb, pos,
-                                   length, ENC_NA);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_KEY_LIFETIME:
-            if (length == 4)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_key_life, tvb, pos,
-                                   length, ENC_BIG_ENDIAN);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_KEY_SEQ_NUM:
-            if (length == 1)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_key_seq, tvb, pos,
-                                   length, ENC_BIG_ENDIAN);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_HMAC_DIGEST:
-            if (length == 20)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_hmac_digest, tvb,
-                                   pos, length, ENC_NA);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_SAID:
-            if (length == 2)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_said, tvb, pos,
-                                   length, ENC_BIG_ENDIAN);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_TEK_PARAM:
-            tekp_tree =
-              proto_tree_add_subtree(tree, tvb, pos, length, ett_docsis_bpkmattr_tekp, &ti, "13 TEK Parameters");
-            tekp_tvb = tvb_new_subset_length (tvb, pos, length);
-            dissect_attrs (tekp_tvb, pinfo, tekp_tree, ti);
-            break;
-          case BPKM_OBSOLETED:
-            break;
-          case BPKM_CBC_IV:
-            if (length == 8 || length == 16)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_cbc_iv, tvb, pos,
-                                   length, ENC_NA);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_ERROR_CODE:
-            if (length == 1)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_error_code, tvb,
-                                   pos, length, ENC_BIG_ENDIAN);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_CA_CERT:
-            proto_tree_add_item (tree, hf_docsis_bpkmattr_ca_cert, tvb, pos,
-                                 length, ENC_NA);
-            break;
-          case BPKM_CM_CERT:
-            proto_tree_add_item (tree, hf_docsis_bpkmattr_cm_cert, tvb, pos,
-                                 length, ENC_NA);
-            break;
-          case BPKM_SEC_CAPABILITIES:
-            scap_tree =
-              proto_tree_add_subtree(tree, tvb, pos, length,
-                                     ett_docsis_bpkmattr_scap, &ti, "19 Security Capabilities");
-            scap_tvb = tvb_new_subset_length (tvb, pos, length);
-            dissect_attrs (scap_tvb, pinfo, scap_tree, ti);
-            break;
-          case BPKM_CRYPTO_SUITE:
-            if (length == 2)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_crypto_suite, tvb,
-                                   pos, length, ENC_BIG_ENDIAN);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_CRYPTO_SUITE_LIST:
-            proto_tree_add_item (tree, hf_docsis_bpkmattr_crypto_suite_list,
-                                 tvb, pos, length, ENC_NA);
-            break;
-          case BPKM_BPI_VERSION:
-            if (length == 1)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_bpi_version, tvb,
-                                   pos, length, ENC_BIG_ENDIAN);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_SA_DESCRIPTOR:
-            sadsc_tree =
-              proto_tree_add_subtree(tree, tvb, pos, length, ett_docsis_bpkmattr_sadsc, &ti, "23 SA Descriptor");
-            sadsc_tvb = tvb_new_subset_length (tvb, pos, length);
-            dissect_attrs (sadsc_tvb, pinfo, sadsc_tree, ti);
-            break;
-          case BPKM_SA_TYPE:
-            if (length == 1)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_sa_type, tvb, pos,
-                                   length, ENC_BIG_ENDIAN);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_SA_QUERY:
-            saqry_tree =
-              proto_tree_add_subtree(tree, tvb, pos, length, ett_docsis_bpkmattr_saqry, &ti, "25 SA Query");
-            saqry_tvb = tvb_new_subset_length (tvb, pos, length);
-            dissect_attrs (saqry_tvb, pinfo, saqry_tree, ti);
-            break;
-          case BPKM_SA_QUERY_TYPE:
-            if (length == 1)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_sa_query_type, tvb,
-                                   pos, length, ENC_BIG_ENDIAN);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_IP_ADDRESS:
-            if (length == 4)
-              proto_tree_add_item (tree, hf_docsis_bpkmattr_ip_address, tvb,
-                                   pos, length, ENC_BIG_ENDIAN);
-            else
-              expert_add_info_format(pinfo, item, &ei_docsis_bpkmattr_tlvlen_bad, "Wrong TLV length: %u", length);
-            break;
-          case BPKM_VENDOR_DEFINED:
-            proto_tree_add_item (tree, hf_docsis_bpkmattr_vendor_def, tvb, pos,
-                                 length, ENC_NA);
-            break;
-          case BPKM_DNLD_PARAMS:
-            dnld_tree =
-              proto_tree_add_subtree(tree, tvb, pos, length,
-                                     ett_docsis_bpkmattr_dnld, &ti, "28 Download Parameters");
-            dnld_tvb = tvb_new_subset_length (tvb, pos, length);
-            dissect_attrs (dnld_tvb, pinfo, dnld_tree, ti);
-            break;
-          default:
-            proto_tree_add_item (tree, hf_docsis_bpkmattr_vendor_def, tvb, pos,
-                                 length, ENC_NA);
-            break;
-        }
-      pos += length;            /* switch */
-    }                           /* while */
-}
-
-static int
-dissect_bpkmattr (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
-
-  proto_item *it;
-  proto_tree *bpkmattr_tree;
-
-  it = proto_tree_add_protocol_format (tree, proto_docsis_bpkmattr, tvb, 0, -1,
-                                        "BPKM Attributes");
-  bpkmattr_tree = proto_item_add_subtree (it, ett_docsis_bpkmattr);
-  dissect_attrs (tvb, pinfo, bpkmattr_tree, it);
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_bpkmattr (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_bpkmattr_serial_num,
-     {"1 Serial Number", "docsis_bpkmattr.serialnum",
-      FT_STRING, BASE_NONE, NULL, 0x0,
-      "Serial Number", HFILL}
-    },
-    {&hf_docsis_bpkmattr_manf_id,
-     {"2 Manufacturer Id", "docsis_bpkmattr.manfid",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Manufacturer Id", HFILL}
-    },
-    {&hf_docsis_bpkmattr_mac_addr,
-     {"3 Mac Address", "docsis_bpkmattr.macaddr",
-      FT_ETHER, BASE_NONE, NULL, 0x0,
-      "Mac Address", HFILL}
-    },
-    {&hf_docsis_bpkmattr_rsa_pub_key,
-     {"4 RSA Public Key", "docsis_bpkmattr.rsa_pub_key",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "RSA Public Key", HFILL}
-    },
-#if 0
-    {&hf_docsis_bpkmattr_cm_id,
-     {"5 CM Identification", "docsis_bpkmattr.cmid",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "CM Identification", HFILL}
-    },
-#endif
-    {&hf_docsis_bpkmattr_display_str,
-     {"6 Display String", "docsis_bpkmattr.dispstr",
-      FT_STRING, BASE_NONE, NULL, 0x0,
-      "Display String", HFILL}
-    },
-    {&hf_docsis_bpkmattr_auth_key,
-     {"7 Auth Key", "docsis_bpkmattr.auth_key",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Auth Key", HFILL}
-    },
-    {&hf_docsis_bpkmattr_tek,
-     {"8 Traffic Encryption Key", "docsis_bpkmattr.tek",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Traffic Encryption Key", HFILL}
-    },
-    {&hf_docsis_bpkmattr_key_life,
-     {"9 Key Lifetime (s)", "docsis_bpkmattr.keylife",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      "Key Lifetime (s)", HFILL}
-    },
-    {&hf_docsis_bpkmattr_key_seq,
-     {"10 Key Sequence Number", "docsis_bpkmattr.keyseq",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Key Sequence Number", HFILL}
-    },
-    {&hf_docsis_bpkmattr_hmac_digest,
-     {"11 HMAC Digest", "docsis_bpkmattr.hmacdigest",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "HMAC Digest", HFILL}
-    },
-    {&hf_docsis_bpkmattr_said,
-     {"12 SAID", "docsis_bpkmattr.said",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      "Security Association ID", HFILL}
-    },
-#if 0
-    {&hf_docsis_bpkmattr_tek_params,
-     {"13 TEK Parameters", "docsis_bpkmattr.tekparams",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "TEK Parameters", HFILL}
-    },
-#endif
-    {&hf_docsis_bpkmattr_cbc_iv,
-     {"15 CBC IV", "docsis_bpkmattr.cbciv",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Cypher Block Chaining", HFILL}
-    },
-    {&hf_docsis_bpkmattr_error_code,
-     {"16 Error Code", "docsis_bpkmattr.errcode",
-      FT_UINT8, BASE_DEC, VALS (error_code_vals), 0x0,
-      "Error Code", HFILL}
-    },
-    {&hf_docsis_bpkmattr_vendor_def,
-     {"127 Vendor Defined", "docsis_bpkmattr.vendordef",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Vendor Defined", HFILL}
-    },
-    {&hf_docsis_bpkmattr_ca_cert,
-     {"17 CA Certificate", "docsis_bpkmattr.cacert",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "CA Certificate", HFILL}
-    },
-    {&hf_docsis_bpkmattr_cm_cert,
-     {"18 CM Certificate", "docsis_bpkmattr.cmcert",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "CM Certificate", HFILL}
-    },
-#if 0
-    {&hf_docsis_bpkmattr_security_cap,
-     {"19 Security Capabilities", "docsis_bpkmattr.seccap",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Security Capabilities", HFILL}
-    },
-#endif
-    {&hf_docsis_bpkmattr_crypto_suite,
-     {"20 Cryptographic Suite", "docsis_bpkmattr.cryptosuite",
-      FT_UINT16, BASE_HEX, VALS(crypto_suite_attr_vals), 0x0,
-      "Cryptographic Suite", HFILL}
-    },
-    {&hf_docsis_bpkmattr_crypto_suite_list,
-     {"21 Cryptographic Suite List", "docsis_bpkmattr.crypto_suite_lst",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Cryptographic Suite", HFILL}
-    },
-    {&hf_docsis_bpkmattr_bpi_version,
-     {"22 BPI Version", "docsis_bpkmattr.bpiver",
-      FT_UINT8, BASE_DEC, VALS (bpi_ver_vals), 0x0,
-      "BPKM Attributes", HFILL}
-    },
-#if 0
-    {&hf_docsis_bpkmattr_sa_descr,
-     {"23 SA Descriptor", "docsis_bpkmattr.sadescr",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "SA Descriptor", HFILL}
-    },
-#endif
-    {&hf_docsis_bpkmattr_sa_type,
-     {"24 SA Type", "docsis_bpkmattr.satype",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "SA Type", HFILL}
-    },
-#if 0
-    {&hf_docsis_bpkmattr_sa_query,
-     {"25 SA Query", "docsis_bpkmattr.saquery",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "SA Query", HFILL}
-    },
-#endif
-    {&hf_docsis_bpkmattr_sa_query_type,
-     {"26 SA Query Type", "docsis_bpkmattr.saquery_type",
-      FT_UINT8, BASE_HEX, NULL, 0x0,
-      "SA Query Type", HFILL}
-    },
-    {&hf_docsis_bpkmattr_ip_address,
-     {"27 IP Address", "docsis_bpkmattr.ipaddr",
-      FT_IPv4, BASE_NONE, NULL, 0x0,
-      "IP Address", HFILL}
-    },
-#if 0
-    {&hf_docsis_bpkmattr_download_param,
-     {"28 Download Parameters", "docsis_bpkmattr.dnld_params",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Download Parameters", HFILL}
-    },
-#endif
-  };
-
-  static gint *ett[] = {
-    &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
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_bpkmattr_tlvlen_bad, { "docsis_bpkmattr.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-  };
-
-  expert_module_t* expert_docsis_bpkmattr;
-
-  proto_docsis_bpkmattr =
-    proto_register_protocol
-    ("DOCSIS Baseline Privacy Key Management Attributes", "DOCSIS BPKM-ATTR",
-     "docsis_bpkmattr");
-
-  proto_register_field_array (proto_docsis_bpkmattr, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_bpkmattr = expert_register_protocol(proto_docsis_bpkmattr);
-  expert_register_field_array(expert_docsis_bpkmattr, ei, array_length(ei));
-
-  register_dissector ("docsis_bpkmattr", dissect_bpkmattr,
-                      proto_docsis_bpkmattr);
-}
-
-
-void
-proto_reg_handoff_docsis_bpkmattr (void)
-{
-#if 0
-  dissector_handle_t docsis_bpkmattr_handle;
-
-  docsis_bpkmattr_handle = find_dissector ("docsis_bpkmattr");
-  dissector_add_uint ("docsis", 0xFE, docsis_bpkmattr_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:
- */
diff --git a/plugins/docsis/packet-bpkmreq.c b/plugins/docsis/packet-bpkmreq.c
deleted file mode 100644 (file)
index 6676fa8..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/* packet-bpkmreq.c
- * Routines for Baseline Privacy Key Management Request dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_bpkmreq(void);
-void proto_reg_handoff_docsis_bpkmreq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_bpkmreq = -1;
-static int hf_docsis_bpkmreq_code = -1;
-static int hf_docsis_bpkmreq_length = -1;
-static int hf_docsis_bpkmreq_ident = -1;
-
-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},
-};
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_bpkmreq = -1;
-
-static dissector_handle_t attrs_handle;
-static dissector_handle_t docsis_bpkmreq_handle;
-
-/* Dissection */
-static int
-dissect_bpkmreq (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
-  proto_item *it;
-  proto_tree *bpkmreq_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_bpkmreq_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_bpkmreq_ident, tvb, 1, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (bpkmreq_tree, hf_docsis_bpkmreq_length, tvb, 2, 2, ENC_BIG_ENDIAN);
-
-  attrs_tvb = tvb_new_subset_remaining (tvb, 4);
-  call_dissector (attrs_handle, attrs_tvb, pinfo, tree);
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_bpkmreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_bpkmreq_code,
-     {"BPKM Code", "docsis_bpkmreq.code",
-      FT_UINT8, BASE_DEC, VALS (code_field_vals), 0x0,
-      "BPKM Request Message", HFILL}
-    },
-    {&hf_docsis_bpkmreq_ident,
-     {"BPKM Identifier", "docsis_bpkmreq.ident",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_bpkmreq_length,
-     {"BPKM Length", "docsis_bpkmreq.length",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_bpkmreq,
-  };
-
-  proto_docsis_bpkmreq =
-    proto_register_protocol ("DOCSIS Baseline Privacy Key Management Request",
-                             "DOCSIS BPKM-REQ", "docsis_bpkmreq");
-
-  proto_register_field_array (proto_docsis_bpkmreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_bpkmreq_handle = register_dissector ("docsis_bpkmreq", dissect_bpkmreq,
-                      proto_docsis_bpkmreq);
-}
-
-
-void
-proto_reg_handoff_docsis_bpkmreq (void)
-{
-  attrs_handle = find_dissector ("docsis_bpkmattr");
-  dissector_add_uint ("docsis_mgmt", 0x0C, docsis_bpkmreq_handle);
-}
-
-/*
- * 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/docsis/packet-bpkmrsp.c b/plugins/docsis/packet-bpkmrsp.c
deleted file mode 100644 (file)
index 78f19d7..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/* packet-bpkmrsp.c
- * Routines for Baseline Privacy Key Management Response dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_bpkmrsp(void);
-void proto_reg_handoff_docsis_bpkmrsp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_bpkmrsp = -1;
-static int hf_docsis_bpkmrsp_code = -1;
-static int hf_docsis_bpkmrsp_length = -1;
-static int hf_docsis_bpkmrsp_ident = -1;
-
-static const value_string code_field_vals[] = {
-  { 0, "Reserved"},
-  { 1, "Reserved"},
-  { 2, "Reserved"},
-  { 3, "Reserved"},
-  { 4, "Auth Response"},
-  { 5, "Auth Reply"},
-  { 6, "Auth Reject"},
-  { 7, "Key Response"},
-  { 8, "Key Reply"},
-  { 9, "Key Reject"},
-  {10, "Auth Invalid"},
-  {11, "TEK Invalid"},
-  {12, "Authent Info"},
-  {13, "Map Response"},
-  {14, "Map Reply"},
-  {15, "Map Reject"},
-  {0, NULL},
-};
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_bpkmrsp = -1;
-
-static dissector_handle_t attrs_handle;
-static dissector_handle_t docsis_bpkmrsp_handle;
-
-/* Dissection */
-static int
-dissect_bpkmrsp (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
-  proto_item *it;
-  proto_tree *bpkmrsp_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_bpkmrsp_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_bpkmrsp_ident, tvb, 1, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (bpkmrsp_tree, hf_docsis_bpkmrsp_length, tvb, 2, 2, ENC_BIG_ENDIAN);
-
-  /* Code to Call subdissector */
-  attrs_tvb = tvb_new_subset_remaining (tvb, 4);
-  call_dissector (attrs_handle, attrs_tvb, pinfo, tree);
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_bpkmrsp (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_bpkmrsp_code,
-     {"BPKM Code", "docsis_bpkmrsp.code",
-      FT_UINT8, BASE_DEC, VALS (code_field_vals), 0x0,
-      "BPKM Response Message", HFILL}
-    },
-    {&hf_docsis_bpkmrsp_ident,
-     {"BPKM Identifier", "docsis_bpkmrsp.ident",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_bpkmrsp_length,
-     {"BPKM Length", "docsis_bpkmrsp.length",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_bpkmrsp,
-  };
-
-  proto_docsis_bpkmrsp =
-    proto_register_protocol
-    ("DOCSIS Baseline Privacy Key Management Response", "DOCSIS BPKM-RSP",
-     "docsis_bpkmrsp");
-
-  proto_register_field_array (proto_docsis_bpkmrsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_bpkmrsp_handle = register_dissector ("docsis_bpkmrsp", dissect_bpkmrsp,
-                      proto_docsis_bpkmrsp);
-}
-
-void
-proto_reg_handoff_docsis_bpkmrsp (void)
-{
-  attrs_handle = find_dissector ("docsis_bpkmattr");
-  dissector_add_uint ("docsis_mgmt", 0x0D, docsis_bpkmrsp_handle);
-}
-
-/*
- * 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/docsis/packet-cmctrlreq.c b/plugins/docsis/packet-cmctrlreq.c
deleted file mode 100644 (file)
index c232355..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/* packet-cmctrlreq.c
- * Routines for DOCSIS 3.0 CM Control Request 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
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_cmctrlreq(void);
-void proto_reg_handoff_docsis_cmctrlreq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_cmctrlreq = -1;
-static int hf_docsis_cmctrlreq_tranid = -1;
-static dissector_handle_t cmctrl_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_cmctrlreq = -1;
-
-static dissector_handle_t docsis_cmctrlreq_handle;
-
-/* Dissection */
-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_cmctrlreq_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
-
-  col_add_fstr (pinfo->cinfo, COL_INFO,
-                "CM Control Request: Transaction-Id = %u", transid);
-
-  /* Call Dissector for Appendix C TLV's */
-  next_tvb = tvb_new_subset_remaining (tvb, 2);
-  call_dissector (cmctrl_tlv_handle, next_tvb, pinfo, cmctrlreq_tree);
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_cmctrlreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_cmctrlreq_tranid,
-     {"Transaction Id", "docsis_cmctrlreq.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_cmctrlreq,
-  };
-
-  proto_docsis_cmctrlreq =
-    proto_register_protocol ("DOCSIS CM Control Request",
-                             "DOCSIS CM-CTRL-REQ", "docsis_cmctrlreq");
-
-  proto_register_field_array (proto_docsis_cmctrlreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_cmctrlreq_handle = register_dissector ("docsis_cmctrlreq", dissect_cmctrlreq, proto_docsis_cmctrlreq);
-}
-
-void
-proto_reg_handoff_docsis_cmctrlreq (void)
-{
-  cmctrl_tlv_handle = find_dissector ("cmctrl_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x2A, docsis_cmctrlreq_handle);
-}
-
-/*
- * 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/docsis/packet-cmctrlrsp.c b/plugins/docsis/packet-cmctrlrsp.c
deleted file mode 100644 (file)
index 9c514a5..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/* packet-cmctrlrsp.c
- * Routines for DOCSIS 3.0 CM Control Response 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
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-#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
-
-void proto_register_docsis_cmctrlrsp(void);
-void proto_reg_handoff_docsis_cmctrlrsp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_cmctrlrsp = -1;
-static int hf_docsis_cmctrlrsp_tranid = -1;
-static dissector_handle_t cmctrl_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_cmctrlrsp = -1;
-
-static dissector_handle_t docsis_cmctrlrsp_handle;
-
-/* Dissection */
-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_cmctrlrsp_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);
-  call_dissector (cmctrl_tlv_handle, next_tvb, pinfo, cmctrlrsp_tree);
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_cmctrlrsp (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_cmctrlrsp_tranid,
-     {"Transaction Id", "docsis_cmctrlrsp.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_cmctrlrsp,
-  };
-
-  proto_docsis_cmctrlrsp =
-    proto_register_protocol ("DOCSIS CM Control Response",
-                             "DOCSIS CM-CTRL-RSP", "docsis_cmctrlrsp");
-
-  proto_register_field_array (proto_docsis_cmctrlrsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_cmctrlrsp_handle = register_dissector ("docsis_cmctrlrsp", dissect_cmctrlrsp, proto_docsis_cmctrlrsp);
-}
-
-void
-proto_reg_handoff_docsis_cmctrlrsp (void)
-{
-  cmctrl_tlv_handle = find_dissector ("cmctrl_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x2B, docsis_cmctrlrsp_handle);
-}
-
-/*
- * 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/docsis/packet-cmstatus.c b/plugins/docsis/packet-cmstatus.c
deleted file mode 100644 (file)
index 7fd3979..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-/* packet-cmstatus.c
- * Routines for DOCSIS 3.0 CM-STATUS Report Message dissection.
- * Copyright 2011, Hendrik Robbel <hendrik.robbel[AT]kabeldeutschland.de>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-#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
-
-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}
-};
-
-void proto_register_docsis_cmstatus(void);
-void proto_reg_handoff_docsis_cmstatus(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_cmstatus = -1;
-static int hf_docsis_cmstatus_tranid = -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;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_cmstatus = -1;
-static gint ett_docsis_cmstatus_tlv = -1;
-static gint ett_docsis_cmstatus_tlvtlv = -1;
-
-static expert_field ei_docsis_cmstatus_tlvlen_bad = EI_INIT;
-
-static dissector_handle_t docsis_cmstatus_handle;
-
-/* Dissection */
-/* See Table 6-52 in CM-SP-MULPIv3.0-I14-101008 */
-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_cmstatus_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_cmstatus_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_cmstatus_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_cmstatus_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 = NULL;
-  guint32 transid;
-  guint8 event_type;
-  tvbuff_t* next_tvb;
-
-  it = proto_tree_add_protocol_format (tree, proto_docsis_cmstatus, tvb, 0, -1, "CM-STATUS Report");
-  cmstatus_tree = proto_item_add_subtree (it, ett_docsis_cmstatus);
-  proto_tree_add_item_ret_uint (cmstatus_tree, hf_docsis_cmstatus_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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_cmstatus (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_cmstatus_tranid,
-     {"Transaction ID", "docsis_cmstatus.tranid",FT_UINT16, BASE_DEC, NULL, 0x0,NULL, HFILL}
-    },
-    /* See Table 10-3 in CM-SP-MULPIv3.0-I14-101008 */
-
-    {&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}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_cmstatus,
-    &ett_docsis_cmstatus_tlv,
-    &ett_docsis_cmstatus_tlvtlv,
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_cmstatus_tlvlen_bad, { "docsis_cmstatus.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-  };
-
-  expert_module_t* expert_docsis_cmstatus;
-
-  proto_docsis_cmstatus = proto_register_protocol ("DOCSIS CM-STATUS Report", "DOCSIS CM-STATUS", "docsis_cmstatus");
-
-  proto_register_field_array (proto_docsis_cmstatus, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_cmstatus = expert_register_protocol(proto_docsis_cmstatus);
-  expert_register_field_array(expert_docsis_cmstatus, ei, array_length(ei));
-
-  docsis_cmstatus_handle = register_dissector ("docsis_cmstatus", dissect_cmstatus, proto_docsis_cmstatus);
-}
-
-void
-proto_reg_handoff_docsis_cmstatus (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x29, docsis_cmstatus_handle);
-}
-
-/*
- * 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/docsis/packet-dbcack.c b/plugins/docsis/packet-dbcack.c
deleted file mode 100644 (file)
index 03d94df..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/* packet-dbcack.c
- * Routines for DOCSIS 3.0 Dynamic Bonding Change Acknowledge 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
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dbcack(void);
-void proto_reg_handoff_docsis_dbcack(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dbcack = -1;
-static int hf_docsis_dbcack_tranid = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dbcack = -1;
-
-static dissector_handle_t docsis_dbcack_handle;
-
-/* Dissection */
-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);
-
-  if (tree)
-    {
-      dbcack_item = proto_tree_add_protocol_format (tree, proto_docsis_dbcack,
-                                                    tvb, 0, -1,
-                                                    "Dynamic Bonding Change Acknowledge");
-      dbcack_tree = proto_item_add_subtree (dbcack_item, ett_docsis_dbcack);
-      proto_tree_add_item (dbcack_tree, hf_docsis_dbcack_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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dbcack (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dbcack_tranid,
-     {"Transaction Id", "docsis_dbcack.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dbcack,
-  };
-
-  proto_docsis_dbcack = proto_register_protocol ("DOCSIS Dynamic Bonding Change Acknowledge",
-                                                 "DOCSIS DBC-ACK",
-                                                 "docsis_dbcack");
-
-  proto_register_field_array (proto_docsis_dbcack, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dbcack_handle = register_dissector ("docsis_dbcack", dissect_dbcack, proto_docsis_dbcack);
-}
-
-void
-proto_reg_handoff_docsis_dbcack (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x26, docsis_dbcack_handle);
-}
-
-/*
- * 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/docsis/packet-dbcreq.c b/plugins/docsis/packet-dbcreq.c
deleted file mode 100644 (file)
index f9c8399..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/* packet-dbcreq.c
- * Routines for DOCSIS 3.0 Dynamic Bonding Change Request 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
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dbcreq(void);
-void proto_reg_handoff_docsis_dbcreq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dbcreq = -1;
-static int hf_docsis_dbcreq_tranid = -1;
-static int hf_docsis_dbcreq_number_of_fragments = -1;
-static int hf_docsis_dbcreq_fragment_sequence_number = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dbcreq = -1;
-
-static dissector_handle_t docsis_dbcreq_handle;
-
-/* Dissection */
-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_dbcreq_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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dbcreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dbcreq_tranid,
-     {"Transaction Id", "docsis_dbcreq.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&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}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dbcreq,
-  };
-
-  proto_docsis_dbcreq = proto_register_protocol ("DOCSIS Dynamic Bonding Change Request",
-                                                 "DOCSIS DBC-REQ",
-                                                 "docsis_dbcreq");
-
-  proto_register_field_array (proto_docsis_dbcreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dbcreq_handle = register_dissector ("docsis_dbcreq", dissect_dbcreq, proto_docsis_dbcreq);
-}
-
-void
-proto_reg_handoff_docsis_dbcreq (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x24, docsis_dbcreq_handle);
-}
-
-/*
- * 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/docsis/packet-dbcrsp.c b/plugins/docsis/packet-dbcrsp.c
deleted file mode 100644 (file)
index a07a000..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* packet-dbcrsp.c
- * Routines for DOCSIS 3.0 Dynamic Bonding Change Response 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
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-extern value_string docsis_conf_code[];
-
-void proto_register_docsis_dbcrsp(void);
-void proto_reg_handoff_docsis_dbcrsp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dbcrsp = -1;
-static int hf_docsis_dbcrsp_tranid = -1;
-static int hf_docsis_dbcrsp_conf_code = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dbcrsp = -1;
-
-static dissector_handle_t docsis_dbcrsp_handle;
-
-/* Dissection */
-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_dbcrsp_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 (confcode, docsis_conf_code, "%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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dbcrsp (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dbcrsp_tranid,
-     {"Transaction Id", "docsis_dbcrsp.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dbcrsp_conf_code,
-     {"Confirmation Code", "docsis_dbcrsp.conf_code",
-      FT_UINT8, BASE_DEC, VALS (docsis_conf_code), 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dbcrsp,
-  };
-
-  proto_docsis_dbcrsp = proto_register_protocol ("DOCSIS Dynamic Bonding Change Response",
-                                                 "DOCSIS DBC-RSP",
-                                                 "docsis_dbcrsp");
-
-  proto_register_field_array (proto_docsis_dbcrsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dbcrsp_handle = register_dissector ("docsis_dbcrsp", dissect_dbcrsp, proto_docsis_dbcrsp);
-}
-
-
-void
-proto_reg_handoff_docsis_dbcrsp (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x25, docsis_dbcrsp_handle);
-}
-
-/*
- * 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/docsis/packet-dccack.c b/plugins/docsis/packet-dccack.c
deleted file mode 100644 (file)
index 4a20920..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/* packet-dccack.c
- * Routines for DCC Acknowledge Message  dissection
- * Copyright 2004, Darryl Hymel <darryl.hymel[AT]arrisi.com>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-void proto_register_docsis_dccack(void);
-void proto_reg_handoff_docsis_dccack(void);
-
-#define DCCACK_KEY_SEQ_NUM 31
-#define DCCACK_HMAC_DIGEST 27
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dccack = -1;
-
-static int hf_docsis_dcc_type = -1;
-static int hf_docsis_dcc_length = -1;
-static int hf_docsis_dccack_tran_id = -1;
-static int hf_docsis_dccack_key_seq_num = -1;
-static int hf_docsis_dccack_hmac_digest = -1;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dccack = -1;
-static gint ett_docsis_dccack_tlv = -1;
-
-static const value_string dccack_tlv_vals[] = {
-  {DCCACK_HMAC_DIGEST, "HMAC-DigestNumber"},
-  {DCCACK_KEY_SEQ_NUM, "Auth Key Sequence Number"},
-  {0, NULL}
-};
-
-static expert_field ei_docsis_dccack_tlvlen_bad = EI_INIT;
-
-static dissector_handle_t docsis_dccack_handle;
-
-/* Dissection */
-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_dccack_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_dccack_tlv, &tlv_item,
-                                            val_to_str(type, dccack_tlv_vals,
-                                                       "Unknown TLV (%u)"));
-    proto_tree_add_uint (tlv_tree, hf_docsis_dcc_type, tvb, pos, 1, type);
-    pos++;
-    tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dcc_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_dccack_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_dccack_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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dccack (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dcc_type,
-     {
-      "Type",
-      "docsis_dccack.tlvtype",
-      FT_UINT8, BASE_DEC, VALS(dccack_tlv_vals), 0x0,
-      NULL,
-      HFILL
-     }
-    },
-    {&hf_docsis_dcc_length,
-     {
-      "Length",
-      "docsis_dccack.tlvlen",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL,
-      HFILL
-     }
-    },
-    {&hf_docsis_dccack_tran_id ,
-     {
-       "Transaction ID",
-       "docsis_dccack.tran_id",
-       FT_UINT16, 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
-     }
-    },
-
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dccack,
-    &ett_docsis_dccack_tlv,
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_dccack_tlvlen_bad, { "docsis_dccack.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-  };
-
-  expert_module_t* expert_docsis_dccack;
-
-  proto_docsis_dccack =
-    proto_register_protocol ("DOCSIS Downstream Channel Change Acknowledge",
-                             "DOCSIS DCC-ACK", "docsis_dccack");
-
-  proto_register_field_array (proto_docsis_dccack, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_dccack = expert_register_protocol(proto_docsis_dccack);
-  expert_register_field_array(expert_docsis_dccack, ei, array_length(ei));
-
-  docsis_dccack_handle = register_dissector ("docsis_dccack", dissect_dccack, proto_docsis_dccack);
-}
-
-void
-proto_reg_handoff_docsis_dccack (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x19, docsis_dccack_handle);
-
-}
-
-/*
- * 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/docsis/packet-dccreq.c b/plugins/docsis/packet-dccreq.c
deleted file mode 100644 (file)
index 6ace500..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-/* packet-dccreq.c
- * Routines for DCC Request Message  dissection
- * Copyright 2004, Darryl Hymel <darryl.hymel[AT]arrisi.com>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-void proto_register_docsis_dccreq(void);
-void proto_reg_handoff_docsis_dccreq(void);
-
-#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
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dccreq = -1;
-
-static int hf_docsis_dcc_type = -1;
-static int hf_docsis_dcc_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;
-
-/* Initialize the subtree pointers */
-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 expert_field ei_docsis_dccreq_tlvlen_bad = EI_INIT;
-
-static dissector_handle_t docsis_dccreq_handle;
-
-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 unit_name_string local_units_hz = { "Hz", NULL };
-
-/* Dissection */
-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_dccreq_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_dccreq_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_dccreq_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_dccreq_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_dccreq_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_dccreq_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_dccreq_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_dccreq_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_dccreq_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_dccreq_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_dcc_type, tvb, pos, 1, type);
-    pos++;
-    tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dcc_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_dccreq_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_dccreq_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_dccreq_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_dccreq_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_dccreq_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_dccreq_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    }       /* switch(type) */
-    pos += length;
-  }         /* (tvb_reported_length_remaining(tvb, pos) > 0) */
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dccreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dcc_type,
-     {
-      "Type",
-      "docsis_dccreq.tlvtype",
-      FT_UINT8, BASE_DEC, VALS(dcc_tlv_vals), 0x0,
-      NULL,
-      HFILL
-     }
-    },
-    {&hf_docsis_dcc_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
-     }
-    },
-
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dccreq,
-    &ett_docsis_dccreq_sf_sub,
-    &ett_docsis_dccreq_ds_params,
-    &ett_docsis_dccreq_tlv,
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_dccreq_tlvlen_bad, { "docsis_dccreq.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-  };
-
-  expert_module_t* expert_docsis_dccreq;
-
-  proto_docsis_dccreq =
-    proto_register_protocol ("DOCSIS Downstream Channel Change Request",
-                             "DOCSIS DCC-REQ", "docsis_dccreq");
-
-  proto_register_field_array (proto_docsis_dccreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_dccreq = expert_register_protocol(proto_docsis_dccreq);
-  expert_register_field_array(expert_docsis_dccreq, ei, array_length(ei));
-
-  docsis_dccreq_handle = register_dissector ("docsis_dccreq", dissect_dccreq, proto_docsis_dccreq);
-}
-
-void
-proto_reg_handoff_docsis_dccreq (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x17, docsis_dccreq_handle);
-}
-
-/*
- * 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/docsis/packet-dccrsp.c b/plugins/docsis/packet-dccrsp.c
deleted file mode 100644 (file)
index b71584f..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-/* packet-dccrsp.c
- * Routines for DCC Response Message  dissection
- * Copyright 2004, Darryl Hymel <darryl.hymel[AT]arrisi.com>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-void proto_register_docsis_dccrsp(void);
-void proto_reg_handoff_docsis_dccrsp(void);
-
-#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
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dccrsp = -1;
-
-static int hf_docsis_dccrsp_tran_id = -1;
-static int hf_docsis_dccrsp_conf_code = -1;
-static int hf_docsis_dcc_type = -1;
-static int hf_docsis_dcc_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;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dccrsp = -1;
-static gint ett_docsis_dccrsp_cm_jump_time = -1;
-static gint ett_docsis_dccrsp_tlv = -1;
-
-static expert_field ei_docsis_dccrsp_tlvlen_bad = EI_INIT;
-
-static dissector_handle_t docsis_dccrsp_handle;
-
-/* Defined in packet-tlv.c */
-extern value_string docsis_conf_code[];
-
-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}
-};
-
-/* Dissection */
-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_dccrsp_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_dccrsp_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_dccrsp_tran_id, 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_dcc_type, tvb, pos, 1, type);
-    pos++;
-    tlv_len_item = proto_tree_add_item_ret_uint (tlv_tree, hf_docsis_dcc_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_dccrsp_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_dccrsp_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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dccrsp (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dccrsp_tran_id ,
-     {
-       "Transaction ID",
-       "docsis_dccrsp.tran_id",
-       FT_UINT16, BASE_DEC, NULL, 0x0,
-       NULL,
-       HFILL
-     }
-    },
-    {&hf_docsis_dccrsp_conf_code ,
-     {
-       "Confirmation Code",
-       "docsis_dccrsp.conf_code",
-       FT_UINT8, BASE_DEC, VALS (docsis_conf_code), 0x0,
-       NULL,
-       HFILL
-     }
-    },
-    {&hf_docsis_dcc_type,
-     {
-      "Type",
-      "docsis_dccrsp.tlvtype",
-      FT_UINT8, BASE_DEC, VALS(dccrsp_tlv_vals), 0x0,
-      NULL,
-      HFILL
-     }
-    },
-    {&hf_docsis_dcc_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
-     }
-    },
-
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dccrsp,
-    &ett_docsis_dccrsp_cm_jump_time,
-    &ett_docsis_dccrsp_tlv,
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_dccrsp_tlvlen_bad, { "docsis_dccrsp.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-  };
-
-  expert_module_t* expert_docsis_dccrsp;
-
-  proto_docsis_dccrsp =
-    proto_register_protocol ("DOCSIS Downstream Channel Change Response",
-                             "DOCSIS DCC-RSP", "docsis_dccrsp");
-
-  proto_register_field_array (proto_docsis_dccrsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_dccrsp = expert_register_protocol(proto_docsis_dccrsp);
-  expert_register_field_array(expert_docsis_dccrsp, ei, array_length(ei));
-
-  docsis_dccrsp_handle = register_dissector ("docsis_dccrsp", dissect_dccrsp, proto_docsis_dccrsp);
-}
-
-void
-proto_reg_handoff_docsis_dccrsp (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x18, docsis_dccrsp_handle);
-
-}
-
-/*
- * 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/docsis/packet-dcd.c b/plugins/docsis/packet-dcd.c
deleted file mode 100644 (file)
index 1e9976f..0000000
+++ /dev/null
@@ -1,1075 +0,0 @@
-/* packet-dcd.c
- * Routines for DCD Message dissection
- * Copyright 2004, Darryl Hymel <darryl.hymel[AT]arrisi.com>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-void proto_register_docsis_dcd(void);
-void proto_reg_handoff_docsis_dcd(void);
-
-#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
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dcd = -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;
-
-/* Initialize the subtree pointers */
-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 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 expert_field ei_docsis_dcd_tlvlen_bad = EI_INIT;
-
-static dissector_handle_t docsis_dcd_handle;
-
-/* Dissection */
-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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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_dcd_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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dcd (void)
-{
-  /* Setup list of header fields  See Section 1.6.1 for details*/
-  static hf_register_info hf[] = {
-    {&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
-     }
-    },
-
-  };
-
-  static gint *ett[] = {
-    &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,
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_dcd_tlvlen_bad, { "docsis_dcd.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-  };
-
-  expert_module_t* expert_docsis_dcd;
-
-  proto_docsis_dcd =
-    proto_register_protocol ("DOCSIS Downstream Channel Descriptor",
-                             "DOCSIS DCD", "docsis_dcd");
-
-  proto_register_field_array (proto_docsis_dcd, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_dcd = expert_register_protocol(proto_docsis_dcd);
-  expert_register_field_array(expert_docsis_dcd, ei, array_length(ei));
-
-  docsis_dcd_handle = register_dissector ("docsis_dcd", dissect_dcd, proto_docsis_dcd);
-}
-
-void
-proto_reg_handoff_docsis_dcd (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x20, docsis_dcd_handle);
-}
-
-/*
- * 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/docsis/packet-dpd.c b/plugins/docsis/packet-dpd.c
deleted file mode 100644 (file)
index 47c509c..0000000
+++ /dev/null
@@ -1,400 +0,0 @@
-/* packet-dpd.c
- * Routines for DOCSIS 3.1 Downstream Profile Descriptor dissection.
- * Copyright 2016, Bruno Verstuyft <bruno.verstuyft@excentis.com>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-
-#define SUBCARRIER_ASSIGNMENT_RANGE_LIST 5
-#define SUBCARRIER_ASSIGNMENT_VECTOR 6
-
-#define SUBCARRIER_ASSIGNMENT_RANGE_CONT 0
-#define SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1 1
-#define SUBCARRIER_ASSIGNMENT_LIST 2
-
-
-void proto_register_docsis_dpd(void);
-void proto_reg_handoff_docsis_dpd(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dpd = -1;
-static int hf_docsis_dpd_tlv_unknown = -1;
-static int hf_docsis_dpd_dschid = -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 expert_field ei_docsis_dpd_tlvlen_bad = EI_INIT;
-static expert_field ei_docsis_dpd_value_unknown = EI_INIT;
-
-
-/* Initialize the subtree pointers */
-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 dissector_handle_t docsis_dpd_handle;
-
-/*BASE_CUSTOM function for subcarrier range*/
-static void
-subc_assign_range(
-    char *buf,
-    guint32 value)
-{
-    g_snprintf(buf, ITEM_LABEL_LENGTH,
-               "%u - %u",
-               value >> 16, value &0xFFFF);
-}
-
-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 NPC 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 NPC 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}
-};
-
-
-/* Dissection */
-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;
-
-  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 (tree, hf_docsis_dpd_tlv_subc_assign_modulation, 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_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_dpd_value_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;
-
-  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)
-      {
-        dissect_dpd_subcarrier_assignment_range_list(tvb, pinfo, tlv_tree, pos, length);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_dpd_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_dpd_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_dpd_value_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_dpd_dschid, 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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dpd(void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dpd_tlv_unknown,
-     {"Unknown TLV", "docsis_dpd.unknown_tlv",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpd_dschid,
-     {"Downstream Channel ID", "docsis_dpd.dschid", FT_UINT8, BASE_DEC, 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}
-    },
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_dpd_tlvlen_bad, { "docsis_dpd.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-    {&ei_docsis_dpd_value_unknown, { "docsis_dpd.valueunknown", PI_PROTOCOL, PI_WARN, "Unknown value", EXPFILL}}
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dpd,
-    &ett_docsis_dpd_tlv,
-    &ett_docsis_dpd_tlvtlv,
-    &ett_docsis_dpd_tlv_subcarrier_assignment,
-    &ett_docsis_dpd_tlv_subcarrier_assignment_vector
-  };
-
-  expert_module_t* expert_docsis_dpd;
-
-  proto_docsis_dpd = proto_register_protocol ("DOCSIS Downstream Profile Descriptor", "DOCSIS DPD", "docsis_dpd");
-
-  proto_register_field_array (proto_docsis_dpd, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_dpd = expert_register_protocol(proto_docsis_dpd);
-  expert_register_field_array(expert_docsis_dpd, ei, array_length(ei));
-  docsis_dpd_handle = register_dissector ("docsis_dpd", dissect_dpd, proto_docsis_dpd);
-}
-
-void
-proto_reg_handoff_docsis_dpd (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x32, docsis_dpd_handle);
-}
-
-/*
- * 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/docsis/packet-dpvreq.c b/plugins/docsis/packet-dpvreq.c
deleted file mode 100644 (file)
index 05db59a..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/* packet-dpvreq.c
- * Routines for DOCSIS 3.0 DOCSIS Path Verify Response 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
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dpvreq(void);
-void proto_reg_handoff_docsis_dpvreq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dpvreq = -1;
-static int hf_docsis_dpvreq_tranid = -1;
-static int hf_docsis_dpvreq_dschan = -1;
-static int hf_docsis_dpvreq_flags = -1;
-static int hf_docsis_dpvreq_us_sf = -1;
-static int hf_docsis_dpvreq_n = -1;
-static int hf_docsis_dpvreq_start = -1;
-static int hf_docsis_dpvreq_end = -1;
-static int hf_docsis_dpvreq_ts_start = -1;
-static int hf_docsis_dpvreq_ts_end = -1;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dpvreq = -1;
-
-static dissector_handle_t docsis_dpvreq_handle;
-
-/* Dissection */
-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_dpvreq_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
-  proto_tree_add_item_ret_uint (dpvreq_tree, hf_docsis_dpvreq_dschan, 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_dpvreq_flags, tvb, 3, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvreq_tree, hf_docsis_dpvreq_us_sf, tvb, 4, 4, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvreq_tree, hf_docsis_dpvreq_n, tvb, 8, 2, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvreq_tree, hf_docsis_dpvreq_start, tvb, 10, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvreq_tree, hf_docsis_dpvreq_end, tvb, 11, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvreq_tree, hf_docsis_dpvreq_ts_start, tvb, 12, 4, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvreq_tree, hf_docsis_dpvreq_ts_end, tvb, 16, 4, ENC_BIG_ENDIAN);
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dpvreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dpvreq_tranid,
-     {"Transaction Id", "docsis_dpvreq.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvreq_dschan,
-     {"Downstream Channel ID", "docsis_dpvreq.dschan",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvreq_flags,
-     {"Flags", "docsis_dpvreq.flags",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvreq_us_sf,
-     {"Upstream Service Flow ID", "docsis_dpvreq.us_sf",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvreq_n,
-     {"N (Measurement avaraging factor)", "docsis_dpvreq.n",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvreq_start,
-     {"Start Reference Point", "docsis_dpvreq.start",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvreq_end,
-     {"End Reference Point", "docsis_dpvreq.end",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvreq_ts_start,
-     {"Timestamp Start", "docsis_dpvreq.ts_start",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvreq_ts_end,
-     {"Timestamp End", "docsis_dpvreq.ts_end",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dpvreq,
-  };
-
-  proto_docsis_dpvreq =
-    proto_register_protocol ("DOCSIS Path Verify Request",
-                             "DOCSIS DPV-REQ", "docsis_dpvreq");
-
-  proto_register_field_array (proto_docsis_dpvreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dpvreq_handle = register_dissector ("docsis_dpvreq", dissect_dpvreq, proto_docsis_dpvreq);
-}
-
-void
-proto_reg_handoff_docsis_dpvreq (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x27, docsis_dpvreq_handle);
-}
-
-/*
- * 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/docsis/packet-dpvrsp.c b/plugins/docsis/packet-dpvrsp.c
deleted file mode 100644 (file)
index c7ffb99..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/* packet-dpvrsp.c
- * Routines for DOCSIS 3.0 DOCSIS Path Verify Request 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
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dpvrsp(void);
-void proto_reg_handoff_docsis_dpvrsp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dpvrsp = -1;
-static int hf_docsis_dpvrsp_tranid = -1;
-static int hf_docsis_dpvrsp_dschan = -1;
-static int hf_docsis_dpvrsp_flags = -1;
-static int hf_docsis_dpvrsp_us_sf = -1;
-static int hf_docsis_dpvrsp_n = -1;
-static int hf_docsis_dpvrsp_start = -1;
-static int hf_docsis_dpvrsp_end = -1;
-static int hf_docsis_dpvrsp_ts_start = -1;
-static int hf_docsis_dpvrsp_ts_end = -1;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dpvrsp = -1;
-
-static dissector_handle_t docsis_dpvrsp_handle;
-
-/* Dissection */
-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_dpvrsp_tranid, tvb, 0, 2, ENC_BIG_ENDIAN, &transid);
-  proto_tree_add_item_ret_uint (dpvrsp_tree, hf_docsis_dpvrsp_dschan, 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_dpvrsp_flags, tvb, 3, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpvrsp_us_sf, tvb, 4, 4, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpvrsp_n, tvb, 8, 2, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpvrsp_start, tvb, 10, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpvrsp_end, tvb, 11, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpvrsp_ts_start, tvb, 12, 4, ENC_BIG_ENDIAN);
-  proto_tree_add_item (dpvrsp_tree, hf_docsis_dpvrsp_ts_end, tvb, 16, 4, ENC_BIG_ENDIAN);
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dpvrsp (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dpvrsp_tranid,
-     {"Transaction Id", "docsis_dpvrsp.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvrsp_dschan,
-     {"Downstream Channel ID", "docsis_dpvrsp.dschan",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvrsp_flags,
-     {"Flags", "docsis_dpvrsp.flags",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvrsp_us_sf,
-     {"Upstream Service Flow ID", "docsis_dpvrsp.us_sf",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvrsp_n,
-     {"N (Measurement avaraging factor)", "docsis_dpvrsp.n",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvrsp_start,
-     {"Start Reference Point", "docsis_dpvrsp.start",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvrsp_end,
-     {"End Reference Point", "docsis_dpvrsp.end",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvrsp_ts_start,
-     {"Timestamp Start", "docsis_dpvrsp.ts_start",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dpvrsp_ts_end,
-     {"Timestamp End", "docsis_dpvrsp.ts_end",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dpvrsp,
-  };
-
-  proto_docsis_dpvrsp =
-    proto_register_protocol ("DOCSIS Path Verify Response",
-                             "DOCSIS DPV-RSP", "docsis_dpvrsp");
-
-  proto_register_field_array (proto_docsis_dpvrsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dpvrsp_handle = register_dissector ("docsis_dpvrsp", dissect_dpvrsp, proto_docsis_dpvrsp);
-}
-
-void
-proto_reg_handoff_docsis_dpvrsp (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x28, docsis_dpvrsp_handle);
-}
-
-/*
- * 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/docsis/packet-dsaack.c b/plugins/docsis/packet-dsaack.c
deleted file mode 100644 (file)
index fbbe629..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* packet-dsaack.c
- * Routines for Dynamic Service Addition Acknowledge dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dsaack(void);
-void proto_reg_handoff_docsis_dsaack(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dsaack = -1;
-static int hf_docsis_dsaack_tranid = -1;
-static int hf_docsis_dsaack_response = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dsaack = -1;
-
-extern value_string docsis_conf_code[];
-
-static dissector_handle_t docsis_dsaack_handle;
-
-/* Dissection */
-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_dsaack_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 (response, docsis_conf_code, "%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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dsaack (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dsaack_tranid,
-     {"Transaction Id", "docsis_dsaack.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      "Service Identifier", HFILL}
-    },
-    {&hf_docsis_dsaack_response,
-     {"Confirmation Code", "docsis_dsaack.confcode",
-      FT_UINT8, BASE_DEC, VALS (docsis_conf_code), 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dsaack,
-  };
-
-  proto_docsis_dsaack =
-    proto_register_protocol ("DOCSIS Dynamic Service Addition Acknowledge",
-                             "DOCSIS DSA-ACK", "docsis_dsaack");
-
-  proto_register_field_array (proto_docsis_dsaack, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dsaack_handle = register_dissector ("docsis_dsaack", dissect_dsaack, proto_docsis_dsaack);
-}
-
-void
-proto_reg_handoff_docsis_dsaack (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x11, docsis_dsaack_handle);
-}
-
-/*
- * 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/docsis/packet-dsareq.c b/plugins/docsis/packet-dsareq.c
deleted file mode 100644 (file)
index 3375c5f..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/* packet-dsareq.c
- * Routines for Dynamic Service Addition Request dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dsareq(void);
-void proto_reg_handoff_docsis_dsareq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dsareq = -1;
-static int hf_docsis_dsareq_tranid = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dsareq = -1;
-
-static dissector_handle_t docsis_dsareq_handle;
-
-/* Dissection */
-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_dsareq_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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dsareq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dsareq_tranid,
-     {"Transaction Id", "docsis_dsareq.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dsareq,
-  };
-
-  proto_docsis_dsareq =
-    proto_register_protocol ("DOCSIS Dynamic Service Addition Request",
-                             "DOCSIS DSA-REQ", "docsis_dsareq");
-
-  proto_register_field_array (proto_docsis_dsareq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dsareq_handle = register_dissector ("docsis_dsareq", dissect_dsareq, proto_docsis_dsareq);
-}
-
-void
-proto_reg_handoff_docsis_dsareq (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x0F, docsis_dsareq_handle);
-}
-
-/*
- * 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/docsis/packet-dsarsp.c b/plugins/docsis/packet-dsarsp.c
deleted file mode 100644 (file)
index 5d85ed3..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* packet-dsarsp.c
- * Routines for Dynamic Service Addition Response dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dsarsp(void);
-void proto_reg_handoff_docsis_dsarsp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dsarsp = -1;
-static int hf_docsis_dsarsp_tranid = -1;
-static int hf_docsis_dsarsp_response = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dsarsp = -1;
-
-static dissector_handle_t docsis_dsarsp_handle;
-
-extern value_string docsis_conf_code[];
-
-/* Dissection */
-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_dsarsp_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 (response, docsis_conf_code, "%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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dsarsp (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dsarsp_tranid,
-     {"Transaction Id", "docsis_dsarsp.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      "Service Identifier", HFILL}
-    },
-    {&hf_docsis_dsarsp_response,
-     {"Confirmation Code", "docsis_dsarsp.confcode",
-      FT_UINT8, BASE_DEC, VALS (docsis_conf_code), 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dsarsp,
-  };
-
-  proto_docsis_dsarsp =
-    proto_register_protocol ("DOCSIS Dynamic Service Addition Response",
-                             "DOCSIS DSA-RSP", "docsis_dsarsp");
-
-  proto_register_field_array (proto_docsis_dsarsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dsarsp_handle = register_dissector ("docsis_dsarsp", dissect_dsarsp, proto_docsis_dsarsp);
-}
-
-void
-proto_reg_handoff_docsis_dsarsp (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x10, docsis_dsarsp_handle);
-
-}
-
-/*
- * 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/docsis/packet-dscack.c b/plugins/docsis/packet-dscack.c
deleted file mode 100644 (file)
index 09803fe..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* packet-dscack.c
- * Routines for Dynamic Service Change Acknowledge dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dscack(void);
-void proto_reg_handoff_docsis_dscack(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dscack = -1;
-static int hf_docsis_dscack_tranid = -1;
-static int hf_docsis_dscack_response = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dscack = -1;
-
-extern value_string docsis_conf_code[];
-
-static dissector_handle_t docsis_dscack_handle;
-
-/* Dissection */
-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_dscack_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 (response, docsis_conf_code, "%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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dscack (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dscack_tranid,
-     {"Transaction Id", "docsis_dscack.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      "Service Identifier", HFILL}
-    },
-    {&hf_docsis_dscack_response,
-     {"Confirmation Code", "docsis_dscack.confcode",
-      FT_UINT8, BASE_DEC, VALS (docsis_conf_code), 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dscack,
-  };
-
-  proto_docsis_dscack =
-    proto_register_protocol ("DOCSIS Dynamic Service Change Acknowledgement",
-                             "DOCSIS DSC-ACK", "docsis_dscack");
-
-  proto_register_field_array (proto_docsis_dscack, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dscack_handle = register_dissector ("docsis_dscack", dissect_dscack, proto_docsis_dscack);
-}
-
-void
-proto_reg_handoff_docsis_dscack (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x14, docsis_dscack_handle);
-}
-
-/*
- * 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/docsis/packet-dscreq.c b/plugins/docsis/packet-dscreq.c
deleted file mode 100644 (file)
index c8f3478..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/* packet-dscreq.c
- * Routines for Dynamic Service Change Request dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dscreq(void);
-void proto_reg_handoff_docsis_dscreq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dscreq = -1;
-static int hf_docsis_dscreq_tranid = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dscreq = -1;
-
-static dissector_handle_t docsis_dscreq_handle;
-
-/* Dissection */
-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_dscreq_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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dscreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dscreq_tranid,
-     {"Transaction Id", "docsis_dscreq.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dscreq,
-  };
-
-  proto_docsis_dscreq =
-    proto_register_protocol ("DOCSIS Dynamic Service Change Request",
-                             "DOCSIS DSC-REQ", "docsis_dscreq");
-
-  proto_register_field_array (proto_docsis_dscreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dscreq_handle = register_dissector ("docsis_dscreq", dissect_dscreq, proto_docsis_dscreq);
-}
-
-void
-proto_reg_handoff_docsis_dscreq (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x12, docsis_dscreq_handle);
-}
-
-/*
- * 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/docsis/packet-dscrsp.c b/plugins/docsis/packet-dscrsp.c
deleted file mode 100644 (file)
index dba9662..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* packet-dscrsp.c
- * Routines for Dynamic Service Change Response dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dscrsp(void);
-void proto_reg_handoff_docsis_dscrsp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dscrsp = -1;
-static int hf_docsis_dscrsp_tranid = -1;
-static int hf_docsis_dscrsp_response = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dscrsp = -1;
-
-extern value_string docsis_conf_code[];
-
-static dissector_handle_t docsis_dscrsp_handle;
-
-/* Dissection */
-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_dscrsp_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 (response, docsis_conf_code, "%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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dscrsp (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dscrsp_tranid,
-     {"Transaction Id", "docsis_dscrsp.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      "Service Identifier", HFILL}
-    },
-    {&hf_docsis_dscrsp_response,
-     {"Confirmation Code", "docsis_dscrsp.confcode",
-      FT_UINT8, BASE_DEC, VALS (docsis_conf_code), 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dscrsp,
-  };
-
-  proto_docsis_dscrsp =
-    proto_register_protocol ("DOCSIS Dynamic Service Change Response",
-                             "DOCSIS DSC-RSP", "docsis_dscrsp");
-
-  proto_register_field_array (proto_docsis_dscrsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dscrsp_handle = register_dissector ("docsis_dscrsp", dissect_dscrsp, proto_docsis_dscrsp);
-}
-
-void
-proto_reg_handoff_docsis_dscrsp (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x13, docsis_dscrsp_handle);
-
-}
-
-/*
- * 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/docsis/packet-dsdreq.c b/plugins/docsis/packet-dsdreq.c
deleted file mode 100644 (file)
index 3c4271c..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/* packet-dsdreq.c
- * Routines for Dynamic Service Delete Request dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dsdreq(void);
-void proto_reg_handoff_docsis_dsdreq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dsdreq = -1;
-static int hf_docsis_dsdreq_tranid = -1;
-static int hf_docsis_dsdreq_rsvd = -1;
-static int hf_docsis_dsdreq_sfid = -1;
-
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dsdreq = -1;
-
-static dissector_handle_t docsis_dsdreq_handle;
-
-/* Dissection */
-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_dsdreq_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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dsdreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dsdreq_tranid,
-     {"Transaction Id", "docsis_dsdreq.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&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}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dsdreq,
-  };
-
-  proto_docsis_dsdreq =
-    proto_register_protocol ("DOCSIS Dynamic Service Delete Request",
-                             "DOCSIS DSD-REQ", "docsis_dsdreq");
-
-  proto_register_field_array (proto_docsis_dsdreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dsdreq_handle = register_dissector ("docsis_dsdreq", dissect_dsdreq, proto_docsis_dsdreq);
-}
-
-void
-proto_reg_handoff_docsis_dsdreq (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x15, docsis_dsdreq_handle);
-}
-
-/*
- * 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/docsis/packet-dsdrsp.c b/plugins/docsis/packet-dsdrsp.c
deleted file mode 100644 (file)
index d9cd0f4..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* packet-dsdrsp.c
- * Routines for Dynamic Service Delete Response dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_dsdrsp(void);
-void proto_reg_handoff_docsis_dsdrsp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_dsdrsp = -1;
-static int hf_docsis_dsdrsp_tranid = -1;
-static int hf_docsis_dsdrsp_confcode = -1;
-static int hf_docsis_dsdrsp_rsvd = -1;
-
-extern value_string docsis_conf_code[];
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_dsdrsp = -1;
-
-static dissector_handle_t docsis_dsdrsp_handle;
-
-/* Dissection */
-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_dsdrsp_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 (confcode, docsis_conf_code, "%d"));
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_dsdrsp (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_dsdrsp_tranid,
-     {"Transaction Id", "docsis_dsdrsp.tranid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dsdrsp_confcode,
-     {"Confirmation Code", "docsis_dsdrsp.confcode",
-      FT_UINT8, BASE_DEC, VALS (docsis_conf_code), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_dsdrsp_rsvd,
-     {"Reserved", "docsis_dsdrsp.rsvd",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_dsdrsp,
-  };
-
-  proto_docsis_dsdrsp =
-    proto_register_protocol ("DOCSIS Dynamic Service Delete Response",
-                             "DOCSIS DSD-RSP", "docsis_dsdrsp");
-
-  proto_register_field_array (proto_docsis_dsdrsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_dsdrsp_handle = register_dissector ("docsis_dsdrsp", dissect_dsdrsp, proto_docsis_dsdrsp);
-}
-
-void
-proto_reg_handoff_docsis_dsdrsp (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x16, docsis_dsdrsp_handle);
-}
-
-/*
- * 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/docsis/packet-intrngreq.c b/plugins/docsis/packet-intrngreq.c
deleted file mode 100644 (file)
index 0ad493e..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/* packet-intrngreq.c
- * Routines for Intial Ranging Request Message dissection
- * Copyright 2003, Brian Wheeler <brian.wheeler[AT]arrisi.com>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_intrngreq = -1;
-static int hf_docsis_intrngreq_down_chid = -1;
-static int hf_docsis_intrngreq_sid = -1;
-static int hf_docsis_intrngreq_up_chid = -1;
-
-void proto_register_docsis_intrngreq(void);
-void proto_reg_handoff_docsis_intrngreq(void);
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_intrngreq = -1;
-
-static dissector_handle_t docsis_intrngreq_handle;
-
-/* Dissection */
-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_intrngreq_down_chid, tvb, 2, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (intrngreq_tree, hf_docsis_intrngreq_up_chid, tvb, 3, 1, ENC_BIG_ENDIAN);
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_intrngreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_intrngreq_sid,
-     {"Service Identifier", "docsis_intrngreq.sid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_intrngreq_down_chid,
-     {"Downstream Channel ID", "docsis_intrngreq.downchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_intrngreq_up_chid,
-     {"Upstream Channel ID", "docsis_intrngreq.upchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_intrngreq,
-  };
-
-  proto_docsis_intrngreq = proto_register_protocol ("DOCSIS Initial Ranging Message",
-                                                    "DOCSIS INT-RNG-REQ",
-                                                    "docsis_intrngreq");
-
-  proto_register_field_array (proto_docsis_intrngreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_intrngreq_handle = register_dissector ("docsis_intrngreq", dissect_intrngreq, proto_docsis_intrngreq);
-}
-
-void
-proto_reg_handoff_docsis_intrngreq (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x1E, docsis_intrngreq_handle);
-}
-
-/*
- * 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:
- */
index 35c4e264a74f31bc12d7db94056078c3296ec9ca..f01dcd441a586719c24252da9e7d2da231b4728c 100644 (file)
@@ -1,7 +1,56 @@
 /* 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
 #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_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_RESERVED12 12
+#define IUC_RESERVED13 13
+#define IUC_RESERVED14 14
+#define IUC_EXPANSION 15
+
+#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
+
+/* 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
+
+/*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
+
+/* 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
 
-void proto_register_docsis_mgmt(void);
-void proto_reg_handoff_docsis_mgmt(void);
 
-/* Initialize the protocol and registered fields */
 static int proto_docsis_mgmt = -1;
+static int proto_docsis_sync = -1;
+static int proto_docsis_ucd = -1;
+static int proto_docsis_map = -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_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_rsvd = -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_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_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_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;
@@ -92,12 +986,187 @@ static int hf_docsis_mgt_version = -1;
 static int hf_docsis_mgt_type = -1;
 static int hf_docsis_mgt_rsvd = -1;
 
-static dissector_table_t docsis_mgmt_dissector_table;
 
-/* Initialize the subtree pointers */
+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_rngreq = -1;
+
+static gint ett_docsis_rngrsp = -1;
+static gint ett_docsis_rngrsptlv = -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_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 dissector_table_t docsis_mgmt_dissector_table;
+static dissector_handle_t docsis_tlv_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) Initial 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"},
@@ -152,113 +1221,6755 @@ static const value_string mgmt_type_vals[] = {
   {0, NULL}
 };
 
-/* Dissection */
-static int
-dissect_macmgmt (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
-  guint32 type, msg_len;
-  proto_item *mgt_hdr_it;
-  proto_tree *mgt_hdr_tree;
-  tvbuff_t *payload_tvb;
+static const value_string on_off_vals[] = {
+  {1, "On"},
+  {2, "Off"},
+  {0, NULL}
+};
 
-  col_set_str (pinfo->cinfo, COL_PROTOCOL, "DOCSIS MGMT");
+static const value_string inhibit_allow_vals[] = {
+  {0, "Inhibit Initial Ranging"},
+  {1, "Ranging Allowed"},
+  {0, NULL},
+};
 
-  col_clear(pinfo->cinfo, COL_INFO);
+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}
+};
 
-  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);
+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_RESERVED12,               "Reserved"},
+  {IUC_RESERVED13,               "Reserved"},
+  {IUC_RESERVED14,               "Reserved"},
+  {IUC_EXPANSION,                "Expanded IUC"},
+  {0, NULL}
+};
 
-  mgt_hdr_it = proto_tree_add_protocol_format (tree, proto_docsis_mgmt, tvb, 0, 20, "Mac Management");
-  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 (mgt_hdr_tree, hf_docsis_mgt_version, tvb, 17, 1, ENC_BIG_ENDIAN);
-  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);
+static const value_string last_cw_len_vals[] = {
+  {1, "Fixed"},
+  {2, "Shortened"},
+  {0, NULL}
+};
 
-  /* Code to Call subdissector */
-  /* sub-dissectors are based on the type field */
-  payload_tvb = tvb_new_subset_length (tvb, 20, msg_len - 6);
+static const value_string ranging_req_vals[] = {
+  {0, "No ranging required"},
+  {1, "Unicast initial ranging required"},
+  {2, "Broadcast initial ranging required"},
+  {0, NULL}
+};
 
-  if (!dissector_try_uint(docsis_mgmt_dissector_table, type, payload_tvb, pinfo, tree))
-    call_data_dissector(payload_tvb, pinfo, tree);
+static const value_string rng_stat_vals[] = {
+  {1, "Continue"},
+  {2, "Abort"},
+  {3, "Success"},
+  {0, NULL}
+};
 
-  return tvb_captured_length(tvb);
-}
+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"},
+  {0, NULL}
+};
 
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_mgmt (void)
-{
-  static hf_register_info hf[] = {
-    {&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,
-      "Message Length", HFILL}
-    },
-    {&hf_docsis_mgt_dsap,
-     {"DSAP [0x00]", "docsis_mgmt.dsap",
-      FT_UINT8, BASE_HEX, NULL, 0x0,
-      "Destination SAP", HFILL}
-    },
-    {&hf_docsis_mgt_ssap,
-     {"SSAP [0x00]", "docsis_mgmt.ssap",
-      FT_UINT8, BASE_HEX, NULL, 0x0,
-      "Source SAP", HFILL}
-    },
-    {&hf_docsis_mgt_control,
-     {"Control [0x03]", "docsis_mgmt.control",
-      FT_UINT8, BASE_HEX, NULL, 0x0,
-      "Control", 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 [0x00]", "docsis_mgmt.rsvd",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Reserved", HFILL}
-    },
-  };
+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 gint *ett[] = {
-    &ett_docsis_mgmt,
-    &ett_mgmt_pay,
-  };
+static const value_string ds_mod_type_vals[] = {
+  {0 , "64 QAM"},
+  {1 , "256 QAM"},
+  {0, NULL}
+};
 
-  proto_docsis_mgmt = proto_register_protocol ("DOCSIS Mac Management",
-                                               "DOCSIS MAC MGMT",
-                                               "docsis_mgmt");
+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}
+};
 
-  proto_register_field_array (proto_docsis_mgmt, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
+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}
+};
 
-  docsis_mgmt_dissector_table = register_dissector_table ("docsis_mgmt",
-                                                          "DOCSIS Mac Management", proto_docsis_mgmt,
-                                                          FT_UINT8, BASE_DEC);
+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"},
+  {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 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 NPC 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 NPC 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[] = {
+  {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 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, int pos, guint16 len)
+{
+  int tlvpos, endtlvpos;
+  guint8 tlvtype;
+  guint32 i, tlvlen;
+  proto_tree *burst_tree;
+  proto_item *burst_item, *burst_len_item;
+
+  tlvpos = pos;
+  endtlvpos = tlvpos + len;
+  proto_tree_add_item (tree, hf_docsis_ucd_iuc, tvb, tlvpos++, 1, ENC_BIG_ENDIAN);
+  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, pos, 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, pos, 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, pos, 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, pos, 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, pos, 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, pos, 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, pos + i, 1, ENC_BIG_ENDIAN);
+          proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_pilot_pattern, tvb, pos + i, 1, ENC_BIG_ENDIAN);
+          proto_tree_add_item (burst_tree, hf_docsis_ofdma_prof_num_add_minislots, tvb, pos + 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, pos, tlvlen, ENC_BIG_ENDIAN);
+        proto_tree_add_item (burst_tree, hf_docsis_ofdma_ir_pow_ctrl_step_size, tvb, pos + 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, 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_map (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
+{
+  guint32 i, numie, upchid, ucd_count;
+  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
+  };
+
+  it = proto_tree_add_item(tree, proto_docsis_map, tvb, 0, -1, ENC_NA);
+  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);
+  proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_numie, tvb, 2, 1, ENC_BIG_ENDIAN, &numie);
+
+  if (upchid > 0)
+    col_add_fstr (pinfo->cinfo, COL_INFO,
+                  "Map Message:  Channel ID = %u (U%u), UCD Count = %u,  # IE's = %u",
+                  upchid, upchid - 1, ucd_count, numie);
+  else
+    col_add_fstr (pinfo->cinfo, COL_INFO,
+                  "Map Message:  Channel ID = %u (Telephony Return), UCD Count = %u, # IE's = %u",
+                  upchid, ucd_count, numie);
+
+  proto_tree_add_item (map_tree, hf_docsis_map_rsvd, tvb, 3, 1, ENC_BIG_ENDIAN);
+  proto_tree_add_item (map_tree, hf_docsis_map_alloc_start, tvb, 4, 4, ENC_BIG_ENDIAN);
+  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;
+  }
+
+  return tvb_captured_length(tvb);
+}
+
+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 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++;
+    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;
+    default:
+      ;
+    }                   /* 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;
+  guint8 type;
+  guint32 i, length;
+  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;
+    }
+
+    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;
+  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);
+    tlv_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 (tlv_tree, hf_docsis_ocd_type, tvb, pos, 1, type);
+    pos++;
+    tlv_len_item = proto_tree_add_item_ret_uint (tlv_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 (tlv_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 (tlv_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 (tlv_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 (tlv_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 (tlv_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, 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 PRIMARY_CAPABILITY_INDICATOR:
+      if (length == 1)
+      {
+        proto_tree_add_item (tlv_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 (tlv_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;
+
+  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 (tree, hf_docsis_dpd_tlv_subc_assign_modulation, 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_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;
+
+  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)
+      {
+        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, 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 (mgt_hdr_tree, hf_docsis_mgt_version, tvb, 17, 1, ENC_BIG_ENDIAN);
+  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);
+
+  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_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_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}
+    },
+    /* 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}
+     },
+     /* 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}
+    },
+    /* 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_rngreq,
+    &ett_docsis_rngrsp,
+    &ett_docsis_rngrsptlv,
+    &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_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}},
+   };
+
+  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 = proto_register_protocol_in_name_only("DOCSIS Upstream Bandwidth Allocation", "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);
 }
@@ -266,12 +7977,51 @@ proto_register_docsis_mgmt (void)
 void
 proto_reg_handoff_docsis_mgmt (void)
 {
-#if 0
-  dissector_handle_t docsis_mgmt_handle;
+  /* 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, create_dissector_handle( dissect_ucd, proto_docsis_ucd ));
+  dissector_add_uint ("docsis_mgmt", MGT_MAP, create_dissector_handle( dissect_map, proto_docsis_map ));
+  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_mgmt_handle = find_dissector ("docsis_mgmt");
-  dissector_add_uint ("docsis", 0x03, docsis_mgmt_handle);
-#endif
+  docsis_tlv_handle = find_dissector ("docsis_tlv");
 }
 
 /*
diff --git a/plugins/docsis/packet-map.c b/plugins/docsis/packet-map.c
deleted file mode 100644 (file)
index 8d13e1e..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-#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_RESERVED12 12
-#define IUC_RESERVED13 13
-#define IUC_RESERVED14 14
-#define IUC_EXPANSION 15
-
-void proto_register_docsis_map(void);
-void proto_reg_handoff_docsis_map(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_map = -1;
-static int hf_docsis_map_upstream_chid = -1;
-static int hf_docsis_map_ucd_count = -1;
-static int hf_docsis_map_numie = -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_rsvd = -1;
-
-static int hf_docsis_map_sid = -1;
-static int hf_docsis_map_iuc = -1;
-static int hf_docsis_map_offset = -1;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_map = -1;
-static gint ett_docsis_map_ie = -1;
-
-static dissector_handle_t docsis_map_handle;
-
-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_RESERVED12,               "Reserved"},
-  {IUC_RESERVED13,               "Reserved"},
-  {IUC_RESERVED14,               "Reserved"},
-  {IUC_EXPANSION,                "Expanded IUC"},
-  {0, NULL}
-};
-
-/* Code to actually dissect the packets */
-static int
-dissect_map (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
-  guint32 i, numie, upchid, ucd_count;
-  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
-  };
-
-  it = proto_tree_add_item(tree, proto_docsis_map, tvb, 0, -1, ENC_NA);
-  map_tree = proto_item_add_subtree (it, ett_docsis_map);
-
-  proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_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);
-  proto_tree_add_item_ret_uint (map_tree, hf_docsis_map_numie, tvb, 2, 1, ENC_BIG_ENDIAN, &numie);
-
-  if (upchid > 0)
-    col_add_fstr (pinfo->cinfo, COL_INFO,
-                  "Map Message:  Channel ID = %u (U%u), UCD Count = %u,  # IE's = %u",
-                  upchid, upchid - 1, ucd_count, numie);
-  else
-    col_add_fstr (pinfo->cinfo, COL_INFO,
-                  "Map Message:  Channel ID = %u (Telephony Return), UCD Count = %u, # IE's = %u",
-                  upchid, ucd_count, numie);
-
-  proto_tree_add_item (map_tree, hf_docsis_map_rsvd, tvb, 3, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (map_tree, hf_docsis_map_alloc_start, tvb, 4, 4, ENC_BIG_ENDIAN);
-  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;
-  }
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_map (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_map_ucd_count,
-     {"UCD Count", "docsis_map.ucdcount",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Map UCD Count", HFILL}
-    },
-    {&hf_docsis_map_upstream_chid,
-     {"Upstream Channel ID", "docsis_map.upchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, 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_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_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}
-    },
-
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_map,
-    &ett_docsis_map_ie,
-  };
-
-  proto_docsis_map =
-    proto_register_protocol ("DOCSIS Upstream Bandwidth Allocation", "DOCSIS MAP", "docsis_map");
-
-  proto_register_field_array (proto_docsis_map, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_map_handle = register_dissector ("docsis_map", dissect_map, proto_docsis_map);
-}
-
-void
-proto_reg_handoff_docsis_map (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x03, docsis_map_handle);
-}
-
-/*
- * 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/docsis/packet-mdd.c b/plugins/docsis/packet-mdd.c
deleted file mode 100644 (file)
index 5573f9d..0000000
+++ /dev/null
@@ -1,1198 +0,0 @@
-/* packet-mdd.c
- *
- * Routines for MDD Message dissection
- * Copyright 2014, Adrian Simionov <adrian.simionov@arrisi.com>
- * Copyright 2007, Bruno Verstuyft <bruno.verstuyft@excentis.com>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-#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
-
-/*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
-
-/* 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
-
-void proto_register_docsis_mdd(void);
-void proto_reg_handoff_docsis_mdd(void);
-
-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 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"},
-  {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 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 unique_unlimited[] = {
-  { 0, "Unlimited" },
-  {0, NULL}
-};
-
-
-/* Windows does not allow data copy between dlls */
-const true_false_string mdd_tfs_on_off = { "On", "Off" };
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_mdd = -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;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_mdd = -1;
-static gint ett_tlv = -1;
-static gint ett_sub_tlv = -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 dissector_handle_t docsis_mdd_handle;
-
-/* Dissection */
-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;
-  guint8 type;
-  guint32 i, length;
-  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_protocol_format (tree, proto_docsis_mdd, tvb, 0, -1,"MDD Message");
-  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;
-    }
-
-    pos += length;
-  }
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void proto_register_docsis_mdd (void)
-{
-  /* Setup list of header fields  See Section 1.6.1 for details*/
-  static hf_register_info hf[] = {
-    {&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}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_mdd,
-    &ett_tlv,
-    &ett_sub_tlv,
-    &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,
-  };
-
-  proto_docsis_mdd =
-    proto_register_protocol ("DOCSIS Mac Domain Description",
-                             "DOCSIS Mdd", "docsis_mdd");
-
-  proto_register_field_array (proto_docsis_mdd, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_mdd_handle = register_dissector ("docsis_mdd", dissect_mdd, proto_docsis_mdd);
-}
-
-void
-proto_reg_handoff_docsis_mdd (void)
-{
-  dissector_add_uint ("docsis_mgmt", 33, docsis_mdd_handle);
-}
-
-/*
- * 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/docsis/packet-ocd.c b/plugins/docsis/packet-ocd.c
deleted file mode 100644 (file)
index cec82e3..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-/* packet-ocd.c
- * Routines for DOCSIS 3.1 OFDM Channel Descriptor dissection.
- * Copyright 2016, Bruno Verstuyft <bruno.verstuyft@excentis.com>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-#include <wsutil/utf8_entities.h>
-
-#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_RANGE_CONT 0
-#define SUBCARRIER_ASSIGNMENT_RANGE_SKIPBY1 1
-#define SUBCARRIER_ASSIGNMENT_LIST 2
-
-
-void proto_register_docsis_ocd(void);
-void proto_reg_handoff_docsis_ocd(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_ocd = -1;
-static int hf_docsis_ocd_tlv_unknown = -1;
-static int hf_docsis_ocd_dschid = -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;
-
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_ocd = -1;
-static gint ett_docsis_ocd_tlv = -1;
-static gint ett_docsis_ocd_tlvtlv = -1;
-
-static expert_field ei_docsis_ocd_tlvlen_bad = EI_INIT;
-static expert_field ei_docsis_ocd_value_unknown = EI_INIT;
-
-static dissector_handle_t docsis_ocd_handle;
-
-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}
-};
-
-/** BASE_CUSTOM formatter for the OFDM spectrum location
- */
-static void
-subc_assign_range(
-    char *buf,
-    guint32 value)
-{
-    g_snprintf(buf, ITEM_LABEL_LENGTH,
-        "%u - %u",
-        value >> 16, value &0xFFFF);
-}
-
-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 unit_name_string local_units_hz = { "Hz", NULL };
-
-/* Dissection */
-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_ocd_value_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;
-  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);
-    tlv_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 (tlv_tree, hf_docsis_ocd_type, tvb, pos, 1, type);
-    pos++;
-    tlv_len_item = proto_tree_add_item_ret_uint (tlv_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 (tlv_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_ocd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case CYCLIC_PREFIX:
-      if (length == 1)
-      {
-        proto_tree_add_item (tlv_tree, hf_docsis_ocd_tlv_cycl_pref, tvb, pos, 1, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_ocd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case ROLL_OFF:
-      if (length == 1)
-      {
-        proto_tree_add_item (tlv_tree, hf_docsis_ocd_tlv_roll_off, tvb, pos, 1, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_ocd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case OFDM_SPECTRUM_LOCATION:
-      if (length == 4)
-      {
-        proto_tree_add_item (tlv_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_ocd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case TIME_INTERLEAVING_DEPTH:
-      if (length == 1)
-      {
-        proto_tree_add_item (tlv_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_ocd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case SUBCARRIER_ASSIGNMENT_RANGE_LIST:
-      if (length >= 5)
-      {
-        dissect_subcarrier_assignment_range_list(tvb, pinfo, tlv_tree, pos, length);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, tlv_len_item, &ei_docsis_ocd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case PRIMARY_CAPABILITY_INDICATOR:
-      if (length == 1)
-      {
-        proto_tree_add_item (tlv_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_ocd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    default:
-      proto_tree_add_item (tlv_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_ocd_dschid, 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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_ocd(void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_ocd_tlv_unknown,
-      {"Unknown TLV", "docsis_ocd.unknown_tlv", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL}
-    },
-    {&hf_docsis_ocd_dschid,
-      {"Downstream Channel ID", "docsis_ocd.dschid", FT_UINT8, BASE_DEC, 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}
-    },
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_ocd_tlvlen_bad, { "docsis_ocd.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-    {&ei_docsis_ocd_value_unknown, { "docsis_ocd.valueunknown", PI_PROTOCOL, PI_WARN, "Unknown value", EXPFILL}}
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_ocd,
-    &ett_docsis_ocd_tlv,
-    &ett_docsis_ocd_tlvtlv,
-  };
-
-  expert_module_t* expert_docsis_ocd;
-
-  proto_docsis_ocd = proto_register_protocol ("DOCSIS OFDM Channel Descriptor", "DOCSIS OCD", "docsis_ocd");
-
-  proto_register_field_array (proto_docsis_ocd, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_ocd = expert_register_protocol(proto_docsis_ocd);
-  expert_register_field_array(expert_docsis_ocd, ei, array_length(ei));
-  docsis_ocd_handle = register_dissector ("docsis_ocd", dissect_ocd, proto_docsis_ocd);
-}
-
-void
-proto_reg_handoff_docsis_ocd (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x31, docsis_ocd_handle);
-}
-
-/*
- * 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/docsis/packet-regack.c b/plugins/docsis/packet-regack.c
deleted file mode 100644 (file)
index 3e288ce..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/* packet-regack.c
- * Routines for Registration Acknowledge Message dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_regack(void);
-void proto_reg_handoff_docsis_regack(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_regack = -1;
-static int hf_docsis_regack_sid = -1;
-static int hf_docsis_regack_response = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Defined in packet-tlv.c */
-extern value_string docsis_conf_code[];
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_regack = -1;
-
-static dissector_handle_t docsis_regack_handle;
-
-/* Dissection */
-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 (response, docsis_conf_code, "%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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_regack (void)
-{
-  static hf_register_info hf[] = {
-    {&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, VALS (docsis_conf_code), 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_regack,
-  };
-
-  proto_docsis_regack =
-    proto_register_protocol ("DOCSIS Registration Acknowledge",
-                             "DOCSIS REG-ACK", "docsis_regack");
-
-  proto_register_field_array (proto_docsis_regack, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_regack_handle = register_dissector ("docsis_regack", dissect_regack, proto_docsis_regack);
-}
-
-void
-proto_reg_handoff_docsis_regack (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x0e, docsis_regack_handle);
-}
-
-/*
- * 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/docsis/packet-regreq.c b/plugins/docsis/packet-regreq.c
deleted file mode 100644 (file)
index 6bf6fb9..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/* packet-regreq.c
- * Routines for Registration Request dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_regreq(void);
-void proto_reg_handoff_docsis_regreq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_regreq = -1;
-static int hf_docsis_regreq_sid = -1;
-
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_regreq = -1;
-
-static dissector_handle_t docsis_tlv_handle;
-static dissector_handle_t docsis_regreq_handle;
-
-/* Code to actually dissect the packets */
-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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_regreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_regreq_sid,
-     {"Service Identifier", "docsis_regreq.sid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_regreq,
-  };
-
-  proto_docsis_regreq =
-    proto_register_protocol ("DOCSIS Registration Requests", "DOCSIS REG-REQ",
-                             "docsis_regreq");
-
-  proto_register_field_array (proto_docsis_regreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_regreq_handle = register_dissector ("docsis_regreq", dissect_regreq, proto_docsis_regreq);
-}
-
-void
-proto_reg_handoff_docsis_regreq (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-
-  dissector_add_uint ("docsis_mgmt", 0x06, docsis_regreq_handle);
-}
-
-/*
- * 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/docsis/packet-regreqmp.c b/plugins/docsis/packet-regreqmp.c
deleted file mode 100644 (file)
index 1afa357..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/* packet-regreqmp.c
- * Routines for REG-REQ-MP Message dissection
- * Copyright 2007, Bruno Verstuyft  <bruno.verstuyft@excentis.com>
- *
- * Based on packet-regreq.c (by Anand V. Narwani <anand[AT]narwani.org>)
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_regreqmp(void);
-void proto_reg_handoff_docsis_regreqmp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_regreqmp = -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 dissector_handle_t docsis_tlv_handle;
-static dissector_handle_t docsis_regreqmp_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_regreqmp = -1;
-
-/* Dissection */
-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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_regreqmp (void)
-{
-  static hf_register_info hf[] = {
-    {&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}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_regreqmp,
-  };
-
-  proto_docsis_regreqmp =
-    proto_register_protocol ("DOCSIS Registration Request Multipart",
-                             "DOCSIS Reg-Req-Mp", "docsis_regreqmp");
-
-  proto_register_field_array (proto_docsis_regreqmp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_regreqmp_handle = register_dissector ("docsis_regreqmp", dissect_regreqmp, proto_docsis_regreqmp);
-}
-
-void
-proto_reg_handoff_docsis_regreqmp (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 44, docsis_regreqmp_handle);
-}
-
-/*
- * 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/docsis/packet-regrsp.c b/plugins/docsis/packet-regrsp.c
deleted file mode 100644 (file)
index 896512e..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* packet-regrsp.c
- * Routines for Registration Response Message dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_regrsp(void);
-void proto_reg_handoff_docsis_regrsp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_regrsp = -1;
-static int hf_docsis_regrsp_sid = -1;
-static int hf_docsis_regrsp_response = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Defined in packet-tlv.c */
-extern value_string docsis_conf_code[];
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_regrsp = -1;
-
-static dissector_handle_t docsis_regrsp_handle;
-
-/* Dissection */
-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 (response, docsis_conf_code, "%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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_regrsp (void)
-{
-  static hf_register_info hf[] = {
-    {&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, VALS (docsis_conf_code), 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_regrsp,
-  };
-
-  proto_docsis_regrsp =
-    proto_register_protocol ("DOCSIS Registration Responses", "DOCSIS REG-RSP",
-                             "docsis_regrsp");
-
-  proto_register_field_array (proto_docsis_regrsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_regrsp_handle = register_dissector ("docsis_regrsp", dissect_regrsp, proto_docsis_regrsp);
-}
-
-void
-proto_reg_handoff_docsis_regrsp (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x07, docsis_regrsp_handle);
-}
-
-/*
- * 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/docsis/packet-regrspmp.c b/plugins/docsis/packet-regrspmp.c
deleted file mode 100644 (file)
index e43d0be..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/* packet-regrspmp.c
- * Routines for REG-RSP-MP Message dissection
- * Copyright 2007, Bruno Verstuyft  <bruno.verstuyft@excentis.com>
- *
- * Based on packet-regrsp.c (by Anand V. Narwani <anand[AT]narwani.org>)
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_regrspmp(void);
-void proto_reg_handoff_docsis_regrspmp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_regrspmp = -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 dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_regrspmp = -1;
-
-static dissector_handle_t docsis_regrspmp_handle;
-
-/* Dissection */
-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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_regrspmp (void)
-{
-  static hf_register_info hf[] = {
-    {&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}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_regrspmp,
-  };
-
-  proto_docsis_regrspmp =
-    proto_register_protocol ("DOCSIS Registration Response Multipart",
-                             "DOCSIS Reg-Rsp-Mp", "docsis_regrspmp");
-
-  proto_register_field_array (proto_docsis_regrspmp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_regrspmp_handle = register_dissector ("docsis_regrspmp", dissect_regrspmp, proto_docsis_regrspmp);
-}
-
-void
-proto_reg_handoff_docsis_regrspmp (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 45, docsis_regrspmp_handle);
-}
-
-/*
- * 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/docsis/packet-rngreq.c b/plugins/docsis/packet-rngreq.c
deleted file mode 100644 (file)
index 2e93daa..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/* packet-rngreq.c
- * Routines for Ranging Request Message dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_rngreq(void);
-void proto_reg_handoff_docsis_rngreq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_rngreq = -1;
-static int hf_docsis_rngreq_down_chid = -1;
-static int hf_docsis_rngreq_sid = -1;
-static int hf_docsis_rngreq_pend_compl = -1;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_rngreq = -1;
-
-static dissector_handle_t docsis_rngreq_handle;
-
-/* Dissection */
-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_rngreq_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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_rngreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_rngreq_sid,
-     {"Service Identifier", "docsis_rngreq.sid",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_rngreq_down_chid,
-     {"Downstream Channel ID", "docsis_rngreq.downchid",
-      FT_UINT8, 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}
-    },
-
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_rngreq,
-  };
-
-  proto_docsis_rngreq = proto_register_protocol ("DOCSIS Range Request Message",
-                                                 "DOCSIS RNG-REQ",
-                                                 "docsis_rngreq");
-
-  proto_register_field_array (proto_docsis_rngreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_rngreq_handle = register_dissector ("docsis_rngreq", dissect_rngreq, proto_docsis_rngreq);
-}
-
-void
-proto_reg_handoff_docsis_rngreq (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x04, docsis_rngreq_handle);
-}
-
-/*
- * 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/docsis/packet-rngrsp.c b/plugins/docsis/packet-rngrsp.c
deleted file mode 100644 (file)
index 7dfc51b..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/* packet-rngrsp.c
- * Routines for Ranging Response Message dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/exceptions.h>
-
-#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
-
-void proto_register_docsis_rngrsp(void);
-void proto_reg_handoff_docsis_rngrsp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_rngrsp = -1;
-static int hf_docsis_rngrsp_type = -1;
-static int hf_docsis_rngrsp_length = -1;
-static int hf_docsis_rngrsp_upstream_chid = -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 const value_string rng_stat_vals[] = {
-  {1, "Continue"},
-  {2, "Abort"},
-  {3, "Success"},
-  {0, NULL}
-};
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_rngrsp = -1;
-static gint ett_docsis_rngrsptlv = -1;
-
-static dissector_handle_t docsis_rngrsp_handle;
-
-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"},
-  {0, NULL}
-};
-
-/* Code to actually dissect the packets */
-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_rngrsp_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++;
-    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;
-    default:
-      ;
-    }                   /* switch(tlvtype) */
-    pos += tlvlen;
-  }                       /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-
-/* this format is require because a script is used to build the C function
-   that calls all the protocol registration.
-*/
-
-void
-proto_register_docsis_rngrsp (void)
-{
-
-/* Setup list of header fields  See Section 1.6.1 for details*/
-  static hf_register_info hf[] = {
-    {&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_upstream_chid,
-     {"Upstream Channel ID", "docsis_rngrsp.upchid",
-      FT_UINT8, 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}
-     },
-
-  };
-
-/* Setup protocol subtree array */
-  static gint *ett[] = {
-    &ett_docsis_rngrsp,
-    &ett_docsis_rngrsptlv,
-  };
-
-/* Register the protocol name and description */
-  proto_docsis_rngrsp = proto_register_protocol ("DOCSIS Ranging Response",
-                                                 "DOCSIS RNG-RSP",
-                                                 "docsis_rngrsp");
-
-/* Required function calls to register the header fields and subtrees used */
-  proto_register_field_array (proto_docsis_rngrsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_rngrsp_handle = register_dissector ("docsis_rngrsp", dissect_rngrsp, proto_docsis_rngrsp);
-}
-
-
-/* If this dissector uses sub-dissector registration add a registration routine.
-   This format is required because a script is used to find these routines and
-   create the code that calls these routines.
-*/
-void
-proto_reg_handoff_docsis_rngrsp (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x05, docsis_rngrsp_handle);
-}
-
-/*
- * 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/docsis/packet-sync.c b/plugins/docsis/packet-sync.c
deleted file mode 100644 (file)
index 021d099..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/* packet-sync.c
- * Routines for Sync Message dissection
- * Copyright 2007, Bruno Verstuyft  <bruno.verstuyft@excentis.com>
- *
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_sync(void);
-void proto_reg_handoff_docsis_sync(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_sync = -1;
-static int hf_docsis_sync_cmts_timestamp = -1;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_sync = -1;
-
-static dissector_handle_t docsis_sync_handle;
-
-/* Dissection */
-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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_sync (void)
-{
-  /* Setup list of header fields  See Section 1.6.1 for details*/
-  static hf_register_info hf[] = {
-    {&hf_docsis_sync_cmts_timestamp,
-     {"CMTS Timestamp", "docsis_sync.cmts_timestamp",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      "Sync CMTS Timestamp", HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_sync,
-  };
-
-  proto_docsis_sync =
-    proto_register_protocol ("DOCSIS Synchronisation Message", "SYNC Message", "docsis_sync");
-
-  proto_register_field_array (proto_docsis_sync, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_sync_handle = register_dissector ("docsis_sync", dissect_sync, proto_docsis_sync);
-}
-
-void
-proto_reg_handoff_docsis_sync (void)
-{
-  dissector_add_uint ("docsis_mgmt", 1, docsis_sync_handle);
-}
-
-/*
- * 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/docsis/packet-tlv-cmctrl.c b/plugins/docsis/packet-tlv-cmctrl.c
deleted file mode 100644 (file)
index b51d6d2..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-/* packet-tlv-cmctrl.c
- * Routines to Dissect TLV's for CM-Control Messages
- * Copyright 2010, Guido Reismueller <g.reismueller[AT]avm.de>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-#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
-
-void proto_register_cmctrl_tlv(void);
-void proto_reg_handoff_cmctrl_tlv(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_cmctrl_tlv = -1;
-static int hf_cmctrl_tlv_mute = -1;
-static int hf_cmctrl_tlv_mute_timeout = -1;
-static int hf_cmctrl_tlv_reinit = -1;
-static int hf_cmctrl_tlv_disable_fwd = -1;
-static int hf_cmctrl_tlv_ds_event = -1;
-/* static int hf_cmctrl_tlv_us_event = -1; */
-static int hf_cmctrl_tlv_event = -1;
-
-static int hf_ds_event_ch_id = -1;
-static int hf_ds_event_mask = -1;
-
-static int hf_us_event_ch_id = -1;
-static int hf_us_event_mask = -1;
-
-/* Initialize the subtree pointers */
-static gint ett_cmctrl_tlv = -1;
-static gint ett_cmctrl_tlv_ds_event = -1;
-static gint ett_cmctrl_tlv_us_event = -1;
-
-static expert_field ei_docsis_cmctrl_tlv_tlvlen_bad = EI_INIT;
-
-/* Dissection */
-static void
-dissect_ds_event(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
-  guint8 type, length;
-  proto_tree *event_tree;
-  proto_item *event_item;
-  int pos = start;
-
-  event_tree =
-    proto_tree_add_subtree_format(tree, tvb, start, len, ett_cmctrl_tlv_ds_event, &event_item,
-                         "Override Downstream Status Event Event Mask (Length = %u)", len);
-
-  while (pos < (start + len))
-    {
-      type = tvb_get_guint8 (tvb, pos++);
-      length = tvb_get_guint8 (tvb, pos++);
-      switch (type)
-        {
-        case DS_EVENT_CH_ID:
-      if (length == 1)
-        {
-          proto_tree_add_item (event_tree, hf_ds_event_ch_id,
-                               tvb, pos, length, ENC_BIG_ENDIAN);
-        }
-      else
-        {
-          expert_add_info_format(pinfo, event_item, &ei_docsis_cmctrl_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
-        }
-          break;
-        case DS_EVENT_MASK:
-      if (length == 2)
-        {
-          proto_tree_add_item (event_tree, hf_ds_event_mask,
-                               tvb, pos, length, ENC_NA);
-        }
-      else
-        {
-          expert_add_info_format(pinfo, event_item, &ei_docsis_cmctrl_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
-        }
-          break;
-        }                       /* switch */
-      pos = pos + length;
-    }                           /* while */
-}
-
-static void
-dissect_us_event(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len)
-{
-  guint8 type, length;
-  proto_tree *event_tree;
-  proto_item *event_item;
-  int pos = start;
-
-  event_tree =
-    proto_tree_add_subtree_format(tree, tvb, start, len, ett_cmctrl_tlv_us_event, &event_item,
-                         "Override Upstream Status Enable Event Mask (Length = %u)", len);
-
-  while (pos < (start + len))
-    {
-      type = tvb_get_guint8 (tvb, pos++);
-      length = tvb_get_guint8 (tvb, pos++);
-      switch (type)
-        {
-        case US_EVENT_CH_ID:
-      if (length == 1)
-        {
-          proto_tree_add_item (event_tree, hf_us_event_ch_id,
-                               tvb, pos, length, ENC_BIG_ENDIAN);
-        }
-      else
-        {
-          expert_add_info_format(pinfo, event_item, &ei_docsis_cmctrl_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
-        }
-          break;
-        case US_EVENT_MASK:
-      if (length == 2)
-        {
-          proto_tree_add_item (event_tree, hf_us_event_mask,
-                               tvb, pos, length, ENC_NA);
-        }
-      else
-        {
-          expert_add_info_format(pinfo, event_item, &ei_docsis_cmctrl_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
-        }
-          break;
-        }                       /* switch */
-      pos = pos + length;
-    }                           /* while */
-}
-
-static int
-dissect_cmctrl_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;
-
-  total_len = tvb_reported_length_remaining (tvb, 0);
-
-  it =
-    proto_tree_add_protocol_format (tree, proto_cmctrl_tlv, tvb, 0,
-                                    total_len, "TLV Data");
-  tlv_tree = proto_item_add_subtree (it, ett_cmctrl_tlv);
-
-  while (pos < total_len)
-    {
-      type = tvb_get_guint8 (tvb, pos++);
-      length = tvb_get_guint8 (tvb, pos++);
-      switch (type)
-        {
-        case CM_CTRL_MUTE:
-          if (length == 1)
-            {
-              proto_tree_add_item (tlv_tree, hf_cmctrl_tlv_mute,
-                                   tvb, pos, length, ENC_BIG_ENDIAN);
-            }
-          else
-            {
-              expert_add_info_format(pinfo, it, &ei_docsis_cmctrl_tlv_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_cmctrl_tlv_mute_timeout,
-                                   tvb, pos, length, ENC_BIG_ENDIAN);
-            }
-          else
-            {
-              expert_add_info_format(pinfo, it, &ei_docsis_cmctrl_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
-            }
-          break;
-        case CM_CTRL_REINIT:
-          if (length == 1)
-            {
-              proto_tree_add_item (tlv_tree, hf_cmctrl_tlv_reinit,
-                                   tvb, pos, length, ENC_BIG_ENDIAN);
-            }
-          else
-            {
-               expert_add_info_format(pinfo, it, &ei_docsis_cmctrl_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
-            }
-          break;
-        case CM_CTRL_DISABLE_FWD:
-          if (length == 1)
-            {
-              proto_tree_add_item (tlv_tree, hf_cmctrl_tlv_disable_fwd,
-                                   tvb, pos, length, ENC_BIG_ENDIAN);
-            }
-          else
-            {
-               expert_add_info_format(pinfo, it, &ei_docsis_cmctrl_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
-            }
-          break;
-        case CM_CTRL_DS_EVENT:
-          if (length == 1)
-            proto_tree_add_item (tlv_tree, hf_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_cmctrl_tlv_ds_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_cmctrl_tlv_event,
-                                   tvb, pos, length, ENC_NA);
-            }
-          else
-            {
-               expert_add_info_format(pinfo, it, &ei_docsis_cmctrl_tlv_tlvlen_bad, "Wrong TLV length: %u", length);
-            }
-          break;
-
-        } /* switch */
-      pos = pos + length;
-    } /* while */
-    return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_cmctrl_tlv (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_cmctrl_tlv_mute,
-     {"1 Upstream Channel RF Mute", "cmctrl_tlv.mute",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Upstream Channel RF Mute", HFILL}
-    },
-    {&hf_cmctrl_tlv_mute_timeout,
-     {"2 RF Mute Timeout Interval", "cmctrl_tlv.mute_timeout",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      "RF Mute Timeout Interval", HFILL}
-    },
-    {&hf_cmctrl_tlv_reinit,
-     {"3 CM Reinitialize", "cmctrl_tlv.reinit",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "CM Reinitialize", HFILL}
-    },
-    {&hf_cmctrl_tlv_disable_fwd,
-     {"4 Disable Forwarding", "cmctrl_tlv.disable_fwd",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Disable Forwarding", HFILL}
-    },
-    {&hf_cmctrl_tlv_ds_event,
-     {"5 Override Downstream Events", "cmctrl_tlv.ds_event",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Override Downstream Events", HFILL}
-    },
-    {&hf_ds_event_ch_id,
-     {".1 Downstream Channel ID", "cmctrl_tlv.ds_event.chid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Downstream Channel ID", HFILL}
-    },
-    {&hf_ds_event_mask,
-     {".2 Downstream Status Event Enable Bitmask", "cmctrl_tlv.ds_event.mask",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Downstream Status Event Enable Bitmask", HFILL}
-    },
-#if 0
-    {&hf_cmctrl_tlv_us_event,
-     {"6 Override Upstream Events", "cmctrl_tlv.us_event",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Override Downstream Events", HFILL}
-    },
-#endif
-    {&hf_us_event_ch_id,
-     {".1 Upstream Channel ID", "cmctrl_tlv.us_event.chid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Upstream Channel ID", HFILL}
-    },
-    {&hf_us_event_mask,
-     {".2 Upstream Status Event Enable Bitmask", "cmctrl_tlv.us_event.mask",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Upstream Status Event Enable Bitmask", HFILL}
-    },
-    {&hf_cmctrl_tlv_event,
-     {"7 Override Non-Channel-Specific Events", "cmctrl_tlv.event",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Override Non-Channel-Specific Events", HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_cmctrl_tlv,
-    &ett_cmctrl_tlv_ds_event,
-    &ett_cmctrl_tlv_us_event,
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_cmctrl_tlv_tlvlen_bad, { "cmctrl_tlv.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-  };
-
-  expert_module_t* expert_docsis_cmctrl_tlv;
-
-  proto_cmctrl_tlv = proto_register_protocol ("DOCSIS CM-CTRL TLV's",
-                                              "DOCSIS CM-CTRL TLVs", "cmctrl_tlv");
-
-  proto_register_field_array (proto_cmctrl_tlv, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_cmctrl_tlv = expert_register_protocol(proto_cmctrl_tlv);
-  expert_register_field_array(expert_docsis_cmctrl_tlv, ei, array_length(ei));
-
-  register_dissector ("cmctrl_tlv", dissect_cmctrl_tlv, proto_cmctrl_tlv);
-}
-
-void
-proto_reg_handoff_cmctrl_tlv (void)
-{
-#if 0
-  dissector_handle_t cmctrl_tlv_handle;
-
-  cmctrl_tlv_handle = find_dissector ("cmctrl_tlv");
-
-  dissector_add_uint ("docsis", 0xFE, cmctrl_tlv_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:
- */
index 0d0bc0a3a4bc3f9add71bb6ed04ac38c8d7e555f..05f44e77852e51714e3b4a346aaa2461599876c9 100644 (file)
@@ -622,6 +622,8 @@ const value_string docsis_conf_code[] = {
   {0, NULL}
 };
 
+value_string_ext docsis_conf_code_ext = VALUE_STRING_EXT_INIT(docsis_conf_code);
+
 static const value_string us_ch_action_vals[] = {
   {0, "No Action"},
   {1, "Add"},
@@ -4751,7 +4753,7 @@ proto_register_docsis_tlv (void)
     },
     {&hf_docsis_tlv_svc_unavail_code,
      {"Service Not Available (Code)", "docsis_tlv.svcunavail.code",
-      FT_UINT8, BASE_DEC, VALS(docsis_conf_code), 0x0,
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
       NULL, HFILL}
     },
     {&hf_docsis_tlv_cpe_ethernet,
@@ -4845,7 +4847,7 @@ proto_register_docsis_tlv (void)
     },
     {&hf_docsis_tlv_clsfr_err_code,
      {"..2 Error Code", "docsis_tlv.clsfr.err.code",
-      FT_UINT8, BASE_DEC, VALS(docsis_conf_code), 0x0,
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
       "TCP/UDP Destination Port End", HFILL}
     },
     {&hf_docsis_tlv_clsfr_err_msg,
@@ -5005,7 +5007,7 @@ proto_register_docsis_tlv (void)
     },
     {&hf_docsis_tlv_sflow_err_code,
      {"..2 Error Code", "docsis_tlv.sflow.err.code",
-      FT_UINT8, BASE_DEC, VALS(docsis_conf_code), 0x0,
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
       "Error Code", HFILL}
     },
     {&hf_docsis_tlv_sflow_err_msg,
@@ -5517,7 +5519,7 @@ proto_register_docsis_tlv (void)
     },
     {&hf_docsis_tcc_err_code,
      {"..2 Error Code", "docsis_tlv.tcc.err.code",
-      FT_UINT8, BASE_DEC, VALS(docsis_conf_code), 0x0,
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
       "Error Code", HFILL}
     },
     {&hf_docsis_tcc_err_msg,
@@ -5801,7 +5803,7 @@ proto_register_docsis_tlv (void)
     },
     {&hf_docsis_tlv_rcc_err_code,
      {".4 Error Code", "docsis_tlv.rcc.err.code",
-      FT_UINT8, BASE_DEC, VALS (docsis_conf_code), 0x0,
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &docsis_conf_code_ext, 0x0,
       "Error Code", HFILL}
     },
     {&hf_docsis_tlv_rcc_err_msg,
index cffcbac2081fe306a83938cf6d91f2f5b5142f73..dbf1a81f1f6fc88ad69f8675339ef78ad41a9bda 100644 (file)
 #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/docsis/packet-type29ucd.c b/plugins/docsis/packet-type29ucd.c
deleted file mode 100644 (file)
index 893d445..0000000
+++ /dev/null
@@ -1,1039 +0,0 @@
-/* packet-type29ucd.c
- *
- * 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>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-#define type29ucd_SYMBOL_RATE 1
-#define type29ucd_FREQUENCY 2
-#define type29ucd_PREAMBLE 3
-#define type29ucd_BURST_DESCR5 5
-#define type29ucd_EXT_PREAMBLE 6
-#define type29ucd_SCDMA_MODE_ENABLE 7
-#define type29ucd_SCDMA_SPREADING_INTERVAL 8
-#define type29ucd_SCDMA_CODES_PER_MINI_SLOT 9
-#define type29ucd_SCDMA_ACTIVE_CODES 10
-#define type29ucd_SCDMA_CODE_HOPPING_SEED 11
-#define type29ucd_SCDMA_US_RATIO_NUM 12
-#define type29ucd_SCDMA_US_RATIO_DENOM 13
-#define type29ucd_SCDMA_TIMESTAMP_SNAPSHOT 14
-#define type29ucd_MAINTAIN_POWER_SPECTRAL_DENSITY 15
-#define type29ucd_RANGING_REQUIRED 16
-#define type29ucd_MAX_SCHEDULED_CODES 17
-#define type29ucd_RANGING_HOLD_OFF_PRIORITY_FIELD 18
-#define type29ucd_RANGING_CHANNEL_CLASS_ID 19
-
-#define type29ucd_MODULATION 1
-#define type29ucd_DIFF_ENCODING 2
-#define type29ucd_PREAMBLE_LEN 3
-#define type29ucd_PREAMBLE_VAL_OFF 4
-#define type29ucd_FEC 5
-#define type29ucd_FEC_CODEWORD 6
-#define type29ucd_SCRAMBLER_SEED 7
-#define type29ucd_MAX_BURST 8
-#define type29ucd_GUARD_TIME 9
-#define type29ucd_LAST_CW_LEN 10
-#define type29ucd_SCRAMBLER_ONOFF 11
-#define type29ucd_RS_INT_DEPTH 12
-#define type29ucd_RS_INT_BLOCK 13
-#define type29ucd_PREAMBLE_TYPE 14
-#define type29ucd_SCMDA_SCRAMBLER_ONOFF 15
-#define type29ucd_SCDMA_CODES_PER_SUBFRAME 16
-#define type29ucd_SCDMA_FRAMER_INT_STEP_SIZE 17
-#define type29ucd_TCM_ENABLED 18
-
-#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_RESERVED12 12
-#define IUC_RESERVED13 13
-#define IUC_RESERVED14 14
-#define IUC_EXPANSION 15
-
-void proto_register_docsis_type29ucd(void);
-void proto_reg_handoff_docsis_type29ucd(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_type29ucd = -1;
-
-static int hf_docsis_type29ucd_upstream_chid = -1;
-static int hf_docsis_type29ucd_config_ch_cnt = -1;
-static int hf_docsis_type29ucd_mini_slot_size = -1;
-static int hf_docsis_type29ucd_down_chid = -1;
-static int hf_docsis_type29ucd_type = -1;
-static int hf_docsis_type29ucd_length = -1;
-static int hf_docsis_type29ucd_burst_type = -1;
-static int hf_docsis_type29ucd_burst_length = -1;
-static int hf_docsis_type29ucd_symbol_rate = -1;
-static int hf_docsis_type29ucd_frequency = -1;
-static int hf_docsis_type29ucd_preamble_pat = -1;
-static int hf_docsis_type29ucd_iuc = -1;
-static int hf_docsis_type29ucd_ext_preamble = -1;
-static int hf_docsis_type29ucd_scdma_mode_enable = -1;
-static int hf_docsis_type29ucd_scdma_spreading_interval = -1;
-static int hf_docsis_type29ucd_scdma_codes_per_mini_slot = -1;
-static int hf_docsis_type29ucd_scdma_active_codes = -1;
-static int hf_docsis_type29ucd_scdma_code_hopping_seed = -1;
-static int hf_docsis_type29ucd_scdma_us_ratio_num = -1;
-static int hf_docsis_type29ucd_scdma_us_ratio_denom = -1;
-static int hf_docsis_type29ucd_scdma_timestamp_snapshot = -1;
-static int hf_docsis_type29ucd_maintain_power_spectral_density = -1;
-static int hf_docsis_type29ucd_ranging_required = -1;
-static int hf_docsis_type29ucd_rnghoff_cm = -1;
-static int hf_docsis_type29ucd_rnghoff_erouter = -1;
-static int hf_docsis_type29ucd_rnghoff_emta = -1;
-static int hf_docsis_type29ucd_rnghoff_estb = -1;
-static int hf_docsis_type29ucd_rnghoff_rsvd = -1;
-static int hf_docsis_type29ucd_rnghoff_id_ext = -1;
-static int hf_docsis_type29ucd_chan_class_id_cm = -1;
-static int hf_docsis_type29ucd_chan_class_id_erouter = -1;
-static int hf_docsis_type29ucd_chan_class_id_emta = -1;
-static int hf_docsis_type29ucd_chan_class_id_estb = -1;
-static int hf_docsis_type29ucd_chan_class_id_rsvd = -1;
-static int hf_docsis_type29ucd_chan_class_id_id_ext = -1;
-static int hf_docsis_type29ucd_max_scheduled_codes = -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_scdma_scrambler_onoff = -1;
-static int hf_docsis_scdma_codes_per_subframe = -1;
-static int hf_docsis_scdma_framer_int_step_size = -1;
-static int hf_docsis_tcm_enabled = -1;
-
-static expert_field ei_docsis_type29ucd_tlvlen_bad = EI_INIT;
-static expert_field ei_docsis_type29ucd_tlvtype_unknown = EI_INIT;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_type29ucd = -1;
-static gint ett_docsis_type29tlv = -1;
-static gint ett_docsis_type29_burst_tlv = -1;
-
-static dissector_handle_t docsis_type29ucd_handle;
-
-static const value_string channel_tlv_vals[] _U_ = {
-  {type29ucd_SYMBOL_RATE,                     "Symbol Rate"},
-  {type29ucd_FREQUENCY,                       "Frequency"},
-  {type29ucd_PREAMBLE,                        "Preamble Pattern"},
-  {type29ucd_BURST_DESCR5,                    "Burst Descriptor Type 5"},
-  {type29ucd_EXT_PREAMBLE,                    "Extended Preamble Pattern"},
-  {type29ucd_SCDMA_MODE_ENABLE,               "SCDMA Mode Enabled"},
-  {type29ucd_SCDMA_SPREADING_INTERVAL,        "SCDMA Spreading Intervals per Frame"},
-  {type29ucd_SCDMA_CODES_PER_MINI_SLOT,       "SCDMA Codes per Mini-slot"},
-  {type29ucd_SCDMA_ACTIVE_CODES,              "SCDMA Number of Active Codes"},
-  {type29ucd_SCDMA_CODE_HOPPING_SEED,         "SCDMA Code Hopping Seed"},
-  {type29ucd_SCDMA_US_RATIO_NUM,              "SCDMA US ratio numerator M"},
-  {type29ucd_SCDMA_US_RATIO_DENOM,            "SCDMA US ratio denominator N"},
-  {type29ucd_SCDMA_TIMESTAMP_SNAPSHOT,        "SCDMA Timestamp Snapshot"},
-  {type29ucd_MAINTAIN_POWER_SPECTRAL_DENSITY, "Maintain Power Spectral Density"},
-  {type29ucd_RANGING_REQUIRED,                "Ranging Required"},
-  {type29ucd_MAX_SCHEDULED_CODES,             "S-CDMA Maximum Scheduled Codes"},
-  {type29ucd_RANGING_HOLD_OFF_PRIORITY_FIELD, "Ranging Hold-Off Priority Field"},
-  {type29ucd_RANGING_CHANNEL_CLASS_ID,        "Ranging Channel Class ID"},
-  {0, NULL}
-};
-
-static const value_string burst_tlv_vals[] = {
-  {type29ucd_MODULATION,                      "Modulation Type"},
-  {type29ucd_DIFF_ENCODING,                   "Differential Encoding"},
-  {type29ucd_PREAMBLE_LEN,                    "Preamble Length"},
-  {type29ucd_PREAMBLE_VAL_OFF,                "Preamble Value Offset"},
-  {type29ucd_FEC,                             "FEC Error Correction (T)"},
-  {type29ucd_FEC_CODEWORD,                    "FEC Codeword Information Bytes (k)"},
-  {type29ucd_SCRAMBLER_SEED,                  "Scrambler Seed"},
-  {type29ucd_MAX_BURST,                       "Maximum Burst Size"},
-  {type29ucd_GUARD_TIME,                      "Guard Time Size"},
-  {type29ucd_LAST_CW_LEN,                     "Last Codeword Length"},
-  {type29ucd_SCRAMBLER_ONOFF,                 "Scrambler on/off"},
-  {type29ucd_RS_INT_DEPTH,                    "R-S Interleaver Depth (Ir)"},
-  {type29ucd_RS_INT_BLOCK,                    "R-S Interleaver Block Size (Br)"},
-  {type29ucd_PREAMBLE_TYPE,                   "Preamble Type"},
-  {type29ucd_SCMDA_SCRAMBLER_ONOFF,           "S-CDMA Spreader on/off"},
-  {type29ucd_SCDMA_CODES_PER_SUBFRAME,        "S-CDMA Codes per Subframe"},
-  {type29ucd_SCDMA_FRAMER_INT_STEP_SIZE,      "S-CDMA Framer Interleaving Step Size"},
-  {type29ucd_TCM_ENABLED,                     "TCM Encoding"},
-  {0, NULL}
-};
-
-static const value_string on_off_vals[] = {
-  {1, "On"},
-  {2, "Off"},
-  {0, NULL}
-};
-
-static const value_string allow_inhibit_vals[] = {
-  {0, "Ranging Allowed"},
-  {1, "Inhibit Initial Ranging"},
-  {0, NULL},
-};
-
-static const value_string inhibit_allow_vals[] = {
-  {0, "Inhibit Initial Ranging"},
-  {1, "Ranging Allowed"},
-  {0, NULL},
-};
-
-static const value_string mod_vals2[] = {
-  {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_vals2[] = {
-  {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_RESERVED12,               "Reserved 12"},
-  {IUC_RESERVED13,               "Reserved 13"},
-  {IUC_RESERVED14,               "Reserved 14"},
-  {IUC_EXPANSION,                "IUC Expansion"},
-  {0, NULL}
-};
-
-static const value_string last_cw_len_vals[] = {
-  {1, "Fixed"},
-  {2, "Shortened"},
-  {0, NULL}
-};
-
-static const value_string max_scheduled_codes_vals[] = {
-  {1, "Enabled."},
-  {2, "Disabled."},
-  {0, NULL}
-};
-
-/* Dissection */
-static void
-dissect_type29ucd_burstdescriptor(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, guint16 start, guint16 length)
-{
-  guint16 endtlvpos, pos;
-  proto_tree *type29ucd_burst_tree;
-  proto_item *type29ucd_burst_item, *type29ucd_burst_len_item;
-  guint8 tlvtype;
-  guint32 tlvlen;
-
-  pos = start;
-  endtlvpos = pos + length;
-  proto_tree_add_item (tree, hf_docsis_type29ucd_iuc, tvb, pos++, 1, ENC_BIG_ENDIAN);
-
-  while (pos < endtlvpos)
-  {
-    tlvtype = tvb_get_guint8 (tvb, pos);
-    type29ucd_burst_tree = proto_tree_add_subtree (tree, tvb, pos, -1,
-                                                   ett_docsis_type29_burst_tlv, &type29ucd_burst_item,
-                                                   val_to_str(tlvtype, burst_tlv_vals,
-                                                   "Unknown TLV (%u)"));
-    proto_tree_add_uint (type29ucd_burst_tree, hf_docsis_type29ucd_burst_type, tvb, pos++, 1, tlvtype);
-    type29ucd_burst_len_item = proto_tree_add_item_ret_uint (type29ucd_burst_tree, hf_docsis_type29ucd_burst_length, tvb, pos++, 1, ENC_NA, &tlvlen);
-    proto_item_set_len(type29ucd_burst_item, tlvlen + 2);
-    switch (tlvtype)
-    {
-    case type29ucd_MODULATION:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_mod_type, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_DIFF_ENCODING:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_diff_encoding, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_PREAMBLE_LEN:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_preamble_len, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_PREAMBLE_VAL_OFF:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_preamble_val_off, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_FEC:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_fec, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_FEC_CODEWORD:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_fec_codeword, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCRAMBLER_SEED:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_scrambler_seed, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_MAX_BURST:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_max_burst, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_GUARD_TIME:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_guard_time, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_LAST_CW_LEN:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_last_cw_len, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCRAMBLER_ONOFF:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_burst_scrambler_onoff, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_RS_INT_DEPTH:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_rs_int_depth, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_RS_INT_BLOCK:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_rs_int_block, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_PREAMBLE_TYPE:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_preamble_type, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCMDA_SCRAMBLER_ONOFF:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_scdma_scrambler_onoff, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCDMA_CODES_PER_SUBFRAME:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_scdma_codes_per_subframe, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCDMA_FRAMER_INT_STEP_SIZE:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_scdma_framer_int_step_size, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_TCM_ENABLED:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type29ucd_burst_tree, hf_docsis_tcm_enabled, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29ucd_burst_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    default:
-      expert_add_info_format(pinfo, type29ucd_burst_item, &ei_docsis_type29ucd_tlvtype_unknown, "Unknown TLV type: %u", tlvtype);
-      break;
-    }  /* switch(tlvtype) */
-    pos = pos + tlvlen;
-  } /* while (pos < endtlvpos) */
-}
-
-static int
-dissect_type29ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
-  guint16 pos;
-  guint8 type, symrate;
-  guint32 length, upchid;
-  proto_tree *type29ucd_tree;
-  proto_item *type29ucd_item;
-  proto_tree *type29tlv_tree;
-  proto_item *type29tlv_item, *type29tlv_len_item;
-
-  type29ucd_item = proto_tree_add_item(tree, proto_docsis_type29ucd, tvb, 0, -1, ENC_NA);
-  type29ucd_tree = proto_item_add_subtree (type29ucd_item, ett_docsis_type29ucd);
-  proto_tree_add_item_ret_uint (type29ucd_tree, hf_docsis_type29ucd_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &upchid);
-  proto_tree_add_item (type29ucd_tree, hf_docsis_type29ucd_config_ch_cnt, tvb, 1, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (type29ucd_tree, hf_docsis_type29ucd_mini_slot_size, tvb, 2, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (type29ucd_tree, hf_docsis_type29ucd_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 29 UCD Message: Channel ID = %u (U%u)", upchid,
-                  upchid - 1);
-  else
-    col_add_fstr (pinfo->cinfo, COL_INFO,
-                  "Type 29 UCD Message: Channel ID = %u (Telephony Return)",
-                  upchid);
-
-  pos = 4;
-  while (tvb_reported_length_remaining(tvb, pos) > 0)
-  {
-    type = tvb_get_guint8 (tvb, pos);
-    type29tlv_tree = proto_tree_add_subtree(type29ucd_tree, tvb, pos, -1,
-                                            ett_docsis_type29tlv, &type29tlv_item,
-                                            val_to_str(type, channel_tlv_vals,
-                                                       "Unknown TLV (%u)"));
-    proto_tree_add_uint (type29tlv_tree, hf_docsis_type29ucd_type, tvb, pos, 1, type);
-    pos++;
-    type29tlv_len_item = proto_tree_add_item_ret_uint (type29tlv_tree, hf_docsis_type29ucd_length,
-                               tvb, pos, 1, ENC_NA, &length);
-    pos++;
-    proto_item_set_len(type29tlv_item, length + 2);
-    switch (type)
-    {
-    case type29ucd_SYMBOL_RATE:
-      if (length == 1)
-      {
-        symrate = tvb_get_guint8 (tvb, pos);
-        proto_tree_add_uint (type29tlv_tree, hf_docsis_type29ucd_symbol_rate, tvb, pos, length, symrate * 160);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_FREQUENCY:
-      if (length == 4)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_frequency, tvb, pos, length, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_PREAMBLE:
-      proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_preamble_pat, tvb, pos, length, ENC_NA);
-      break;
-    case type29ucd_EXT_PREAMBLE:
-      proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_ext_preamble, tvb, pos, length, ENC_NA);
-      break;
-    case type29ucd_SCDMA_MODE_ENABLE:
-      if (length == 1)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_scdma_mode_enable, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCDMA_SPREADING_INTERVAL:
-      if (length == 1)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_scdma_spreading_interval, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCDMA_CODES_PER_MINI_SLOT:
-      if (length == 1)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_scdma_codes_per_mini_slot, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCDMA_ACTIVE_CODES:
-      if (length == 1)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_scdma_active_codes, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCDMA_CODE_HOPPING_SEED:
-      if (length == 2)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_scdma_code_hopping_seed, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCDMA_US_RATIO_NUM:
-      if (length == 2)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_scdma_us_ratio_num, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCDMA_US_RATIO_DENOM:
-      if (length == 2)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_scdma_us_ratio_denom, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_SCDMA_TIMESTAMP_SNAPSHOT:
-      if (length == 9)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_scdma_timestamp_snapshot, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_MAINTAIN_POWER_SPECTRAL_DENSITY:
-      if (length == 1)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_maintain_power_spectral_density, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_RANGING_REQUIRED:
-      if (length == 1)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_ranging_required, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_MAX_SCHEDULED_CODES:
-      if (length == 1)
-      {
-        proto_tree_add_item (type29tlv_tree, hf_docsis_type29ucd_max_scheduled_codes, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_RANGING_HOLD_OFF_PRIORITY_FIELD:
-      if (length == 4)
-      {
-        static const int * ucd_rnghoff[] = {
-          &hf_docsis_type29ucd_rnghoff_cm,
-          &hf_docsis_type29ucd_rnghoff_erouter,
-          &hf_docsis_type29ucd_rnghoff_emta,
-          &hf_docsis_type29ucd_rnghoff_estb,
-          &hf_docsis_type29ucd_rnghoff_rsvd,
-          &hf_docsis_type29ucd_rnghoff_id_ext,
-          NULL
-        };
-
-        proto_tree_add_bitmask_list(type29tlv_tree, tvb, pos, length, ucd_rnghoff, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_RANGING_CHANNEL_CLASS_ID:
-      if (length == 4)
-      {
-        static const int * ucd_chan_class_id[] = {
-          &hf_docsis_type29ucd_chan_class_id_cm,
-          &hf_docsis_type29ucd_chan_class_id_erouter,
-          &hf_docsis_type29ucd_chan_class_id_emta,
-          &hf_docsis_type29ucd_chan_class_id_estb,
-          &hf_docsis_type29ucd_chan_class_id_rsvd,
-          &hf_docsis_type29ucd_chan_class_id_id_ext,
-          NULL
-        };
-
-        proto_tree_add_bitmask_list(type29tlv_tree, tvb, pos, length, ucd_chan_class_id, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type29ucd_BURST_DESCR5:
-      dissect_type29ucd_burstdescriptor(tvb, pinfo, type29tlv_tree, pos, length);
-      break;
-    default:
-      expert_add_info_format(pinfo, type29tlv_len_item, &ei_docsis_type29ucd_tlvtype_unknown, "Unknown TLV type: %u", type);
-      break;
-    } /* switch(type) */
-
-    pos += length;
-  }                       /* while (pos < len) */
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_type29ucd (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_type29ucd_upstream_chid,
-     {"Upstream Channel ID", "docsis_type29ucd.upchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_config_ch_cnt,
-     {"Config Change Count", "docsis_type29ucd.confcngcnt",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Configuration Change Count", HFILL}
-    },
-    {&hf_docsis_type29ucd_mini_slot_size,
-     {"Mini Slot Size (6.25us TimeTicks)", "docsis_type29ucd.mslotsize",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_down_chid,
-     {"Downstream Channel ID", "docsis_type29ucd.downchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Management Message", HFILL}
-    },
-    {&hf_docsis_type29ucd_type,
-     {"Type", "docsis_type29ucd.type",
-      FT_UINT8, BASE_DEC, VALS(channel_tlv_vals), 0x0,
-      "Channel TLV type", HFILL}
-    },
-    {&hf_docsis_type29ucd_length,
-     {"Length", "docsis_type29ucd.length",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Channel TLV length", HFILL}
-    },
-    {&hf_docsis_type29ucd_burst_type,
-     {"Type", "docsis_type29ucd.burst.tlvtype",
-      FT_UINT8, BASE_DEC, VALS(burst_tlv_vals), 0x0,
-      "Burst TLV type", HFILL}
-    },
-    {&hf_docsis_type29ucd_burst_length,
-     {"Length", "docsis_type29ucd.burst.tlvlen",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Burst TLV length", HFILL}
-    },
-    {&hf_docsis_type29ucd_symbol_rate,
-     {"Symbol Rate (ksym/sec)", "docsis_type29ucd.symrate",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Symbol Rate", HFILL}
-    },
-    {&hf_docsis_type29ucd_frequency,
-     {"Frequency (Hz)", "docsis_type29ucd.freq",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      "Upstream Center Frequency", HFILL}
-    },
-    {&hf_docsis_type29ucd_preamble_pat,
-     {"Preamble Pattern", "docsis_type29ucd.preamble",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Preamble Superstring", HFILL}
-    },
-    {&hf_docsis_type29ucd_iuc,
-     {"Interval Usage Code", "docsis_type29ucd.iuc",
-      FT_UINT8, BASE_DEC, VALS (iuc_vals2), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_mod_type,
-     {"Modulation Type", "docsis_type29ucd.burst.modtype",
-      FT_UINT8, BASE_DEC, VALS (mod_vals2), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_diff_encoding,
-     {"Differential Encoding", "docsis_type29ucd.burst.diffenc",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_preamble_len,
-     {"Preamble Length (Bits)", "docsis_type29ucd.burst.preamble_len",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_preamble_val_off,
-     {"Preamble Offset (Bits)", "docsis_type29ucd.burst.preamble_off",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_fec,
-     {"FEC (T)", "docsis_type29ucd.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_type29ucd.burst.fec_codeword",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_scrambler_seed,
-     {"Scrambler Seed", "docsis_type29ucd.burst.scrambler_seed",
-      FT_UINT16, BASE_HEX, NULL, 0x0,
-      "Burst Descriptor", HFILL}
-    },
-    {&hf_docsis_burst_max_burst,
-     {"Max Burst Size (Minislots)", "docsis_type29ucd.burst.maxburst",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_guard_time,
-     {"Guard Time Size (Symbol Times)", "docsis_type29ucd.burst.guardtime",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Guard Time Size", HFILL}
-    },
-    {&hf_docsis_burst_last_cw_len,
-     {"Last Codeword Length", "docsis_type29ucd.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_type29ucd.burst.scrambleronoff",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_ext_preamble,
-     {"Extended Preamble Pattern", "docsis_type29ucd.extpreamble",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_scdma_mode_enable,
-     {"SCDMA Mode Enable", "docsis_type29ucd.scdmaenable",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_scdma_spreading_interval,
-     {"SCDMA Spreading Interval", "docsis_type29ucd.scdmaspreadinginterval",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_scdma_codes_per_mini_slot,
-     {"SCDMA Codes per mini slot", "docsis_type29ucd.scdmacodesperminislot",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_scdma_active_codes,
-     {"SCDMA Active Codes", "docsis_type29ucd.scdmaactivecodes",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_scdma_code_hopping_seed,
-     {"SCDMA Code Hopping Seed", "docsis_type29ucd.scdmacodehoppingseed",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_scdma_us_ratio_num,
-     {"SCDMA US Ratio Numerator", "docsis_type29ucd.scdmausrationum",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_scdma_us_ratio_denom,
-     {"SCDMA US Ratio Denominator", "docsis_type29ucd.scdmausratiodenom",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_scdma_timestamp_snapshot,
-     {"SCDMA Timestamp Snapshot", "docsis_type29ucd.scdmatimestamp",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_maintain_power_spectral_density,
-     {"Maintain power spectral density", "docsis_type29ucd.maintainpowerspectraldensity",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_ranging_required,
-     {"Ranging Required", "docsis_type29ucd.rangingrequired",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_rnghoff_cm,
-     {"Ranging Hold-Off (CM)","docsis_type29ucd.rnghoffcm",
-      FT_UINT32, BASE_DEC, VALS (allow_inhibit_vals), 0x1,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_rnghoff_erouter,
-     {"Ranging Hold-Off (eRouter)",
-      "docsis_type29ucd.rnghofferouter",
-      FT_UINT32, BASE_DEC, VALS (allow_inhibit_vals), 0x2,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_rnghoff_emta,
-     {"Ranging Hold-Off (eMTA or EDVA)",
-      "docsis_type29ucd.rnghoffemta",
-      FT_UINT32, BASE_DEC, VALS (allow_inhibit_vals), 0x4,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_rnghoff_estb,
-     {"Ranging Hold-Off (DSG/eSTB)",
-      "docsis_type29ucd.rnghoffestb",
-      FT_UINT32, BASE_DEC, VALS (allow_inhibit_vals), 0x8,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_rnghoff_rsvd,
-     {"Reserved [0x000000]",
-      "docsis_type29ucd.rnghoffrsvd",
-      FT_UINT32, BASE_HEX, NULL, 0xFFF0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_rnghoff_id_ext,
-     {"CM Ranging Class ID Extension",
-      "docsis_type29ucd.rngidext",
-      FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_chan_class_id_cm,
-     {"Channel Class ID (CM)","docsis_type29ucd.classidcm",
-      FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x1,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_chan_class_id_erouter,
-     {"Channel Class ID (eRouter)",
-      "docsis_type29ucd.classiderouter",
-      FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x2,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_chan_class_id_emta,
-     {"Channel Class ID (eMTA or EDVA)",
-      "docsis_type29ucd.classidemta",
-      FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x4,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_chan_class_id_estb,
-     {"Channel Class ID (DSG/eSTB)",
-      "docsis_type29ucd.classidestb",
-      FT_UINT32, BASE_DEC, VALS (inhibit_allow_vals), 0x8,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_chan_class_id_rsvd,
-     {"Reserved",
-      "docsis_type29ucd.classidrsvd",
-      FT_UINT32, BASE_HEX, NULL, 0xFFF0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_chan_class_id_id_ext,
-     {"CM Ranging Class ID Extension",
-      "docsis_type29ucd.classidext",
-      FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type29ucd_max_scheduled_codes,
-     {"S-CDMA Max Scheduled Codes", "docsis_type29ucd.scdmamaxcodes",
-      FT_UINT8, BASE_DEC, VALS (max_scheduled_codes_vals), 0x0,
-      "S-CDMA Maximum Scheduled Codes", HFILL}
-    },
-    {&hf_docsis_rs_int_depth,
-     {"R-S Interleaver Depth", "docsis_type29ucd.burst.rsintdepth",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_rs_int_block,
-     {"R-S Interleaver Block Size", "docsis_type29ucd.burst.rsintblock",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_preamble_type,
-     {"Preamble Type", "docsis_type29ucd.burst.preambletype",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_scdma_scrambler_onoff,
-     {"Scrambler On/Off", "docsis_type29ucd.burst.scdmascrambleronoff",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      "SCDMA Scrambler On/Off", HFILL}
-    },
-    {&hf_docsis_scdma_codes_per_subframe,
-     {"SCDMA Codes per Subframe", "docsis_type29ucd.burst.scdmacodespersubframe",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_scdma_framer_int_step_size,
-     {"SCDMA Framer Interleaving Step Size", "docsis_type29ucd.burst.scdmaframerintstepsize",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_tcm_enabled,
-     {"TCM Enabled", "docsis_type29ucd.burst.tcmenabled",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_type29ucd_tlvlen_bad, { "docsis_type29ucd.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-    {&ei_docsis_type29ucd_tlvtype_unknown, { "docsis_type29ucd.tlvtypeunknown", PI_PROTOCOL, PI_WARN, "Unknown TLV type", EXPFILL}},
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_type29ucd,
-    &ett_docsis_type29tlv,
-    &ett_docsis_type29_burst_tlv,
-  };
-
-  expert_module_t* expert_docsis_type29ucd;
-
-  proto_docsis_type29ucd =
-    proto_register_protocol ("DOCSIS Upstream Channel Descriptor Type 29",
-                             "DOCSIS type29ucd", "docsis_type29ucd");
-
-  proto_register_field_array (proto_docsis_type29ucd, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_type29ucd = expert_register_protocol(proto_docsis_type29ucd);
-  expert_register_field_array(expert_docsis_type29ucd, ei, array_length(ei));
-
-  docsis_type29ucd_handle = register_dissector ("docsis_type29ucd", dissect_type29ucd, proto_docsis_type29ucd);
-}
-
-void
-proto_reg_handoff_docsis_type29ucd (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x1D, docsis_type29ucd_handle);
-}
-
-/*
- * 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/docsis/packet-type35ucd.c b/plugins/docsis/packet-type35ucd.c
deleted file mode 100644 (file)
index 737d78b..0000000
+++ /dev/null
@@ -1,1105 +0,0 @@
-/* packet-type35ucd.c
- *
- * Routines for Type 35 UCD - DOCSIS 3.0 only - Message dissection
- * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-#define type35ucd_SYMBOL_RATE 1
-#define type35ucd_FREQUENCY 2
-#define type35ucd_PREAMBLE 3
-#define type35ucd_BURST_DESCR5 5
-#define type35ucd_EXT_PREAMBLE 6
-#define type35ucd_SCDMA_MODE_ENABLE 7
-#define type35ucd_SCDMA_SPREADING_INTERVAL 8
-#define type35ucd_SCDMA_CODES_PER_MINI_SLOT 9
-#define type35ucd_SCDMA_ACTIVE_CODES 10
-#define type35ucd_SCDMA_CODE_HOPPING_SEED 11
-#define type35ucd_SCDMA_US_RATIO_NUM 12
-#define type35ucd_SCDMA_US_RATIO_DENOM 13
-#define type35ucd_SCDMA_TIMESTAMP_SNAPSHOT 14
-#define type35ucd_MAINTAIN_POWER_SPECTRAL_DENSITY 15
-#define type35ucd_RANGING_REQUIRED 16
-#define type35ucd_MAX_SCHEDULED_CODES 17
-#define type35ucd_RANGING_HOLD_OFF_PRIORITY_FIELD 18
-#define type35ucd_RANGING_CHANNEL_CLASS_ID 19
-#define type35ucd_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING 20
-#define type35ucd_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES 21
-#define type35ucd_HIGHER_UCD_FOR_SAME_UCID 22
-
-#define type35ucd_MODULATION 1
-#define type35ucd_DIFF_ENCODING 2
-#define type35ucd_PREAMBLE_LEN 3
-#define type35ucd_PREAMBLE_VAL_OFF 4
-#define type35ucd_FEC 5
-#define type35ucd_FEC_CODEWORD 6
-#define type35ucd_SCRAMBLER_SEED 7
-#define type35ucd_MAX_BURST 8
-#define type35ucd_GUARD_TIME 9
-#define type35ucd_LAST_CW_LEN 10
-#define type35ucd_SCRAMBLER_ONOFF 11
-#define type35ucd_RS_INT_DEPTH 12
-#define type35ucd_RS_INT_BLOCK 13
-#define type35ucd_PREAMBLE_TYPE 14
-#define type35ucd_SCMDA_SCRAMBLER_ONOFF 15
-#define type35ucd_SCDMA_CODES_PER_SUBFRAME 16
-#define type35ucd_SCDMA_FRAMER_INT_STEP_SIZE 17
-#define type35ucd_TCM_ENABLED 18
-
-#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_RESERVED12 12
-#define IUC_RESERVED13 13
-#define IUC_RESERVED14 14
-#define IUC_EXPANSION 15
-
-void proto_register_docsis_type35ucd(void);
-void proto_reg_handoff_docsis_type35ucd(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_type35ucd = -1;
-
-static int hf_docsis_type35ucd_upstream_chid = -1;
-static int hf_docsis_type35ucd_config_ch_cnt = -1;
-static int hf_docsis_type35ucd_mini_slot_size = -1;
-static int hf_docsis_type35ucd_down_chid = -1;
-static int hf_docsis_type35ucd_type = -1;
-static int hf_docsis_type35ucd_length = -1;
-static int hf_docsis_type35ucd_burst_type = -1;
-static int hf_docsis_type35ucd_burst_length = -1;
-static int hf_docsis_type35ucd_symbol_rate = -1;
-static int hf_docsis_type35ucd_frequency = -1;
-static int hf_docsis_type35ucd_preamble_pat = -1;
-static int hf_docsis_type35ucd_iuc = -1;
-static int hf_docsis_type35ucd_ext_preamble = -1;
-static int hf_docsis_type35ucd_scdma_mode_enable = -1;
-static int hf_docsis_type35ucd_scdma_spreading_interval = -1;
-static int hf_docsis_type35ucd_scdma_codes_per_mini_slot = -1;
-static int hf_docsis_type35ucd_scdma_active_codes = -1;
-static int hf_docsis_type35ucd_scdma_code_hopping_seed = -1;
-static int hf_docsis_type35ucd_scdma_us_ratio_num = -1;
-static int hf_docsis_type35ucd_scdma_us_ratio_denom = -1;
-static int hf_docsis_type35ucd_scdma_timestamp_snapshot = -1;
-static int hf_docsis_type35ucd_maintain_power_spectral_density = -1;
-static int hf_docsis_type35ucd_ranging_required = -1;
-static int hf_docsis_type35ucd_rnghoff_cm = -1;
-static int hf_docsis_type35ucd_rnghoff_erouter = -1;
-static int hf_docsis_type35ucd_rnghoff_emta = -1;
-static int hf_docsis_type35ucd_rnghoff_estb = -1;
-static int hf_docsis_type35ucd_rnghoff_rsvd = -1;
-static int hf_docsis_type35ucd_rnghoff_id_ext = -1;
-static int hf_docsis_type35ucd_chan_class_id_cm = -1;
-static int hf_docsis_type35ucd_chan_class_id_erouter = -1;
-static int hf_docsis_type35ucd_chan_class_id_emta = -1;
-static int hf_docsis_type35ucd_chan_class_id_estb = -1;
-static int hf_docsis_type35ucd_chan_class_id_rsvd = -1;
-static int hf_docsis_type35ucd_chan_class_id_id_ext = -1;
-static int hf_docsis_type35ucd_max_scheduled_codes = -1;
-static int hf_docsis_type35ucd_active_code_hopping = -1;
-static int hf_docsis_type35ucd_higher_ucd_for_same_ucid = -1;
-static int hf_docsis_type35ucd_higher_ucd_for_same_ucid_resv = -1;
-static int hf_docsis_type35ucd_scdma_selection_active_codes = -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_scdma_scrambler_onoff = -1;
-static int hf_docsis_scdma_codes_per_subframe = -1;
-static int hf_docsis_scdma_framer_int_step_size = -1;
-static int hf_docsis_tcm_enabled = -1;
-
-static expert_field ei_docsis_type35ucd_tlvlen_bad = EI_INIT;
-static expert_field ei_docsis_type35ucd_tlvtype_bad = EI_INIT;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_type35ucd = -1;
-static gint ett_docsis_type35tlv = -1;
-static gint ett_docsis_type35_burst_tlv = -1;
-
-static dissector_handle_t docsis_type35ucd_handle;
-
-static const value_string channel_tlv_vals[] _U_ = {
-  {type35ucd_SYMBOL_RATE,                     "Symbol Rate"},
-  {type35ucd_FREQUENCY,                       "Frequency"},
-  {type35ucd_PREAMBLE,                        "Preamble Pattern"},
-  {type35ucd_BURST_DESCR5,                    "Burst Descriptor Type 5"},
-  {type35ucd_EXT_PREAMBLE,                    "Extended Preamble Pattern"},
-  {type35ucd_SCDMA_MODE_ENABLE,               "SCDMA Mode Enabled"},
-  {type35ucd_SCDMA_SPREADING_INTERVAL,        "SCDMA Spreading Intervals per Frame"},
-  {type35ucd_SCDMA_CODES_PER_MINI_SLOT,       "SCDMA Codes per Mini-slot"},
-  {type35ucd_SCDMA_ACTIVE_CODES,              "SCDMA Number of Active Codes"},
-  {type35ucd_SCDMA_CODE_HOPPING_SEED,         "SCDMA Code Hopping Seed"},
-  {type35ucd_SCDMA_US_RATIO_NUM,              "SCDMA US ratio numerator M"},
-  {type35ucd_SCDMA_US_RATIO_DENOM,            "SCDMA US ratio denominator N"},
-  {type35ucd_SCDMA_TIMESTAMP_SNAPSHOT,        "SCDMA Timestamp Snapshot"},
-  {type35ucd_MAINTAIN_POWER_SPECTRAL_DENSITY, "Maintain Power Spectral Density"},
-  {type35ucd_RANGING_REQUIRED,                "Ranging Required"},
-  {type35ucd_MAX_SCHEDULED_CODES,             "S-CDMA Maximum Scheduled Codes"},
-  {type35ucd_RANGING_HOLD_OFF_PRIORITY_FIELD, "Ranging Hold-Off Priority Field"},
-  {type35ucd_RANGING_CHANNEL_CLASS_ID,        "Ranging Channel Class ID"},
-  {type35ucd_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING, "S-CDMA Selection Mode for Active Codes and Code Hopping"},
-  {type35ucd_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES, "S-CDMA Selection String for Active Codes"},
-  {type35ucd_HIGHER_UCD_FOR_SAME_UCID,        "Higher UCD for the same UCID present bitmap"},
-  {0, NULL}
-};
-
-static const value_string burst_tlv_vals[] = {
-  {type35ucd_MODULATION,                      "Modulation Type"},
-  {type35ucd_DIFF_ENCODING,                   "Differential Encoding"},
-  {type35ucd_PREAMBLE_LEN,                    "Preamble Length"},
-  {type35ucd_PREAMBLE_VAL_OFF,                "Preamble Value Offset"},
-  {type35ucd_FEC,                             "FEC Error Correction (T)"},
-  {type35ucd_FEC_CODEWORD,                    "FEC Codeword Information Bytes (k)"},
-  {type35ucd_SCRAMBLER_SEED,                  "Scrambler Seed"},
-  {type35ucd_MAX_BURST,                       "Maximum Burst Size"},
-  {type35ucd_GUARD_TIME,                      "Guard Time Size"},
-  {type35ucd_LAST_CW_LEN,                     "Last Codeword Length"},
-  {type35ucd_SCRAMBLER_ONOFF,                 "Scrambler On/Off"},
-  {type35ucd_RS_INT_DEPTH,                    "R-S Interleaver Depth (Ir)"},
-  {type35ucd_RS_INT_BLOCK,                    "R-S Interleaver Block Size (Br)"},
-  {type35ucd_PREAMBLE_TYPE,                   "Preamble Type"},
-  {type35ucd_SCMDA_SCRAMBLER_ONOFF,           "S-CDMA Spreader On/Off"},
-  {type35ucd_SCDMA_CODES_PER_SUBFRAME,        "S-CDMA Codes per Subframe"},
-  {type35ucd_SCDMA_FRAMER_INT_STEP_SIZE,      "S-CDMA Framer Interleaving Step Size"},
-  {type35ucd_TCM_ENABLED,                     "TCM Encoding"},
-  {0, NULL}
-};
-
-static const value_string on_off_vals[] = {
-  {1, "On"},
-  {2, "Off"},
-  {0, NULL}
-};
-
-static const value_string preamble_type[] = {
-  {1, "QPSK0"},
-  {2, "QPSK1"},
-  {0, NULL}
-};
-
-const true_false_string type35ucd_tfs_allow_inhibit = { "Inhibit Initial Ranging",
-                                                        "Ranging Allowed" };
-
-const true_false_string type35ucd_tfs_inhibit_allow = { "Ranging Allowed",
-                                                        "Inhibit Initial Ranging" };
-
-static const value_string mod_vals2[] = {
-  {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 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}
-};
-
-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 iuc_vals3[] = {
-  {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_RESERVED12,               "Reserved 12"},
-  {IUC_RESERVED13,               "Reserved 13"},
-  {IUC_RESERVED14,               "Reserved 14"},
-  {IUC_EXPANSION,                "IUC Expansion"},
-  {0, NULL}
-};
-
-static const value_string last_cw_len_vals[] = {
-  {1, "Fixed"},
-  {2, "Shortened"},
-  {0, NULL}
-};
-
-static const value_string max_scheduled_codes_vals[] = {
-  {1, "Enabled"},
-  {2, "Disabled"},
-  {0, NULL}
-};
-
-static const value_string ranging_required[] = {
-  {0, "No ranging required"},
-  {1, "Unicast initial ranging required"},
-  {2, "Broadcast initial ranging required"},
-  {0, NULL}
-};
-
-/* Dissection */
-static int
-dissect_type35ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
-  guint16 pos, endtlvpos, subpos;
-  guint8 type;
-  guint32 upchid, length, tlvlen;
-  guint8 tlvtype;
-  proto_tree *type35ucd_tree, *type35tlv_tree, *type35ucd_burst_tree;
-  proto_item *type35ucd_item, *type35tlv_item, *type35tlv_len_item, *type35ucd_burst_item, *type35ucd_burst_len_item;
-  guint8 symrate;
-
-  type35ucd_item = proto_tree_add_item (tree, proto_docsis_type35ucd, tvb, 0, -1, ENC_NA);
-  type35ucd_tree = proto_item_add_subtree (type35ucd_item, ett_docsis_type35ucd);
-  proto_tree_add_item_ret_uint (type35ucd_tree, hf_docsis_type35ucd_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &upchid);
-  proto_tree_add_item (type35ucd_tree, hf_docsis_type35ucd_config_ch_cnt, tvb, 1, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (type35ucd_tree, hf_docsis_type35ucd_mini_slot_size, tvb, 2, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (type35ucd_tree, hf_docsis_type35ucd_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 35 UCD Message: Channel ID = %u (U%u)", upchid,
-                  upchid - 1);
-  else
-    col_add_fstr (pinfo->cinfo, COL_INFO,
-                  "Type 35 UCD Message: Channel ID = %u (Telephony Return)",
-                  upchid);
-
-  pos = 4;
-  while (tvb_reported_length_remaining(tvb, pos) > 0)
-  {
-    type = tvb_get_guint8 (tvb, pos);
-    type35tlv_tree = proto_tree_add_subtree(type35ucd_tree, tvb, pos, -1,
-                                        ett_docsis_type35tlv, &type35tlv_item,
-                                        val_to_str(type, channel_tlv_vals,
-                                                   "Unknown TLV (%u)"));
-    proto_tree_add_uint (type35tlv_tree, hf_docsis_type35ucd_type, tvb, pos, 1, type);
-    pos++;
-    type35tlv_len_item = proto_tree_add_item_ret_uint (type35tlv_tree, hf_docsis_type35ucd_length, tvb, pos, 1, ENC_NA, &length);
-    pos++;
-    proto_item_set_len(type35tlv_item, length + 2);
-
-    switch (type)
-    {
-    case type35ucd_SYMBOL_RATE:
-      if (length == 1)
-      {
-        symrate = tvb_get_guint8 (tvb, pos);
-        proto_tree_add_uint (type35tlv_tree, hf_docsis_type35ucd_symbol_rate, tvb, pos, length, symrate * 160);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_FREQUENCY:
-      if (length == 4)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_frequency, tvb, pos, length, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_PREAMBLE:
-      proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_preamble_pat, tvb, pos, length, ENC_NA);
-      break;
-    case type35ucd_EXT_PREAMBLE:
-      proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_ext_preamble, tvb, pos, length, ENC_NA);
-      break;
-    case type35ucd_SCDMA_MODE_ENABLE:
-      if (length == 1)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_scdma_mode_enable, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_SCDMA_SPREADING_INTERVAL:
-      if (length == 1)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_scdma_spreading_interval, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_SCDMA_CODES_PER_MINI_SLOT:
-      if (length == 1)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_scdma_codes_per_mini_slot, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_SCDMA_ACTIVE_CODES:
-      if (length == 1)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_scdma_active_codes, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_SCDMA_CODE_HOPPING_SEED:
-      if (length == 2)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_scdma_code_hopping_seed, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_SCDMA_US_RATIO_NUM:
-      if (length == 2)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_scdma_us_ratio_num, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_SCDMA_US_RATIO_DENOM:
-      if (length == 2)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_scdma_us_ratio_denom, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_SCDMA_TIMESTAMP_SNAPSHOT:
-      if (length == 9)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_scdma_timestamp_snapshot, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_MAINTAIN_POWER_SPECTRAL_DENSITY:
-      if (length == 1)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_maintain_power_spectral_density, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_RANGING_REQUIRED:
-      if (length == 1)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_ranging_required, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_MAX_SCHEDULED_CODES:
-      if (length == 1)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_max_scheduled_codes, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_RANGING_HOLD_OFF_PRIORITY_FIELD:
-      if (length == 4)
-      {
-        static const int * ucd_rnghoff[] = {
-          &hf_docsis_type35ucd_rnghoff_cm,
-          &hf_docsis_type35ucd_rnghoff_erouter,
-          &hf_docsis_type35ucd_rnghoff_emta,
-          &hf_docsis_type35ucd_rnghoff_estb,
-          &hf_docsis_type35ucd_rnghoff_rsvd,
-          &hf_docsis_type35ucd_rnghoff_id_ext,
-          NULL
-        };
-
-        proto_tree_add_bitmask_list(type35tlv_tree, tvb, pos, length, ucd_rnghoff, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_RANGING_CHANNEL_CLASS_ID:
-      if (length == 4)
-      {
-        static const int * ucd_chan_class_id[] = {
-          &hf_docsis_type35ucd_chan_class_id_cm,
-          &hf_docsis_type35ucd_chan_class_id_erouter,
-          &hf_docsis_type35ucd_chan_class_id_emta,
-          &hf_docsis_type35ucd_chan_class_id_estb,
-          &hf_docsis_type35ucd_chan_class_id_rsvd,
-          &hf_docsis_type35ucd_chan_class_id_id_ext,
-          NULL
-        };
-
-        proto_tree_add_bitmask_list(type35tlv_tree, tvb, pos, length, ucd_chan_class_id, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING:
-      if (length == 1)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_active_code_hopping, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES:
-      if (length == 16)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_scdma_selection_active_codes, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_HIGHER_UCD_FOR_SAME_UCID:
-      if (length == 1)
-      {
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_higher_ucd_for_same_ucid, tvb, pos, length, ENC_NA);
-        proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_higher_ucd_for_same_ucid_resv, tvb, pos, length, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type35tlv_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type35ucd_BURST_DESCR5:
-      endtlvpos = pos + length;
-      subpos = pos;
-      proto_tree_add_item (type35tlv_tree, hf_docsis_type35ucd_iuc, tvb, subpos++, 1, ENC_BIG_ENDIAN);
-      while (subpos < endtlvpos)
-      {
-        tlvtype = tvb_get_guint8 (tvb, subpos);
-        type35ucd_burst_tree = proto_tree_add_subtree (type35tlv_tree, tvb, subpos, -1,
-                                                        ett_docsis_type35_burst_tlv, &type35ucd_burst_item,
-                                                        val_to_str(tlvtype, burst_tlv_vals,
-                                                        "Unknown TLV (%u)"));
-        proto_tree_add_uint (type35ucd_burst_tree, hf_docsis_type35ucd_burst_type, tvb, subpos, 1, tlvtype);
-        subpos++;
-        type35ucd_burst_len_item = proto_tree_add_item_ret_uint (type35ucd_burst_tree, hf_docsis_type35ucd_burst_length, tvb, subpos, 1, ENC_NA, &tlvlen);
-        subpos++;
-        proto_item_set_len(type35ucd_burst_item, tlvlen + 2);
-        switch (tlvtype)
-        {
-        case type35ucd_MODULATION:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_mod_type, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_DIFF_ENCODING:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_diff_encoding, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_PREAMBLE_LEN:
-          if (tlvlen == 2)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_preamble_len, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_PREAMBLE_VAL_OFF:
-          if (tlvlen == 2)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_preamble_val_off, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_FEC:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_fec, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_FEC_CODEWORD:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_fec_codeword, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_SCRAMBLER_SEED:
-          if (tlvlen == 2)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_scrambler_seed, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_MAX_BURST:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_max_burst, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo,type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_GUARD_TIME:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_guard_time, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_LAST_CW_LEN:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_last_cw_len, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_SCRAMBLER_ONOFF:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_burst_scrambler_onoff, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_RS_INT_DEPTH:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_rs_int_depth, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_RS_INT_BLOCK:
-          if (tlvlen == 2)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_rs_int_block, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_PREAMBLE_TYPE:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_preamble_type, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_SCMDA_SCRAMBLER_ONOFF:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_scdma_scrambler_onoff, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_SCDMA_CODES_PER_SUBFRAME:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_scdma_codes_per_subframe, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_SCDMA_FRAMER_INT_STEP_SIZE:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_scdma_framer_int_step_size, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        case type35ucd_TCM_ENABLED:
-          if (tlvlen == 1)
-          {
-            proto_tree_add_item (type35ucd_burst_tree, hf_docsis_tcm_enabled, tvb, subpos, tlvlen, ENC_BIG_ENDIAN);
-          }
-          else
-          {
-            expert_add_info_format(pinfo, type35ucd_burst_len_item, &ei_docsis_type35ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        default:
-          expert_add_info_format(pinfo, type35ucd_burst_item, &ei_docsis_type35ucd_tlvtype_bad, "Unknown TLV type: %u", tlvtype);
-        }         /* switch(tlvtype) */
-
-        subpos += tlvlen;
-      }             /* while (pos < endtlvpos) */
-      break;
-    default:
-      expert_add_info_format(pinfo, type35tlv_item, &ei_docsis_type35ucd_tlvtype_bad, "Unknown TLV type: %u", type);
-    }   /* switch(type) */
-
-    pos += length;
-  }     /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_type35ucd (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_type35ucd_upstream_chid,
-     {"Upstream Channel ID", "docsis_type35ucd.upchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_config_ch_cnt,
-     {"Config Change Count", "docsis_type35ucd.confcngcnt",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Configuration Change Count", HFILL}
-    },
-    {&hf_docsis_type35ucd_mini_slot_size,
-     {"Mini Slot Size (6.25us TimeTicks)", "docsis_type35ucd.mslotsize",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_down_chid,
-     {"Downstream Channel ID", "docsis_type35ucd.downchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Management Message", HFILL}
-    },
-    {&hf_docsis_type35ucd_type,
-     {"Type", "docsis_type35ucd.type",
-      FT_UINT8, BASE_DEC, VALS(channel_tlv_vals), 0x0,
-      "Channel TLV type", HFILL}
-    },
-    {&hf_docsis_type35ucd_length,
-     {"Length", "docsis_type35ucd.length",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Channel TLV length", HFILL}
-    },
-    {&hf_docsis_type35ucd_burst_type,
-     {"Type", "docsis_type35ucd.burst.tlvtype",
-      FT_UINT8, BASE_DEC, VALS(burst_tlv_vals), 0x0,
-      "Burst TLV type", HFILL}
-    },
-    {&hf_docsis_type35ucd_burst_length,
-     {"Length", "docsis_type35ucd.burst.tlvlen",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Burst TLV length", HFILL}
-    },
-    {&hf_docsis_type35ucd_symbol_rate,
-     {"Symbol Rate (ksym/sec)", "docsis_type35ucd.symrate",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Symbol Rate", HFILL}
-    },
-    {&hf_docsis_type35ucd_frequency,
-     {"Frequency (Hz)", "docsis_type35ucd.freq",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      "Upstream Center Frequency", HFILL}
-    },
-    {&hf_docsis_type35ucd_preamble_pat,
-     {"Preamble Pattern", "docsis_type35ucd.preamble",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Preamble Superstring", HFILL}
-    },
-    {&hf_docsis_type35ucd_iuc,
-     {"Interval Usage Code", "docsis_type35ucd.iuc",
-      FT_UINT8, BASE_DEC, VALS (iuc_vals3), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_mod_type,
-     {"Modulation Type", "docsis_type35ucd.burst.modtype",
-      FT_UINT8, BASE_DEC, VALS (mod_vals2), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_diff_encoding,
-     {"Differential Encoding", "docsis_type35ucd.burst.diffenc",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_preamble_len,
-     {"Preamble Length (Bits)", "docsis_type35ucd.burst.preamble_len",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_preamble_val_off,
-     {"Preamble Offset (Bits)", "docsis_type35ucd.burst.preamble_off",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_fec,
-     {"FEC (T)", "docsis_type35ucd.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_type35ucd.burst.fec_codeword",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_scrambler_seed,
-     {"Scrambler Seed", "docsis_type35ucd.burst.scrambler_seed",
-      FT_UINT16, BASE_HEX, NULL, 0x0,
-      "Burst Descriptor", HFILL}
-    },
-    {&hf_docsis_burst_max_burst,
-     {"Max Burst Size (Minislots)", "docsis_type35ucd.burst.maxburst",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_guard_time,
-     {"Guard Time Size (Symbol Times)", "docsis_type35ucd.burst.guardtime",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Guard Time Size", HFILL}
-    },
-    {&hf_docsis_burst_last_cw_len,
-     {"Last Codeword Length", "docsis_type35ucd.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_type35ucd.burst.scrambleronoff",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_ext_preamble,
-     {"Extended Preamble Pattern", "docsis_type35ucd.extpreamble",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_scdma_mode_enable,
-     {"SCDMA Mode Enable", "docsis_type35ucd.scdmaenable",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_scdma_spreading_interval,
-     {"SCDMA Spreading Interval", "docsis_type35ucd.scdmaspreadinginterval",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_scdma_codes_per_mini_slot,
-     {"SCDMA Codes per mini slot", "docsis_type35ucd.scdmacodesperminislot",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_scdma_active_codes,
-     {"SCDMA Active Codes", "docsis_type35ucd.scdmaactivecodes",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_scdma_code_hopping_seed,
-     {"SCDMA Code Hopping Seed", "docsis_type35ucd.scdmacodehoppingseed",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_scdma_us_ratio_num,
-     {"SCDMA US Ratio Numerator", "docsis_type35ucd.scdmausrationum",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_scdma_us_ratio_denom,
-     {"SCDMA US Ratio Denominator", "docsis_type35ucd.scdmausratiodenom",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_scdma_timestamp_snapshot,
-     {"SCDMA Timestamp Snapshot", "docsis_type35ucd.scdmatimestamp",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_maintain_power_spectral_density,
-     {"Maintain power spectral density", "docsis_type35ucd.maintainpowerspectraldensity",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_ranging_required,
-     {"Ranging Required", "docsis_type35ucd.rangingrequired",
-      FT_UINT8, BASE_DEC, VALS (ranging_required), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_rnghoff_cm,
-     {"Ranging Hold-Off (CM)","docsis_type35ucd.rnghoffcm",
-      FT_BOOLEAN, 32, TFS(&type35ucd_tfs_allow_inhibit), 0x1,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_rnghoff_erouter,
-     {"Ranging Hold-Off (eRouter)",
-      "docsis_type35ucd.rnghofferouter",
-      FT_BOOLEAN, 32, TFS(&type35ucd_tfs_allow_inhibit), 0x2,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_rnghoff_emta,
-     {"Ranging Hold-Off (eMTA or EDVA)",
-      "docsis_type35ucd.rnghoffemta",
-      FT_BOOLEAN, 32, TFS(&type35ucd_tfs_allow_inhibit), 0x4,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_rnghoff_estb,
-     {"Ranging Hold-Off (DSG/eSTB)",
-      "docsis_type35ucd.rnghoffestb",
-      FT_BOOLEAN, 32, TFS(&type35ucd_tfs_allow_inhibit), 0x8,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_rnghoff_rsvd,
-     {"Reserved [0x000000]",
-      "docsis_type35ucd.rnghoffrsvd",
-      FT_UINT32, BASE_HEX, NULL, 0xFFF0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_rnghoff_id_ext,
-     {"CM Ranging Class ID Extension",
-      "docsis_type35ucd.rngidext",
-      FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_chan_class_id_cm,
-     {"Channel Class ID (CM)","docsis_type35ucd.classidcm",
-      FT_BOOLEAN, 32, TFS(&type35ucd_tfs_inhibit_allow), 0x1,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_chan_class_id_erouter,
-     {"Channel Class ID (eRouter)",
-      "docsis_type35ucd.classiderouter",
-      FT_BOOLEAN, 32, TFS(&type35ucd_tfs_inhibit_allow), 0x2,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_chan_class_id_emta,
-     {"Channel Class ID (eMTA or EDVA)",
-      "docsis_type35ucd.classidemta",
-      FT_BOOLEAN, 32, TFS(&type35ucd_tfs_inhibit_allow), 0x4,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_chan_class_id_estb,
-     {"Channel Class ID (DSG/eSTB)",
-      "docsis_type35ucd.classidestb",
-      FT_BOOLEAN, 32, TFS(&type35ucd_tfs_inhibit_allow), 0x8,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_chan_class_id_rsvd,
-     {"Reserved [0x000000]",
-      "docsis_type35ucd.classidrsvd",
-      FT_UINT32, BASE_HEX, NULL, 0xFFF0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_chan_class_id_id_ext,
-     {"CM Ranging Class ID Extension",
-      "docsis_type35ucd.classidext",
-      FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_active_code_hopping,
-     {"S-CDMA Selection Mode for Active Codes and Code Hopping", "docsis_type35ucd.selectcodehop",
-      FT_UINT8, BASE_DEC, VALS (tlv20_vals), 0x0,
-      "SCDMA Selection Mode for Active Codes and Code Hopping", HFILL}
-    },
-    {&hf_docsis_type35ucd_scdma_selection_active_codes,
-     {"S-CDMA Selection String for Active Codes", "docsis_type35ucd.selectcode",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "SCDMA Selection String for Active Codes", HFILL}
-    },
-    {&hf_docsis_type35ucd_higher_ucd_for_same_ucid,
-     {"Higher UCD for the same UCID", "docsis_type35ucd.highucdpresent",
-      FT_BOOLEAN, 8, TFS(&type35ucd_tfs_present_not_present), 0x1,
-      "Higher UCD for the same UCID present bitmap", HFILL}
-    },
-    {&hf_docsis_type35ucd_higher_ucd_for_same_ucid_resv,
-     {"Reserved", "docsis_type35ucd.highucdresv",
-      FT_UINT8, BASE_HEX, NULL, 0xFE,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type35ucd_max_scheduled_codes,
-     {"S-CDMA Max Scheduled Codes", "docsis_type35ucd.scdmamaxcodes",
-      FT_UINT8, BASE_DEC, VALS (max_scheduled_codes_vals), 0x0,
-      "S-CDMA Maximum Scheduled Codes", HFILL}
-    },
-    {&hf_docsis_rs_int_depth,
-     {"R-S Interleaver Depth (Ir)", "docsis_type35ucd.burst.rsintdepth",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_rs_int_block,
-     {"R-S Interleaver Block Size (Br)", "docsis_type35ucd.burst.rsintblock",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_preamble_type,
-     {"Preamble Type", "docsis_type35ucd.burst.preambletype",
-      FT_UINT8, BASE_DEC, VALS (preamble_type), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_scdma_scrambler_onoff,
-     {"S-CDMA Spreader On/Off", "docsis_type35ucd.burst.scdmascrambleronoff",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_scdma_codes_per_subframe,
-     {"S-CDMA Codes per Subframe", "docsis_type35ucd.burst.scdmacodespersubframe",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_scdma_framer_int_step_size,
-     {"S-CDMA Framer Interleaving Step Size", "docsis_type35ucd.burst.scdmaframerintstepsize",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_tcm_enabled,
-     {"TCM Encoding", "docsis_type35ucd.burst.tcmenabled",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_type35ucd_tlvlen_bad, { "docsis_type35ucd.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-    {&ei_docsis_type35ucd_tlvtype_bad, { "docsis_type35ucd.tlvtypebad", PI_PROTOCOL, PI_WARN, "Bad TLV type", EXPFILL}},
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_type35ucd,
-    &ett_docsis_type35tlv,
-    &ett_docsis_type35_burst_tlv,
-  };
-
-  expert_module_t* expert_docsis_type35ucd;
-
-  proto_docsis_type35ucd =
-    proto_register_protocol ("DOCSIS Upstream Channel Descriptor Type 35",
-                             "DOCSIS type35ucd", "docsis_type35ucd");
-
-  proto_register_field_array (proto_docsis_type35ucd, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_type35ucd = expert_register_protocol(proto_docsis_type35ucd);
-  expert_register_field_array(expert_docsis_type35ucd, ei, array_length(ei));
-
-  docsis_type35ucd_handle = register_dissector ("docsis_type35ucd", dissect_type35ucd, proto_docsis_type35ucd);
-}
-
-void
-proto_reg_handoff_docsis_type35ucd (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x23, docsis_type35ucd_handle);
-}
-
-/*
- * 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/docsis/packet-type51ucd.c b/plugins/docsis/packet-type51ucd.c
deleted file mode 100644 (file)
index 1b7684b..0000000
+++ /dev/null
@@ -1,1550 +0,0 @@
-/* packet-type51ucd.c
- *
- * Routines for Type 51 UCD - DOCSIS 3.1 only - Message dissection
- * Copyright 2016, Bruno Verstuyft <bruno.verstuyft@excentis.com>
- * Based on packet-type35ucd.c (Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>)
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-#define type51ucd_SYMBOL_RATE 1
-#define type51ucd_FREQUENCY 2
-#define type51ucd_PREAMBLE 3
-#define type51ucd_EXT_PREAMBLE 6
-#define type51ucd_SCDMA_MODE_ENABLE 7
-#define type51ucd_SCDMA_SPREADING_INTERVAL 8
-#define type51ucd_SCDMA_CODES_PER_MINI_SLOT 9
-#define type51ucd_SCDMA_ACTIVE_CODES 10
-#define type51ucd_SCDMA_CODE_HOPPING_SEED 11
-#define type51ucd_SCDMA_US_RATIO_NUM 12
-#define type51ucd_SCDMA_US_RATIO_DENOM 13
-#define type51ucd_SCDMA_TIMESTAMP_SNAPSHOT 14
-#define type51ucd_MAINTAIN_POWER_SPECTRAL_DENSITY 15
-#define type51ucd_RANGING_REQUIRED 16
-#define type51ucd_MAX_SCHEDULED_CODES 17
-#define type51ucd_RANGING_HOLD_OFF_PRIORITY_FIELD 18
-#define type51ucd_RANGING_CHANNEL_CLASS_ID 19
-#define type51ucd_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING 20
-#define type51ucd_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES 21
-#define type51ucd_HIGHER_UCD_FOR_SAME_UCID 22
-#define type51ucd_BURST_DESCR23 23
-#define type51ucd_UCD_CHANGE_IND_BITMASK 24
-#define type51ucd_OFDMA_TIMESTAMP_SNAPSHOT 25
-#define type51ucd_OFDMA_CYCLIC_PREFIX_SIZE 26
-#define type51ucd_OFDMA_ROLLOFF_PERIOD_SIZE 27
-#define type51ucd_SUBCARRIER_SPACING 28
-#define type51ucd_CENTER_FREQ_SUBC_0 29
-#define type51ucd_SUBC_EXCL_BAND 30
-#define type51ucd_UNUSED_SUBC_SPEC 31
-#define type51ucd_SYMB_IN_OFDMA_FRAME 32
-#define type51ucd_RAND_SEED 33
-
-
-#define type51ucd_MODULATION 1
-#define type51ucd_DIFF_ENCODING 2
-#define type51ucd_PREAMBLE_LEN 3
-#define type51ucd_PREAMBLE_VAL_OFF 4
-#define type51ucd_FEC 5
-#define type51ucd_FEC_CODEWORD 6
-#define type51ucd_SCRAMBLER_SEED 7
-#define type51ucd_MAX_BURST 8
-#define type51ucd_GUARD_TIME 9
-#define type51ucd_LAST_CW_LEN 10
-#define type51ucd_SCRAMBLER_ONOFF 11
-#define type51ucd_RS_INT_DEPTH 12
-#define type51ucd_RS_INT_BLOCK 13
-#define type51ucd_PREAMBLE_TYPE 14
-#define type51ucd_SCMDA_SCRAMBLER_ONOFF 15
-#define type51ucd_SCDMA_CODES_PER_SUBFRAME 16
-#define type51ucd_SCDMA_FRAMER_INT_STEP_SIZE 17
-#define type51ucd_TCM_ENABLED 18
-#define type51ucd_SUBC_INIT_RANG 19
-#define type51ucd_SUBC_FINE_RANG 20
-#define type51ucd_OFDMA_PROFILE 21
-#define type51ucd_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_RESERVED12 12
-#define IUC_RESERVED13 13
-#define IUC_RESERVED14 14
-#define IUC_EXPANSION 15
-
-void proto_register_docsis_type51ucd(void);
-void proto_reg_handoff_docsis_type51ucd(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_type51ucd = -1;
-
-static int hf_docsis_type51ucd_upstream_chid = -1;
-static int hf_docsis_type51ucd_config_ch_cnt = -1;
-static int hf_docsis_type51ucd_mini_slot_size = -1;
-static int hf_docsis_type51ucd_down_chid = -1;
-static int hf_docsis_type51ucd_type = -1;
-static int hf_docsis_type51ucd_length = -1;
-static int hf_docsis_type51ucd_burst_type = -1;
-static int hf_docsis_type51ucd_burst_length = -1;
-static int hf_docsis_type51ucd_symbol_rate = -1;
-static int hf_docsis_type51ucd_frequency = -1;
-static int hf_docsis_type51ucd_preamble_pat = -1;
-static int hf_docsis_type51ucd_iuc = -1;
-static int hf_docsis_type51ucd_ext_preamble = -1;
-static int hf_docsis_type51ucd_scdma_mode_enable = -1;
-static int hf_docsis_type51ucd_scdma_spreading_interval = -1;
-static int hf_docsis_type51ucd_scdma_codes_per_mini_slot = -1;
-static int hf_docsis_type51ucd_scdma_active_codes = -1;
-static int hf_docsis_type51ucd_scdma_code_hopping_seed = -1;
-static int hf_docsis_type51ucd_scdma_us_ratio_num = -1;
-static int hf_docsis_type51ucd_scdma_us_ratio_denom = -1;
-static int hf_docsis_type51ucd_scdma_timestamp_snapshot = -1;
-static int hf_docsis_type51ucd_maintain_power_spectral_density = -1;
-static int hf_docsis_type51ucd_ranging_required = -1;
-static int hf_docsis_type51ucd_rnghoff_cm = -1;
-static int hf_docsis_type51ucd_rnghoff_erouter = -1;
-static int hf_docsis_type51ucd_rnghoff_emta = -1;
-static int hf_docsis_type51ucd_rnghoff_estb = -1;
-static int hf_docsis_type51ucd_rnghoff_rsvd = -1;
-static int hf_docsis_type51ucd_rnghoff_id_ext = -1;
-static int hf_docsis_type51ucd_chan_class_id_cm = -1;
-static int hf_docsis_type51ucd_chan_class_id_erouter = -1;
-static int hf_docsis_type51ucd_chan_class_id_emta = -1;
-static int hf_docsis_type51ucd_chan_class_id_estb = -1;
-static int hf_docsis_type51ucd_chan_class_id_rsvd = -1;
-static int hf_docsis_type51ucd_chan_class_id_id_ext = -1;
-static int hf_docsis_type51ucd_max_scheduled_codes = -1;
-static int hf_docsis_type51ucd_active_code_hopping = -1;
-static int hf_docsis_type51ucd_higher_ucd_for_same_ucid = -1;
-static int hf_docsis_type51ucd_higher_ucd_for_same_ucid_resv = -1;
-static int hf_docsis_type51ucd_scdma_selection_active_codes = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_subc_excl_band = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_unused_subc = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_other_subc = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc5 = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc6 = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc9 = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc10 = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc11 = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc12 = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc13 = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc3_or_4 = -1;
-static int hf_docsis_type51ucd_ucd_change_ind_bitmask_reserved = -1;
-static int hf_docsis_type51ucd_ofdma_timestamp_snapshot = -1;
-static int hf_docsis_type51ucd_ofdma_cyclic_prefix_size = -1;
-static int hf_docsis_type51ucd_ofdma_rolloff_period_size = -1;
-static int hf_docsis_type51ucd_subc_spacing = -1;
-static int hf_docsis_type51ucd_cent_freq_subc0 = -1;
-static int hf_docsis_type51ucd_subcarrier_range = -1;
-static int hf_docsis_type51ucd_symb_ofdma_frame = -1;
-static int hf_docsis_type51ucd_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_scdma_scrambler_onoff = -1;
-static int hf_docsis_scdma_codes_per_subframe = -1;
-static int hf_docsis_scdma_framer_int_step_size = -1;
-static int hf_docsis_tcm_enabled = -1;
-static int hf_docsis_subc_init_rang = -1;
-static int hf_docsis_subc_fine_rang = -1;
-static int hf_docsis_type51ucd_ofdma_prof_mod_order = -1;
-static int hf_docsis_type51ucd_ofdma_prof_pilot_pattern = -1;
-static int hf_docsis_type51ucd_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 expert_field ei_docsis_type51ucd_tlvlen_bad = EI_INIT;
-static expert_field ei_docsis_type51ucd_tlvtype_bad = EI_INIT;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_type51ucd = -1;
-static gint ett_docsis_type51tlv = -1;
-static gint ett_docsis_type51_burst_tlv = -1;
-
-static dissector_handle_t docsis_type51ucd_handle;
-
-static const value_string channel_tlv_vals[] _U_ = {
-  {type51ucd_SYMBOL_RATE,                     "Symbol Rate"},
-  {type51ucd_FREQUENCY,                       "Frequency"},
-  {type51ucd_PREAMBLE,                        "Preamble Pattern"},
-  {type51ucd_EXT_PREAMBLE,                    "Extended Preamble Pattern"},
-  {type51ucd_SCDMA_MODE_ENABLE,               "SCDMA Mode Enabled"},
-  {type51ucd_SCDMA_SPREADING_INTERVAL,        "SCDMA Spreading Intervals per Frame"},
-  {type51ucd_SCDMA_CODES_PER_MINI_SLOT,       "SCDMA Codes per Mini-slot"},
-  {type51ucd_SCDMA_ACTIVE_CODES,              "SCDMA Number of Active Codes"},
-  {type51ucd_SCDMA_CODE_HOPPING_SEED,         "SCDMA Code Hopping Seed"},
-  {type51ucd_SCDMA_US_RATIO_NUM,              "SCDMA US ratio numera7tor M"},
-  {type51ucd_SCDMA_US_RATIO_DENOM,            "SCDMA US ratio denominator N"},
-  {type51ucd_SCDMA_TIMESTAMP_SNAPSHOT,        "SCDMA Timestamp Snapshot"},
-  {type51ucd_MAINTAIN_POWER_SPECTRAL_DENSITY, "Maintain Power Spectral Density"},
-  {type51ucd_RANGING_REQUIRED,                "Ranging Required"},
-  {type51ucd_MAX_SCHEDULED_CODES,             "S-CDMA Maximum Scheduled Codes"},
-  {type51ucd_RANGING_HOLD_OFF_PRIORITY_FIELD, "Ranging Hold-Off Priority Field"},
-  {type51ucd_RANGING_CHANNEL_CLASS_ID,        "Ranging Channel Class ID"},
-  {type51ucd_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING, "S-CDMA Selection Mode for Active Codes and Code Hopping"},
-  {type51ucd_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES, "S-CDMA Selection String for Active Codes"},
-  {type51ucd_HIGHER_UCD_FOR_SAME_UCID,        "Higher UCD for the same UCID present bitmap"},
-  {type51ucd_BURST_DESCR23,                   "Burst Descriptor Type 23"},
-  {type51ucd_UCD_CHANGE_IND_BITMASK,          "UCD Change Indicator Bitmask"},
-  {type51ucd_OFDMA_TIMESTAMP_SNAPSHOT,        "OFDMA Timestamp Snapshot"},
-  {type51ucd_OFDMA_CYCLIC_PREFIX_SIZE,        "OFDMA Cyclic Prefix Size"},
-  {type51ucd_OFDMA_ROLLOFF_PERIOD_SIZE,       "OFDMA Rolloff Period Size"},
-  {type51ucd_SUBCARRIER_SPACING,              "Subcarrier Spacing"},
-  {type51ucd_CENTER_FREQ_SUBC_0,              "Center Frequency of Subcarrier 0"},
-  {type51ucd_SUBC_EXCL_BAND,                  "Subcarrier Exclusion Band"},
-  {type51ucd_UNUSED_SUBC_SPEC,                "Unused Subcarrier Specification"},
-  {type51ucd_SYMB_IN_OFDMA_FRAME,             "Symbols in OFDMA frame"},
-  {type51ucd_RAND_SEED,                       "Randomization Seed"},
-  {0, NULL}
-};
-
-static const value_string burst_tlv_vals[] = {
-  {type51ucd_MODULATION,                      "Modulation Type"},
-  {type51ucd_DIFF_ENCODING,                   "Differential Encoding"},
-  {type51ucd_PREAMBLE_LEN,                    "Preamble Length"},
-  {type51ucd_PREAMBLE_VAL_OFF,                "Preamble Value Offset"},
-  {type51ucd_FEC,                             "FEC Error Correction (T)"},
-  {type51ucd_FEC_CODEWORD,                    "FEC Codeword Information Bytes (k)"},
-  {type51ucd_SCRAMBLER_SEED,                  "Scrambler Seed"},
-  {type51ucd_MAX_BURST,                       "Maximum Burst Size"},
-  {type51ucd_GUARD_TIME,                      "Guard Time Size"},
-  {type51ucd_LAST_CW_LEN,                     "Last Codeword Length"},
-  {type51ucd_SCRAMBLER_ONOFF,                 "Scrambler on/off"},
-  {type51ucd_RS_INT_DEPTH,                    "R-S Interleaver Depth (Ir)"},
-  {type51ucd_RS_INT_BLOCK,                    "R-S Interleaver Block Size (Br)"},
-  {type51ucd_PREAMBLE_TYPE,                   "Preamble Type"},
-  {type51ucd_SCMDA_SCRAMBLER_ONOFF,           "S-CDMA Spreader on/off"},
-  {type51ucd_SCDMA_CODES_PER_SUBFRAME,        "S-CDMA Codes per Subframe"},
-  {type51ucd_SCDMA_FRAMER_INT_STEP_SIZE,      "S-CDMA Framer Interleaving Step Size"},
-  {type51ucd_TCM_ENABLED,                     "TCM Encoding"},
-  {type51ucd_SUBC_INIT_RANG,                  "Subcarriers (Nir) Initial Ranging"},
-  {type51ucd_SUBC_FINE_RANG,                  "Subcarriers (Nfr) Initial Ranging"},
-  {type51ucd_OFDMA_PROFILE,                   "OFDMA Profile"},
-  {0, NULL}
-};
-
-static const value_string on_off_vals[] = {
-  {1, "On"},
-  {2, "Off"},
-  {0, NULL}
-};
-
-const true_false_string type51ucd_tfs_allow_inhibit = { "Inhibit Initial Ranging",
-                                                        "Ranging Allowed" };
-
-const true_false_string type51ucd_tfs_inhibit_allow = { "Ranging Allowed",
-                                                        "Inhibit Initial Ranging" };
-
-static const value_string mod_vals2[] = {
-  {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 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}
-};
-
-const true_false_string type51ucd_tfs_present_not_present = { "Higher UCD is present for this UCID",
-                                                              "Higher UCD is not present for this UCID" };
-
-static const value_string ofdma_prof_mod_order[] = {
-  {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}
-};
-
-
-static const value_string iuc_vals3[] = {
-  {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_RESERVED12,               "Reserved 12"},
-  {IUC_RESERVED13,               "Reserved 13"},
-  {IUC_RESERVED14,               "Reserved 14"},
-  {IUC_EXPANSION,                "IUC Expansion"},
-  {0, NULL}
-};
-
-static const value_string last_cw_len_vals[] = {
-  {1, "Fixed"},
-  {2, "Shortened"},
-  {0, NULL}
-};
-
-static const value_string max_scheduled_codes_vals[] = {
-  {1, "Enabled"},
-  {2, "Disabled"},
-  {0, NULL}
-};
-
-static const value_string ranging_required[] = {
-  {0, "No ranging required."},
-  {1, "Unicast initial ranging required."},
-  {2, "Broadcast initial ranging required."},
-  {3, "Probing required."},
-  {0, 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 const value_string ucd_change_ind_vals[] = {
-  {0, "No changes"},
-  {1, "Changes"},
-  {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 void
-subcarrier_range (
-    char *buf,
-    guint32 value)
-{
-    g_snprintf(buf, ITEM_LABEL_LENGTH,
-         "%u - %u",
-         value >> 16, value &0xFFFF);
-}
-
-/* Dissection */
-static void
-dissect_type51ucd_burstdescriptor(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, guint16 start, guint16 length)
-{
-  guint16 endtlvpos, pos = start;
-  guint16 i;
-  proto_tree *type51ucd_burst_tree;
-  proto_item *type51ucd_burst_item, *type51ucd_burst_len_item;
-  guint32 tlvlen, tlvtype;
-
-  endtlvpos = pos + length;
-  proto_tree_add_item (tree, hf_docsis_type51ucd_iuc, tvb, pos++, 1, ENC_BIG_ENDIAN);
-
-  while (pos < endtlvpos)
-  {
-    tlvtype = tvb_get_guint8 (tvb, pos);
-    type51ucd_burst_tree = proto_tree_add_subtree (tree, tvb, pos, -1,
-                                                   ett_docsis_type51_burst_tlv, &type51ucd_burst_item,
-                                                   val_to_str(tlvtype, burst_tlv_vals,
-                                                   "Unknown TLV (%u)"));
-    proto_tree_add_uint (type51ucd_burst_tree, hf_docsis_type51ucd_burst_type, tvb, pos++, 1, tlvtype);
-    type51ucd_burst_len_item = proto_tree_add_item_ret_uint (type51ucd_burst_tree, hf_docsis_type51ucd_burst_length, tvb, pos++, 1, ENC_NA, &tlvlen);
-    proto_item_set_len(type51ucd_burst_item, tlvlen + 2);
-    switch (tlvtype)
-    {
-    case type51ucd_MODULATION:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_mod_type, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_DIFF_ENCODING:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_diff_encoding, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_PREAMBLE_LEN:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_preamble_len, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_PREAMBLE_VAL_OFF:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_preamble_val_off, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_FEC:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_fec, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_FEC_CODEWORD:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_fec_codeword, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCRAMBLER_SEED:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_scrambler_seed, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_MAX_BURST:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_max_burst, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_GUARD_TIME:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_guard_time, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_LAST_CW_LEN:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_last_cw_len, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCRAMBLER_ONOFF:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_burst_scrambler_onoff, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_RS_INT_DEPTH:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_rs_int_depth, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_RS_INT_BLOCK:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_rs_int_block, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_PREAMBLE_TYPE:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_preamble_type, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCMDA_SCRAMBLER_ONOFF:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_scdma_scrambler_onoff, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_CODES_PER_SUBFRAME:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_scdma_codes_per_subframe, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_FRAMER_INT_STEP_SIZE:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_scdma_framer_int_step_size, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_TCM_ENABLED:
-      if (tlvlen == 1)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_tcm_enabled, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SUBC_INIT_RANG:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_subc_init_rang, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SUBC_FINE_RANG:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_subc_fine_rang, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_OFDMA_PROFILE:
-      if ((tlvlen % 2) == 0)
-      {
-        for(i =0; i < tlvlen; i+=2) {
-          proto_tree_add_item (type51ucd_burst_tree, hf_docsis_type51ucd_ofdma_prof_mod_order, tvb, pos + i, 1, ENC_BIG_ENDIAN);
-          proto_tree_add_item (type51ucd_burst_tree, hf_docsis_type51ucd_ofdma_prof_pilot_pattern, tvb, pos + i, 1, ENC_BIG_ENDIAN);
-          proto_tree_add_item (type51ucd_burst_tree, hf_docsis_type51ucd_ofdma_prof_num_add_minislots, tvb, pos + i + 1, 1, ENC_BIG_ENDIAN);
-        }
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u (even length expected)", length);
-      }
-      break;
-    case type51ucd_OFDMA_IR_POWER_CONTROL:
-      if (tlvlen == 2)
-      {
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_ofdma_ir_pow_ctrl_start_pow, tvb, pos, tlvlen, ENC_BIG_ENDIAN);
-        proto_tree_add_item (type51ucd_burst_tree, hf_docsis_ofdma_ir_pow_ctrl_step_size, tvb, pos + 1, tlvlen, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51ucd_burst_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    default:
-      expert_add_info_format(pinfo, type51ucd_burst_item, &ei_docsis_type51ucd_tlvtype_bad, "Unknown TLV type: %u", tlvtype);
-    }
-
-    pos += tlvlen;
-  } /*while*/
-}
-
-
-static int
-dissect_type51ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
-  guint16 pos;
-  guint8 type, symrate;
-  guint16 i;
-
-  proto_tree *type51ucd_tree, *type51tlv_tree;
-  proto_item *type51ucd_item, *type51tlv_item, *type51tlv_len_item;
-  guint32 upchid, length;
-
-  type51ucd_item = proto_tree_add_item(tree, proto_docsis_type51ucd, tvb, 0, -1, ENC_NA);
-  type51ucd_tree = proto_item_add_subtree (type51ucd_item, ett_docsis_type51ucd);
-  proto_tree_add_item_ret_uint (type51ucd_tree, hf_docsis_type51ucd_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN, &upchid);
-
-  /* if the upstream Channel ID is 0 then this is for Telephony Return) */
-  if (upchid > 0)
-    col_add_fstr (pinfo->cinfo, COL_INFO,
-                  "Type 51 UCD Message: Channel ID = %u (U%u)", upchid,
-                  upchid - 1);
-  else
-    col_add_fstr (pinfo->cinfo, COL_INFO,
-                  "Type 51 UCD Message: Channel ID = %u (Telephony Return)",
-                  upchid);
-
-  proto_tree_add_item (type51ucd_tree, hf_docsis_type51ucd_config_ch_cnt, tvb, 1, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (type51ucd_tree, hf_docsis_type51ucd_mini_slot_size, tvb, 2, 1, ENC_BIG_ENDIAN);
-  proto_tree_add_item (type51ucd_tree, hf_docsis_type51ucd_down_chid, tvb, 3, 1, ENC_BIG_ENDIAN);
-
-  pos = 4;
-  while (tvb_reported_length_remaining(tvb, pos) > 0)
-  {
-    type = tvb_get_guint8 (tvb, pos);
-    type51tlv_tree = proto_tree_add_subtree(type51ucd_tree, tvb, pos, -1,
-                                        ett_docsis_type51tlv, &type51tlv_item,
-                                        val_to_str(type, channel_tlv_vals,
-                                                   "Unknown TLV (%u)"));
-    proto_tree_add_uint (type51tlv_tree, hf_docsis_type51ucd_type,
-                           tvb, pos, 1, type);
-    pos++;
-    type51tlv_len_item = proto_tree_add_item_ret_uint (type51tlv_tree, hf_docsis_type51ucd_length,
-                           tvb, pos, 1, ENC_NA, &length);
-    pos++;
-    proto_item_set_len(type51tlv_item, length + 2);
-    switch (type)
-    {
-    case type51ucd_SYMBOL_RATE:
-      if (length == 1)
-      {
-        symrate = tvb_get_guint8 (tvb, pos);
-        proto_tree_add_uint (type51tlv_tree, hf_docsis_type51ucd_symbol_rate, tvb, pos, length, symrate * 160);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_FREQUENCY:
-      if (length == 4)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_frequency, tvb, pos, length, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_PREAMBLE:
-      proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_preamble_pat, tvb, pos, length, ENC_NA);
-      break;
-    case type51ucd_EXT_PREAMBLE:
-      proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ext_preamble, tvb, pos, length, ENC_NA);
-      break;
-    case type51ucd_SCDMA_MODE_ENABLE:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_scdma_mode_enable, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_SPREADING_INTERVAL:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_scdma_spreading_interval, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_CODES_PER_MINI_SLOT:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_scdma_codes_per_mini_slot, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_ACTIVE_CODES:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_scdma_active_codes, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_CODE_HOPPING_SEED:
-      if (length == 2)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_scdma_code_hopping_seed, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_US_RATIO_NUM:
-      if (length == 2)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_scdma_us_ratio_num, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_US_RATIO_DENOM:
-      if (length == 2)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_scdma_us_ratio_denom, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_TIMESTAMP_SNAPSHOT:
-      if (length == 9)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_scdma_timestamp_snapshot, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_MAINTAIN_POWER_SPECTRAL_DENSITY:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_maintain_power_spectral_density, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_RANGING_REQUIRED:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ranging_required, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_MAX_SCHEDULED_CODES:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_max_scheduled_codes, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_RANGING_HOLD_OFF_PRIORITY_FIELD:
-      if (length == 4)
-      {
-        static const int * ucd_rnghoff[] = {
-          &hf_docsis_type51ucd_rnghoff_cm,
-          &hf_docsis_type51ucd_rnghoff_erouter,
-          &hf_docsis_type51ucd_rnghoff_emta,
-          &hf_docsis_type51ucd_rnghoff_estb,
-          &hf_docsis_type51ucd_rnghoff_rsvd,
-          &hf_docsis_type51ucd_rnghoff_id_ext,
-          NULL
-        };
-
-        proto_tree_add_bitmask_list(type51tlv_tree, tvb, pos, length, ucd_rnghoff, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_RANGING_CHANNEL_CLASS_ID:
-      if (length == 4)
-      {
-        static const int * ucd_chan_class_id[] = {
-          &hf_docsis_type51ucd_chan_class_id_cm,
-          &hf_docsis_type51ucd_chan_class_id_erouter,
-          &hf_docsis_type51ucd_chan_class_id_emta,
-          &hf_docsis_type51ucd_chan_class_id_estb,
-          &hf_docsis_type51ucd_chan_class_id_rsvd,
-          &hf_docsis_type51ucd_chan_class_id_id_ext,
-          NULL
-        };
-
-        proto_tree_add_bitmask_list(type51tlv_tree, tvb, pos, length, ucd_chan_class_id, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_SELECTION_ACTIVE_CODES_AND_CODE_HOPPING:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_active_code_hopping, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SCDMA_SELECTION_STRING_FOR_ACTIVE_CODES:
-      if (length == 16)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_scdma_selection_active_codes, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_HIGHER_UCD_FOR_SAME_UCID:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_higher_ucd_for_same_ucid, tvb, pos, length, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_higher_ucd_for_same_ucid_resv, tvb, pos, length, ENC_BIG_ENDIAN);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_UCD_CHANGE_IND_BITMASK:
-      if (length == 2)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_subc_excl_band, tvb, pos + 1, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_unused_subc, tvb, pos + 1, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_other_subc, tvb, pos + 1, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc5, tvb, pos + 1, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc6, tvb, pos + 1, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc9, tvb, pos + 1, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc10, tvb, pos + 1, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc11, tvb, pos + 1, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc12, tvb, pos, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc13, tvb, pos, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc3_or_4, tvb, pos, 1, ENC_NA);
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ucd_change_ind_bitmask_reserved, tvb, pos, 1, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_OFDMA_TIMESTAMP_SNAPSHOT:
-      if (length == 9)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ofdma_timestamp_snapshot, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_OFDMA_CYCLIC_PREFIX_SIZE:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ofdma_cyclic_prefix_size, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_OFDMA_ROLLOFF_PERIOD_SIZE:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_ofdma_rolloff_period_size, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SUBCARRIER_SPACING:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_subc_spacing, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_CENTER_FREQ_SUBC_0:
-      if (length == 4)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_cent_freq_subc0, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SUBC_EXCL_BAND:
-      if ((length % 4) == 0)
-      {
-        for(i = 0; i < length; i+=4) {
-          proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_subcarrier_range, tvb, pos+i, 4, ENC_NA);
-        }
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_UNUSED_SUBC_SPEC:
-      if ((length % 4) == 0)
-      {
-        for(i = 0; i < length; i+=4) {
-          proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_subcarrier_range, tvb, pos+i, 4, ENC_NA);
-        }
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_SYMB_IN_OFDMA_FRAME:
-      if (length == 1)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_symb_ofdma_frame, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_RAND_SEED:
-      if (length == 3)
-      {
-        proto_tree_add_item (type51tlv_tree, hf_docsis_type51ucd_rand_seed, tvb, pos, length, ENC_NA);
-      }
-      else
-      {
-        expert_add_info_format(pinfo, type51tlv_len_item, &ei_docsis_type51ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case type51ucd_BURST_DESCR23:
-      dissect_type51ucd_burstdescriptor(tvb, pinfo, type51tlv_tree, pos, length);
-      break;
-    default:
-      expert_add_info_format(pinfo, type51tlv_item, &ei_docsis_type51ucd_tlvtype_bad, "Unknown TLV type: %u", type);
-    }        /* switch(type) */
-    pos += length;
-  }          /* while (tvb_reported_length_remaining(tvb, pos) > 0) */
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_type51ucd (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_type51ucd_upstream_chid,
-     {"Upstream Channel ID", "docsis_type51ucd.upchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_config_ch_cnt,
-     {"Config Change Count", "docsis_type51ucd.confcngcnt",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Configuration Change Count", HFILL}
-    },
-    {&hf_docsis_type51ucd_mini_slot_size,
-     {"Mini Slot Size (6.25us TimeTicks)", "docsis_type51ucd.mslotsize",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_down_chid,
-     {"Downstream Channel ID", "docsis_type51ucd.downchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Management Message", HFILL}
-    },
-    {&hf_docsis_type51ucd_type,
-     {"Type", "docsis_type51ucd.type",
-      FT_UINT8, BASE_DEC, VALS(channel_tlv_vals), 0x0,
-      "Channel TLV type", HFILL}
-    },
-    {&hf_docsis_type51ucd_length,
-     {"Length", "docsis_type51ucd.length",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Channel TLV length", HFILL}
-    },
-    {&hf_docsis_type51ucd_burst_type,
-     {"Type", "docsis_type51ucd.burst.tlvtype",
-      FT_UINT8, BASE_DEC, VALS(burst_tlv_vals), 0x0,
-      "Burst TLV type", HFILL}
-    },
-    {&hf_docsis_type51ucd_burst_length,
-     {"Length", "docsis_type51ucd.burst.tlvlen",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Burst TLV length", HFILL}
-    },
-    {&hf_docsis_type51ucd_symbol_rate,
-     {"Symbol Rate (ksym/sec)", "docsis_type51ucd.symrate",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Symbol Rate", HFILL}
-    },
-    {&hf_docsis_type51ucd_frequency,
-     {"Frequency (Hz)", "docsis_type51ucd.freq",
-      FT_UINT32, BASE_DEC, NULL, 0x0,
-      "Upstream Center Frequency", HFILL}
-    },
-    {&hf_docsis_type51ucd_preamble_pat,
-     {"Preamble Pattern", "docsis_type51ucd.preamble",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "Preamble Superstring", HFILL}
-    },
-    {&hf_docsis_type51ucd_iuc,
-     {"Interval Usage Code", "docsis_type51ucd.iuc",
-      FT_UINT8, BASE_DEC, VALS (iuc_vals3), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_mod_type,
-     {"Modulation Type", "docsis_type51ucd.burst.modtype",
-      FT_UINT8, BASE_DEC, VALS (mod_vals2), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_diff_encoding,
-     {"Differential Encoding", "docsis_type51ucd.burst.diffenc",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_preamble_len,
-     {"Preamble Length (Bits)", "docsis_type51ucd.burst.preamble_len",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_preamble_val_off,
-     {"Preamble Offset (Bits)", "docsis_type51ucd.burst.preamble_off",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_fec,
-     {"FEC (T)", "docsis_type51ucd.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_type51ucd.burst.fec_codeword",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_scrambler_seed,
-     {"Scrambler Seed", "docsis_type51ucd.burst.scrambler_seed",
-      FT_UINT16, BASE_HEX, NULL, 0x0,
-      "Burst Descriptor", HFILL}
-    },
-    {&hf_docsis_burst_max_burst,
-     {"Max Burst Size (Minislots)", "docsis_type51ucd.burst.maxburst",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_burst_guard_time,
-     {"Guard Time Size (Symbol Times)", "docsis_type51ucd.burst.guardtime",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Guard Time Size", HFILL}
-    },
-    {&hf_docsis_burst_last_cw_len,
-     {"Last Codeword Length", "docsis_type51ucd.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_type51ucd.burst.scrambleronoff",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ext_preamble,
-     {"Extended Preamble Pattern", "docsis_type51ucd.extpreamble",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_scdma_mode_enable,
-     {"SCDMA Mode Enable", "docsis_type51ucd.scdmaenable",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_scdma_spreading_interval,
-     {"SCDMA Spreading Interval", "docsis_type51ucd.scdmaspreadinginterval",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_scdma_codes_per_mini_slot,
-     {"SCDMA Codes per mini slot", "docsis_type51ucd.scdmacodesperminislot",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_scdma_active_codes,
-     {"SCDMA Active Codes", "docsis_type51ucd.scdmaactivecodes",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_scdma_code_hopping_seed,
-     {"SCDMA Code Hopping Seed", "docsis_type51ucd.scdmacodehoppingseed",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_scdma_us_ratio_num,
-     {"SCDMA US Ratio Numerator", "docsis_type51ucd.scdmausrationum",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_scdma_us_ratio_denom,
-     {"SCDMA US Ratio Denominator", "docsis_type51ucd.scdmausratiodenom",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_scdma_timestamp_snapshot,
-     {"SCDMA Timestamp Snapshot", "docsis_type51ucd.scdmatimestamp",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_maintain_power_spectral_density,
-     {"Maintain power spectral density", "docsis_type51ucd.maintainpowerspectraldensity",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ranging_required,
-     {"Ranging Required", "docsis_type51ucd.rangingrequired",
-      FT_UINT8, BASE_DEC, VALS (ranging_required), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_rnghoff_cm,
-     {"Ranging Hold-Off (CM)","docsis_type51ucd.rnghoffcm",
-      FT_BOOLEAN, 32, TFS(&type51ucd_tfs_allow_inhibit), 0x1,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_rnghoff_erouter,
-     {"Ranging Hold-Off (eRouter)",
-      "docsis_type51ucd.rnghofferouter",
-      FT_BOOLEAN, 32, TFS(&type51ucd_tfs_allow_inhibit), 0x2,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_rnghoff_emta,
-     {"Ranging Hold-Off (eMTA or EDVA)",
-      "docsis_type51ucd.rnghoffemta",
-      FT_BOOLEAN, 32, TFS(&type51ucd_tfs_allow_inhibit), 0x4,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_rnghoff_estb,
-     {"Ranging Hold-Off (DSG/eSTB)",
-      "docsis_type51ucd.rnghoffestb",
-      FT_BOOLEAN, 32, TFS(&type51ucd_tfs_allow_inhibit), 0x8,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_rnghoff_rsvd,
-     {"Reserved [0x000000]",
-      "docsis_type51ucd.rnghoffrsvd",
-      FT_UINT32, BASE_HEX, NULL, 0xFFF0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_rnghoff_id_ext,
-     {"CM Ranging Class ID Extension",
-      "docsis_type51ucd.rngidext",
-      FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_chan_class_id_cm,
-     {"Channel Class ID (CM)","docsis_type51ucd.classidcm",
-      FT_BOOLEAN, 32, TFS(&type51ucd_tfs_inhibit_allow), 0x1,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_chan_class_id_erouter,
-     {"Channel Class ID (eRouter)",
-      "docsis_type51ucd.classiderouter",
-      FT_BOOLEAN, 32, TFS(&type51ucd_tfs_inhibit_allow), 0x2,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_chan_class_id_emta,
-     {"Channel Class ID (eMTA or EDVA)",
-      "docsis_type51ucd.classidemta",
-      FT_BOOLEAN, 32, TFS(&type51ucd_tfs_inhibit_allow), 0x4,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_chan_class_id_estb,
-     {"Channel Class ID (DSG/eSTB)",
-      "docsis_type51ucd.classidestb",
-      FT_BOOLEAN, 32, TFS(&type51ucd_tfs_inhibit_allow), 0x8,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_chan_class_id_rsvd,
-     {"Reserved [0x000000]",
-      "docsis_type51ucd.classidrsvd",
-      FT_UINT32, BASE_HEX, NULL, 0xFFF0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_chan_class_id_id_ext,
-     {"CM Ranging Class ID Extension",
-      "docsis_type51ucd.classidext",
-      FT_UINT32, BASE_HEX, NULL, 0xFFFF0000,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_active_code_hopping,
-     {"S-CDMA Selection Mode for Active Codes and Code Hopping", "docsis_type51ucd.selectcodehop",
-      FT_UINT8, BASE_DEC, VALS (tlv20_vals), 0x0,
-      "SCDMA Selection Mode for Active Codes and Code Hopping", HFILL}
-    },
-    {&hf_docsis_type51ucd_scdma_selection_active_codes,
-     {"S-CDMA Selection String for Active Codes", "docsis_type51ucd.selectcode",
-      FT_BYTES, BASE_NONE, NULL, 0x0,
-      "SCDMA Selection String for Active Codes", HFILL}
-    },
-    {&hf_docsis_type51ucd_higher_ucd_for_same_ucid,
-     {"Higher UCD for the same UCID", "docsis_type51ucd.highucdpresent",
-      FT_BOOLEAN, 8, TFS(&type51ucd_tfs_present_not_present), 0x1,
-      "Higher UCD for the same UCID present bitmap", HFILL}
-    },
-    {&hf_docsis_type51ucd_higher_ucd_for_same_ucid_resv,
-     {"Reserved", "docsis_type51ucd.highucdresv",
-      FT_UINT8, BASE_HEX, NULL, 0xFE,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_max_scheduled_codes,
-     {"S-CDMA Max Scheduled Codes", "docsis_type51ucd.scdmamaxcodes",
-      FT_UINT8, BASE_DEC, VALS (max_scheduled_codes_vals), 0x0,
-      "S-CDMA Maximum Scheduled Codes", HFILL}
-    },
-    {&hf_docsis_rs_int_depth,
-     {"Scrambler On/Off", "docsis_type51ucd.burst.rsintdepth",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "R-S Interleaver Depth", HFILL}
-    },
-    {&hf_docsis_rs_int_block,
-     {"Scrambler On/Off", "docsis_type51ucd.burst.rsintblock",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "R-S Interleaver Block", HFILL}
-    },
-    {&hf_docsis_preamble_type,
-     {"Scrambler On/Off", "docsis_type51ucd.burst.preambletype",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Preamble Type", HFILL}
-    },
-    {&hf_docsis_scdma_scrambler_onoff,
-     {"Scrambler On/Off", "docsis_type51ucd.burst.scdmascrambleronoff",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      "SCDMA Scrambler On/Off", HFILL}
-    },
-    {&hf_docsis_scdma_codes_per_subframe,
-     {"SCDMA Codes per Subframe", "docsis_type51ucd.burst.scdmacodespersubframe",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_scdma_framer_int_step_size,
-     {"SCDMA Framer Interleaving Step Size", "docsis_type51ucd.burst.scdmaframerintstepsize",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_tcm_enabled,
-     {"TCM Enabled", "docsis_type51ucd.burst.tcmenabled",
-      FT_UINT8, BASE_DEC, VALS (on_off_vals), 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_subc_init_rang,
-     {"Subcarriers (Nir) Initial Ranging", "docsis_type51ucd.burst.subc_init_rang",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_subc_fine_rang,
-     {"Subcarriers (Nfr) Fine Ranging", "docsis_type51ucd.burst.subc_fine_rang",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ofdma_prof_mod_order,
-     {"OFDMA Profile: modulation", "docsis_type51ucd.burst.ofma_prof_mod_order",
-      FT_UINT8, BASE_DEC, VALS(ofdma_prof_mod_order), 0xF0,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ofdma_prof_pilot_pattern,
-     {"OFDMA Profile: pilot pattern", "docsis_type51ucd.burst.ofma_prof_pilot_pattern",
-      FT_UINT8, BASE_DEC, NULL, 0x0F,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ofdma_prof_num_add_minislots,
-     {"OFDMA Profile: Additional Minislots that have identical bit-loading and pilot pattern index", "docsis_type51ucd.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_type51ucd.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_type51ucd.burst.ofma_ir_pow_ctrl_step_size",
-      FT_UINT8, BASE_CUSTOM, CF_FUNC(ofdma_ir_pow_ctrl_step_size), 0x00,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_subc_excl_band,
-     {"UCD Change Indicator Bitmask: Subcarrier Exclusion Band TLV", "docsis_type51ucd.burst.ucd_change_ind_bitmask_subc_excl_band",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x01,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_unused_subc,
-     {"UCD Change Indicator Bitmask: Unused Subcarrier Specification TLV", "docsis_type51ucd.burst.ucd_change_ind_bitmask_unused_subc",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x02,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_other_subc,
-     {"UCD Change Indicator Bitmask: Other than Subcarrier Exclusion Band and Unused Subcarrier Specification TLV", "docsis_type51ucd.burst.ucd_change_ind_bitmask_other_subc",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x04,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc5,
-     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC5", "docsis_type51ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc5",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x08,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc6,
-     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC6", "docsis_type51ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc6",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x10,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc9,
-     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC9", "docsis_type51ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc9",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x20,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc10,
-     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC10", "docsis_type51ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc10",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x40,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc11,
-     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC11", "docsis_type51ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc11",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x80,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc12,
-     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC12", "docsis_type51ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc12",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x01,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc13,
-     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC13", "docsis_type51ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc13",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x02,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_burst_attr_iuc3_or_4,
-     {"UCD Change Indicator Bitmask: Burst Attributes associated with IUC3 or IUC4", "docsis_type51ucd.burst.ucd_change_ind_bitmask_burst_attr_iuc3_or_4",
-      FT_UINT8, BASE_DEC, VALS(ucd_change_ind_vals), 0x04,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ucd_change_ind_bitmask_reserved,
-     {"UCD Change Indicator Bitmask: Reserved", "docsis_type51ucd.burst.ucd_change_ind_bitmask_reserved",
-      FT_UINT8, BASE_HEX, NULL, 0xF8,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ofdma_timestamp_snapshot,
-     {"OFDMA Timestamp Snapshot", "docsis_type51ucd.ofdma_timestamp_snapshot",
-      FT_BYTES, BASE_NONE, NULL, 0x00,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ofdma_cyclic_prefix_size,
-     {"OFDMA Cyclic Prefix Size", "docsis_type51ucd.ofdma_cyclic_prefix_size",
-      FT_UINT8, BASE_DEC, VALS(ofdma_cyclic_prefix_size_vals), 0x00,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_ofdma_rolloff_period_size,
-     {"OFDMA Rolloff Period Size", "docsis_type51ucd.ofdma_rolloff_period_size",
-      FT_UINT8, BASE_DEC, VALS(ofdma_rolloff_period_size_vals), 0x00,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_subc_spacing,
-     {"Subcarrier Spacing", "docsis_type51ucd.subc_spacing",
-      FT_UINT8, BASE_DEC, VALS(subc_spacing_vals), 0x00,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_cent_freq_subc0,
-     {"Center Frequency of Subcarrier 0", "docsis_type51ucd.cent_freq_subc0",
-      FT_UINT8, BASE_DEC, NULL, 0x00,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_subcarrier_range,
-     {"Subcarrier range", "docsis_type51ucd.subc_range",
-      FT_UINT32, BASE_CUSTOM, CF_FUNC(subcarrier_range), 0x00,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_symb_ofdma_frame,
-     {"Symbols in OFDMA frame", "docsis_type51ucd.symb_ofdma_frame",
-      FT_UINT8, BASE_DEC, NULL, 0x00,
-      NULL, HFILL}
-    },
-    {&hf_docsis_type51ucd_rand_seed,
-     {"Randomization Seed", "docsis_type51ucd.rand_seed",
-      FT_BYTES, BASE_NONE, NULL, 0x00,
-      NULL, HFILL}
-    },
-  };
-
-
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_type51ucd_tlvlen_bad, {"docsis_type51ucd.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-    {&ei_docsis_type51ucd_tlvtype_bad, {"docsis_type51ucd.tlvtypebad", PI_PROTOCOL, PI_WARN, "Bad TLV type", EXPFILL}},
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_type51ucd,
-    &ett_docsis_type51tlv,
-    &ett_docsis_type51_burst_tlv,
-  };
-
-  expert_module_t* expert_docsis_type51ucd;
-
-  proto_docsis_type51ucd =
-    proto_register_protocol ("DOCSIS Upstream Channel Descriptor Type 51",
-                             "DOCSIS type51ucd", "docsis_type51ucd");
-
-  proto_register_field_array (proto_docsis_type51ucd, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_type51ucd = expert_register_protocol(proto_docsis_type51ucd);
-  expert_register_field_array(expert_docsis_type51ucd, ei, array_length(ei));
-
-  docsis_type51ucd_handle = register_dissector ("docsis_type51ucd", dissect_type51ucd, proto_docsis_type51ucd);
-}
-
-void
-proto_reg_handoff_docsis_type51ucd (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x33, docsis_type51ucd_handle);
-}
-
-/*
- * 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/docsis/packet-uccreq.c b/plugins/docsis/packet-uccreq.c
deleted file mode 100644 (file)
index 9a1a090..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/* packet-uccreq.c
- * Routines for Upstream Channel Change Request dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_uccreq(void);
-void proto_reg_handoff_docsis_uccreq(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_uccreq = -1;
-static int hf_docsis_uccreq_upchid = -1;
-static dissector_handle_t docsis_tlv_handle;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_uccreq = -1;
-
-static dissector_handle_t docsis_uccreq_handle;
-
-/* Dissection */
-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_uccreq_upchid, 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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_uccreq (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_uccreq_upchid,
-     {"Upstream Channel Id", "docsis_uccreq.upchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_uccreq,
-  };
-
-  proto_docsis_uccreq =
-    proto_register_protocol ("DOCSIS Upstream Channel Change Request",
-                             "DOCSIS UCC-REQ", "docsis_uccreq");
-
-  proto_register_field_array (proto_docsis_uccreq, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_uccreq_handle = register_dissector ("docsis_uccreq", dissect_uccreq, proto_docsis_uccreq);
-}
-
-void
-proto_reg_handoff_docsis_uccreq (void)
-{
-  docsis_tlv_handle = find_dissector ("docsis_tlv");
-  dissector_add_uint ("docsis_mgmt", 0x08, docsis_uccreq_handle);
-}
-
-/*
- * 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/docsis/packet-uccrsp.c b/plugins/docsis/packet-uccrsp.c
deleted file mode 100644 (file)
index 47fa5f0..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/* packet-uccrsp.c
- * Routines for Upstream Channel Change Response dissection
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-
-void proto_register_docsis_uccrsp(void);
-void proto_reg_handoff_docsis_uccrsp(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_uccrsp = -1;
-static int hf_docsis_uccrsp_upchid = -1;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_uccrsp = -1;
-
-static dissector_handle_t docsis_uccrsp_handle;
-
-/* Dissection */
-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_uccrsp_upchid, 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);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_uccrsp (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_uccrsp_upchid,
-     {"Upstream Channel Id", "docsis_uccrsp.upchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_uccrsp,
-  };
-
-  proto_docsis_uccrsp =
-    proto_register_protocol ("DOCSIS Upstream Channel Change Response",
-                             "DOCSIS UCC-RSP", "docsis_uccrsp");
-
-  proto_register_field_array (proto_docsis_uccrsp, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-
-  docsis_uccrsp_handle = register_dissector ("docsis_uccrsp", dissect_uccrsp, proto_docsis_uccrsp);
-}
-
-void
-proto_reg_handoff_docsis_uccrsp (void)
-{
-  dissector_add_uint ("docsis_mgmt", 0x09, docsis_uccrsp_handle);
-}
-
-/*
- * 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/docsis/packet-ucd.c b/plugins/docsis/packet-ucd.c
deleted file mode 100644 (file)
index dab2d98..0000000
+++ /dev/null
@@ -1,931 +0,0 @@
-/* packet-ucd.c
- * Routines for Type 2 UCD Message dissection
- * Copyright 2015, Adrian Simionov <daniel.simionov@gmail.com>
- * Copyright 2002, Anand V. Narwani <anand[AT]narwani.org>
- *
- * 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 "config.h"
-
-#include <epan/packet.h>
-#include <epan/expert.h>
-
-#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_MAINTAIN_POWER_SPECTRAL_DENSITY 15
-#define UCD_RANGING_REQUIRED 16
-#define UCD_RANGING_HOLD_OFF_PRIORITY_FIELD 18
-#define UCD_RANGING_CHANNEL_CLASS_ID 19
-
-#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 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_RESERVED12 12
-#define IUC_RESERVED13 13
-#define IUC_RESERVED14 14
-#define IUC_EXPANSION 15
-
-void proto_register_docsis_ucd(void);
-void proto_reg_handoff_docsis_ucd(void);
-
-/* Initialize the protocol and registered fields */
-static int proto_docsis_ucd = -1;
-
-static int hf_docsis_ucd_upstream_chid = -1;
-static int hf_docsis_ucd_config_ch_cnt = -1;
-static int hf_docsis_ucd_mini_slot_size = -1;
-static int hf_docsis_ucd_down_chid = -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_maintain_power_spectral_density = -1;
-static int hf_docsis_ucd_ranging_required = -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_iuc = -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 expert_field ei_docsis_ucd_tlvlen_bad = EI_INIT;
-
-/* Initialize the subtree pointers */
-static gint ett_docsis_ucd = -1;
-static gint ett_docsis_tlv = -1;
-static gint ett_docsis_burst_tlv = -1;
-
-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_MAINTAIN_POWER_SPECTRAL_DENSITY, "Maintain Power Spectral Density"},
-  {UCD_RANGING_REQUIRED, "Ranging Required"},
-  {UCD_RANGING_HOLD_OFF_PRIORITY_FIELD, "Ranging Hold-Off Priority Field"},
-  {UCD_RANGING_CHANNEL_CLASS_ID, "Ranging Channel Class ID"},
-  {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"},
-  {0, NULL}
-};
-
-static const value_string on_off_vals[] = {
-  {1, "On"},
-  {2, "Off"},
-  {0, NULL}
-};
-
-static const true_false_string tfs_allow_inhibit = { "Inhibit Initial Ranging", "Ranging Allowed" };
-
-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_RESERVED12,               "Reserved"},
-  {IUC_RESERVED13,               "Reserved"},
-  {IUC_RESERVED14,               "Reserved"},
-  {IUC_EXPANSION,                "Expanded IUC"},
-  {0, NULL}
-};
-
-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}
-};
-
-/* Dissection */
-static int
-dissect_ucd (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_)
-{
-  int pos, tlvpos, endtlvpos;
-  guint32 length, tlvlen;
-  guint8 type, tlvtype;
-  proto_tree *ucd_tree, *tlv_tree, *burst_tree;
-  proto_item *ucd_item, *tlv_item, *tlv_len_item, *burst_item, *burst_len_item;
-  guint8 upchid, symrate;
-
-  upchid = tvb_get_guint8 (tvb, 0);
-
-  /* if the upstream Channel ID is 0 then this is for Telephony Return) */
-  if (upchid > 0)
-    col_add_fstr (pinfo->cinfo, COL_INFO,
-                  "Type 2 UCD Message: Channel ID = %u (U%u)", upchid,
-                  upchid - 1);
-  else
-    col_add_fstr (pinfo->cinfo, COL_INFO,
-                  "Type 2 UCD Message: Channel ID = %u (Telephony Return)",
-                  upchid);
-
-  ucd_item = proto_tree_add_item(tree, proto_docsis_ucd, tvb, 0, -1, ENC_NA);
-  ucd_tree = proto_item_add_subtree (ucd_item, ett_docsis_ucd);
-  proto_tree_add_item (ucd_tree, hf_docsis_ucd_upstream_chid, tvb, 0, 1, ENC_BIG_ENDIAN);
-  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_ucd_down_chid, tvb, 3, 1, ENC_BIG_ENDIAN);
-
-  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_ucd_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_ucd_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_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_ucd_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_ucd_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_ucd_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_ucd_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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-      }
-      break;
-    case UCD_BURST_DESCR:
-      tlvpos = pos;
-      endtlvpos = tlvpos + length;
-      proto_tree_add_item (tlv_tree, hf_docsis_ucd_iuc, tvb, tlvpos++, 1, ENC_BIG_ENDIAN);
-      while (tlvpos < endtlvpos)
-      {
-        tlvtype = tvb_get_guint8 (tvb, tlvpos);
-        burst_tree = proto_tree_add_subtree (tlv_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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        } /* switch(tlvtype) */
-
-        tlvpos += tlvlen;
-      } /* while (tlvpos < endtlvpos) */
-      break;
-    case UCD_BURST_DESCR5:
-      /* DOCSIS 2.0 Upstream Channel Descriptor */
-      tlvpos = pos;
-      endtlvpos = tlvpos + length;
-      proto_tree_add_item (tlv_tree, hf_docsis_ucd_iuc, tvb, tlvpos++, 1, ENC_BIG_ENDIAN);
-      while (tlvpos < endtlvpos)
-      {
-        tlvtype = tvb_get_guint8 (tvb, tlvpos);
-        burst_tree = proto_tree_add_subtree (tlv_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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          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_ucd_tlvlen_bad, "Wrong TLV length: %u", length);
-          }
-          break;
-        }           /* switch(tlvtype) */
-        tlvpos += tlvlen;
-      }  /* while (tlvpos < endtlvpos) */
-      break;
-    }    /* switch(type) */
-    pos += length;
-  }      /* tvb_reported_length_remaining(tvb, pos) > 0 */
-
-  return tvb_captured_length(tvb);
-}
-
-/* Register the protocol with Wireshark */
-void
-proto_register_docsis_ucd (void)
-{
-  static hf_register_info hf[] = {
-    {&hf_docsis_ucd_upstream_chid,
-     {"Upstream Channel ID", "docsis_ucd.upchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      NULL, HFILL}
-    },
-    {&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_down_chid,
-     {"Downstream Channel ID", "docsis_ucd.downchid",
-      FT_UINT8, BASE_DEC, NULL, 0x0,
-      "Management Message", 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_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_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_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}
-    },
-  };
-
-  static ei_register_info ei[] = {
-    {&ei_docsis_ucd_tlvlen_bad, {"docsis_ucd.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}},
-  };
-
-  static gint *ett[] = {
-    &ett_docsis_ucd,
-    &ett_docsis_tlv,
-    &ett_docsis_burst_tlv,
-  };
-
-  expert_module_t* expert_docsis_ucd;
-
-  proto_docsis_ucd =
-    proto_register_protocol ("DOCSIS Upstream Channel Descriptor", "DOCSIS UCD", "docsis_ucd");
-
-  proto_register_field_array (proto_docsis_ucd, hf, array_length (hf));
-  proto_register_subtree_array (ett, array_length (ett));
-  expert_docsis_ucd = expert_register_protocol(proto_docsis_ucd);
-  expert_register_field_array(expert_docsis_ucd, ei, array_length(ei));
-
-  docsis_ucd_handle = register_dissector ("docsis_ucd", dissect_ucd, proto_docsis_ucd);
-}
-
-void
-proto_reg_handoff_docsis_ucd (void)
-{
-   dissector_add_uint ("docsis_mgmt", 0x02, docsis_ucd_handle);
-}
-
-/*
- * 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:
- */