diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-08-07 03:23:59 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-08-15 02:30:37 -0400 |
commit | ebb7e95d9351f77a8ec1fca20eb645051401b7b2 (patch) | |
tree | 9edfe4abbdac8c05f3fe19ef3eb5d7e32500b69b /net | |
parent | b01a24078fa3fc4f0f447d1306ce5adc495ead86 (diff) |
sctp: Add infrastructure for per net sysctls
Start with an empty sctp_net_table that will be populated as the various
tunable sysctls are made per net.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Acked-by: Vlad Yasevich <vyasevich@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/sctp/protocol.c | 7 | ||||
-rw-r--r-- | net/sctp/sysctl.c | 21 |
2 files changed, 28 insertions, 0 deletions
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index d58db315db85..0f2342be61f3 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -1169,6 +1169,10 @@ static int sctp_net_init(struct net *net) | |||
1169 | { | 1169 | { |
1170 | int status; | 1170 | int status; |
1171 | 1171 | ||
1172 | status = sctp_sysctl_net_register(net); | ||
1173 | if (status) | ||
1174 | goto err_sysctl_register; | ||
1175 | |||
1172 | /* Allocate and initialise sctp mibs. */ | 1176 | /* Allocate and initialise sctp mibs. */ |
1173 | status = init_sctp_mibs(net); | 1177 | status = init_sctp_mibs(net); |
1174 | if (status) | 1178 | if (status) |
@@ -1208,6 +1212,8 @@ err_ctl_sock_init: | |||
1208 | err_init_proc: | 1212 | err_init_proc: |
1209 | cleanup_sctp_mibs(net); | 1213 | cleanup_sctp_mibs(net); |
1210 | err_init_mibs: | 1214 | err_init_mibs: |
1215 | sctp_sysctl_net_unregister(net); | ||
1216 | err_sysctl_register: | ||
1211 | return status; | 1217 | return status; |
1212 | } | 1218 | } |
1213 | 1219 | ||
@@ -1224,6 +1230,7 @@ static void sctp_net_exit(struct net *net) | |||
1224 | 1230 | ||
1225 | sctp_proc_exit(net); | 1231 | sctp_proc_exit(net); |
1226 | cleanup_sctp_mibs(net); | 1232 | cleanup_sctp_mibs(net); |
1233 | sctp_sysctl_net_unregister(net); | ||
1227 | } | 1234 | } |
1228 | 1235 | ||
1229 | static struct pernet_operations sctp_net_ops = { | 1236 | static struct pernet_operations sctp_net_ops = { |
diff --git a/net/sctp/sysctl.c b/net/sctp/sysctl.c index 2b2bfe933ff1..bee36c408dde 100644 --- a/net/sctp/sysctl.c +++ b/net/sctp/sysctl.c | |||
@@ -284,6 +284,27 @@ static ctl_table sctp_table[] = { | |||
284 | { /* sentinel */ } | 284 | { /* sentinel */ } |
285 | }; | 285 | }; |
286 | 286 | ||
287 | static ctl_table sctp_net_table[] = { | ||
288 | { /* sentinel */ } | ||
289 | }; | ||
290 | |||
291 | int sctp_sysctl_net_register(struct net *net) | ||
292 | { | ||
293 | struct ctl_table *table; | ||
294 | |||
295 | table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL); | ||
296 | if (!table) | ||
297 | return -ENOMEM; | ||
298 | |||
299 | net->sctp.sysctl_header = register_net_sysctl(net, "net/sctp", table); | ||
300 | return 0; | ||
301 | } | ||
302 | |||
303 | void sctp_sysctl_net_unregister(struct net *net) | ||
304 | { | ||
305 | unregister_net_sysctl_table(net->sctp.sysctl_header); | ||
306 | } | ||
307 | |||
287 | static struct ctl_table_header * sctp_sysctl_header; | 308 | static struct ctl_table_header * sctp_sysctl_header; |
288 | 309 | ||
289 | /* Sysctl registration. */ | 310 | /* Sysctl registration. */ |