sysctl_net_llc.c 2.82 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
/*
 * sysctl_net_llc.c: sysctl interface to LLC net subsystem.
 * 
 * Arnaldo Carvalho de Melo <acme@conectiva.com.br>
 */

#include <linux/config.h>
#include <linux/mm.h>
#include <linux/init.h>
#include <linux/sysctl.h>

#ifndef CONFIG_SYSCTL
#error This file should not be compiled without CONFIG_SYSCTL defined
#endif

extern int sysctl_llc2_ack_timeout;
extern int sysctl_llc2_busy_timeout;
extern int sysctl_llc2_p_timeout;
extern int sysctl_llc2_rej_timeout;
extern int sysctl_llc_station_ack_timeout;

static struct ctl_table llc2_timeout_table[] = {
	{
		.ctl_name	= NET_LLC2_ACK_TIMEOUT,
		.procname	= "ack",
		.data		= &sysctl_llc2_ack_timeout,
		.maxlen		= sizeof(long),
		.mode		= 0644,
		.proc_handler   = &proc_dointvec_jiffies,
		.strategy       = &sysctl_jiffies,
	},
	{
		.ctl_name	= NET_LLC2_BUSY_TIMEOUT,
		.procname	= "busy",
		.data		= &sysctl_llc2_busy_timeout,
		.maxlen		= sizeof(long),
		.mode		= 0644,
		.proc_handler   = &proc_dointvec_jiffies,
		.strategy       = &sysctl_jiffies,
	},
	{
		.ctl_name	= NET_LLC2_P_TIMEOUT,
		.procname	= "p",
		.data		= &sysctl_llc2_p_timeout,
		.maxlen		= sizeof(long),
		.mode		= 0644,
		.proc_handler   = &proc_dointvec_jiffies,
		.strategy       = &sysctl_jiffies,
	},
	{
		.ctl_name	= NET_LLC2_REJ_TIMEOUT,
		.procname	= "rej",
		.data		= &sysctl_llc2_rej_timeout,
		.maxlen		= sizeof(long),
		.mode		= 0644,
		.proc_handler   = &proc_dointvec_jiffies,
		.strategy       = &sysctl_jiffies,
	},
	{ 0 },
};

static struct ctl_table llc_station_table[] = {
	{
		.ctl_name	= NET_LLC_STATION_ACK_TIMEOUT,
		.procname	= "ack_timeout",
		.data		= &sysctl_llc_station_ack_timeout,
		.maxlen		= sizeof(long),
		.mode		= 0644,
		.proc_handler   = &proc_dointvec_jiffies,
		.strategy       = &sysctl_jiffies,
	},
	{ 0 },
};

static struct ctl_table llc2_dir_timeout_table[] = {
	{
		.ctl_name	= NET_LLC2,
		.procname	= "timeout",
		.mode		= 0555,
		.child		= llc2_timeout_table,
       	},
	{ 0 },
};

static struct ctl_table llc_table[] = {
	{
		.ctl_name	= NET_LLC2,
		.procname	= "llc2",
		.mode		= 0555,
		.child		= llc2_dir_timeout_table,
       	},
	{
		.ctl_name       = NET_LLC_STATION,
		.procname       = "station",
		.mode           = 0555,
		.child          = llc_station_table,
	},
	{ 0 },
};

static struct ctl_table llc_dir_table[] = {
	{
		.ctl_name	= NET_LLC,
		.procname	= "llc",
		.mode		= 0555,
		.child		= llc_table,
       	},
	{ 0 },
};

static struct ctl_table llc_root_table[] = {
	{
		.ctl_name	= CTL_NET,
		.procname	= "net",
		.mode		= 0555,
		.child		= llc_dir_table,
	},
	{ 0 },
};

static struct ctl_table_header *llc_table_header;

int __init llc_sysctl_init(void)
{
	llc_table_header = register_sysctl_table(llc_root_table, 1);

	return llc_table_header ? 0 : -ENOMEM;
}

void llc_sysctl_exit(void)
{
	if (llc_table_header) {
		unregister_sysctl_table(llc_table_header);
		llc_table_header = NULL;
	}
}