Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
sysctl.c
Go to the documentation of this file.
1 /*
2  * net/dccp/sysctl.c
3  *
4  * An implementation of the DCCP protocol
5  * Arnaldo Carvalho de Melo <[email protected]>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License v2
9  * as published by the Free Software Foundation.
10  */
11 
12 #include <linux/mm.h>
13 #include <linux/sysctl.h>
14 #include "dccp.h"
15 #include "feat.h"
16 
17 #ifndef CONFIG_SYSCTL
18 #error This file should not be compiled without CONFIG_SYSCTL defined
19 #endif
20 
21 /* Boundary values */
22 static int zero = 0,
23  u8_max = 0xFF;
24 static unsigned long seqw_min = DCCPF_SEQ_WMIN,
25  seqw_max = 0xFFFFFFFF; /* maximum on 32 bit */
26 
27 static struct ctl_table dccp_default_table[] = {
28  {
29  .procname = "seq_window",
31  .maxlen = sizeof(sysctl_dccp_sequence_window),
32  .mode = 0644,
34  .extra1 = &seqw_min, /* RFC 4340, 7.5.2 */
35  .extra2 = &seqw_max,
36  },
37  {
38  .procname = "rx_ccid",
39  .data = &sysctl_dccp_rx_ccid,
40  .maxlen = sizeof(sysctl_dccp_rx_ccid),
41  .mode = 0644,
43  .extra1 = &zero,
44  .extra2 = &u8_max, /* RFC 4340, 10. */
45  },
46  {
47  .procname = "tx_ccid",
48  .data = &sysctl_dccp_tx_ccid,
49  .maxlen = sizeof(sysctl_dccp_tx_ccid),
50  .mode = 0644,
52  .extra1 = &zero,
53  .extra2 = &u8_max, /* RFC 4340, 10. */
54  },
55  {
56  .procname = "request_retries",
58  .maxlen = sizeof(sysctl_dccp_request_retries),
59  .mode = 0644,
61  .extra1 = &zero,
62  .extra2 = &u8_max,
63  },
64  {
65  .procname = "retries1",
66  .data = &sysctl_dccp_retries1,
67  .maxlen = sizeof(sysctl_dccp_retries1),
68  .mode = 0644,
70  .extra1 = &zero,
71  .extra2 = &u8_max,
72  },
73  {
74  .procname = "retries2",
75  .data = &sysctl_dccp_retries2,
76  .maxlen = sizeof(sysctl_dccp_retries2),
77  .mode = 0644,
79  .extra1 = &zero,
80  .extra2 = &u8_max,
81  },
82  {
83  .procname = "tx_qlen",
84  .data = &sysctl_dccp_tx_qlen,
85  .maxlen = sizeof(sysctl_dccp_tx_qlen),
86  .mode = 0644,
88  .extra1 = &zero,
89  },
90  {
91  .procname = "sync_ratelimit",
93  .maxlen = sizeof(sysctl_dccp_sync_ratelimit),
94  .mode = 0644,
96  },
97 
98  { }
99 };
100 
101 static struct ctl_table_header *dccp_table_header;
102 
104 {
105  dccp_table_header = register_net_sysctl(&init_net, "net/dccp/default",
106  dccp_default_table);
107 
108  return dccp_table_header != NULL ? 0 : -ENOMEM;
109 }
110 
112 {
113  if (dccp_table_header != NULL) {
114  unregister_net_sysctl_table(dccp_table_header);
115  dccp_table_header = NULL;
116  }
117 }