Ethereal-dev: Re: [ethereal-dev] Regarding EIGRP dissector (patch included)

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Paul Ionescu <ipaul@xxxxxxxxx>
Date: Mon, 22 May 2000 12:23:27 +0300
Guy Harris wrote:

> If it's encapsulated in more than IP, then it should go into its own
> file.
>
> However, if all the protocols in which it's encapsulated support
> "dissector_add()"-style tables, it doesn't have to be global;
> unfortunately, IPX and AppleTalk currently don't support them, so, for
> now, it'd have to be global.

Ok. I will separate the eigrp code in the future.
For moment, I did a patch to support AppleTalk and IPX dissectors for EIGRP.

Also, I did made just a "packet-eigrp.h" to declare dissect_eigrp()
function.
Attached to the email are :
packet-eigrp.h file
a patch for AT and IPX eigrp
and a sample capture file of EIGRP Hello for IPX and AT.

You may commit it.

BTW. What command or option can I give to "cvs diff  some.files" to also
include in patch the new files which I created ?
Index: ethereal/packet-ipx.c
===================================================================
RCS file: /cvsroot/ethereal/packet-ipx.c,v
retrieving revision 1.58
diff -u -r1.58 packet-ipx.c
--- packet-ipx.c	2000/05/19 19:48:01	1.58
+++ packet-ipx.c	2000/05/22 09:11:10
@@ -41,6 +41,7 @@
 #include "packet-ipx.h"
 #include "packet-nbipx.h"
 #include "packet-ncp.h"
+#include "packet-eigrp.h"
 #include "resolv.h"
 
 #include "packet-snmp.h"
@@ -111,6 +112,9 @@
 static void
 dissect_ipxmsg(const u_char *pd, int offset, frame_data *fd, proto_tree *tree);
 
+static void
+dissect_eigrp_ipx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree);
+
 typedef	void	(dissect_func_t)(const u_char *, int, frame_data *, proto_tree *);
 
 #define UDP_PORT_IPX    213		/* RFC 1234 */
@@ -154,6 +158,7 @@
 #define IPX_SOCKET_ATTACHMATE_GW	0x055d
 #define IPX_SOCKET_IPX_MESSAGE		0x4001
 #define IPX_SOCKET_ADSM                 0x8522 /* www.tivoli.com */
+#define IPX_SOCKET_EIGRP                0x85be /* cisco ipx eigrp */
 #define IPX_SOCKET_WIDE_AREA_ROUTER	0x9001
 #define IPX_SOCKET_SNMP_AGENT           0x900F /* RFC 1906 */
 #define IPX_SOCKET_SNMP_SINK            0x9010 /* RFC 1906 */
@@ -190,6 +195,7 @@
 	{ IPX_SOCKET_TCP_TUNNEL, NULL, "TCP Tunnel" },
 	{ IPX_SOCKET_TCP_TUNNEL, NULL, "TCP Tunnel" },
 	{ IPX_SOCKET_ADSM, NULL, "ADSM" },
+	{ IPX_SOCKET_EIGRP, dissect_eigrp_ipx, "Cisco EIGRP for IPX" },
 	{ IPX_SOCKET_WIDE_AREA_ROUTER, NULL, "Wide Area Router" },
 	{ 0x0000,				NULL,
 				NULL }
@@ -819,6 +825,11 @@
 	}
 }
 
+static void
+dissect_eigrp_ipx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
+{                                                                                                 
+	dissect_eigrp(pd,offset,fd,tree);                                                                 
+}                                                                                                 
 
 void
 proto_register_ipx(void)
Index: ethereal/packet-ip.c
===================================================================
RCS file: /cvsroot/ethereal/packet-ip.c,v
retrieving revision 1.85
diff -u -r1.85 packet-ip.c
--- packet-ip.c	2000/05/11 08:15:11	1.85
+++ packet-ip.c	2000/05/22 09:11:12
@@ -55,8 +55,8 @@
 #include "llcsaps.h"
 #include "packet-ip.h"
 #include "packet-ipsec.h"
+#include "packet-eigrp.h"
 
-static void dissect_eigrp(const u_char *, int, frame_data *, proto_tree *);
 static void dissect_icmp(const u_char *, int, frame_data *, proto_tree *);
 static void dissect_igmp(const u_char *, int, frame_data *, proto_tree *);
 
@@ -1518,7 +1518,7 @@
 	{ 0,				NULL }    
 };
 
-static void
+void
 dissect_eigrp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
   e_eigrp     ih;
   proto_tree *eigrp_tree;
Index: ethereal/packet-atalk.c
===================================================================
RCS file: /cvsroot/ethereal/packet-atalk.c,v
retrieving revision 1.34
diff -u -r1.34 packet-atalk.c
--- packet-atalk.c	2000/05/11 08:14:55	1.34
+++ packet-atalk.c	2000/05/22 09:11:13
@@ -35,6 +35,7 @@
 #include <glib.h>
 #include "packet.h"
 #include "packet-atalk.h"
+#include "packet-eigrp.h"
 #include "etypes.h"
 #include "ppptypes.h"
 
@@ -104,6 +105,7 @@
 #define DDP_RTMPREQ	0x05
 #define DDP_ZIP		0x06
 #define DDP_ADSP	0x07
+#define DDP_EIGRP	0x58
 #define DDP_HEADER_SIZE 13
 
 gchar *
@@ -132,6 +134,7 @@
   {DDP_RTMPREQ, "AppleTalk Routing Table request"},
   {DDP_ZIP, "AppleTalk Zone Information Protocol packet"},
   {DDP_ADSP, "AppleTalk Data Stream Protocol"},
+  {DDP_EIGRP, "Cisco EIGRP for AppleTalk"},
   {0, NULL}
 };
 
@@ -421,6 +424,9 @@
   offset += DDP_HEADER_SIZE;
 
   switch ( ddp.type ) {
+    case DDP_EIGRP:
+      dissect_eigrp(pd, offset, fd, tree);
+      break;
     case DDP_NBP:
       dissect_nbp(pd, offset, fd, tree);
       break;
/* packet-eigrp.h
 *
 * $Id: packet-eigrp.h,v 1.1 2000/02/15 21:02:05 gram Exp $
 *
 * Ethereal - Network traffic analyzer
 * By Gerald Combs <gerald@xxxxxxxx>
 * Copyright 1998 Gerald Combs
 *
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */


void dissect_eigrp(const u_char *, int, frame_data *, proto_tree *);

Attachment: eigrp.pcap
Description: Binary data