diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2010-09-27 00:33:35 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-09-27 21:30:42 -0700 |
commit | 290b895e0ba4552dfcfc4bd35759c192345b934a (patch) | |
tree | 439ffccea9fa87b28b6af2a06e562cc5a0c01f80 /include/net/dst.h | |
parent | af5ef241133b602a77b682009f112e7c3f7604e5 (diff) | |
download | op-kernel-dev-290b895e0ba4552dfcfc4bd35759c192345b934a.zip op-kernel-dev-290b895e0ba4552dfcfc4bd35759c192345b934a.tar.gz |
tunnels: prepare percpu accounting
Tunnels are going to use percpu for their accounting.
They are going to use a new tstats field in net_device.
skb_tunnel_rx() is changed to be a wrapper around __skb_tunnel_rx()
IPTUNNEL_XMIT() is changed to be a wrapper around __IPTUNNEL_XMIT()
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/dst.h')
-rw-r--r-- | include/net/dst.h | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/include/net/dst.h b/include/net/dst.h index 0238650..aa53fbc 100644 --- a/include/net/dst.h +++ b/include/net/dst.h @@ -228,23 +228,37 @@ static inline void skb_dst_force(struct sk_buff *skb) /** + * __skb_tunnel_rx - prepare skb for rx reinsert + * @skb: buffer + * @dev: tunnel device + * + * After decapsulation, packet is going to re-enter (netif_rx()) our stack, + * so make some cleanups. (no accounting done) + */ +static inline void __skb_tunnel_rx(struct sk_buff *skb, struct net_device *dev) +{ + skb->dev = dev; + skb->rxhash = 0; + skb_set_queue_mapping(skb, 0); + skb_dst_drop(skb); + nf_reset(skb); +} + +/** * skb_tunnel_rx - prepare skb for rx reinsert * @skb: buffer * @dev: tunnel device * * After decapsulation, packet is going to re-enter (netif_rx()) our stack, * so make some cleanups, and perform accounting. + * Note: this accounting is not SMP safe. */ static inline void skb_tunnel_rx(struct sk_buff *skb, struct net_device *dev) { - skb->dev = dev; /* TODO : stats should be SMP safe */ dev->stats.rx_packets++; dev->stats.rx_bytes += skb->len; - skb->rxhash = 0; - skb_set_queue_mapping(skb, 0); - skb_dst_drop(skb); - nf_reset(skb); + __skb_tunnel_rx(skb, dev); } /* Children define the path of the packet through the |