Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F152864573
D55599.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D55599.id.diff
View Options
diff --git a/sys/netinet6/in6.h b/sys/netinet6/in6.h
--- a/sys/netinet6/in6.h
+++ b/sys/netinet6/in6.h
@@ -689,6 +689,7 @@
struct sockaddr_in6 *sin6);
void in6_sin6_2_sin_in_sock(struct sockaddr *nam);
extern void addrsel_policy_init(void);
+extern void addrsel_policy_destroy(void);
#define satosin6(sa) ((struct sockaddr_in6 *)(sa))
#define sin6tosa(sin6) ((struct sockaddr *)(sin6))
diff --git a/sys/netinet6/in6_src.c b/sys/netinet6/in6_src.c
--- a/sys/netinet6/in6_src.c
+++ b/sys/netinet6/in6_src.c
@@ -107,12 +107,15 @@
static struct mtx addrsel_lock;
#define ADDRSEL_LOCK_INIT() mtx_init(&addrsel_lock, "addrsel_lock", NULL, MTX_DEF)
+#define ADDRSEL_LOCK_DESTROY() mtx_destroy(&addrsel_lock)
#define ADDRSEL_LOCK() mtx_lock(&addrsel_lock)
#define ADDRSEL_UNLOCK() mtx_unlock(&addrsel_lock)
#define ADDRSEL_LOCK_ASSERT() mtx_assert(&addrsel_lock, MA_OWNED)
static struct sx addrsel_sxlock;
#define ADDRSEL_SXLOCK_INIT() sx_init(&addrsel_sxlock, "addrsel_sxlock")
+#define ADDRSEL_SXLOCK_DESTROY() \
+ sx_destroy(&addrsel_sxlock)
#define ADDRSEL_SLOCK() sx_slock(&addrsel_sxlock)
#define ADDRSEL_SUNLOCK() sx_sunlock(&addrsel_sxlock)
#define ADDRSEL_XLOCK() sx_xlock(&addrsel_sxlock)
@@ -137,6 +140,7 @@
static struct in6_addrpolicy *lookup_addrsel_policy(struct sockaddr_in6 *);
static void init_policy_queue(void);
+static void destroy_policy_queue(void);
static int add_addrsel_policyent(struct in6_addrpolicy *);
static int delete_addrsel_policyent(struct in6_addrpolicy *);
static int walk_addrsel_policy(int (*)(struct in6_addrpolicy *, void *),
@@ -903,6 +907,19 @@
ADDRSEL_SXLOCK_INIT();
}
+void
+addrsel_policy_destroy(void)
+{
+
+ destroy_policy_queue();
+
+ if (!IS_DEFAULT_VNET(curvnet))
+ return;
+
+ ADDRSEL_LOCK_DESTROY();
+ ADDRSEL_SXLOCK_DESTROY();
+}
+
static struct in6_addrpolicy *
lookup_addrsel_policy(struct sockaddr_in6 *key)
{
@@ -999,6 +1016,17 @@
TAILQ_INIT(&V_addrsel_policytab);
}
+static void
+destroy_policy_queue(void)
+{
+ struct addrsel_policyent *pol, *tpol;
+
+ TAILQ_FOREACH_SAFE(pol, &V_addrsel_policytab, ape_entry, tpol) {
+ TAILQ_REMOVE(&V_addrsel_policytab, pol, ape_entry);
+ free(pol, M_IFADDR);
+ }
+}
+
static int
add_addrsel_policyent(struct in6_addrpolicy *newpolicy)
{
diff --git a/sys/netinet6/ip6_input.c b/sys/netinet6/ip6_input.c
--- a/sys/netinet6/ip6_input.c
+++ b/sys/netinet6/ip6_input.c
@@ -399,6 +399,7 @@
frag6_destroy();
nd6_destroy();
+ addrsel_policy_destroy();
in6_ifattach_destroy();
hashdestroy(V_in6_ifaddrhashtbl, M_IFADDR, V_in6_ifaddrhmask);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 18, 2:35 PM (10 h, 37 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31724089
Default Alt Text
D55599.id.diff (2 KB)
Attached To
Mode
D55599: netinet6: Tear down IPv6 source address selection policies with rest of IPv6.
Attached
Detach File
Event Timeline
Log In to Comment