45 #define foreach_ppp_input_next \ 46 _ (PUNT, "error-punt") \ 47 _ (DROP, "error-drop") 51 #define _(s,n) PPP_INPUT_NEXT_##s, 88 u32 n_left_from, next_index, i_next, *from, *to_next;
103 while (n_left_from > 0)
109 while (n_left_from >= 4 && n_left_to_next >= 2)
114 u32 i0, i1, protocol0, protocol1, enqueue_code;
166 enqueue_code = (i0 != i_next) + 2 * (i1 != i_next);
170 switch (enqueue_code)
214 while (n_left_from > 0 && n_left_to_next > 0)
253 to_next, n_left_to_next);
267 #define ppp_error(n,s) s, 277 .vector_size =
sizeof (
u32),
286 #define _(s,n) [PPP_INPUT_NEXT_##s] = n, 361 clib_host_to_net_u16 (protocol));
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment) ...
static clib_error_t * ppp_input_init(vlib_main_t *vm)
u8 runtime_data[0]
Function dependent node-runtime data.
unformat_function_t unformat_ppp_header
static void vlib_set_next_frame_buffer(vlib_main_t *vm, vlib_node_runtime_t *node, u32 next_index, u32 buffer_index)
i16 current_data
signed offset in data[], pre_data[] that we are currently processing.
u16 current_length
Nbytes between current data and the end of this buffer.
static void ppp_setup_node(vlib_main_t *vm, u32 node_index)
vlib_error_t * errors
Vector of errors for this node.
static uword vlib_node_add_next(vlib_main_t *vm, uword node, uword next_node)
#define VLIB_INIT_FUNCTION(x)
#define sparse_vec_validate(v, i)
format_function_t format_ppp_header
#define vlib_prefetch_buffer_header(b, type)
Prefetch buffer metadata.
static u8 * format_ppp_input_trace(u8 *s, va_list *va)
static void sparse_vec_index2(void *v, u32 si0, u32 si1, u32 *i0_return, u32 *i1_return)
#define vlib_call_init_function(vm, x)
vlib_error_t error
Error code for buffers to be enqueued to error handler.
static char * ppp_error_strings[]
static void * vlib_node_get_runtime_data(vlib_main_t *vm, u32 node_index)
Get node runtime private data by node index.
#define vlib_get_next_frame(vm, node, next_index, vectors, n_vectors_left)
Get pointer to next frame vector data by (vlib_node_runtime_t, next_index).
#define VLIB_REGISTER_NODE(x,...)
static ppp_protocol_info_t * ppp_get_protocol_info(ppp_main_t *em, ppp_protocol_t protocol)
#define CLIB_PREFETCH(addr, size, type)
void vlib_put_next_frame(vlib_main_t *vm, vlib_node_runtime_t *r, u32 next_index, u32 n_vectors_left)
Release pointer to next frame vector data.
static uword ppp_input(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
format_function_t format_ppp_header_with_length
static uword sparse_vec_index(void *v, uword sparse_index)
u16 cached_next_index
Next frame index that vector arguments were last enqueued to last time this node ran.
static clib_error_t * ppp_input_runtime_init(vlib_main_t *vm)
#define clib_error_report(e)
#define vec_elt(v, i)
Get vector value at index i.
void vlib_trace_frame_buffers_only(vlib_main_t *vm, vlib_node_runtime_t *node, u32 *buffers, uword n_buffers, uword next_buffer_stride, uword n_buffer_data_bytes_in_trace)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
VLIB buffer representation.
static void * vlib_frame_vector_args(vlib_frame_t *f)
Get pointer to frame vector data.
static clib_error_t * ppp_init(vlib_main_t *vm)
void ppp_register_input_protocol(vlib_main_t *vm, ppp_protocol_t protocol, u32 node_index)
vlib_node_registration_t ppp_input_node
(constructor) VLIB_REGISTER_NODE (ppp_input_node)
u16 flags
Copy of main node flags.
#define VLIB_NODE_FLAG_TRACE
static void * sparse_vec_new(uword elt_bytes, uword sparse_index_bits)
VLIB_WORKER_INIT_FUNCTION(hdlc_input_runtime_init)
static vlib_buffer_t * vlib_get_buffer(vlib_main_t *vm, u32 buffer_index)
Translate buffer index into buffer pointer.
#define foreach_ppp_input_next
#define SPARSE_VEC_INVALID_INDEX