MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ng_netflow_fib_init

Function ng_netflow_fib_init

freebsd/netgraph/netflow/netflow.c:527–562  ·  view source on GitHub ↗

Initialize new FIB table for v5 and v9 */

Source from the content-addressed store, hash-verified

525
526/* Initialize new FIB table for v5 and v9 */
527int
528ng_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. */
565void

Callers 1

ng_netflow_rcvdataFunction · 0.85

Calls 3

mallocFunction · 0.85
mtx_initFunction · 0.85
freeFunction · 0.50

Tested by

no test coverage detected