Ethereal-dev: [ethereal-dev] IPv6 fragment patch
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Jochen Friedrich <jochen+ethereal@xxxxxxxx>
Date: Sun, 19 Mar 2000 10:13:56 +0100 (CET)
Hi there,
this patch fixes dissecting IPv6 fragments. Fragment offsets are
calculated correctly and no protocol dissection is attempted for fragments
with offset > 0.
Cheers,
Jochen
Index: packet-ipv6.c
===================================================================
RCS file: /cvsroot/ethereal/packet-ipv6.c,v
retrieving revision 1.30
diff -c -r1.30 packet-ipv6.c
*** packet-ipv6.c 2000/03/14 06:03:22 1.30
--- packet-ipv6.c 2000/03/19 09:07:49
***************
*** 137,154 ****
}
static int
! dissect_frag6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct ip6_frag frag;
int len;
memcpy(&frag, (void *) &pd[offset], sizeof(frag));
len = sizeof(frag);
!
if (check_col(fd, COL_INFO)) {
col_add_fstr(fd, COL_INFO,
"IPv6 fragment (nxt=%s (0x%02x) off=0x%04x id=0x%x)",
ipprotostr(frag.ip6f_nxt), frag.ip6f_nxt,
! (frag.ip6f_offlg >> 3) & 0x1fff, frag.ip6f_ident);
}
return len;
}
--- 137,155 ----
}
static int
! dissect_frag6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
! int *fragstart) {
struct ip6_frag frag;
int len;
memcpy(&frag, (void *) &pd[offset], sizeof(frag));
len = sizeof(frag);
! *fragstart = ntohs(frag.ip6f_offlg) & 0xfff8;
if (check_col(fd, COL_INFO)) {
col_add_fstr(fd, COL_INFO,
"IPv6 fragment (nxt=%s (0x%02x) off=0x%04x id=0x%x)",
ipprotostr(frag.ip6f_nxt), frag.ip6f_nxt,
! *fragstart, frag.ip6f_ident);
}
return len;
}
***************
*** 254,259 ****
--- 255,261 ----
guint8 nxt;
int advance;
int poffset;
+ int frag;
struct ip6_hdr ipv6;
***************
*** 332,337 ****
--- 334,340 ----
/* start of the new header (could be a extension header) */
nxt = pd[poffset = offset + offsetof(struct ip6_hdr, ip6_nxt)];
offset += sizeof(struct ip6_hdr);
+ frag = 0;
again:
switch (nxt) {
***************
*** 349,355 ****
offset += advance;
goto again;
case IP_PROTO_FRAGMENT:
! advance = dissect_frag6(pd, offset, fd, tree);
nxt = pd[poffset = offset];
offset += advance;
goto again;
--- 352,358 ----
offset += advance;
goto again;
case IP_PROTO_FRAGMENT:
! advance = dissect_frag6(pd, offset, fd, tree, &frag);
nxt = pd[poffset = offset];
offset += advance;
goto again;
***************
*** 357,363 ****
#ifdef TEST_FINALHDR
proto_tree_add_item_hidden(ipv6_tree, hf_ipv6_final, poffset, 1, nxt);
#endif
! dissect_icmpv6(pd, offset, fd, tree);
break;
case IP_PROTO_NONE:
#ifdef TEST_FINALHDR
--- 360,369 ----
#ifdef TEST_FINALHDR
proto_tree_add_item_hidden(ipv6_tree, hf_ipv6_final, poffset, 1, nxt);
#endif
! if (!frag)
! dissect_icmpv6(pd, offset, fd, tree);
! else
! dissect_data(pd, offset, fd, tree);
break;
case IP_PROTO_NONE:
#ifdef TEST_FINALHDR
***************
*** 384,396 ****
#ifdef TEST_FINALHDR
proto_tree_add_item_hidden(ipv6_tree, hf_ipv6_final, poffset, 1, nxt);
#endif
! dissect_tcp(pd, offset, fd, tree);
break;
case IP_PROTO_UDP:
#ifdef TEST_FINALHDR
proto_tree_add_item_hidden(ipv6_tree, hf_ipv6_final, poffset, 1, nxt);
#endif
! dissect_udp(pd, offset, fd, tree);
break;
case IP_PROTO_PIM:
#ifdef TEST_FINALHDR
--- 390,408 ----
#ifdef TEST_FINALHDR
proto_tree_add_item_hidden(ipv6_tree, hf_ipv6_final, poffset, 1, nxt);
#endif
! if (!frag)
! dissect_tcp(pd, offset, fd, tree);
! else
! dissect_data(pd, offset, fd, tree);
break;
case IP_PROTO_UDP:
#ifdef TEST_FINALHDR
proto_tree_add_item_hidden(ipv6_tree, hf_ipv6_final, poffset, 1, nxt);
#endif
! if (!frag)
! dissect_udp(pd, offset, fd, tree);
! else
! dissect_data(pd, offset, fd, tree);
break;
case IP_PROTO_PIM:
#ifdef TEST_FINALHDR
--
----------------------------------------------------------------------
Jochen Friedrich NWE Network-Engineering GmbH
Linux-Systemhaus
Wingertstr. 70/1
6-bone: JF3-6BONE D-68809 Neulussheim
e-mail: jochen@xxxxxx voice: +49 (0) 6205 3920-59
web: http://www.nwe.de fax: +49 (0) 6205 3920-58
----------------------------------------------------------------------
- Follow-Ups:
- Re: [ethereal-dev] IPv6 fragment patch
- From: Guy Harris
- Re: [ethereal-dev] IPv6 fragment patch
- Prev by Date: Re: [ethereal-dev] [mcr@xxxxxxxxxxxxxxxxxxxxxx: [tcpdump-workers] further notes on memoryleak]
- Next by Date: Re: [ethereal-dev] Reassembling packets
- Previous by thread: Re: [ethereal-dev] [mcr@xxxxxxxxxxxxxxxxxxxxxx: [tcpdump-workers] further notes on memoryleak]
- Next by thread: Re: [ethereal-dev] IPv6 fragment patch
- Index(es):





