| 279 | } |
| 280 | |
| 281 | void |
| 282 | rte_fib6_free(struct rte_fib6 *fib) |
| 283 | { |
| 284 | struct rte_tailq_entry *te; |
| 285 | struct rte_fib6_list *fib_list; |
| 286 | |
| 287 | if (fib == NULL) |
| 288 | return; |
| 289 | |
| 290 | fib_list = RTE_TAILQ_CAST(rte_fib6_tailq.head, rte_fib6_list); |
| 291 | |
| 292 | rte_mcfg_tailq_write_lock(); |
| 293 | |
| 294 | /* find our tailq entry */ |
| 295 | TAILQ_FOREACH(te, fib_list, next) { |
| 296 | if (te->data == (void *)fib) |
| 297 | break; |
| 298 | } |
| 299 | if (te != NULL) |
| 300 | TAILQ_REMOVE(fib_list, te, next); |
| 301 | |
| 302 | rte_mcfg_tailq_write_unlock(); |
| 303 | |
| 304 | free_dataplane(fib); |
| 305 | rte_rib6_free(fib->rib); |
| 306 | rte_free(fib); |
| 307 | rte_free(te); |
| 308 | } |
| 309 | |
| 310 | void * |
| 311 | rte_fib6_get_dp(struct rte_fib6 *fib) |