diff options
Diffstat (limited to 'plugins/docsis/packet-tlv.c')
-rw-r--r-- | plugins/docsis/packet-tlv.c | 685 |
1 files changed, 363 insertions, 322 deletions
diff --git a/plugins/docsis/packet-tlv.c b/plugins/docsis/packet-tlv.c index febb9ac019..0d0bc0a3a4 100644 --- a/plugins/docsis/packet-tlv.c +++ b/plugins/docsis/packet-tlv.c @@ -26,7 +26,7 @@ #include "config.h" #include <epan/packet.h> -#include <epan/exceptions.h> +#include <epan/expert.h> #include "packet-tlv.h" @@ -434,6 +434,8 @@ static gint ett_docsis_tlv_sec_assoc = -1; static gint ett_docsis_tlv_ch_asgn = -1; static gint ett_docsis_cmts_mc_sess_enc = -1; +static expert_field ei_docsis_tlv_tlvlen_bad = EI_INIT; + static const true_false_string on_off_tfs = { "On", "Off" @@ -714,15 +716,15 @@ static const value_string fctype_fwd_vals[] = { /* Dissection */ static void -dissect_phs_err (tvbuff_t * tvb, proto_tree * tree, int start, - guint16 len) +dissect_phs_err (tvbuff_t * tvb, packet_info *pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *err_tree; + proto_item *err_item; int pos = start; err_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sflow_err, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sflow_err, &err_item, "5 Service Flow Error Encodings (Length = %u)", len); while (pos < (start + len)) @@ -739,7 +741,7 @@ dissect_phs_err (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case PHS_ERR_CODE: @@ -750,7 +752,7 @@ dissect_phs_err (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case PHS_ERR_MSG: @@ -764,14 +766,15 @@ dissect_phs_err (tvbuff_t * tvb, proto_tree * tree, int start, } static void -dissect_phs (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) +dissect_phs (tvbuff_t * tvb, packet_info *pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *phs_tree; + proto_item *phs_item; int pos = start; phs_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_phs, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_phs, &phs_item, "26 PHS Encodings (Length = %u)", len); while (pos < (start + len)) @@ -788,7 +791,7 @@ dissect_phs (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case PHS_CLSFR_ID: @@ -799,7 +802,7 @@ dissect_phs (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case PHS_SFLOW_REF: @@ -810,7 +813,7 @@ dissect_phs (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case PHS_SFLOW_ID: @@ -821,7 +824,7 @@ dissect_phs (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case PHS_DSC_ACTION: @@ -832,11 +835,11 @@ dissect_phs (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case PHS_ERRORS: - dissect_phs_err (tvb, phs_tree, pos, length); + dissect_phs_err (tvb, pinfo, phs_tree, pos, length); break; case PHS_FIELD: proto_tree_add_item (phs_tree, hf_docsis_tlv_phs_phsf, tvb, pos, @@ -850,7 +853,7 @@ dissect_phs (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case PHS_MASK: @@ -865,7 +868,7 @@ dissect_phs (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case PHS_VERIFICATION: @@ -876,7 +879,7 @@ dissect_phs (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, phs_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case PHS_VENDOR_SPEC: @@ -912,15 +915,16 @@ dissect_reqxmit_policy (tvbuff_t * tvb, proto_tree * tree, int start) } static void -dissect_sflow_err (tvbuff_t * tvb, proto_tree * tree, int start, +dissect_sflow_err (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *err_tree; + proto_item *err_item; int pos = start; err_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sflow_err, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sflow_err, &err_item, "5 Service Flow Error Encodings (Length = %u)", len); while (pos < (start + len)) @@ -937,7 +941,7 @@ dissect_sflow_err (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_ERR_CODE: @@ -948,7 +952,7 @@ dissect_sflow_err (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_ERR_MSG: @@ -962,8 +966,8 @@ dissect_sflow_err (tvbuff_t * tvb, proto_tree * tree, int start, } static void -dissect_downstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, - int start, guint16 len) +dissect_downstream_sflow (tvbuff_t * tvb, packet_info* pinfo, proto_tree * sflow_tree, + proto_item* sflow_item, int start, guint16 len) { guint8 type, length; int pos = start; @@ -983,8 +987,7 @@ dissect_downstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); - + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -994,8 +997,8 @@ dissect_downstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } static void -dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, - int start, guint16 len) +dissect_upstream_sflow (tvbuff_t * tvb, packet_info* pinfo, proto_tree * sflow_tree, + proto_item* sflow_item, int start, guint16 len) { guint8 type, length; int pos = start; @@ -1015,8 +1018,7 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); - + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_SCHEDULING_TYPE: @@ -1027,7 +1029,7 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_REQ_XMIT_POL: @@ -1042,7 +1044,7 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_POLL_JTTR_TOL: @@ -1054,7 +1056,7 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_UG_SIZE: @@ -1065,7 +1067,7 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_NOM_GRNT_INTV: @@ -1077,7 +1079,7 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_GRNT_JTTR_TOL: @@ -1089,7 +1091,7 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_GRNTS_PER_INTV: @@ -1101,7 +1103,7 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_IP_TOS_OVERWRITE: @@ -1113,7 +1115,7 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_UG_TIME_REF: @@ -1125,7 +1127,7 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; @@ -1136,20 +1138,21 @@ dissect_upstream_sflow (tvbuff_t * tvb, proto_tree * sflow_tree, } static void -dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, +dissect_sflow (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len, guint8 direction) { guint8 type, length; proto_tree *sflow_tree; + proto_item *sflow_item; int pos = start; if (direction == 24) sflow_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &sflow_item, "24 Upstream Service Flow (Length = %u)", len); else if (direction == 25) sflow_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &sflow_item, "25 Downstream Service Flow (Length = %u)", len); else return; @@ -1168,7 +1171,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_ID: @@ -1179,7 +1182,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_SID: @@ -1190,7 +1193,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_SERVICE_CLASS_NAME: @@ -1198,7 +1201,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, pos, length, ENC_ASCII|ENC_NA); break; case SFW_ERRORS: - dissect_sflow_err (tvb, sflow_tree, pos, length); + dissect_sflow_err (tvb, pinfo, sflow_tree, pos, length); break; case SFW_QOS_SET_TYPE: if (length == 1) @@ -1208,7 +1211,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_TRAF_PRI: @@ -1219,7 +1222,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_MAX_SUSTAINED: @@ -1230,7 +1233,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_MAX_BURST: @@ -1241,7 +1244,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_MIN_RSVD_TRAF: @@ -1252,7 +1255,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_MIN_RSVD_PACKETSIZE: @@ -1264,7 +1267,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_ACTIVE_QOS_TIMEOUT: @@ -1276,7 +1279,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_ADMITT_QOS_TIMEOUT: @@ -1288,7 +1291,7 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sflow_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SFW_VENDOR_SPEC: @@ -1297,9 +1300,9 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, break; default: if (direction == 24) - dissect_upstream_sflow (tvb, sflow_tree, pos - 2, length); + dissect_upstream_sflow (tvb, pinfo, sflow_tree, sflow_item, pos - 2, length); else - dissect_downstream_sflow (tvb, sflow_tree, pos - 2, length); + dissect_downstream_sflow (tvb, pinfo, sflow_tree, sflow_item, pos - 2, length); break; } /* switch (type) */ @@ -1309,15 +1312,16 @@ dissect_sflow (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len, } static void -dissect_dot1q_clsfr (tvbuff_t * tvb, proto_tree * tree, int start, +dissect_dot1q_clsfr (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *dot1qclsfr_tree; + proto_item *dot1qclsfr_item; int pos = start; dot1qclsfr_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, &dot1qclsfr_item, "11 801.1P/Q Classifiers (Length = %u)", len); while (pos < (start + len)) @@ -1335,7 +1339,7 @@ dissect_dot1q_clsfr (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dot1qclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_D1Q_VLAN_ID: @@ -1347,7 +1351,7 @@ dissect_dot1q_clsfr (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dot1qclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_D1Q_VENDOR_SPEC: @@ -1362,15 +1366,16 @@ dissect_dot1q_clsfr (tvbuff_t * tvb, proto_tree * tree, int start, } static void -dissect_eth_clsfr (tvbuff_t * tvb, proto_tree * tree, int start, +dissect_eth_clsfr (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *ethclsfr_tree; + proto_item *ethclsfr_item; int pos = start; ethclsfr_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_eth, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_eth, ðclsfr_item, "10 Ethernet Classifiers (Length = %u)", len); while (pos < (start + len)) @@ -1387,7 +1392,7 @@ dissect_eth_clsfr (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ethclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_ETH_SRC_MAC: @@ -1398,7 +1403,7 @@ dissect_eth_clsfr (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ethclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_ETH_DSAP: @@ -1410,7 +1415,7 @@ dissect_eth_clsfr (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ethclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -1420,15 +1425,16 @@ dissect_eth_clsfr (tvbuff_t * tvb, proto_tree * tree, int start, } static void -dissect_clsfr_err (tvbuff_t * tvb, proto_tree * tree, int start, +dissect_clsfr_err (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *err_tree; + proto_tree *err_item; int pos = start; err_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_err, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_err, &err_item, "8 Classifier Error Encodings (Length = %u)", len); while (pos < (start + len)) @@ -1450,7 +1456,7 @@ dissect_clsfr_err (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_ERR_CODE: @@ -1461,7 +1467,7 @@ dissect_clsfr_err (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_ERR_MSG: @@ -1475,15 +1481,16 @@ dissect_clsfr_err (tvbuff_t * tvb, proto_tree * tree, int start, } static void -dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, +dissect_ip_classifier (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *ipclsfr_tree; + proto_tree *ipclsfr_item; int pos = start; ipclsfr_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_ip, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr_ip, &ipclsfr_item, "9 IP Classifier (Length = %u)", len); while (pos < (start + len)) @@ -1501,7 +1508,7 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_IP_PROTO: @@ -1513,7 +1520,7 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_IP_SOURCE_ADDR: @@ -1524,7 +1531,7 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_IP_SOURCE_MASK: @@ -1536,7 +1543,7 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_IP_DEST_ADDR: @@ -1547,7 +1554,7 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_IP_DEST_MASK: @@ -1559,7 +1566,7 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_IP_SRCPORT_START: @@ -1571,7 +1578,7 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_IP_SRCPORT_END: @@ -1583,7 +1590,7 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_IP_DSTPORT_START: @@ -1595,7 +1602,7 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_IP_DSTPORT_END: @@ -1607,7 +1614,7 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, ipclsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -1617,21 +1624,22 @@ dissect_ip_classifier (tvbuff_t * tvb, proto_tree * tree, int start, } static void -dissect_classifiers (tvbuff_t * tvb, proto_tree * tree, int start, +dissect_classifiers (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len, guint8 direction) { guint8 type, length; proto_tree *clsfr_tree; + proto_item *clsfr_item; int pos = start; if (direction == 22) clsfr_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &clsfr_item, "22 Upstream Packet Classifier (Length = %u)", len); else if (direction == 23) clsfr_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_clsfr, &clsfr_item, "23 Downstream Packet Classifier (Length = %u)", len); else @@ -1651,7 +1659,7 @@ dissect_classifiers (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_ID: @@ -1662,7 +1670,7 @@ dissect_classifiers (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_SFLOW_REF: @@ -1673,7 +1681,7 @@ dissect_classifiers (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_SFLOW_ID: @@ -1684,7 +1692,7 @@ dissect_classifiers (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_RULE_PRI: @@ -1695,7 +1703,7 @@ dissect_classifiers (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_ACT_STATE: @@ -1706,7 +1714,7 @@ dissect_classifiers (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_DSA_ACTION: @@ -1717,20 +1725,20 @@ dissect_classifiers (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, clsfr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CFR_ERROR: - dissect_clsfr_err (tvb, clsfr_tree, pos, length); + dissect_clsfr_err (tvb, pinfo, clsfr_tree, pos, length); break; case CFR_IP_CLASSIFIER: - dissect_ip_classifier (tvb, clsfr_tree, pos, length); + dissect_ip_classifier (tvb, pinfo, clsfr_tree, pos, length); break; case CFR_ETH_CLASSIFIER: - dissect_eth_clsfr (tvb, clsfr_tree, pos, length); + dissect_eth_clsfr (tvb, pinfo, clsfr_tree, pos, length); break; case CFR_8021Q_CLASSIFIER: - dissect_dot1q_clsfr (tvb, clsfr_tree, pos, length); + dissect_dot1q_clsfr (tvb, pinfo, clsfr_tree, pos, length); break; case CFR_VENDOR_SPEC: proto_tree_add_item (clsfr_tree, hf_docsis_tlv_clsfr_vendor_spc, @@ -1743,15 +1751,16 @@ dissect_classifiers (tvbuff_t * tvb, proto_tree * tree, int start, } static void -dissect_doc10cos (tvbuff_t * tvb, proto_tree * tree, int start, +dissect_doc10cos (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *doc10cos_tree; + proto_tree *doc10cos_item; int pos = start; doc10cos_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, &doc10cos_item, "1 Docsis 1.0 Class of Service (Length = %u)", len); while (pos < (start + len)) @@ -1768,7 +1777,7 @@ dissect_doc10cos (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, doc10cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case 2: @@ -1779,7 +1788,7 @@ dissect_doc10cos (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, doc10cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -1789,15 +1798,16 @@ dissect_doc10cos (tvbuff_t * tvb, proto_tree * tree, int start, } static void -dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, +dissect_modemcap (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *mcap_tree; + proto_tree *mcap_item; int pos = start; mcap_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_mcap, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_mcap, &mcap_item, "5 Modem Capabilities Type (Length = %u)", len); while (pos < (start + len)) @@ -1814,7 +1824,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_DOCSIS_VER: @@ -1825,7 +1835,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_FRAG: @@ -1836,7 +1846,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_PHS: @@ -1847,7 +1857,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_IGMP: @@ -1858,7 +1868,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_PRIVACY: @@ -1869,7 +1879,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_DOWN_SAID: @@ -1880,7 +1890,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_UP_SID: @@ -1891,7 +1901,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_OPT_FILT: @@ -1904,7 +1914,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_XMIT_EQPERSYM: @@ -1916,7 +1926,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_NUM_XMIT_EQ_TAPS: @@ -1927,7 +1937,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_DCC: @@ -1938,7 +1948,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_IP_FILTERS: @@ -1949,7 +1959,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_LLC_FILTERS: @@ -1960,7 +1970,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_EXP_UNICAST_SID: @@ -1971,7 +1981,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_RNG_HOFF: @@ -1988,7 +1998,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_L2VPN: @@ -2011,7 +2021,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_US_SRATE: @@ -2032,7 +2042,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_SAC: @@ -2043,7 +2053,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_CODE_HOP_M2: @@ -2054,7 +2064,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_MTC: @@ -2065,7 +2075,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_512_MSPS_UTC: @@ -2076,7 +2086,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_256_MSPS_UTC: @@ -2087,7 +2097,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_TOTAL_SID_CLUST: @@ -2098,7 +2108,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_SID_PER_SF: @@ -2109,7 +2119,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_MRC: @@ -2120,7 +2130,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_TOTAL_DSID: @@ -2131,7 +2141,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_RESEQ_DSID: @@ -2142,7 +2152,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_MC_DSID: @@ -2153,7 +2163,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_MC_DSID_FWD: @@ -2164,7 +2174,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_FCTYPE_FWD: @@ -2175,7 +2185,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_DPV: @@ -2188,7 +2198,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_UGS: @@ -2199,7 +2209,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_MAP_UCD: @@ -2210,7 +2220,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_UDC: @@ -2221,7 +2231,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_IPV6: @@ -2232,7 +2242,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CAP_EXT_US_TRNS_PWR: @@ -2243,7 +2253,7 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mcap_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch (type) */ @@ -2252,14 +2262,15 @@ dissect_modemcap (tvbuff_t * tvb, proto_tree * tree, int start, } static void -dissect_cos (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) +dissect_cos (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *cos_tree; + proto_tree *cos_item; int pos = start; cos_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_cos, &cos_item, "4 Class of Service Type (Length = %u)", len); while (pos < (start + len)) @@ -2276,7 +2287,7 @@ dissect_cos (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case COS_MAX_DOWN: @@ -2287,7 +2298,7 @@ dissect_cos (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case COS_MAX_UP: @@ -2298,7 +2309,7 @@ dissect_cos (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case COS_UP_CH_PRIO: @@ -2309,7 +2320,7 @@ dissect_cos (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case COS_MIN_UP_RATE: @@ -2320,7 +2331,7 @@ dissect_cos (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case COS_MAX_UP_BURST: @@ -2331,7 +2342,7 @@ dissect_cos (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case COS_BP_ENABLE: @@ -2342,8 +2353,7 @@ dissect_cos (tvbuff_t * tvb, proto_tree * tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); - + expert_add_info_format(pinfo, cos_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch (type) */ @@ -2406,15 +2416,16 @@ dissect_snmpv3_kickstart(tvbuff_t * tvb, proto_tree *tree, int start, guint16 le } static void -dissect_ds_ch_list_single (tvbuff_t * tvb, proto_tree * tree, +dissect_ds_ch_list_single (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *single_tree; + proto_item *single_item; int pos = start; single_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list_single, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list_single, &single_item, "1 Single Downstream Channel (Length = %u)", len); while (pos < (start + len)) @@ -2431,7 +2442,7 @@ dissect_ds_ch_list_single (tvbuff_t * tvb, proto_tree * tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, single_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SINGLE_CH_FREQ: @@ -2442,7 +2453,7 @@ dissect_ds_ch_list_single (tvbuff_t * tvb, proto_tree * tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, single_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -2451,15 +2462,16 @@ dissect_ds_ch_list_single (tvbuff_t * tvb, proto_tree * tree, } static void -dissect_ds_ch_list_range (tvbuff_t * tvb, proto_tree * tree, +dissect_ds_ch_list_range (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *range_tree; + proto_item *range_item; int pos = start; range_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list_range, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list_range, &range_item, "2 Downstream Frequency Range (Length = %u)", len); while (pos < (start + len)) @@ -2476,7 +2488,7 @@ dissect_ds_ch_list_range (tvbuff_t * tvb, proto_tree * tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case FREQ_RNG_START: @@ -2487,7 +2499,7 @@ dissect_ds_ch_list_range (tvbuff_t * tvb, proto_tree * tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case FREQ_RNG_END: @@ -2498,7 +2510,7 @@ dissect_ds_ch_list_range (tvbuff_t * tvb, proto_tree * tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case FREQ_RNG_STEP: @@ -2509,7 +2521,7 @@ dissect_ds_ch_list_range (tvbuff_t * tvb, proto_tree * tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, range_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -2518,15 +2530,16 @@ dissect_ds_ch_list_range (tvbuff_t * tvb, proto_tree * tree, } static void -dissect_dut_filter (tvbuff_t * tvb, proto_tree * tree, +dissect_dut_filter (tvbuff_t * tvb, packet_info* pinfo, proto_tree * tree, int start, guint16 len) { guint8 type, length; proto_tree *dut_tree; + proto_item *dut_item; int pos = start; dut_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dut_filter, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dut_filter, &dut_item, "45 Downstream Unencrypted Traffic (Length = %u)", len); while (pos < (start + len)) @@ -2543,7 +2556,7 @@ dissect_dut_filter (tvbuff_t * tvb, proto_tree * tree, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dut_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case DUT_CMIM: @@ -2556,14 +2569,15 @@ dissect_dut_filter (tvbuff_t * tvb, proto_tree * tree, } static void -dissect_ds_ch_list(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_ds_ch_list(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *dschlst_tree; + proto_item *dschlst_item; int pos = start; dschlst_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ds_ch_list, &dschlst_item, "41 Downstream Channel List (Length = %u)", len); while (pos < (start + len)) @@ -2573,10 +2587,10 @@ dissect_ds_ch_list(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) switch (type) { case DS_CH_LIST_SINGLE: - dissect_ds_ch_list_single(tvb, dschlst_tree, pos, length); + dissect_ds_ch_list_single(tvb, pinfo, dschlst_tree, pos, length); break; case DS_CH_LIST_RANGE: - dissect_ds_ch_list_range(tvb, dschlst_tree, pos, length); + dissect_ds_ch_list_range(tvb, pinfo, dschlst_tree, pos, length); break; case DS_CH_LIST_DEFAULT_TIMEOUT: if (length == 2) @@ -2587,7 +2601,7 @@ dissect_ds_ch_list(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dschlst_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -2596,14 +2610,15 @@ dissect_ds_ch_list(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_tcc_err(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_tcc_err(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *tccerr_tree; + proto_tree *tccerr_item; int pos = start; tccerr_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc_err, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc_err, &tccerr_item, "TCC Error Encodings (Length = %u)", len); while (pos < (start + len)) @@ -2626,7 +2641,7 @@ dissect_tcc_err(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, tccerr_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TCC_ERR_MSG: @@ -2640,14 +2655,15 @@ dissect_tcc_err(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_tcc_rng_parms(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_tcc_rng_parms(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *rngparm_tree; + proto_item *rngparm_item; int pos = start; rngparm_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc_rng_parms, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc_rng_parms, &rngparm_item, "Ranging Parameters (Length = %u)", len); while (pos < (start + len)) @@ -2665,7 +2681,7 @@ dissect_tcc_rng_parms(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RNG_PARMS_TIME_OFF_INT: @@ -2677,7 +2693,7 @@ dissect_tcc_rng_parms(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RNG_PARMS_TIME_OFF_FRAC: @@ -2689,7 +2705,7 @@ dissect_tcc_rng_parms(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RNG_PARMS_POWER_OFF: @@ -2701,7 +2717,7 @@ dissect_tcc_rng_parms(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RNG_PARMS_FREQ_OFF: @@ -2713,7 +2729,7 @@ dissect_tcc_rng_parms(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rngparm_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -2722,14 +2738,15 @@ dissect_tcc_rng_parms(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_sid_cl_so_crit(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_sid_cl_so_crit(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *crit_tree; + proto_item *crit_item; int pos = start; crit_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_so, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_so, &crit_item, "SID Cluster Switchover Criteria (Length = %u)", len); while (pos < (start + len)) @@ -2747,7 +2764,7 @@ dissect_sid_cl_so_crit(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SID_CL_SO_MAX_OUT_BYTES: @@ -2759,7 +2776,7 @@ dissect_sid_cl_so_crit(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SID_CL_SO_MAX_REQ_BYTES: @@ -2771,7 +2788,7 @@ dissect_sid_cl_so_crit(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SID_CL_SO_MAX_TIME: @@ -2783,7 +2800,7 @@ dissect_sid_cl_so_crit(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, crit_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -2792,14 +2809,15 @@ dissect_sid_cl_so_crit(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_sid_cl_enc_map(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_sid_cl_enc_map(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *map_tree; + proto_item *map_item; int pos = start; map_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_enc_map, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_enc_map, &map_item, "SID-to-Channel Mapping (Length = %u)", len); while (pos < (start + len)) @@ -2817,7 +2835,7 @@ dissect_sid_cl_enc_map(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, map_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SID_CL_MAP_SID: @@ -2829,7 +2847,7 @@ dissect_sid_cl_enc_map(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, map_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SID_CL_MAP_ACTION: @@ -2841,7 +2859,7 @@ dissect_sid_cl_enc_map(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, map_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -2850,14 +2868,15 @@ dissect_sid_cl_enc_map(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_sid_cl_enc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_sid_cl_enc(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *enc_tree; + proto_item *enc_item; int pos = start; enc_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_enc, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl_enc, &enc_item, "SID Cluster Encoding (Length = %u)", len); while (pos < (start + len)) @@ -2875,14 +2894,14 @@ dissect_sid_cl_enc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, enc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SID_CL_ENC_MAP: if (length == 10) - dissect_sid_cl_enc_map(tvb, enc_tree, pos, length); + dissect_sid_cl_enc_map(tvb, pinfo, enc_tree, pos, length); else - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, enc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); break; } /* switch */ pos = pos + length; @@ -2890,14 +2909,15 @@ dissect_sid_cl_enc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_sid_cl(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_sid_cl(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *sid_tree; + proto_item *sid_item; int pos = start; sid_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_sid_cl, &sid_item, "47 Service Flow SID Cluster Assignments (Length = %u)", len); while (pos < (start + len)) @@ -2915,14 +2935,14 @@ dissect_sid_cl(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case SID_CL_ENC: - dissect_sid_cl_enc(tvb, sid_tree, pos, length); + dissect_sid_cl_enc(tvb, pinfo, sid_tree, pos, length); break; case SID_CL_SO_CRIT: - dissect_sid_cl_so_crit(tvb, sid_tree, pos, length); + dissect_sid_cl_so_crit(tvb, pinfo, sid_tree, pos, length); break; } /* switch */ pos = pos + length; @@ -2930,16 +2950,17 @@ dissect_sid_cl(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_tcc(tvbuff_t * tvb, packet_info * pinfo _U_, +dissect_tcc(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *tcc_tree; + proto_item *tcc_item; int pos = start; tvbuff_t *ucd_tvb; tcc_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_tcc, &tcc_item, "46 Transmit Channel Configuration (Length = %u)", len); while (pos < (start + len)) @@ -2957,7 +2978,7 @@ dissect_tcc(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TCC_US_CH_ACTION: @@ -2969,7 +2990,7 @@ dissect_tcc(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TCC_US_CH_ID: @@ -2981,7 +3002,7 @@ dissect_tcc(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TCC_NEW_US_CH_ID: @@ -2993,7 +3014,7 @@ dissect_tcc(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TCC_UCD: @@ -3009,7 +3030,7 @@ dissect_tcc(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TCC_INIT_TECH: @@ -3021,11 +3042,11 @@ dissect_tcc(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TCC_RNG_PARMS: - dissect_tcc_rng_parms(tvb, tcc_tree, pos, length); + dissect_tcc_rng_parms(tvb, pinfo, tcc_tree, pos, length); break; case TLV_TCC_DYN_RNG_WIN: if (length == 1) @@ -3036,11 +3057,11 @@ dissect_tcc(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, tcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TCC_ERR: - dissect_tcc_err(tvb, tcc_tree, pos, length); + dissect_tcc_err(tvb, pinfo, tcc_tree, pos, length); break; } /* switch */ pos = pos + length; @@ -3048,14 +3069,15 @@ dissect_tcc(tvbuff_t * tvb, packet_info * pinfo _U_, } static void -dissect_ch_bl_rng(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_ch_bl_rng(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *chblrng_tree; + proto_item *chblrng_item; int pos = start; chblrng_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_ch_bl_rng, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_ch_bl_rng, &chblrng_item, "Receive Module Channel Block Range (Length = %u)", len); while (pos < (start + len)) @@ -3073,7 +3095,7 @@ dissect_ch_bl_rng(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, chblrng_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CH_BL_RNG_MAX_CTR_FREQ: @@ -3085,7 +3107,7 @@ dissect_ch_bl_rng(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, chblrng_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -3094,14 +3116,15 @@ dissect_ch_bl_rng(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_rcp_rcv_mod(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_rcp_rcv_mod(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *rcvmod_tree; + proto_item *rcvmod_item; int pos = start; rcvmod_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_rcv_mod_enc, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_rcv_mod_enc, &rcvmod_item, "Receive Module Capability (Length = %u)", len); while (pos < (start + len)) @@ -3119,11 +3142,11 @@ dissect_rcp_rcv_mod(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCV_MOD_ENC_CH_BL_RNG: - dissect_ch_bl_rng(tvb, rcvmod_tree, pos, length); + dissect_ch_bl_rng(tvb, pinfo, rcvmod_tree, pos, length); break; case RCV_MOD_ENC_CTR_FREQ_ASGN: if (length == 4) @@ -3134,7 +3157,7 @@ dissect_rcp_rcv_mod(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCV_MOD_ENC_RSQ_CH_SUBS_CAP: @@ -3158,14 +3181,15 @@ dissect_rcp_rcv_mod(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_rcp_rcv_ch(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_rcp_rcv_ch(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *rcvch_tree; + proto_item *rcvch_item; int pos = start; rcvch_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_rcv_ch, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp_rcv_ch, &rcvch_item, "Receive Channels (Length = %u)", len); while (pos < (start + len)) @@ -3183,7 +3207,7 @@ dissect_rcp_rcv_ch(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCV_CH_CONN: @@ -3200,7 +3224,7 @@ dissect_rcp_rcv_ch(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCV_CH_PRIM_DS_CH_IND: @@ -3212,7 +3236,7 @@ dissect_rcp_rcv_ch(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -3222,16 +3246,17 @@ dissect_rcp_rcv_ch(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) static void -dissect_rcp(tvbuff_t * tvb, packet_info * pinfo _U_, +dissect_rcp(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *rcp_tree; + proto_item *rcp_item; int pos = start; tvbuff_t *vsif_tvb; rcp_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcp, &rcp_item, "48 Receive Channel Profile (Length = %u)", len); while (pos < (start + len)) @@ -3249,7 +3274,7 @@ dissect_rcp(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcp_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_RCP_NAME: @@ -3261,7 +3286,7 @@ dissect_rcp(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcp_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_RCP_FREQ_SPC: @@ -3273,14 +3298,14 @@ dissect_rcp(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcp_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_RCP_RCV_MOD_ENC: - dissect_rcp_rcv_mod(tvb, rcp_tree, pos, length); + dissect_rcp_rcv_mod(tvb, pinfo, rcp_tree, pos, length); break; case TLV_RCP_RCV_CH: - dissect_rcp_rcv_ch(tvb, rcp_tree, pos, length); + dissect_rcp_rcv_ch(tvb, pinfo, rcp_tree, pos, length); break; case TLV_RCP_VEN_SPEC: vsif_tvb = tvb_new_subset_length (tvb, pos, length); @@ -3292,14 +3317,15 @@ dissect_rcp(tvbuff_t * tvb, packet_info * pinfo _U_, } static void -dissect_rcc_rcv_mod(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_rcc_rcv_mod(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *rcvmod_tree; + proto_item *rcvmod_item; int pos = start; rcvmod_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_mod_enc, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_mod_enc, &rcvmod_item, "Receive Module Assignment (Length = %u)", len); while (pos < (start + len)) @@ -3317,7 +3343,7 @@ dissect_rcc_rcv_mod(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCV_MOD_ENC_CTR_FREQ_ASGN: @@ -3329,7 +3355,7 @@ dissect_rcc_rcv_mod(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcvmod_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCV_MOD_ENC_CONN: @@ -3343,14 +3369,15 @@ dissect_rcc_rcv_mod(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_rcc_rcv_ch(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_rcc_rcv_ch(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *rcvch_tree; + proto_item *rcvch_item; int pos = start; rcvch_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_ch, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_ch, &rcvch_item, "Receive Channels (Length = %u)", len); while (pos < (start + len)) @@ -3368,7 +3395,7 @@ dissect_rcc_rcv_ch(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCV_CH_CONN: @@ -3385,7 +3412,7 @@ dissect_rcc_rcv_ch(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCV_CH_PRIM_DS_CH_IND: @@ -3397,7 +3424,7 @@ dissect_rcc_rcv_ch(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcvch_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -3406,14 +3433,15 @@ dissect_rcc_rcv_ch(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_rcc_err(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_rcc_err(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *err_tree; + proto_item *err_item; int pos = start; err_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_ch, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc_rcv_ch, &err_item, "RCC Error Encodings (Length = %u)", len); while (pos < (start + len)) @@ -3431,7 +3459,7 @@ dissect_rcc_err(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCC_ERR_IDX: @@ -3443,7 +3471,7 @@ dissect_rcc_err(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCC_ERR_PARAM: @@ -3455,7 +3483,7 @@ dissect_rcc_err(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCC_ERR_CODE: @@ -3467,7 +3495,7 @@ dissect_rcc_err(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, err_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case RCC_ERR_MSG: @@ -3481,16 +3509,17 @@ dissect_rcc_err(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_rcc(tvbuff_t * tvb, packet_info * pinfo _U_, +dissect_rcc(tvbuff_t * tvb, packet_info * pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *rcc_tree; + proto_item *rcc_item; int pos = start; tvbuff_t *vsif_tvb; rcc_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_rcc, &rcc_item, "49 Receive Channel Configuration (Length = %u)", len); while (pos < (start + len)) @@ -3508,21 +3537,21 @@ dissect_rcc(tvbuff_t * tvb, packet_info * pinfo _U_, } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, rcc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_RCP_RCV_MOD_ENC: - dissect_rcc_rcv_mod(tvb, rcc_tree, pos, length); + dissect_rcc_rcv_mod(tvb, pinfo, rcc_tree, pos, length); break; case TLV_RCP_RCV_CH: - dissect_rcc_rcv_ch(tvb, rcc_tree, pos, length); + dissect_rcc_rcv_ch(tvb, pinfo, rcc_tree, pos, length); break; case TLV_RCP_VEN_SPEC: vsif_tvb = tvb_new_subset_length (tvb, pos, length); call_dissector (docsis_vsif_handle, vsif_tvb, pinfo, rcc_tree); break; case TLV_RCC_ERR: - dissect_rcc_err(tvb, rcc_tree, pos, length); + dissect_rcc_err(tvb, pinfo, rcc_tree, pos, length); break; } /* switch */ pos = pos + length; @@ -3530,14 +3559,15 @@ dissect_rcc(tvbuff_t * tvb, packet_info * pinfo _U_, } static void -dissect_dsid_ds_reseq(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_dsid_ds_reseq(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *dsid_tree; + proto_item *dsid_item; int pos = start; dsid_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid_ds_reseq, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid_ds_reseq, &dsid_item, "Resequencing DSID (Length = %u)", len); while (pos < (start + len)) @@ -3555,7 +3585,7 @@ dissect_dsid_ds_reseq(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case DS_RESEQ_CH_LST: @@ -3572,7 +3602,7 @@ dissect_dsid_ds_reseq(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case DS_RESEQ_WARN_THRESH: @@ -3584,7 +3614,7 @@ dissect_dsid_ds_reseq(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case DS_RESEQ_HO_TIMER: @@ -3596,7 +3626,7 @@ dissect_dsid_ds_reseq(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -3605,14 +3635,15 @@ dissect_dsid_ds_reseq(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_dsid_mc_addr(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_dsid_mc_addr(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *dsid_tree; + proto_item *dsid_item; int pos = start; dsid_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid_mc_addr, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid_mc_addr, &dsid_item, "Client MAC Address Encodings (Length = %u)", len); while (pos < (start + len)) @@ -3630,7 +3661,7 @@ dissect_dsid_mc_addr(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case MC_ADDR_ADDR: @@ -3642,7 +3673,7 @@ dissect_dsid_mc_addr(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -3651,7 +3682,7 @@ dissect_dsid_mc_addr(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_dsid_mc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_dsid_mc(tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *dsid_tree; @@ -3668,7 +3699,7 @@ dissect_dsid_mc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) switch (type) { case TLV_DSID_MC_ADDR: - dissect_dsid_mc_addr(tvb, dsid_tree, pos, length); + dissect_dsid_mc_addr(tvb, pinfo, dsid_tree, pos, length); break; case TLV_DSID_MC_CMIM: proto_tree_add_item (dsid_tree, @@ -3681,7 +3712,7 @@ dissect_dsid_mc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) length, ENC_NA); break; case TLV_DSID_MC_PHS: - dissect_phs(tvb, dsid_tree, pos, length); + dissect_phs(tvb, pinfo, dsid_tree, pos, length); break; } /* switch */ pos = pos + length; @@ -3689,14 +3720,15 @@ dissect_dsid_mc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_dsid(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_dsid(tvbuff_t * tvb, packet_info *pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *dsid_tree; + proto_item *dsid_item; int pos = start; dsid_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid, &dsid_item, "50 DSID Encodings (Length = %u)", len); while (pos < (start + len)) @@ -3714,7 +3746,7 @@ dissect_dsid(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_DSID_ACTION: @@ -3726,14 +3758,14 @@ dissect_dsid(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, dsid_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_DSID_DS_RESEQ: - dissect_dsid_ds_reseq(tvb, dsid_tree, pos, length); + dissect_dsid_ds_reseq(tvb, pinfo, dsid_tree, pos, length); break; case TLV_DSID_MC: - dissect_dsid_mc(tvb, dsid_tree, pos, length); + dissect_dsid_mc(tvb, pinfo, dsid_tree, pos, length); break; } /* switch */ pos = pos + length; @@ -3741,14 +3773,15 @@ dissect_dsid(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_sec_assoc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_sec_assoc(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *sec_tree; + proto_item *sec_item; int pos = start; sec_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_dsid, &sec_item, "51 Security Association Encodings (Length = %u)", len); while (pos < (start + len)) @@ -3766,7 +3799,7 @@ dissect_sec_assoc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sec_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_SEC_ASSOC_DESC: @@ -3778,7 +3811,7 @@ dissect_sec_assoc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, sec_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -3787,14 +3820,15 @@ dissect_sec_assoc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_ch_asgn(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_ch_asgn(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *asgn_tree; + proto_item *asgn_item; int pos = start; asgn_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ch_asgn, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_tlv_ch_asgn, &asgn_item, "56 Channel Assignment Configuration Settings (Length = %u)", len); while (pos < (start + len)) @@ -3812,7 +3846,7 @@ dissect_ch_asgn(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, asgn_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_CH_ASGN_RX_FREQ: @@ -3824,7 +3858,7 @@ dissect_ch_asgn(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, asgn_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -3833,14 +3867,15 @@ dissect_ch_asgn(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) } static void -dissect_cmts_mc_sess_enc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 len) +dissect_cmts_mc_sess_enc(tvbuff_t * tvb, packet_info* pinfo, proto_tree *tree, int start, guint16 len) { guint8 type, length; proto_tree *mc_tree; + proto_item *mc_item; int pos = start; mc_tree = - proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_cmts_mc_sess_enc, NULL, + proto_tree_add_subtree_format(tree, tvb, start, len, ett_docsis_cmts_mc_sess_enc, &mc_item, "64 CMTS Static Multicast Session Encoding (Length = %u)", len); while (pos < (start + len)) @@ -3858,7 +3893,7 @@ dissect_cmts_mc_sess_enc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 le } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case CMTS_MC_SESS_ENC_SRC: @@ -3870,7 +3905,7 @@ dissect_cmts_mc_sess_enc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 le } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, mc_item, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; } /* switch */ @@ -3880,9 +3915,8 @@ dissect_cmts_mc_sess_enc(tvbuff_t * tvb, proto_tree *tree, int start, guint16 le static int -dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* data _U_) +dissect_tlv (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data _U_) { - proto_item *it; proto_tree *tlv_tree; int pos = 0; @@ -3915,7 +3949,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d proto_tree_add_item (tlv_tree, hf_docsis_tlv_rng_tech, tvb, pos, length, ENC_BIG_ENDIAN); else - dissect_doc10cos (tvb, tlv_tree, pos, length); + dissect_doc10cos (tvb, pinfo, tlv_tree, pos, length); break; case TLV_CHNL_ID: if (length == 1) @@ -3925,7 +3959,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_NET_ACCESS: @@ -3936,14 +3970,14 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_COS: - dissect_cos (tvb, tlv_tree, pos, length); + dissect_cos (tvb, pinfo, tlv_tree, pos, length); break; case TLV_MODEM_CAP: - dissect_modemcap (tvb, tlv_tree, pos, length); + dissect_modemcap (tvb, pinfo, tlv_tree, pos, length); break; case TLV_CM_MIC: if (length == 16) @@ -3953,7 +3987,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_CMTS_MIC: @@ -3964,7 +3998,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_VENDOR_ID: @@ -3975,7 +4009,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_SW_UPG_FILE: @@ -3998,7 +4032,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_SVC_UNAVAIL: @@ -4008,7 +4042,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_ETHERNET_MAC: @@ -4019,7 +4053,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TEL_SETTINGS: @@ -4036,7 +4070,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TFTP_TIME: @@ -4048,7 +4082,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TFTP_MODEM_ADDRESS: @@ -4060,7 +4094,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_SW_UPG_SRVR: @@ -4071,19 +4105,19 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_UPSTREAM_CLASSIFIER: case TLV_DOWN_CLASSIFIER: - dissect_classifiers (tvb, tlv_tree, pos, length, type); + dissect_classifiers (tvb, pinfo, tlv_tree, pos, length, type); break; case TLV_UPSTREAM_SERVICE_FLOW: case TLV_DOWN_SERVICE_FLOW: - dissect_sflow (tvb, tlv_tree, pos, length, type); + dissect_sflow (tvb, pinfo, tlv_tree, pos, length, type); break; case TLV_PHS: - dissect_phs (tvb, tlv_tree, pos, length); + dissect_phs (tvb, pinfo, tlv_tree, pos, length); break; case TLV_HMAC_DIGEST: if (length == 20) @@ -4094,7 +4128,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_MAX_CLASSIFIERS: @@ -4106,7 +4140,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_PRIVACY_ENABLE: @@ -4117,7 +4151,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_AUTH_BLOCK: @@ -4132,7 +4166,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_MFGR_CVC: @@ -4164,7 +4198,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_SUBS_MGMT_FLTR: @@ -4185,7 +4219,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_ENABLE_TEST_MODES: @@ -4196,11 +4230,11 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_DS_CH_LIST: - dissect_ds_ch_list(tvb, tlv_tree, pos, length); + dissect_ds_ch_list(tvb, pinfo, tlv_tree, pos, length); break; case TLV_MC_MAC_ADDRESS: if (length == 6) @@ -4210,7 +4244,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_VENDOR_SPEC: @@ -4218,13 +4252,13 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d call_dissector (docsis_vsif_handle, vsif_tvb, pinfo, tlv_tree); break; case TLV_DUT_FILTER: - dissect_dut_filter(tvb, tlv_tree, pos, length); + dissect_dut_filter(tvb, pinfo, tlv_tree, pos, length); break; case TLV_TCC: dissect_tcc(tvb, pinfo, tlv_tree, pos, length); break; case TLV_SID_CL: - dissect_sid_cl(tvb, tlv_tree, pos, length); + dissect_sid_cl(tvb, pinfo, tlv_tree, pos, length); break; case TLV_RCP: dissect_rcp(tvb, pinfo, tlv_tree, pos, length); @@ -4233,10 +4267,10 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d dissect_rcc(tvb, pinfo, tlv_tree, pos, length); break; case TLV_DSID: - dissect_dsid(tvb, tlv_tree, pos, length); + dissect_dsid(tvb, pinfo, tlv_tree, pos, length); break; case TLV_SEC_ASSOC: - dissect_sec_assoc(tvb, tlv_tree, pos, length); + dissect_sec_assoc(tvb, pinfo, tlv_tree, pos, length); break; case TLV_INIT_CH_TIMEOUT: if (length == 2) @@ -4246,11 +4280,11 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_CH_ASGN: - dissect_ch_asgn(tvb, tlv_tree, pos, length); + dissect_ch_asgn(tvb, pinfo, tlv_tree, pos, length); break; case TLV_CM_INIT_REASON: if (length == 1) @@ -4260,7 +4294,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_SW_UPG_SRVR_IPV6: @@ -4271,7 +4305,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_TFTP_PROV_CM_IPV6_ADDR: @@ -4282,7 +4316,7 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_US_DROP_CLFY: @@ -4305,11 +4339,11 @@ dissect_tlv (tvbuff_t * tvb, packet_info * pinfo _U_, proto_tree * tree, void* d } else { - THROW (ReportedBoundsError); + expert_add_info_format(pinfo, it, &ei_docsis_tlv_tlvlen_bad, "Wrong TLV length: %u", length); } break; case TLV_CMTS_MC_SESS_ENC: - dissect_cmts_mc_sess_enc(tvb, tlv_tree, pos, length); + dissect_cmts_mc_sess_enc(tvb, pinfo, tlv_tree, pos, length); break; case TLV_END: break; @@ -5998,11 +6032,18 @@ proto_register_docsis_tlv (void) &ett_docsis_cmts_mc_sess_enc, }; - proto_docsis_tlv = proto_register_protocol ("DOCSIS Appendix C TLV's", - "DOCSIS TLVs", "docsis_tlv"); + static ei_register_info ei[] = { + {&ei_docsis_tlv_tlvlen_bad, { "docsis_tlv.tlvlenbad", PI_MALFORMED, PI_ERROR, "Bad TLV length", EXPFILL}}, + }; + + expert_module_t* expert_docsis_tlv; + + proto_docsis_tlv = proto_register_protocol ("DOCSIS Appendix C TLV's", "DOCSIS TLVs", "docsis_tlv"); proto_register_field_array (proto_docsis_tlv, hf, array_length (hf)); proto_register_subtree_array (ett, array_length (ett)); + expert_docsis_tlv = expert_register_protocol(proto_docsis_tlv); + expert_register_field_array(expert_docsis_tlv, ei, array_length(ei)); register_dissector ("docsis_tlv", dissect_tlv, proto_docsis_tlv); } |