aboutsummaryrefslogtreecommitdiffstats
path: root/packet-ipv6.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2002-03-27 04:27:05 +0000
committerGuy Harris <guy@alum.mit.edu>2002-03-27 04:27:05 +0000
commit588c50944de744c40f127a52519e1e5aef8d83a5 (patch)
tree8924bfb6fae808780d2d8d36ffd53261749ec67b /packet-ipv6.c
parent31cf9563c236737b2edc397f0bd4369e2f30cc05 (diff)
In the protocol tree entries for lists of fragments/segments, make the
top-level item correspond to the reassembled data, and make the item for each fragment/segment correspond to the part of that reassembled data that came from that fragment/segment. svn path=/trunk/; revision=5025
Diffstat (limited to 'packet-ipv6.c')
-rw-r--r--packet-ipv6.c48
1 files changed, 24 insertions, 24 deletions
diff --git a/packet-ipv6.c b/packet-ipv6.c
index 2d23f17e69..7bd4c257e7 100644
--- a/packet-ipv6.c
+++ b/packet-ipv6.c
@@ -1,7 +1,7 @@
/* packet-ipv6.c
* Routines for IPv6 packet disassembly
*
- * $Id: packet-ipv6.c,v 1.78 2002/02/27 05:45:48 guy Exp $
+ * $Id: packet-ipv6.c,v 1.79 2002/03/27 04:27:03 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -823,10 +823,25 @@ again:
proto_tree *ft = NULL;
proto_item *fi = NULL;
- /* OK, we have the complete reassembled payload. */
+ /* OK, we have the complete reassembled payload.
+ Allocate a new tvbuff, referring to the reassembled payload. */
+ next_tvb = tvb_new_real_data(ipfd_head->data, ipfd_head->datalen,
+ ipfd_head->datalen);
+
+ /* Add the tvbuff to the list of tvbuffs to which the tvbuff we
+ were handed refers, so it'll get cleaned up when that tvbuff
+ is cleaned up. */
+ tvb_set_child_real_data_tvbuff(tvb, next_tvb);
+
+ /* Add the defragmented data to the data source list. */
+ add_new_data_source(pinfo->fd, next_tvb, "Reassembled IPv6");
+
+ /* It's not fragmented. */
+ pinfo->fragmented = FALSE;
+
/* show all fragments */
fi = proto_tree_add_item(ipv6_tree, hf_ipv6_fragments,
- tvb, 0, 0, FALSE);
+ next_tvb, 0, -1, FALSE);
ft = proto_item_add_subtree(fi, ett_ipv6_fragments);
for (ipfd = ipfd_head->next; ipfd; ipfd = ipfd->next){
if (ipfd->flags & (FD_OVERLAP|FD_OVERLAPCONFLICT
@@ -845,7 +860,7 @@ again:
hf = hf_ipv6_fragment;
}
fei = proto_tree_add_none_format(ft, hf,
- tvb, 0, 0,
+ next_tvb, ipfd->offset, ipfd->len,
"Frame:%u payload:%u-%u",
ipfd->frame,
ipfd->offset,
@@ -854,28 +869,28 @@ again:
fet = proto_item_add_subtree(fei, ett_ipv6_fragment);
if (ipfd->flags&FD_OVERLAP) {
proto_tree_add_boolean(fet,
- hf_ipv6_fragment_overlap, tvb, 0, 0,
+ hf_ipv6_fragment_overlap, next_tvb, 0, 0,
TRUE);
}
if (ipfd->flags&FD_OVERLAPCONFLICT) {
proto_tree_add_boolean(fet,
- hf_ipv6_fragment_overlap_conflict, tvb, 0, 0,
+ hf_ipv6_fragment_overlap_conflict, next_tvb, 0, 0,
TRUE);
}
if (ipfd->flags&FD_MULTIPLETAILS) {
proto_tree_add_boolean(fet,
- hf_ipv6_fragment_multiple_tails, tvb, 0, 0,
+ hf_ipv6_fragment_multiple_tails, next_tvb, 0, 0,
TRUE);
}
if (ipfd->flags&FD_TOOLONGFRAGMENT) {
proto_tree_add_boolean(fet,
- hf_ipv6_fragment_too_long_fragment, tvb, 0, 0,
+ hf_ipv6_fragment_too_long_fragment, next_tvb, 0, 0,
TRUE);
}
} else {
/* nothing of interest for this fragment */
proto_tree_add_none_format(ft, hf_ipv6_fragment,
- tvb, 0, 0,
+ next_tvb, ipfd->offset, ipfd->len,
"Frame:%u payload:%u-%u",
ipfd->frame,
ipfd->offset,
@@ -890,21 +905,6 @@ again:
update_col_info = FALSE;
}
}
-
- /* Allocate a new tvbuff, referring to the reassembled payload. */
- next_tvb = tvb_new_real_data(ipfd_head->data, ipfd_head->datalen,
- ipfd_head->datalen);
-
- /* Add the tvbuff to the list of tvbuffs to which the tvbuff we
- were handed refers, so it'll get cleaned up when that tvbuff
- is cleaned up. */
- tvb_set_child_real_data_tvbuff(tvb, next_tvb);
-
- /* Add the defragmented data to the data source list. */
- add_new_data_source(pinfo->fd, next_tvb, "Reassembled IPv6");
-
- /* It's not fragmented. */
- pinfo->fragmented = FALSE;
} else {
/* We don't have the complete reassembled payload. */
next_tvb = NULL;