The Linux Networking Architecture [Electronic resources]

Klaus Wehrle

نسخه متنی -صفحه : 187/ 157
نمايش فراداده

Appendix F. Example for a Transport Protocol

/**********************************************************
* Example for a transport protocol
* Compile:
* gcc -I/lib/modules/'uname -r'/build/include -c file.c
**********************************************************/
#ifndef _KERNEL_
#define _KERNEL_
#endif
#ifndef MODULE
#define MODULE
#endif
#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/skbuff.h>
#include <linux/in.h>
#include <net/protocol.h>
MODULE_AUTHOR("Test Author (fixme@Linux-netzwerkarchitektur.de)");
MODULE_DESCRIPTION("Module with a layer-4 test protocol");
int test_proto_rcv(struct sk_buff *skb);
static struct inet_protocol test_protocol =
{
&test_proto_rcv,    /* protocol handler */
NULL,               /* error control */
NULL,               /* next */
IPPROTO_TCP,        /* protocol ID */
       0,                  /* copy */
NULL,               /* data */
" Test_Protocol"      /* name */
};
int test_proto_rcv(struct sk_buff *skb)
{
printk(KERN_DEBUG "Test protocol: Packet Received with length: %u\n",
skb->len);
return skb->len;
}
int init_module(void)
{
inet_add_protocol(&test_protocol);
return 0;
}
void cleanup_module(void)
{
inet_del_protocol(&test_protocol);
}