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
11 * This file contains sample code for the rxstats interface
14 #include <afs/param.h>
15 #include <afsconfig.h>
23 #include <afs/afs_Admin.h>
24 #include <afs/afs_clientAdmin.h>
25 #include <afs/afs_utilAdmin.h>
30 "Usage: rxdebug_rx_stats <host> <port>\n");
44 *srvrName = *(argp++);
47 *srvrPort = strtol(*(argp++), NULL, 0);
48 if (*srvrPort <= 0 || *srvrPort >= 65536)
54 static char *packetTypes[] = RX_PACKET_TYPES;
56 int main(int argc, char *argv[])
60 rxdebugHandle_p handle;
63 struct rx_stats stats;
64 afs_uint32 supportedStats;
68 ParseArgs(argc, argv, &srvrName, &srvrPort);
70 rc = afsclient_Init(&st);
72 fprintf(stderr, "afsclient_Init, status %d\n", st);
76 rc = afsclient_RXDebugOpenPort(srvrName, srvrPort, &handle, &st);
78 fprintf(stderr, "afsclient_RXDebugOpenPort, status %d\n", st);
82 rc = util_RXDebugRxStats(handle, &stats, &supportedStats, &st);
84 fprintf(stderr, "util_RXDebugBasicStats, status %d\n", st);
88 rc = afsclient_RXDebugClose(handle, &st);
90 fprintf(stderr, "afsclient_RXDebugClose, status %d\n", st);
95 printf("RX stats: host %s (port %d)\n", srvrName, srvrPort);
97 printf(" packetRequests: %d\n", stats.packetRequests);
98 printf(" receivePktAllocFailures: %d\n",
99 stats.receivePktAllocFailures);
100 if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
101 printf(" receiveCbufPktAllocFailures: %d\n",
102 stats.receiveCbufPktAllocFailures);
104 printf(" sendPktAllocFailures: %d\n",
105 stats.sendPktAllocFailures);
106 if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
107 printf(" sendCbufPktAllocFailures: %d\n",
108 stats.sendCbufPktAllocFailures);
110 printf(" specialPktAllocFailures: %d\n",
111 stats.specialPktAllocFailures);
112 printf(" socketGreedy: %d\n",
114 printf(" bogusPacketOnRead: %d\n",
115 stats.bogusPacketOnRead);
116 printf(" bogusHost: %d\n",
118 printf(" noPacketOnRead: %d\n",
119 stats.noPacketOnRead);
120 printf(" noPacketBuffersOnRead: %d\n",
121 stats.noPacketBuffersOnRead);
122 printf(" selects: %d\n",
124 printf(" sendSelects: %d\n",
126 printf(" packetsRead:\n");
127 for (i = 0 ; i < RX_N_PACKET_TYPES ; i++) {
128 strcpy(tstr, packetTypes[i]);
129 printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsRead[i]);
131 printf(" dataPacketsRead: %d\n",
132 stats.dataPacketsRead);
133 printf(" ackPacketsRead: %d\n",
134 stats.ackPacketsRead);
135 printf(" dupPacketsRead: %d\n",
136 stats.dupPacketsRead);
137 printf(" spuriousPacketsRead: %d\n",
138 stats.spuriousPacketsRead);
139 printf(" ignorePacketDally: %d\n",
140 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",
147 stats.ackPacketsSent);
148 printf(" dataPacketsSent: %d\n",
149 stats.dataPacketsSent);
150 printf(" dataPacketsReSent: %d\n",
151 stats.dataPacketsReSent);
152 printf(" dataPacketsPushed: %d\n",
153 stats.dataPacketsPushed);
154 printf(" ignoreAckedPacket: %d\n",
155 stats.ignoreAckedPacket);
156 printf(" netSendFailures: %d\n",
157 stats.netSendFailures);
158 printf(" fatalErrors: %d\n",
160 printf(" nRttSamples: %d\n",
162 printf(" totalRtt: %.6f\n",
163 clock_Float(&stats.totalRtt));
164 printf(" minRtt: %.6f\n",
165 clock_Float(&stats.minRtt));
166 printf(" maxRtt: %.6f\n",
167 clock_Float(&stats.maxRtt));
168 printf(" nServerConns: %d\n",
170 printf(" nClientConns: %d\n",
172 printf(" nPeerStructs: %d\n",
174 printf(" nCallStructs: %d\n",
176 printf(" nFreeCallStructs: %d\n",
177 stats.nFreeCallStructs);