]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/ipv6/ip6_tunnel.c
Merge branch 'dccp' of git://eden-feed.erg.abdn.ac.uk/dccp_exp
[linux-2.6-omap-h63xx.git] / net / ipv6 / ip6_tunnel.c
index d9b27215909734704f7caf9efdc2fca26c08c532..17c7b098cdb0cc61021db7d080e0414536c48d3c 100644 (file)
@@ -6,8 +6,6 @@
  *     Ville Nuorvala          <vnuorval@tcs.hut.fi>
  *     Yasuyuki Kozakai        <kozakai@linux-ipv6.org>
  *
- *     $Id$
- *
  *      Based on:
  *      linux/net/ipv6/sit.c and linux/net/ipv4/ipip.c
  *
@@ -243,6 +241,8 @@ static struct ip6_tnl *ip6_tnl_create(struct net *net, struct ip6_tnl_parm *p)
        if (dev == NULL)
                goto failed;
 
+       dev_net_set(dev, net);
+
        if (strchr(name, '%')) {
                if (dev_alloc_name(dev, name) < 0)
                        goto failed_free;
@@ -709,7 +709,7 @@ static int ip6_tnl_rcv(struct sk_buff *skb, __u16 protocol,
                }
 
                if (!ip6_tnl_rcv_ctl(t)) {
-                       t->stat.rx_dropped++;
+                       t->dev->stats.rx_dropped++;
                        read_unlock(&ip6_tnl_lock);
                        goto discard;
                }
@@ -726,8 +726,8 @@ static int ip6_tnl_rcv(struct sk_buff *skb, __u16 protocol,
 
                dscp_ecn_decapsulate(t, ipv6h, skb);
 
-               t->stat.rx_packets++;
-               t->stat.rx_bytes += skb->len;
+               t->dev->stats.rx_packets++;
+               t->dev->stats.rx_bytes += skb->len;
                netif_rx(skb);
                read_unlock(&ip6_tnl_lock);
                return 0;
@@ -847,7 +847,7 @@ static int ip6_tnl_xmit2(struct sk_buff *skb,
                         __u32 *pmtu)
 {
        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 ipv6_tel_txoption opt;
        struct dst_entry *dst;
@@ -1041,11 +1041,11 @@ static int
 ip6_tnl_xmit(struct sk_buff *skb, struct net_device *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;
 
        if (t->recursion++) {
-               t->stat.collisions++;
+               stats->collisions++;
                goto tx_err;
        }
 
@@ -1286,19 +1286,6 @@ ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
        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
  *   @dev: virtual device associated with tunnel
@@ -1332,7 +1319,6 @@ static void ip6_tnl_dev_setup(struct net_device *dev)
        dev->uninit = ip6_tnl_dev_uninit;
        dev->destructor = free_netdev;
        dev->hard_start_xmit = ip6_tnl_xmit;
-       dev->get_stats = ip6_tnl_get_stats;
        dev->do_ioctl = ip6_tnl_ioctl;
        dev->change_mtu = ip6_tnl_change_mtu;
 
@@ -1341,6 +1327,7 @@ static void ip6_tnl_dev_setup(struct net_device *dev)
        dev->mtu = ETH_DATA_LEN - sizeof (struct ipv6hdr);
        dev->flags |= IFF_NOARP;
        dev->addr_len = sizeof(struct in6_addr);
+       dev->features |= NETIF_F_NETNS_LOCAL;
 }