From 5d0cfcf3f26b5aafe91f23fa9095461bdf83c074 Mon Sep 17 00:00:00 2001 From: S.Çağlar Onur Date: Tue, 7 Dec 2010 11:06:08 -0500 Subject: [PATCH] linux-2.6-521-packet-tagging.patch --- include/linux/skbuff.h | 2 ++ net/core/skbuff.c | 2 ++ net/core/sock.c | 2 ++ net/ipv4/af_inet.c | 2 ++ net/ipv4/netfilter/ipt_LOG.c | 2 ++ 5 files changed, 10 insertions(+), 0 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 69af253..0670992 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -391,6 +391,8 @@ struct sk_buff { __u32 dropcount; }; +#define skb_tag mark + __u16 vlan_tci; #ifndef __GENKSYMS__ __u16 rxhash; diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 841664f..371324c 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -208,6 +208,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask, skb->mac_header = ~0U; #endif + if (!in_interrupt()) skb->skb_tag = nx_current_nid(); else skb->skb_tag = 0; /* make sure we initialize shinfo sequentially */ shinfo = skb_shinfo(skb); atomic_set(&shinfo->dataref, 1); @@ -562,6 +563,7 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old) #endif #endif new->vlan_tci = old->vlan_tci; + new->skb_tag = old->skb_tag; skb_copy_secmark(new, old); } diff --git a/net/core/sock.c b/net/core/sock.c index f406c4b..40197d6 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1081,6 +1081,8 @@ struct sock *sk_alloc(struct net *net, int family, gfp_t priority, sk->sk_prot = sk->sk_prot_creator = prot; sock_lock_init(sk); sock_net_set(sk, get_net(net)); + if (!in_interrupt()) + sk->sk_mark = nx_current_nid(); atomic_set(&sk->sk_wmem_alloc, 1); sock_update_classid(sk); diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index e3213b2..3f29c1f 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -181,6 +181,8 @@ static int inet_autobind(struct sock *sk) return -EAGAIN; } inet->sport = htons(inet->num); + sk->sk_xid = vx_current_xid(); + if (!in_interrupt()) sk->sk_nid = nx_current_nid(); else sk->sk_nid=0; } release_sock(sk); return 0; diff --git a/net/ipv4/netfilter/ipt_LOG.c b/net/ipv4/netfilter/ipt_LOG.c index acc44c6..ac29a8c 100644 --- a/net/ipv4/netfilter/ipt_LOG.c +++ b/net/ipv4/netfilter/ipt_LOG.c @@ -45,6 +45,8 @@ static void dump_packet(const struct nf_loginfo *info, else logflags = NF_LOG_MASK; + printk("TAG=%d ", skb->skb_tag); + ih = skb_header_pointer(skb, iphoff, sizeof(_iph), &_iph); if (ih == NULL) { printk("TRUNCATED");