X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_fib%2Frte_fib6.c;h=a1f0db844a35e800c3ecfd8d8da7d16d2ead4548;hb=32f9289dd44f7e7a0979304c799d2114862b45b2;hp=9f00a805a4338ee6c9969e34533cce115ae49d61;hpb=40d41a8a7b342f2cb77ceb500dacea87421b9d49;p=dpdk.git diff --git a/lib/librte_fib/rte_fib6.c b/lib/librte_fib/rte_fib6.c index 9f00a805a4..a1f0db844a 100644 --- a/lib/librte_fib/rte_fib6.c +++ b/lib/librte_fib/rte_fib6.c @@ -17,6 +17,8 @@ #include #include +#include "trie.h" + TAILQ_HEAD(rte_fib6_list, rte_tailq_entry); static struct rte_tailq_elem rte_fib6_tailq = { .name = "RTE_FIB6", @@ -92,12 +94,22 @@ static int init_dataplane(struct rte_fib6 *fib, __rte_unused int socket_id, struct rte_fib6_conf *conf) { + char dp_name[sizeof(void *)]; + + snprintf(dp_name, sizeof(dp_name), "%p", fib); switch (conf->type) { case RTE_FIB6_DUMMY: fib->dp = fib; fib->lookup = dummy_lookup; fib->modify = dummy_modify; return 0; + case RTE_FIB6_TRIE: + fib->dp = trie_create(dp_name, socket_id, conf); + if (fib->dp == NULL) + return -rte_errno; + fib->lookup = rte_trie_get_lookup_fn(conf); + fib->modify = trie_modify; + return 0; default: return -EINVAL; } @@ -260,6 +272,8 @@ free_dataplane(struct rte_fib6 *fib) switch (fib->type) { case RTE_FIB6_DUMMY: return; + case RTE_FIB6_TRIE: + trie_free(fib->dp); default: return; } @@ -305,4 +319,3 @@ rte_fib6_get_rib(struct rte_fib6 *fib) { return (fib == NULL) ? NULL : fib->rib; } -