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>
26 #include <rx/rxstat.h>
28 #include <afs/afs_Admin.h>
29 #include <afs/afs_clientAdmin.h>
30 #include <afs/afs_utilAdmin.h>
33 pthread_mutex_t des_init_mutex = PTHREAD_MUTEX_INITIALIZER;
34 pthread_mutex_t des_random_mutex = PTHREAD_MUTEX_INITIALIZER;
35 pthread_mutex_t rxkad_random_mutex = PTHREAD_MUTEX_INITIALIZER;
36 #endif /* AFS_DARWIN_ENV */
41 fprintf(stderr, "Usage: rxdebug_rx_stats <host> <port>\n");
46 ParseArgs(int argc, char *argv[], char **srvrName, long *srvrPort)
52 *srvrName = *(argp++);
55 *srvrPort = strtol(*(argp++), NULL, 0);
56 if (*srvrPort <= 0 || *srvrPort >= 65536)
62 static char *packetTypes[] = RX_PACKET_TYPES;
65 main(int argc, char *argv[])
69 rxdebugHandle_p handle;
72 struct rx_statistics stats;
73 afs_uint32 supportedStats;
77 ParseArgs(argc, argv, &srvrName, &srvrPort);
79 rc = afsclient_Init(&st);
81 fprintf(stderr, "afsclient_Init, status %d\n", st);
85 rc = afsclient_RXDebugOpenPort(srvrName, srvrPort, &handle, &st);
87 fprintf(stderr, "afsclient_RXDebugOpenPort, status %d\n", st);
91 rc = util_RXDebugRxStats(handle, &stats, &supportedStats, &st);
93 fprintf(stderr, "util_RXDebugBasicStats, status %d\n", st);
97 rc = afsclient_RXDebugClose(handle, &st);
99 fprintf(stderr, "afsclient_RXDebugClose, status %d\n", st);
104 printf("RX stats: host %s (port %ld)\n", srvrName, srvrPort);
106 printf(" packetRequests: %d\n", stats.packetRequests);
107 printf(" receivePktAllocFailures: %d\n",
108 stats.receivePktAllocFailures);
109 if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
110 printf(" receiveCbufPktAllocFailures: %d\n",
111 stats.receiveCbufPktAllocFailures);
113 printf(" sendPktAllocFailures: %d\n",
114 stats.sendPktAllocFailures);
115 if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
116 printf(" sendCbufPktAllocFailures: %d\n",
117 stats.sendCbufPktAllocFailures);
119 printf(" specialPktAllocFailures: %d\n",
120 stats.specialPktAllocFailures);
121 printf(" socketGreedy: %d\n", stats.socketGreedy);
122 printf(" bogusPacketOnRead: %d\n", stats.bogusPacketOnRead);
123 printf(" bogusHost: %d\n", stats.bogusHost);
124 printf(" noPacketOnRead: %d\n", stats.noPacketOnRead);
125 printf(" noPacketBuffersOnRead: %d\n",
126 stats.noPacketBuffersOnRead);
127 printf(" selects: %d\n", stats.selects);
128 printf(" sendSelects: %d\n", stats.sendSelects);
129 printf(" packetsRead:\n");
130 for (i = 0; i < RX_N_PACKET_TYPES; i++) {
131 strcpy(tstr, packetTypes[i]);
132 printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsRead[i]);
134 printf(" dataPacketsRead: %d\n", stats.dataPacketsRead);
135 printf(" ackPacketsRead: %d\n", stats.ackPacketsRead);
136 printf(" dupPacketsRead: %d\n", stats.dupPacketsRead);
137 printf(" spuriousPacketsRead: %d\n",
138 stats.spuriousPacketsRead);
139 printf(" ignorePacketDally: %d\n", stats.ignorePacketDally);
140 printf(" packetsSent:\n");
141 for (i = 0; i < RX_N_PACKET_TYPES; i++) {
142 strcpy(tstr, packetTypes[i]);
143 printf("\t%-24s %d\n", strcat(tstr, ":"), stats.packetsSent[i]);
145 printf(" ackPacketsSent: %d\n", stats.ackPacketsSent);
146 printf(" dataPacketsSent: %d\n", stats.dataPacketsSent);
147 printf(" dataPacketsReSent: %d\n", stats.dataPacketsReSent);
148 printf(" dataPacketsPushed: %d\n", stats.dataPacketsPushed);
149 printf(" ignoreAckedPacket: %d\n", stats.ignoreAckedPacket);
150 printf(" netSendFailures: %d\n", stats.netSendFailures);
151 printf(" fatalErrors: %d\n", stats.fatalErrors);
152 printf(" nRttSamples: %d\n", stats.nRttSamples);
153 printf(" totalRtt: %.6f\n",
154 clock_Float(&stats.totalRtt));
155 printf(" minRtt: %.6f\n",
156 clock_Float(&stats.minRtt));
157 printf(" maxRtt: %.6f\n",
158 clock_Float(&stats.maxRtt));
159 printf(" nServerConns: %d\n", stats.nServerConns);
160 printf(" nClientConns: %d\n", stats.nClientConns);
161 printf(" nPeerStructs: %d\n", stats.nPeerStructs);
162 printf(" nCallStructs: %d\n", stats.nCallStructs);
163 printf(" nFreeCallStructs: %d\n", stats.nFreeCallStructs);