Lines Matching refs:lpm

44 	struct rte_lpm *lpm;  member
55 struct rte_table_lpm *lpm; in rte_table_lpm_create() local
93 lpm = rte_zmalloc_socket("TABLE", total_size, RTE_CACHE_LINE_SIZE, in rte_table_lpm_create()
95 if (lpm == NULL) { in rte_table_lpm_create()
106 lpm->lpm = rte_lpm_create(p->name, socket_id, &lpm_config); in rte_table_lpm_create()
108 if (lpm->lpm == NULL) { in rte_table_lpm_create()
109 rte_free(lpm); in rte_table_lpm_create()
115 lpm->entry_size = entry_size; in rte_table_lpm_create()
116 lpm->entry_unique_size = p->entry_unique_size; in rte_table_lpm_create()
117 lpm->n_rules = p->n_rules; in rte_table_lpm_create()
118 lpm->offset = p->offset; in rte_table_lpm_create()
120 return lpm; in rte_table_lpm_create()
126 struct rte_table_lpm *lpm = table; in rte_table_lpm_free() local
129 if (lpm == NULL) { in rte_table_lpm_free()
135 rte_lpm_free(lpm->lpm); in rte_table_lpm_free()
136 rte_free(lpm); in rte_table_lpm_free()
142 nht_find_free(struct rte_table_lpm *lpm, uint32_t *pos) in nht_find_free() argument
147 if (lpm->nht_users[i] == 0) { in nht_find_free()
157 nht_find_existing(struct rte_table_lpm *lpm, void *entry, uint32_t *pos) in nht_find_existing() argument
162 uint8_t *nht_entry = &lpm->nht[i * lpm->entry_size]; in nht_find_existing()
164 if ((lpm->nht_users[i] > 0) && (memcmp(nht_entry, entry, in nht_find_existing()
165 lpm->entry_unique_size) == 0)) { in nht_find_existing()
182 struct rte_table_lpm *lpm = table; in rte_table_lpm_entry_add() local
189 if (lpm == NULL) { in rte_table_lpm_entry_add()
210 status = rte_lpm_is_rule_present(lpm->lpm, ip_prefix->ip, in rte_table_lpm_entry_add()
215 if (nht_find_existing(lpm, entry, &nht_pos) == 0) { in rte_table_lpm_entry_add()
218 if (nht_find_free(lpm, &nht_pos) == 0) { in rte_table_lpm_entry_add()
223 nht_entry = &lpm->nht[nht_pos * lpm->entry_size]; in rte_table_lpm_entry_add()
224 memcpy(nht_entry, entry, lpm->entry_size); in rte_table_lpm_entry_add()
228 if (rte_lpm_add(lpm->lpm, ip_prefix->ip, ip_prefix->depth, nht_pos) < 0) { in rte_table_lpm_entry_add()
234 lpm->nht_users[nht_pos]++; in rte_table_lpm_entry_add()
235 lpm->nht_users[nht_pos0] -= nht_pos0_valid; in rte_table_lpm_entry_add()
238 *entry_ptr = (void *) &lpm->nht[nht_pos * lpm->entry_size]; in rte_table_lpm_entry_add()
249 struct rte_table_lpm *lpm = table; in rte_table_lpm_entry_delete() local
255 if (lpm == NULL) { in rte_table_lpm_entry_delete()
271 status = rte_lpm_is_rule_present(lpm->lpm, ip_prefix->ip, in rte_table_lpm_entry_delete()
283 status = rte_lpm_delete(lpm->lpm, ip_prefix->ip, ip_prefix->depth); in rte_table_lpm_entry_delete()
290 lpm->nht_users[nht_pos]--; in rte_table_lpm_entry_delete()
294 memcpy(entry, &lpm->nht[nht_pos * lpm->entry_size], in rte_table_lpm_entry_delete()
295 lpm->entry_size); in rte_table_lpm_entry_delete()
308 struct rte_table_lpm *lpm = (struct rte_table_lpm *) table; in rte_table_lpm_lookup() local
313 RTE_TABLE_LPM_STATS_PKTS_IN_ADD(lpm, n_pkts_in); in rte_table_lpm_lookup()
323 RTE_MBUF_METADATA_UINT32(pkt, lpm->offset)); in rte_table_lpm_lookup()
327 status = rte_lpm_lookup(lpm->lpm, ip, &nht_pos); in rte_table_lpm_lookup()
330 entries[i] = (void *) &lpm->nht[nht_pos * in rte_table_lpm_lookup()
331 lpm->entry_size]; in rte_table_lpm_lookup()
337 RTE_TABLE_LPM_STATS_PKTS_LOOKUP_MISS(lpm, n_pkts_in - __builtin_popcountll(pkts_out_mask)); in rte_table_lpm_lookup()