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