xref: /openbmc/linux/net/llc/sysctl_net_llc.c (revision b627b4ed)
1 /*
2  * sysctl_net_llc.c: sysctl interface to LLC net subsystem.
3  *
4  * Arnaldo Carvalho de Melo <acme@conectiva.com.br>
5  */
6 
7 #include <linux/mm.h>
8 #include <linux/init.h>
9 #include <linux/sysctl.h>
10 #include <net/llc.h>
11 
12 #ifndef CONFIG_SYSCTL
13 #error This file should not be compiled without CONFIG_SYSCTL defined
14 #endif
15 
16 static struct ctl_table llc2_timeout_table[] = {
17 	{
18 		.ctl_name	= NET_LLC2_ACK_TIMEOUT,
19 		.procname	= "ack",
20 		.data		= &sysctl_llc2_ack_timeout,
21 		.maxlen		= sizeof(long),
22 		.mode		= 0644,
23 		.proc_handler   = proc_dointvec_jiffies,
24 		.strategy       = sysctl_jiffies,
25 	},
26 	{
27 		.ctl_name	= NET_LLC2_BUSY_TIMEOUT,
28 		.procname	= "busy",
29 		.data		= &sysctl_llc2_busy_timeout,
30 		.maxlen		= sizeof(long),
31 		.mode		= 0644,
32 		.proc_handler   = proc_dointvec_jiffies,
33 		.strategy       = sysctl_jiffies,
34 	},
35 	{
36 		.ctl_name	= NET_LLC2_P_TIMEOUT,
37 		.procname	= "p",
38 		.data		= &sysctl_llc2_p_timeout,
39 		.maxlen		= sizeof(long),
40 		.mode		= 0644,
41 		.proc_handler   = proc_dointvec_jiffies,
42 		.strategy       = sysctl_jiffies,
43 	},
44 	{
45 		.ctl_name	= NET_LLC2_REJ_TIMEOUT,
46 		.procname	= "rej",
47 		.data		= &sysctl_llc2_rej_timeout,
48 		.maxlen		= sizeof(long),
49 		.mode		= 0644,
50 		.proc_handler   = proc_dointvec_jiffies,
51 		.strategy       = sysctl_jiffies,
52 	},
53 	{ 0 },
54 };
55 
56 static struct ctl_table llc_station_table[] = {
57 	{
58 		.ctl_name	= NET_LLC_STATION_ACK_TIMEOUT,
59 		.procname	= "ack_timeout",
60 		.data		= &sysctl_llc_station_ack_timeout,
61 		.maxlen		= sizeof(long),
62 		.mode		= 0644,
63 		.proc_handler   = proc_dointvec_jiffies,
64 		.strategy       = sysctl_jiffies,
65 	},
66 	{ 0 },
67 };
68 
69 static struct ctl_table llc2_dir_timeout_table[] = {
70 	{
71 		.ctl_name	= NET_LLC2,
72 		.procname	= "timeout",
73 		.mode		= 0555,
74 		.child		= llc2_timeout_table,
75 	},
76 	{ 0 },
77 };
78 
79 static struct ctl_table llc_table[] = {
80 	{
81 		.ctl_name	= NET_LLC2,
82 		.procname	= "llc2",
83 		.mode		= 0555,
84 		.child		= llc2_dir_timeout_table,
85 	},
86 	{
87 		.ctl_name       = NET_LLC_STATION,
88 		.procname       = "station",
89 		.mode           = 0555,
90 		.child          = llc_station_table,
91 	},
92 	{ 0 },
93 };
94 
95 static struct ctl_path llc_path[] = {
96 	{ .procname = "net", .ctl_name = CTL_NET, },
97 	{ .procname = "llc", .ctl_name = NET_LLC, },
98 	{ }
99 };
100 
101 static struct ctl_table_header *llc_table_header;
102 
103 int __init llc_sysctl_init(void)
104 {
105 	llc_table_header = register_sysctl_paths(llc_path, llc_table);
106 
107 	return llc_table_header ? 0 : -ENOMEM;
108 }
109 
110 void llc_sysctl_exit(void)
111 {
112 	if (llc_table_header) {
113 		unregister_sysctl_table(llc_table_header);
114 		llc_table_header = NULL;
115 	}
116 }
117