summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authorbz <bz@FreeBSD.org>2010-03-06 21:27:26 +0000
committerbz <bz@FreeBSD.org>2010-03-06 21:27:26 +0000
commit8ef34a39860d5396ec488cb71a2b2febedb5a467 (patch)
tree888b29b7ba9788f9cc675c5b8d933d278f6db978 /sys/net
parentf82acabd2e2f46059cb8f8892210335c0444c48d (diff)
downloadFreeBSD-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.c18
-rw-r--r--sys/net/radix.h3
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),
OpenPOWER on IntegriCloud