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=16eb819eb4ff3d8faa6a0494208e952aed31744b;hpb=d1b41f90d0f84e165db9895d54894412f9ef5f41;p=linux-2.6.git diff --git a/linux-2.6-526-tun-tap.patch b/linux-2.6-526-tun-tap.patch index 16eb819eb..1b13d0369 100644 --- a/linux-2.6-526-tun-tap.patch +++ b/linux-2.6-526-tun-tap.patch @@ -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-14 12:07:47.000000000 -0400 -@@ -0,0 +1,714 @@ ++++ 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 @@ -103,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; + } @@ -111,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 { @@ -195,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); + @@ -728,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");