diff options
author | Guy Harris <guy@alum.mit.edu> | 2002-06-07 10:11:41 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2002-06-07 10:11:41 +0000 |
commit | 4f9508837a66205c3132624297e724e6dbefd482 (patch) | |
tree | f5e00b306053bd03c54de27712976a9f4ded3e70 /packet-ieee80211.c | |
parent | 1b72ef68e6acc8800a2c0a5a719e48aaf5d54c79 (diff) | |
download | wireshark-4f9508837a66205c3132624297e724e6dbefd482.tar.gz wireshark-4f9508837a66205c3132624297e724e6dbefd482.tar.bz2 wireshark-4f9508837a66205c3132624297e724e6dbefd482.zip |
Add "show_fragment_seq_tree()", which is like "show_fragment_tree()",
but for stuff reassembled with "fragment_add_seq()" or
"fragment_add_seq_check()".
Add a "fragment tag" string to the "fragment_items", so that packets
with fragmentation errors can be properly flagged as having "Illegal
fragments" or "Illegal segments" depending on the term used with the
protocol in question.
Make all the dissectors that can use "show_fragment_tree()" or
"show_fragment_seq_tree()", and don't already use them, do so.
svn path=/trunk/; revision=5644
Diffstat (limited to 'packet-ieee80211.c')
-rw-r--r-- | packet-ieee80211.c | 80 |
1 files changed, 16 insertions, 64 deletions
diff --git a/packet-ieee80211.c b/packet-ieee80211.c index fa4a4efd44..9bff706334 100644 --- a/packet-ieee80211.c +++ b/packet-ieee80211.c @@ -3,7 +3,7 @@ * Copyright 2000, Axis Communications AB * Inquiries/bugreports should be sent to Johan.Jorgensen@axis.com * - * $Id: packet-ieee80211.c,v 1.63 2002/06/04 07:03:44 guy Exp $ + * $Id: packet-ieee80211.c,v 1.64 2002/06/07 10:11:39 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -363,6 +363,19 @@ static gint ett_fixed_parameters = -1; static gint ett_tagged_parameters = -1; static gint ett_wep_parameters = -1; +fragment_items frag_items = { + &ett_fragment, + &ett_fragments, + &hf_fragments, + &hf_fragment, + &hf_fragment_overlap, + &hf_fragment_overlap_conflict, + &hf_fragment_multiple_tails, + &hf_fragment_too_long_fragment, + &hf_fragment_error, + "fragments" +}; + static dissector_handle_t llc_handle; static dissector_handle_t ipx_handle; static dissector_handle_t data_handle; @@ -1081,67 +1094,6 @@ set_dst_addr_cols(packet_info *pinfo, const guint8 *addr, char *type) ether_to_str(addr), type); } -static void -show_fragments(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - fragment_data *fd_head) -{ - guint32 offset; - fragment_data *fd; - proto_tree *ft; - proto_item *fi; - - fi = proto_tree_add_item(tree, hf_fragments, tvb, 0, -1, FALSE); - ft = proto_item_add_subtree(fi, ett_fragments); - offset = 0; - for (fd = fd_head->next; fd != NULL; fd = fd->next){ - if (fd->flags & (FD_OVERLAP|FD_OVERLAPCONFLICT|FD_MULTIPLETAILS|FD_TOOLONGFRAGMENT) ) { - /* - * This fragment has some flags set; create a subtree for it and - * display the flags. - */ - proto_tree *fet = NULL; - proto_item *fei = NULL; - int hf; - - if (fd->flags & (FD_OVERLAPCONFLICT|FD_MULTIPLETAILS|FD_TOOLONGFRAGMENT) ) { - hf = hf_fragment_error; - } else { - hf = hf_fragment; - } - fei = proto_tree_add_none_format(ft, hf, tvb, offset, fd->len, - "Frame:%u payload:%u-%u", - fd->frame, offset, offset+fd->len-1); - fet = proto_item_add_subtree(fei, ett_fragment); - if (fd->flags&FD_OVERLAP) - proto_tree_add_boolean(fet, hf_fragment_overlap, tvb, 0, 0, TRUE); - if (fd->flags&FD_OVERLAPCONFLICT) { - proto_tree_add_boolean(fet, hf_fragment_overlap_conflict, tvb, 0, 0, - TRUE); - } - if (fd->flags&FD_MULTIPLETAILS) { - proto_tree_add_boolean(fet, hf_fragment_multiple_tails, tvb, 0, 0, - TRUE); - } - if (fd->flags&FD_TOOLONGFRAGMENT) { - proto_tree_add_boolean(fet, hf_fragment_too_long_fragment, tvb, 0, 0, - TRUE); - } - } else { - /* - * Nothing of interest for this fragment. - */ - proto_tree_add_none_format(ft, hf_fragment, tvb, offset, fd->len, - "Frame:%u payload:%u-%u", - fd->frame, offset, offset+fd->len-1); - } - offset += fd->len; - } - if (fd_head->flags & (FD_OVERLAPCONFLICT|FD_MULTIPLETAILS|FD_TOOLONGFRAGMENT) ) { - if (check_col(pinfo->cinfo, COL_INFO)) - col_set_str(pinfo->cinfo, COL_INFO, "[Illegal fragments]"); - } -} - /* ************************************************************************* */ /* Dissect 802.11 frame */ /* ************************************************************************* */ @@ -1667,8 +1619,8 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo, tvb_set_child_real_data_tvbuff(tvb, next_tvb); add_new_data_source(pinfo, next_tvb, "Reassembled 802.11"); - /* Show all fragments. */ - show_fragments(next_tvb, pinfo, hdr_tree, fd_head); + /* Show all fragments. */ + show_fragment_seq_tree(fd_head, &frag_items, hdr_tree, pinfo, next_tvb); } else { /* * Not fragmented, really. |