X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/561dc67df4feed69dcf7effd1f34cedb34510eeb..5663cdab5ec8730ade9938c1ace64a4859d9ef7b:/print-timed.c diff --git a/print-timed.c b/print-timed.c index f137a2ae..cbeaf00d 100644 --- a/print-timed.c +++ b/print-timed.c @@ -19,32 +19,82 @@ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ -#ifndef lint -static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-timed.c,v 1.3 2001-05-17 18:33:23 fenner Exp $"; -#endif - #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include -#include -#include +#include + #include #include -#include "timed.h" #include "interface.h" +#include "extract.h" + +/* + * Time Synchronization Protocol + */ + +struct tsp_timeval { + u_int32_t tv_sec; + u_int32_t tv_usec; +}; + +struct tsp { + u_int8_t tsp_type; + u_int8_t tsp_vers; + u_int16_t tsp_seq; + union { + struct tsp_timeval tspu_time; + int8_t tspu_hopcnt; + } tsp_u; + int8_t tsp_name[256]; +}; + +#define tsp_time tsp_u.tspu_time +#define tsp_hopcnt tsp_u.tspu_hopcnt + +/* + * Command types. + */ +#define TSP_ANY 0 /* match any types */ +#define TSP_ADJTIME 1 /* send adjtime */ +#define TSP_ACK 2 /* generic acknowledgement */ +#define TSP_MASTERREQ 3 /* ask for master's name */ +#define TSP_MASTERACK 4 /* acknowledge master request */ +#define TSP_SETTIME 5 /* send network time */ +#define TSP_MASTERUP 6 /* inform slaves that master is up */ +#define TSP_SLAVEUP 7 /* slave is up but not polled */ +#define TSP_ELECTION 8 /* advance candidature for master */ +#define TSP_ACCEPT 9 /* support candidature of master */ +#define TSP_REFUSE 10 /* reject candidature of master */ +#define TSP_CONFLICT 11 /* two or more masters present */ +#define TSP_RESOLVE 12 /* masters' conflict resolution */ +#define TSP_QUIT 13 /* reject candidature if master is up */ +#define TSP_DATE 14 /* reset the time (date command) */ +#define TSP_DATEREQ 15 /* remote request to reset the time */ +#define TSP_DATEACK 16 /* acknowledge time setting */ +#define TSP_TRACEON 17 /* turn tracing on */ +#define TSP_TRACEOFF 18 /* turn tracing off */ +#define TSP_MSITE 19 /* find out master's site */ +#define TSP_MSITEREQ 20 /* remote master's site request */ +#define TSP_TEST 21 /* for testing election algo */ +#define TSP_SETDATE 22 /* New from date command */ +#define TSP_SETDATEREQ 23 /* New remote for above */ +#define TSP_LOOP 24 /* loop detection packet */ + +#define TSPTYPENUMBER 25 + +static const char tstr[] = "[|timed]"; -static char *tsptype[TSPTYPENUMBER] = +static const char *tsptype[TSPTYPENUMBER] = { "ANY", "ADJTIME", "ACK", "MASTERREQ", "MASTERACK", "SETTIME", "MASTERUP", "SLAVEUP", "ELECTION", "ACCEPT", "REFUSE", "CONFLICT", "RESOLVE", "QUIT", "DATE", "DATEREQ", "DATEACK", "TRACEON", "TRACEOFF", "MSITE", "MSITEREQ", "TEST", "SETDATE", "SETDATEREQ", "LOOP" }; void -timed_print(register const u_char *bp, u_int length) +timed_print(register const u_char *bp) { #define endof(x) ((u_char *)&(x) + sizeof (x)) struct tsp *tsp = (struct tsp *)bp; @@ -52,7 +102,7 @@ timed_print(register const u_char *bp, u_int length) const u_char *end; if (endof(tsp->tsp_type) > snapend) { - fputs("[|timed]", stdout); + printf("%s", tstr); return; } if (tsp->tsp_type < TSPTYPENUMBER) @@ -61,20 +111,20 @@ timed_print(register const u_char *bp, u_int length) printf("(tsp_type %#x)", tsp->tsp_type); if (endof(tsp->tsp_vers) > snapend) { - fputs(" [|timed]", stdout); + printf(" %s", tstr); return; } printf(" vers %d", tsp->tsp_vers); if (endof(tsp->tsp_seq) > snapend) { - fputs(" [|timed]", stdout); + printf(" %s", tstr); return; } printf(" seq %d", tsp->tsp_seq); if (tsp->tsp_type == TSP_LOOP) { if (endof(tsp->tsp_hopcnt) > snapend) { - fputs(" [|timed]", stdout); + printf(" %s", tstr); return; } printf(" hopcnt %d", tsp->tsp_hopcnt); @@ -83,11 +133,11 @@ timed_print(register const u_char *bp, u_int length) tsp->tsp_type == TSP_SETDATE || tsp->tsp_type == TSP_SETDATEREQ) { if (endof(tsp->tsp_time) > snapend) { - fputs(" [|timed]", stdout); + printf(" %s", tstr); return; } - sec = ntohl((long)tsp->tsp_time.tv_sec); - usec = ntohl((long)tsp->tsp_time.tv_usec); + sec = EXTRACT_32BITS(&tsp->tsp_time.tv_sec); + usec = EXTRACT_32BITS(&tsp->tsp_time.tv_usec); if (usec < 0) /* corrupt, skip the rest of the packet */ return; @@ -103,7 +153,7 @@ timed_print(register const u_char *bp, u_int length) end = memchr(tsp->tsp_name, '\0', snapend - (u_char *)tsp->tsp_name); if (end == NULL) - fputs(" [|timed]", stdout); + printf(" %s", tstr); else { fputs(" name ", stdout); fwrite(tsp->tsp_name, end - (u_char *)tsp->tsp_name, 1, stdout);