Initialize new FIB table for v5 and v9 */
| 525 | |
| 526 | /* Initialize new FIB table for v5 and v9 */ |
| 527 | int |
| 528 | ng_netflow_fib_init(priv_p priv, int fib) |
| 529 | { |
| 530 | fib_export_p fe = priv_to_fib(priv, fib); |
| 531 | |
| 532 | CTR1(KTR_NET, "ng_netflow(): fib init: %d", fib); |
| 533 | |
| 534 | if (fe != NULL) |
| 535 | return (0); |
| 536 | |
| 537 | if ((fe = malloc(sizeof(struct fib_export), M_NETGRAPH, |
| 538 | M_NOWAIT | M_ZERO)) == NULL) |
| 539 | return (ENOMEM); |
| 540 | |
| 541 | mtx_init(&fe->export_mtx, "export dgram lock", NULL, MTX_DEF); |
| 542 | mtx_init(&fe->export9_mtx, "export9 dgram lock", NULL, MTX_DEF); |
| 543 | fe->fib = fib; |
| 544 | fe->domain_id = fib; |
| 545 | |
| 546 | if (atomic_cmpset_ptr((volatile uintptr_t *)&priv->fib_data[fib], |
| 547 | (uintptr_t)NULL, (uintptr_t)fe) == 0) { |
| 548 | /* FIB already set up by other ISR */ |
| 549 | CTR3(KTR_NET, "ng_netflow(): fib init: %d setup %p but got %p", |
| 550 | fib, fe, priv_to_fib(priv, fib)); |
| 551 | mtx_destroy(&fe->export_mtx); |
| 552 | mtx_destroy(&fe->export9_mtx); |
| 553 | free(fe, M_NETGRAPH); |
| 554 | } else { |
| 555 | /* Increase counter for statistics */ |
| 556 | CTR3(KTR_NET, "ng_netflow(): fib %d setup to %p (%p)", |
| 557 | fib, fe, priv_to_fib(priv, fib)); |
| 558 | priv->nfinfo_alloc_fibs++; |
| 559 | } |
| 560 | |
| 561 | return (0); |
| 562 | } |
| 563 | |
| 564 | /* Free all flow cache memory. Called from node close method. */ |
| 565 | void |
no test coverage detected