]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/ipv4/ip_gre.c
inet: Make tunnel RX/TX byte counters more consistent
[net-next-2.6.git] / net / ipv4 / ip_gre.c
index 44ed9487fa15d15833c1610999a2665fb77f00ba..0d5e35b0ed5454ab1cc906606ab516a1c662eac4 100644 (file)
@@ -477,6 +477,7 @@ static int ipgre_rcv(struct sk_buff *skb)
        struct ip_tunnel *tunnel;
        int    offset = 4;
        __be16 gre_proto;
+       unsigned int len;
 
        if (!pskb_may_pull(skb, 16))
                goto drop_nolock;
@@ -567,6 +568,8 @@ static int ipgre_rcv(struct sk_buff *skb)
                        tunnel->i_seqno = seqno + 1;
                }
 
+               len = skb->len;
+
                /* Warning: All skb pointers will be invalidated! */
                if (tunnel->dev->type == ARPHRD_ETHER) {
                        if (!pskb_may_pull(skb, ETH_HLEN)) {
@@ -581,7 +584,7 @@ static int ipgre_rcv(struct sk_buff *skb)
                }
 
                stats->rx_packets++;
-               stats->rx_bytes += skb->len;
+               stats->rx_bytes += len;
                skb->dev = tunnel->dev;
                dst_release(skb->dst);
                skb->dst = NULL;
@@ -770,7 +773,7 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
                old_iph = ip_hdr(skb);
        }
 
-       skb->transport_header = skb->network_header;
+       skb_reset_transport_header(skb);
        skb_push(skb, gre_hlen);
        skb_reset_network_header(skb);
        memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));