Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / rx / rx_stats.h
1 /*
2 * Copyright (c) 2010 Your File System Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR `AS IS'' AND ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */
24
25 /* rx_stats.h
26 *
27 * These are internal structures used by the rx statistics code. Nothing
28 * in this file should be visible outside the RX module.
29 */
30
31 /* We memcpy between rx_statisticsAtomic and rx_statistics, so the two
32 * structures must have the same elements, and sizeof(rx_atomic_t) must
33 * equal sizeof(int)
34 */
35
36 struct rx_statisticsAtomic { /* Atomic version of rx_statistics */
37 rx_atomic_t packetRequests;
38 rx_atomic_t receivePktAllocFailures;
39 rx_atomic_t sendPktAllocFailures;
40 rx_atomic_t specialPktAllocFailures;
41 rx_atomic_t socketGreedy;
42 rx_atomic_t bogusPacketOnRead;
43 int bogusHost;
44 rx_atomic_t noPacketOnRead;
45 rx_atomic_t noPacketBuffersOnRead;
46 rx_atomic_t selects;
47 rx_atomic_t sendSelects;
48 rx_atomic_t packetsRead[RX_N_PACKET_TYPES];
49 rx_atomic_t dataPacketsRead;
50 rx_atomic_t ackPacketsRead;
51 rx_atomic_t dupPacketsRead;
52 rx_atomic_t spuriousPacketsRead;
53 rx_atomic_t packetsSent[RX_N_PACKET_TYPES];
54 rx_atomic_t ackPacketsSent;
55 rx_atomic_t pingPacketsSent;
56 rx_atomic_t abortPacketsSent;
57 rx_atomic_t busyPacketsSent;
58 rx_atomic_t dataPacketsSent;
59 rx_atomic_t dataPacketsReSent;
60 rx_atomic_t dataPacketsPushed;
61 rx_atomic_t ignoreAckedPacket;
62 struct clock totalRtt;
63 struct clock minRtt;
64 struct clock maxRtt;
65 rx_atomic_t nRttSamples;
66 rx_atomic_t nServerConns;
67 rx_atomic_t nClientConns;
68 rx_atomic_t nPeerStructs;
69 rx_atomic_t nCallStructs;
70 rx_atomic_t nFreeCallStructs;
71 rx_atomic_t netSendFailures;
72 rx_atomic_t fatalErrors;
73 rx_atomic_t ignorePacketDally;
74 rx_atomic_t receiveCbufPktAllocFailures;
75 rx_atomic_t sendCbufPktAllocFailures;
76 rx_atomic_t nBusies;
77 rx_atomic_t spares[4];
78 };
79
80 #if defined(RX_ENABLE_LOCKS)
81 extern afs_kmutex_t rx_stats_mutex;
82 #endif
83
84 extern struct rx_statisticsAtomic rx_stats;
85
86 extern void rxi_ResetStatistics(void);