Ethereal-dev: Re: [ethereal-dev] Possible bug in packet-ppp.c
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Gilbert Ramirez <gram@xxxxxxxxxx>
Date: Mon, 27 Mar 2000 12:12:34 -0600
On Mon, Mar 27, 2000 at 04:49:52AM -0600, Paul Ionescu wrote:
>
>
> I tried to spy a PPTP connection between a linux and a W2K. (The capture
> is attached to email)
> I think that maybe there is a bug somwhere because the ppp packed is not
> dissected correctly.
> There should be a valid PPP/LCP packet, but instead is reported as
> unknown PPP.
> The same capture dissected with Microsoft Netmon 2.0 reports unknown ppp
> too, but after that it shows the LCP frame.
>
> - pptp.cap
I have committed the change to fix this problem. Attached is a patch against
the current CVS tree.
I changed dissect_ppp() to accept an offset. I change the GRE code to
call dissect_ppp() instead of dissect_payload_ppp().
I left the PPPoE dissector as it is, calling dissect_payload_ppp(). If someone
has some traces of PPPoE, perhaps they can fiddle with the code to see
if its better to call dissect_ppp() now that it takes an offset. The current
code is this:
/* dissect_ppp is apparently done as a 'top level' dissector,
* so this doesn't work:
* dissect_ppp(pd,offset+6,fd,tree);
* Im gonna try fudging it.
*/
dissect_payload_ppp(pd,offset+6,fd,tree);
--gilbert
? VRU.CAP.gz
? netmon.txt.gz
Index: packet-ascend.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet-ascend.c,v
retrieving revision 1.9
diff -u -r1.9 packet-ascend.c
--- packet-ascend.c 2000/02/15 21:01:58 1.9
+++ packet-ascend.c 2000/03/27 17:52:30
@@ -93,7 +93,7 @@
switch (fd->pseudo_header.ascend.type) {
case ASCEND_PFX_WDS_X:
case ASCEND_PFX_WDS_R:
- dissect_ppp(pd, fd, tree);
+ dissect_ppp(pd, 0, fd, tree);
break;
case ASCEND_PFX_WDD:
dissect_eth(pd, 0, fd, tree);
Index: packet-gre.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet-gre.c,v
retrieving revision 1.16
diff -u -r1.16 packet-gre.c
--- packet-gre.c 2000/03/12 04:47:38 1.16
+++ packet-gre.c 2000/03/27 17:52:30
@@ -202,7 +202,7 @@
switch (type) {
case GRE_PPP:
- dissect_payload_ppp(pd, offset, fd, tree);
+ dissect_ppp(pd, offset, fd, tree);
break;
case GRE_IP:
dissect_ip(pd, offset, fd, tree);
Index: packet-null.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet-null.c,v
retrieving revision 1.19
diff -u -r1.19 packet-null.c
--- packet-null.c 2000/02/15 21:02:44 1.19
+++ packet-null.c 2000/03/27 17:52:30
@@ -232,7 +232,7 @@
/*
* Hand it to PPP.
*/
- dissect_ppp(pd, fd, tree);
+ dissect_ppp(pd, 0, fd, tree);
} else {
/*
* Treat it as a normal DLT_NULL header.
Index: packet-ppp.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet-ppp.c,v
retrieving revision 1.29
diff -u -r1.29 packet-ppp.c
--- packet-ppp.c 2000/03/12 04:47:48 1.29
+++ packet-ppp.c 2000/03/27 17:52:30
@@ -1131,14 +1131,14 @@
}
void
-dissect_ppp( const u_char *pd, frame_data *fd, proto_tree *tree ) {
+dissect_ppp( const u_char *pd, int offset, frame_data *fd, proto_tree *tree ) {
e_ppphdr ph;
proto_item *ti;
proto_tree *fh_tree = NULL;
- ph.ppp_addr = pd[0];
- ph.ppp_ctl = pd[1];
- ph.ppp_prot = pntohs(&pd[2]);
+ ph.ppp_addr = pd[offset+0];
+ ph.ppp_ctl = pd[offset+1];
+ ph.ppp_prot = pntohs(&pd[offset+2]);
/* load the top pane info. This should be overwritten by
the next protocol in the stack */
@@ -1159,7 +1159,7 @@
proto_tree_add_text(fh_tree, 1, 1, "Control: %02x", ph.ppp_ctl);
}
- if (!dissect_ppp_stuff(pd, 2, fd, tree, fh_tree)) {
+ if (!dissect_ppp_stuff(pd, offset+2, fd, tree, fh_tree)) {
if (check_col(fd, COL_PROTOCOL))
col_add_fstr(fd, COL_PROTOCOL, "0x%04x", ph.ppp_prot);
}
Index: packet-ppp.h
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet-ppp.h,v
retrieving revision 1.1
diff -u -r1.1 packet-ppp.h
--- packet-ppp.h 2000/02/15 21:02:53 1.1
+++ packet-ppp.h 2000/03/27 17:52:30
@@ -23,5 +23,5 @@
*/
void capture_ppp(const u_char *, packet_counts *);
-void dissect_ppp(const u_char *, frame_data *, proto_tree *);
+void dissect_ppp(const u_char *, int, frame_data *, proto_tree *);
void dissect_payload_ppp(const u_char *, int, frame_data *, proto_tree *);
Index: packet.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet.c,v
retrieving revision 1.68
diff -u -r1.68 packet.c
--- packet.c 2000/03/26 07:59:47 1.68
+++ packet.c 2000/03/27 17:52:31
@@ -1129,7 +1129,7 @@
dissect_null(pd, fd, tree);
break;
case WTAP_ENCAP_PPP :
- dissect_ppp(pd, fd, tree);
+ dissect_ppp(pd, 0, fd, tree);
break;
case WTAP_ENCAP_LAPB :
dissect_lapb(pd, fd, tree);
- Follow-Ups:
- Re: [ethereal-dev] Possible bug in packet-ppp.c
- From: Greg Kilfoyle
- Re: [ethereal-dev] Possible bug in packet-ppp.c
- Prev by Date: Re: [ethereal-dev] Possible bug in packet-ppp.c
- Next by Date: Re: [ethereal-dev] hang on dumps with default tcpdump snaplen
- Previous by thread: Re: [ethereal-dev] Possible bug in packet-ppp.c
- Next by thread: Re: [ethereal-dev] Possible bug in packet-ppp.c
- Index(es):