OpenBSD可加载内核模块编程完全指南(16) #include <sys/lkm.h> #include <sys/socket.h> #include <sys/protosw.h> #include <net/route.h> #include <net/if.h> #include <netinet/in.h> #include <netinet/in_systm.h> #include <netinet/ip.h> #include <netinet/in_pcb.h> /* * 我们将改变protosw结构中的TCP入口. */ extern struct protosw inetsw[]; /* * 我们自定义的函数*/ extern int lkmexists __P((struct lkm_table *)); extern char *inet_ntoa __P((struct in_addr)); static void new_input __P((struct mbuf *, ...)); static void (*old_tcp_input) __P((struct mbuf *, ...)); /* * 声明我们的模块结构*/ MOD_MISC("tcpinfo") /* * 我们的句柄函数,用来加载和卸载模块. */ int tcpmod_handler(lkmtp, cmd) struct lkm_table *lkmtp; int cmd; { int s; switch(cmd) { case LKM_E_LOAD: /* * 确定此模块是第一次加载使用 */ if (lkmexists(lkmtp)) return(EEXIST);