Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F171123892
D55599.id182920.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.id182920.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
@@ -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
Details
Attached
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)
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