Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / rxdebug / rxdumptrace.c
1 /*
2 * Copyright 2000, International Business Machines Corporation and others.
3 * All Rights Reserved.
4 *
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
8 */
9
10 #include <afsconfig.h>
11 #include <afs/param.h>
12
13
14 #ifdef RXDEBUG
15
16 #include <roken.h>
17
18 #include <afs/afsutil.h>
19
20 #include "rx.h"
21 #include "rx_globals.h"
22 #include "rx_trace.h"
23
24 extern char *rxi_tracename;
25 extern int rxi_logfd;
26
27 struct rx_trace {
28 afs_uint32 cid;
29 unsigned short call;
30 unsigned short qlen;
31 afs_uint32 now;
32 afs_uint32 waittime;
33 afs_uint32 servicetime;
34 afs_uint32 event;
35 };
36
37 int
38 main(int argc, char **argv)
39 {
40 struct rx_trace ip;
41 int err = 0;
42
43 setlinebuf(stdout);
44 argv++;
45 argc--;
46 while (argc && **argv == '-') {
47 if (strcmp(*argv, "-trace") == 0) {
48 strcpy(rxi_tracename, *(++argv));
49 argc--;
50 } else {
51 err++;
52 break;
53 }
54 argv++, argc--;
55 }
56 if (err || argc != 0) {
57 printf("usage: dumptrace [-trace pathname]");
58 exit(1);
59 }
60
61 rxi_logfd = open(rxi_tracename, O_RDONLY);
62 if (rxi_logfd < 0) {
63 perror("");
64 exit(errno);
65 }
66
67 while (read(rxi_logfd, &ip, sizeof(struct rx_trace))) {
68 printf("%9u ", ip.now);
69 switch (ip.event) {
70 case RX_CALL_END:
71 putchar('E');
72 break;
73 case RX_CALL_START:
74 putchar('S');
75 break;
76 case RX_CALL_ARRIVAL:
77 putchar('A');
78 break;
79 case RX_TRACE_DROP:
80 putchar('D');
81 break;
82 default:
83 putchar('U');
84 break;
85 }
86 printf(" %3u %7u %7u %x.%x\n", ip.qlen, ip.servicetime,
87 ip.waittime, ip.cid, ip.call);
88 }
89 return 0;
90 }
91
92 #endif