58 pool_get(mfib_signal_dlist_pool, head);
74 while (__sync_lock_test_and_set (&mfib_signal_pending.
mip_lock, 1))
84 #define MFIB_SIGNAL_CRITICAL_SECTION(_body) \ 86 mfib_signal_lock_aquire(); \ 90 mfib_signal_lock_release(); \ 152 pool_get(mfib_signal_dlist_pool, elt);
211 pool_put(mfib_signal_dlist_pool, elt);
static void clib_dlist_init(dlist_elt_t *pool, u32 index)
void mfib_signal_module_init(void)
A pair of indicies, for the entry and interface resp.
struct mfib_signal_q_t_ mfib_signal_q_t
the list/set of interfaces with signals pending
static fib_node_index_t mfib_entry_get_index(const mfib_entry_t *mfe)
static void mfib_signal_list_init(void)
#define pool_get(P, E)
Allocate an object E from a pool P (unspecified alignment).
#define MFIB_SIGNAL_CRITICAL_SECTION(_body)
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
u32 mip_head
the dlist indext that is the head of the list
static mfib_itf_t * mfib_itf_get(index_t mi)
u16 current_length
Nbytes between current data and the end of this buffer.
static void * vlib_buffer_get_current(vlib_buffer_t *b)
Get pointer to current data to process.
#define pool_put(P, E)
Free an object E in pool P.
#define MFIB_SIGNAL_BUFFER_SIZE
static dlist_elt_t * mfib_signal_dlist_pool
pool of dlist elements
u32 mfi_si
The index of the signal in the pending list.
static void mfib_signal_lock_release(void)
An API client registration, only in vpp/vlib.
static void clib_dlist_addhead(dlist_elt_t *pool, u32 head_index, u32 new_index)
void mfib_signal_remove_itf(const mfib_itf_t *mfi)
mfib_itf_flags_t mfi_flags
Forwarding Flags on the entry - checked in the data-path.
static mfib_signal_t * mfib_signal_pool
Pool of signals.
#define pool_put_index(p, i)
Free pool element with given index.
int mfib_signal_send_one(struct vl_api_registration_ *reg, u32 context)
An interface associated with a particular MFIB entry.
static void mfib_signal_lock_aquire(void)
static void clib_dlist_remove(dlist_elt_t *pool, u32 index)
int mip_lock
Spin lock to protect the list.
#define INDEX_INVALID
Invalid index - used when no index is known blazoned capitals INVALID speak volumes where ~0 does not...
static mfib_signal_q_t mfib_signal_pending
The pending queue of signals to deliver to the control plane.
void mfib_signal_push(const mfib_entry_t *mfe, mfib_itf_t *mfi, vlib_buffer_t *b0)
u8 mfs_buffer[MFIB_SIGNAL_BUFFER_SIZE]
A buffer copied from the DP plane that triggered the signal.
static index_t mfib_itf_get_index(const mfib_itf_t *mfi)
fib_node_index_t mfs_entry
void vl_mfib_signal_send_one(vl_api_registration_t *reg, u32 context, const mfib_signal_t *mfs)
the list/set of interfaces with signals pending
static u32 clib_dlist_remove_head(dlist_elt_t *pool, u32 head_index)