patch-2.1.8 linux/net/ipv6/sysctl_net_ipv6.c

Next file: linux/net/ipv6/tcp_ipv6.c
Previous file: linux/net/ipv6/sit.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.7/linux/net/ipv6/sysctl_net_ipv6.c linux/net/ipv6/sysctl_net_ipv6.c
@@ -0,0 +1,78 @@
+/*
+ * sysctl_net_ipv6.c: sysctl interface to net IPV6 subsystem.
+ */
+
+#include <linux/mm.h>
+#include <linux/sysctl.h>
+#include <linux/in6.h>
+#include <linux/ipv6.h>
+#include <net/ndisc.h>
+#include <net/ipv6.h>
+#include <net/addrconf.h>
+
+
+int ipv6_hop_limit = IPV6_DEFAULT_HOPLIMIT;
+
+int ipv6_sysctl_forwarding(ctl_table *ctl, int write, struct file * filp,
+			   void *buffer, size_t *lenp)
+{
+	int val = ipv6_forwarding;
+	int retv;
+
+	retv = proc_dointvec(ctl, write, filp, buffer, lenp);
+
+	if (write)
+	{
+		if (ipv6_forwarding && val == 0) {
+			printk(KERN_DEBUG "sysctl: IPv6 forwarding enabled\n");
+			ndisc_forwarding_on();
+			addrconf_forwarding_on();		       
+		}
+
+		if (ipv6_forwarding == 0 && val) {
+			ndisc_forwarding_off();
+		}
+	}
+	return retv;
+}
+
+ctl_table ipv6_table[] = {
+        {NET_IPV6_FORWARDING, "ipv6_forwarding",
+         &ipv6_forwarding, sizeof(int), 0644, NULL,
+         &ipv6_sysctl_forwarding},
+
+	{NET_IPV6_HOPLIMIT, "ipv6_hop_limit",
+         &ipv6_hop_limit, sizeof(int), 0644, NULL,
+         &proc_dointvec},
+
+	{0}
+};
+
+#ifdef MODULE
+static struct ctl_table_header *ipv6_sysctl_header;
+static struct ctl_table ipv6_root_table[];
+static struct ctl_table ipv6_net_table[];
+
+
+ctl_table ipv6_root_table[] = {
+	{CTL_NET, "net", NULL, 0, 0555, ipv6_net_table},
+        {0}
+};
+
+ctl_table ipv6_net_table[] = {
+	{NET_IPV6, "ipv6", NULL, 0, 0555, ipv6_table},
+        {0}
+};
+
+void ipv6_sysctl_register(void)
+{
+	ipv6_sysctl_header = register_sysctl_table(ipv6_root_table, 0);
+}
+
+void ipv6_sysctl_unregister(void)
+{
+	unregister_sysctl_table(ipv6_sysctl_header);
+}
+
+#endif
+

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov