Batch of filterable expert infos.

svn path=/trunk/; revision=49853
This commit is contained in:
Michael Mann 2013-06-09 03:28:05 +00:00
parent 5ea3858f53
commit 2d37ec3cb0
11 changed files with 238 additions and 89 deletions

View File

@ -302,6 +302,10 @@ static gint ett_6lowpan_mesh_flags = -1;
static gint ett_6lowpan_frag = -1;
static gint ett_6lopwan_traffic_class = -1;
static expert_field ei_6lowpan_hc1_more_bits = EI_INIT;
static expert_field ei_6lowpan_illegal_dest_addr_mode = EI_INIT;
static expert_field ei_6lowpan_bad_ipv6_header_length = EI_INIT;
/* Subdissector handles. */
static dissector_handle_t data_handle;
static dissector_handle_t ipv6_handle;
@ -1065,7 +1069,7 @@ dissect_6lowpan_hc1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint dg
}
else {
/* HC1 states there are more bits, but an illegal next header was defined. */
expert_add_info_format(pinfo, NULL, PI_MALFORMED, PI_ERROR, "HC1 more bits expected for illegal next header type.");
expert_add_info(pinfo, NULL, &ei_6lowpan_hc1_more_bits);
return NULL;
}
}
@ -1608,7 +1612,7 @@ dissect_6lowpan_iphc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint d
}
else {
/* Illegal destination address compression mode. */
expert_add_info_format(pinfo, ti_dam, PI_MALFORMED, PI_ERROR, "Illegal destination address mode");
expert_add_info(pinfo, ti_dam, &ei_6lowpan_illegal_dest_addr_mode);
return NULL;
}
}
@ -1633,7 +1637,7 @@ dissect_6lowpan_iphc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint d
}
else {
/* Illegal destination address compression mode. */
expert_add_info_format(pinfo, ti_dam, PI_MALFORMED, PI_ERROR, "Illegal destination address mode");
expert_add_info(pinfo, ti_dam, &ei_6lowpan_illegal_dest_addr_mode);
return NULL;
}
}
@ -1646,7 +1650,7 @@ dissect_6lowpan_iphc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint d
/* (DAC=1 && DAM=00) -> reserved value. */
if ((iphc_flags & LOWPAN_IPHC_FLAG_DST_COMP) && (iphc_dst_mode == LOWPAN_IPHC_ADDR_FULL_INLINE)) {
/* Illegal destination address compression mode. */
expert_add_info_format(pinfo, ti_dam, PI_MALFORMED, PI_ERROR, "Illegal destination address mode");
expert_add_info(pinfo, ti_dam, &ei_6lowpan_illegal_dest_addr_mode);
return NULL;
}
/* The IID is derived from the link-layer source. */
@ -2293,18 +2297,16 @@ dissect_6lowpan_frag_first(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
else if (tvb_get_bits8(frag_tvb, 0, LOWPAN_PATTERN_HC1_BITS) == LOWPAN_PATTERN_HC1) {
/* Check if the datagram size is sane. */
if (dgram_size < (gint)sizeof(struct ip6_hdr)) {
expert_add_info_format(pinfo, length_item, PI_MALFORMED,
PI_ERROR, "Length is less than IPv6 header length %u",
(guint)sizeof(struct ip6_hdr));
expert_add_info_format_text(pinfo, length_item, &ei_6lowpan_bad_ipv6_header_length,
"Length is less than IPv6 header length %u", (guint)sizeof(struct ip6_hdr));
}
frag_tvb = dissect_6lowpan_hc1(frag_tvb, pinfo, tree, dgram_size, siid, diid);
}
else if (tvb_get_bits8(frag_tvb, 0, LOWPAN_PATTERN_IPHC_BITS) == LOWPAN_PATTERN_IPHC) {
/* Check if the datagram size is sane. */
if (dgram_size < (gint)sizeof(struct ip6_hdr)) {
expert_add_info_format(pinfo, length_item, PI_MALFORMED,
PI_ERROR, "Length is less than IPv6 header length %u",
(guint)sizeof(struct ip6_hdr));
expert_add_info_format_text(pinfo, length_item, &ei_6lowpan_bad_ipv6_header_length,
"Length is less than IPv6 header length %u", (guint)sizeof(struct ip6_hdr));
}
frag_tvb = dissect_6lowpan_iphc(frag_tvb, pinfo, tree, dgram_size, siid, diid);
}
@ -2732,12 +2734,21 @@ proto_register_6lowpan(void)
&ett_6lowpan_fragments
};
static ei_register_info ei[] = {
{ &ei_6lowpan_hc1_more_bits, { "6lowpan.hc1_more_bits", PI_MALFORMED, PI_ERROR, "HC1 more bits expected for illegal next header type.", EXPFILL }},
{ &ei_6lowpan_illegal_dest_addr_mode, { "6lowpan.illegal_dest_addr_mode", PI_MALFORMED, PI_ERROR, "Illegal destination address mode", EXPFILL }},
{ &ei_6lowpan_bad_ipv6_header_length, { "6lowpan.bad_ipv6_header_length", PI_MALFORMED, PI_ERROR, "Length is less than IPv6 header length", EXPFILL }},
};
int i;
module_t *prefs_module;
expert_module_t* expert_6lowpan;
proto_6lowpan = proto_register_protocol("IPv6 over IEEE 802.15.4", "6LoWPAN", "6lowpan");
proto_register_field_array(proto_6lowpan, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_6lowpan = expert_register_protocol(proto_6lowpan);
expert_register_field_array(expert_6lowpan, ei, array_length(ei));
/* Register the dissector with wireshark. */
register_dissector("6lowpan", dissect_6lowpan, proto_6lowpan);

View File

@ -77,6 +77,11 @@ static int hf_amr_wb_if2_ft = -1;
static int ett_amr = -1;
static int ett_amr_toc = -1;
static expert_field ei_amr_spare_bit_not0 = EI_INIT;
static expert_field ei_amr_not_enough_data_for_frames = EI_INIT;
static expert_field ei_amr_superfluous_data = EI_INIT;
static expert_field ei_amr_padding_bits_not0 = EI_INIT;
/* The dynamic payload type which will be dissected as AMR */
static guint temp_dynamic_payload_type = 0;
@ -222,7 +227,7 @@ dissect_amr_nb_if1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
if (octet == AMR_NB_SID) {
ti = proto_tree_add_item(tree, hf_amr_nb_if1_mode_req, tvb, offset+1, 1, ENC_BIG_ENDIAN);
if (tvb_get_guint8(tvb,offset+1) & 0x1f)
expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, "Error:Spare bits not 0");
expert_add_info(pinfo, ti, &ei_amr_spare_bit_not0);
proto_tree_add_text(tree, tvb, offset+2, 5, "Speech data");
proto_tree_add_item(tree, hf_amr_if1_sti, tvb, offset+7, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_amr_nb_if1_sti_mode_ind, tvb, offset+7, 1, ENC_BIG_ENDIAN);
@ -233,7 +238,7 @@ dissect_amr_nb_if1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
offset += 1;
ti = proto_tree_add_item(tree, hf_amr_nb_if1_mode_req, tvb, offset, 1, ENC_BIG_ENDIAN);
if (tvb_get_guint8(tvb,offset) & 0x1f)
expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, "Error:Spare bits not 0");
expert_add_info(pinfo, ti, &ei_amr_spare_bit_not0);
offset += 1;
proto_tree_add_text(tree, tvb, offset, -1, "Speech data");
}
@ -248,7 +253,7 @@ dissect_amr_wb_if1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
proto_tree_add_item(tree, hf_amr_wb_if1_ft, tvb, offset, 1, ENC_BIG_ENDIAN);
ti = proto_tree_add_item(tree, hf_amr_if1_fqi, tvb, offset, 1, ENC_BIG_ENDIAN);
if (tvb_get_guint8(tvb,offset) & 0x03)
expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, "Error:Spare bits not 0");
expert_add_info(pinfo, ti, &ei_amr_spare_bit_not0);
octet = (tvb_get_guint8(tvb,offset) & 0xf0) >> 4;
if (octet == AMR_WB_SID) {
proto_tree_add_item(tree, hf_amr_wb_if1_mode_req, tvb, offset+1, 1, ENC_BIG_ENDIAN);
@ -394,7 +399,7 @@ dissect_amr_be(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint amr
proto_item_append_text(item, " %d Bytes available, %d would be needed!",
tvb_reported_length_remaining(tvb, bitcount/8),
bytes_needed_for_frames);
expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Not enough data for the frames according to TOC");
expert_add_info(pinfo, item, &ei_amr_not_enough_data_for_frames);
}
else {
item = proto_tree_add_text(tree, tvb, bitcount/8, bytes_needed_for_frames, "Frame Data");
@ -406,7 +411,7 @@ dissect_amr_be(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint amr
if (tvb_reported_length_remaining(tvb, (bitcount+8)/8) > 0) {
item = proto_tree_add_text(tree, tvb, bitcount/8, tvb_reported_length_remaining(tvb, bitcount/8), "Error:");
proto_item_append_text(item, " %d Bytes remaining - should be 0!",tvb_reported_length_remaining(tvb, (bitcount+8)/8));
expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Superfluous data remaining");
expert_add_info(pinfo, item, &ei_amr_superfluous_data);
/* Now check the paddings */
if (bitcount%8 != 0) {
@ -414,7 +419,7 @@ dissect_amr_be(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint amr
proto_tree_add_text(tree, tvb, bitcount/8, 1, "Padding bits correct");
else {
item = proto_tree_add_text(tree, tvb, bitcount/8, 1, "Padding bits error");
expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR, "Padding bits error - MUST be 0");
expert_add_info(pinfo, item, &ei_amr_padding_bits_not0);
}
}
}
@ -609,6 +614,7 @@ void
proto_register_amr(void)
{
module_t *amr_module;
expert_module_t* expert_amr;
static hf_register_info hf[] = {
{ &hf_amr_nb_cmr,
@ -728,6 +734,14 @@ proto_register_amr(void)
&ett_amr,
&ett_amr_toc,
};
static ei_register_info ei[] = {
{ &ei_amr_spare_bit_not0, { "amr.spare_bit_not0", PI_PROTOCOL, PI_WARN, "Error:Spare bits not 0", EXPFILL }},
{ &ei_amr_not_enough_data_for_frames, { "amr.not_enough_data_for_frames", PI_MALFORMED, PI_ERROR, "Not enough data for the frames according to TOC", EXPFILL }},
{ &ei_amr_superfluous_data, { "amr.superfluous_data", PI_MALFORMED, PI_ERROR, "Superfluous data remaining", EXPFILL }},
{ &ei_amr_padding_bits_not0, { "amr.padding_bits_not0", PI_MALFORMED, PI_ERROR, "Padding bits error - MUST be 0", EXPFILL }},
};
static const enum_val_t encoding_types[] = {
{"RFC 3267 Byte aligned", "RFC 3267 octet aligned", 0},
{"RFC 3267 Bandwidth-efficient", "RFC 3267 BW-efficient", 1},
@ -748,6 +762,8 @@ proto_register_amr(void)
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_amr, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_amr = expert_register_protocol(proto_amr);
expert_register_field_array(expert_amr, ei, array_length(ei));
/* Register a configuration option for port */
amr_module = prefs_register_protocol(proto_amr, proto_reg_handoff_amr);

View File

@ -114,6 +114,11 @@ static int ett_mime_header = -1;
static int ett_header = -1;
static int ett_trailer = -1;
static expert_field ei_beep_more = EI_INIT;
static expert_field ei_beep_cr_terminator = EI_INIT;
static expert_field ei_beep_lf_terminator = EI_INIT;
static expert_field ei_beep_invalid_terminator = EI_INIT;
/* Get the state of the more flag ... */
#define BEEP_VIOL 0
@ -229,7 +234,7 @@ dissect_beep_more(tvbuff_t *tvb, packet_info *pinfo, int offset,
ret = 1;
break;
default:
expert_add_info_format(pinfo, hidden_item, PI_PROTOCOL, PI_WARN, "Expected More Flag (* or .)");
expert_add_info(pinfo, hidden_item, &ei_beep_more);
ret = -1;
break;
}
@ -289,7 +294,7 @@ check_term(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree)
if ((tvb_get_guint8(tvb, offset) == 0x0d) && !global_beep_strict_term) {
ti = proto_tree_add_text(tree, tvb, offset, 1, "Terminator: CR");
expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, "Nonstandard Terminator: CR");
expert_add_info(pinfo, ti, &ei_beep_cr_terminator);
return 1;
}
@ -297,12 +302,12 @@ check_term(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree)
if ((tvb_get_guint8(tvb, offset) == 0x0a) && !global_beep_strict_term) {
ti = proto_tree_add_text(tree, tvb, offset, 1, "Terminator: LF");
expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, "Nonstandard Terminator: LF");
expert_add_info(pinfo, ti, &ei_beep_lf_terminator);
return 1;
}
ti = proto_tree_add_text(tree, tvb, offset, 1, "Terminator: %s", tvb_format_text(tvb, offset, 2));
expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, "Invalid Terminator: %s", tvb_format_text(tvb, offset, 2));
expert_add_info_format_text(pinfo, ti, &ei_beep_invalid_terminator, "Invalid Terminator: %s", tvb_format_text(tvb, offset, 2));
return -1;
}
@ -974,13 +979,23 @@ proto_register_beep(void)
&ett_header,
&ett_trailer,
};
static ei_register_info ei[] = {
{ &ei_beep_more, { "beep.more.expected", PI_PROTOCOL, PI_WARN, "Expected More Flag (* or .)", EXPFILL }},
{ &ei_beep_cr_terminator, { "beep.cr_terminator", PI_PROTOCOL, PI_WARN, "Nonstandard Terminator: CR", EXPFILL }},
{ &ei_beep_lf_terminator, { "beep.lf_terminator", PI_PROTOCOL, PI_WARN, "Nonstandard Terminator: LF", EXPFILL }},
{ &ei_beep_invalid_terminator, { "beep.invalid_terminator", PI_PROTOCOL, PI_WARN, "Invalid Terminator", EXPFILL }},
};
module_t *beep_module;
expert_module_t* expert_beep;
proto_beep = proto_register_protocol("Blocks Extensible Exchange Protocol",
"BEEP", "beep");
proto_register_field_array(proto_beep, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_beep = expert_register_protocol(proto_beep);
expert_register_field_array(expert_beep, ei, array_length(ei));
register_init_routine(&beep_init_protocol);
/* Register our configuration options for BEEP, particularly our port */

View File

@ -769,6 +769,12 @@ static gint ett_bgp_tunnel_tlv_subtree = -1;
static gint ett_bgp_tunnel_subtlv = -1;
static gint ett_bgp_tunnel_subtlv_subtree = -1;
static expert_field ei_bgp_cap_len_bad = EI_INIT;
static expert_field ei_bgp_cap_gr_helper_mode_only = EI_INIT;
static expert_field ei_bgp_notify_minor_unknown = EI_INIT;
static expert_field ei_bgp_route_refresh_orf_type_unknown = EI_INIT;
static expert_field ei_bgp_length_invalid = EI_INIT;
/* desegmentation */
static gboolean bgp_desegment = TRUE;
@ -2095,14 +2101,14 @@ dissect_bgp_capability_item(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
switch (ctype) {
case BGP_CAPABILITY_RESERVED:
if (clen != 0) {
expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Capability length %u wrong, must be = 0", clen);
expert_add_info_format_text(pinfo, ti_len, &ei_bgp_cap_len_bad, "Capability length %u wrong, must be = 0", clen);
proto_tree_add_item(cap_tree, hf_bgp_cap_unknown, tvb, offset, clen, ENC_NA);
}
offset += clen;
break;
case BGP_CAPABILITY_MULTIPROTOCOL:
if (clen != 4) {
expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Capability length %u is wrong, must be = 4", clen);
expert_add_info_format_text(pinfo, ti_len, &ei_bgp_cap_len_bad, "Capability length %u is wrong, must be = 4", clen);
proto_tree_add_item(cap_tree, hf_bgp_cap_unknown, tvb, offset, clen, ENC_NA);
offset += clen;
}
@ -2123,7 +2129,7 @@ dissect_bgp_capability_item(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
break;
case BGP_CAPABILITY_GRACEFUL_RESTART:
if ((clen < 6) && (clen != 2)) {
expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Capability length %u too short, must be greater than 6", clen);
expert_add_info_format_text(pinfo, ti_len, &ei_bgp_cap_len_bad, "Capability length %u too short, must be greater than 6", clen);
proto_tree_add_item(cap_tree, hf_bgp_cap_unknown, tvb, offset, clen, ENC_NA);
offset += clen;
}
@ -2132,7 +2138,7 @@ dissect_bgp_capability_item(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
proto_tree *sub_tree;
if (clen == 2){
expert_add_info_format(pinfo, ti_len, PI_REQUEST_CODE, PI_CHAT, "Graceful Restart Capability supported in Helper mode only");
expert_add_info(pinfo, ti_len, &ei_bgp_cap_gr_helper_mode_only);
}
/* Timers */
@ -2165,7 +2171,7 @@ dissect_bgp_capability_item(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
break;
case BGP_CAPABILITY_4_OCTET_AS_NUMBER:
if (clen != 4) {
expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Capability length %u is wrong, must be = 4", clen);
expert_add_info_format_text(pinfo, ti_len, &ei_bgp_cap_len_bad, "Capability length %u is wrong, must be = 4", clen);
proto_tree_add_item(cap_tree, hf_bgp_cap_unknown, tvb, offset, clen, ENC_NA);
offset += clen;
}
@ -2186,7 +2192,7 @@ dissect_bgp_capability_item(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
break;
case BGP_CAPABILITY_ADDITIONAL_PATHS:
if (clen != 4) {
expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Capability length %u is wrong, must be = 4", clen);
expert_add_info_format_text(pinfo, ti_len, &ei_bgp_cap_len_bad, "Capability length %u is wrong, must be = 4", clen);
proto_tree_add_item(cap_tree, hf_bgp_cap_unknown, tvb, offset, clen, ENC_NA);
offset += clen;
}
@ -2210,7 +2216,7 @@ dissect_bgp_capability_item(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
case BGP_CAPABILITY_ROUTE_REFRESH_CISCO:
case BGP_CAPABILITY_ROUTE_REFRESH:
if (clen != 0) {
expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Capability length %u wrong, must be = 0", clen);
expert_add_info_format_text(pinfo, ti_len, &ei_bgp_cap_len_bad, "Capability length %u wrong, must be = 0", clen);
proto_tree_add_item(cap_tree, hf_bgp_cap_unknown, tvb, offset, clen, ENC_NA);
}
offset += clen;
@ -2218,7 +2224,7 @@ dissect_bgp_capability_item(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
case BGP_CAPABILITY_ORF_CISCO:
case BGP_CAPABILITY_COOPERATIVE_ROUTE_FILTERING:
if (clen < 6) {
expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Capability length %u too short, must be greater than 6", clen);
expert_add_info_format_text(pinfo, ti_len, &ei_bgp_cap_len_bad, "Capability length %u too short, must be greater than 6", clen);
proto_tree_add_item(cap_tree, hf_bgp_cap_unknown, tvb, offset, clen, ENC_NA);
offset += clen;
}
@ -3563,7 +3569,7 @@ dissect_bgp_notification(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo)
break;
default:
ti = proto_tree_add_item(tree, hf_bgp_notify_minor_unknown, tvb, offset, 1, ENC_NA);
expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_NOTE, "Unknown notification error (%d)",major_error);
expert_add_info_format_text(pinfo, ti, &ei_bgp_notify_minor_unknown, "Unknown notification error (%d)",major_error);
break;
}
offset += 1;
@ -3649,7 +3655,7 @@ example 2
p += 2;
if (orftype != BGP_ORF_PREFIX_CISCO) {
expert_add_info_format(pinfo, ti1, PI_CHAT, PI_ERROR, "ORFEntry-Unknown (type %u)", orftype);
expert_add_info_format_text(pinfo, ti1, &ei_bgp_route_refresh_orf_type_unknown, "ORFEntry-Unknown (type %u)", orftype);
p += orflen;
continue;
}
@ -3761,7 +3767,7 @@ dissect_bgp_pdu(tvbuff_t *volatile tvb, packet_info *pinfo, proto_tree *tree,
}
if (bgp_len < BGP_HEADER_SIZE || bgp_len > BGP_MAX_PACKET_SIZE) {
expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Length is invalid %u", bgp_len);
expert_add_info_format_text(pinfo, ti_len, &ei_bgp_length_invalid, "Length is invalid %u", bgp_len);
return;
}
@ -4427,7 +4433,17 @@ proto_register_bgp(void)
&ett_bgp_tunnel_subtlv,
&ett_bgp_tunnel_subtlv_subtree,
};
static ei_register_info ei[] = {
{ &ei_bgp_cap_len_bad, { "bgp.cap.length.bad", PI_MALFORMED, PI_ERROR, "Capability length is wrong", EXPFILL }},
{ &ei_bgp_cap_gr_helper_mode_only, { "bgp.cap.gr.helper_mode_only", PI_REQUEST_CODE, PI_CHAT, "Graceful Restart Capability supported in Helper mode only", EXPFILL }},
{ &ei_bgp_notify_minor_unknown, { "bgp.notify.minor_error.unknown", PI_UNDECODED, PI_NOTE, "Unknown notification error", EXPFILL }},
{ &ei_bgp_route_refresh_orf_type_unknown, { "bgp.route_refresh.orf.type.unknown", PI_CHAT, PI_ERROR, "ORFEntry-Unknown", EXPFILL }},
{ &ei_bgp_length_invalid, { "bgp.length.invalid", PI_MALFORMED, PI_ERROR, "Length is invalid", EXPFILL }},
};
module_t *bgp_module;
expert_module_t* expert_bgp;
static const enum_val_t asn_len[] = {
{"auto-detect", "Auto-detect", 0},
{"2", "2 octet", 2},
@ -4439,6 +4455,8 @@ proto_register_bgp(void)
"BGP", "bgp");
proto_register_field_array(proto_bgp, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_bgp = expert_register_protocol(proto_bgp);
expert_register_field_array(expert_bgp, ei, array_length(ei));
bgp_module = prefs_register_protocol(proto_bgp, NULL);
prefs_register_bool_preference(bgp_module, "desegment",

View File

@ -264,6 +264,9 @@ static gint ett_capwap = -1;
static gint ett_msg_fragment = -1;
static gint ett_msg_fragments = -1;
static expert_field ei_capwap_header_length_bad = EI_INIT;
/* ************************************************************************* */
/* Fragment items */
/* ************************************************************************* */
@ -1326,7 +1329,7 @@ dissect_capwap_header(tvbuff_t *tvb, proto_tree *capwap_control_tree, guint offs
}
if ((plen != hlen) && global_capwap_draft_8_cisco == 0)
{
expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_WARN, "Wrong calculate length (%d) =! header length (%d) ! (May be try to use Cisco Wireless Controller Support Preference ?)", plen, hlen);
expert_add_info_format_text(pinfo, ti_len, &ei_capwap_header_length_bad, "Wrong calculate length (%d) =! header length (%d) ! (May be try to use Cisco Wireless Controller Support Preference ?)", plen, hlen);
}
return hlen;
}
@ -2218,6 +2221,12 @@ proto_register_capwap_control(void)
&ett_msg_fragments
};
static ei_register_info ei[] = {
{ &ei_capwap_header_length_bad, { "capwap.header.length.bad", PI_MALFORMED, PI_WARN, "Wrong calculate length =! header length", EXPFILL }},
};
expert_module_t* expert_capwap;
/* Register the protocol name and description */
proto_capwap = proto_register_protocol("Control And Provisioning of Wireless Access Points", "CAPWAP", "capwap");
@ -2226,6 +2235,9 @@ proto_register_capwap_control(void)
proto_register_subtree_array(ett, array_length(ett));
expert_capwap = expert_register_protocol(proto_capwap);
expert_register_field_array(expert_capwap, ei, array_length(ei));
register_init_routine(&capwap_reassemble_init);
/* Register preferences module (See Section 2.6 for more on preferences) */

View File

@ -62,6 +62,11 @@ static int ett_dbus_hdr = -1;
static int ett_dbus_body = -1;
static int ett_dbus_field = -1;
static expert_field ei_dbus_value_bool_invalid = EI_INIT;
static expert_field ei_dbus_value_str_invalid = EI_INIT;
static expert_field ei_dbus_invalid_object_path = EI_INIT;
static expert_field ei_dbus_invalid_signature = EI_INIT;
static int proto_dbus = -1;
#define DBUS_MESSAGE_TYPE_INVALID 0
@ -182,7 +187,7 @@ dissect_dbus_sig(tvbuff_t *tvb, dbus_info_t *dinfo, proto_tree *tree, int offset
ti = proto_tree_add_boolean_format(tree, hf_dbus_value_bool, tvb, org_offset, offset - org_offset, val, "BOOLEAN: %s", val ? "True" : "False");
if (val != 0 && val != 1) {
expert_add_info_format(dinfo->pinfo, ti, PI_PROTOCOL, PI_WARN, "Invalid boolean value (must be 0 or 1 is: %u)", val);
expert_add_info_format_text(dinfo->pinfo, ti, &ei_dbus_value_bool_invalid, "Invalid boolean value (must be 0 or 1 is: %u)", val);
return -1;
}
ret->uint = val;
@ -268,13 +273,13 @@ dissect_dbus_sig(tvbuff_t *tvb, dbus_info_t *dinfo, proto_tree *tree, int offset
if (sig == 's') {
ti = proto_tree_add_string_format(tree, hf_dbus_value_str, tvb, org_offset, offset - org_offset, val, "STRING: %s", val);
if (!g_utf8_validate(val, -1, NULL)) {
expert_add_info_format(dinfo->pinfo, ti, PI_PROTOCOL, PI_WARN, "Invalid string (not UTF-8)");
expert_add_info(dinfo->pinfo, ti, &ei_dbus_value_str_invalid);
return -1;
}
} else {
ti = proto_tree_add_string_format(tree, hf_dbus_value_str, tvb, org_offset, offset - org_offset, val, "OBJECT_PATH: %s", val);
if (!dbus_validate_object_path(val)) {
expert_add_info_format(dinfo->pinfo, ti, PI_PROTOCOL, PI_WARN, "Invalid object_path");
expert_add_info(dinfo->pinfo, ti, &ei_dbus_invalid_object_path);
return -1;
}
}
@ -295,7 +300,7 @@ dissect_dbus_sig(tvbuff_t *tvb, dbus_info_t *dinfo, proto_tree *tree, int offset
ti = proto_tree_add_string_format(tree, hf_dbus_value_str, tvb, org_offset, offset - org_offset, val, "SIGNATURE: %s", val);
if (!dbus_validate_signature(val)) {
expert_add_info_format(dinfo->pinfo, ti, PI_PROTOCOL, PI_WARN, "Invalid signature");
expert_add_info(dinfo->pinfo, ti, &ei_dbus_invalid_signature);
return -1;
}
ret->str = val;
@ -326,7 +331,7 @@ dissect_dbus_field_signature(tvbuff_t *tvb, dbus_info_t *dinfo, proto_tree *tree
ti = proto_tree_add_string(tree, hf_dbus_type_signature, tvb, org_offset, offset - org_offset, sig);
if (!dbus_validate_signature(sig)) {
expert_add_info_format(dinfo->pinfo, ti, PI_PROTOCOL, PI_WARN, "Invalid signature");
expert_add_info(dinfo->pinfo, ti, &ei_dbus_invalid_signature);
return -1;
}
@ -648,10 +653,21 @@ proto_register_dbus(void)
&ett_dbus_field
};
static ei_register_info ei[] = {
{ &ei_dbus_value_bool_invalid, { "dbus.value.bool.invalid", PI_PROTOCOL, PI_WARN, "Invalid boolean value", EXPFILL }},
{ &ei_dbus_value_str_invalid, { "dbus.value.str.invalid", PI_PROTOCOL, PI_WARN, "Invalid string (not UTF-8)", EXPFILL }},
{ &ei_dbus_invalid_object_path, { "dbus.invalid_object_path", PI_PROTOCOL, PI_WARN, "Invalid object_path", EXPFILL }},
{ &ei_dbus_invalid_signature, { "dbus.invalid_signature", PI_PROTOCOL, PI_WARN, "Invalid signature", EXPFILL }},
};
expert_module_t* expert_dbus;
proto_dbus = proto_register_protocol("D-Bus", "D-BUS", "dbus");
proto_register_field_array(proto_dbus, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_dbus = expert_register_protocol(proto_dbus);
expert_register_field_array(expert_dbus, ei, array_length(ei));
}
void

View File

@ -184,6 +184,10 @@ static int hf_dccp_data_checksum = -1;
static gint ett_dccp = -1;
static gint ett_dccp_options = -1;
static expert_field ei_dccp_option_len_bad = EI_INIT;
static expert_field ei_dccp_advertised_header_length_bad = EI_INIT;
static expert_field ei_dccp_packet_type_reserved = EI_INIT;
static dissector_table_t dccp_subdissector_table;
static heur_dissector_list_t heur_subdissector_list;
static dissector_handle_t data_handle;
@ -408,7 +412,7 @@ dissect_options(tvbuff_t *tvb, packet_info *pinfo _U_,
option_len = tvb_get_guint8(tvb, offset + 1);
if (option_len < 2) {
expert_add_info_format(pinfo, option_item, PI_MALFORMED, PI_ERROR,
expert_add_info_format_text(pinfo, option_item, &ei_dccp_option_len_bad,
"Option length incorrect, must be >= 2");
return;
}
@ -452,7 +456,7 @@ dissect_options(tvbuff_t *tvb, packet_info *pinfo _U_,
break;
case 37:
if (option_len > 8)
expert_add_info_format(pinfo, option_item, PI_PROTOCOL, PI_WARN,
expert_add_info_format_text(pinfo, option_item, &ei_dccp_option_len_bad,
"NDP Count too long (max 6 bytes)");
else
proto_tree_add_text(dccp_options_tree, tvb, offset, option_len,
@ -491,7 +495,7 @@ dissect_options(tvbuff_t *tvb, packet_info *pinfo _U_,
offset + 2, 4,
tvb_get_ntohl(tvb, offset + 2));
else
expert_add_info_format(pinfo, option_item, PI_PROTOCOL, PI_WARN,
expert_add_info_format_text(pinfo, option_item, &ei_dccp_option_len_bad,
"Timestamp too long [%u != 6]", option_len);
break;
case 42:
@ -514,7 +518,7 @@ dissect_options(tvbuff_t *tvb, packet_info *pinfo _U_,
tvb, offset + 6, 4,
tvb_get_ntohl(tvb, offset + 6));
} else
expert_add_info_format(pinfo, option_item, PI_PROTOCOL, PI_WARN,
expert_add_info_format_text(pinfo, option_item, &ei_dccp_option_len_bad,
"Wrong Timestamp Echo length");
break;
case 43:
@ -527,7 +531,7 @@ dissect_options(tvbuff_t *tvb, packet_info *pinfo _U_,
tvb, offset + 2, 4,
tvb_get_ntohl(tvb, offset + 2));
else
expert_add_info_format(pinfo, option_item, PI_PROTOCOL, PI_WARN,
expert_add_info_format_text(pinfo, option_item, &ei_dccp_option_len_bad,
"Wrong Elapsed Time length");
break;
case 44:
@ -536,7 +540,7 @@ dissect_options(tvbuff_t *tvb, packet_info *pinfo _U_,
tvb, offset + 2, 4,
tvb_get_ntohl(tvb, offset + 2));
} else
expert_add_info_format(pinfo, option_item, PI_PROTOCOL, PI_WARN,
expert_add_info_format_text(pinfo, option_item, &ei_dccp_option_len_bad,
"Wrong Data checksum length");
break;
case 192: /* RFC 4342, 8.5 */
@ -555,7 +559,7 @@ dissect_options(tvbuff_t *tvb, packet_info *pinfo _U_,
option_len, "CCID3 Loss Event Rate: %u",
p);
} else
expert_add_info_format(pinfo, option_item, PI_PROTOCOL, PI_WARN,
expert_add_info_format_text(pinfo, option_item, &ei_dccp_option_len_bad,
"Wrong CCID3 Loss Event Rate length");
break;
case 193: /* RFC 4342, 8.6 */
@ -572,7 +576,7 @@ dissect_options(tvbuff_t *tvb, packet_info *pinfo _U_,
"CCID3 Receive Rate: %u bytes/sec",
tvb_get_ntohl(tvb, offset + 2));
else
expert_add_info_format(pinfo, option_item, PI_PROTOCOL, PI_WARN,
expert_add_info_format_text(pinfo, option_item, &ei_dccp_option_len_bad,
"Wrong CCID3 Receive Rate length");
break;
default:
@ -803,7 +807,7 @@ dissect_dccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
if (dccph->x) {
if (advertised_dccp_header_len < DCCP_GEN_HDR_LEN_X) {
expert_add_info_format(pinfo, offset_item, PI_MALFORMED, PI_ERROR,
expert_add_info_format_text(pinfo, offset_item, &ei_dccp_advertised_header_length_bad,
"Advertised header length (%u) is smaller than the minimum (%u)",
advertised_dccp_header_len, DCCP_GEN_HDR_LEN_X);
return tvb_length(tvb);
@ -821,7 +825,7 @@ dissect_dccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
offset += 6;
} else {
if (advertised_dccp_header_len < DCCP_GEN_HDR_LEN_NO_X) {
expert_add_info_format(pinfo, offset_item, PI_MALFORMED, PI_ERROR,
expert_add_info_format_text(pinfo, offset_item, &ei_dccp_advertised_header_length_bad,
"Advertised header length (%u) is smaller than the minimum (%u)",
advertised_dccp_header_len, DCCP_GEN_HDR_LEN_NO_X);
return tvb_length(tvb);
@ -844,7 +848,7 @@ dissect_dccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
case 0x0: /* DCCP-Request */
case 0xA: /* DCCP-Listen */
if (advertised_dccp_header_len < offset + 4) {
expert_add_info_format(pinfo, offset_item, PI_MALFORMED, PI_ERROR,
expert_add_info_format_text(pinfo, offset_item, &ei_dccp_advertised_header_length_bad,
"Advertised header length (%u) is smaller than the minimum (%u) for %s",
advertised_dccp_header_len, offset + 4,
val_to_str(dccph->type, dccp_packet_type_vals, "Unknown (%u)"));
@ -860,7 +864,7 @@ dissect_dccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
break;
case 0x1: /* DCCP-Response */
if (advertised_dccp_header_len < offset + 12) {
expert_add_info_format(pinfo, offset_item, PI_MALFORMED, PI_ERROR,
expert_add_info_format_text(pinfo, offset_item, &ei_dccp_advertised_header_length_bad,
"Advertised header length (%u) is smaller than the minimum (%u) for Response",
advertised_dccp_header_len, offset + 12);
return tvb_length(tvb);
@ -900,7 +904,7 @@ dissect_dccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
case 0x4: /* DCCP-DataAck */
if (dccph->x) {
if (advertised_dccp_header_len < offset + 8) {
expert_add_info_format(pinfo, offset_item, PI_MALFORMED, PI_ERROR,
expert_add_info_format_text(pinfo, offset_item, &ei_dccp_advertised_header_length_bad,
"Advertised header length (%u) is smaller than the minimum (%u) for %s",
advertised_dccp_header_len, offset + 8,
val_to_str(dccph->type, dccp_packet_type_vals, "Unknown (%u)"));
@ -925,7 +929,7 @@ dissect_dccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
offset += 8; /* move offset past the Ack Number Subheader */
} else {
if (advertised_dccp_header_len < offset + 4) {
expert_add_info_format(pinfo, offset_item, PI_MALFORMED, PI_ERROR,
expert_add_info_format_text(pinfo, offset_item, &ei_dccp_advertised_header_length_bad,
"Advertised header length (%u) is smaller than the minimum (%u) for %s",
advertised_dccp_header_len, offset + 4,
val_to_str(dccph->type, dccp_packet_type_vals, "Unknown (%u)"));
@ -951,7 +955,7 @@ dissect_dccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
break;
case 0x7: /* DCCP-Reset */
if (advertised_dccp_header_len < offset + 4) {
expert_add_info_format(pinfo, offset_item, PI_MALFORMED, PI_ERROR,
expert_add_info_format_text(pinfo, offset_item, &ei_dccp_advertised_header_length_bad,
"Advertised header length (%u) is smaller than the minimum (%u) for Reset",
advertised_dccp_header_len, offset + 4);
return tvb_length(tvb);
@ -1002,7 +1006,7 @@ dissect_dccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
case 0x8: /* DCCP-Sync */
case 0x9: /* DCCP-SyncAck */
if (advertised_dccp_header_len < offset + 8) {
expert_add_info_format(pinfo, offset_item, PI_MALFORMED, PI_ERROR,
expert_add_info_format_text(pinfo, offset_item, &ei_dccp_advertised_header_length_bad,
"Advertised header length (%u) is smaller than the minimum (%u) for %s",
advertised_dccp_header_len, offset + 8,
val_to_str(dccph->type, dccp_packet_type_vals, "Unknown (%u)"));
@ -1026,8 +1030,7 @@ dissect_dccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
offset += 8; /* move offset past the Ack. Number Subheader */
break;
default:
expert_add_info_format(pinfo, dccp_item, PI_PROTOCOL, PI_WARN,
"Reserved packet type: unable to dissect further");
expert_add_info(pinfo, dccp_item, &ei_dccp_packet_type_reserved);
return tvb_length(tvb);
}
@ -1036,7 +1039,7 @@ dissect_dccp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
* DCCP header to the start of its application data area, in 32-bit words.
*/
if (advertised_dccp_header_len > DCCP_HDR_LEN_MAX) {
expert_add_info_format(pinfo, offset_item, PI_PROTOCOL, PI_WARN,
expert_add_info_format_text(pinfo, offset_item, &ei_dccp_advertised_header_length_bad,
"Advertised header length (%u) is larger than the maximum (%u)",
advertised_dccp_header_len, DCCP_HDR_LEN_MAX);
return tvb_length(tvb);
@ -1317,11 +1320,21 @@ proto_register_dccp(void)
&ett_dccp_options
};
static ei_register_info ei[] = {
{ &ei_dccp_option_len_bad, { "dccp.option.len.bad", PI_PROTOCOL, PI_WARN, "Bad option length", EXPFILL }},
{ &ei_dccp_advertised_header_length_bad, { "dccp.advertised_header_length.bad", PI_MALFORMED, PI_ERROR, "Advertised header length bad", EXPFILL }},
{ &ei_dccp_packet_type_reserved, { "dccp.packet_type.reserved", PI_PROTOCOL, PI_WARN, "Reserved packet type: unable to dissect further", EXPFILL }},
};
expert_module_t* expert_dccp;
proto_dccp =
proto_register_protocol("Datagram Congestion Control Protocol", "DCCP",
"dccp");
proto_register_field_array(proto_dccp, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_dccp = expert_register_protocol(proto_dccp);
expert_register_field_array(expert_dccp, ei, array_length(ei));
/* subdissectors */
dccp_subdissector_table =

View File

@ -224,7 +224,10 @@ static int hf_dcom_vt_bstr = -1;
static int hf_dcom_vt_byref = -1;
static int hf_dcom_vt_dispatch = -1;
static expert_field ei_dcom_dissetion_incomplete = EI_INIT;
static expert_field ei_dcom_no_spec = EI_INIT;
static expert_field ei_dcom_hresult_expert = EI_INIT;
static expert_field ei_dcom_dualstringarray_mult_ip = EI_INIT;
/* this/that extension UUIDs */
static e_uuid_t uuid_debug_ext = { 0xf1f19680, 0x4d2a, 0x11ce, { 0xa6, 0x6a, 0x00, 0x20, 0xaf, 0x6e, 0x72, 0xf4} };
@ -958,7 +961,7 @@ dissect_dcom_tobedone_data(tvbuff_t *tvb, int offset,
item = proto_tree_add_item(tree, hf_dcom_tobedone, tvb, offset, length, ENC_NA);
PROTO_ITEM_SET_GENERATED(item);
expert_add_info_format(pinfo, item, PI_UNDECODED, PI_WARN, "Dissection incomplete");
expert_add_info(pinfo, item, &ei_dcom_dissetion_incomplete);
offset += length;
@ -977,7 +980,7 @@ dissect_dcom_nospec_data(tvbuff_t *tvb, int offset,
item = proto_tree_add_item(tree, hf_dcom_nospec, tvb, offset, length, ENC_NA);
PROTO_ITEM_SET_GENERATED(item);
expert_add_info_format(pinfo, item, PI_UNDECODED, PI_NOTE, "No specification available, dissection not possible");
expert_add_info(pinfo, item, &ei_dcom_no_spec);
offset += length;
@ -1090,7 +1093,7 @@ dissect_dcom_HRESULT(tvbuff_t *tvb, int offset, packet_info *pinfo,
/* expert info only if severity is set */
/* XXX - move this to the callers of this function, to provide a more detailed error output */
if(u32HResult & 0x80000000) {
expert_add_info_format(pinfo, item, PI_RESPONSE_CODE, PI_NOTE, "Hresult: %s",
expert_add_info_format_text(pinfo, item, &ei_dcom_hresult_expert, "Hresult: %s",
val_to_str(u32HResult, dcom_hresult_vals, "Unknown (0x%x)"));
}
if (pu32HResult)
@ -1124,7 +1127,7 @@ dissect_dcom_indexed_HRESULT(tvbuff_t *tvb, int offset, packet_info *pinfo,
/* expert info only if severity flag is set */
/* XXX - move this to the callers of this function, to provide a more detailed error output */
if(u32HResult & 0x80000000) {
expert_add_info_format(pinfo, item, PI_RESPONSE_CODE, PI_NOTE, "Hresult: %s",
expert_add_info_format_text(pinfo, item, &ei_dcom_hresult_expert, "Hresult: %s",
val_to_str(u32HResult, dcom_hresult_vals, "Unknown (0x%x)"));
}
if (pu32HResult)
@ -1822,7 +1825,7 @@ dissect_dcom_DUALSTRINGARRAY(tvbuff_t *tvb, gint offset, packet_info *pinfo,
first_ip = curr_ip;
} else {
if(first_ip != curr_ip) {
expert_add_info_format(pinfo, pi, PI_UNDECODED, PI_NOTE,
expert_add_info_format_text(pinfo, pi, &ei_dcom_dualstringarray_mult_ip,
"DUALSTRINGARRAY: multiple IP's %s %s",
ip_to_str( (guint8 *) &first_ip), ip_to_str( (guint8 *) &curr_ip));
}
@ -2440,7 +2443,15 @@ proto_register_dcom (void)
&ett_dcom_sa_features,
};
static ei_register_info ei[] = {
{ &ei_dcom_dissetion_incomplete, { "dcom.dissetion_incomplete", PI_UNDECODED, PI_WARN, "Dissection incomplete", EXPFILL }},
{ &ei_dcom_no_spec, { "dcom.no_spec", PI_UNDECODED, PI_NOTE, "No specification available, dissection not possible", EXPFILL }},
{ &ei_dcom_hresult_expert, { "dcom.hresult.expert", PI_RESPONSE_CODE, PI_NOTE, "Hresult", EXPFILL }},
{ &ei_dcom_dualstringarray_mult_ip, { "dcom.dualstringarray.mult_ip", PI_UNDECODED, PI_NOTE, "DUALSTRINGARRAY Multiple IP", EXPFILL }},
};
module_t *dcom_module;
expert_module_t* expert_dcom;
/* currently, the DCOM protocol "itself" has no real protocol dissector */
/* we only need this, to register some generic elements */
@ -2458,6 +2469,9 @@ proto_register_dcom (void)
proto_register_field_array(proto_dcom, hf_dcom_sa_array, array_length(hf_dcom_sa_array));
proto_register_subtree_array (ett_dcom, array_length (ett_dcom));
expert_dcom = expert_register_protocol(proto_dcom);
expert_register_field_array(expert_dcom, ei, array_length(ei));
/* preferences */
dcom_module = prefs_register_protocol(proto_dcom, NULL);

View File

@ -1066,6 +1066,9 @@ static gint ett_dnp3_al_obj_quality = -1;
static gint ett_dnp3_al_obj_point = -1;
static gint ett_dnp3_al_obj_point_perms = -1;
static expert_field ei_dnp_num_items_neg = EI_INIT;
static expert_field ei_dnp_invalid_length = EI_INIT;
/* Tables for reassembly of fragments. */
static reassembly_table al_reassembly_table;
static GHashTable *dl_conversation_table = NULL;
@ -1629,7 +1632,7 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
if (num_items < 0) {
proto_item_append_text(range_item, " (bogus)");
expert_add_info_format(pinfo, range_item, PI_MALFORMED, PI_ERROR, "Negative number of items");
expert_add_info(pinfo, range_item, &ei_dnp_num_items_neg);
return tvb_length(tvb);
}
@ -2531,7 +2534,7 @@ dnp3_al_process_object(tvbuff_t *tvb, packet_info *pinfo, int offset,
al_ptaddr++;
}
if (start_offset > offset) {
expert_add_info_format(pinfo, point_item, PI_MALFORMED, PI_ERROR, "Invalid length");
expert_add_info(pinfo, point_item, &ei_dnp_invalid_length);
offset = tvb_length(tvb); /* Finish decoding if unknown object is encountered... */
}
}
@ -4106,7 +4109,12 @@ proto_register_dnp3(void)
&ett_dnp3_fragment,
&ett_dnp3_fragments
};
static ei_register_info ei[] = {
{ &ei_dnp_num_items_neg, { "dnp3.num_items_neg", PI_MALFORMED, PI_ERROR, "Negative number of items", EXPFILL }},
{ &ei_dnp_invalid_length, { "dnp3.invalid_length", PI_MALFORMED, PI_ERROR, "Invalid length", EXPFILL }},
};
module_t *dnp3_module;
expert_module_t* expert_dnp3;
/* Register protocol init routine */
register_init_routine(&dnp3_init);
@ -4121,6 +4129,8 @@ proto_register_dnp3(void)
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array(proto_dnp3, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_dnp3 = expert_register_protocol(proto_dnp3);
expert_register_field_array(expert_dnp3, ei, array_length(ei));
dnp3_module = prefs_register_protocol(proto_dnp3, NULL);
prefs_register_bool_preference(dnp3_module, "heuristics",

View File

@ -201,6 +201,10 @@ static gint ett_dtls_dnames = -1;
static gint ett_dtls_fragment = -1;
static gint ett_dtls_fragments = -1;
static expert_field ei_dtls_handshake_fragment_length_too_long = EI_INIT;
static expert_field ei_dtls_handshake_fragment_past_end_msg = EI_INIT;
static expert_field ei_dtls_msg_len_diff_fragment = EI_INIT;
static GHashTable *dtls_session_hash = NULL;
static GHashTable *dtls_key_hash = NULL;
static reassembly_table dtls_reassembly_table;
@ -1302,16 +1306,12 @@ dissect_dtls_handshake(tvbuff_t *tvb, packet_info *pinfo,
{
if (fragment_offset == 0)
{
expert_add_info_format(pinfo, fragment_length_item, PI_PROTOCOL,
PI_ERROR,
"Fragment length is larger than message length");
expert_add_info(pinfo, fragment_length_item, &ei_dtls_handshake_fragment_length_too_long);
}
else
{
fragmented = TRUE;
expert_add_info_format(pinfo, fragment_length_item, PI_PROTOCOL,
PI_ERROR,
"Fragment runs past the end of the message");
expert_add_info(pinfo, fragment_length_item, &ei_dtls_handshake_fragment_past_end_msg);
}
}
else if (fragment_length < length)
@ -1368,9 +1368,7 @@ dissect_dtls_handshake(tvbuff_t *tvb, packet_info *pinfo,
report an error. */
if (reassembled_length != length)
{
expert_add_info_format(pinfo, length_item, PI_PROTOCOL,
PI_ERROR,
"Message length differs from value in earlier fragment");
expert_add_info(pinfo, length_item, &ei_dtls_msg_len_diff_fragment);
}
}
@ -3343,6 +3341,14 @@ proto_register_dtls(void)
&ett_dtls_fragments,
};
static ei_register_info ei[] = {
{ &ei_dtls_handshake_fragment_length_too_long, { "dtls.handshake.fragment_length.too_long", PI_PROTOCOL, PI_ERROR, "Fragment length is larger than message length", EXPFILL }},
{ &ei_dtls_handshake_fragment_past_end_msg, { "dtls.handshake.fragment_past_end_msg", PI_PROTOCOL, PI_ERROR, "Fragment runs past the end of the message", EXPFILL }},
{ &ei_dtls_msg_len_diff_fragment, { "dtls.msg_len_diff_fragment", PI_PROTOCOL, PI_ERROR, "Message length differs from value in earlier fragment", EXPFILL }},
};
expert_module_t* expert_dtls;
/* Register the protocol name and description */
proto_dtls = proto_register_protocol("Datagram Transport Layer Security",
"DTLS", "dtls");
@ -3351,6 +3357,8 @@ proto_register_dtls(void)
* subtrees used */
proto_register_field_array(proto_dtls, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_dtls = expert_register_protocol(proto_dtls);
expert_register_field_array(expert_dtls, ei, array_length(ei));
#ifdef HAVE_LIBGNUTLS
{

View File

@ -433,6 +433,10 @@ static gint ett_gtpv2_access_rest_data = -1;
static gint ett_gtpv2_qua = -1;
static gint ett_gtpv2_qui = -1;
static expert_field ei_gtpv2_ie_data_not_dissected = EI_INIT;
static expert_field ei_gtpv2_ie_len_invalid = EI_INIT;
static expert_field ei_gtpv2_source_type_unknown = EI_INIT;
static expert_field ei_gtpv2_fq_csid_type_bad = EI_INIT;
/* Definition of User Location Info (AVP 22) masks */
#define GTPv2_ULI_CGI_MASK 0x01
@ -839,7 +843,7 @@ dissect_gtpv2_unknown(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -2205,7 +2209,7 @@ dissect_gtpv2_s103pdf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto
default:
/* Error */
expert_item = proto_tree_add_text(tree, tvb, 0, length, "Wrong length %u, should be 4 or 16", m);
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_ERROR, "Wrong length %u, should be 4 or 16", m);
expert_add_info_format_text(pinfo, expert_item, &ei_gtpv2_ie_len_invalid, "Wrong length %u, should be 4 or 16", m);
PROTO_ITEM_SET_GENERATED(expert_item);
return;
}
@ -2262,7 +2266,7 @@ dissect_gtpv2_s1udf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_i
default:
/* Error */
expert_item = proto_tree_add_text(tree, tvb, 0, length, "Wrong length %u, should be 4 or 16", m);
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_ERROR, "Wrong length %u, should be 4 or 16", m);
expert_add_info_format_text(pinfo, expert_item, &ei_gtpv2_ie_len_invalid, "Wrong length %u, should be 4 or 16", m);
PROTO_ITEM_SET_GENERATED(expert_item);
return;
}
@ -2360,7 +2364,7 @@ dissect_gtpv2_pdn_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, prot
if (length != 1) {
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "Wrong length indicated. Expected 1, got %u", length);
expert_add_info_format(pinfo, expert_item, PI_MALFORMED, PI_ERROR, "Wrong length indicated. Expected 1, got %u", length);
expert_add_info_format_text(pinfo, expert_item, &ei_gtpv2_ie_len_invalid, "Wrong length indicated. Expected 1, got %u", length);
PROTO_ITEM_SET_GENERATED(expert_item);
return;
}
@ -4216,7 +4220,7 @@ dissect_gtpv2_source_ident(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
default:
expert_item = proto_tree_add_text(tree, tvb, offset-1, 1, "Unknown source type");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_ERROR, "Unknown source type");
expert_add_info(pinfo, expert_item, &ei_gtpv2_source_type_unknown);
PROTO_ITEM_SET_GENERATED(expert_item);
break;
}
@ -4330,7 +4334,7 @@ dissect_gtpv2_fq_csid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto
break;
default:
expert_item = proto_tree_add_text(tree, tvb, offset-1, 1, "Wrong Node-ID Type %u, should be 0-2(Or tis is a newer spec)", node_id_type);
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_ERROR, "Wrong Node-ID Type %u, should be 0-2(Or tis is a newer spec)", node_id_type);
expert_add_info_format_text(pinfo, expert_item, &ei_gtpv2_fq_csid_type_bad, "Wrong Node-ID Type %u, should be 0-2(Or tis is a newer spec)", node_id_type);
PROTO_ITEM_SET_GENERATED(expert_item);
return;
}
@ -4663,7 +4667,7 @@ dissect_gtpv2_uci(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -4674,7 +4678,7 @@ dissect_gtpv2_csg_info_rep_action(tvbuff_t *tvb, packet_info *pinfo _U_, proto_t
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -4695,7 +4699,7 @@ dissect_gtpv2_csg_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, pr
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -4706,7 +4710,7 @@ dissect_gtpv2_cmi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -4717,7 +4721,7 @@ dissect_gtpv2_service_indicator(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -4728,7 +4732,7 @@ dissect_gtpv2_detach_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -4739,7 +4743,7 @@ dissect_gtpv2_ldn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -4750,7 +4754,7 @@ dissect_gtpv2_node_features(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -4781,7 +4785,7 @@ dissect_gtpv2_throttling(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -4937,7 +4941,7 @@ dissect_gtpv2_mdt_config(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree
proto_item *expert_item;
expert_item = proto_tree_add_text(tree, tvb, 0, length, "IE data not dissected yet");
expert_add_info_format(pinfo, expert_item, PI_PROTOCOL, PI_NOTE, "IE data not dissected yet");
expert_add_info(pinfo, expert_item, &ei_gtpv2_ie_data_not_dissected);
PROTO_ITEM_SET_GENERATED(expert_item);
}
@ -6983,9 +6987,21 @@ void proto_register_gtpv2(void)
&ett_gtpv2_qui,
};
static ei_register_info ei[] = {
{ &ei_gtpv2_ie_data_not_dissected, { "gtpv2.ie_data_not_dissected", PI_PROTOCOL, PI_NOTE, "IE data not dissected yet", EXPFILL }},
{ &ei_gtpv2_ie_len_invalid, { "gtpv2.ie_len_invalid", PI_PROTOCOL, PI_ERROR, "Wrong length", EXPFILL }},
{ &ei_gtpv2_source_type_unknown, { "gtpv2.source_type.unknown", PI_PROTOCOL, PI_ERROR, "Unknown source type", EXPFILL }},
{ &ei_gtpv2_fq_csid_type_bad, { "gtpv2.fq_csid_type.unknown", PI_PROTOCOL, PI_ERROR, "Wrong Node-ID Type", EXPFILL }},
};
expert_module_t* expert_gtpv2;
proto_gtpv2 = proto_register_protocol("GPRS Tunneling Protocol V2", "GTPv2", "gtpv2");
proto_register_field_array(proto_gtpv2, hf_gtpv2, array_length(hf_gtpv2));
proto_register_subtree_array(ett_gtpv2_array, array_length(ett_gtpv2_array));
expert_gtpv2 = expert_register_protocol(proto_gtpv2);
expert_register_field_array(expert_gtpv2, ei, array_length(ei));
/* AVP Code: 22 3GPP-User-Location-Info */
dissector_add_uint("diameter.3gpp", 22, new_create_dissector_handle(dissect_diameter_3gpp_uli, proto_gtpv2));