module源码:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/sysctl.h>
#include <linux/kernel.h>
static char path[] = "net/test";
static int zero = 0;
static int two = 2;
int sysctl_tcp_new;
static struct ctl_table_header *header;
static struct ctl_table new[] = {
{
.procname = "tcp_new",
.data = &sysctl_tcp_new,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = &zero,
.extra2 = &two
},
{ }
};
static int __init sysctl_module_init(void)
{
header = register_sysctl(path, new);
if(!header) {
printk(KERN_ERR"register_sysctl() failed.\n");
return -1;
}
return 0;
}
static void __exit sysctl_module_exit(void)
{
if(header)
unregister_sysctl_table(header);
}
module_init(sysctl_module_init);
module_exit(sysctl_module_exit);
MODULE_AUTHOR("zhangsk");
MODULE_LICENSE("GPL");
makefile
obj-m := sc.o
KERNEL_DIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
clean:
rm *.o *.ko *.mod.c
.PHONY:clean
命令:
sysctl -w net.test.tcp_new=1
sysctl net.test.tcp_new