Fix interface reuse when running multithreaded 57/7857/1
authorDamjan Marion <damarion@cisco.com>
Thu, 27 Jul 2017 08:07:50 +0000 (04:07 -0400)
committerNeale Ranns <nranns@cisco.com>
Mon, 31 Jul 2017 17:07:56 +0000 (17:07 +0000)
Node function pointer was not set on all node runtimes causing crash if
new interface is different type.

Change-Id: I4661fe883befc6cd3fc6dfc14fd44f6fa5faf27c
Signed-off-by: Damjan Marion <damarion@cisco.com>
(cherry picked from commit c418e4ac7cf36bd64f3130c258d5f1897c245f2b)

src/vnet/interface.c

index 1370d04..41d5276 100644 (file)
@@ -787,14 +787,22 @@ vnet_register_interface (vnet_main_t * vnm,
        vnet_interface_output_node_flatten_multiarch_select () :
        vnet_interface_output_node_multiarch_select ();
       node->format_trace = format_vnet_interface_output_trace;
-      nrt = vlib_node_get_runtime (vm, hw->output_node_index);
-      nrt->function = node->function;
+      /* *INDENT-OFF* */
+      foreach_vlib_main ({
+        nrt = vlib_node_get_runtime (this_vlib_main, hw->output_node_index);
+        nrt->function = node->function;
+      });
+      /* *INDENT-ON* */
 
       node = vlib_get_node (vm, hw->tx_node_index);
       node->function = dev_class->tx_function;
       node->format_trace = dev_class->format_tx_trace;
-      nrt = vlib_node_get_runtime (vm, hw->tx_node_index);
-      nrt->function = node->function;
+      /* *INDENT-OFF* */
+      foreach_vlib_main ({
+        nrt = vlib_node_get_runtime (this_vlib_main, hw->tx_node_index);
+        nrt->function = node->function;
+      });
+      /* *INDENT-ON* */
 
       _vec_len (im->deleted_hw_interface_nodes) -= 1;
     }