X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fnode.c;h=2bb5bceadbcb26ca6b4b380dcb466e62fc7f698f;hb=2e8b0618b12d317f2a4632e69a0663dcd8dde472;hp=b6a44b2e99d0694c0e024d82407d3ec436780bce;hpb=bf103d99e651f3b221361f6d964ae84870fd7a6b;p=vpp.git diff --git a/src/vlib/node.c b/src/vlib/node.c index b6a44b2e99d..2bb5bceadbc 100644 --- a/src/vlib/node.c +++ b/src/vlib/node.c @@ -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);