summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2017-07-27 04:07:50 -0400
committerDave Barach <openvpp@barachs.net>2017-07-27 10:50:58 +0000
commitc418e4ac7cf36bd64f3130c258d5f1897c245f2b (patch)
tree39f02a41aaf165fa609d590ffc8d1311e4edd63f
parent6b0f5892833254438adaaf786b7195c82e3fdd30 (diff)
Fix interface reuse when running multithreaded
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>
-rw-r--r--src/vnet/interface.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/vnet/interface.c b/src/vnet/interface.c
index 7c0272b458d..dad1f315620 100644
--- a/src/vnet/interface.c
+++ b/src/vnet/interface.c
@@ -785,14 +785,22 @@ vnet_register_interface (vnet_main_t * vnm,
node = vlib_get_node (vm, hw->output_node_index);
node->function = 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;
}