vlib: startup multi-arch variant configuration fix for interfaces
Propagate the multi-arch variant selection to interfaces.
Type: fix
Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
Change-Id: I99c4a7896f172f0d14d2ded22a27383825529a7d
diff --git a/src/vnet/interface_output.c b/src/vnet/interface_output.c
index 3363f76..e79ad45 100644
--- a/src/vnet/interface_output.c
+++ b/src/vnet/interface_output.c
@@ -513,9 +513,35 @@
#ifndef CLIB_MARCH_VARIANT
vlib_node_function_t *
-vnet_interface_output_node_get (void)
+vnet_interface_output_node_get (vlib_main_t * vm)
{
- return CLIB_MARCH_FN_POINTER (vnet_interface_output_node);
+ vlib_node_function_t *fn = 0;
+ vlib_node_fn_registration_t *fnr;
+ char *name = 0;
+ vlib_node_t *node = vlib_get_node_by_name (vm, (u8 *) "interface-output");
+ ASSERT (node);
+
+ /* search for the same name */
+ fnr = node->node_fn_registrations;
+ while (fnr)
+ {
+ if (fnr->function == node->function)
+ {
+ name = fnr->name;
+ break;
+ }
+ fnr = fnr->next_registration;
+ }
+
+ if (name)
+ {
+ fn = CLIB_MARCH_FN_POINTER_BY_NAME (vnet_interface_output_node, name);
+ }
+ if (!fn) /* revert to march type selection if search failed */
+ {
+ fn = CLIB_MARCH_FN_POINTER (vnet_interface_output_node);
+ }
+ return fn;
}
#endif /* CLIB_MARCH_VARIANT */