FD.io VPP  v18.10-32-g1161dda
Vector Packet Processing
stat_segment.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018 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:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
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.
14  */
15 
16 #ifndef included_stat_segment_h
17 #define included_stat_segment_h
18 
19 #include <stdatomic.h>
20 #include <vlib/vlib.h>
21 #include <vppinfra/socket.h>
22 
23 /* Default socket to exchange segment fd */
24 #define STAT_SEGMENT_SOCKET_FILE "/run/vpp/stats.sock"
25 
26 typedef enum
27 {
34 
35 typedef enum
36 {
48 
49 #define foreach_stat_segment_counter_name \
50  _(VECTOR_RATE, SCALAR_INDEX, vector_rate,) \
51  _(INPUT_RATE, SCALAR_INDEX, input_rate,) \
52  _(LAST_UPDATE, SCALAR_INDEX, last_update,) \
53  _(LAST_STATS_CLEAR, SCALAR_INDEX, last_stats_clear,) \
54  _(HEARTBEAT, SCALAR_INDEX, heartbeat,) \
55  _(NODE_CLOCKS, COUNTER_VECTOR_SIMPLE, clocks, /node) \
56  _(NODE_VECTORS, COUNTER_VECTOR_SIMPLE, vectors, /node) \
57  _(NODE_CALLS, COUNTER_VECTOR_SIMPLE, calls, /node) \
58  _(NODE_SUSPENDS, COUNTER_VECTOR_SIMPLE, suspends, /node)
59 
60 typedef struct
61 {
63  union {
64  uint64_t offset;
65  uint64_t index;
66  uint64_t value;
67  };
68  uint64_t offset_vector;
69  char name[128]; // TODO change this to pointer to "somewhere"
71 
72 /* Default stat segment 32m */
73 #define STAT_SEGMENT_DEFAULT_SIZE (32<<20)
74 
75 /*
76  * Shared header first in the shared memory segment.
77  */
78 typedef struct
79 {
80  atomic_int_fast64_t epoch;
81  atomic_int_fast64_t in_progress;
82  atomic_int_fast64_t directory_offset;
83  atomic_int_fast64_t error_offset;
84  atomic_int_fast64_t stats_offset;
86 
87 static inline uint64_t
88 stat_segment_offset (void *start, void *data)
89 {
90  return (char *) data - (char *) start;
91 }
92 
93 static inline void *
94 stat_segment_pointer (void *start, uint64_t offset)
95 {
96  return ((char *) start + offset);
97 }
98 
99 typedef struct
100 {
101  /* statistics segment */
107  ssize_t memory_size;
109  void *heap;
110  stat_segment_shared_header_t *shared_header; /* pointer to shared memory segment */
111  int memfd;
112 
115 
117 
118 #endif
Definition: stat_segment.h:60
stat_segment_main_t stat_segment_main
Definition: stat_segment.c:25
stat_segment_shared_header_t * shared_header
Definition: stat_segment.h:110
uint64_t index
Definition: stat_segment.h:65
stat_segment_directory_entry_t * directory_vector
Definition: stat_segment.h:103
unsigned long u64
Definition: types.h:89
stat_directory_type_t
Definition: stat_segment.h:26
static uint64_t stat_segment_offset(void *start, void *data)
Definition: stat_segment.h:88
unsigned char u8
Definition: types.h:56
atomic_int_fast64_t in_progress
Definition: stat_segment.h:81
uint64_t value
Definition: stat_segment.h:66
static void * stat_segment_pointer(void *start, uint64_t offset)
Definition: stat_segment.h:94
uint64_t offset
Definition: stat_segment.h:64
stat_segment_counter_t
Definition: stat_segment.h:35
u8 name[64]
Definition: memclnt.api:151
uint64_t offset_vector
Definition: stat_segment.h:68
struct _socket_t clib_socket_t
atomic_int_fast64_t epoch
Definition: stat_segment.h:80
template key/value backing page structure
Definition: bihash_doc.h:44
uword * directory_vector_by_name
Definition: stat_segment.h:102
u64 uword
Definition: types.h:112
clib_socket_t * socket
Definition: stat_segment.h:105
atomic_int_fast64_t stats_offset
Definition: stat_segment.h:84
atomic_int_fast64_t error_offset
Definition: stat_segment.h:83
clib_spinlock_t * stat_segment_lockp
Definition: stat_segment.h:104
atomic_int_fast64_t directory_offset
Definition: stat_segment.h:82
stat_directory_type_t type
Definition: stat_segment.h:62