X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=linux-2.6-526-tun-tap.patch;h=1b13d0369eabfd8606ced39803517cd952d5a55c;hb=refs%2Fheads%2F22;hp=d5529ecf0c0dee1c2fceca49addb439cdeb35833;hpb=b09801cf93897c59a29dfa901fbe68a5fe5ffa64;p=linux-2.6.git diff --git a/linux-2.6-526-tun-tap.patch b/linux-2.6-526-tun-tap.patch index d5529ecf0..1b13d0369 100644 --- a/linux-2.6-526-tun-tap.patch +++ b/linux-2.6-526-tun-tap.patch @@ -1,6 +1,6 @@ diff -Nurb linux-2.6.22-525/drivers/net/Makefile linux-2.6.22-526/drivers/net/Makefile ---- linux-2.6.22-525/drivers/net/Makefile 2008-07-10 10:37:08.000000000 -0400 -+++ linux-2.6.22-526/drivers/net/Makefile 2008-07-10 10:37:22.000000000 -0400 +--- linux-2.6.22-525/drivers/net/Makefile 2008-07-13 23:58:01.000000000 -0400 ++++ linux-2.6.22-526/drivers/net/Makefile 2008-07-13 23:58:45.000000000 -0400 @@ -1,7 +1,7 @@ # # Makefile for the Linux network (ethercard) device drivers. @@ -12,8 +12,8 @@ diff -Nurb linux-2.6.22-525/drivers/net/Makefile linux-2.6.22-526/drivers/net/Ma obj-$(CONFIG_IBM_EMAC) += ibm_emac/ diff -Nurb linux-2.6.22-525/drivers/net/vnet_tun.c linux-2.6.22-526/drivers/net/vnet_tun.c --- linux-2.6.22-525/drivers/net/vnet_tun.c 1969-12-31 19:00:00.000000000 -0500 -+++ linux-2.6.22-526/drivers/net/vnet_tun.c 2008-07-13 23:56:16.000000000 -0400 -@@ -0,0 +1,713 @@ ++++ linux-2.6.22-526/drivers/net/vnet_tun.c 2008-07-14 16:22:57.000000000 -0400 +@@ -0,0 +1,725 @@ +/* + * TUN - Universal TUN/TAP device driver. + * Copyright (C) 1999-2002 Maxim Krasnyansky @@ -70,6 +70,7 @@ diff -Nurb linux-2.6.22-525/drivers/net/vnet_tun.c linux-2.6.22-526/drivers/net/ +#include +#include +#include ++#include + +#include +#include @@ -102,7 +103,7 @@ diff -Nurb linux-2.6.22-525/drivers/net/vnet_tun.c linux-2.6.22-526/drivers/net/ + else { + if (in_interrupt() && print_once) { + print_once=0; -+ printk(KERN_EMERG "vnet_tun: get-sk_xid called in interrupt context!\n"); ++ printk(KERN_EMERG "vnet_tun: get-sk_xid called in interrupt context! Stephen: Don't Panic.\n"); + } + return current->xid; + } @@ -110,6 +111,7 @@ diff -Nurb linux-2.6.22-525/drivers/net/vnet_tun.c linux-2.6.22-526/drivers/net/ + +#define set_sk_xid(sk,xid) sk->sk_nid=xid +#define set_skb_xid(skb,xid) skb->skb_tag=xid ++#define get_skb_xid(skb) skb->skb_tag + +/* Extended fields */ +struct tun_pi_ext { @@ -194,9 +196,15 @@ diff -Nurb linux-2.6.22-525/drivers/net/vnet_tun.c linux-2.6.22-526/drivers/net/ +/* Net device start xmit */ +static int tun_net_xmit(struct sk_buff *skb, struct net_device *dev) +{ -+ xid_t xid = get_sk_xid(skb->sk); -+ struct tun_struct *tun = tun_get_by_xid(xid); ++ xid_t xid, skb_xid; ++ struct tun_struct *tun; ++ skb_xid=get_skb_xid(skb); ++ if (skb_xid<1) ++ xid=get_sk_xid(skb->sk); ++ else ++ xid=skb_xid; + ++ tun = tun_get_by_xid(xid); + /* Mark packet */ + set_skb_xid(skb, xid); + @@ -727,3 +735,7 @@ diff -Nurb linux-2.6.22-525/drivers/net/vnet_tun.c linux-2.6.22-526/drivers/net/ + + unregister_netdev(&tun_netdev); +} ++ ++module_init(tun_init); ++module_cleanup(tun_cleanup); ++MODULE_LICENSE("GPL");