ip6tnl: Use on-device stats instead of private ones.

This tunnel uses its own private structure and requires separate
patch to switch from private stats to on-device ones.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Pavel Emelyanov 2008-05-21 14:17:05 -07:00 committed by David S. Miller
parent f56dd017c3
commit 3dca02af38
2 changed files with 6 additions and 21 deletions

View file

@ -19,7 +19,6 @@
struct ip6_tnl { struct ip6_tnl {
struct ip6_tnl *next; /* next tunnel in list */ struct ip6_tnl *next; /* next tunnel in list */
struct net_device *dev; /* virtual device associated with tunnel */ struct net_device *dev; /* virtual device associated with tunnel */
struct net_device_stats stat; /* statistics for tunnel device */
int recursion; /* depth of hard_start_xmit recursion */ int recursion; /* depth of hard_start_xmit recursion */
struct ip6_tnl_parm parms; /* tunnel configuration parameters */ struct ip6_tnl_parm parms; /* tunnel configuration parameters */
struct flowi fl; /* flowi template for xmit */ struct flowi fl; /* flowi template for xmit */

View file

@ -711,7 +711,7 @@ static int ip6_tnl_rcv(struct sk_buff *skb, __u16 protocol,
} }
if (!ip6_tnl_rcv_ctl(t)) { if (!ip6_tnl_rcv_ctl(t)) {
t->stat.rx_dropped++; t->dev->stats.rx_dropped++;
read_unlock(&ip6_tnl_lock); read_unlock(&ip6_tnl_lock);
goto discard; goto discard;
} }
@ -728,8 +728,8 @@ static int ip6_tnl_rcv(struct sk_buff *skb, __u16 protocol,
dscp_ecn_decapsulate(t, ipv6h, skb); dscp_ecn_decapsulate(t, ipv6h, skb);
t->stat.rx_packets++; t->dev->stats.rx_packets++;
t->stat.rx_bytes += skb->len; t->dev->stats.rx_bytes += skb->len;
netif_rx(skb); netif_rx(skb);
read_unlock(&ip6_tnl_lock); read_unlock(&ip6_tnl_lock);
return 0; return 0;
@ -849,7 +849,7 @@ static int ip6_tnl_xmit2(struct sk_buff *skb,
__u32 *pmtu) __u32 *pmtu)
{ {
struct ip6_tnl *t = netdev_priv(dev); struct ip6_tnl *t = netdev_priv(dev);
struct net_device_stats *stats = &t->stat; struct net_device_stats *stats = &t->dev->stats;
struct ipv6hdr *ipv6h = ipv6_hdr(skb); struct ipv6hdr *ipv6h = ipv6_hdr(skb);
struct ipv6_tel_txoption opt; struct ipv6_tel_txoption opt;
struct dst_entry *dst; struct dst_entry *dst;
@ -1043,11 +1043,11 @@ static int
ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev) ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
{ {
struct ip6_tnl *t = netdev_priv(dev); struct ip6_tnl *t = netdev_priv(dev);
struct net_device_stats *stats = &t->stat; struct net_device_stats *stats = &t->dev->stats;
int ret; int ret;
if (t->recursion++) { if (t->recursion++) {
t->stat.collisions++; stats->collisions++;
goto tx_err; goto tx_err;
} }
@ -1288,19 +1288,6 @@ ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
return err; return err;
} }
/**
* ip6_tnl_get_stats - return the stats for tunnel device
* @dev: virtual device associated with tunnel
*
* Return: stats for device
**/
static struct net_device_stats *
ip6_tnl_get_stats(struct net_device *dev)
{
return &(((struct ip6_tnl *)netdev_priv(dev))->stat);
}
/** /**
* ip6_tnl_change_mtu - change mtu manually for tunnel device * ip6_tnl_change_mtu - change mtu manually for tunnel device
* @dev: virtual device associated with tunnel * @dev: virtual device associated with tunnel
@ -1334,7 +1321,6 @@ static void ip6_tnl_dev_setup(struct net_device *dev)
dev->uninit = ip6_tnl_dev_uninit; dev->uninit = ip6_tnl_dev_uninit;
dev->destructor = free_netdev; dev->destructor = free_netdev;
dev->hard_start_xmit = ip6_tnl_xmit; dev->hard_start_xmit = ip6_tnl_xmit;
dev->get_stats = ip6_tnl_get_stats;
dev->do_ioctl = ip6_tnl_ioctl; dev->do_ioctl = ip6_tnl_ioctl;
dev->change_mtu = ip6_tnl_change_mtu; dev->change_mtu = ip6_tnl_change_mtu;