summaryrefslogtreecommitdiffstats
path: root/net/ipv6/sysctl_net_ipv6.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/sysctl_net_ipv6.c')
-rw-r--r--net/ipv6/sysctl_net_ipv6.c96
1 files changed, 84 insertions, 12 deletions
diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c
index ce7bb4681..212bcbc3e 100644
--- a/net/ipv6/sysctl_net_ipv6.c
+++ b/net/ipv6/sysctl_net_ipv6.c
@@ -4,45 +4,114 @@
#include <linux/mm.h>
#include <linux/sysctl.h>
+#include <linux/config.h>
#include <linux/in6.h>
#include <linux/ipv6.h>
#include <net/ndisc.h>
#include <net/ipv6.h>
#include <net/addrconf.h>
+struct ipv6_config ipv6_config =
+{
+ 0, /* forwarding */
+ IPV6_DEFAULT_HOPLIMIT, /* hop limit */
+ 1, /* accept RAs */
+ 1, /* accept redirects */
+
+ 3, /* nd_max_mcast_solicit */
+ 3, /* nd_max_ucast_solicit */
+ RETRANS_TIMER, /* nd_retrans_time */
+ RECHABLE_TIME, /* nd_base_reach_time */
+ (5 * HZ), /* nd_delay_probe_time */
+
+ 1, /* autoconfiguration */
+ 1, /* dad transmits */
+ MAX_RTR_SOLICITATIONS, /* router solicits */
+ RTR_SOLICITATION_INTERVAL, /* rtr solicit interval */
+ MAX_RTR_SOLICITATION_DELAY, /* rtr solicit delay */
+
+ 60*HZ, /* rt cache timeout */
+ 30*HZ, /* rt gc period */
+};
-int ipv6_hop_limit = IPV6_DEFAULT_HOPLIMIT;
+#ifdef CONFIG_SYSCTL
int ipv6_sysctl_forwarding(ctl_table *ctl, int write, struct file * filp,
void *buffer, size_t *lenp)
{
- int val = ipv6_forwarding;
+ int val = ipv6_config.forwarding;
int retv;
retv = proc_dointvec(ctl, write, filp, buffer, lenp);
- if (write)
- {
- if (ipv6_forwarding && val == 0) {
+ if (write) {
+ if (ipv6_config.forwarding && val == 0) {
printk(KERN_DEBUG "sysctl: IPv6 forwarding enabled\n");
ndisc_forwarding_on();
addrconf_forwarding_on();
}
- if (ipv6_forwarding == 0 && val) {
+ if (ipv6_config.forwarding == 0 && val)
ndisc_forwarding_off();
- }
}
return retv;
}
ctl_table ipv6_table[] = {
- {NET_IPV6_FORWARDING, "ipv6_forwarding",
- &ipv6_forwarding, sizeof(int), 0644, NULL,
+ {NET_IPV6_FORWARDING, "forwarding",
+ &ipv6_config.forwarding, sizeof(int), 0644, NULL,
&ipv6_sysctl_forwarding},
- {NET_IPV6_HOPLIMIT, "ipv6_hop_limit",
- &ipv6_hop_limit, sizeof(int), 0644, NULL,
+ {NET_IPV6_HOPLIMIT, "hop_limit",
+ &ipv6_config.hop_limit, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_ACCEPT_RA, "accept_ra",
+ &ipv6_config.accept_ra, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_ACCEPT_REDIRECTS, "accept_redirects",
+ &ipv6_config.accept_redirects, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_ND_MAX_MCAST_SOLICIT, "nd_max_mcast_solicit",
+ &ipv6_config.nd_max_mcast_solicit, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_ND_MAX_UCAST_SOLICIT, "nd_max_ucast_solicit",
+ &ipv6_config.nd_max_ucast_solicit, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_ND_RETRANS_TIME, "nd_retrans_time",
+ &ipv6_config.nd_retrans_time, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_ND_REACHABLE_TIME, "nd_base_reachble_time",
+ &ipv6_config.nd_base_reachable_time, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_ND_DELAY_PROBE_TIME, "nd_delay_first_probe_time",
+ &ipv6_config.nd_delay_probe_time, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_AUTOCONF, "autoconf",
+ &ipv6_config.autoconf, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_DAD_TRANSMITS, "dad_transmits",
+ &ipv6_config.dad_transmits, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_RTR_SOLICITS, "router_solicitations",
+ &ipv6_config.rtr_solicits, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_RTR_SOLICIT_INTERVAL, "router_solicitation_interval",
+ &ipv6_config.rtr_solicit_interval, sizeof(int), 0644, NULL,
+ &proc_dointvec},
+
+ {NET_IPV6_RTR_SOLICIT_DELAY, "router_solicitation_delay",
+ &ipv6_config.rtr_solicit_delay, sizeof(int), 0644, NULL,
&proc_dointvec},
{0}
@@ -73,6 +142,9 @@ void ipv6_sysctl_unregister(void)
{
unregister_sysctl_table(ipv6_sysctl_header);
}
+#endif /* MODULE */
+
+#endif /* CONFIG_SYSCTL */
+
-#endif