]> err.no Git - linux-2.6/commitdiff
[SK_BUFF]: Some more layer header conversions
authorArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 16 Mar 2007 00:42:27 +0000 (21:42 -0300)
committerDavid S. Miller <davem@sunset.davemloft.net>
Thu, 26 Apr 2007 05:26:03 +0000 (22:26 -0700)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/pktgen.c
net/core/skbuff.c
net/ipv4/ipmr.c
net/ipv6/xfrm6_mode_beet.c
net/ipv6/xfrm6_mode_ro.c
net/ipv6/xfrm6_mode_transport.c

index 160d4f01c46e74ce7b0b0231cda98224df2863b3..ae8cf9a285fdf44aad413bb8b1a898f43d364049 100644 (file)
@@ -2357,8 +2357,12 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
                *vlan_encapsulated_proto = htons(ETH_P_IP);
        }
 
-       iph = (struct iphdr *)skb_put(skb, sizeof(struct iphdr));
-       udph = (struct udphdr *)skb_put(skb, sizeof(struct udphdr));
+       skb_set_network_header(skb, skb->tail - skb->data);
+       skb->h.raw = skb->nh.raw + sizeof(struct iphdr);
+       skb_put(skb, sizeof(struct iphdr) + sizeof(struct udphdr));
+
+       iph = ip_hdr(skb);
+       udph = udp_hdr(skb);
 
        memcpy(eth, pkt_dev->hh, 12);
        *(__be16 *) & eth[12] = protocol;
@@ -2387,12 +2391,11 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
        iph->check = 0;
        iph->check = ip_fast_csum((void *)iph, iph->ihl);
        skb->protocol = protocol;
-       skb->mac.raw = ((u8 *) iph) - 14 - pkt_dev->nr_labels*sizeof(u32) -
-               VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev);
+       skb->mac.raw = (skb->nh.raw - ETH_HLEN -
+                       pkt_dev->nr_labels * sizeof(u32) -
+                       VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev));
        skb->dev = odev;
        skb->pkt_type = PACKET_HOST;
-       skb->nh.raw = (unsigned char *)iph;
-       skb->h.raw = (unsigned char *)udph;
 
        if (pkt_dev->nfrags <= 0)
                pgh = (struct pktgen_hdr *)skb_put(skb, datalen);
@@ -2693,8 +2696,12 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
                *vlan_encapsulated_proto = htons(ETH_P_IPV6);
        }
 
-       iph = (struct ipv6hdr *)skb_put(skb, sizeof(struct ipv6hdr));
-       udph = (struct udphdr *)skb_put(skb, sizeof(struct udphdr));
+       skb_set_network_header(skb, skb->tail - skb->data);
+       skb->h.raw = skb->nh.raw + sizeof(struct ipv6hdr);
+       skb_put(skb, sizeof(struct ipv6hdr) + sizeof(struct udphdr));
+
+       iph = ipv6_hdr(skb);
+       udph = udp_hdr(skb);
 
        memcpy(eth, pkt_dev->hh, 12);
        *(__be16 *) & eth[12] = protocol;
@@ -2731,13 +2738,12 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
        ipv6_addr_copy(&iph->daddr, &pkt_dev->cur_in6_daddr);
        ipv6_addr_copy(&iph->saddr, &pkt_dev->cur_in6_saddr);
 
-       skb->mac.raw = ((u8 *) iph) - 14 - pkt_dev->nr_labels*sizeof(u32) -
-               VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev);
+       skb->mac.raw = (skb->nh.raw - ETH_HLEN -
+                       pkt_dev->nr_labels * sizeof(u32) -
+                       VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev));
        skb->protocol = protocol;
        skb->dev = odev;
        skb->pkt_type = PACKET_HOST;
-       skb->nh.raw = (unsigned char *)iph;
-       skb->h.raw = (unsigned char *)udph;
 
        if (pkt_dev->nfrags <= 0)
                pgh = (struct pktgen_hdr *)skb_put(skb, datalen);
index 408cc99af6b37b225dfd92821ceaf6d5762e7110..87e000633f413e47703fbf4513d87b851d403d6d 100644 (file)
@@ -1905,7 +1905,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, int features)
 
                skb_reserve(nskb, headroom);
                skb_reset_mac_header(nskb);
-               nskb->nh.raw = nskb->data + skb->mac_len;
+               skb_set_network_header(nskb, skb->mac_len);
                nskb->h.raw = nskb->nh.raw + (skb->h.raw - skb->nh.raw);
                memcpy(skb_put(nskb, doffset), skb->data, doffset);
 
index 8f45c95db451a2f4083785b6454d89fb72018376..357894259f8ff6a980954de803f539296908e5e0 100644 (file)
@@ -580,7 +580,8 @@ static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert)
         *      Copy the IP header
         */
 
-       skb->nh.raw = skb_put(skb, ihl);
+       skb_set_network_header(skb, skb->tail - skb->data);
+       skb_put(skb, ihl);
        memcpy(skb->data,pkt->data,ihl);
        ip_hdr(skb)->protocol = 0;                      /* Flag to the kernel this is a route add */
        msg = (struct igmpmsg *)skb_network_header(skb);
index 0cc96ece003db3cd9697e1046994a8abfcf5717c..8a01b0da2ddd80fe8ed801f69ff0b86976abdd18 100644 (file)
@@ -41,7 +41,8 @@ static int xfrm6_beet_output(struct xfrm_state *x, struct sk_buff *skb)
        iph = ipv6_hdr(skb);
 
        hdr_len = ip6_find_1stfragopt(skb, &prevhdr);
-       skb->nh.raw = prevhdr - x->props.header_len;
+       skb_set_network_header(skb,
+                              (prevhdr - x->props.header_len) - skb->data);
        skb_set_transport_header(skb, hdr_len);
        memmove(skb->data, iph, hdr_len);
 
index da48ecf3fe96504d302ce7838bc25f63fd78a0cc..6ad6d7ac6bd70e4604354bb466212ee0b5712501 100644 (file)
@@ -53,7 +53,8 @@ static int xfrm6_ro_output(struct xfrm_state *x, struct sk_buff *skb)
        iph = ipv6_hdr(skb);
 
        hdr_len = x->type->hdr_offset(x, skb, &prevhdr);
-       skb->nh.raw = prevhdr - x->props.header_len;
+       skb_set_network_header(skb,
+                              (prevhdr - x->props.header_len) - skb->data);
        skb_set_transport_header(skb, hdr_len);
        memmove(skb->data, iph, hdr_len);
        return 0;
index d526f4e9c65e5a1324158d2e39cab3d7bd2de95d..eb1864b5aae717368820883db0023fc8ea0a48cb 100644 (file)
@@ -35,7 +35,8 @@ static int xfrm6_transport_output(struct xfrm_state *x, struct sk_buff *skb)
        iph = ipv6_hdr(skb);
 
        hdr_len = x->type->hdr_offset(x, skb, &prevhdr);
-       skb->nh.raw = prevhdr - x->props.header_len;
+       skb_set_network_header(skb,
+                              (prevhdr - x->props.header_len) - skb->data);
        skb_set_transport_header(skb, hdr_len);
        memmove(skb->data, iph, hdr_len);
        return 0;