Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.25 /net/sysctl_net.c

Filename:/net/sysctl_net.c
Lines Added:55
Lines Deleted:24
Also changed in: (Previous) 2.6.25-rc9  2.6.25-rc8  2.6.25-rc7  2.6.25-rc6  2.6.25-rc5  2.6.25-rc4 
(Following) 2.6.25-git20  2.6.26-rc1  2.6.26-rc2  2.6.26-rc3  2.6.26-rc4  2.6.26-rc5 

Location
[  2.6.25
  [  net
     o  sysctl_net.c

Patch

diff --git a/net/sysctl_net.c b/net/sysctl_net.c
index cd4eafb..665e856 100644
--- a/net/sysctl_net.c
+++ b/net/sysctl_net.c
@@ -14,6 +14,7 @@
 
 #include <linux/mm.h>
 #include <linux/sysctl.h>
+#include <linux/nsproxy.h>
 
 #include <net/sock.h>
 
@@ -29,28 +30,58 @@
 #include <linux/if_tr.h>
 #endif
 
-struct ctl_table net_table[] = {
-   {
-      .ctl_name   = NET_CORE,
-      .procname   = "core",
-      .mode      = 0555,
-      .child      = core_table,
-   },
-#ifdef CONFIG_INET
-   {
-      .ctl_name   = NET_IPV4,
-      .procname   = "ipv4",
-      .mode      = 0555,
-      .child      = ipv4_table
-   },
-#endif
-#ifdef CONFIG_TR
-   {
-      .ctl_name   = NET_TR,
-      .procname   = "token-ring",
-      .mode      = 0555,
-      .child      = tr_table,
-   },
-#endif
-   { 0 },
+static struct list_head *
+net_ctl_header_lookup(struct ctl_table_root *root, struct nsproxy *namespaces)
+{
+   return &namespaces->net_ns->sysctl_table_headers;
+}
+
+static struct ctl_table_root net_sysctl_root = {
+   .lookup = net_ctl_header_lookup,
+};
+
+static int sysctl_net_init(struct net *net)
+{
+   INIT_LIST_HEAD(&net->sysctl_table_headers);
+   return 0;
+}
+
+static void sysctl_net_exit(struct net *net)
+{
+   WARN_ON(!list_empty(&net->sysctl_table_headers));
+   return;
+}
+
+static struct pernet_operations sysctl_pernet_ops = {
+   .init = sysctl_net_init,
+   .exit = sysctl_net_exit,
 };
+
+static __init int sysctl_init(void)
+{
+   int ret;
+   ret = register_pernet_subsys(&sysctl_pernet_ops);
+   if (ret)
+      goto out;
+   register_sysctl_root(&net_sysctl_root);
+out:
+   return ret;
+}
+subsys_initcall(sysctl_init);
+
+struct ctl_table_header *register_net_sysctl_table(struct net *net,
+   const struct ctl_path *path, struct ctl_table *table)
+{
+   struct nsproxy namespaces;
+   namespaces = *current->nsproxy;
+   namespaces.net_ns = net;
+   return __register_sysctl_paths(&net_sysctl_root,
+               &namespaces, path, table);
+}
+EXPORT_SYMBOL_GPL(register_net_sysctl_table);
+
+void unregister_net_sysctl_table(struct ctl_table_header *header)
+{
+   return unregister_sysctl_table(header);
+}
+EXPORT_SYMBOL_GPL(unregister_net_sysctl_table);


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.