From 6513429730709ee279498d674b1a222361f4e51c Mon Sep 17 00:00:00 2001 From: gram Date: Thu, 25 May 2000 07:42:26 +0000 Subject: Convert dissect_ppp() and friends to use tvbuffs. (the ip_tcp_options stuff is still non-tvbuff until I convert ip and tcp). Add preliminary fix for Linux ISDN ippp devices (similar watch was posted to ethereal-users, but did not use tvbuffs). Change packet-raw.c to call capture_ppp()/dissect_ppp() in the case where the frame starts with FF:03. We had been calling capture_ip()/dissect_ip() at byte offset 4, but I think this is for historical reasons of packet-raw.c and packet-ip.c existing before packet-ppp.c. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@1998 f5534014-38df-0310-8fa8-9805f1628bb7 --- packet-raw.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) (limited to 'packet-raw.c') diff --git a/packet-raw.c b/packet-raw.c index 7730d27436..4e92c43890 100644 --- a/packet-raw.c +++ b/packet-raw.c @@ -1,7 +1,7 @@ /* packet-raw.c * Routines for raw packet disassembly * - * $Id: packet-raw.c,v 1.16 2000/05/19 21:47:37 gram Exp $ + * $Id: packet-raw.c,v 1.17 2000/05/25 07:42:25 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs @@ -36,6 +36,7 @@ #include "packet.h" #include "packet-raw.h" #include "packet-ip.h" +#include "packet-ppp.h" static gint ett_raw = -1; @@ -50,10 +51,17 @@ capture_raw( const u_char *pd, packet_counts *ld ) { /* Currently, the Linux 2.1.xxx PPP driver passes back some of the header * sometimes. This check should be removed when 2.2 is out. */ - if (pd[0] == 0xff && pd[1] == 0x03) - capture_ip(pd, 4, ld); - else + if (BYTES_ARE_IN_FRAME(0,2) && pd[0] == 0xff && pd[1] == 0x03) { + capture_ppp(pd, 0, ld); + } + /* The Linux ISDN driver sends a fake MAC address before the PPP header + * on its ippp interfaces. */ + else if (BYTES_ARE_IN_FRAME(0,8) && pd[6] == 0xff && pd[7] == 0x03) { + capture_ppp(pd, 6, ld); + } + else { capture_ip(pd, 0, ld); + } } void @@ -93,14 +101,22 @@ dissect_raw(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) * sometimes. This check should be removed when 2.2 is out. */ if (tvb_get_ntohs(tvb, 0) == 0xff03) { - next_tvb = tvb_new_subset(tvb, 4, -1, -1); - tvb_compat(next_tvb, &next_pd, &next_offset); + dissect_ppp(tvb, pinfo, tree); + return; + } + /* The Linux ISDN driver sends a fake MAC address before the PPP header + * on its ippp interfaces. */ + else if (tvb_get_ntohs(tvb, 6) == 0xff03) { + next_tvb = tvb_new_subset(tvb, 6, -1, -1); + dissect_ppp(next_tvb, pinfo, tree); + return; } else { tvb_compat(tvb, &next_pd, &next_offset); + dissect_ip(next_pd, next_offset, pinfo->fd, tree); + return; } - - dissect_ip(next_pd, next_offset, pinfo->fd, tree); + g_assert_not_reached(); } void -- cgit v1.2.3