FD.io VPP  v17.01.1-3-gc6833f8
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/cpu.h>
44 #include <vppinfra/longjmp.h>
45 #include <vppinfra/timing_wheel.h>
46 #include <vlib/trace.h> /* for vlib_trace_filter_t */
47 
48 /* Forward declaration. */
49 struct vlib_node_runtime_t;
50 struct vlib_frame_t;
51 
52 /* Internal nodes (including output nodes) move data from node to
53  node (or out of the graph for output nodes). */
54 typedef uword (vlib_node_function_t) (struct vlib_main_t * vm,
55  struct vlib_node_runtime_t * node,
56  struct vlib_frame_t * frame);
57 
58 typedef enum
59 {
60  /* An internal node on the call graph (could be output). */
62 
63  /* Nodes which input data into the processing graph.
64  Input nodes are called for each iteration of main loop. */
66 
67  /* Nodes to be called before all input nodes.
68  Used, for example, to clean out driver TX rings before
69  processing input. */
71 
72  /* "Process" nodes which can be suspended and later resumed. */
74 
77 
78 typedef struct _vlib_node_registration
79 {
80  /* Vector processing function for this node. */
81  vlib_node_function_t *function;
82 
83  /* Node name. */
84  char *name;
85 
86  /* Name of sibling (if applicable). */
87  char *sibling_of;
88 
89  /* Node index filled in by registration. */
90  u32 index;
91 
92  /* Type of this node. */
93  vlib_node_type_t type;
94 
95  /* Error strings indexed by error code for this node. */
96  char **error_strings;
97 
98  /* Buffer format/unformat for this node. */
99  format_function_t *format_buffer;
100  unformat_function_t *unformat_buffer;
101 
102  /* Trace format/unformat for this node. */
103  format_function_t *format_trace;
104  unformat_function_t *unformat_trace;
105 
106  /* Function to validate incoming frames. */
107  u8 *(*validate_frame) (struct vlib_main_t * vm,
108  struct vlib_node_runtime_t *,
109  struct vlib_frame_t * f);
110 
111  /* Per-node runtime data. */
112  void *runtime_data;
113 
114  /* Process stack size. */
115  u16 process_log2_n_stack_bytes;
116 
117  /* Number of bytes of per-node run time data. */
118  u8 runtime_data_bytes;
119 
120  /* State for input nodes. */
121  u8 state;
122 
123  /* Node flags. */
124  u16 flags;
125 
126  /* Size of scalar and vector arguments in bytes. */
128 
129  /* Number of error codes used by this node. */
130  u16 n_errors;
131 
132  /* Number of next node names that follow. */
133  u16 n_next_nodes;
134 
135  /* Constructor link-list, don't ask... */
136  struct _vlib_node_registration *next_registration;
137 
138  /* Names of next nodes which this node feeds into. */
139  char *next_nodes[];
140 
142 
143 #define VLIB_REGISTER_NODE(x,...) \
144  __VA_ARGS__ vlib_node_registration_t x; \
145 static void __vlib_add_node_registration_##x (void) \
146  __attribute__((__constructor__)) ; \
147 static void __vlib_add_node_registration_##x (void) \
148 { \
149  vlib_main_t * vm = vlib_get_main(); \
150  x.next_registration = vm->node_main.node_registrations; \
151  vm->node_main.node_registrations = &x; \
152 } \
153 __VA_ARGS__ vlib_node_registration_t x
154 
155 #if CLIB_DEBUG > 0
156 #define VLIB_NODE_FUNCTION_CLONE_TEMPLATE(arch, fn)
157 #define VLIB_NODE_FUNCTION_MULTIARCH_CLONE(fn)
158 #define VLIB_NODE_FUNCTION_MULTIARCH(node, fn)
159 #else
160 #define VLIB_NODE_FUNCTION_CLONE_TEMPLATE(arch, fn, tgt) \
161  uword \
162  __attribute__ ((flatten)) \
163  __attribute__ ((target (tgt))) \
164  CLIB_CPU_OPTIMIZED \
165  fn ## _ ## arch ( struct vlib_main_t * vm, \
166  struct vlib_node_runtime_t * node, \
167  struct vlib_frame_t * frame) \
168  { return fn (vm, node, frame); }
169 
170 #define VLIB_NODE_FUNCTION_MULTIARCH_CLONE(fn) \
171  foreach_march_variant(VLIB_NODE_FUNCTION_CLONE_TEMPLATE, fn)
172 
173 #define VLIB_NODE_FUNCTION_MULTIARCH(node, fn) \
174  VLIB_NODE_FUNCTION_MULTIARCH_CLONE(fn) \
175  CLIB_MULTIARCH_SELECT_FN(fn, static inline) \
176  static void __attribute__((__constructor__)) \
177  __vlib_node_function_multiarch_select_##node (void) \
178  { node.function = fn ## _multiarch_select(); }
179 #endif
180 
183 {
184  c =
186  c->n_next_nodes * sizeof (c->next_nodes[0]));
187  return c;
188 }
189 
190 typedef struct
191 {
192  /* Total calls, clock ticks and vector elements processed for this node. */
193  u64 calls, vectors, clocks, suspends;
197 
198 #define foreach_vlib_node_state \
199  /* Input node is called each iteration of main loop. \
200  This is the default (zero). */ \
201  _ (POLLING) \
202  /* Input node is called when device signals an interrupt. */ \
203  _ (INTERRUPT) \
204  /* Input node is never called. */ \
205  _ (DISABLED)
206 
207 typedef enum
208 {
209 #define _(f) VLIB_NODE_STATE_##f,
211 #undef _
214 
215 typedef struct vlib_node_t
216 {
217  /* Vector processing function for this node. */
219 
220  /* Node name. */
222 
223  /* Node name index in elog string table. */
225 
226  /* Total statistics for this node. */
228 
229  /* Saved values as of last clear (or zero if never cleared).
230  Current values are always stats_total - stats_last_clear. */
232 
233  /* Type of this node. */
234  vlib_node_type_t type;
235 
236  /* Node index. */
238 
239  /* Index of corresponding node runtime. */
241 
242  /* Runtime data for this node. */
244 
245  /* Node flags. */
247 
248  /* Processing function keeps frame. Tells node dispatching code not
249  to free frame after dispatch is done. */
250 #define VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH (1 << 0)
251 
252  /* Node counts as output/drop/punt node for stats purposes. */
253 #define VLIB_NODE_FLAG_IS_OUTPUT (1 << 1)
254 #define VLIB_NODE_FLAG_IS_DROP (1 << 2)
255 #define VLIB_NODE_FLAG_IS_PUNT (1 << 3)
256 #define VLIB_NODE_FLAG_IS_HANDOFF (1 << 4)
257 
258  /* Set if current node runtime has traced vectors. */
259 #define VLIB_NODE_FLAG_TRACE (1 << 5)
260 
261 #define VLIB_NODE_FLAG_SWITCH_FROM_INTERRUPT_TO_POLLING_MODE (1 << 6)
262 #define VLIB_NODE_FLAG_SWITCH_FROM_POLLING_TO_INTERRUPT_MODE (1 << 7)
263 
264  /* State for input nodes. */
266 
267  /* Number of bytes of run time data. */
269 
270  /* Number of error codes used by this node. */
272 
273  /* Size of scalar and vector arguments in bytes. */
274  u16 scalar_size, vector_size;
275 
276  /* Handle/index in error heap for this node. */
279 
280  /* Error strings indexed by error code for this node. */
282 
283  /* Vector of next node names.
284  Only used before next_nodes array is initialized. */
286 
287  /* Next node indices for this node. */
289 
290  /* Name of node that we are sibling of. */
291  char *sibling_of;
292 
293  /* Bitmap of all of this node's siblings. */
295 
296  /* Total number of vectors sent to each next node. */
298 
299  /* Hash table mapping next node index into slot in
300  next_nodes vector. Quickly determines whether this node
301  is connected to given next node and, if so, with which slot. */
303 
304  /* Bitmap of node indices which feed this node. */
306 
307  /* Node/next-index which own enqueue rights with to this node. */
308  u32 owner_node_index, owner_next_index;
309 
310  /* Buffer format/unformat for this node. */
313 
314  /* Trace buffer format/unformat for this node. */
316 
317  /* Function to validate incoming frames. */
318  u8 *(*validate_frame) (struct vlib_main_t * vm,
319  struct vlib_node_runtime_t *,
320  struct vlib_frame_t * f);
321  /* for pretty-printing, not typically valid */
323 } vlib_node_t;
324 
325 #define VLIB_INVALID_NODE_INDEX ((u32) ~0)
326 
327 /* Max number of vector elements to process at once per node. */
328 #define VLIB_FRAME_SIZE 256
329 #define VLIB_FRAME_ALIGN VLIB_MAX_CPUS
330 
331 /* Calling frame (think stack frame) for a node. */
332 typedef struct vlib_frame_t
333 {
334  /* Frame flags. */
336 
337  /* Number of scalar bytes in arguments. */
339 
340  /* Number of bytes per vector argument. */
342 
343  /* Number of vector elements currently in frame. */
345 
346  /* Owner cpuid / heap id */
348 
349  /* Scalar and vector arguments to next node. */
350  u8 arguments[0];
351 } vlib_frame_t;
352 
353 typedef struct
354 {
355  /* Frame index. */
357 
358  /* Node runtime for this next. */
360 
361  /* Next frame flags. */
363 
364  /* Reflects node frame-used flag for this next. */
365 #define VLIB_FRAME_NO_FREE_AFTER_DISPATCH \
366  VLIB_NODE_FLAG_FRAME_NO_FREE_AFTER_DISPATCH
367 
368  /* This next frame owns enqueue to node
369  corresponding to node_runtime_index. */
370 #define VLIB_FRAME_OWNER (1 << 15)
371 
372  /* Set when frame has been allocated for this next. */
373 #define VLIB_FRAME_IS_ALLOCATED VLIB_NODE_FLAG_IS_OUTPUT
374 
375  /* Set when frame has been added to pending vector. */
376 #define VLIB_FRAME_PENDING VLIB_NODE_FLAG_IS_DROP
377 
378  /* Set when frame is to be freed after dispatch. */
379 #define VLIB_FRAME_FREE_AFTER_DISPATCH VLIB_NODE_FLAG_IS_PUNT
380 
381  /* Set when frame has traced packets. */
382 #define VLIB_FRAME_TRACE VLIB_NODE_FLAG_TRACE
383 
384  /* Number of vectors enqueue to this next since last overflow. */
387 
388 always_inline void
390 {
391  memset (nf, 0, sizeof (nf[0]));
392  nf->frame_index = ~0;
393  nf->node_runtime_index = ~0;
394 }
395 
396 /* A frame pending dispatch by main loop. */
397 typedef struct
398 {
399  /* Node and runtime for this frame. */
401 
402  /* Frame index (in the heap). */
404 
405  /* Start of next frames for this node. */
407 
408  /* Special value for next_frame_index when there is no next frame. */
409 #define VLIB_PENDING_FRAME_NO_NEXT_FRAME ((u32) ~0)
411 
412 typedef struct vlib_node_runtime_t
413 {
414  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
415  /* Node function to call. */
417 
418  /* Vector of errors for this node. */
420 
421  /* Number of clock cycles. */
423 
424  /* Maximum clock cycle for an invocation. */
426 
427  /* Number of vectors in the recorded max_clock. */
429 
430  /* Number of calls. */
432 
433  /* Number of vector elements processed by this node. */
435 
436  /* Start of next frames for this node. */
438 
439  /* Node index. */
441 
442  /* For input nodes: decremented on each main loop interation until it reaches zero
443  and function is called. Allows some input nodes to be called
444  more than others. */
446 
447  /* Saved main loop counter of last dispatch of this node. */
449 
450  u32 main_loop_vector_stats[2];
451 
452  /* Copy of main node flags. */
454 
455  /* Input node state. */
457 
459 
460  /* Next frame index that vector arguments were last enqueued to
461  last time this node ran. Set to zero before first run
462  of this node. */
464 
465  /* CPU this node runs on */
467 
468  /* Function dependent node-runtime. */
469  u8 runtime_data[0];
470 }
472 
473 typedef struct
474 {
475  /* Number of allocated frames for this scalar/vector size. */
477 
478  /* Vector of free frame indices for this scalar/vector size. */
481 
482 typedef struct
483 {
484  /* Users opaque value for event type. */
487 
488 typedef struct
489 {
490  /* Node runtime for this process. */
492 
493  /* Where to longjmp when process is done. */
495 
496 #define VLIB_PROCESS_RETURN_LONGJMP_RETURN ((uword) ~0 - 0)
497 #define VLIB_PROCESS_RETURN_LONGJMP_SUSPEND ((uword) ~0 - 1)
498 
499  /* Where to longjmp to resume node after suspend. */
501 #define VLIB_PROCESS_RESUME_LONGJMP_SUSPEND 0
502 #define VLIB_PROCESS_RESUME_LONGJMP_RESUME 1
503 
505 #define VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_CLOCK (1 << 0)
506 #define VLIB_PROCESS_IS_SUSPENDED_WAITING_FOR_EVENT (1 << 1)
507  /* Set to indicate that this process has been added to resume vector. */
508 #define VLIB_PROCESS_RESUME_PENDING (1 << 2)
509 
510  /* Process function is currently running. */
511 #define VLIB_PROCESS_IS_RUNNING (1 << 3)
512 
513  /* Size of process stack. */
515 
517 
518  /* Number of times this process was suspended. */
520 
521  /* Vectors of pending event data indexed by event type index. */
523 
524  /* Bitmap of event type-indices with non-empty vectors. */
526 
527  /* Bitmap of event type-indices which are one time events. */
529 
530  /* Type is opaque pointer -- typically a pointer to an event handler
531  function. Hash table to map opaque to a type index. */
533 
534  /* Pool of currently valid event types. */
536 
537  /* When suspending saves cpu cycle counter when process is to be resumed. */
539 
540  /* Default output function and its argument for any CLI outputs
541  within the process. */
544 
545 #ifdef CLIB_UNIX
546  /* Pad to a multiple of the page size so we can mprotect process stacks */
547 #define PAGE_SIZE_MULTIPLE 0x1000
548 #define ALIGN_ON_MULTIPLE_PAGE_BOUNDARY_FOR_MPROTECT __attribute__ ((aligned (PAGE_SIZE_MULTIPLE)))
549 #else
550 #define ALIGN_ON_MULTIPLE_PAGE_BOUNDARY_FOR_MPROTECT
551 #endif
552 
553  /* Process stack. Starts here and extends 2^log2_n_stack_bytes
554  bytes. */
555 
556 #define VLIB_PROCESS_STACK_MAGIC (0xdead7ead)
558 } vlib_process_t __attribute__ ((aligned (CLIB_CACHE_LINE_BYTES)));
559 
560 #ifdef CLIB_UNIX
561  /* Ensure that the stack is aligned on the multiple of the page size */
562 typedef char
565  -
567  ==
568  0 ? 0 :
569  -1];
570 #endif
571 
572 typedef struct
573 {
575 
578 
579 typedef struct
580 {
582 
584 
585  /* n_data_elts * n_data_elt_bytes */
587 
588  /* Process node & event type to be used to signal event. */
590 
592 
593  union
594  {
595  u8 inline_event_data[64 - 3 * sizeof (u32) - 2 * sizeof (u16)];
596 
597  /* Vector of event data used only when data does not fit inline. */
599  };
600 }
602 
605 {
606  return d & 1;
607 }
608 
611 {
612  return 0 + 2 * i;
613 }
614 
617 {
618  return 1 + 2 * i;
619 }
620 
623 {
624  return d / 2;
625 }
626 
627 typedef struct
628 {
629  /* Public nodes. */
631 
632  /* Node index hashed by node name. */
634 
636 #define VLIB_NODE_MAIN_RUNTIME_STARTED (1 << 0)
637 
638  /* Nodes segregated by type for cache locality.
639  Does not apply to nodes of type VLIB_NODE_TYPE_INTERNAL. */
641 
642  /* Node runtime indices for input nodes with pending interrupts. */
644 
645  /* Input nodes are switched from/to interrupt to/from polling mode
646  when average vector length goes above/below polling/interrupt
647  thresholds. */
650 
651  /* Vector of next frames. */
653 
654  /* Vector of internal node's frames waiting to be called. */
656 
657  /* Timing wheel for scheduling time-based node dispatch. */
659 
661 
662  /* Opaque data vector added via timing_wheel_advance. */
664 
665  /* CPU time of next process to be ready on timing wheel. */
667 
668  /* Vector of process nodes.
669  One for each node of type VLIB_NODE_TYPE_PROCESS. */
671 
672  /* Current running process or ~0 if no process running. */
674 
675  /* Pool of pending process frames. */
677 
678  /* Vector of event data vectors pending recycle. */
680 
681  /* Current counts of nodes in each state. */
682  u32 input_node_counts_by_state[VLIB_N_NODE_STATE];
683 
684  /* Hash of (scalar_size,vector_size) to frame_sizes index. */
686 
687  /* Per-size frame allocation information. */
689 
690  /* Time of last node runtime stats clear. */
692 
693  /* Node registrations added by constructors */
696 
697 
698 #define FRAME_QUEUE_MAX_NELTS 32
699 typedef struct
700 {
701  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
711 
712 typedef struct
713 {
716 
717 #endif /* included_vlib_node_h */
718 
719 /*
720  * fd.io coding-style-patch-verification: ON
721  *
722  * Local Variables:
723  * eval: (c-set-style "gnu")
724  * End:
725  */
uword * sibling_bitmap
Definition: node.h:294
u32 * next_nodes
Definition: node.h:288
uword output_function_arg
Definition: node.h:543
u8 * state_string
Definition: node.h:322
uword( vlib_node_function_t)(struct vlib_main_t *vm, struct vlib_node_runtime_t *node, struct vlib_frame_t *frame)
Definition: node.h:54
struct vlib_node_t vlib_node_t
u16 vector_size
Definition: node.h:274
u32 error_heap_index
Definition: node.h:278
u32 next_frame_index
Definition: node.h:437
#define CLIB_CACHE_LINE_ALIGN_MARK(mark)
Definition: cache.h:68
sll srl srl sll sra u16x4 i
Definition: vector_sse2.h:343
u32 interrupt_threshold_vector_length
Definition: node.h:649
uword( unformat_function_t)(unformat_input_t *input, va_list *args)
Definition: format.h:231
vlib_process_t ** processes
Definition: node.h:670
struct vlib_node_runtime_t vlib_node_runtime_t
vlib_node_runtime_t node_runtime
Definition: node.h:491
u32 n_suspends
Definition: node.h:519
bad routing header type(not 4)") sr_error (NO_MORE_SEGMENTS
static u32 vlib_timing_wheel_data_set_timed_event(u32 i)
Definition: node.h:616
u32 index
Definition: node.h:237
format_function_t * format_trace
Definition: node.h:315
void ** pending_event_data_by_type_index
Definition: node.h:522
u32 current_process_index
Definition: node.h:673
u16 flags
Definition: node.h:246
char ** error_strings
Definition: node.h:281
u64 cpu_time_next_process_ready
Definition: node.h:666
struct _vlib_node_registration vlib_node_registration_t
u32 clocks_since_last_overflow
Definition: node.h:422
void * runtime_data
Definition: node.h:243
vlib_error_t * errors
Definition: node.h:419
vlib_node_state_t
Definition: node.h:207
u8 state
Definition: node.h:265
u32 * pending_interrupt_node_runtime_indices
Definition: node.h:643
u32 input_main_loops_per_call
Definition: node.h:445
vlib_node_stats_t stats_last_clear
Definition: node.h:231
u32 main_loop_count_last_dispatch
Definition: node.h:448
void ** recycled_event_data_vectors
Definition: node.h:679
#define always_inline
Definition: clib.h:84
u16 log2_n_stack_bytes
Definition: node.h:514
vlib_node_t ** nodes
Definition: node.h:630
u32 vectors_since_last_overflow
Definition: node.h:434
int i32
Definition: types.h:81
char ** next_node_names
Definition: node.h:285
char * sibling_of
Definition: node.h:291
unsigned long u64
Definition: types.h:89
u32 * free_frame_indices
Definition: node.h:479
u64 max_clock_n
Definition: node.h:195
u32 calls_since_last_overflow
Definition: node.h:431
u32 next_frame_index
Definition: node.h:406
u32 error_heap_handle
Definition: node.h:277
vlib_node_stats_t stats_total
Definition: node.h:227
u32 frame_index
Definition: node.h:356
u32 vlib_error_t
Definition: error.h:44
vlib_signal_timed_event_data_t * signal_timed_event_data_pool
Definition: node.h:660
vlib_node_type_t
Definition: node.h:58
f64 time_last_runtime_stats_clear
Definition: node.h:691
vlib_node_registration_t * node_registrations
Definition: node.h:694
u32 n_alloc_frames
Definition: node.h:476
#define FRAME_QUEUE_MAX_NELTS
Definition: node.h:698
u32 polling_threshold_vector_length
Definition: node.h:648
u64 * n_vectors_by_next_node
Definition: node.h:297
static u32 vlib_timing_wheel_data_set_suspended_process(u32 i)
Definition: node.h:610
format_function_t * format_buffer
Definition: node.h:311
#define foreach_vlib_node_state
Definition: node.h:198
uword * frame_size_hash
Definition: node.h:685
u8 * name
Definition: node.h:221
timing_wheel_t timing_wheel
Definition: node.h:658
static vlib_node_registration_t * vlib_node_next_registered(vlib_node_registration_t *c)
Definition: node.h:182
u32 owner_node_index
Definition: node.h:308
svmdb_client_t * c
u16 n_vectors
Definition: node.h:344
u32 runtime_index
Definition: node.h:240
vlib_pending_frame_t * pending_frames
Definition: node.h:655
u32 node_runtime_index
Definition: node.h:400
unformat_function_t * unformat_buffer
Definition: node.h:312
uword * node_by_name
Definition: node.h:633
u32 stack[0] ALIGN_ON_MULTIPLE_PAGE_BOUNDARY_FOR_MPROTECT
Definition: node.h:557
static void vlib_next_frame_init(vlib_next_frame_t *nf)
Definition: node.h:389
uword * one_time_event_type_bitmap
Definition: node.h:528
#define clib_elf_section_data_next(a, extra)
Definition: elf_clib.h:57
static uword vlib_timing_wheel_data_is_timed_event(u32 d)
Definition: node.h:604
u16 cached_next_index
Definition: node.h:463
unsigned int u32
Definition: types.h:88
struct vlib_frame_t vlib_frame_t
u16 flags
Definition: node.h:335
void( vlib_cli_output_function_t)(uword arg, u8 *buffer, uword buffer_bytes)
Definition: cli.h:131
u16 cpu_index
Definition: node.h:347
vhost_vring_state_t state
Definition: vhost-user.h:80
uword * next_slot_by_node
Definition: node.h:302
#define PAGE_SIZE_MULTIPLE
Definition: node.h:547
uword * prev_node_bitmap
Definition: node.h:305
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:569
u64 uword
Definition: types.h:112
unsigned short u16
Definition: types.h:57
vlib_process_event_type_t * event_type_pool
Definition: node.h:535
u32 * data_from_advancing_timing_wheel
Definition: node.h:663
double f64
Definition: types.h:142
unsigned char u8
Definition: types.h:56
vlib_pending_frame_t * suspended_process_frames
Definition: node.h:676
u8 vector_size
Definition: node.h:341
vlib_next_frame_t * next_frames
Definition: node.h:652
uword * event_type_index_by_type_opaque
Definition: node.h:532
vlib_frame_size_t * frame_sizes
Definition: node.h:688
u16 flags
Definition: node.h:504
vlib_node_type_t type
Definition: node.h:234
u32 name_elog_string
Definition: node.h:224
u16 n_errors
Definition: node.h:271
u32 suspended_process_frame_index
Definition: node.h:516
u64 resume_cpu_time
Definition: node.h:538
static uword vlib_timing_wheel_data_get_index(u32 d)
Definition: node.h:622
clib_longjmp_t return_longjmp
Definition: node.h:494
u32 node_runtime_index
Definition: node.h:359
u8 scalar_size
Definition: node.h:338
vlib_cli_output_function_t * output_function
Definition: node.h:542
clib_longjmp_t resume_longjmp
Definition: node.h:500
u32 flags
Definition: vhost-user.h:75
#define CLIB_CACHE_LINE_BYTES
Definition: cache.h:67
u8 runtime_data_bytes
Definition: node.h:268
u32 vectors_since_last_overflow
Definition: node.h:385
uword * non_empty_event_type_bitmap
Definition: node.h:525