diff options
author | fenner <fenner> | 2001-03-13 01:03:17 +0000 |
---|---|---|
committer | fenner <fenner> | 2001-03-13 01:03:17 +0000 |
commit | 13c623cda77c2215c1641c53edf6e2de1786f36b (patch) | |
tree | 006af60852a3f6a22eef6e7dd4b897a0003a4968 /print-gre.c | |
parent | 9298dc84c8b02a79fbd2f4680d370da0cc316ea5 (diff) | |
download | tcpdump-13c623cda77c2215c1641c53edf6e2de1786f36b.tar.gz |
Fix checksum and offset printing.
Diffstat (limited to 'print-gre.c')
-rw-r--r-- | print-gre.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/print-gre.c b/print-gre.c index 19c545b3..e5a9cbdb 100644 --- a/print-gre.c +++ b/print-gre.c @@ -24,7 +24,7 @@ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-gre.c,v 1.11 2001-03-12 00:24:55 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-gre.c,v 1.12 2001-03-13 01:03:17 fenner Exp $"; #endif #ifdef HAVE_CONFIG_H @@ -63,7 +63,8 @@ struct gre { #define GRE_sP 0x0800 /* strict source route present */ #define GRE_RECUR_MASK 0x0700 /* Recursion Control */ #define GRE_RECUR_SHIFT 8 -#define GRE_OP 0xc000 /* Offset Present */ + +#define GRE_COP (GRE_RP|GRE_CP) /* Checksum & Offset Present */ /* "Enhanced GRE" from RFC2637 - PPTP */ #define GRE_AP 0x0080 /* Ack present */ @@ -113,17 +114,27 @@ gre_print(const u_char *bp, u_int length) fputs("] ", stdout); } - if (flags & GRE_CP) { - TCHECK2(*cp, 4); - if (vflag > 1) - printf("C:%08x ", EXTRACT_32BITS(cp)); - cp += 4; /* skip checksum */ - } - if (flags & GRE_OP) { + if (flags & GRE_COP) { + int checksum, offset; + TCHECK2(*cp, 4); - if (vflag > 1) - printf("O:%08x ", EXTRACT_32BITS(cp)); - cp += 4; /* skip offset */ + checksum = EXTRACT_16BITS(cp); + offset = EXTRACT_16BITS(cp + 2); + + if (flags & GRE_CP) { + /* Checksum present */ + + /* todo: check checksum */ + if (vflag > 1) + printf("C:%04x ", checksum); + } + if (flags & GRE_RP) { + /* Offset present */ + + if (vflag > 1) + printf("O:%04x ", offset); + } + cp += 4; /* skip checksum and offset */ } if (flags & GRE_KP) { TCHECK2(*cp, 4); |