1590232a7SArnaldo Carvalho de Melo /* 2590232a7SArnaldo Carvalho de Melo * sysctl_net_llc.c: sysctl interface to LLC net subsystem. 3590232a7SArnaldo Carvalho de Melo * 4590232a7SArnaldo Carvalho de Melo * Arnaldo Carvalho de Melo <acme@conectiva.com.br> 5590232a7SArnaldo Carvalho de Melo */ 6590232a7SArnaldo Carvalho de Melo 7590232a7SArnaldo Carvalho de Melo #include <linux/mm.h> 8590232a7SArnaldo Carvalho de Melo #include <linux/init.h> 9590232a7SArnaldo Carvalho de Melo #include <linux/sysctl.h> 10*5dd3df10SEric W. Biederman #include <net/net_namespace.h> 112928c19eSArnaldo Carvalho de Melo #include <net/llc.h> 12590232a7SArnaldo Carvalho de Melo 13590232a7SArnaldo Carvalho de Melo #ifndef CONFIG_SYSCTL 14590232a7SArnaldo Carvalho de Melo #error This file should not be compiled without CONFIG_SYSCTL defined 15590232a7SArnaldo Carvalho de Melo #endif 16590232a7SArnaldo Carvalho de Melo 17590232a7SArnaldo Carvalho de Melo static struct ctl_table llc2_timeout_table[] = { 18590232a7SArnaldo Carvalho de Melo { 19590232a7SArnaldo Carvalho de Melo .procname = "ack", 20590232a7SArnaldo Carvalho de Melo .data = &sysctl_llc2_ack_timeout, 21590232a7SArnaldo Carvalho de Melo .maxlen = sizeof(long), 22590232a7SArnaldo Carvalho de Melo .mode = 0644, 236d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_jiffies, 24590232a7SArnaldo Carvalho de Melo }, 25590232a7SArnaldo Carvalho de Melo { 26590232a7SArnaldo Carvalho de Melo .procname = "busy", 27590232a7SArnaldo Carvalho de Melo .data = &sysctl_llc2_busy_timeout, 28590232a7SArnaldo Carvalho de Melo .maxlen = sizeof(long), 29590232a7SArnaldo Carvalho de Melo .mode = 0644, 306d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_jiffies, 31590232a7SArnaldo Carvalho de Melo }, 32590232a7SArnaldo Carvalho de Melo { 33590232a7SArnaldo Carvalho de Melo .procname = "p", 34590232a7SArnaldo Carvalho de Melo .data = &sysctl_llc2_p_timeout, 35590232a7SArnaldo Carvalho de Melo .maxlen = sizeof(long), 36590232a7SArnaldo Carvalho de Melo .mode = 0644, 376d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_jiffies, 38590232a7SArnaldo Carvalho de Melo }, 39590232a7SArnaldo Carvalho de Melo { 40590232a7SArnaldo Carvalho de Melo .procname = "rej", 41590232a7SArnaldo Carvalho de Melo .data = &sysctl_llc2_rej_timeout, 42590232a7SArnaldo Carvalho de Melo .maxlen = sizeof(long), 43590232a7SArnaldo Carvalho de Melo .mode = 0644, 446d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_jiffies, 45590232a7SArnaldo Carvalho de Melo }, 46f8572d8fSEric W. Biederman { }, 47590232a7SArnaldo Carvalho de Melo }; 48590232a7SArnaldo Carvalho de Melo 49590232a7SArnaldo Carvalho de Melo static struct ctl_table llc_station_table[] = { 50590232a7SArnaldo Carvalho de Melo { 51590232a7SArnaldo Carvalho de Melo .procname = "ack_timeout", 52590232a7SArnaldo Carvalho de Melo .data = &sysctl_llc_station_ack_timeout, 53590232a7SArnaldo Carvalho de Melo .maxlen = sizeof(long), 54590232a7SArnaldo Carvalho de Melo .mode = 0644, 556d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_jiffies, 56590232a7SArnaldo Carvalho de Melo }, 57f8572d8fSEric W. Biederman { }, 58590232a7SArnaldo Carvalho de Melo }; 59590232a7SArnaldo Carvalho de Melo 60590232a7SArnaldo Carvalho de Melo static struct ctl_table llc2_dir_timeout_table[] = { 61590232a7SArnaldo Carvalho de Melo { 62590232a7SArnaldo Carvalho de Melo .procname = "timeout", 63590232a7SArnaldo Carvalho de Melo .mode = 0555, 64590232a7SArnaldo Carvalho de Melo .child = llc2_timeout_table, 65590232a7SArnaldo Carvalho de Melo }, 66f8572d8fSEric W. Biederman { }, 67590232a7SArnaldo Carvalho de Melo }; 68590232a7SArnaldo Carvalho de Melo 69590232a7SArnaldo Carvalho de Melo static struct ctl_table llc_table[] = { 70590232a7SArnaldo Carvalho de Melo { 71590232a7SArnaldo Carvalho de Melo .procname = "llc2", 72590232a7SArnaldo Carvalho de Melo .mode = 0555, 73590232a7SArnaldo Carvalho de Melo .child = llc2_dir_timeout_table, 74590232a7SArnaldo Carvalho de Melo }, 75590232a7SArnaldo Carvalho de Melo { 76590232a7SArnaldo Carvalho de Melo .procname = "station", 77590232a7SArnaldo Carvalho de Melo .mode = 0555, 78590232a7SArnaldo Carvalho de Melo .child = llc_station_table, 79590232a7SArnaldo Carvalho de Melo }, 80f8572d8fSEric W. Biederman { }, 81590232a7SArnaldo Carvalho de Melo }; 82590232a7SArnaldo Carvalho de Melo 83b5ccd792SPavel Emelyanov static struct ctl_path llc_path[] = { 84f8572d8fSEric W. Biederman { .procname = "net", }, 85f8572d8fSEric W. Biederman { .procname = "llc", }, 86b5ccd792SPavel Emelyanov { } 87590232a7SArnaldo Carvalho de Melo }; 88590232a7SArnaldo Carvalho de Melo 89590232a7SArnaldo Carvalho de Melo static struct ctl_table_header *llc_table_header; 90590232a7SArnaldo Carvalho de Melo 91590232a7SArnaldo Carvalho de Melo int __init llc_sysctl_init(void) 92590232a7SArnaldo Carvalho de Melo { 93*5dd3df10SEric W. Biederman llc_table_header = register_net_sysctl_table(&init_net, llc_path, llc_table); 94590232a7SArnaldo Carvalho de Melo 95590232a7SArnaldo Carvalho de Melo return llc_table_header ? 0 : -ENOMEM; 96590232a7SArnaldo Carvalho de Melo } 97590232a7SArnaldo Carvalho de Melo 98590232a7SArnaldo Carvalho de Melo void llc_sysctl_exit(void) 99590232a7SArnaldo Carvalho de Melo { 100590232a7SArnaldo Carvalho de Melo if (llc_table_header) { 101*5dd3df10SEric W. Biederman unregister_net_sysctl_table(llc_table_header); 102590232a7SArnaldo Carvalho de Melo llc_table_header = NULL; 103590232a7SArnaldo Carvalho de Melo } 104590232a7SArnaldo Carvalho de Melo } 105