From 572a2e93f48efd68ae5160ba0e596e51a4ea3da2 Mon Sep 17 00:00:00 2001 From: Michael Mann Date: Wed, 10 May 2017 07:25:15 -0400 Subject: DOCSIS: Simplify all MAC Management into a single file. 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 Tested-by: Petri Dish Buildbot Reviewed-by: Michael Mann --- plugins/docsis/CMakeLists.txt | 44 - plugins/docsis/Makefile.am | 44 - plugins/docsis/packet-bintrngreq.c | 142 - plugins/docsis/packet-bpkmattr.c | 574 --- plugins/docsis/packet-bpkmreq.c | 144 - plugins/docsis/packet-bpkmrsp.c | 145 - plugins/docsis/packet-cmctrlreq.c | 107 - plugins/docsis/packet-cmctrlrsp.c | 115 - plugins/docsis/packet-cmstatus.c | 330 -- plugins/docsis/packet-dbcack.c | 114 - plugins/docsis/packet-dbcreq.c | 121 - plugins/docsis/packet-dbcrsp.c | 118 - plugins/docsis/packet-dccack.c | 212 - plugins/docsis/packet-dccreq.c | 733 ---- plugins/docsis/packet-dccrsp.c | 336 -- plugins/docsis/packet-dcd.c | 1075 ----- plugins/docsis/packet-dpd.c | 400 -- plugins/docsis/packet-dpvreq.c | 159 - plugins/docsis/packet-dpvrsp.c | 159 - plugins/docsis/packet-dsaack.c | 117 - plugins/docsis/packet-dsareq.c | 108 - plugins/docsis/packet-dsarsp.c | 118 - plugins/docsis/packet-dscack.c | 118 - plugins/docsis/packet-dscreq.c | 108 - plugins/docsis/packet-dscrsp.c | 118 - plugins/docsis/packet-dsdreq.c | 124 - plugins/docsis/packet-dsdrsp.c | 118 - plugins/docsis/packet-intrngreq.c | 116 - plugins/docsis/packet-macmgmt.c | 7960 +++++++++++++++++++++++++++++++++++- plugins/docsis/packet-map.c | 246 -- plugins/docsis/packet-mdd.c | 1198 ------ plugins/docsis/packet-ocd.c | 410 -- plugins/docsis/packet-regack.c | 119 - plugins/docsis/packet-regreq.c | 109 - plugins/docsis/packet-regreqmp.c | 124 - plugins/docsis/packet-regrsp.c | 118 - plugins/docsis/packet-regrspmp.c | 133 - plugins/docsis/packet-rngreq.c | 120 - plugins/docsis/packet-rngrsp.c | 278 -- plugins/docsis/packet-sync.c | 101 - plugins/docsis/packet-tlv-cmctrl.c | 368 -- plugins/docsis/packet-tlv.c | 12 +- plugins/docsis/packet-tlv.h | 2 + plugins/docsis/packet-type29ucd.c | 1039 ----- plugins/docsis/packet-type35ucd.c | 1105 ----- plugins/docsis/packet-type51ucd.c | 1550 ------- plugins/docsis/packet-uccreq.c | 109 - plugins/docsis/packet-uccrsp.c | 103 - plugins/docsis/packet-ucd.c | 931 ----- 49 files changed, 7864 insertions(+), 14388 deletions(-) delete mode 100644 plugins/docsis/packet-bintrngreq.c delete mode 100644 plugins/docsis/packet-bpkmattr.c delete mode 100644 plugins/docsis/packet-bpkmreq.c delete mode 100644 plugins/docsis/packet-bpkmrsp.c delete mode 100644 plugins/docsis/packet-cmctrlreq.c delete mode 100644 plugins/docsis/packet-cmctrlrsp.c delete mode 100644 plugins/docsis/packet-cmstatus.c delete mode 100644 plugins/docsis/packet-dbcack.c delete mode 100644 plugins/docsis/packet-dbcreq.c delete mode 100644 plugins/docsis/packet-dbcrsp.c delete mode 100644 plugins/docsis/packet-dccack.c delete mode 100644 plugins/docsis/packet-dccreq.c delete mode 100644 plugins/docsis/packet-dccrsp.c delete mode 100644 plugins/docsis/packet-dcd.c delete mode 100644 plugins/docsis/packet-dpd.c delete mode 100644 plugins/docsis/packet-dpvreq.c delete mode 100644 plugins/docsis/packet-dpvrsp.c delete mode 100644 plugins/docsis/packet-dsaack.c delete mode 100644 plugins/docsis/packet-dsareq.c delete mode 100644 plugins/docsis/packet-dsarsp.c delete mode 100644 plugins/docsis/packet-dscack.c delete mode 100644 plugins/docsis/packet-dscreq.c delete mode 100644 plugins/docsis/packet-dscrsp.c delete mode 100644 plugins/docsis/packet-dsdreq.c delete mode 100644 plugins/docsis/packet-dsdrsp.c delete mode 100644 plugins/docsis/packet-intrngreq.c delete mode 100644 plugins/docsis/packet-map.c delete mode 100644 plugins/docsis/packet-mdd.c delete mode 100644 plugins/docsis/packet-ocd.c delete mode 100644 plugins/docsis/packet-regack.c delete mode 100644 plugins/docsis/packet-regreq.c delete mode 100644 plugins/docsis/packet-regreqmp.c delete mode 100644 plugins/docsis/packet-regrsp.c delete mode 100644 plugins/docsis/packet-regrspmp.c delete mode 100644 plugins/docsis/packet-rngreq.c delete mode 100644 plugins/docsis/packet-rngrsp.c delete mode 100644 plugins/docsis/packet-sync.c delete mode 100644 plugins/docsis/packet-tlv-cmctrl.c delete mode 100644 plugins/docsis/packet-type29ucd.c delete mode 100644 plugins/docsis/packet-type35ucd.c delete mode 100644 plugins/docsis/packet-type51ucd.c delete mode 100644 plugins/docsis/packet-uccreq.c delete mode 100644 plugins/docsis/packet-uccrsp.c delete mode 100644 plugins/docsis/packet-ucd.c (limited to 'plugins/docsis') diff --git a/plugins/docsis/CMakeLists.txt b/plugins/docsis/CMakeLists.txt index 0025bc66ca..730fda199c 100644 --- a/plugins/docsis/CMakeLists.txt +++ b/plugins/docsis/CMakeLists.txt @@ -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 ) diff --git a/plugins/docsis/Makefile.am b/plugins/docsis/Makefile.am index 5415c6800f..7c4fbd4924 100644 --- a/plugins/docsis/Makefile.am +++ b/plugins/docsis/Makefile.am @@ -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 index d9fe14e3c0..0000000000 --- a/plugins/docsis/packet-bintrngreq.c +++ /dev/null @@ -1,142 +0,0 @@ -/* packet-bintrngreq.c - * Routines for DOCSIS 3.0 Bonded Intial Ranging Request Message dissection. - * Copyright 2009, Geoffrey Kimball - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 1fc3183bfa..0000000000 --- a/plugins/docsis/packet-bpkmattr.c +++ /dev/null @@ -1,574 +0,0 @@ -/* packet-bpkmattr.c - * Routines for Baseline Privacy Key Management Attributes dissection - * Copyright 2017, Adrian Simionov - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -/* 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 index 6676fa857b..0000000000 --- a/plugins/docsis/packet-bpkmreq.c +++ /dev/null @@ -1,144 +0,0 @@ -/* packet-bpkmreq.c - * Routines for Baseline Privacy Key Management Request dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 78f19d7d50..0000000000 --- a/plugins/docsis/packet-bpkmrsp.c +++ /dev/null @@ -1,145 +0,0 @@ -/* packet-bpkmrsp.c - * Routines for Baseline Privacy Key Management Response dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index c232355193..0000000000 --- a/plugins/docsis/packet-cmctrlreq.c +++ /dev/null @@ -1,107 +0,0 @@ -/* packet-cmctrlreq.c - * Routines for DOCSIS 3.0 CM Control Request Message dissection. - * Copyright 2010, Guido Reismueller - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 9c514a5165..0000000000 --- a/plugins/docsis/packet-cmctrlrsp.c +++ /dev/null @@ -1,115 +0,0 @@ -/* packet-cmctrlrsp.c - * Routines for DOCSIS 3.0 CM Control Response Message dissection. - * Copyright 2010, Guido Reismueller - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -#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 index 7fd397922c..0000000000 --- a/plugins/docsis/packet-cmstatus.c +++ /dev/null @@ -1,330 +0,0 @@ -/* packet-cmstatus.c - * Routines for DOCSIS 3.0 CM-STATUS Report Message dissection. - * Copyright 2011, Hendrik Robbel - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -#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 index 03d94df321..0000000000 --- a/plugins/docsis/packet-dbcack.c +++ /dev/null @@ -1,114 +0,0 @@ -/* packet-dbcack.c - * Routines for DOCSIS 3.0 Dynamic Bonding Change Acknowledge Message dissection. - * Copyright 2010, Guido Reismueller - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index f9c8399805..0000000000 --- a/plugins/docsis/packet-dbcreq.c +++ /dev/null @@ -1,121 +0,0 @@ -/* packet-dbcreq.c - * Routines for DOCSIS 3.0 Dynamic Bonding Change Request Message dissection. - * Copyright 2010, Guido Reismueller - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index a07a0001d9..0000000000 --- a/plugins/docsis/packet-dbcrsp.c +++ /dev/null @@ -1,118 +0,0 @@ -/* packet-dbcrsp.c - * Routines for DOCSIS 3.0 Dynamic Bonding Change Response Message dissection. - * Copyright 2010, Guido Reismueller - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 4a20920008..0000000000 --- a/plugins/docsis/packet-dccack.c +++ /dev/null @@ -1,212 +0,0 @@ -/* packet-dccack.c - * Routines for DCC Acknowledge Message dissection - * Copyright 2004, Darryl Hymel - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -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 index 6ace50030f..0000000000 --- a/plugins/docsis/packet-dccreq.c +++ /dev/null @@ -1,733 +0,0 @@ -/* packet-dccreq.c - * Routines for DCC Request Message dissection - * Copyright 2004, Darryl Hymel - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -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 index b71584feee..0000000000 --- a/plugins/docsis/packet-dccrsp.c +++ /dev/null @@ -1,336 +0,0 @@ -/* packet-dccrsp.c - * Routines for DCC Response Message dissection - * Copyright 2004, Darryl Hymel - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -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 index 1e9976f4b7..0000000000 --- a/plugins/docsis/packet-dcd.c +++ /dev/null @@ -1,1075 +0,0 @@ -/* packet-dcd.c - * Routines for DCD Message dissection - * Copyright 2004, Darryl Hymel - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -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 index 47c509c689..0000000000 --- a/plugins/docsis/packet-dpd.c +++ /dev/null @@ -1,400 +0,0 @@ -/* packet-dpd.c - * Routines for DOCSIS 3.1 Downstream Profile Descriptor dissection. - * Copyright 2016, Bruno Verstuyft - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - - -#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 index 05db59ab30..0000000000 --- a/plugins/docsis/packet-dpvreq.c +++ /dev/null @@ -1,159 +0,0 @@ -/* packet-dpvreq.c - * Routines for DOCSIS 3.0 DOCSIS Path Verify Response Message dissection. - * Copyright 2010, Guido Reismueller - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index c7ffb990c1..0000000000 --- a/plugins/docsis/packet-dpvrsp.c +++ /dev/null @@ -1,159 +0,0 @@ -/* packet-dpvrsp.c - * Routines for DOCSIS 3.0 DOCSIS Path Verify Request Message dissection. - * Copyright 2010, Guido Reismueller - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index fbbe629a3b..0000000000 --- a/plugins/docsis/packet-dsaack.c +++ /dev/null @@ -1,117 +0,0 @@ -/* packet-dsaack.c - * Routines for Dynamic Service Addition Acknowledge dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 3375c5f680..0000000000 --- a/plugins/docsis/packet-dsareq.c +++ /dev/null @@ -1,108 +0,0 @@ -/* packet-dsareq.c - * Routines for Dynamic Service Addition Request dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 5d85ed326e..0000000000 --- a/plugins/docsis/packet-dsarsp.c +++ /dev/null @@ -1,118 +0,0 @@ -/* packet-dsarsp.c - * Routines for Dynamic Service Addition Response dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 09803feaf4..0000000000 --- a/plugins/docsis/packet-dscack.c +++ /dev/null @@ -1,118 +0,0 @@ -/* packet-dscack.c - * Routines for Dynamic Service Change Acknowledge dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index c8f3478066..0000000000 --- a/plugins/docsis/packet-dscreq.c +++ /dev/null @@ -1,108 +0,0 @@ -/* packet-dscreq.c - * Routines for Dynamic Service Change Request dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index dba96622b5..0000000000 --- a/plugins/docsis/packet-dscrsp.c +++ /dev/null @@ -1,118 +0,0 @@ -/* packet-dscrsp.c - * Routines for Dynamic Service Change Response dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 3c4271c311..0000000000 --- a/plugins/docsis/packet-dsdreq.c +++ /dev/null @@ -1,124 +0,0 @@ -/* packet-dsdreq.c - * Routines for Dynamic Service Delete Request dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index d9cd0f42ec..0000000000 --- a/plugins/docsis/packet-dsdrsp.c +++ /dev/null @@ -1,118 +0,0 @@ -/* packet-dsdrsp.c - * Routines for Dynamic Service Delete Response dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 0ad493ec1e..0000000000 --- a/plugins/docsis/packet-intrngreq.c +++ /dev/null @@ -1,116 +0,0 @@ -/* packet-intrngreq.c - * Routines for Intial Ranging Request Message dissection - * Copyright 2003, Brian Wheeler - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -/* 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: - */ diff --git a/plugins/docsis/packet-macmgmt.c b/plugins/docsis/packet-macmgmt.c index 35c4e264a7..f01dcd441a 100644 --- a/plugins/docsis/packet-macmgmt.c +++ b/plugins/docsis/packet-macmgmt.c @@ -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 * + * Routines for Type 2 UCD Message dissection + * Copyright 2015, Adrian Simionov + * Copyright 2002, Anand V. Narwani + * + * Routines for Sync Message dissection + * Routines for REG-REQ-MP dissection + * Copyright 2007, Bruno Verstuyft + * + * 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 + * + * Routines for DCC Message dissection + * Routines for DCD Message dissection + * Copyright 2004, Darryl Hymel + * + * Routines for Type 29 UCD - DOCSIS 2.0 only - Message dissection + * Copyright 2015, Adrian Simionov + * Copyright 2003, Brian Wheeler + * + * Routines for Intial Ranging Request Message dissection + * Copyright 2003, Brian Wheeler + * + * Routines for Baseline Privacy Key Management Attributes dissection + * Copyright 2017, Adrian Simionov + * Copyright 2002, Anand V. Narwani + * + * Routines for MDD Message dissection + * Copyright 2014, Adrian Simionov + * Copyright 2007, Bruno Verstuyft + * + * Routines for DOCSIS 3.0 Bonded Intial Ranging Request Message dissection. + * Copyright 2009, Geoffrey Kimball + * + * Routines for Type 35 UCD - DOCSIS 3.0 only - Message dissection + * Copyright 2015, Adrian Simionov + * + * 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 + * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs @@ -24,6 +73,12 @@ #include "config.h" #include +#include +#include +#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 @@ -75,13 +130,852 @@ #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 index 8d13e1e50f..0000000000 --- a/plugins/docsis/packet-map.c +++ /dev/null @@ -1,246 +0,0 @@ -/* Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -#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 index 5573f9da04..0000000000 --- a/plugins/docsis/packet-mdd.c +++ /dev/null @@ -1,1198 +0,0 @@ -/* packet-mdd.c - * - * Routines for MDD Message dissection - * Copyright 2014, Adrian Simionov - * Copyright 2007, Bruno Verstuyft - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -#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 index cec82e3386..0000000000 --- a/plugins/docsis/packet-ocd.c +++ /dev/null @@ -1,410 +0,0 @@ -/* packet-ocd.c - * Routines for DOCSIS 3.1 OFDM Channel Descriptor dissection. - * Copyright 2016, Bruno Verstuyft - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -#include - -#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 index 3e288ce312..0000000000 --- a/plugins/docsis/packet-regack.c +++ /dev/null @@ -1,119 +0,0 @@ -/* packet-regack.c - * Routines for Registration Acknowledge Message dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 6bf6fb9b91..0000000000 --- a/plugins/docsis/packet-regreq.c +++ /dev/null @@ -1,109 +0,0 @@ -/* packet-regreq.c - * Routines for Registration Request dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 1afa357653..0000000000 --- a/plugins/docsis/packet-regreqmp.c +++ /dev/null @@ -1,124 +0,0 @@ -/* packet-regreqmp.c - * Routines for REG-REQ-MP Message dissection - * Copyright 2007, Bruno Verstuyft - * - * Based on packet-regreq.c (by Anand V. Narwani ) - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 896512e36a..0000000000 --- a/plugins/docsis/packet-regrsp.c +++ /dev/null @@ -1,118 +0,0 @@ -/* packet-regrsp.c - * Routines for Registration Response Message dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index e43d0bea62..0000000000 --- a/plugins/docsis/packet-regrspmp.c +++ /dev/null @@ -1,133 +0,0 @@ -/* packet-regrspmp.c - * Routines for REG-RSP-MP Message dissection - * Copyright 2007, Bruno Verstuyft - * - * Based on packet-regrsp.c (by Anand V. Narwani ) - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 2e93daa188..0000000000 --- a/plugins/docsis/packet-rngreq.c +++ /dev/null @@ -1,120 +0,0 @@ -/* packet-rngreq.c - * Routines for Ranging Request Message dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 7dfc51b015..0000000000 --- a/plugins/docsis/packet-rngrsp.c +++ /dev/null @@ -1,278 +0,0 @@ -/* packet-rngrsp.c - * Routines for Ranging Response Message dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -#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 index 021d099be0..0000000000 --- a/plugins/docsis/packet-sync.c +++ /dev/null @@ -1,101 +0,0 @@ -/* packet-sync.c - * Routines for Sync Message dissection - * Copyright 2007, Bruno Verstuyft - * - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index b51d6d2a04..0000000000 --- a/plugins/docsis/packet-tlv-cmctrl.c +++ /dev/null @@ -1,368 +0,0 @@ -/* packet-tlv-cmctrl.c - * Routines to Dissect TLV's for CM-Control Messages - * Copyright 2010, Guido Reismueller - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -#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: - */ diff --git a/plugins/docsis/packet-tlv.c b/plugins/docsis/packet-tlv.c index 0d0bc0a3a4..05f44e7785 100644 --- a/plugins/docsis/packet-tlv.c +++ b/plugins/docsis/packet-tlv.c @@ -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, diff --git a/plugins/docsis/packet-tlv.h b/plugins/docsis/packet-tlv.h index cffcbac208..dbf1a81f1f 100644 --- a/plugins/docsis/packet-tlv.h +++ b/plugins/docsis/packet-tlv.h @@ -462,4 +462,6 @@ #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 index 893d445c21..0000000000 --- a/plugins/docsis/packet-type29ucd.c +++ /dev/null @@ -1,1039 +0,0 @@ -/* packet-type29ucd.c - * - * Routines for Type 29 UCD - DOCSIS 2.0 only - Message dissection - * Copyright 2015, Adrian Simionov - * Copyright 2003, Brian Wheeler - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -#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 index 737d78beb7..0000000000 --- a/plugins/docsis/packet-type35ucd.c +++ /dev/null @@ -1,1105 +0,0 @@ -/* packet-type35ucd.c - * - * Routines for Type 35 UCD - DOCSIS 3.0 only - Message dissection - * Copyright 2015, Adrian Simionov - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -#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 index 1b7684b80a..0000000000 --- a/plugins/docsis/packet-type51ucd.c +++ /dev/null @@ -1,1550 +0,0 @@ -/* packet-type51ucd.c - * - * Routines for Type 51 UCD - DOCSIS 3.1 only - Message dissection - * Copyright 2016, Bruno Verstuyft - * Based on packet-type35ucd.c (Copyright 2015, Adrian Simionov ) - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -#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 index 9a1a090160..0000000000 --- a/plugins/docsis/packet-uccreq.c +++ /dev/null @@ -1,109 +0,0 @@ -/* packet-uccreq.c - * Routines for Upstream Channel Change Request dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index 47fa5f0072..0000000000 --- a/plugins/docsis/packet-uccrsp.c +++ /dev/null @@ -1,103 +0,0 @@ -/* packet-uccrsp.c - * Routines for Upstream Channel Change Response dissection - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 - -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 index dab2d9861f..0000000000 --- a/plugins/docsis/packet-ucd.c +++ /dev/null @@ -1,931 +0,0 @@ -/* packet-ucd.c - * Routines for Type 2 UCD Message dissection - * Copyright 2015, Adrian Simionov - * Copyright 2002, Anand V. Narwani - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 -#include - -#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: - */ -- cgit v1.2.1