diff options
author | guy <guy@f5534014-38df-0310-8fa8-9805f1628bb7> | 2003-05-28 22:39:14 +0000 |
---|---|---|
committer | guy <guy@f5534014-38df-0310-8fa8-9805f1628bb7> | 2003-05-28 22:39:14 +0000 |
commit | 3b37c534fb50edaaf75ad5c2c5f833ecf4e19388 (patch) | |
tree | d5221de0725ab5d5cd23c93c09fece8e193e7f6e /packet-isis-lsp.c | |
parent | 01bec4ddc68884b1fa04b1409d9165679e87e976 (diff) |
From Laurent Rabret: show checksum status in a sub-item for the checksum
field, and add a "bad checksum" filterable field.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@7757 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'packet-isis-lsp.c')
-rw-r--r-- | packet-isis-lsp.c | 77 |
1 files changed, 42 insertions, 35 deletions
diff --git a/packet-isis-lsp.c b/packet-isis-lsp.c index b75ddf9867..8ae25302dc 100644 --- a/packet-isis-lsp.c +++ b/packet-isis-lsp.c @@ -1,7 +1,7 @@ /* packet-isis-lsp.c * Routines for decoding isis lsp packets and their CLVs * - * $Id: packet-isis-lsp.c,v 1.43 2003/05/15 06:35:02 guy Exp $ + * $Id: packet-isis-lsp.c,v 1.44 2003/05/28 22:39:14 guy Exp $ * Stuart Stanley <stuarts@mxmail.net> * * Ethereal - Network traffic analyzer @@ -45,6 +45,7 @@ static int hf_isis_lsp_pdu_length = -1; static int hf_isis_lsp_remaining_life = -1; static int hf_isis_lsp_sequence_number = -1; static int hf_isis_lsp_checksum = -1; +static int hf_isis_lsp_checksum_bad = -1; static int hf_isis_lsp_clv_ipv4_int_addr = -1; static int hf_isis_lsp_clv_ipv6_int_addr = -1; static int hf_isis_lsp_clv_te_router_id = -1; @@ -55,15 +56,14 @@ static int hf_isis_lsp_hippity = -1; static int hf_isis_lsp_is_type = -1; static gint ett_isis_lsp = -1; -static gint ett_isis_lsp_checksum = -1; static gint ett_isis_lsp_info = -1; static gint ett_isis_lsp_att = -1; static gint ett_isis_lsp_clv_area_addr = -1; static gint ett_isis_lsp_clv_is_neighbors = -1; static gint ett_isis_lsp_clv_ext_is_reachability = -1; /* CLV 22 */ - static gint ett_isis_lsp_part_of_clv_ext_is_reachability = -1; - static gint ett_isis_lsp_subclv_admin_group = -1; - static gint ett_isis_lsp_subclv_unrsv_bw = -1; +static gint ett_isis_lsp_part_of_clv_ext_is_reachability = -1; +static gint ett_isis_lsp_subclv_admin_group = -1; +static gint ett_isis_lsp_subclv_unrsv_bw = -1; static gint ett_isis_lsp_clv_unknown = -1; static gint ett_isis_lsp_clv_partition_dis = -1; static gint ett_isis_lsp_clv_prefix_neighbors = -1; @@ -76,9 +76,9 @@ static gint ett_isis_lsp_clv_ipv6_int_addr = -1; /* CLV 232 */ static gint ett_isis_lsp_clv_ip_reachability = -1; static gint ett_isis_lsp_clv_ip_reach_subclv = -1; static gint ett_isis_lsp_clv_ext_ip_reachability = -1; /* CLV 135 */ - static gint ett_isis_lsp_part_of_clv_ext_ip_reachability = -1; +static gint ett_isis_lsp_part_of_clv_ext_ip_reachability = -1; static gint ett_isis_lsp_clv_ipv6_reachability = -1; /* CLV 236 */ - static gint ett_isis_lsp_part_of_clv_ipv6_reachability = -1; +static gint ett_isis_lsp_part_of_clv_ipv6_reachability = -1; static gint ett_isis_lsp_clv_mt = -1; static gint ett_isis_lsp_clv_mt_is = -1; static gint ett_isis_lsp_part_of_clv_mt_is = -1; @@ -1763,8 +1763,8 @@ void isis_dissect_isis_lsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int lsp_type, int header_length, int id_length) { - proto_item *ti, *to, *ta, *tc; - proto_tree *lsp_tree = NULL, *info_tree, *att_tree, *check_tree; + proto_item *ti, *to, *ta; + proto_tree *lsp_tree = NULL, *info_tree, *att_tree; guint16 pdu_length, checksum, cacl_checksum=0; guint8 lsp_info, lsp_att; int len, offset_checksum; @@ -1815,31 +1815,35 @@ isis_dissect_isis_lsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int o offset += 4; if (tree) { - checksum = tvb_get_ntohs(tvb, offset); - tc = proto_tree_add_uint(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); - check_tree = proto_item_add_subtree(tc, ett_isis_lsp_checksum); - - switch (check_and_get_checksum(tvb, offset_checksum, pdu_length-12, checksum, offset, &cacl_checksum)) { - case NO_CKSUM : - proto_tree_add_text(check_tree, tvb, offset, 2, - "Checksum control disabled"); - break; - case DATA_MISSING : - isis_dissect_unknown(tvb, tree, offset, - "packet length %d went beyond packet", - tvb_length_remaining(tvb, offset_checksum)); - break; - case CKSUM_NOT_OK : - proto_tree_add_text(check_tree, tvb, offset, 2, - "Checksum error: 0x%04x expected", cacl_checksum); - break; - case CKSUM_OK : - proto_tree_add_text(check_tree, tvb, offset, 2, - "Checksum OK"); - break; - default : - g_message("'check_and_get_checksum' returned an invalid value"); - } + checksum = tvb_get_ntohs(tvb, offset); + switch (check_and_get_checksum(tvb, offset_checksum, pdu_length-12, checksum, offset, &cacl_checksum)) + { + + case NO_CKSUM : + proto_tree_add_uint_format(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, checksum, + "Checksum: 0x%04x (unused)", checksum); + break; + case DATA_MISSING : + isis_dissect_unknown(tvb, tree, offset, + "packet length %d went beyond packet", + tvb_length_remaining(tvb, offset_checksum)); + break; + case CKSUM_NOT_OK : + proto_tree_add_uint_format(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, checksum, + "Checksum: 0x%04x (incorrect, should be 0x%04x)", + checksum, cacl_checksum); + proto_tree_add_boolean_hidden(lsp_tree, hf_isis_lsp_checksum_bad, + tvb, offset, 2, TRUE); + break; + case CKSUM_OK : + proto_tree_add_uint_format(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, checksum, + "Checksum: 0x%04x (correct)", checksum); + proto_tree_add_boolean_hidden(lsp_tree, hf_isis_lsp_checksum_bad, + tvb, offset, 2, FALSE); + break; + default : + g_message("'check_and_get_checksum' returned an invalid value"); + } } offset += 2; @@ -1926,6 +1930,10 @@ isis_register_lsp(int proto_isis) { { &hf_isis_lsp_checksum, { "Checksum", "isis.lsp.checksum",FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }}, + + { &hf_isis_lsp_checksum_bad, + { "Bad Checksum", "isis.lsp.checksum_bad", FT_BOOLEAN, BASE_NONE, + NULL, 0, "Bad IS-IS LSP Checksum", HFILL }}, { &hf_isis_lsp_clv_ipv4_int_addr, { "IPv4 interface address", "isis.lsp.clv_ipv4_int_addr", FT_IPv4, @@ -1965,7 +1973,6 @@ isis_register_lsp(int proto_isis) { }; static gint *ett[] = { &ett_isis_lsp, - &ett_isis_lsp_checksum, &ett_isis_lsp_info, &ett_isis_lsp_att, &ett_isis_lsp_clv_area_addr, |