Page MenuHomeFreeBSD

D55599.id182920.diff
No OneTemporary

D55599.id182920.diff

diff --git a/sys/netinet6/in6.h b/sys/netinet6/in6.h
--- a/sys/netinet6/in6.h
+++ b/sys/netinet6/in6.h
@@ -690,6 +690,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
@@ -886,6 +886,22 @@
return (V_ip6_defhlim);
}
+/*
+ * The followings are implementation of the policy table using a
+ * simple tail queue.
+ * XXX such details should be hidden.
+ * XXX implementation using binary tree should be more efficient.
+ */
+struct addrsel_policyent {
+ TAILQ_ENTRY(addrsel_policyent) ape_entry;
+ struct in6_addrpolicy ape_policy;
+};
+
+TAILQ_HEAD(addrsel_policyhead, addrsel_policyent);
+
+VNET_DEFINE_STATIC(struct addrsel_policyhead, addrsel_policytab);
+#define V_addrsel_policytab VNET(addrsel_policytab)
+
void
addrsel_policy_init(void)
{
@@ -903,6 +919,18 @@
ADDRSEL_SXLOCK_INIT();
}
+void
+addrsel_policy_destroy(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);
+ }
+ /* TODO: Perform matching destruction of locks elsewhere. */
+}
+
static struct in6_addrpolicy *
lookup_addrsel_policy(struct sockaddr_in6 *key)
{
@@ -976,22 +1004,6 @@
return (0); /* XXX: compromise compilers */
}
-/*
- * The followings are implementation of the policy table using a
- * simple tail queue.
- * XXX such details should be hidden.
- * XXX implementation using binary tree should be more efficient.
- */
-struct addrsel_policyent {
- TAILQ_ENTRY(addrsel_policyent) ape_entry;
- struct in6_addrpolicy ape_policy;
-};
-
-TAILQ_HEAD(addrsel_policyhead, addrsel_policyent);
-
-VNET_DEFINE_STATIC(struct addrsel_policyhead, addrsel_policytab);
-#define V_addrsel_policytab VNET(addrsel_policytab)
-
static void
init_policy_queue(void)
{
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
@@ -398,6 +398,7 @@
frag6_destroy();
nd6_destroy();
+ addrsel_policy_destroy();
in6_ifattach_destroy();
hashdestroy(V_in6_ifaddrhashtbl, M_IFADDR, V_in6_ifaddrhmask);

File Metadata

Mime Type
text/plain
Expires
Wed, Sep 9, 8:45 PM (39 m, 34 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38610658
Default Alt Text
D55599.id182920.diff (2 KB)

Event Timeline