X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fadj%2Fadj_delegate.c;h=87a83fb42399841c4acdd2cec54185a6e5c6d632;hb=14053c9dbd75182f5302f7388d17508f3930f7ce;hp=1cc7c4b94bd4b032761598106db1960a42a0af0e;hpb=d79a43c7f43e8b99d6eb019d69a3083c545007f1;p=vpp.git diff --git a/src/vnet/adj/adj_delegate.c b/src/vnet/adj/adj_delegate.c index 1cc7c4b94bd..87a83fb4239 100644 --- a/src/vnet/adj/adj_delegate.c +++ b/src/vnet/adj/adj_delegate.c @@ -23,27 +23,27 @@ static adj_delegate_vft_t *ad_vfts; /** - * The value of the last dynamically allocated delegeate value + * The value of the last dynamically allocated delegate value */ -static adj_delegate_type_t ad_max_id = ADJ_DELEGATE_BFD; +static adj_delegate_type_t ad_max_id = ADJ_DELEGATE_LAST; static adj_delegate_t * adj_delegate_find_i (const ip_adjacency_t *adj, adj_delegate_type_t type, u32 *index) { - adj_delegate_t **delegate; + adj_delegate_t *delegate; int ii; ii = 0; vec_foreach(delegate, adj->ia_delegates) { - if ((*delegate)->ad_type == type) + if (delegate->ad_type == type) { if (NULL != index) *index = ii; - return (*delegate); + return (delegate); } else { @@ -81,19 +81,22 @@ static int adj_delegate_cmp_for_sort (void * v1, void * v2) { - adj_delegate_t **delegate1 = v1, **delegate2 = v2; + adj_delegate_t *aed1 = v1, *aed2 = v2; - return ((*delegate1)->ad_type - (*delegate2)->ad_type); + return (aed1->ad_type - aed2->ad_type); } static void adj_delegate_init (ip_adjacency_t *adj, adj_delegate_type_t adt, - adj_delegate_t *aed) + index_t adi) { - aed->ad_adj_index = adj_get_index(adj); - aed->ad_type = adt; + adj_delegate_t aed = { + .ad_adj_index = adj_get_index(adj), + .ad_type = adt, + .ad_index = adi, + }; vec_add1(adj->ia_delegates, aed); vec_sort_with_function(adj->ia_delegates, @@ -103,7 +106,7 @@ adj_delegate_init (ip_adjacency_t *adj, int adj_delegate_add (ip_adjacency_t *adj, adj_delegate_type_t adt, - adj_delegate_t *ad) + index_t adi) { adj_delegate_t *delegate; @@ -111,7 +114,7 @@ adj_delegate_add (ip_adjacency_t *adj, if (NULL == delegate) { - adj_delegate_init(adj, adt, ad); + adj_delegate_init(adj, adt, adi); } else { @@ -124,35 +127,49 @@ adj_delegate_add (ip_adjacency_t *adj, void adj_delegate_adj_deleted (ip_adjacency_t *adj) { - adj_delegate_t **delegate; + adj_delegate_t *aed; - vec_foreach(delegate, adj->ia_delegates) + vec_foreach(aed, adj->ia_delegates) { - if (ad_vfts[(*delegate)->ad_type].adv_adj_deleted) + if (ad_vfts[aed->ad_type].adv_adj_deleted) { - ad_vfts[(*delegate)->ad_type].adv_adj_deleted(*delegate); + ad_vfts[aed->ad_type].adv_adj_deleted(aed); } } vec_reset_length(adj->ia_delegates); } +void +adj_delegate_adj_created (ip_adjacency_t *adj) +{ + adj_delegate_vft_t *vft; + + vec_foreach(vft, ad_vfts) + { + if (vft->adv_adj_created) + { + vft->adv_adj_created(adj_get_index(adj)); + } + } +} + u8* adj_delegate_format (u8* s, ip_adjacency_t *adj) { - adj_delegate_t **aed; + adj_delegate_t *aed; vec_foreach(aed, adj->ia_delegates) { - if (ad_vfts[(*aed)->ad_type].adv_format) + if (ad_vfts[aed->ad_type].adv_format) { - s = format(s, "{"); - s = ad_vfts[(*aed)->ad_type].adv_format(*aed, s); + s = format(s, "\n {"); + s = ad_vfts[aed->ad_type].adv_format(aed, s); s = format(s, "}"); } else { - s = format(s, "{unknown delegate}"); + s = format(s, "\n {unknown delegate}"); } }