#define TIMER_NO_REPEAT false
#define INVALID_SEQ 0
-#define INIT_SEQ 0
typedef struct hicn_mapme_conf_s
{
for (pos = start_pos; pos < HICN_PARAM_FIB_ENTRY_NHOPS_MAX; pos++)
if (dpo_cmp (&tfib->next_hops[pos], face_id) == 0)
{
- hicn_face_unlock (&tfib->next_hops[pos]);
- tfib->next_hops[pos] = invalid;
- break;
+ hicn_face_unlock (&tfib->next_hops[pos]);
+ tfib->next_hops[pos] = invalid;
+ break;
}
if (pos == HICN_PARAM_FIB_ENTRY_NHOPS_MAX)
/* Not found */
{
hicn_strategy_mw_ctx_t *hicn_strategy_mw_ctx;
int ret = HICN_ERROR_NONE, i;
- dpo_id_t invalid = NEXT_HOP_INVALID;
/* Allocate a hicn_dpo_ctx on the vpp pool and initialize it */
pool_get (hicn_strategy_mw_ctx_pool, hicn_strategy_mw_ctx);
*dpo_idx = hicn_strategy_mw_ctx_get_index (hicn_strategy_mw_ctx);
- for (int i = 0; i < HICN_PARAM_FIB_ENTRY_NHOPS_MAX; i++)
- {
- hicn_strategy_mw_ctx->default_ctx.next_hops[i] = invalid;
- }
- hicn_strategy_mw_ctx->default_ctx.entry_count = 0;
- hicn_strategy_mw_ctx->default_ctx.locks = 0;
+ init_dpo_ctx (&(hicn_strategy_mw_ctx->default_ctx));
for (i = 0; i < HICN_PARAM_FIB_ENTRY_NHOPS_MAX && i < nh_len; i++)
{
{
/* If face is marked as deleted, ignore it */
hicn_face_t *face =
- hicn_dpoi_get_from_idx (hicn_strategy_mw_ctx->default_ctx.
- next_hops[i].dpoi_index);
+ hicn_dpoi_get_from_idx (hicn_strategy_mw_ctx->
+ default_ctx.next_hops[i].dpoi_index);
if (face->shared.flags & HICN_FACE_FLAGS_DELETED)
{
continue;
face_id)
{
nh_id = i;
- hicn_face_unlock (&hicn_strategy_mw_ctx->
- default_ctx.next_hops[i]);
+ hicn_face_unlock (&hicn_strategy_mw_ctx->default_ctx.
+ next_hops[i]);
hicn_strategy_mw_ctx->default_ctx.next_hops[i] = invalid;
hicn_strategy_mw_ctx->default_ctx.entry_count--;
}
{
hicn_strategy_rr_ctx_t *hicn_strategy_rr_ctx;
int ret = HICN_ERROR_NONE, i;
- dpo_id_t invalid = NEXT_HOP_INVALID;
/* Allocate a hicn_dpo_ctx on the vpp pool and initialize it */
pool_get (hicn_strategy_rr_ctx_pool, hicn_strategy_rr_ctx);
*dpo_idx = hicn_strategy_rr_ctx_get_index (hicn_strategy_rr_ctx);
- for (int i = 0; i < HICN_PARAM_FIB_ENTRY_NHOPS_MAX; i++)
- {
- hicn_strategy_rr_ctx->default_ctx.next_hops[i] = invalid;
- }
- hicn_strategy_rr_ctx->default_ctx.entry_count = 0;
- hicn_strategy_rr_ctx->default_ctx.locks = 0;
+ init_dpo_ctx (&(hicn_strategy_rr_ctx->default_ctx));
for (i = 0; i < HICN_PARAM_FIB_ENTRY_NHOPS_MAX && i < nh_len; i++)
{
{
/* If face is marked as deleted, ignore it */
hicn_face_t *face =
- hicn_dpoi_get_from_idx (hicn_strategy_rr_ctx->
- default_ctx.next_hops[i].dpoi_index);
+ hicn_dpoi_get_from_idx (hicn_strategy_rr_ctx->default_ctx.
+ next_hops[i].dpoi_index);
if (face->shared.flags & HICN_FACE_FLAGS_DELETED)
{
continue;
face_id)
{
nh_id = i;
- hicn_face_unlock (&hicn_strategy_rr_ctx->default_ctx.
- next_hops[i]);
+ hicn_face_unlock (&hicn_strategy_rr_ctx->
+ default_ctx.next_hops[i]);
hicn_strategy_rr_ctx->default_ctx.next_hops[i] = invalid;
hicn_strategy_rr_ctx->default_ctx.entry_count--;
}
#define NEXT_HOP_INVALID DPO_INVALID
+#define INIT_SEQ 0
/*
* An hicn dpo is a list of next hops (face + weight).
*/
} hicn_dpo_ctx_t;
+always_inline void
+init_dpo_ctx (hicn_dpo_ctx_t * dpo_ctx)
+{
+ dpo_id_t invalid = NEXT_HOP_INVALID;
+
+ for (int i = 0; i < HICN_PARAM_FIB_ENTRY_NHOPS_MAX; i++)
+ {
+ dpo_ctx->next_hops[i] = invalid;
+ }
+
+ dpo_ctx->entry_count = 0;
+ dpo_ctx->locks = 0;
+
+ dpo_ctx->tfib_entry_count = 0;
+
+#ifdef HICN_MAPME_NOTIFICATIONS
+ last_iu_ack = 0;
+#endif
+
+ dpo_ctx->seq = INIT_SEQ;
+}
+
STATIC_ASSERT (sizeof (hicn_dpo_ctx_t) <= CLIB_CACHE_LINE_BYTES,
"sizeof hicn_dpo_ctx_t is greater than 64B");