* pppdump - print out the contents of a record file generated by
* pppd in readable form.
*
- * Copyright (C) 1999 Paul Mackerras. All rights reserved.
+ * Copyright (c) 1999 Paul Mackerras. All rights reserved.
*
- * 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.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The name(s) of the authors of this software must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission.
+ *
+ * 4. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by Paul Mackerras
+ * <paulus@samba.org>".
+ *
+ * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
+ * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <stdio.h>
#include <unistd.h>
+#include <stdlib.h>
+#include <time.h>
#include <sys/types.h>
#include "ppp_defs.h"
#include "ppp-comp.h"
int reverse;
int decompress;
int mru = 1500;
+int abs_times;
+time_t start_time;
+int start_time_tenths;
+int tot_sent, tot_rcvd;
extern int optind;
+extern char *optarg;
+
+void dumplog();
+void dumpppp();
+void show_time();
+void handle_ccp();
+int
main(ac, av)
int ac;
char **av;
char *p;
FILE *f;
- while ((i = getopt(ac, av, "hprdm:")) != -1) {
+ while ((i = getopt(ac, av, "hprdm:a")) != -1) {
switch (i) {
case 'h':
hexmode = 1;
case 'm':
mru = atoi(optarg);
break;
+ case 'a':
+ abs_times = 1;
+ break;
default:
- fprintf(stderr, "Usage: %s [-h | -p[d]] [-r] [-m mru] [file ...]\n", av[0]);
+ fprintf(stderr, "Usage: %s [-h | -p[d]] [-r] [-m mru] [-a] [file ...]\n", av[0]);
exit(1);
}
}
exit(0);
}
-
+void
dumplog(f)
FILE *f;
{
int c, n, k, col;
int nb, c2;
unsigned char buf[16];
- time_t t;
while ((c = getc(f)) != EOF) {
switch (c) {
col = 6;
n = getc(f);
n = (n << 8) + getc(f);
+ *(c==1? &tot_sent: &tot_rcvd) += n;
nb = 0;
for (; n > 0; --n) {
c = getc(f);
break;
case 5:
case 6:
- n = getc(f);
- if (c == 5) {
- for (c = 3; c > 0; --c)
- n = (n << 8) + getc(f);
- }
- printf("time %.1fs\n", (double) n / 10);
- break;
case 7:
- t = getc(f);
- t = (t << 8) + getc(f);
- t = (t << 8) + getc(f);
- t = (t << 8) + getc(f);
- printf("start %s", ctime(&t));
+ show_time(f, c);
break;
default:
- printf("?%.2x\n");
+ printf("?%.2x\n", c);
}
}
}
unsigned char dbuf[8192];
+void
dumpppp(f)
FILE *f;
{
unsigned char *d;
unsigned short fcs;
struct pkt *pkt;
- time_t t;
spkt.cnt = rpkt.cnt = 0;
spkt.esc = rpkt.esc = 0;
pkt = c==1? &spkt: &rpkt;
n = getc(f);
n = (n << 8) + getc(f);
+ *(c==1? &tot_sent: &tot_rcvd) += n;
for (; n > 0; --n) {
c = getc(f);
switch (c) {
++r;
++r;
if (endp - r > mru)
- printf(" ERROR: length (%d) > MRU (%d)\n",
+ printf(" ERROR: length (%zd) > MRU (%d)\n",
endp - r, mru);
if (decompress && fcs == PPP_GOODFCS) {
/* See if this is a CCP or compressed packet */
break;
case 5:
case 6:
- n = getc(f);
- if (c == 5) {
- for (c = 3; c > 0; --c)
- n = (n << 8) + getc(f);
- }
- printf("time %.1fs\n", (double) n / 10);
- break;
case 7:
- t = getc(f);
- t = (t << 8) + getc(f);
- t = (t << 8) + getc(f);
- t = (t << 8) + getc(f);
- printf("start %s", ctime(&t));
+ show_time(f, c);
break;
default:
- printf("?%.2x\n");
+ printf("?%.2x\n", c);
}
}
}
NULL
};
+void
handle_ccp(cp, dp, len)
struct pkt *cp;
u_char *dp;
break;
}
}
+
+void
+show_time(f, c)
+ FILE *f;
+ int c;
+{
+ time_t t;
+ int n;
+ struct tm *tm;
+
+ if (c == 7) {
+ t = getc(f);
+ t = (t << 8) + getc(f);
+ t = (t << 8) + getc(f);
+ t = (t << 8) + getc(f);
+ printf("start %s", ctime(&t));
+ start_time = t;
+ start_time_tenths = 0;
+ tot_sent = tot_rcvd = 0;
+ } else {
+ n = getc(f);
+ if (c == 5) {
+ for (c = 3; c > 0; --c)
+ n = (n << 8) + getc(f);
+ }
+ if (abs_times) {
+ n += start_time_tenths;
+ start_time += n / 10;
+ start_time_tenths = n % 10;
+ tm = localtime(&start_time);
+ printf("time %.2d:%.2d:%.2d.%d", tm->tm_hour, tm->tm_min,
+ tm->tm_sec, start_time_tenths);
+ printf(" (sent %d, rcvd %d)\n", tot_sent, tot_rcvd);
+ } else
+ printf("time %.1fs\n", (double) n / 10);
+ }
+}