svn commit: r295220 - in projects/vnet/sys: net netinet netinet6

Bjoern A. Zeeb bz at FreeBSD.org
Wed Feb 3 21:56:53 UTC 2016


Author: bz
Date: Wed Feb  3 21:56:51 2016
New Revision: 295220
URL: https://svnweb.freebsd.org/changeset/base/295220

Log:
  Code duplication but rib_head is special.  Not found an easy way to go
  back and harmize the use cases among RIB, IPFW, PF yet but it's also not
  the scope of this work.   Prevents instant panics on teardown and frees
  the FIB bits again.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/vnet/sys/net/route.c
  projects/vnet/sys/netinet/in_rmx.c
  projects/vnet/sys/netinet6/in6_rmx.c

Modified: projects/vnet/sys/net/route.c
==============================================================================
--- projects/vnet/sys/net/route.c	Wed Feb  3 20:55:08 2016	(r295219)
+++ projects/vnet/sys/net/route.c	Wed Feb  3 21:56:51 2016	(r295220)
@@ -353,10 +353,24 @@ rt_table_init(int offset)
 	return (rh);
 }
 
+static int
+rt_freeentry(struct radix_node *rn, void *arg)
+{
+	struct radix_head * const rnh = arg;
+	struct radix_node *x;
+
+	x = (struct radix_node *)rn_delete(rn + 2, NULL, rnh);
+	if (x != NULL)
+		R_Free(x);
+	return (0);
+}
+
 void
 rt_table_destroy(struct rib_head *rh)
 {
 
+	rn_walktree(&rh->rmhead.head, rt_freeentry, &rh->rmhead.head);
+
 	/* Assume table is already empty */
 	rw_destroy(&rh->rib_lock);
 	free(rh, M_RTABLE);

Modified: projects/vnet/sys/netinet/in_rmx.c
==============================================================================
--- projects/vnet/sys/netinet/in_rmx.c	Wed Feb  3 20:55:08 2016	(r295219)
+++ projects/vnet/sys/netinet/in_rmx.c	Wed Feb  3 21:56:51 2016	(r295220)
@@ -133,7 +133,8 @@ int
 in_detachhead(void **head, int off)
 {
 
-	return (rn_detachhead(head));
+	rt_table_destroy((struct rib_head *)(*head));
+	return (1);
 }
 #endif
 

Modified: projects/vnet/sys/netinet6/in6_rmx.c
==============================================================================
--- projects/vnet/sys/netinet6/in6_rmx.c	Wed Feb  3 20:55:08 2016	(r295219)
+++ projects/vnet/sys/netinet6/in6_rmx.c	Wed Feb  3 21:56:51 2016	(r295220)
@@ -237,7 +237,9 @@ in6_detachhead(void **head, int off)
 {
 
 	callout_drain(&V_rtq_mtutimer);
-	return (rn_detachhead(head));
+	rt_table_destroy((struct rib_head *)(*head));
+
+	return (1);
 }
 #endif
 


More information about the svn-src-projects mailing list