diff options
Diffstat (limited to 'net/ipv6/sysctl_net_ipv6.c')
-rw-r--r-- | net/ipv6/sysctl_net_ipv6.c | 96 |
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 |