* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#) $Header: /tcpdump/master/tcpdump/ethertype.h,v 1.22 2004-03-25 03:30:40 mcr Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/tcpdump/ethertype.h,v 1.23 2004-06-12 16:32:56 hannes Exp $ (LBL)
*/
/*
* <netinet/if_ether.h> if all it needs are ETHERTYPE_ values.
*/
+#ifndef ETHERTYPE_GRE_ISO
+#define ETHERTYPE_GRE_ISO 0x00FE /* not really an ethertype only used in GRE */
+#endif
#ifndef ETHERTYPE_PUP
#define ETHERTYPE_PUP 0x0200 /* PUP protocol */
#endif
*/
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.92 2004-04-30 16:42:15 mcr Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.93 2004-06-12 16:32:56 hannes Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
{ ETHERTYPE_JUMBO, "Jumbo" },
{ ETHERTYPE_LOOPBACK, "Loopback" },
{ ETHERTYPE_ISO, "OSI" },
+ { ETHERTYPE_GRE_ISO, "GRE-OSI" },
{ 0, NULL}
};
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-gre.c,v 1.24 2003-11-16 09:36:21 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-gre.c,v 1.25 2004-06-12 16:32:56 hannes Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
#include "extract.h"
#include "ip.h"
+#include "ethertype.h"
#define GRE_CP 0x8000 /* checksum present */
#define GRE_RP 0x4000 /* routing present */
#define GRE_sP 0x0800 /* source routing */
#define GRE_RECRS 0x0700 /* recursion count */
#define GRE_AP 0x0080 /* acknowledgment# present */
-#define GRE_VERS 0x0007 /* protocol version */
-
-#define GREPROTO_IP 0x0800 /* IP */
-#define GREPROTO_PPP 0x880b /* PPTP */
-#define GREPROTO_ISO 0x00fe /* OSI */
+#define GRE_VERS_MASK 0x0007 /* protocol version */
/* source route entry types */
#define GRESRE_IP 0x0800 /* IP */
printf("[|gre]");
return;
}
- vers = EXTRACT_16BITS(bp) & 7;
-
- if (vers == 0)
- gre_print_0(bp, len);
- else if (vers == 1)
- gre_print_1(bp, len);
- else
- printf("gre-unknown-version=%u", vers);
+ vers = EXTRACT_16BITS(bp) & GRE_VERS_MASK;
+ printf("GREv%u",vers);
+
+ switch(vers) {
+ case 0:
+ gre_print_0(bp, len);
+ break;
+ case 1:
+ gre_print_1(bp, len);
+ break;
+ default:
+ printf(" ERROR: unknown-version");
+ break;
+ }
return;
}
u_int16_t flags, prot;
flags = EXTRACT_16BITS(bp);
- if (vflag) {
+ if (vflag && flags) {
printf("[%s%s%s%s%s] ",
(flags & GRE_CP) ? "C" : "",
(flags & GRE_RP) ? "R" : "",
}
}
+ if (eflag)
+ printf(", proto %s (0x%04x)",
+ tok2str(ethertype_values,"unknown",prot),
+ prot);
+ printf(": ");
+
switch (prot) {
- case GREPROTO_IP:
+ case ETHERTYPE_IP:
ip_print(bp, len);
break;
- case GREPROTO_ISO:
+ case ETHERTYPE_IPV6:
+ ip6_print(bp, len);
+ break;
+ case ETHERTYPE_MPLS:
+ mpls_print(bp, len);
+ break;
+ case ETHERTYPE_IPX:
+ ipx_print(bp, len);
+ break;
+ case ETHERTYPE_ATALK:
+ atalk_print(bp, len);
+ break;
+ case ETHERTYPE_GRE_ISO:
isoclns_print(bp, len, len);
break;
default:
}
switch (prot) {
- case GREPROTO_PPP:
+ case ETHERTYPE_PPP:
printf("gre-ppp-payload");
break;
default: