aboutsummaryrefslogtreecommitdiffstats
path: root/packet-ieee80211.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2002-06-07 10:11:41 +0000
committerGuy Harris <guy@alum.mit.edu>2002-06-07 10:11:41 +0000
commit4f9508837a66205c3132624297e724e6dbefd482 (patch)
treef5e00b306053bd03c54de27712976a9f4ded3e70 /packet-ieee80211.c
parent1b72ef68e6acc8800a2c0a5a719e48aaf5d54c79 (diff)
downloadwireshark-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.c80
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.