2 * Copyright (c) 2015 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
15 #ifndef __included_stats_h__
16 #define __included_stats_h__
19 #include <vlib/vlib.h>
20 #include <vnet/vnet.h>
21 #include <vnet/interface.h>
23 #include <vlib/threads.h>
24 #include <vnet/fib/fib_table.h>
25 #include <vnet/mfib/mfib_table.h>
26 #include <vlib/unix/unix.h>
27 #include <vlibmemory/api.h>
28 #include <vlibapi/api_helper_macros.h>
29 #include <svm/queue.h>
35 volatile u32 release_hint;
39 } data_structure_lock_t;
42 * @brief stats request registration indexes
45 /* from .../vnet/vnet/ip/lookup.c. Yuck */
47 typedef CLIB_PACKED (struct
49 ip4_address_t address;
50 u32 address_length: 6;
57 ip6_address_t address;
64 ip4_route_t *ip4routes;
65 ip6_route_t *ip6routes;
66 mfib_prefix_t *mroutes;
80 } client_registration_reply_t;
84 #define stats_reg(n) IDX_##n,
85 #include <vpp/stats/stats.reg>
92 //Standard client information
94 vpe_client_registration_t *clients;
97 } vpe_client_stats_registration_t;
103 pthread_t thread_self;
104 pthread_t thread_handle;
106 u32 stats_poll_interval_in_seconds;
110 * stats_registrations is a vector, indexed by
111 * IDX_xxxx_COUNTER generated for each streaming
112 * stat a client can register for. (see stats.reg)
114 * The values in the vector refer to pools.
116 * The pool is of type vpe_client_stats_registration_t
118 * This typedef consists of:
120 * u32 item: This is the instance of the IDX_xxxx_COUNTER a
121 * client is interested in.
122 * vpe_client_registration_t *clients: The list of clients interested.
125 * stats_registrations[IDX_INTERFACE_SIMPLE_COUNTERS] refers to a pool
126 * containing elements:
128 * u32 item = sw_if_index1
129 * clients = ["clienta","clientb"]
131 * When clients == NULL the pool element is freed. When the pool is empty
134 * 0 == pool_elts(stats_registrations[IDX_INTERFACE_SIMPLE_COUNTERS]
136 * then there is no need to process INTERFACE_SIMPLE_COUNTERS
138 * Note that u32 item = ~0 is the simple case for ALL interfaces or fibs.
142 uword **stats_registration_hash;
143 vpe_client_stats_registration_t **stats_registrations;
145 /* control-plane data structure lock */
146 data_structure_lock_t *data_structure_lock;
148 /* bail out of FIB walk if set */
149 clib_longjmp_t jmp_buf;
151 /* Vectors for Distribution funcs: do_ip4_fibs and do_ip6_fibs. */
152 do_ip46_fibs_t do_ip46_fibs;
155 Working vector vars so as to not thrash memory allocator.
156 Has effect of making "static"
158 vpe_client_stats_registration_t **regs_tmp;
159 vpe_client_registration_t **clients_tmp;
161 /* statistics segment */
162 ssvm_private_t stat_segment;
163 uword *counter_vector_by_name;
164 clib_spinlock_t *stat_segment_lockp;
166 /* Pointers to scalar stats maintained by the stat segment process */
168 f64 *vector_rate_ptr;
171 vlib_main_t *vlib_main;
172 vnet_main_t *vnet_main;
173 vnet_interface_main_t *interface_main;
174 api_main_t *api_main;
177 extern stats_main_t stats_main;
179 #define STAT_SEGMENT_OPAQUE_LOCK 0
180 #define STAT_SEGMENT_OPAQUE_DIR 1
181 #define STAT_SEGMENT_OPAQUE_EPOCH 2
185 STAT_DIR_TYPE_ILLEGAL = 0,
186 STAT_DIR_TYPE_SCALAR_POINTER,
187 STAT_DIR_TYPE_VECTOR_POINTER,
188 STAT_DIR_TYPE_COUNTER_VECTOR,
189 STAT_DIR_TYPE_ERROR_INDEX,
190 } stat_directory_type_t;
194 stat_directory_type_t type;
196 } stat_segment_directory_entry_t;
198 #endif /* __included_stats_h__ */
201 * fd.io coding-style-patch-verification: ON
204 * eval: (c-set-style "gnu")