d6c2d2f0380be97d5f956035ec90692084c5c279
[openafs.git] / src / afs / LINUX / osi_sysctl.c
1 /*
2  * osi_sysctl.c: Linux sysctl interface to OpenAFS
3  *
4  * $Id$
5  *
6  * Written Jan 30, 2002 by Kris Van Hees (Sine Nomine Associates)
7  */
8
9 #include <afsconfig.h>
10 #include "afs/param.h"
11
12 #include "afs/sysincludes.h"    /* Standard vendor system headers */
13 #include "afsincludes.h"        /* Afs-based standard headers */
14 #include "afs/afs_stats.h"      /* afs statistics */
15
16 #include <linux/sysctl.h>
17 #ifdef CONFIG_H_EXISTS
18 #include <linux/config.h>
19 #endif
20
21 /* From afs_util.c */
22 extern afs_int32 afs_new_inum;
23
24 /* From afs_analyze.c */
25 extern afs_int32 hm_retry_RO;
26 extern afs_int32 hm_retry_RW;
27 extern afs_int32 hm_retry_int;
28 extern afs_int32 afs_blocksUsed_0;
29 extern afs_int32 afs_blocksUsed_1;
30 extern afs_int32 afs_blocksUsed_2;
31 extern afs_int32 afs_pct1;
32 extern afs_int32 afs_pct2;
33
34 #ifdef CONFIG_SYSCTL
35 static struct ctl_table_header *afs_sysctl = NULL;
36
37 static ctl_table afs_sysctl_table[] = {
38     {
39         .ctl_name       = 1, 
40         .procname       = "hm_retry_RO",
41         .data           = &hm_retry_RO, 
42         .maxlen         = sizeof(afs_int32), 
43         .mode           = 0644,
44         .proc_handler   = &proc_dointvec
45     },
46     {
47         .ctl_name       = 2, 
48         .procname       = "hm_retry_RW",
49         .data           = &hm_retry_RW,
50         .maxlen         = sizeof(afs_int32), 
51         .mode           = 0644,
52         .proc_handler   = &proc_dointvec
53     },
54     {
55         .ctl_name       = 3, 
56         .procname       = "hm_retry_int",
57         .data           = &hm_retry_int, 
58         .maxlen         = sizeof(afs_int32), 
59         .mode           = 0644,
60         .proc_handler   = &proc_dointvec
61     },
62     {
63         .ctl_name       = 4, 
64         .procname       = "GCPAGs",
65         .data           = &afs_gcpags, 
66         .maxlen         = sizeof(afs_int32), 
67         .mode           = 0644,
68         .proc_handler   = &proc_dointvec
69     },
70     {
71         .ctl_name       = 5, 
72         .procname       = "rx_deadtime",
73         .data           = &afs_rx_deadtime, 
74         .maxlen         = sizeof(afs_int32), 
75         .mode           = 0644,
76         .proc_handler   = &proc_dointvec
77     },
78     {
79         .ctl_name       = 6, 
80         .procname       = "bkVolPref",
81         .data           = &afs_bkvolpref, 
82         .maxlen         = sizeof(afs_int32), 
83         .mode           = 0644,
84         .proc_handler   = &proc_dointvec
85     },
86     {
87         .ctl_name       = 7, 
88         .procname       = "afs_blocksUsed",
89         .data           = &afs_blocksUsed,
90         .maxlen         = sizeof(afs_int32), 
91         .mode           = 0444,
92         .proc_handler   = &proc_dointvec
93     },
94     {
95         .ctl_name       = 8, 
96         .procname       = "afs_blocksUsed_0",
97         .data           = &afs_blocksUsed_0,
98         .maxlen         = sizeof(afs_int32),
99         .mode           = 0644,
100         .proc_handler   = &proc_dointvec
101     },
102     {
103         .ctl_name       = 9, 
104         .procname       = "afs_blocksUsed_1",
105         .data           = &afs_blocksUsed_1, 
106         .maxlen         = sizeof(afs_int32),
107         .mode           = 0644,
108         .proc_handler   = &proc_dointvec
109     },
110     {
111         .ctl_name       = 10, 
112         .procname       = "afs_blocksUsed_2",
113         .data           = &afs_blocksUsed_2, 
114         .maxlen         = sizeof(afs_int32), 
115         .mode           = 0644,
116         .proc_handler   = &proc_dointvec
117     },
118     {
119         .ctl_name       = 11, 
120         .procname       = "afs_pct1",
121         .data           = &afs_pct1, 
122         .maxlen         = sizeof(afs_int32),
123         .mode           = 0644,
124         .proc_handler   = &proc_dointvec
125     },
126     {
127         .ctl_name       = 12, 
128         .procname       = "afs_pct2",
129         .data           = &afs_pct2, 
130         .maxlen         = sizeof(afs_int32),
131         .mode           = 0644,
132         .proc_handler   = &proc_dointvec
133     },
134     {
135         .ctl_name       = 13,
136         .procname       = "afs_cacheBlocks",
137         .data           = &afs_cacheBlocks,
138         .maxlen         = sizeof(afs_int32),
139         .mode           = 0644,
140         .proc_handler   = &proc_dointvec
141     },
142     {
143         .ctl_name       = 14, 
144         .procname       = "md5inum",
145         .data           = &afs_new_inum, 
146         .maxlen         = sizeof(afs_int32),
147         .mode           = 0644,
148         .proc_handler   = &proc_dointvec
149     },
150     {0}
151 };
152
153 static ctl_table fs_sysctl_table[] = {
154     {
155         .ctl_name       = 1, 
156         .procname       = "afs", 
157         .mode           = 0555, 
158         .child          = afs_sysctl_table
159     },
160     {0}
161 };
162
163 int
164 osi_sysctl_init()
165 {
166 #if defined(REGISTER_SYSCTL_TABLE_NOFLAG)
167     afs_sysctl = register_sysctl_table(fs_sysctl_table);
168 #else
169     afs_sysctl = register_sysctl_table(fs_sysctl_table, 0);
170 #endif
171     if (!afs_sysctl)
172         return -1;
173
174     return 0;
175 }
176
177 void
178 osi_sysctl_clean()
179 {
180     if (afs_sysctl) {
181         unregister_sysctl_table(afs_sysctl);
182         afs_sysctl = NULL;
183     }
184 }
185
186 #endif /* CONFIG_SYSCTL */