Change-Id: Ie3c9b2896a487a0302903bfbdd6348f6f091c67d
Signed-off-by: Neale Ranns <nranns@cisco.com>
S;
/* Wait for a reply... */
W;
S;
/* Wait for a reply... */
W;
-
- /* Return the good/bad news */
- return (vam->retval);
vat_json_object_add_uint (node, "src-if-index", sw_if_index_from);
vat_json_object_add_string_copy (node, "src-if-name", sw_if_from_name);
vat_json_object_add_uint (node, "dst-if-index", sw_if_index_to);
vat_json_object_add_uint (node, "src-if-index", sw_if_index_from);
vat_json_object_add_string_copy (node, "src-if-name", sw_if_from_name);
vat_json_object_add_uint (node, "dst-if-index", sw_if_index_to);
- vat_json_object_add_string_copy (node, "dst-if-name", sw_if_to_name);
+ if (0 != sw_if_to_name)
+ {
+ vat_json_object_add_string_copy (node, "dst-if-name", sw_if_to_name);
+ }
vat_json_object_add_uint (node, "state", mp->state);
}
vat_json_object_add_uint (node, "state", mp->state);
}
mfib_signal_list_init();
}
mfib_signal_list_init();
}
+static inline void
+mfib_signal_lock_aquire (void)
+{
+ while (__sync_lock_test_and_set (&mfib_signal_pending.mip_lock, 1))
+ ;
+}
+
+static inline void
+mfib_signal_lock_release (void)
+{
+ mfib_signal_pending.mip_lock = 0;
+}
+
+#define MFIB_SIGNAL_CRITICAL_SECTION(_body) \
+{ \
+ mfib_signal_lock_aquire(); \
+ do { \
+ _body; \
+ } while (0); \
+ mfib_signal_lock_release(); \
+}
+
int
mfib_signal_send_one (struct _unix_shared_memory_queue *q,
u32 context)
int
mfib_signal_send_one (struct _unix_shared_memory_queue *q,
u32 context)
/*
* with the lock held, pop a signal from the q.
*/
/*
* with the lock held, pop a signal from the q.
*/
- while (__sync_lock_test_and_set (&mfib_signal_pending.mip_lock, 1))
- ;
- {
+ MFIB_SIGNAL_CRITICAL_SECTION(
+ ({
li = clib_dlist_remove_head(mfib_signal_dlist_pool,
mfib_signal_pending.mip_head);
li = clib_dlist_remove_head(mfib_signal_dlist_pool,
mfib_signal_pending.mip_head);
- }
- mfib_signal_pending.mip_lock = 0;
/*
* with the lock held, return the resoruces of the signals posted
*/
/*
* with the lock held, return the resoruces of the signals posted
*/
- while (__sync_lock_test_and_set(&mfib_signal_pending.mip_lock, 1))
- ;
- {
+ MFIB_SIGNAL_CRITICAL_SECTION(
+ ({
pool_put_index(mfib_signal_pool, si);
pool_put_index(mfib_signal_dlist_pool, li);
pool_put_index(mfib_signal_pool, si);
pool_put_index(mfib_signal_dlist_pool, li);
- }
- mfib_signal_pending.mip_lock = 0;
dlist_elt_t *elt;
u32 si, li;
dlist_elt_t *elt;
u32 si, li;
- while (__sync_lock_test_and_set (&mfib_signal_pending.mip_lock, 1))
- ;
- {
+ MFIB_SIGNAL_CRITICAL_SECTION(
+ ({
pool_get(mfib_signal_pool, mfs);
pool_get(mfib_signal_dlist_pool, elt);
pool_get(mfib_signal_pool, mfs);
pool_get(mfib_signal_dlist_pool, elt);
clib_dlist_addhead(mfib_signal_dlist_pool,
mfib_signal_pending.mip_head,
li);
clib_dlist_addhead(mfib_signal_dlist_pool,
mfib_signal_pending.mip_head,
li);
- }
- mfib_signal_pending.mip_lock = 0;
mfs->mfs_entry = mfib_entry_get_index(mfe);
mfs->mfs_itf = mfib_itf_get_index(mfi);
mfs->mfs_entry = mfib_entry_get_index(mfe);
mfs->mfs_itf = mfib_itf_get_index(mfi);
/*
* it's in the pending q
*/
/*
* it's in the pending q
*/
- while (__sync_lock_test_and_set (&mfib_signal_pending.mip_lock, 1))
- ;
- {
+ MFIB_SIGNAL_CRITICAL_SECTION(
+ ({
elt = pool_elt_at_index(mfib_signal_dlist_pool, li);
pool_put_index(mfib_signal_pool, elt->value);
pool_put(mfib_signal_dlist_pool, elt);
elt = pool_elt_at_index(mfib_signal_dlist_pool, li);
pool_put_index(mfib_signal_pool, elt->value);
pool_put(mfib_signal_dlist_pool, elt);
- }
-
- mfib_signal_pending.mip_lock = 0;
const replicate_t *rep;
mfib_prefix_t pfx;
va_list ap;
const replicate_t *rep;
mfib_prefix_t pfx;
va_list ap;
"%U links to %U",
format_mfib_prefix, &pfx,
format_dpo_id, &mfe->mfe_rep, 0);
"%U links to %U",
format_mfib_prefix, &pfx,
format_dpo_id, &mfe->mfe_rep, 0);
}
else
{
dpo_id_t tmp = DPO_INVALID;
}
else
{
dpo_id_t tmp = DPO_INVALID;
mfib_entry_contribute_forwarding(
fei,
mfib_entry_contribute_forwarding(
fei,
res = mfib_test_validate_rep_v(rep, n_buckets, ap);
dpo_reset(&tmp);
res = mfib_test_validate_rep_v(rep, n_buckets, ap);
dpo_reset(&tmp);
+
+ va_end(ap);
+
+ return (res);