All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PerfCountSirius.h
Go to the documentation of this file.
1 // new
2 #pragma once
3 
4 #include <common.h>
5 
6 #include "common/SiriusCount.h"
7 
8 // Every can create his own INDEX_TABLE and COUNTER_TABLE
9 // and add these to the tables bellow
10 // e.g. SIRIUS_CONTER_TABLE
11 // All the tables should use de X or Y macro
12 // Use the following macros to Add, Sub or Get the counters
13 // CPERF_ADD(n) of CPERF_ADD(n,i) for indexed table
14 // CPERF_SUB(n) of CPERF_SUB(n,i) for indexed table
15 // CPERF_GET(n) of CPERF_GET(n,i) for indexed table
16 
17 // Used to define counters per a certain index (port e.g.)
18 // Both the counter name and strings will be expanded with the
19 // given index
20 //
21 
22 
23 // Define the counters
24 //
25 #define COUNTER_TABLE \
26  Y(RX_ETH) \
27  Y(RX_ETH_V4) \
28  Y(RX_ETH_V6) \
29  Y(RX_ETH_OTH) \
30  Y(RX_ETH_ERR_WQE) \
31  Y(RX_ETH_ERR_VLAN) \
32  Y(RX_ETH_ERR_BUFF) \
33  Y(RX_ETH_ERR_L1L2) \
34  Y(TX_ETH) \
35  Y(TX_ETH_ERR_NO_SPACE) \
36  \
37  Y(RX_MP_ICMP_LIST) \
38  Y(RX_MP_ICMP_ER) \
39  Y(RX_MP_ICMP_RS) \
40  Y(RX_MP_ICMP_RA) \
41  Y(RX_MP_ICMP_NS) \
42  Y(RX_MP_ICMP_NA) \
43  Y(RX_MP_ICMP_RD) \
44  Y(RX_MP_ICMP_DST_UNR) \
45  Y(RX_MP_ICMP_ERR) \
46  Y(RX_MP_ICMP_ERR_HOP) \
47  Y(RX_MP_ICMP_ERR_DST) \
48  Y(RX_MP_ICMP_ERR_TAR) \
49  Y(RX_MP_ICMP_ERR_DUP) \
50  Y(RX_MP_ICMP_ERR_SLK) \
51  Y(RX_MP_ICMP_ERR_LL) \
52  Y(RX_MP_ICMP_ERR_SIZE) \
53  Y(RX_MP_ICMP_ERR_UNH) \
54  Y(RX_MP_ICMP_ERR_ND_RA_UNEXP_PREF) \
55  Y(TX_MP_ICMP_NS) \
56  Y(TX_MP_ICMP_RS) \
57  Y(TX_MP_ICMP_NA) \
58  Y(TX_MP_ICMP_ER) \
59  Y(TX_MP_ICMP_ERR_DCACHE) \
60  Y(TX_MP_ICMP_ERR_GW) \
61  Y(TX_MP_ICMP_NEIGB_TBL) \
62  Y(TX_MP_ICMP_DEST_TBL) \
63  Y(TX_MP_ICMP_ECHO_REPLY) \
64  \
65  Y(IPV6_ERR_SOLL_NODE_EXP) \
66  Y(IPV6_ERR_NOT_ALLOWED) \
67  \
68  Y(RX_IPV6) \
69  Y(RX_IPV6_UNHANDLED) \
70  Y(RX_IPV6_TAG_SWITCH) \
71  Y(RX_IPV6_FIN) \
72  Y(RX_IPV6_FRAG) \
73  Y(RX_IPV6_UDP) \
74  Y(RX_IPV6_TCP) \
75  Y(RX_IPV6_RAW) \
76  Y(RX_IPV6_FRAG_ICMP) \
77  Y(RX_IPV6_FRAG_FIN) \
78  Y(RX_IPV6_FRAG_UDP) \
79  Y(RX_IPV6_FRAG_TCP) \
80  Y(RX_IPV6_EHO_HO) \
81  Y(RX_IPV6_EHO_DO) \
82  Y(RX_IPV6_EHO_SKIP) \
83  Y(RX_IPV6_EHO_NONE) \
84  Y(RX_IPV6_ERR_RAW) \
85  Y(RX_IPV6_ERR_L4) \
86  Y(RX_IPV6_ERR_MTU) \
87  Y(RX_IPV6_ERR_VER) \
88  Y(RX_IPV6_ERR_GEN) \
89  Y(RX_IPV6_ERR_FRAG) \
90  Y(RX_IPV6_ERR_TIM) \
91  Y(RX_IPV6_ERR_EHO_FRAG) \
92  Y(RX_IPV6_ERR_FRAG_FIT) \
93  Y(RX_IPV6_ERR_FRAG_SIZE) \
94  Y(RX_IPV6_ERR_MEM_ALLOC) \
95  Y(RX_IPV6_ERR) \
96  Y(TX_IPV6) \
97  Y(TX_IPV6_ERR) \
98  Y(TX_IPV6_ERR_PORT) \
99  Y(TX_IPV6_ERR_SIZE) \
100  Y(TX_IPV6_ERR_SPACE) \
101  Y(TX_IPV6_ERR_FRAG_HDR) \
102  Y(TX_IPV6_ERR_IP_HDR) \
103  \
104  Y(TX_ARP_REQUEST) \
105  Y(TX_ARP_REPLY) \
106  \
107  Y(RX_IPV4) \
108  Y(RX_IPV4_ERR_UNKNOWN_MAC) \
109  Y(RX_IPV4_ERR_UNKNOWN_PORT) \
110  Y(RX_IPV4_ERR_UNKNOWN_IP) \
111  Y(RX_IPV4_ERR_BUFF) \
112  Y(RX_IPV4_ERR_SIZE) \
113  Y(RX_IPV4_ERR_NULL_POINTER) \
114  Y(RX_IPV4_ERR_MEM_ALLOC) \
115  Y(RX_IPV4_ERR_ILLEGAL) \
116  Y(RX_IPV4_ERR_HASH_TABLE) \
117  Y(RX_IPV4_ERR_TIMER_LAUNCH) \
118  Y(TX_IPV4) \
119  Y(TX_IPV4_ERR_SIZE) \
120  Y(TX_IPV4_ERR_PORT) \
121  Y(TX_IPV4_ERR_ARP) \
122  Y(TX_IPV4_ERR_ETH) \
123  Y(TX_IPV4_ERR_SPACE) \
124  Y(TX_IPV4_ERR_HEADER) \
125  Y(TX_IPV4_ERR_SEND) \
126  Y(TX_IPV4_ERR_NOARP) \
127  \
128  Y(RX_RAW) \
129  Y(RX_RAW_LISTENING) \
130  Y(RX_RAW_NO_SOCKET_ERR) \
131  Y(TX_RAW) \
132  \
133  Y(RX_UDP) \
134  Y(RX_UDP_LISTENING) \
135  Y(RX_UDP_NO_SOCKET_ERR) \
136  Y(TX_UDP) \
137  Y(TX_UDP_NULL_POINTER_ERR) \
138  Y(TX_UDP_EMPTY_MEMLIST_ERR) \
139  Y(TX_UDP_SPACE_ERR) \
140  Y(TX_UDP_BUFF_ERR) \
141  \
142  Y(RX_TCP) \
143  Y(RX_TCP_FRAG) \
144  Y(RX_TCP_UNFRAG) \
145  Y(RX_TCP_INVALID_OPTIONS) \
146  Y(RX_TCP_ERR_NULL_POINTER) \
147  Y(RX_TCP_ERR_DEMO) \
148  Y(RX_TCP_INVALID_SYN) \
149  Y(RX_TCP_NOT_LISTENING) \
150  Y(RX_TCP_LISTENING) \
151  Y(RX_TCP_ERR_NO_SOCKET) \
152  Y(RX_TCP_WRN_NOT_LISTENING) \
153  Y(RX_TCP_ERR_NOT_SOCKET_REMOVE) \
154  Y(RX_TCP_ERR_NOT_SOCKET_INSERT) \
155  Y(RX_TCP_ERR_NOT_TCB_REMOVE) \
156  Y(RX_TCP_ERR_NOT_TCB_INSERT) \
157  Y(RX_TCP_STA_OUT_OF_ORDER) \
158  Y(TX_TCP) \
159  Y(TX_TCP_DUP_ACK) \
160  Y(TX_TCP_ERR_NULL_POINTER) \
161  Y(TX_TCP_WRN_NO_MEMBERS) \
162  Y(TX_TCP_WRN_CON_CAN_SEND) \
163  Y(TX_TCP_NO_DATA) \
164  Y(TX_TCP_ERR_NO_RESOURCES) \
165  Y(TX_TCP_ERR_NO_OPTIONS) \
166  Y(TX_TCP_ERR_NO_TCB) \
167  Y(TX_TCP_ERR_NO_TCPPARSE) \
168  Y(TX_TCP_ERR_NO_UNEXP) \
169  Y(TCP_WRN_NO_BOOKKEEPING) \
170  Y(TCP_WRN_CONNECTION_TIMEOUT) \
171  Y(TCP_ERR_TIMER_LAUNCH) \
172  Y(TCP_ERR_NULL_POINTER) \
173  Y(TCP_ERR_NO_TCB) \
174  Y(TCP_ERR_NO_SOCKET) \
175  Y(TCP_ERR_MAX_SOCKETS) \
176  Y(TCP_ERR_UNEXP) \
177  Y(TCP_ERR_TCB_CREATE) \
178  Y(TCP_ERR_SYCNCACHE_REMOVE) \
179  Y(TCP_ERR_SHADOWCACHE_REMOVE) \
180  Y(TCP_ERR_BOOKKEEPING) \
181  Y(TCP_ERR_UNUSED_IDENTIFIER) \
182  Y(TCP_ERR_MEM_ALLOC) \
183  Y(TCP_ERR_NO_MEMBER) \
184  Y(TCP_ERR_UNUSED) \
185  Y(TCP_ERR_NO_STARTSEG) \
186  Y(TCP_ERR_RTQ_TOO_OLD) \
187  Y(TCP_ERR_RTQ_CONN_ERROR) \
188  Y(TCP_STA_ACK_ONLY) \
189  Y(TCP_STA_RETRANSMIT) \
190 
191 
192 // some handy macros
193 #ifndef DISABLE_SIRIUS_COUNT
194 #define CPERF_ADD(n) \
195  CSiriusCount::Instance()->Add(n);
196 
197 #define CPERF_ADDI(n,i) \
198  CSiriusCount::Instance()->Add(n##i);
199 
200 #define CPERF_SUB(n) \
201  CSiriusCount::Instance()->Sub(n);
202 
203 #define CPERF_SUBI(n,i) \
204  CSiriusCount::Instance()->Sub(n##i);
205 
206 #define CPERF_GET(n) \
207  CSiriusCount::Instance()->Get(n);
208 
209 #define CPERF_GETI(n,i) \
210  CSiriusCount::Instance()->Get(n##i);
211 #else
212 #define CPERF_ADD(n)
213 #define CPERF_ADDI(n,i)
214 #define CPERF_SUB(n)
215 #define CPERF_SUBI(n,i)
216 #define CPERF_GET(n)
217 #define CPERF_GETI(n,i)
218 #endif
219 
221 {
222 public:
223 
224  // Creates the enum by
225  // first defining the X macro
226  // and then using it via calling COUNTER_TABLE
227  // only uses the first param with a comma
228  #define X(a, b, c) a,
229  #define Y(a) a,
230 
231  enum CPF
232  {
235  };
236 
237  #undef Y
238  #undef X
239 
240 
241  const char * aFilter[CPERF_MAX];
242  const char * aName[CPERF_MAX];
243 
244  virtual int NrOfCounters(void)
245  {
246  return CPERF_MAX;
247  }
248 
249  virtual const char * ToName(int iIndex)
250  {
251 
252  switch (iIndex)
253  {
254  #define X(a, b, c) case a : return b;
255  #define Y(a) case a : return #a;
256 
258 
259  #undef Y
260  #undef X
261 
262  default:
263  return NULL;
264  }
265  }
266 
267  virtual const char * ToFilter(int iIndex)
268  {
269  switch (iIndex)
270  {
271  #define X(a, b, c) case a : return c;
272  #define Y(a) case a : return #a;
273 
275 
276  #undef Y
277  #undef X
278 
279  default:
280  return NULL;
281  }
282  }
283 
284  virtual const char * UniqueMemName(void)
285  {
286  return "Sirius";
287  }
288 };
289 
290 
291 
292 
virtual const char * ToName(int iIndex)
const char * aName[CPERF_MAX]
virtual const char * ToFilter(int iIndex)
virtual int NrOfCounters(void)
const char * aFilter[CPERF_MAX]
#define COUNTER_TABLE
virtual const char * UniqueMemName(void)