Merge tag 'media/v4.8-7' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[cascardo/linux.git] / net / rxrpc / sysctl.c
1 /* sysctls for configuring RxRPC operating parameters
2  *
3  * Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells (dhowells@redhat.com)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public Licence
8  * as published by the Free Software Foundation; either version
9  * 2 of the Licence, or (at your option) any later version.
10  */
11
12 #include <linux/sysctl.h>
13 #include <net/sock.h>
14 #include <net/af_rxrpc.h>
15 #include "ar-internal.h"
16
17 static struct ctl_table_header *rxrpc_sysctl_reg_table;
18 static const unsigned int zero = 0;
19 static const unsigned int one = 1;
20 static const unsigned int four = 4;
21 static const unsigned int thirtytwo = 32;
22 static const unsigned int n_65535 = 65535;
23 static const unsigned int n_max_acks = RXRPC_MAXACKS;
24
25 /*
26  * RxRPC operating parameters.
27  *
28  * See Documentation/networking/rxrpc.txt and the variable definitions for more
29  * information on the individual parameters.
30  */
31 static struct ctl_table rxrpc_sysctl_table[] = {
32         /* Values measured in milliseconds */
33         {
34                 .procname       = "req_ack_delay",
35                 .data           = &rxrpc_requested_ack_delay,
36                 .maxlen         = sizeof(unsigned int),
37                 .mode           = 0644,
38                 .proc_handler   = proc_dointvec_ms_jiffies,
39                 .extra1         = (void *)&zero,
40         },
41         {
42                 .procname       = "soft_ack_delay",
43                 .data           = &rxrpc_soft_ack_delay,
44                 .maxlen         = sizeof(unsigned int),
45                 .mode           = 0644,
46                 .proc_handler   = proc_dointvec_ms_jiffies,
47                 .extra1         = (void *)&one,
48         },
49         {
50                 .procname       = "idle_ack_delay",
51                 .data           = &rxrpc_idle_ack_delay,
52                 .maxlen         = sizeof(unsigned int),
53                 .mode           = 0644,
54                 .proc_handler   = proc_dointvec_ms_jiffies,
55                 .extra1         = (void *)&one,
56         },
57         {
58                 .procname       = "resend_timeout",
59                 .data           = &rxrpc_resend_timeout,
60                 .maxlen         = sizeof(unsigned int),
61                 .mode           = 0644,
62                 .proc_handler   = proc_dointvec_ms_jiffies,
63                 .extra1         = (void *)&one,
64         },
65
66         /* Values measured in seconds but used in jiffies */
67         {
68                 .procname       = "max_call_lifetime",
69                 .data           = &rxrpc_max_call_lifetime,
70                 .maxlen         = sizeof(unsigned int),
71                 .mode           = 0644,
72                 .proc_handler   = proc_dointvec_jiffies,
73                 .extra1         = (void *)&one,
74         },
75         {
76                 .procname       = "dead_call_expiry",
77                 .data           = &rxrpc_dead_call_expiry,
78                 .maxlen         = sizeof(unsigned int),
79                 .mode           = 0644,
80                 .proc_handler   = proc_dointvec_jiffies,
81                 .extra1         = (void *)&one,
82         },
83
84         /* Values measured in seconds */
85         {
86                 .procname       = "connection_expiry",
87                 .data           = &rxrpc_connection_expiry,
88                 .maxlen         = sizeof(unsigned int),
89                 .mode           = 0644,
90                 .proc_handler   = proc_dointvec_minmax,
91                 .extra1         = (void *)&one,
92         },
93
94         /* Non-time values */
95         {
96                 .procname       = "max_backlog",
97                 .data           = &rxrpc_max_backlog,
98                 .maxlen         = sizeof(unsigned int),
99                 .mode           = 0644,
100                 .proc_handler   = proc_dointvec_minmax,
101                 .extra1         = (void *)&four,
102                 .extra2         = (void *)&thirtytwo,
103         },
104         {
105                 .procname       = "rx_window_size",
106                 .data           = &rxrpc_rx_window_size,
107                 .maxlen         = sizeof(unsigned int),
108                 .mode           = 0644,
109                 .proc_handler   = proc_dointvec_minmax,
110                 .extra1         = (void *)&one,
111                 .extra2         = (void *)&n_max_acks,
112         },
113         {
114                 .procname       = "rx_mtu",
115                 .data           = &rxrpc_rx_mtu,
116                 .maxlen         = sizeof(unsigned int),
117                 .mode           = 0644,
118                 .proc_handler   = proc_dointvec_minmax,
119                 .extra1         = (void *)&one,
120                 .extra2         = (void *)&n_65535,
121         },
122         {
123                 .procname       = "rx_jumbo_max",
124                 .data           = &rxrpc_rx_jumbo_max,
125                 .maxlen         = sizeof(unsigned int),
126                 .mode           = 0644,
127                 .proc_handler   = proc_dointvec_minmax,
128                 .extra1         = (void *)&one,
129                 .extra2         = (void *)&four,
130         },
131
132         { }
133 };
134
135 int __init rxrpc_sysctl_init(void)
136 {
137         rxrpc_sysctl_reg_table = register_net_sysctl(&init_net, "net/rxrpc",
138                                                      rxrpc_sysctl_table);
139         if (!rxrpc_sysctl_reg_table)
140                 return -ENOMEM;
141         return 0;
142 }
143
144 void rxrpc_sysctl_exit(void)
145 {
146         if (rxrpc_sysctl_reg_table)
147                 unregister_net_sysctl_table(rxrpc_sysctl_reg_table);
148 }