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