diff options
author | bz <bz@FreeBSD.org> | 2010-03-06 21:27:26 +0000 |
---|---|---|
committer | bz <bz@FreeBSD.org> | 2010-03-06 21:27:26 +0000 |
commit | 8ef34a39860d5396ec488cb71a2b2febedb5a467 (patch) | |
tree | 888b29b7ba9788f9cc675c5b8d933d278f6db978 /sys/net | |
parent | f82acabd2e2f46059cb8f8892210335c0444c48d (diff) | |
download | FreeBSD-src-8ef34a39860d5396ec488cb71a2b2febedb5a467.zip FreeBSD-src-8ef34a39860d5396ec488cb71a2b2febedb5a467.tar.gz |
Introduce a function rn_detachhead() that will free the
radix table root nodes. This is only needed (and available)
in the virtualization case to free the resources when tearing
down a virtual network stack.
Sponsored by: ISPsystem
Reviewed by: julian, zec
MFC after: 5 days
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/radix.c | 18 | ||||
-rw-r--r-- | sys/net/radix.h | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/sys/net/radix.c b/sys/net/radix.c index db1a46c..24650e7 100644 --- a/sys/net/radix.c +++ b/sys/net/radix.c @@ -1161,6 +1161,24 @@ rn_inithead(head, off) return (1); } +#ifdef VIMAGE +int +rn_detachhead(void **head) +{ + struct radix_node_head *rnh; + + KASSERT((head != NULL && *head != NULL), + ("%s: head already freed", __func__)); + rnh = *head; + + /* Free <left,root,right> nodes. */ + Free(rnh); + + *head = NULL; + return (1); +} +#endif + void rn_init(int maxk) { diff --git a/sys/net/radix.h b/sys/net/radix.h index aa341b6..e8bbe25 100644 --- a/sys/net/radix.h +++ b/sys/net/radix.h @@ -162,6 +162,9 @@ struct radix_node_head { void rn_init(int); int rn_inithead(void **, int); +#ifdef VIMAGE +int rn_detachhead(void **); +#endif int rn_refines(void *, void *); struct radix_node *rn_addmask(void *, int, int), |