vlib: refactor node function variants
It allows default variant selection from startup.conf Type: improvement Change-Id: Idff95e12dd0c105dab7c905089548b05a6e974e0 Signed-off-by: Damjan Marion <damarion@cisco.com>
This commit is contained in:

committed by
Dave Wallace

parent
aa479bb91d
commit
a31698bb74
@ -89,9 +89,8 @@ typedef enum
|
||||
typedef struct _vlib_node_fn_registration
|
||||
{
|
||||
vlib_node_function_t *function;
|
||||
int priority;
|
||||
clib_march_variant_type_t march_variant;
|
||||
struct _vlib_node_fn_registration *next_registration;
|
||||
char *name;
|
||||
} vlib_node_fn_registration_t;
|
||||
|
||||
typedef struct _vlib_node_registration
|
||||
@ -200,24 +199,24 @@ static __clib_unused vlib_node_registration_t __clib_unused_##x
|
||||
#define CLIB_MARCH_VARIANT_STR _CLIB_MARCH_VARIANT_STR(CLIB_MARCH_VARIANT)
|
||||
#endif
|
||||
|
||||
#define VLIB_NODE_FN(node) \
|
||||
uword CLIB_MARCH_SFX (node##_fn)(); \
|
||||
static vlib_node_fn_registration_t \
|
||||
CLIB_MARCH_SFX(node##_fn_registration) = \
|
||||
{ .function = &CLIB_MARCH_SFX (node##_fn), }; \
|
||||
\
|
||||
static void __clib_constructor \
|
||||
CLIB_MARCH_SFX (node##_multiarch_register) (void) \
|
||||
{ \
|
||||
extern vlib_node_registration_t node; \
|
||||
vlib_node_fn_registration_t *r; \
|
||||
r = & CLIB_MARCH_SFX (node##_fn_registration); \
|
||||
r->priority = CLIB_MARCH_FN_PRIORITY(); \
|
||||
r->name = CLIB_MARCH_VARIANT_STR; \
|
||||
r->next_registration = node.node_fn_registrations; \
|
||||
node.node_fn_registrations = r; \
|
||||
} \
|
||||
uword CLIB_CPU_OPTIMIZED CLIB_MARCH_SFX (node##_fn)
|
||||
#define VLIB_NODE_FN(node) \
|
||||
uword CLIB_MARCH_SFX (node##_fn) (); \
|
||||
static vlib_node_fn_registration_t CLIB_MARCH_SFX ( \
|
||||
node##_fn_registration) = { \
|
||||
.function = &CLIB_MARCH_SFX (node##_fn), \
|
||||
}; \
|
||||
\
|
||||
static void __clib_constructor CLIB_MARCH_SFX (node##_multiarch_register) ( \
|
||||
void) \
|
||||
{ \
|
||||
extern vlib_node_registration_t node; \
|
||||
vlib_node_fn_registration_t *r; \
|
||||
r = &CLIB_MARCH_SFX (node##_fn_registration); \
|
||||
r->march_variant = CLIB_MARCH_SFX (CLIB_MARCH_VARIANT_TYPE); \
|
||||
r->next_registration = node.node_fn_registrations; \
|
||||
node.node_fn_registrations = r; \
|
||||
} \
|
||||
uword CLIB_CPU_OPTIMIZED CLIB_MARCH_SFX (node##_fn)
|
||||
|
||||
unformat_function_t unformat_vlib_node_variant;
|
||||
|
||||
@ -655,6 +654,14 @@ vlib_timing_wheel_data_get_index (u32 d)
|
||||
return d / 2;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
clib_march_variant_type_t index;
|
||||
int priority;
|
||||
char *suffix;
|
||||
char *desc;
|
||||
} vlib_node_fn_variant_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* Public nodes. */
|
||||
@ -727,6 +734,15 @@ typedef struct
|
||||
|
||||
/* Node index from error code */
|
||||
u32 *node_by_error;
|
||||
|
||||
/* Node Function Variants */
|
||||
vlib_node_fn_variant_t *variants;
|
||||
|
||||
/* Node Function Default Variant Index */
|
||||
u32 node_fn_default_march_variant;
|
||||
|
||||
/* Node Function march Variant by Suffix Hash */
|
||||
uword *node_fn_march_variant_by_suffix;
|
||||
} vlib_node_main_t;
|
||||
|
||||
typedef u16 vlib_error_t;
|
||||
|
Reference in New Issue
Block a user