36 areg->feature_arc_index = arc_index;
41 while ((s = areg->start_nodes[i]))
49 "Unknown start node '%s' on feature arc '%s'",
56 areg->n_start_nodes =
i;
81 arc_index = areg->feature_arc_index;
102 arc_index = areg->feature_arc_index;
137 u32 sw_if_index,
int is_add)
166 return reg->feature_arc_index;
181 return reg->feature_index_u32;
186 u32 sw_if_index,
int enable_disable,
187 void *feature_config,
u32 n_feature_config_bytes)
191 u32 feature_index, ci;
202 if (feature_index == ~0)
210 n_feature_config_bytes);
261 .path =
"show features",
262 .short_help =
"show features",
275 u32 node_index, current_config_index;
293 feature_arc = areg->feature_arc_index;
299 if (
NULL == cm[feature_arc].config_index_by_sw_if_index ||
300 vec_len (cm[feature_arc].config_index_by_sw_if_index) < sw_if_index)
306 current_config_index =
307 vec_elt (cm[feature_arc].config_index_by_sw_if_index, sw_if_index);
309 if (current_config_index == ~0)
315 ASSERT (current_config_index
vnet_config_main_t config_main
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment) ...
sll srl srl sll sra u16x4 i
vnet_config_feature_t * features
static vlib_main_t * vlib_get_main(void)
char *** feature_nodes
Save partial order results for show command.
vnet_feature_registration_t * next_feature
feature path configuration lists
u32 vnet_config_del_feature(vlib_main_t *vm, vnet_config_main_t *cm, u32 config_string_heap_index, u32 feature_index, void *feature_config, u32 n_feature_config_bytes)
u32 * config_index_by_sw_if_index
vnet_feature_main_t feature_main
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
static uword * clib_bitmap_set(uword *ai, uword i, uword value)
Sets the ith bit of a bitmap to new_value Removes trailing zeros from the bitmap. ...
#define hash_set_mem(h, key, value)
u32 vnet_feature_index_from_node_name(u16 arc, const char *s)
u16 vnet_feature_arc_index_from_node_name(const char *s)
format_function_t format_vnet_sw_if_index_name
void 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)
vnet_main_t * vnet_get_main(void)
#define VLIB_INIT_FUNCTION(x)
void vnet_interface_features_show(vlib_main_t *vm, u32 sw_if_index)
Display the set of driver features configured on a specific interface Called by "show interface" hand...
static clib_error_t * show_features_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Display the set of available driver features.
static uword pointer_to_uword(const void *p)
#define hash_create_string(elts, value_bytes)
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
clib_error_t * vnet_feature_arc_init(vlib_main_t *vm, vnet_config_main_t *vcm, char **feature_start_nodes, int num_feature_start_nodes, vnet_feature_registration_t *first_reg, char ***feature_nodes)
Initialize a feature graph arc.
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
uword ** next_feature_by_name
#define uword_to_pointer(u, type)
u32 * config_pool_index_by_user_index
static vlib_node_runtime_t * vlib_node_get_runtime(vlib_main_t *vm, u32 node_index)
Get node runtime by node index.
uword ** arc_index_by_name
i16 ** feature_count_by_sw_if_index
feature reference counts by interface
#define VLIB_CLI_COMMAND(x,...)
static clib_error_t * vnet_feature_init(vlib_main_t *vm)
void vnet_config_update_feature_count(vnet_feature_main_t *fm, u16 arc, u32 sw_if_index, int is_add)
vnet_feature_registration_t ** next_feature_by_arc
u32 vnet_config_add_feature(vlib_main_t *vm, vnet_config_main_t *cm, u32 config_string_heap_index, u32 feature_index, void *feature_config, u32 n_feature_config_bytes)
#define vec_elt(v, i)
Get vector value at index i.
vlib_node_t * vlib_get_node_by_name(vlib_main_t *vm, u8 *name)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
struct _vnet_feature_arc_registration vnet_feature_arc_registration_t
feature registration object
#define hash_get_mem(h, key)
vnet_feature_arc_registration_t * next_arc
feature arc configuration list
uword ** sw_if_index_has_features
bitmap of interfaces which have driver rx features configured
vnet_config_t * config_pool
static vlib_node_t * vlib_get_node(vlib_main_t *vm, u32 i)
Get vlib node by index.
#define vec_foreach(var, vec)
Vector iterator.
#define clib_error_return(e, args...)
vnet_feature_config_main_t * feature_config_mains
feature config main objects
#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)
struct _vnet_feature_registration vnet_feature_registration_t
feature registration object