aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2012-08-07 03:23:59 -0400
committerDavid S. Miller <davem@davemloft.net>2012-08-15 02:30:37 -0400
commitebb7e95d9351f77a8ec1fca20eb645051401b7b2 (patch)
tree9edfe4abbdac8c05f3fe19ef3eb5d7e32500b69b /net
parentb01a24078fa3fc4f0f447d1306ce5adc495ead86 (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.c7
-rw-r--r--net/sctp/sysctl.c21
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:
1208err_init_proc: 1212err_init_proc:
1209 cleanup_sctp_mibs(net); 1213 cleanup_sctp_mibs(net);
1210err_init_mibs: 1214err_init_mibs:
1215 sctp_sysctl_net_unregister(net);
1216err_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
1229static struct pernet_operations sctp_net_ops = { 1236static 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
287static ctl_table sctp_net_table[] = {
288 { /* sentinel */ }
289};
290
291int 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
303void sctp_sysctl_net_unregister(struct net *net)
304{
305 unregister_net_sysctl_table(net->sctp.sysctl_header);
306}
307
287static struct ctl_table_header * sctp_sysctl_header; 308static struct ctl_table_header * sctp_sysctl_header;
288 309
289/* Sysctl registration. */ 310/* Sysctl registration. */