1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* |
3 | * sysctl_net_llc.c: sysctl interface to LLC net subsystem. |
4 | * |
5 | * Arnaldo Carvalho de Melo <acme@conectiva.com.br> |
6 | */ |
7 | |
8 | #include <linux/mm.h> |
9 | #include <linux/init.h> |
10 | #include <linux/sysctl.h> |
11 | #include <net/net_namespace.h> |
12 | #include <net/llc.h> |
13 | |
14 | #ifndef CONFIG_SYSCTL |
15 | #error This file should not be compiled without CONFIG_SYSCTL defined |
16 | #endif |
17 | |
18 | static struct ctl_table llc2_timeout_table[] = { |
19 | { |
20 | .procname = "ack" , |
21 | .data = &sysctl_llc2_ack_timeout, |
22 | .maxlen = sizeof(sysctl_llc2_ack_timeout), |
23 | .mode = 0644, |
24 | .proc_handler = proc_dointvec_jiffies, |
25 | }, |
26 | { |
27 | .procname = "busy" , |
28 | .data = &sysctl_llc2_busy_timeout, |
29 | .maxlen = sizeof(sysctl_llc2_busy_timeout), |
30 | .mode = 0644, |
31 | .proc_handler = proc_dointvec_jiffies, |
32 | }, |
33 | { |
34 | .procname = "p" , |
35 | .data = &sysctl_llc2_p_timeout, |
36 | .maxlen = sizeof(sysctl_llc2_p_timeout), |
37 | .mode = 0644, |
38 | .proc_handler = proc_dointvec_jiffies, |
39 | }, |
40 | { |
41 | .procname = "rej" , |
42 | .data = &sysctl_llc2_rej_timeout, |
43 | .maxlen = sizeof(sysctl_llc2_rej_timeout), |
44 | .mode = 0644, |
45 | .proc_handler = proc_dointvec_jiffies, |
46 | }, |
47 | { }, |
48 | }; |
49 | |
50 | static struct ctl_table llc_station_table[] = { |
51 | { }, |
52 | }; |
53 | |
54 | static struct ctl_table_header *; |
55 | static struct ctl_table_header *; |
56 | |
57 | int __init llc_sysctl_init(void) |
58 | { |
59 | llc2_timeout_header = register_net_sysctl(&init_net, "net/llc/llc2/timeout" , llc2_timeout_table); |
60 | llc_station_header = register_net_sysctl(&init_net, "net/llc/station" , llc_station_table); |
61 | |
62 | if (!llc2_timeout_header || !llc_station_header) { |
63 | llc_sysctl_exit(); |
64 | return -ENOMEM; |
65 | } |
66 | return 0; |
67 | } |
68 | |
69 | void llc_sysctl_exit(void) |
70 | { |
71 | if (llc2_timeout_header) { |
72 | unregister_net_sysctl_table(header: llc2_timeout_header); |
73 | llc2_timeout_header = NULL; |
74 | } |
75 | if (llc_station_header) { |
76 | unregister_net_sysctl_table(header: llc_station_header); |
77 | llc_station_header = NULL; |
78 | } |
79 | } |
80 | |