summaryrefslogtreecommitdiff
path: root/kernel/driver/gre.c
diff options
context:
space:
mode:
authorKozlov Dmitry <dima@server>2010-10-06 16:43:14 +0400
committerKozlov Dmitry <dima@server>2010-10-06 16:43:14 +0400
commitb6a1268714671904e96a49b88680dc3ff07aaa1c (patch)
tree60424372b94312710b9f583b1bcc641de4020316 /kernel/driver/gre.c
parent5cf93f33f2350ed3b92f73ead1d2829a6883810a (diff)
downloadaccel-ppp-b6a1268714671904e96a49b88680dc3ff07aaa1c.tar.gz
accel-ppp-b6a1268714671904e96a49b88680dc3ff07aaa1c.zip
project cleanup and prepare to release
Diffstat (limited to 'kernel/driver/gre.c')
-rw-r--r--kernel/driver/gre.c140
1 files changed, 0 insertions, 140 deletions
diff --git a/kernel/driver/gre.c b/kernel/driver/gre.c
deleted file mode 100644
index cda0576..0000000
--- a/kernel/driver/gre.c
+++ /dev/null
@@ -1,140 +0,0 @@
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/kmod.h>
-#include <linux/skbuff.h>
-#include <linux/in.h>
-#include <linux/netdevice.h>
-#include <linux/version.h>
-#include <linux/spinlock.h>
-#include <net/protocol.h>
-
-#include "gre.h"
-
-
-struct gre_protocol *gre_proto[GREPROTO_MAX] ____cacheline_aligned_in_smp;
-static DEFINE_RWLOCK(gre_proto_lock);
-
-int gre_add_protocol(struct gre_protocol *proto, u8 version)
-{
- int ret;
-
- if (version >= GREPROTO_MAX)
- return -1;
-
- write_lock_bh(&gre_proto_lock);
- if (gre_proto[version]) {
- ret = -1;
- } else {
- gre_proto[version]=proto;
- ret = 0;
- }
- write_unlock_bh(&gre_proto_lock);
-
- return ret;
-}
-int gre_del_protocol(struct gre_protocol *proto, u8 version)
-{
- int ret;
-
- if (version >= GREPROTO_MAX)
- return -1;
-
- write_lock_bh(&gre_proto_lock);
- if (gre_proto[version] == proto) {
- gre_proto[version] = NULL;
- ret = 0;
- } else {
- ret = -1;
- }
- write_unlock_bh(&gre_proto_lock);
-
- return ret;
-}
-static int gre_rcv(struct sk_buff *skb)
-{
- u8 ver;
- int ret;
-
- if (!pskb_may_pull(skb, 12))
- goto drop_nolock;
-
- ver = skb->data[1]&0x7f;
- if (ver >= GREPROTO_MAX)
- goto drop_nolock;
-
- read_lock(&gre_proto_lock);
- if (!gre_proto[ver] || !gre_proto[ver]->handler)
- goto drop;
-
- ret = gre_proto[ver]->handler(skb);
- read_unlock(&gre_proto_lock);
-
- return ret;
-
-drop:
- read_unlock(&gre_proto_lock);
-drop_nolock:
- kfree_skb(skb);
- return NET_RX_DROP;
-}
-static void gre_err(struct sk_buff *skb, u32 info)
-{
- u8 ver;
-
- printk("err\n");
-
- if (!pskb_may_pull(skb, 12))
- goto drop_nolock;
-
- ver=skb->data[1];
- if (ver>=GREPROTO_MAX)
- goto drop_nolock;
-
- read_lock(&gre_proto_lock);
- if (!gre_proto[ver] || !gre_proto[ver]->err_handler)
- goto drop;
-
- gre_proto[ver]->err_handler(skb,info);
- read_unlock(&gre_proto_lock);
-
- return;
-
-drop:
- read_unlock(&gre_proto_lock);
-drop_nolock:
- kfree_skb(skb);
-}
-
-
-static struct net_protocol net_gre_protocol = {
- .handler = gre_rcv,
- .err_handler = gre_err,
-// .netns_ok=1,
-};
-
-static int __init gre_init(void)
-{
- printk(KERN_INFO "GRE over IPv4 demultiplexor driver");
-
- if (inet_add_protocol(&net_gre_protocol, IPPROTO_GRE) < 0) {
- printk(KERN_INFO "gre: can't add protocol\n");
- return -EAGAIN;
- }
-
- return 0;
-}
-
-static void __exit gre_exit(void)
-{
- inet_del_protocol(&net_gre_protocol, IPPROTO_GRE);
-}
-
-module_init(gre_init);
-module_exit(gre_exit);
-
-MODULE_DESCRIPTION("GRE over IPv4 demultiplexor driver");
-MODULE_AUTHOR("Kozlov D. (xeb@mail.ru)");
-MODULE_LICENSE("GPL");
-EXPORT_SYMBOL_GPL(gre_add_protocol);
-EXPORT_SYMBOL_GPL(gre_del_protocol);
-