Lines Matching defs:dp

75 	struct rte_trie_tbl *dp = p;
77 if (dp == NULL)
80 nh_sz = dp->nh_sz;
121 tbl8_pool_init(struct rte_trie_tbl *dp)
126 for (i = 0; i < dp->number_tbl8s; i++)
127 dp->tbl8_pool[i] = i;
129 dp->tbl8_pool_pos = 0;
136 tbl8_get(struct rte_trie_tbl *dp)
138 if (dp->tbl8_pool_pos == dp->number_tbl8s)
143 return dp->tbl8_pool[dp->tbl8_pool_pos++];
150 tbl8_put(struct rte_trie_tbl *dp, uint32_t tbl8_ind)
152 dp->tbl8_pool[--dp->tbl8_pool_pos] = tbl8_ind;
156 tbl8_alloc(struct rte_trie_tbl *dp, uint64_t nh)
161 tbl8_idx = tbl8_get(dp);
164 tbl8_ptr = get_tbl_p_by_idx(dp->tbl8,
165 tbl8_idx * TRIE_TBL8_GRP_NUM_ENT, dp->nh_sz);
167 write_to_dp((void *)tbl8_ptr, nh, dp->nh_sz,
173 tbl8_recycle(struct rte_trie_tbl *dp, void *par, uint64_t tbl8_idx)
181 switch (dp->nh_sz) {
183 ptr16 = &((uint16_t *)dp->tbl8)[tbl8_idx *
192 write_to_dp(par, nh, dp->nh_sz, 1);
197 ptr32 = &((uint32_t *)dp->tbl8)[tbl8_idx *
206 write_to_dp(par, nh, dp->nh_sz, 1);
211 ptr64 = &((uint64_t *)dp->tbl8)[tbl8_idx *
220 write_to_dp(par, nh, dp->nh_sz, 1);
225 tbl8_put(dp, tbl8_idx);
266 recycle_root_path(struct rte_trie_tbl *dp, const uint8_t *ip_part,
272 val = get_val_by_p(prev, dp->nh_sz);
277 p = get_tbl_p_by_idx(dp->tbl8, (val >> 1) *
278 TRIE_TBL8_GRP_NUM_ENT + *ip_part, dp->nh_sz);
279 recycle_root_path(dp, ip_part + 1, common_tbl8 - 1, p);
281 tbl8_recycle(dp, prev, val >> 1);
285 build_common_root(struct rte_trie_tbl *dp, const struct rte_ipv6_addr *ip,
293 cur_tbl = dp->tbl24;
296 val = get_tbl_val_by_idx(cur_tbl, idx, dp->nh_sz);
297 tbl_ptr = get_tbl_p_by_idx(cur_tbl, idx, dp->nh_sz);
299 idx = tbl8_alloc(dp, val);
303 TRIE_EXT_ENT, dp->nh_sz, 1);
309 cur_tbl = dp->tbl8;
312 dp->nh_sz);
317 write_edge(struct rte_trie_tbl *dp, const uint8_t *ip_part, uint64_t next_hop,
326 val = get_val_by_p(ent, dp->nh_sz);
330 tbl8_idx = tbl8_alloc(dp, val);
335 p = get_tbl_p_by_idx(dp->tbl8, (tbl8_idx *
336 TRIE_TBL8_GRP_NUM_ENT) + *ip_part, dp->nh_sz);
337 ret = write_edge(dp, ip_part + 1, next_hop, len - 1, edge, p);
341 write_to_dp((uint8_t *)p + (1 << dp->nh_sz),
342 next_hop << 1, dp->nh_sz, UINT8_MAX - *ip_part);
344 write_to_dp(get_tbl_p_by_idx(dp->tbl8, tbl8_idx *
345 TRIE_TBL8_GRP_NUM_ENT, dp->nh_sz),
346 next_hop << 1, dp->nh_sz, *ip_part);
348 tbl8_recycle(dp, &val, tbl8_idx);
351 write_to_dp(ent, val, dp->nh_sz, 1);
360 install_to_dp(struct rte_trie_tbl *dp, const struct rte_ipv6_addr *ledge,
384 ret = build_common_root(dp, ledge, common_bytes, &common_root_tbl);
410 ent = get_tbl_p_by_idx(common_root_tbl, left_idx, dp->nh_sz);
411 ret = write_edge(dp, &ledge->a[first_tbl8_byte + !(common_bytes < 3)],
418 dp->nh_sz);
419 write_to_dp(ent, next_hop << 1, dp->nh_sz,
422 ent = get_tbl_p_by_idx(common_root_tbl, right_idx, dp->nh_sz);
423 ret = write_edge(dp, &redge.a[first_tbl8_byte + !((common_bytes < 3))],
430 ent = get_tbl24_p(dp, ledge, dp->nh_sz);
431 recycle_root_path(dp, ledge->a + TBL24_BYTES, common_tbl8, ent);
457 modify_dp(struct rte_trie_tbl *dp, struct rte_rib6 *rib,
466 if (next_hop > get_max_nh(dp->nh_sz))
482 ret = install_to_dp(dp, &ledge, &redge, next_hop);
500 ret = install_to_dp(dp, &ledge, &redge, next_hop);
513 struct rte_trie_tbl *dp;
526 dp = rte_fib6_get_dp(fib);
527 RTE_ASSERT(dp);
556 ret = modify_dp(dp, rib, &ip_masked, depth, next_hop);
562 if ((depth > 24) && (dp->rsvd_tbl8s >=
563 dp->number_tbl8s - depth_diff))
576 ret = modify_dp(dp, rib, &ip_masked, depth, next_hop);
582 dp->rsvd_tbl8s += depth_diff;
593 ret = modify_dp(dp, rib, &ip_masked, depth,
596 ret = modify_dp(dp, rib, &ip_masked, depth, dp->def_nh);
602 dp->rsvd_tbl8s -= depth_diff;
615 struct rte_trie_tbl *dp = NULL;
638 dp = rte_zmalloc_socket(name, sizeof(struct rte_trie_tbl) +
641 if (dp == NULL) {
643 return dp;
646 write_to_dp(&dp->tbl24, (def_nh << 1), nh_sz, 1 << 24);
648 snprintf(mem_name, sizeof(mem_name), "TBL8_%p", dp);
649 dp->tbl8 = rte_zmalloc_socket(mem_name, TRIE_TBL8_GRP_NUM_ENT *
652 if (dp->tbl8 == NULL) {
654 rte_free(dp);
657 dp->def_nh = def_nh;
658 dp->nh_sz = nh_sz;
659 dp->number_tbl8s = num_tbl8;
661 snprintf(mem_name, sizeof(mem_name), "TBL8_idxes_%p", dp);
662 dp->tbl8_pool = rte_zmalloc_socket(mem_name,
663 sizeof(uint32_t) * dp->number_tbl8s,
665 if (dp->tbl8_pool == NULL) {
667 rte_free(dp->tbl8);
668 rte_free(dp);
672 tbl8_pool_init(dp);
674 return dp;
680 struct rte_trie_tbl *dp = (struct rte_trie_tbl *)p;
682 rte_free(dp->tbl8_pool);
683 rte_free(dp->tbl8);
684 rte_free(dp);