aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-eigrp.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2013-09-02 23:32:31 +0000
committerMichael Mann <mmann78@netscape.net>2013-09-02 23:32:31 +0000
commit5405b344691e24a7fbbdd31d9b73e46c6d460e7d (patch)
tree451614a911df81cb5b756c2b737035e6ac5d5b6a /epan/dissectors/packet-eigrp.c
parentea6e5b7241fef5355792b50a6921bdf7a955a49a (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.c85
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));
}
/**