51 .vector_size =
sizeof (
u32),
72 .vector_size =
sizeof (
u32),
92 .name =
"mpls-not-enabled",
93 .vector_size =
sizeof (
u32),
105 .arc_name =
"mpls-input",
111 .arc_name =
"mpls-input",
112 .node_name =
"mpls-not-enabled",
117 .arc_name =
"mpls-input",
118 .node_name =
"mpls-lookup",
124 .arc_name =
"mpls-output",
125 .start_nodes =
VNET_FEATURES (
"mpls-output",
"mpls-midchain"),
131 .arc_name =
"mpls-output",
132 .node_name =
"interface-output",
vlib_node_registration_t mpls_drop_node
(constructor) VLIB_REGISTER_NODE (mpls_drop_node)
vlib_node_registration_t mpls_not_enabled_node
(constructor) VLIB_REGISTER_NODE (mpls_not_enabled_node)
u8 input_feature_arc_index
u32 * fib_index_by_sw_if_index
VNET_FEATURE_INIT(mpls_not_enabled, static)
VNET_SW_INTERFACE_ADD_DEL_FUNCTION(mpls_sw_interface_add_del)
u8 * mpls_enabled_by_sw_if_index
static uword mpls_terminate(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, int error_code)
vlib_node_registration_t mpls_punt_node
(constructor) VLIB_REGISTER_NODE (mpls_punt_node)
u8 output_feature_arc_index
static uword mpls_lookup(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
#define VLIB_NODE_FUNCTION_MULTIARCH(node, fn)
static clib_error_t * mpls_sw_interface_add_del(vnet_main_t *vnm, u32 sw_if_index, u32 is_add)
uword vlib_error_drop_buffers(vlib_main_t *vm, vlib_node_runtime_t *node, u32 *buffers, u32 next_buffer_stride, u32 n_buffers, u32 next_index, u32 drop_error_node, u32 drop_error_code)
vlib_node_registration_t mpls_input_node
(constructor) VLIB_REGISTER_NODE (mpls_input_node)
static uword mpls_output(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *from_frame)
VNET_FEATURE_ARC_INIT(mpls_input, static)
#define VLIB_REGISTER_NODE(x,...)
#define VNET_FEATURES(...)
static uword mpls_punt(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
static void * vlib_frame_vector_args(vlib_frame_t *f)
Get pointer to frame vector data.
static uword mpls_drop(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
#define vec_validate_init_empty(V, I, INIT)
Make sure vector is long enough for given index and initialize empty space (no header, unspecified alignment)
static uword mpls_not_enabled(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
int vnet_feature_enable_disable(const char *arc_name, const char *node_name, u32 sw_if_index, int enable_disable, void *feature_config, u32 n_feature_config_bytes)