]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/ipv4/ip_sockglue.c
[SK_BUFF]: Introduce skb_network_header()
[net-next-2.6.git] / net / ipv4 / ip_sockglue.c
index f8ab654b6a35de9a762a3e301646a2183aa7af64..70888e1ef6b7410d6b10f11940c2deb4052eae88 100644 (file)
@@ -273,7 +273,8 @@ void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
        serr->ee.ee_pad = 0;
        serr->ee.ee_info = info;
        serr->ee.ee_data = 0;
-       serr->addr_offset = (u8*)&(((struct iphdr*)(skb->h.icmph+1))->daddr) - skb->nh.raw;
+       serr->addr_offset = (u8 *)&(((struct iphdr *)(skb->h.icmph + 1))->daddr) -
+                                  skb_network_header(skb);
        serr->port = port;
 
        skb->h.raw = payload;
@@ -309,7 +310,7 @@ void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 port, u32 inf
        serr->ee.ee_pad = 0;
        serr->ee.ee_info = info;
        serr->ee.ee_data = 0;
-       serr->addr_offset = (u8*)&iph->daddr - skb->nh.raw;
+       serr->addr_offset = (u8 *)&iph->daddr - skb_network_header(skb);
        serr->port = port;
 
        skb->h.raw = skb->tail;
@@ -355,7 +356,8 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len)
        sin = (struct sockaddr_in *)msg->msg_name;
        if (sin) {
                sin->sin_family = AF_INET;
-               sin->sin_addr.s_addr = *(__be32*)(skb->nh.raw + serr->addr_offset);
+               sin->sin_addr.s_addr = *(__be32 *)(skb_network_header(skb) +
+                                                  serr->addr_offset);
                sin->sin_port = serr->port;
                memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
        }