Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
[linux-2.6] / net / llc / sysctl_net_llc.c
1 /*
2  * sysctl_net_llc.c: sysctl interface to LLC net subsystem.
3  *
4  * Arnaldo Carvalho de Melo <acme@conectiva.com.br>
5  */
6
7 #include <linux/mm.h>
8 #include <linux/init.h>
9 #include <linux/sysctl.h>
10 #include <net/llc.h>
11
12 #ifndef CONFIG_SYSCTL
13 #error This file should not be compiled without CONFIG_SYSCTL defined
14 #endif
15
16 static struct ctl_table llc2_timeout_table[] = {
17         {
18                 .ctl_name       = NET_LLC2_ACK_TIMEOUT,
19                 .procname       = "ack",
20                 .data           = &sysctl_llc2_ack_timeout,
21                 .maxlen         = sizeof(long),
22                 .mode           = 0644,
23                 .proc_handler   = &proc_dointvec_jiffies,
24                 .strategy       = &sysctl_jiffies,
25         },
26         {
27                 .ctl_name       = NET_LLC2_BUSY_TIMEOUT,
28                 .procname       = "busy",
29                 .data           = &sysctl_llc2_busy_timeout,
30                 .maxlen         = sizeof(long),
31                 .mode           = 0644,
32                 .proc_handler   = &proc_dointvec_jiffies,
33                 .strategy       = &sysctl_jiffies,
34         },
35         {
36                 .ctl_name       = NET_LLC2_P_TIMEOUT,
37                 .procname       = "p",
38                 .data           = &sysctl_llc2_p_timeout,
39                 .maxlen         = sizeof(long),
40                 .mode           = 0644,
41                 .proc_handler   = &proc_dointvec_jiffies,
42                 .strategy       = &sysctl_jiffies,
43         },
44         {
45                 .ctl_name       = NET_LLC2_REJ_TIMEOUT,
46                 .procname       = "rej",
47                 .data           = &sysctl_llc2_rej_timeout,
48                 .maxlen         = sizeof(long),
49                 .mode           = 0644,
50                 .proc_handler   = &proc_dointvec_jiffies,
51                 .strategy       = &sysctl_jiffies,
52         },
53         { 0 },
54 };
55
56 static struct ctl_table llc_station_table[] = {
57         {
58                 .ctl_name       = NET_LLC_STATION_ACK_TIMEOUT,
59                 .procname       = "ack_timeout",
60                 .data           = &sysctl_llc_station_ack_timeout,
61                 .maxlen         = sizeof(long),
62                 .mode           = 0644,
63                 .proc_handler   = &proc_dointvec_jiffies,
64                 .strategy       = &sysctl_jiffies,
65         },
66         { 0 },
67 };
68
69 static struct ctl_table llc2_dir_timeout_table[] = {
70         {
71                 .ctl_name       = NET_LLC2,
72                 .procname       = "timeout",
73                 .mode           = 0555,
74                 .child          = llc2_timeout_table,
75         },
76         { 0 },
77 };
78
79 static struct ctl_table llc_table[] = {
80         {
81                 .ctl_name       = NET_LLC2,
82                 .procname       = "llc2",
83                 .mode           = 0555,
84                 .child          = llc2_dir_timeout_table,
85         },
86         {
87                 .ctl_name       = NET_LLC_STATION,
88                 .procname       = "station",
89                 .mode           = 0555,
90                 .child          = llc_station_table,
91         },
92         { 0 },
93 };
94
95 static struct ctl_table llc_dir_table[] = {
96         {
97                 .ctl_name       = NET_LLC,
98                 .procname       = "llc",
99                 .mode           = 0555,
100                 .child          = llc_table,
101         },
102         { 0 },
103 };
104
105 static struct ctl_table llc_root_table[] = {
106         {
107                 .ctl_name       = CTL_NET,
108                 .procname       = "net",
109                 .mode           = 0555,
110                 .child          = llc_dir_table,
111         },
112         { 0 },
113 };
114
115 static struct ctl_table_header *llc_table_header;
116
117 int __init llc_sysctl_init(void)
118 {
119         llc_table_header = register_sysctl_table(llc_root_table);
120
121         return llc_table_header ? 0 : -ENOMEM;
122 }
123
124 void llc_sysctl_exit(void)
125 {
126         if (llc_table_header) {
127                 unregister_sysctl_table(llc_table_header);
128                 llc_table_header = NULL;
129         }
130 }