Type: feature
Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: I3feddfe44dee528b9ca05aa0150e9423306ae49d
vec_reset_length(adj->ia_delegates);
}
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)
{
u8*
adj_delegate_format (u8* s, ip_adjacency_t *adj)
{
*/
typedef u8 * (*adj_delegate_format_t)(const adj_delegate_t *aed, u8 *s);
*/
typedef u8 * (*adj_delegate_format_t)(const adj_delegate_t *aed, u8 *s);
+/**
+ * Notification that an adjacency has been created
+ */
+typedef u8 * (*adj_delegate_adj_created_t)(adj_index_t ai);
+
/**
* An ADJ delegate virtual function table
*/
typedef struct adj_delegate_vft_t_ {
adj_delegate_format_t adv_format;
adj_delegate_adj_deleted_t adv_adj_deleted;
/**
* An ADJ delegate virtual function table
*/
typedef struct adj_delegate_vft_t_ {
adj_delegate_format_t adv_format;
adj_delegate_adj_deleted_t adv_adj_deleted;
+ adj_delegate_adj_created_t adv_adj_created;
} adj_delegate_vft_t;
/**
} adj_delegate_vft_t;
/**
adj_lock(adj_get_index(adj));
}
adj_lock(adj_get_index(adj));
}
+ adj_delegate_adj_created(adj);
+
return (adj_get_index(adj));
}
return (adj_get_index(adj));
}
* Adj delegates
*/
extern void adj_delegate_adj_deleted(ip_adjacency_t *adj);
* Adj delegates
*/
extern void adj_delegate_adj_deleted(ip_adjacency_t *adj);
+extern void adj_delegate_adj_created(ip_adjacency_t *adj);
extern u8* adj_delegate_format(u8* s, ip_adjacency_t *adj);
#endif
extern u8* adj_delegate_format(u8* s, ip_adjacency_t *adj);
#endif
adj_lock(adj_get_index(adj));
}
adj_lock(adj_get_index(adj));
}
+ adj_delegate_adj_created(adj);
+
return (adj_get_index(adj));
}
return (adj_get_index(adj));
}
u32 sw_if_index)
{
adj_index_t adj_index;
u32 sw_if_index)
{
adj_index_t adj_index;
adj_index = adj_nbr_find(nh_proto, link_type, nh_addr, sw_if_index);
if (ADJ_INDEX_INVALID == adj_index)
{
adj_index = adj_nbr_find(nh_proto, link_type, nh_addr, sw_if_index);
if (ADJ_INDEX_INVALID == adj_index)
{
vnet_main_t *vnm;
vnm = vnet_get_main();
vnet_main_t *vnm;
vnm = vnet_get_main();
+ adj_delegate_adj_created(adj_get(adj_index));
ADJ_NBR_REWRITE_FLAG_COMPLETE,
rewrite);
ADJ_NBR_REWRITE_FLAG_COMPLETE,
rewrite);
+ adj_delegate_adj_created(adj_get(adj_index));
+