]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/ipv4/xfrm4_mode_tunnel.c
[SK_BUFF]: Introduce skb_mac_header()
[net-next-2.6.git] / net / ipv4 / xfrm4_mode_tunnel.c
index ceb4376f572ae8cd6c7b95845efc38d9820d84bc..8e123e30cf61ec2a39bf16cf761b52f7e72efb92 100644 (file)
@@ -91,9 +91,10 @@ static int xfrm4_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
 static int xfrm4_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
 {
        struct iphdr *iph = skb->nh.iph;
+       const unsigned char *old_mac;
        int err = -EINVAL;
 
-       switch(iph->protocol){
+       switch (iph->protocol){
                case IPPROTO_IPIP:
                        break;
 #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
@@ -125,8 +126,9 @@ static int xfrm4_tunnel_input(struct xfrm_state *x, struct sk_buff *skb)
                skb->protocol = htons(ETH_P_IPV6);
        }
 #endif
-       skb->mac.raw = memmove(skb->data - skb->mac_len,
-                              skb->mac.raw, skb->mac_len);
+       old_mac = skb_mac_header(skb);
+       skb_set_mac_header(skb, -skb->mac_len);
+       memmove(skb_mac_header(skb), old_mac, skb->mac_len);
        skb->nh.raw = skb->data;
        err = 0;