diff options
author | Michael Mann <mmann78@netscape.net> | 2013-09-02 23:32:31 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2013-09-02 23:32:31 +0000 |
commit | 5405b344691e24a7fbbdd31d9b73e46c6d460e7d (patch) | |
tree | 451614a911df81cb5b756c2b737035e6ac5d5b6a /epan/dissectors/packet-eigrp.c | |
parent | ea6e5b7241fef5355792b50a6921bdf7a955a49a (diff) |
Batch of filterable expert info.
svn path=/trunk/; revision=51688
Diffstat (limited to 'epan/dissectors/packet-eigrp.c')
-rw-r--r-- | epan/dissectors/packet-eigrp.c | 85 |
1 files changed, 47 insertions, 38 deletions
diff --git a/epan/dissectors/packet-eigrp.c b/epan/dissectors/packet-eigrp.c index c8756514f6..8a2cd6508a 100644 --- a/epan/dissectors/packet-eigrp.c +++ b/epan/dissectors/packet-eigrp.c @@ -503,6 +503,18 @@ static gint hf_eigrp_saf_data_length = -1; static gint hf_eigrp_saf_data_sequence = -1; static gint hf_eigrp_saf_data_type = -1; +static expert_field ei_eigrp_checksum_bad = EI_INIT; +static expert_field ei_eigrp_unreachable = EI_INIT; +static expert_field ei_eigrp_seq_addrlen = EI_INIT; +static expert_field ei_eigrp_peer_termination = EI_INIT; +static expert_field ei_eigrp_tlv_type = EI_INIT; +static expert_field ei_eigrp_auth_type = EI_INIT; +static expert_field ei_eigrp_peer_termination_graceful = EI_INIT; +static expert_field ei_eigrp_auth_len = EI_INIT; +static expert_field ei_eigrp_tlv_len = EI_INIT; +static expert_field ei_eigrp_afi = EI_INIT; +static expert_field ei_eigrp_prefixlen = EI_INIT; + /* some extra handle that might be needed */ static dissector_handle_t ipxsap_handle = NULL; static dissector_table_t media_type_table = NULL; @@ -677,8 +689,7 @@ dissect_eigrp_parameter (proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, if (k1 == 255 && k2 == 255 && k3 == 255 && k4 == 255 && k5 == 255) { proto_item_append_text(ti, ": Peer Termination"); - expert_add_info_format(pinfo, ti, PI_RESPONSE_CODE, PI_NOTE, - "Peer Termination"); + expert_add_info(pinfo, ti, &ei_eigrp_peer_termination); } } @@ -726,8 +737,7 @@ dissect_eigrp_auth_tlv (proto_tree *tree, tvbuff_t *tvb, switch (auth_type) { case EIGRP_AUTH_TYPE_MD5: if (EIGRP_AUTH_TYPE_MD5_LEN != auth_len) { - expert_add_info_format(pinfo, ti_auth_len, PI_UNDECODED, PI_WARN, - "Invalid auth len %u:", auth_len); + expert_add_info_format_text(pinfo, ti_auth_len, &ei_eigrp_auth_len, "Invalid auth len %u", auth_len); } else { proto_tree_add_item(tree, hf_eigrp_auth_digest, tvb, offset, EIGRP_AUTH_TYPE_MD5_LEN, ENC_NA); @@ -736,8 +746,7 @@ dissect_eigrp_auth_tlv (proto_tree *tree, tvbuff_t *tvb, case EIGRP_AUTH_TYPE_SHA256: if (EIGRP_AUTH_TYPE_SHA256_LEN != auth_len) { - expert_add_info_format(pinfo, ti_auth_len, PI_UNDECODED, PI_WARN, - "Invalid auth len %u:", auth_len); + expert_add_info_format_text(pinfo, ti_auth_len, &ei_eigrp_auth_len, "Invalid auth len %u", auth_len); } else { proto_tree_add_item(tree, hf_eigrp_auth_digest, tvb, offset, @@ -748,8 +757,7 @@ dissect_eigrp_auth_tlv (proto_tree *tree, tvbuff_t *tvb, case EIGRP_AUTH_TYPE_NONE: case EIGRP_AUTH_TYPE_TEXT: default: - expert_add_info_format(pinfo, ti_auth_type, PI_UNDECODED, PI_WARN, - "Invalid auth type %u:", auth_type); + expert_add_info_format_text(pinfo, ti_auth_type, &ei_eigrp_auth_type, "Invalid auth type %u", auth_type); break; } } @@ -796,8 +804,7 @@ dissect_eigrp_seq_tlv (proto_tree *tree, tvbuff_t *tvb, ENC_NA); break; default: - expert_add_info_format(pinfo, ti_addrlen, PI_MALFORMED, PI_ERROR, - "Invalid address length"); + expert_add_info(pinfo, ti_addrlen, &ei_eigrp_seq_addrlen); } } @@ -892,7 +899,7 @@ dissect_eigrp_peer_stubinfo (tvbuff_t *tvb, proto_tree *tree) static void dissect_eigrp_peer_termination (packet_info *pinfo, proto_item *ti) { - expert_add_info_format(pinfo, ti, PI_RESPONSE_CODE, PI_NOTE, "Peer Termination (Graceful Shutdown)"); + expert_add_info(pinfo, ti, &ei_eigrp_peer_termination_graceful); } /** @@ -1062,9 +1069,7 @@ dissect_eigrp_ipv4_addr (proto_item *ti, proto_tree *tree, tvbuff_t *tvb, if (addr_len < 0) { ti_prefixlen = proto_tree_add_item(tree, hf_eigrp_ipv4_prefixlen, tvb, offset, 1, ENC_BIG_ENDIAN); - expert_add_info_format(pinfo, ti_prefixlen, PI_UNDECODED, PI_WARN, - "Invalid prefix length %u, must be <= 32", - length); + expert_add_info_format_text(pinfo, ti_prefixlen, &ei_eigrp_prefixlen, "Invalid prefix length %u, must be <= 32", length); addr_len = 4; /* assure we can exit the loop */ } else { @@ -1079,7 +1084,7 @@ dissect_eigrp_ipv4_addr (proto_item *ti, proto_tree *tree, tvbuff_t *tvb, ip_to_str(ip_addr), length); if (unreachable) { - expert_add_info_format(pinfo, ti_dst, PI_RESPONSE_CODE, PI_NOTE, "Unreachable"); + expert_add_info(pinfo, ti_dst, &ei_eigrp_unreachable); } } first = FALSE; @@ -1118,9 +1123,7 @@ dissect_eigrp_ipv6_addr (proto_item *ti, proto_tree *tree, tvbuff_t *tvb, if (addr_len < 0) { ti_prefixlen = proto_tree_add_item(tree, hf_eigrp_ipv6_prefixlen, tvb, offset, 1, ENC_BIG_ENDIAN); - expert_add_info_format(pinfo, ti_prefixlen, PI_UNDECODED, PI_WARN, - "Invalid prefix length %u, must be <= 128", - length); + expert_add_info_format_text(pinfo, ti_prefixlen, &ei_eigrp_prefixlen, "Invalid prefix length %u, must be <= 128", length); addr_len = 16; /* assure we can exit the loop */ } else { proto_tree_add_item(tree, hf_eigrp_ipv6_prefixlen, tvb, offset, 1, @@ -1139,7 +1142,7 @@ dissect_eigrp_ipv6_addr (proto_item *ti, proto_tree *tree, tvbuff_t *tvb, ip6_to_str(&addr), length); if (unreachable) { - expert_add_info_format(pinfo, ti_dst, PI_RESPONSE_CODE, PI_NOTE, "Unreachable"); + expert_add_info(pinfo, ti_dst, &ei_eigrp_unreachable); } } first = FALSE; @@ -1175,8 +1178,7 @@ dissect_eigrp_ipx_addr (proto_item *ti, proto_tree *tree, tvbuff_t *tvb, ipxnet_to_string(tvb_get_ptr(tvb, offset, 4))); if (unreachable) { - expert_add_info_format(pinfo, ti_dst, PI_RESPONSE_CODE, PI_NOTE, - "Unreachable"); + expert_add_info(pinfo, ti_dst, &ei_eigrp_unreachable); } offset +=4; @@ -1640,8 +1642,7 @@ dissect_eigrp_general_tlv (proto_item *ti, proto_tree *tree, tvbuff_t *tvb, dissect_eigrp_peer_tidlist(tree, tvb); break; default: - expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_WARN, - "Unknown Generic TLV (0x%04x)", tlv); + expert_add_info_format_text(pinfo, ti, &ei_eigrp_tlv_type, "Unknown Generic TLV (0x%04x)", tlv); break; } } @@ -1920,7 +1921,6 @@ static int dissect_eigrp_multi_topology_tlv (proto_item *ti, proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, guint16 tlv) { - proto_item *sub_ti; guint16 afi; int offset = 2; int unreachable = FALSE; @@ -1976,8 +1976,7 @@ dissect_eigrp_multi_topology_tlv (proto_item *ti, proto_tree *tree, tvbuff_t *tv break; default: - sub_ti = proto_tree_add_text(tree, tvb, offset, -1, "Unknown AFI"); - expert_add_info_format(pinfo, sub_ti, PI_MALFORMED, PI_ERROR, "Unknown AFI"); + proto_tree_add_expert(tree, pinfo, &ei_eigrp_afi, tvb, offset, -1); } return offset; @@ -2327,7 +2326,6 @@ static int dissect_eigrp_multi_protocol_tlv (proto_item *ti, proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, guint16 tlv) { - proto_item *sub_ti; int offset = 0; guint16 afi; int unreachable = FALSE; @@ -2381,8 +2379,7 @@ dissect_eigrp_multi_protocol_tlv (proto_item *ti, proto_tree *tree, tvbuff_t *tv break; default: - sub_ti = proto_tree_add_text(tree, tvb, offset, -1, "Unknown AFI"); - expert_add_info_format(pinfo, sub_ti, PI_MALFORMED, PI_ERROR, "Unknown AFI"); + proto_tree_add_expert(tree, pinfo, &ei_eigrp_afi, tvb, offset, -1); } return offset; @@ -2472,9 +2469,7 @@ dissect_eigrp (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _ proto_tree_add_text(eigrp_tree, tvb, 2, 2, "Checksum: 0x%02x [incorrect]", checksum); - expert_add_info_format(pinfo, ti, PI_RESPONSE_CODE, PI_NOTE, - "Checksum: 0x%02x [incorrect, should be 0x%02x]", - checksum, cacl_checksum); + expert_add_info(pinfo, ti, &ei_eigrp_checksum_bad); } else { proto_tree_add_text(eigrp_tree, tvb, 2, 2, "Checksum: 0x%02x [correct]", checksum); @@ -2517,10 +2512,7 @@ dissect_eigrp (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _ size = tvb_get_ntohs(tvb, offset + 2); if (size == 0) { - ti = proto_tree_add_text(eigrp_tree, tvb, offset, -1, - "Corrupt TLV (Zero Size)"); - expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_ERROR, - "Corrupt TLV (Zero Size)"); + proto_tree_add_expert(ti, pinfo, &ei_eigrp_tlv_len, tvb, offset, -1); return(tvb_length(tvb)); } @@ -2565,8 +2557,7 @@ dissect_eigrp (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _ break; default: - expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_WARN, - "Unknown TLV Group (0x%04x)", tlv); + expert_add_info_format_text(pinfo, ti, &ei_eigrp_tlv_type, "Unknown TLV Group (0x%04x)", tlv); } offset += size; @@ -3303,6 +3294,22 @@ proto_register_eigrp(void) &ett_eigrp_extdata_flags, }; + static ei_register_info ei[] = { + { &ei_eigrp_peer_termination, { "eigrp.peer_termination", PI_RESPONSE_CODE, PI_NOTE, "Peer Termination", EXPFILL }}, + { &ei_eigrp_auth_len, { "eigrp.auth.length.invalid", PI_MALFORMED, PI_WARN, "Invalid auth len", EXPFILL }}, + { &ei_eigrp_auth_type, { "eigrp.auth.type.invalid", PI_PROTOCOL, PI_WARN, "Invalid auth type", EXPFILL }}, + { &ei_eigrp_seq_addrlen, { "eigrp.seq.addrlen.invalid", PI_MALFORMED, PI_ERROR, "Invalid address length", EXPFILL }}, + { &ei_eigrp_peer_termination_graceful, { "eigrp.peer_termination_graceful", PI_RESPONSE_CODE, PI_NOTE, "Peer Termination (Graceful Shutdown)", EXPFILL }}, + { &ei_eigrp_prefixlen, { "eigrp.prefixlen.invalid", PI_MALFORMED, PI_WARN, "Invalid prefix length", EXPFILL }}, + { &ei_eigrp_unreachable, { "eigrp.unreachable", PI_RESPONSE_CODE, PI_NOTE, "Unreachable", EXPFILL }}, + { &ei_eigrp_tlv_type, { "eigrp.tlv_type.unknown", PI_PROTOCOL, PI_WARN, "Unknown TLV", EXPFILL }}, + { &ei_eigrp_afi, { "eigrp.afi.unknown", PI_PROTOCOL, PI_WARN, "Unknown AFI", EXPFILL }}, + { &ei_eigrp_checksum_bad, { "eigrp.checksum.bad", PI_CHECKSUM, PI_WARN, "Bad Checksum", EXPFILL }}, + { &ei_eigrp_tlv_len, { "eigrp.tlv.len.invalid", PI_MALFORMED, PI_ERROR, "Corrupt TLV (Zero Size)", EXPFILL }}, + }; + + expert_module_t* expert_eigrp; + /* Register the protocol name and description */ proto_eigrp = proto_register_protocol( "Enhanced Interior Gateway Routing Protocol", /* name */ @@ -3313,6 +3320,8 @@ proto_register_eigrp(void) /* Required function calls to register the header fields and subtrees used */ proto_register_field_array(proto_eigrp, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + expert_eigrp = expert_register_protocol(proto_eigrp); + expert_register_field_array(expert_eigrp, ei, array_length(ei)); } /** |