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 <afs/afs_Admin.h>
28 #include <afs/afs_clientAdmin.h>
29 #include <afs/afs_utilAdmin.h>
32 pthread_mutex_t des_init_mutex = PTHREAD_MUTEX_INITIALIZER;
33 pthread_mutex_t des_random_mutex = PTHREAD_MUTEX_INITIALIZER;
34 pthread_mutex_t rxkad_random_mutex = PTHREAD_MUTEX_INITIALIZER;
35 #endif /* AFS_DARWIN_ENV */
40 fprintf(stderr, "Usage: rxdebug_rx_stats <host> <port>\n");
45 ParseArgs(int argc, char *argv[], char **srvrName, long *srvrPort)
51 *srvrName = *(argp++);
54 *srvrPort = strtol(*(argp++), NULL, 0);
55 if (*srvrPort <= 0 || *srvrPort >= 65536)
61 static char *packetTypes[] = RX_PACKET_TYPES;
64 main(int argc, char *argv[])
68 rxdebugHandle_p handle;
71 struct rx_stats stats;
72 afs_uint32 supportedStats;
76 ParseArgs(argc, argv, &srvrName, &srvrPort);
78 rc = afsclient_Init(&st);
80 fprintf(stderr, "afsclient_Init, status %d\n", st);
84 rc = afsclient_RXDebugOpenPort(srvrName, srvrPort, &handle, &st);
86 fprintf(stderr, "afsclient_RXDebugOpenPort, status %d\n", st);
90 rc = util_RXDebugRxStats(handle, &stats, &supportedStats, &st);
92 fprintf(stderr, "util_RXDebugBasicStats, status %d\n", st);
96 rc = afsclient_RXDebugClose(handle, &st);
98 fprintf(stderr, "afsclient_RXDebugClose, status %d\n", st);
103 printf("RX stats: host %s (port %d)\n", srvrName, srvrPort);
105 printf(" packetRequests: %d\n", stats.packetRequests);
106 printf(" receivePktAllocFailures: %d\n",
107 stats.receivePktAllocFailures);
108 if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
109 printf(" receiveCbufPktAllocFailures: %d\n",
110 stats.receiveCbufPktAllocFailures);
112 printf(" sendPktAllocFailures: %d\n",
113 stats.sendPktAllocFailures);
114 if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
115 printf(" sendCbufPktAllocFailures: %d\n",
116 stats.sendCbufPktAllocFailures);
118 printf(" specialPktAllocFailures: %d\n",
119 stats.specialPktAllocFailures);
120 printf(" socketGreedy: %d\n", stats.socketGreedy);
121 printf(" bogusPacketOnRead: %d\n", stats.bogusPacketOnRead);
122 printf(" bogusHost: %d\n", stats.bogusHost);
123 printf(" noPacketOnRead: %d\n", stats.noPacketOnRead);
124 printf(" noPacketBuffersOnRead: %d\n",
125 stats.noPacketBuffersOnRead);
126 printf(" selects: %d\n", stats.selects);
127 printf(" sendSelects: %d\n", stats.sendSelects);
128 printf(" packetsRead:\n");
129 for (i = 0; i < RX_N_PACKET_TYPES; i++) {
130 strcpy(tstr, packetTypes[i]);
131 printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsRead[i]);
133 printf(" dataPacketsRead: %d\n", stats.dataPacketsRead);
134 printf(" ackPacketsRead: %d\n", stats.ackPacketsRead);
135 printf(" dupPacketsRead: %d\n", stats.dupPacketsRead);
136 printf(" spuriousPacketsRead: %d\n",
137 stats.spuriousPacketsRead);
138 printf(" ignorePacketDally: %d\n", stats.ignorePacketDally);
139 printf(" packetsSent:\n");
140 for (i = 0; i < RX_N_PACKET_TYPES; i++) {
141 strcpy(tstr, packetTypes[i]);
142 printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsSent[i]);
144 printf(" ackPacketsSent: %d\n", stats.ackPacketsSent);
145 printf(" dataPacketsSent: %d\n", stats.dataPacketsSent);
146 printf(" dataPacketsReSent: %d\n", stats.dataPacketsReSent);
147 printf(" dataPacketsPushed: %d\n", stats.dataPacketsPushed);
148 printf(" ignoreAckedPacket: %d\n", stats.ignoreAckedPacket);
149 printf(" netSendFailures: %d\n", stats.netSendFailures);
150 printf(" fatalErrors: %d\n", stats.fatalErrors);
151 printf(" nRttSamples: %d\n", stats.nRttSamples);
152 printf(" totalRtt: %.6f\n",
153 clock_Float(&stats.totalRtt));
154 printf(" minRtt: %.6f\n",
155 clock_Float(&stats.minRtt));
156 printf(" maxRtt: %.6f\n",
157 clock_Float(&stats.maxRtt));
158 printf(" nServerConns: %d\n", stats.nServerConns);
159 printf(" nClientConns: %d\n", stats.nClientConns);
160 printf(" nPeerStructs: %d\n", stats.nPeerStructs);
161 printf(" nCallStructs: %d\n", stats.nCallStructs);
162 printf(" nFreeCallStructs: %d\n", stats.nFreeCallStructs);