afsconfig-and-rcsid-all-around-20010705
[openafs.git] / src / libadmin / samples / rxdebug_rx_stats.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
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
8  */
9
10 /*
11  * This file contains sample code for the rxstats interface 
12  */
13
14 #include <afs/param.h>
15 #include <afsconfig.h>
16
17 RCSID("$Header$");
18
19 #ifdef AFS_NT40_ENV
20 #include <winsock2.h>
21 #include <pthread.h>
22 #endif
23 #include <afs/afs_Admin.h>
24 #include <afs/afs_clientAdmin.h>
25 #include <afs/afs_utilAdmin.h>
26
27 void Usage()
28 {
29     fprintf(stderr,
30             "Usage: rxdebug_rx_stats <host> <port>\n");
31     exit(1);
32 }
33
34 void ParseArgs(
35     int argc,
36     char *argv[],
37     char **srvrName,
38     long *srvrPort)
39 {
40     char **argp = argv;
41
42     if (!*(++argp))
43         Usage();
44     *srvrName = *(argp++);
45     if (!*(argp))
46         Usage();
47     *srvrPort = strtol(*(argp++), NULL, 0);
48     if (*srvrPort <= 0 || *srvrPort >= 65536)
49         Usage();
50     if (*(argp))
51         Usage();
52 }
53
54 static char *packetTypes[] = RX_PACKET_TYPES;
55
56 int main(int argc, char *argv[])
57 {
58     int rc;
59     afs_status_t st = 0;
60     rxdebugHandle_p handle;
61     char *srvrName;
62     long srvrPort;
63     struct rx_stats stats;
64     afs_uint32 supportedStats;
65     char tstr[32];
66     int i;
67
68     ParseArgs(argc, argv, &srvrName, &srvrPort);
69
70     rc = afsclient_Init(&st);
71     if (!rc) {
72         fprintf(stderr, "afsclient_Init, status %d\n", st);
73         exit(1);
74     }
75
76     rc = afsclient_RXDebugOpenPort(srvrName, srvrPort, &handle, &st);
77     if (!rc) {
78         fprintf(stderr, "afsclient_RXDebugOpenPort, status %d\n", st);
79         exit(1);
80     }
81
82     rc = util_RXDebugRxStats(handle, &stats, &supportedStats, &st);
83     if (!rc) {
84         fprintf(stderr, "util_RXDebugBasicStats, status %d\n", st);
85         exit(1);
86     }
87
88     rc = afsclient_RXDebugClose(handle, &st);
89     if (!rc) {
90         fprintf(stderr, "afsclient_RXDebugClose, status %d\n", st);
91         exit(1);
92     }
93
94     printf("\n");
95     printf("RX stats: host %s (port %d)\n", srvrName, srvrPort);
96     printf("\n");
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);
103     }
104     printf("    sendPktAllocFailures:        %d\n",
105            stats.sendPktAllocFailures);
106     if (supportedStats & RX_SERVER_DEBUG_NEW_PACKETS) {
107         printf("    sendCbufPktAllocFailures:    %d\n",
108                stats.sendCbufPktAllocFailures);
109     }
110     printf("    specialPktAllocFailures:     %d\n",
111            stats.specialPktAllocFailures);
112     printf("    socketGreedy:                %d\n",
113            stats.socketGreedy);
114     printf("    bogusPacketOnRead:           %d\n",
115            stats.bogusPacketOnRead);
116     printf("    bogusHost:                   %d\n",
117            stats.bogusHost);
118     printf("    noPacketOnRead:              %d\n",
119            stats.noPacketOnRead);
120     printf("    noPacketBuffersOnRead:       %d\n",
121            stats.noPacketBuffersOnRead);
122     printf("    selects:                     %d\n",
123            stats.selects);
124     printf("    sendSelects:                 %d\n",
125            stats.sendSelects);
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]);
130     }
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]);
145     }
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",
159            stats.fatalErrors);
160     printf("    nRttSamples:                 %d\n",
161            stats.nRttSamples);
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",
169            stats.nServerConns);
170     printf("    nClientConns:                %d\n",
171            stats.nClientConns);
172     printf("    nPeerStructs:                %d\n",
173            stats.nPeerStructs);
174     printf("    nCallStructs:                %d\n",
175            stats.nCallStructs);
176     printf("    nFreeCallStructs:            %d\n",
177            stats.nFreeCallStructs);
178     printf("\n");
179
180     exit(0);
181 }