vlib: fix for vlib_node_add_next_with_slot
- vlib_node_add_next_with_slot was not cleaning the old next node references to the given slot when replacing it with new next node. This mostly worked until one tried to set the slot to a previously (but not currently) used next node for that slot. Type: fix Signed-off-by: Christian Hopps <chopps@labn.net> Change-Id: I7ee607625da874e320158b80f12ddc16e377f8e9
This commit is contained in:
committed by
Dave Barach
parent
bf103d99e6
commit
2e8b0618b1
@@ -201,7 +201,8 @@ vlib_node_add_next_with_slot (vlib_main_t * vm,
|
||||
uword next_node_index, uword slot)
|
||||
{
|
||||
vlib_node_main_t *nm = &vm->node_main;
|
||||
vlib_node_t *node, *next;
|
||||
vlib_node_t *node, *next, *old_next;
|
||||
u32 old_next_index;
|
||||
uword *p;
|
||||
|
||||
ASSERT (vlib_get_thread_index () == 0);
|
||||
@@ -228,6 +229,14 @@ vlib_node_add_next_with_slot (vlib_main_t * vm,
|
||||
vec_validate_init_empty (node->next_nodes, slot, ~0);
|
||||
vec_validate (node->n_vectors_by_next_node, slot);
|
||||
|
||||
if ((old_next_index = node->next_nodes[slot]) != ~0u)
|
||||
{
|
||||
hash_unset (node->next_slot_by_node, old_next_index);
|
||||
old_next = vlib_get_node (vm, old_next_index);
|
||||
old_next->prev_node_bitmap =
|
||||
clib_bitmap_andnoti (old_next->prev_node_bitmap, node_index);
|
||||
}
|
||||
|
||||
node->next_nodes[slot] = next_node_index;
|
||||
hash_set (node->next_slot_by_node, next_node_index, slot);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user