linux/net/sysctl_net.c
<<
>>
Prefs
   1/* -*- linux-c -*-
   2 * sysctl_net.c: sysctl interface to net subsystem.
   3 *
   4 * Begun April 1, 1996, Mike Shaver.
   5 * Added /proc/sys/net directories for each protocol family. [MS]
   6 *
   7 * $Log: sysctl_net.c,v $
   8 * Revision 1.2  1996/05/08  20:24:40  shaver
   9 * Added bits for NET_BRIDGE and the NET_IPV4_ARP stuff and
  10 * NET_IPV4_IP_FORWARD.
  11 *
  12 *
  13 */
  14
  15#include <linux/mm.h>
  16#include <linux/sysctl.h>
  17#include <linux/nsproxy.h>
  18
  19#include <net/sock.h>
  20
  21#ifdef CONFIG_INET
  22#include <net/ip.h>
  23#endif
  24
  25#ifdef CONFIG_NET
  26#include <linux/if_ether.h>
  27#endif
  28
  29#ifdef CONFIG_TR
  30#include <linux/if_tr.h>
  31#endif
  32
  33static struct list_head *
  34net_ctl_header_lookup(struct ctl_table_root *root, struct nsproxy *namespaces)
  35{
  36        return &namespaces->net_ns->sysctl_table_headers;
  37}
  38
  39static struct ctl_table_root net_sysctl_root = {
  40        .lookup = net_ctl_header_lookup,
  41};
  42
  43static int sysctl_net_init(struct net *net)
  44{
  45        INIT_LIST_HEAD(&net->sysctl_table_headers);
  46        return 0;
  47}
  48
  49static void sysctl_net_exit(struct net *net)
  50{
  51        WARN_ON(!list_empty(&net->sysctl_table_headers));
  52        return;
  53}
  54
  55static struct pernet_operations sysctl_pernet_ops = {
  56        .init = sysctl_net_init,
  57        .exit = sysctl_net_exit,
  58};
  59
  60static __init int sysctl_init(void)
  61{
  62        int ret;
  63        ret = register_pernet_subsys(&sysctl_pernet_ops);
  64        if (ret)
  65                goto out;
  66        register_sysctl_root(&net_sysctl_root);
  67out:
  68        return ret;
  69}
  70subsys_initcall(sysctl_init);
  71
  72struct ctl_table_header *register_net_sysctl_table(struct net *net,
  73        const struct ctl_path *path, struct ctl_table *table)
  74{
  75        struct nsproxy namespaces;
  76        namespaces = *current->nsproxy;
  77        namespaces.net_ns = net;
  78        return __register_sysctl_paths(&net_sysctl_root,
  79                                        &namespaces, path, table);
  80}
  81EXPORT_SYMBOL_GPL(register_net_sysctl_table);
  82
  83void unregister_net_sysctl_table(struct ctl_table_header *header)
  84{
  85        return unregister_sysctl_table(header);
  86}
  87EXPORT_SYMBOL_GPL(unregister_net_sysctl_table);
  88
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.