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