diff options
author | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2015-03-09 08:38:56 +0100 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2015-03-12 13:41:28 +0000 |
commit | ca9508a2897caa0e61238dcc1026390b349cee34 (patch) | |
tree | e155627fde8b855732641387a11aadf2b359a467 /epan | |
parent | dcb087fb20ac85abb96b4de8639ef03de1d62d9c (diff) |
ICMP(v4): Remove proto_tree_add_text
Part 2
Change-Id: I4fa4a48fe047b7231f1cf084d8c798ada15372c5
Reviewed-on: https://code.wireshark.org/review/7607
Reviewed-by: Michael Mann <mmann78@netscape.net>
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-icmp.c | 120 |
1 files changed, 64 insertions, 56 deletions
diff --git a/epan/dissectors/packet-icmp.c b/epan/dissectors/packet-icmp.c index 24c1858bc8..fcb504703b 100644 --- a/epan/dissectors/packet-icmp.c +++ b/epan/dissectors/packet-icmp.c @@ -80,6 +80,7 @@ static int hf_icmp_code = -1; static int hf_icmp_checksum = -1; static int hf_icmp_checksum_bad = -1; static int hf_icmp_unused = -1; +static int hf_icmp_reserved = -1; static int hf_icmp_ident = -1; static int hf_icmp_ident_le = -1; static int hf_icmp_seq_num = -1; @@ -119,6 +120,7 @@ static int hf_icmp_mip_x = -1; static int hf_icmp_mip_reserved = -1; static int hf_icmp_mip_coa = -1; static int hf_icmp_mip_challenge = -1; +static int hf_icmp_mip_content = -1; /* extensions RFC 4884*/ static int hf_icmp_ext = -1; @@ -129,6 +131,7 @@ static int hf_icmp_ext_checksum_bad = -1; static int hf_icmp_ext_length = -1; static int hf_icmp_ext_class = -1; static int hf_icmp_ext_c_type = -1; +static int hf_icmp_ext_data = -1; /* Interface information extension RFC 5837 */ static int hf_icmp_int_info_ifindex = -1; @@ -139,6 +142,9 @@ static int hf_icmp_int_info_index = -1; static int hf_icmp_int_info_afi = -1; static int hf_icmp_int_info_ipv4 = -1; static int hf_icmp_int_info_ipv6 = -1; +static int hf_icmp_int_info_ipunknown = -1; +static int hf_icmp_int_info_name_length = -1; +static int hf_icmp_int_info_name_string = -1; static int hf_icmp_int_info_role = -1; static int hf_icmp_int_info_reserved = -1; static gint ett_icmp_interface_info_object = -1; @@ -149,6 +155,7 @@ static int hf_icmp_mpls_label = -1; static int hf_icmp_mpls_exp = -1; static int hf_icmp_mpls_s = -1; static int hf_icmp_mpls_ttl = -1; +static int hf_icmp_mpls_data = -1; static gint ett_icmp = -1; static gint ett_icmp_mip = -1; @@ -342,8 +349,6 @@ static const value_string interface_role_str[] = { #define MPLS_STACK_ENTRY_C_TYPE 1 #define MPLS_EXTENDED_PAYLOAD_C_TYPE 1 -#define INET6_ADDRLEN 16 - static conversation_t *_find_or_create_conversation(packet_info * pinfo) { conversation_t *conv = NULL; @@ -475,8 +480,7 @@ dissect_mip_extensions(tvbuff_t * tvb, int offset, proto_tree * tree) default: /* data, if any */ if (length != 0) { - proto_tree_add_text(mip_tree, tvb, offset, - length, "Contents"); + proto_tree_add_item(mip_tree, hf_icmp_mip_content, tvb, offset, length - 4, ENC_NA); offset += length; } @@ -517,10 +521,7 @@ dissect_mpls_extended_payload_object(tvbuff_t * tvb, gint offset, /* This object contains some portion of the original packet that could not fit in the 128 bytes of the ICMP payload */ if (obj_trunc_length > 4) { - proto_tree_add_text(ext_object_tree, tvb, - offset, obj_trunc_length - 4, - "Data (%d bytes)", - obj_trunc_length - 4); + proto_tree_add_item(ext_object_tree, hf_icmp_ext_data, tvb, offset, obj_trunc_length - 4, ENC_NA); } break; default: @@ -614,10 +615,7 @@ dissect_mpls_stack_entry_object(tvbuff_t * tvb, gint offset, } if (offset < obj_end_offset) { - proto_tree_add_text(ext_object_tree, tvb, offset, - obj_end_offset - offset, - "%d junk bytes", - obj_end_offset - offset); + proto_tree_add_item(ext_object_tree, hf_icmp_mpls_data, tvb, offset, obj_end_offset - offset, ENC_NA); } break; @@ -647,7 +645,6 @@ dissect_interface_information_object(tvbuff_t * tvb, gint offset, guint8 ipaddr_flag; guint8 name_flag; guint16 afi; - struct e_in6_addr ipaddr_v6; guint8 int_name_length = 0; unknown_object = FALSE; @@ -704,7 +701,7 @@ dissect_interface_information_object(tvbuff_t * tvb, gint offset, /* * if afi = 1, IPv4 address, 2 bytes afi, 2 bytes rsvd, 4 bytes IP addr - * if afi = 2, IPv6 address, 2 bytes afi, 2 bytes rsvd, 6 bytes IP addr + * if afi = 2, IPv6 address, 2 bytes afi, 2 bytes rsvd, 16 bytes IP addr */ int_ipaddr_object_tree = proto_tree_add_subtree(ext_object_tree, tvb, offset, afi == 1 ? 8 : 10, ett_icmp_interface_ipaddr, NULL, @@ -713,30 +710,23 @@ dissect_interface_information_object(tvbuff_t * tvb, gint offset, proto_tree_add_uint(int_ipaddr_object_tree, hf_icmp_int_info_afi, tvb, offset, 2, afi); + offset += 2; - /* skip reserved */ - offset += 4; - if (afi == 1 && (obj_end_offset >= offset + 4)) { - proto_tree_add_ipv4(int_ipaddr_object_tree, - hf_icmp_int_info_ipv4, tvb, - offset, 4, tvb_get_ntohl(tvb, - offset)); - offset += 4; - } else if (afi == 2 - && (obj_end_offset >= offset + INET6_ADDRLEN)) { - tvb_get_ipv6(tvb, offset, &ipaddr_v6); - proto_tree_add_ipv6(int_ipaddr_object_tree, - hf_icmp_int_info_ipv6, tvb, - offset, INET6_ADDRLEN, - (guint8 *) & ipaddr_v6); - offset += INET6_ADDRLEN; - } else { - proto_tree_add_text(int_ipaddr_object_tree, tvb, - offset, - offset - obj_end_offset, - "Bad IP Address"); + proto_tree_add_item(int_ipaddr_object_tree, hf_icmp_reserved, tvb, offset, 2, ENC_NA); + offset += 2; + + switch(afi){ + case 1: /* IPv4 */ + proto_tree_add_item(int_ipaddr_object_tree, hf_icmp_int_info_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN); + break; + case 2: /* IPv6 */ + proto_tree_add_item(int_ipaddr_object_tree, hf_icmp_int_info_ipv6, tvb, offset, 16, ENC_NA); + break; + default: /* Unknown ?! */ + proto_tree_add_item(int_ipaddr_object_tree, hf_icmp_int_info_ipunknown, tvb, offset, offset - obj_end_offset, ENC_NA); return FALSE; } + } /* Interface Name Sub Object */ @@ -747,16 +737,10 @@ dissect_interface_information_object(tvbuff_t * tvb, gint offset, offset, int_name_length, ett_icmp_interface_name, NULL, "Interface Name Sub-Object"); - proto_tree_add_text(int_name_object_tree, tvb, - offset, 1, "Length: %u", - int_name_length); + proto_tree_add_item(int_name_object_tree, hf_icmp_int_info_name_length, tvb, offset, 1, ENC_BIG_ENDIAN); } if (obj_end_offset >= offset + 1 + int_name_length) { - - proto_tree_add_text(int_name_object_tree, tvb, - offset + 1, int_name_length, - "Interface Name: %s", - tvb_format_text(tvb, offset + 1, int_name_length)); + proto_tree_add_item(int_name_object_tree, hf_icmp_int_info_name_string, tvb, offset + 1, int_name_length, ENC_ASCII|ENC_NA); } } @@ -788,18 +772,15 @@ dissect_extensions(tvbuff_t * tvb, gint offset, proto_tree * tree) reported_length = tvb_reported_length_remaining(tvb, offset); - if (reported_length < 4 /* Common header */ ) { - proto_tree_add_text(tree, tvb, offset, - reported_length, - "ICMP Multi-Part Extensions (truncated)"); - return; - } - /* Add a tree for multi-part extensions RFC 4884 */ ti = proto_tree_add_none_format(tree, hf_icmp_ext, tvb, offset, reported_length, "ICMP Multi-Part Extensions"); + if (reported_length < 4 /* Common header */ ) { + return; + } + ext_tree = proto_item_add_subtree(ti, ett_icmp_ext); /* Version */ @@ -926,11 +907,7 @@ dissect_extensions(tvbuff_t * tvb, gint offset, proto_tree * tree) class_num, c_type); if (obj_trunc_length > 4) { - proto_tree_add_text(ext_object_tree, tvb, - offset, - obj_trunc_length - 4, - "Data (%d bytes)", - obj_trunc_length - 4); + proto_tree_add_item(ext_object_tree, hf_icmp_ext_data, tvb, offset, obj_trunc_length - 4, ENC_NA); } } @@ -1648,6 +1625,11 @@ void proto_register_icmp(void) BASE_NONE, NULL, 0x0, NULL, HFILL}}, + {&hf_icmp_reserved, + {"Reserved", "icmp.reserved", FT_BYTES, + BASE_NONE, NULL, 0x0, + NULL, HFILL}}, + {&hf_icmp_ident, {"Identifier (BE)", "icmp.ident", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, @@ -1821,6 +1803,11 @@ void proto_register_icmp(void) NULL, 0x0, NULL, HFILL}}, + {&hf_icmp_mip_content, + {"Content", "icmp.mip.content", FT_BYTES, BASE_NONE, + NULL, 0x0, + NULL, HFILL}}, + {&hf_icmp_ext, {"ICMP Extensions", "icmp.ext", FT_NONE, BASE_NONE, NULL, 0x0, @@ -1861,6 +1848,10 @@ void proto_register_icmp(void) 0x0, NULL, HFILL}}, + {&hf_icmp_ext_data, + {"Data", "icmp.ext.data", FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL}}, + {&hf_icmp_mpls_label, {"Label", "icmp.mpls.label", FT_UINT24, BASE_DEC, NULL, 0x00fffff0, @@ -1881,6 +1872,11 @@ void proto_register_icmp(void) NULL, 0x0, NULL, HFILL}}, + {&hf_icmp_mpls_data, + {"Data", "icmp.mpls.data", FT_BYTES, BASE_NONE , + NULL, 0x0, + NULL, HFILL}}, + {&hf_icmp_resp_in, {"Response frame", "icmp.resp_in", FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0, @@ -1975,7 +1971,19 @@ void proto_register_icmp(void) {&hf_icmp_int_info_ipv6, {"Source", "icmp.int_info.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, - NULL, HFILL}} + NULL, HFILL}}, + {&hf_icmp_int_info_ipunknown, + {"Source", "icmp.int_info.ipunknown", FT_BYTES, BASE_NONE, NULL, + 0x0, + NULL, HFILL}}, + {&hf_icmp_int_info_name_length, + {"Name Length", "icmp.int_info.name_length", FT_UINT8, BASE_DEC, NULL, + 0x0, + NULL, HFILL}}, + {&hf_icmp_int_info_name_string, + {"Name", "icmp.int_info.name", FT_STRING, BASE_NONE, NULL, + 0x0, + NULL, HFILL}}, }; static gint *ett[] = { |