net/tls: add skeleton of MIB statistics
[sfrench/cifs-2.6.git] / net / tls / tls_main.c
index 237e58e4928aff18fe9fc6f498056351e5095a20..686eba0df5908d3fbcc19f7b8ed5e289a0499e94 100644 (file)
@@ -41,6 +41,7 @@
 #include <linux/inetdevice.h>
 #include <linux/inet_diag.h>
 
+#include <net/snmp.h>
 #include <net/tls.h>
 #include <net/tls_toe.h>
 
@@ -795,6 +796,35 @@ static size_t tls_get_info_size(const struct sock *sk)
        return size;
 }
 
+static int __net_init tls_init_net(struct net *net)
+{
+       int err;
+
+       net->mib.tls_statistics = alloc_percpu(struct linux_tls_mib);
+       if (!net->mib.tls_statistics)
+               return -ENOMEM;
+
+       err = tls_proc_init(net);
+       if (err)
+               goto err_free_stats;
+
+       return 0;
+err_free_stats:
+       free_percpu(net->mib.tls_statistics);
+       return err;
+}
+
+static void __net_exit tls_exit_net(struct net *net)
+{
+       tls_proc_fini(net);
+       free_percpu(net->mib.tls_statistics);
+}
+
+static struct pernet_operations tls_proc_ops = {
+       .init = tls_init_net,
+       .exit = tls_exit_net,
+};
+
 static struct tcp_ulp_ops tcp_tls_ulp_ops __read_mostly = {
        .name                   = "tls",
        .owner                  = THIS_MODULE,
@@ -806,6 +836,12 @@ static struct tcp_ulp_ops tcp_tls_ulp_ops __read_mostly = {
 
 static int __init tls_register(void)
 {
+       int err;
+
+       err = register_pernet_subsys(&tls_proc_ops);
+       if (err)
+               return err;
+
        tls_sw_proto_ops = inet_stream_ops;
        tls_sw_proto_ops.splice_read = tls_sw_splice_read;
 
@@ -819,6 +855,7 @@ static void __exit tls_unregister(void)
 {
        tcp_unregister_ulp(&tcp_tls_ulp_ops);
        tls_device_cleanup();
+       unregister_pernet_subsys(&tls_proc_ops);
 }
 
 module_init(tls_register);