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>
27 #include <rx/rxstat.h>
29 #include <afs/afs_Admin.h>
30 #include <afs/afs_clientAdmin.h>
31 #include <afs/afs_utilAdmin.h>
34 pthread_mutex_t des_init_mutex = PTHREAD_MUTEX_INITIALIZER;
35 pthread_mutex_t des_random_mutex = PTHREAD_MUTEX_INITIALIZER;
36 pthread_mutex_t rxkad_random_mutex = PTHREAD_MUTEX_INITIALIZER;
37 #endif /* AFS_DARWIN_ENV */
42 fprintf(stderr, "Usage: rxdebug_rx_stats <host> <port>\n");
47 ParseArgs(int argc, char *argv[], char **srvrName, long *srvrPort)
53 *srvrName = *(argp++);
56 *srvrPort = strtol(*(argp++), NULL, 0);
57 if (*srvrPort <= 0 || *srvrPort >= 65536)
63 static char *packetTypes[] = RX_PACKET_TYPES;
66 main(int argc, char *argv[])
70 rxdebugHandle_p handle;
73 struct rx_statistics stats;
74 afs_uint32 supportedStats;
78 ParseArgs(argc, argv, &srvrName, &srvrPort);
80 rc = afsclient_Init(&st);
82 fprintf(stderr, "afsclient_Init, status %d\n", st);
86 rc = afsclient_RXDebugOpenPort(srvrName, srvrPort, &handle, &st);
88 fprintf(stderr, "afsclient_RXDebugOpenPort, status %d\n", st);
92 rc = util_RXDebugRxStats(handle, &stats, &supportedStats, &st);
94 fprintf(stderr, "util_RXDebugBasicStats, status %d\n", st);
98 rc = afsclient_RXDebugClose(handle, &st);
100 fprintf(stderr, "afsclient_RXDebugClose, status %d\n", st);
105 printf("RX stats: host %s (port %d)\n", srvrName, srvrPort);
107 printf(" packetRequests: %d\n", stats.packetRequests);
108 printf(" receivePktAllocFailures: %d\n",
109 stats.receivePktAllocFailures);
110 if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
111 printf(" receiveCbufPktAllocFailures: %d\n",
112 stats.receiveCbufPktAllocFailures);
114 printf(" sendPktAllocFailures: %d\n",
115 stats.sendPktAllocFailures);
116 if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
117 printf(" sendCbufPktAllocFailures: %d\n",
118 stats.sendCbufPktAllocFailures);
120 printf(" specialPktAllocFailures: %d\n",
121 stats.specialPktAllocFailures);
122 printf(" socketGreedy: %d\n", stats.socketGreedy);
123 printf(" bogusPacketOnRead: %d\n", stats.bogusPacketOnRead);
124 printf(" bogusHost: %d\n", stats.bogusHost);
125 printf(" noPacketOnRead: %d\n", stats.noPacketOnRead);
126 printf(" noPacketBuffersOnRead: %d\n",
127 stats.noPacketBuffersOnRead);
128 printf(" selects: %d\n", stats.selects);
129 printf(" sendSelects: %d\n", stats.sendSelects);
130 printf(" packetsRead:\n");
131 for (i = 0; i < RX_N_PACKET_TYPES; i++) {
132 strcpy(tstr, packetTypes[i]);
133 printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsRead[i]);
135 printf(" dataPacketsRead: %d\n", stats.dataPacketsRead);
136 printf(" ackPacketsRead: %d\n", stats.ackPacketsRead);
137 printf(" dupPacketsRead: %d\n", stats.dupPacketsRead);
138 printf(" spuriousPacketsRead: %d\n",
139 stats.spuriousPacketsRead);
140 printf(" ignorePacketDally: %d\n", stats.ignorePacketDally);
141 printf(" packetsSent:\n");
142 for (i = 0; i < RX_N_PACKET_TYPES; i++) {
143 strcpy(tstr, packetTypes[i]);
144 printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsSent[i]);
146 printf(" ackPacketsSent: %d\n", stats.ackPacketsSent);
147 printf(" dataPacketsSent: %d\n", stats.dataPacketsSent);
148 printf(" dataPacketsReSent: %d\n", stats.dataPacketsReSent);
149 printf(" dataPacketsPushed: %d\n", stats.dataPacketsPushed);
150 printf(" ignoreAckedPacket: %d\n", stats.ignoreAckedPacket);
151 printf(" netSendFailures: %d\n", stats.netSendFailures);
152 printf(" fatalErrors: %d\n", stats.fatalErrors);
153 printf(" nRttSamples: %d\n", stats.nRttSamples);
154 printf(" totalRtt: %.6f\n",
155 clock_Float(&stats.totalRtt));
156 printf(" minRtt: %.6f\n",
157 clock_Float(&stats.minRtt));
158 printf(" maxRtt: %.6f\n",
159 clock_Float(&stats.maxRtt));
160 printf(" nServerConns: %d\n", stats.nServerConns);
161 printf(" nClientConns: %d\n", stats.nClientConns);
162 printf(" nPeerStructs: %d\n", stats.nPeerStructs);
163 printf(" nCallStructs: %d\n", stats.nCallStructs);
164 printf(" nFreeCallStructs: %d\n", stats.nFreeCallStructs);