2 * Copyright 2000, International Business Machines Corporation and others.
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
9 * Portions Copyright (c) 2003 Apple Computer, Inc.
13 * This file contains sample code for the rxstats interface
16 #include <afsconfig.h>
17 #include <afs/param.h>
35 #include <afs/afs_Admin.h>
36 #include <afs/afs_clientAdmin.h>
37 #include <afs/afs_utilAdmin.h>
40 pthread_mutex_t des_init_mutex = PTHREAD_MUTEX_INITIALIZER;
41 pthread_mutex_t des_random_mutex = PTHREAD_MUTEX_INITIALIZER;
42 pthread_mutex_t rxkad_random_mutex = PTHREAD_MUTEX_INITIALIZER;
43 #endif /* AFS_DARWIN_ENV */
48 fprintf(stderr, "Usage: rxdebug_rx_stats <host> <port>\n");
53 ParseArgs(int argc, char *argv[], char **srvrName, long *srvrPort)
59 *srvrName = *(argp++);
62 *srvrPort = strtol(*(argp++), NULL, 0);
63 if (*srvrPort <= 0 || *srvrPort >= 65536)
69 static char *packetTypes[] = RX_PACKET_TYPES;
72 main(int argc, char *argv[])
76 rxdebugHandle_p handle;
79 struct rx_stats stats;
80 afs_uint32 supportedStats;
84 ParseArgs(argc, argv, &srvrName, &srvrPort);
86 rc = afsclient_Init(&st);
88 fprintf(stderr, "afsclient_Init, status %d\n", st);
92 rc = afsclient_RXDebugOpenPort(srvrName, srvrPort, &handle, &st);
94 fprintf(stderr, "afsclient_RXDebugOpenPort, status %d\n", st);
98 rc = util_RXDebugRxStats(handle, &stats, &supportedStats, &st);
100 fprintf(stderr, "util_RXDebugBasicStats, status %d\n", st);
104 rc = afsclient_RXDebugClose(handle, &st);
106 fprintf(stderr, "afsclient_RXDebugClose, status %d\n", st);
111 printf("RX stats: host %s (port %d)\n", srvrName, srvrPort);
113 printf(" packetRequests: %d\n", stats.packetRequests);
114 printf(" receivePktAllocFailures: %d\n",
115 stats.receivePktAllocFailures);
116 if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
117 printf(" receiveCbufPktAllocFailures: %d\n",
118 stats.receiveCbufPktAllocFailures);
120 printf(" sendPktAllocFailures: %d\n",
121 stats.sendPktAllocFailures);
122 if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
123 printf(" sendCbufPktAllocFailures: %d\n",
124 stats.sendCbufPktAllocFailures);
126 printf(" specialPktAllocFailures: %d\n",
127 stats.specialPktAllocFailures);
128 printf(" socketGreedy: %d\n", stats.socketGreedy);
129 printf(" bogusPacketOnRead: %d\n", stats.bogusPacketOnRead);
130 printf(" bogusHost: %d\n", stats.bogusHost);
131 printf(" noPacketOnRead: %d\n", stats.noPacketOnRead);
132 printf(" noPacketBuffersOnRead: %d\n",
133 stats.noPacketBuffersOnRead);
134 printf(" selects: %d\n", stats.selects);
135 printf(" sendSelects: %d\n", stats.sendSelects);
136 printf(" packetsRead:\n");
137 for (i = 0; i < RX_N_PACKET_TYPES; i++) {
138 strcpy(tstr, packetTypes[i]);
139 printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsRead[i]);
141 printf(" dataPacketsRead: %d\n", stats.dataPacketsRead);
142 printf(" ackPacketsRead: %d\n", stats.ackPacketsRead);
143 printf(" dupPacketsRead: %d\n", stats.dupPacketsRead);
144 printf(" spuriousPacketsRead: %d\n",
145 stats.spuriousPacketsRead);
146 printf(" ignorePacketDally: %d\n", stats.ignorePacketDally);
147 printf(" packetsSent:\n");
148 for (i = 0; i < RX_N_PACKET_TYPES; i++) {
149 strcpy(tstr, packetTypes[i]);
150 printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsSent[i]);
152 printf(" ackPacketsSent: %d\n", stats.ackPacketsSent);
153 printf(" dataPacketsSent: %d\n", stats.dataPacketsSent);
154 printf(" dataPacketsReSent: %d\n", stats.dataPacketsReSent);
155 printf(" dataPacketsPushed: %d\n", stats.dataPacketsPushed);
156 printf(" ignoreAckedPacket: %d\n", stats.ignoreAckedPacket);
157 printf(" netSendFailures: %d\n", stats.netSendFailures);
158 printf(" fatalErrors: %d\n", stats.fatalErrors);
159 printf(" nRttSamples: %d\n", stats.nRttSamples);
160 printf(" totalRtt: %.6f\n",
161 clock_Float(&stats.totalRtt));
162 printf(" minRtt: %.6f\n",
163 clock_Float(&stats.minRtt));
164 printf(" maxRtt: %.6f\n",
165 clock_Float(&stats.maxRtt));
166 printf(" nServerConns: %d\n", stats.nServerConns);
167 printf(" nClientConns: %d\n", stats.nClientConns);
168 printf(" nPeerStructs: %d\n", stats.nPeerStructs);
169 printf(" nCallStructs: %d\n", stats.nCallStructs);
170 printf(" nFreeCallStructs: %d\n", stats.nFreeCallStructs);