DEVEL15-linux-2624-20071123
[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 #if defined(SYSCTL_TABLE_CHECKING)
40         .ctl_name       = CTL_UNNUMBERED, 
41 #else
42         .ctl_name       = 1, 
43 #endif
44         .procname       = "hm_retry_RO",
45         .data           = &hm_retry_RO, 
46         .maxlen         = sizeof(afs_int32), 
47         .mode           = 0644,
48         .proc_handler   = &proc_dointvec
49     },
50     {
51 #if defined(SYSCTL_TABLE_CHECKING)
52         .ctl_name       = CTL_UNNUMBERED, 
53 #else
54         .ctl_name       = 2, 
55 #endif
56         .procname       = "hm_retry_RW",
57         .data           = &hm_retry_RW,
58         .maxlen         = sizeof(afs_int32), 
59         .mode           = 0644,
60         .proc_handler   = &proc_dointvec
61     },
62     {
63 #if defined(SYSCTL_TABLE_CHECKING)
64         .ctl_name       = CTL_UNNUMBERED, 
65 #else
66         .ctl_name       = 3, 
67 #endif
68         .procname       = "hm_retry_int",
69         .data           = &hm_retry_int, 
70         .maxlen         = sizeof(afs_int32), 
71         .mode           = 0644,
72         .proc_handler   = &proc_dointvec
73     },
74     {
75 #if defined(SYSCTL_TABLE_CHECKING)
76         .ctl_name       = CTL_UNNUMBERED, 
77 #else
78         .ctl_name       = 4, 
79 #endif
80         .procname       = "GCPAGs",
81         .data           = &afs_gcpags, 
82         .maxlen         = sizeof(afs_int32), 
83         .mode           = 0644,
84         .proc_handler   = &proc_dointvec
85     },
86     {
87 #if defined(SYSCTL_TABLE_CHECKING)
88         .ctl_name       = CTL_UNNUMBERED, 
89 #else
90         .ctl_name       = 5, 
91 #endif
92         .procname       = "rx_deadtime",
93         .data           = &afs_rx_deadtime, 
94         .maxlen         = sizeof(afs_int32), 
95         .mode           = 0644,
96         .proc_handler   = &proc_dointvec
97     },
98     {
99 #if defined(SYSCTL_TABLE_CHECKING)
100         .ctl_name       = CTL_UNNUMBERED, 
101 #else
102         .ctl_name       = 6, 
103 #endif
104         .procname       = "bkVolPref",
105         .data           = &afs_bkvolpref, 
106         .maxlen         = sizeof(afs_int32), 
107         .mode           = 0644,
108         .proc_handler   = &proc_dointvec
109     },
110     {
111         .ctl_name       = 7, 
112         .procname       = "afs_blocksUsed",
113         .data           = &afs_blocksUsed,
114         .maxlen         = sizeof(afs_int32), 
115         .mode           = 0444,
116         .proc_handler   = &proc_dointvec
117     },
118     {
119         .ctl_name       = 8, 
120         .procname       = "afs_blocksUsed_0",
121         .data           = &afs_blocksUsed_0,
122         .maxlen         = sizeof(afs_int32),
123         .mode           = 0644,
124         .proc_handler   = &proc_dointvec
125     },
126     {
127         .ctl_name       = 9, 
128         .procname       = "afs_blocksUsed_1",
129         .data           = &afs_blocksUsed_1, 
130         .maxlen         = sizeof(afs_int32),
131         .mode           = 0644,
132         .proc_handler   = &proc_dointvec
133     },
134     {
135         .ctl_name       = 10, 
136         .procname       = "afs_blocksUsed_2",
137         .data           = &afs_blocksUsed_2, 
138         .maxlen         = sizeof(afs_int32), 
139         .mode           = 0644,
140         .proc_handler   = &proc_dointvec
141     },
142     {
143         .ctl_name       = 11, 
144         .procname       = "afs_pct1",
145         .data           = &afs_pct1, 
146         .maxlen         = sizeof(afs_int32),
147         .mode           = 0644,
148         .proc_handler   = &proc_dointvec
149     },
150     {
151         .ctl_name       = 12, 
152         .procname       = "afs_pct2",
153         .data           = &afs_pct2, 
154         .maxlen         = sizeof(afs_int32),
155         .mode           = 0644,
156         .proc_handler   = &proc_dointvec
157     },
158     {
159         .ctl_name       = 13,
160         .procname       = "afs_cacheBlocks",
161         .data           = &afs_cacheBlocks,
162         .maxlen         = sizeof(afs_int32),
163         .mode           = 0644,
164         .proc_handler   = &proc_dointvec
165     },
166     {
167         .ctl_name       = 14, 
168         .procname       = "md5inum",
169         .data           = &afs_new_inum, 
170         .maxlen         = sizeof(afs_int32),
171         .mode           = 0644,
172         .proc_handler   = &proc_dointvec
173     },
174     {0}
175 };
176
177 static ctl_table fs_sysctl_table[] = {
178     {
179 #if defined(SYSCTL_TABLE_CHECKING)
180         .ctl_name       = CTL_UNNUMBERED, 
181 #else
182         .ctl_name       = 1, 
183 #endif
184         .procname       = "afs", 
185         .mode           = 0555, 
186         .child          = afs_sysctl_table
187     },
188     {0}
189 };
190
191 int
192 osi_sysctl_init()
193 {
194 #if defined(REGISTER_SYSCTL_TABLE_NOFLAG)
195     afs_sysctl = register_sysctl_table(fs_sysctl_table);
196 #else
197     afs_sysctl = register_sysctl_table(fs_sysctl_table, 0);
198 #endif
199     if (!afs_sysctl)
200         return -1;
201
202     return 0;
203 }
204
205 void
206 osi_sysctl_clean()
207 {
208     if (afs_sysctl) {
209         unregister_sysctl_table(afs_sysctl);
210         afs_sysctl = NULL;
211     }
212 }
213
214 #endif /* CONFIG_SYSCTL */