/* Create new block of given number of contiguous adjacencies. */ ip_adjacency_t * ip_add_adjacency (ip_lookup_main_t * lm, ip_adjacency_t * copy_adj, u32 n_adj, u32 * adj_index_return) { ip_adjacency_t * adj; u32 ai, i, handle; ai = heap_alloc (lm->adjacency_heap, n_adj, handle); adj = heap_elt_at_index (lm->adjacency_heap, ai); ip_poison_adjacencies (adj, n_adj); /* Validate adjacency counters. */ vlib_validate_counter (&lm->adjacency_counters, ai + n_adj - 1); for (i = 0; i < n_adj; i++) { /* Make sure interface is always initialized. */ adj[i].rewrite_header.sw_if_index = ~0; if (copy_adj) adj[i] = copy_adj[i]; adj[i].heap_handle = handle; adj[i].n_adj = n_adj; /* Zero possibly stale counters for re-used adjacencies. */ vlib_zero_combined_counter (&lm->adjacency_counters, ai + i); } *adj_index_return = ai; return adj; }
static replicate_t * replicate_alloc_i (void) { replicate_t *rep; pool_get_aligned(replicate_pool, rep, CLIB_CACHE_LINE_BYTES); clib_memset(rep, 0, sizeof(*rep)); vlib_validate_combined_counter(&(replicate_main.repm_counters), replicate_get_index(rep)); vlib_zero_combined_counter(&(replicate_main.repm_counters), replicate_get_index(rep)); return (rep); }