FD.io VPP  v16.06
Vector Packet Processing
node.h
Go to the documentation of this file.
1 /*
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:
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  * node.h: VLIB processing nodes
17  *
18  * Copyright (c) 2008 Eliot Dresselhaus
19  *
20  * Permission is hereby granted, free of charge, to any person obtaining
21  * a copy of this software and associated documentation files (the
22  * "Software"), to deal in the Software without restriction, including
23  * without limitation the rights to use, copy, modify, merge, publish,
24  * distribute, sublicense, and/or sell copies of the Software, and to
25  * permit persons to whom the Software is furnished to do so, subject to
26  * the following conditions:
27  *
28  * The above copyright notice and this permission notice shall be
29  * included in all copies or substantial portions of the Software.
30  *
31  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
34  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
35  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
36  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
37  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38  */
39 
40 #ifndef included_vlib_node_h
41 #define included_vlib_node_h
42 
43 #include <vppinfra/longjmp.h>
44 #include <vppinfra/timing_wheel.h>
45 #include <vlib/trace.h> /* for vlib_trace_filter_t */
46 
47 /* Forward declaration. */
48 struct vlib_node_runtime_t;
49 struct vlib_frame_t;
50 
51 /* Internal nodes (including output nodes) move data from node to
52  node (or out of the graph for output nodes). */
53 typedef uword (vlib_node_function_t) (struct vlib_main_t * vm,
54  struct vlib_node_runtime_t * node,
55  struct vlib_frame_t * frame);
56 
57 typedef enum {
58  /* An internal node on the call graph (could be output). */
60 
61  /* Nodes which input data into the processing graph.
62  Input nodes are called for each iteration of main loop. */
64 
65  /* Nodes to be called before all input nodes.
66  Used, for example, to clean out driver TX rings before
67  processing input. */
69 
70  /* "Process" nodes which can be suspended and later resumed. */
72 
75 
76 typedef struct _vlib_node_registration {
77  /* Vector processing function for this node. */
78  vlib_node_function_t * function;
79 
80  /* Node name. */
81  char * name;
82 
83  /* Name of sibling (if applicable). */
84  char * sibling_of;
85 
86  /* Node index filled in by registration. */
87  u32 index;
88 
89  /* Type of this node. */
91 
92  /* Error strings indexed by error code for this node. */
93  char ** error_strings;
94 
95  /* Buffer format/unformat for this node. */
96  format_function_t * format_buffer;
97  unformat_function_t * unformat_buffer;
98 
99  /* Trace format/unformat for this node. */
100  format_function_t * format_trace;
101  unformat_function_t * unformat_trace;
102 
103  /* Function to validate incoming frames. */
104  u8 * (* validate_frame) (struct vlib_main_t * vm,
105  struct vlib_node_runtime_t *,
106  struct vlib_frame_t * f);
107 
108  /* Per-node runtime data. */
109  void * runtime_data;
110 
111  /* Process stack size. */
112  u16 process_log2_n_stack_bytes;
113 
114  /* Number of bytes of per-node run time data. */
115  u8 runtime_data_bytes;
116 
117  /* State for input nodes. */
118  u8 state;
119 
120  /* Node flags. */
121  u16 flags;
122 
123  /* Size of scalar and vector arguments in bytes. */
125 
126  /* Number of error codes used by this node. */
127  u16 n_errors;
128 
129  /* Number of next node names that follow. */
130  u16 n_next_nodes;
131 
132  /* Constructor link-list, don't ask... */
133  struct _vlib_node_registration * next_registration;
134 
135  /* Names of next nodes which this node feeds into. */
136  char * next_nodes[];
137 
139 
140 #define VLIB_REGISTER_NODE(x,...) \
141  __VA_ARGS__ vlib_node_registration_t x; \
142 static void __vlib_add_node_registration_##x (void) \
143  __attribute__((__constructor__)) ; \
144 static void __vlib_add_node_registration_##x (void) \
145 { \
146  vlib_main_t * vm = vlib_get_main(); \
147  x.next_registration = vm->node_main.node_registrations; \
148  vm->node_main.node_registrations = &x; \
149 } \
150 __VA_ARGS__ vlib_node_registration_t x
151 
154 {
155  c = clib_elf_section_data_next (c, c->n_next_nodes * sizeof (c->next_nodes[0]));
156  return c;
157 }
158 
159 typedef struct {
160  /* Total calls, clock ticks and vector elements processed for this node. */
161  u64 calls, vectors, clocks, suspends;
165 
166 #define foreach_vlib_node_state \
167  /* Input node is called each iteration of main loop. \
168  This is the default (zero). */ \
169  _ (POLLING) \
170  /* Input node is called when device signals an interrupt. */ \
171  _ (INTERRUPT) \
172  /* Input node is never called. */ \
173  _ (DISABLED)
174 
175 typedef enum {
176 #define _(f) VLIB_NODE_STATE_##f,
178 #undef _
181 
182 typedef struct vlib_node_t {
183  /* Vector processing function for this node. */
185 
186  /* Node name. */
187  u8 * name;
188 
189  /* Node name index in elog string table. */
191 
192  /* Total statistics for this node. */
194 
195  /* Saved values as of last clear (or zero if never cleared).
196  Current values are always stats_total - stats_last_clear. */
198 
199  /* Type of this node. */
201 
202  /* Node index. */
204 
205  /* Index of corresponding node runtime. */
207 
208  /* Runtime data for this node. */
209  void * runtime_data;
210 
211  /* Node flags. */
213 
214  /* Processing function keeps frame. Tells node dispatching code not
215  to free frame after dispatch is done. */
216 #define VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH (1 << 0)
217 
218  /* Node counts as output/drop/punt node for stats purposes. */
219 #define VLIB_NODE_FLAG_IS_OUTPUT (1 << 1)
220 #define VLIB_NODE_FLAG_IS_DROP (1 << 2)
221 #define VLIB_NODE_FLAG_IS_PUNT (1 << 3)
222 #define VLIB_NODE_FLAG_IS_HANDOFF (1 << 4)
223 
224  /* Set if current node runtime has traced vectors. */
225 #define VLIB_NODE_FLAG_TRACE (1 << 5)
226 
227 #define VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE (1 << 6)
228 #define VLIB_NODE_FLAG_SWITCH_FROM_POLLING_TO_INTERRUPT_MODE (1 << 7)
229 
230  /* State for input nodes. */
232 
233  /* Number of bytes of run time data. */
235 
236  /* Number of error codes used by this node. */
238 
239  /* Size of scalar and vector arguments in bytes. */
240  u16 scalar_size, vector_size;
241 
242  /* Handle/index in error heap for this node. */
245 
246  /* Error strings indexed by error code for this node. */
247  char ** error_strings;
248 
249  /* Vector of next node names.
250  Only used before next_nodes array is initialized. */
252 
253  /* Next node indices for this node. */
255 
256  /* Name of node that we are sibling of. */
257  char * sibling_of;
258 
259  /* Bitmap of all of this node's siblings. */
261 
262  /* Total number of vectors sent to each next node. */
264 
265  /* Hash table mapping next node index into slot in
266  next_nodes vector. Quickly determines whether this node
267  is connected to given next node and, if so, with which slot. */
269 
270  /* Bitmap of node indices which feed this node. */
272 
273  /* Node/next-index which own enqueue rights with to this node. */
274  u32 owner_node_index, owner_next_index;
275 
276  /* Buffer format/unformat for this node. */
279 
280  /* Trace buffer format/unformat for this node. */
282 
283  /* Function to validate incoming frames. */
284  u8 * (* validate_frame) (struct vlib_main_t * vm,
285  struct vlib_node_runtime_t *,
286  struct vlib_frame_t * f);
287 } vlib_node_t;
288 
289 #define VLIB_INVALID_NODE_INDEX ((u32) ~0)
290 
291 /* Max number of vector elements to process at once per node. */
292 #define VLIB_FRAME_SIZE 256
293 #define VLIB_FRAME_ALIGN VLIB_MAX_CPUS
294 
295 /* Calling frame (think stack frame) for a node. */
296 typedef struct vlib_frame_t {
297  /* Frame flags. */
299 
300  /* Number of scalar bytes in arguments. */
302 
303  /* Number of bytes per vector argument. */
305 
306  /* Number of vector elements currently in frame. */
308 
309  /* Owner cpuid / heap id */
311 
312  /* Scalar and vector arguments to next node. */
313  u8 arguments[0];
314 } vlib_frame_t;
315 
316 typedef struct {
317  /* Frame index. */
319 
320  /* Node runtime for this next. */
322 
323  /* Next frame flags. */
325 
326  /* Reflects node frame-used flag for this next. */
327 #define VLIB_FRAME_NO_FREE_AFTER_DISPATCH \
328  VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH
329 
330  /* This next frame owns enqueue to node
331  corresponding to node_runtime_index. */
332 #define VLIB_FRAME_OWNER (1 << 15)
333 
334  /* Set when frame has been allocated for this next. */
335 #define VLIB_FRAME_IS_ALLOCATED VLIB_NODE_FLAG_IS_OUTPUT
336 
337  /* Set when frame has been added to pending vector. */
338 #define VLIB_FRAME_PENDING VLIB_NODE_FLAG_IS_DROP
339 
340  /* Set when frame is to be freed after dispatch. */
341 #define VLIB_FRAME_FREE_AFTER_DISPATCH VLIB_NODE_FLAG_IS_PUNT
342 
343  /* Set when frame has traced packets. */
344 #define VLIB_FRAME_TRACE VLIB_NODE_FLAG_TRACE
345 
346  /* Number of vectors enqueue to this next since last overflow. */
349 
350 always_inline void
352 {
353  memset (nf, 0, sizeof (nf[0]));
354  nf->frame_index = ~0;
355  nf->node_runtime_index = ~0;
356 }
357 
358 /* A frame pending dispatch by main loop. */
359 typedef struct {
360  /* Node and runtime for this frame. */
362 
363  /* Frame index (in the heap). */
365 
366  /* Start of next frames for this node. */
368 
369  /* Special value for next_frame_index when there is no next frame. */
370 #define VLIB_PENDING_FRAME_NO_NEXT_FRAME ((u32) ~0)
372 
373 typedef struct vlib_node_runtime_t {
374  /* Node function to call. */
376 
377  /* Vector of errors for this node. */
379 
380  /* Number of clock cycles. */
382 
383  /* Maximum clock cycle for an invocation. */
385 
386  /* Number of vectors in the recorded max_clock. */
388 
389  /* Number of calls. */
391 
392  /* Number of vector elements processed by this node. */
394 
395  /* Start of next frames for this node. */
397 
398  /* Node index. */
400 
401  /* For input nodes: decremented on each main loop interation until it reaches zero
402  and function is called. Allows some input nodes to be called
403  more than others. */
405 
406  /* Saved main loop counter of last dispatch of this node. */
408 
409  u32 main_loop_vector_stats[2];
410 
411  /* Copy of main node flags. */
413 
414  /* Input node state. */
416 
418 
419  /* Next frame index that vector arguments were last enqueued to
420  last time this node ran. Set to zero before first run
421  of this node. */
423 
424  /* CPU this node runs on */
426 
427  /* Function dependent node-runtime. */
428  uword runtime_data[(128
429  - 1 * sizeof (vlib_node_function_t *)
430  - 1 * sizeof (vlib_error_t *)
431  - 11 * sizeof (u32)
432  - 5 * sizeof (u16)) / sizeof (uword)];
434 
435 typedef struct {
436  /* Number of allocated frames for this scalar/vector size. */
438 
439  /* Vector of free frame indices for this scalar/vector size. */
442 
443 typedef struct {
444  /* Users opaque value for event type. */
447 
448 typedef struct {
449  /* Node runtime for this process. */
451 
452  /* Where to longjmp when process is done. */
454 
455 #define VLIB_PROCESS_RETURN_LONGJMP_RETURN ((uword) ~0 - 0)
456 #define VLIB_PROCESS_RETURN_LONGJMP_SUSPEND ((uword) ~0 - 1)
457 
458  /* Where to longjmp to resume node after suspend. */
460 #define VLIB_PROCESS_RESUME_LONGJMP_SUSPEND 0
461 #define VLIB_PROCESS_RESUME_LONGJMP_RESUME 1
462 
464 #define VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_CLOCK (1 << 0)
465 #define VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_EVENT (1 << 1)
466  /* Set to indicate that this process has been added to resume vector. */
467 #define VLIB_PROCESS_RESUME_PENDING (1 << 2)
468 
469  /* Process function is currently running. */
470 #define VLIB_PROCESS_IS_RUNNING (1 << 3)
471 
472  /* Size of process stack. */
474 
476 
477  /* Number of times this process was suspended. */
479 
480  /* Vectors of pending event data indexed by event type index. */
482 
483  /* Bitmap of event type-indices with non-empty vectors. */
485 
486  /* Bitmap of event type-indices which are one time events. */
488 
489  /* Type is opaque pointer -- typically a pointer to an event handler
490  function. Hash table to map opaque to a type index. */
492 
493  /* Pool of currently valid event types. */
495 
496  /* When suspending saves cpu cycle counter when process is to be resumed. */
498 
499  /* Default output function and its argument for any CLI outputs
500  within the process. */
503 
504 #ifdef CLIB_UNIX
505  /* Pad to a multiple of the page size so we can mprotect process stacks */
506 #define PAGE_SIZE_MULTIPLE 0x1000
507 #define ALIGN_ON_MULTIPLE_PAGE_BOUNDARY_FOR_MPROTECT __attribute__ ((aligned (PAGE_SIZE_MULTIPLE)))
508 #else
509 #define ALIGN_ON_MULTIPLE_PAGE_BOUNDARY_FOR_MPROTECT
510 #endif
511 
512  /* Process stack. Starts here and extends 2^log2_n_stack_bytes
513  bytes. */
514 
515 #define VLIB_PROCESS_STACK_MAGIC (0xdead7ead)
517 } vlib_process_t __attribute__ ((aligned (CLIB_CACHE_LINE_BYTES)));
518 
519 #ifdef CLIB_UNIX
520  /* Ensure that the stack is aligned on the multiple of the page size */
522  [(sizeof(vlib_process_t) - PAGE_SIZE_MULTIPLE) == 0 ? 0 : -1];
523 #endif
524 
525 typedef struct {
527 
530 
531 typedef struct {
533 
535 
536  /* n_data_elts * n_data_elt_bytes */
538 
539  /* Process node & event type to be used to signal event. */
541 
543 
544  union {
545  u8 inline_event_data[64 - 3 * sizeof (u32) - 2 * sizeof (u16)];
546 
547  /* Vector of event data used only when data does not fit inline. */
549  };
551 
554 { return d & 1; }
555 
558 { return 0 + 2*i; }
559 
562 { return 1 + 2*i; }
563 
566 { return d / 2; }
567 
568 typedef struct {
569  /* Public nodes. */
571 
572  /* Node index hashed by node name. */
574 
576 #define VLIB_NODE_MAIN_RUNTIME_STARTED (1 << 0)
577 
578  /* Nodes segregated by type for cache locality.
579  Does not apply to nodes of type VLIB_NODE_TYPE_INTERNAL. */
581 
582  /* Node runtime indices for input nodes with pending interrupts. */
584 
585  /* Input nodes are switched from/to interrupt to/from polling mode
586  when average vector length goes above/below polling/interrupt
587  thresholds. */
590 
591  /* Vector of next frames. */
593 
594  /* Vector of internal node's frames waiting to be called. */
596 
597  /* Timing wheel for scheduling time-based node dispatch. */
599 
601 
602  /* Opaque data vector added via timing_wheel_advance. */
604 
605  /* CPU time of next process to be ready on timing wheel. */
607 
608  /* Vector of process nodes.
609  One for each node of type VLIB_NODE_TYPE_PROCESS. */
611 
612  /* Current running process or ~0 if no process running. */
614 
615  /* Pool of pending process frames. */
617 
618  /* Vector of event data vectors pending recycle. */
620 
621  /* Current counts of nodes in each state. */
622  u32 input_node_counts_by_state[VLIB_N_NODE_STATE];
623 
624  /* Hash of (scalar_size,vector_size) to frame_sizes index. */
626 
627  /* Per-size frame allocation information. */
629 
630  /* Time of last node runtime stats clear. */
632 
633  /* Node registrations added by constructors */
636 
637 #endif /* included_vlib_node_h */
uword * sibling_bitmap
Definition: node.h:260
u32 * next_nodes
Definition: node.h:254
uword output_function_arg
Definition: node.h:502
uword( vlib_node_function_t)(struct vlib_main_t *vm, struct vlib_node_runtime_t *node, struct vlib_frame_t *frame)
Definition: node.h:53
struct vlib_node_t vlib_node_t
u16 vector_size
Definition: node.h:240
u32 error_heap_index
Definition: node.h:244
u32 next_frame_index
Definition: node.h:396
sll srl srl sll sra u16x4 i
Definition: vector_sse2.h:267
u32 interrupt_threshold_vector_length
Definition: node.h:589
uword( unformat_function_t)(unformat_input_t *input, va_list *args)
Definition: format.h:229
vlib_process_t ** processes
Definition: node.h:610
vlib_node_runtime_t node_runtime
Definition: node.h:450
always_inline uword vlib_timing_wheel_data_is_timed_event(u32 d)
Definition: node.h:553
u32 n_suspends
Definition: node.h:478
bad routing header type(not 4)") sr_error (NO_MORE_SEGMENTS
u32 index
Definition: node.h:203
format_function_t * format_trace
Definition: node.h:281
void ** pending_event_data_by_type_index
Definition: node.h:481
u32 current_process_index
Definition: node.h:613
u16 flags
Definition: node.h:212
char ** error_strings
Definition: node.h:247
u64 cpu_time_next_process_ready
Definition: node.h:606
struct _vlib_node_registration vlib_node_registration_t
u32 clocks_since_last_overflow
Definition: node.h:381
void * runtime_data
Definition: node.h:209
vlib_error_t * errors
Definition: node.h:378
always_inline u32 vlib_timing_wheel_data_set_timed_event(u32 i)
Definition: node.h:561
vlib_node_state_t
Definition: node.h:175
u8 state
Definition: node.h:231
u32 * pending_interrupt_node_runtime_indices
Definition: node.h:583
u32 input_main_loops_per_call
Definition: node.h:404
vlib_node_stats_t stats_last_clear
Definition: node.h:197
u32 main_loop_count_last_dispatch
Definition: node.h:407
always_inline uword vlib_timing_wheel_data_get_index(u32 d)
Definition: node.h:565
void ** recycled_event_data_vectors
Definition: node.h:619
#define always_inline
Definition: clib.h:84
u16 log2_n_stack_bytes
Definition: node.h:473
vlib_node_t ** nodes
Definition: node.h:570
u32 vectors_since_last_overflow
Definition: node.h:393
char ** next_node_names
Definition: node.h:251
char * sibling_of
Definition: node.h:257
unsigned long u64
Definition: types.h:89
u32 * free_frame_indices
Definition: node.h:440
u64 max_clock_n
Definition: node.h:163
always_inline void vlib_next_frame_init(vlib_next_frame_t *nf)
Definition: node.h:351
u32 calls_since_last_overflow
Definition: node.h:390
u32 next_frame_index
Definition: node.h:367
u32 error_heap_handle
Definition: node.h:243
vlib_node_stats_t stats_total
Definition: node.h:193
u32 frame_index
Definition: node.h:318
u32 vlib_error_t
Definition: error.h:44
vlib_signal_timed_event_data_t * signal_timed_event_data_pool
Definition: node.h:600
vlib_node_type_t
Definition: node.h:57
f64 time_last_runtime_stats_clear
Definition: node.h:631
vlib_node_registration_t * node_registrations
Definition: node.h:634
u32 n_alloc_frames
Definition: node.h:437
u32 polling_threshold_vector_length
Definition: node.h:588
u64 * n_vectors_by_next_node
Definition: node.h:263
format_function_t * format_buffer
Definition: node.h:277
#define foreach_vlib_node_state
Definition: node.h:166
uword * frame_size_hash
Definition: node.h:625
u8 * name
Definition: node.h:187
timing_wheel_t timing_wheel
Definition: node.h:598
u32 owner_node_index
Definition: node.h:274
u16 n_vectors
Definition: node.h:307
u32 runtime_index
Definition: node.h:206
vlib_pending_frame_t * pending_frames
Definition: node.h:595
u32 node_runtime_index
Definition: node.h:361
unformat_function_t * unformat_buffer
Definition: node.h:278
uword * node_by_name
Definition: node.h:573
u32 stack[0] ALIGN_ON_MULTIPLE_PAGE_BOUNDARY_FOR_MPROTECT
Definition: node.h:516
struct vlib_node_runtime_t vlib_node_runtime_t
always_inline u32 vlib_timing_wheel_data_set_suspended_process(u32 i)
Definition: node.h:557
uword * one_time_event_type_bitmap
Definition: node.h:487
#define clib_elf_section_data_next(a, extra)
Definition: elf_clib.h:57
u16 cached_next_index
Definition: node.h:422
unsigned int u32
Definition: types.h:88
struct vlib_frame_t vlib_frame_t
u16 flags
Definition: node.h:298
void( vlib_cli_output_function_t)(uword arg, u8 *buffer, uword buffer_bytes)
Definition: cli.h:127
u16 cpu_index
Definition: node.h:310
vhost_vring_state_t state
Definition: vhost-user.h:77
uword * next_slot_by_node
Definition: node.h:268
#define PAGE_SIZE_MULTIPLE
Definition: node.h:506
uword * prev_node_bitmap
Definition: node.h:271
u8 *( format_function_t)(u8 *s, va_list *args)
Definition: format.h:48
char assert_process_stack_must_be_aligned_exactly_to_page_size_multiple[(sizeof(vlib_process_t)-PAGE_SIZE_MULTIPLE)==0?0:-1]
Definition: node.h:522
u64 uword
Definition: types.h:112
unsigned short u16
Definition: types.h:57
vlib_process_event_type_t * event_type_pool
Definition: node.h:494
u32 * data_from_advancing_timing_wheel
Definition: node.h:603
double f64
Definition: types.h:140
unsigned char u8
Definition: types.h:56
vlib_pending_frame_t * suspended_process_frames
Definition: node.h:616
u8 vector_size
Definition: node.h:304
vlib_next_frame_t * next_frames
Definition: node.h:592
uword * event_type_index_by_type_opaque
Definition: node.h:491
vlib_frame_size_t * frame_sizes
Definition: node.h:628
u16 flags
Definition: node.h:463
vlib_node_type_t type
Definition: node.h:200
u32 name_elog_string
Definition: node.h:190
u16 n_errors
Definition: node.h:237
u32 suspended_process_frame_index
Definition: node.h:475
always_inline vlib_node_registration_t * vlib_node_next_registered(vlib_node_registration_t *c)
Definition: node.h:153
u64 resume_cpu_time
Definition: node.h:497
clib_longjmp_t return_longjmp
Definition: node.h:453
u32 node_runtime_index
Definition: node.h:321
u8 scalar_size
Definition: node.h:301
vlib_cli_output_function_t * output_function
Definition: node.h:501
clib_longjmp_t resume_longjmp
Definition: node.h:459
u32 flags
Definition: vhost-user.h:73
#define CLIB_CACHE_LINE_BYTES
Definition: cache.h:67
u8 runtime_data_bytes
Definition: node.h:234
u32 vectors_since_last_overflow
Definition: node.h:347
uword * non_empty_event_type_bitmap
Definition: node.h:484