X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fadj%2Fadj_midchain_delegate.c;h=16129ff86ac8fa35929caffb6073d97aa43c9991;hb=f72a32a1e45580bdab843fc1b3fb37c5fa7996dc;hp=9e788432640b0c45bcfe863b86de18ebe3ee7d49;hpb=1f50bf8fc57ebf78f9056185a342493be460a847;p=vpp.git diff --git a/src/vnet/adj/adj_midchain_delegate.c b/src/vnet/adj/adj_midchain_delegate.c index 9e788432640..16129ff86ac 100644 --- a/src/vnet/adj/adj_midchain_delegate.c +++ b/src/vnet/adj/adj_midchain_delegate.c @@ -131,6 +131,31 @@ adj_midchain_delegate_stack (adj_index_t ai, adj_midchain_delegate_restack_i(ai, amd); } +void +adj_midchain_delegate_remove (adj_index_t ai) +{ + adj_midchain_delegate_t *amd; + ip_adjacency_t *adj; + adj_delegate_t *ad; + + /* + * if there's a delegate, it can be removed + */ + adj = adj_get(ai); + ad = adj_delegate_get(adj, ADJ_DELEGATE_MIDCHAIN); + + if (NULL != ad) + { + adj_nbr_midchain_unstack(ai); + + amd = pool_elt_at_index(amd_pool, ad->ad_index); + fib_entry_untrack(amd->amd_fei, amd->amd_sibling); + pool_put(amd_pool, amd); + + adj_delegate_remove (ai, ADJ_DELEGATE_MIDCHAIN); + } +} + void adj_midchain_delegate_unstack (adj_index_t ai) {