-typedef struct _vlib_node_march_variant
-{
- struct _vlib_node_march_variant *next_variant;
- char *name;
-} vlib_node_march_variant_t;
-
-#define VLIB_VARIANT_REGISTER() \
- static vlib_node_march_variant_t \
- CLIB_MARCH_VARIANT##variant; \
- \
- static void __clib_constructor \
- CLIB_MARCH_VARIANT##_register (void) \
- { \
- extern vlib_node_march_variant_t *variants; \
- vlib_node_march_variant_t *v; \
- v = & CLIB_MARCH_VARIANT##variant; \
- v->name = CLIB_MARCH_VARIANT_STR; \
- v->next_variant = variants; \
- variants = v; \
- } \
-
-VLIB_VARIANT_REGISTER ();
-
-#ifndef CLIB_MARCH_VARIANT
-
-vlib_node_march_variant_t *variants = 0;
-
-uword
-unformat_vlib_node_variant (unformat_input_t * input, va_list * args)
-{
- u8 **variant = va_arg (*args, u8 **);
- vlib_node_march_variant_t *v = variants;
-
- if (!unformat (input, "%v", variant))
- return 0;
-
- while (v)
- {
- if (!strncmp (v->name, (char *) *variant, vec_len (*variant)))
- return 1;
-
- v = v->next_variant;
- }
-
- return 0;
-}
-
-static_always_inline void
-vlib_update_nr_variant_default (vlib_node_registration_t *nr, u8 *variant)
-{
- vlib_node_fn_registration_t *fnr = nr->node_fn_registrations;
- vlib_node_fn_registration_t *p_reg = 0;
- vlib_node_fn_registration_t *v_reg = 0;
- u32 tmp;
-
- while (fnr)
- {
- /* which is the highest priority registration */
- if (!p_reg || fnr->priority > p_reg->priority)
- p_reg = fnr;
-
- /* which is the variant we want to prioritize */
- if (!strncmp (fnr->name, (char *) variant, vec_len (variant) - 1))
- v_reg = fnr;
-
- fnr = fnr->next_registration;
- }
-
- /* node doesn't have the variants */
- if (!v_reg)
- return;
-
- ASSERT (p_reg != 0 && v_reg != 0);
-
- /* swap priorities */
- tmp = p_reg->priority;
- p_reg->priority = v_reg->priority;
- v_reg->priority = tmp;
-
-}
-