Lines Matching full:depth
57 uint32_t depth :8; /**< Rule depth. */ member
69 uint8_t depth; /**< Rule depth. */ member
75 uint8_t depth; /**< Rule depth. */ member
113 * Takes an array of uint8_t (IPv6 address) and masks it using the depth.
114 * It leaves untouched one bit per unit in the depth variable
118 ip6_mask_addr(uint8_t *ip, uint8_t depth) in ip6_mask_addr() argument
123 part_depth = depth; in ip6_mask_addr()
217 rule_key_init(struct rte_lpm6_rule_key *key, uint8_t *ip, uint8_t depth)
220 key->depth = depth;
235 rte_lpm6_add(lpm, rule_key->ip, rule_key->depth,
471 rule_find(struct rte_lpm6 *lpm, uint8_t *ip, uint8_t depth,
477 rule_key_init(&rule_key, ip, depth);
492 rule_add(struct rte_lpm6 *lpm, uint8_t *ip, uint8_t depth, uint32_t next_hop)
499 rule_key_init(&rule_key, ip, depth);
543 .depth = new_depth, in expand_rule()
550 && lpm->tbl8[j].depth <= old_depth)) { in expand_rule()
609 uint8_t bytes, uint8_t first_byte, uint8_t depth, in simulate_add_step() argument
625 if (depth <= bits_covered) { in simulate_add_step()
634 depth -= bits_covered; in simulate_add_step()
635 uint32_t cnt = depth >> 3; /* depth / BYTE_SIZE */ in simulate_add_step()
636 if (depth & 7) /* 0b00000111 */ in simulate_add_step()
637 /* if depth % 8 > 0 then one more table is needed in simulate_add_step()
662 uint8_t first_byte, uint8_t depth, uint32_t next_hop, in add_step() argument
680 * If depth if smaller than this number (ie this is the last step) in add_step()
683 if (depth <= bits_covered) { in add_step()
684 tbl_range = 1 << (bits_covered - depth); in add_step()
688 tbl[i].depth <= depth)) { in add_step()
692 .depth = depth, in add_step()
708 expand_rule(lpm, tbl8_gindex, depth, depth, in add_step()
746 .depth = 0, in add_step()
775 .depth = tbl[entry_ind].depth, in add_step()
797 .depth = 0, in add_step()
826 simulate_add(struct rte_lpm6 *lpm, const uint8_t *masked_ip, uint8_t depth) in simulate_add() argument
839 ADD_FIRST_BYTE, 1, depth, &need_tbl_nb); in simulate_add()
848 (uint8_t)(i + 1), depth, &need_tbl_nb); in simulate_add()
863 rte_lpm6_add(struct rte_lpm6 *lpm, const uint8_t *ip, uint8_t depth, in rte_lpm6_add() argument
875 if ((lpm == NULL) || (depth < 1) || (depth > RTE_LPM6_MAX_DEPTH)) in rte_lpm6_add()
880 ip6_mask_addr(masked_ip, depth); in rte_lpm6_add()
883 int ret = simulate_add(lpm, masked_ip, depth); in rte_lpm6_add()
889 int is_new_rule = rule_add(lpm, masked_ip, depth, next_hop); in rte_lpm6_add()
898 masked_ip, ADD_FIRST_BYTE, 1, depth, next_hop, in rte_lpm6_add()
910 depth, next_hop, is_new_rule); in rte_lpm6_add()
1028 fill_rule6(char *buffer, const uint8_t *ip, uint8_t depth, uint32_t next_hop) in fill_rule6() argument
1033 rule->depth = depth; in fill_rule6()
1044 rte_lpm6_is_rule_present(struct rte_lpm6 *lpm, const uint8_t *ip, uint8_t depth,
1051 (depth < 1) || (depth > RTE_LPM6_MAX_DEPTH))
1056 ip6_mask_addr(masked_ip, depth);
1058 return rule_find(lpm, masked_ip, depth, next_hop);
1063 * NOTE: Valid range for depth parameter is 1 .. 128 inclusive.
1069 rule_delete(struct rte_lpm6 *lpm, uint8_t *ip, uint8_t depth)
1075 rule_key_init(&rule_key, ip, depth);
1153 * Convert a depth to a one byte long mask
1157 depth_to_mask_1b(uint8_t depth) in depth_to_mask_1b() argument
1162 return (signed char)0x80 >> (depth - 1); in depth_to_mask_1b()
1170 rule_find_less_specific(struct rte_lpm6 *lpm, uint8_t *ip, uint8_t depth,
1178 if (depth == 1)
1181 rule_key_init(&rule_key, ip, depth);
1183 while (depth > 1) {
1184 depth--;
1187 mask = depth & 7; /* depth % BYTE_SIZE */
1191 rule_key.depth = depth;
1192 rule_key.ip[depth >> 3] &= mask;
1196 rule->depth = depth;
1211 rule_find_range(struct rte_lpm6 *lpm, const uint8_t *ip, uint8_t depth, in rule_find_range() argument
1219 if (depth <= 24) { in rule_find_range()
1223 ind += (1 << (24 - depth)) - 1; in rule_find_range()
1237 depth -= 24; in rule_find_range()
1242 while (depth > 8) { in rule_find_range()
1250 depth -= 8; in rule_find_range()
1254 ind = ip[byte] & depth_to_mask_1b(depth); in rule_find_range()
1256 ind += (1 << (8 - depth)) - 1; in rule_find_range()
1291 .depth = lsp_rule->depth, in remove_tbl()
1301 .depth = 0, in remove_tbl()
1318 rte_lpm6_delete(struct rte_lpm6 *lpm, const uint8_t *ip, uint8_t depth, in rte_lpm6_delete() argument
1329 if ((lpm == NULL) || (depth < 1) || (depth > RTE_LPM6_MAX_DEPTH)) in rte_lpm6_delete()
1334 ip6_mask_addr(masked_ip, depth); in rte_lpm6_delete()
1338 ret = rule_delete(lpm, masked_ip, depth); in rte_lpm6_delete()
1344 rule_find_range(lpm, masked_ip, depth, &from, &to, &tbl_ind); in rte_lpm6_delete()
1347 /* find a less specific rule (a rule with smaller depth) in rte_lpm6_delete()
1350 ret = rule_find_less_specific(lpm, masked_ip, depth, in rte_lpm6_delete()
1379 depth, lsp_rule->depth, in rte_lpm6_delete()
1388 depth, 0, 0, INVALID); in rte_lpm6_delete()
1389 } else if (from->depth == depth) { in rte_lpm6_delete()
1394 .depth = lsp_rule->depth, in rte_lpm6_delete()
1404 .depth = 0, in rte_lpm6_delete()