aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/ndisc.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2007-03-14 20:05:37 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-26 01:26:01 -0400
commitd10ba34b001944a8d1c8adb5646140ef089c432b (patch)
treecba54f5d23021a2b0061f5f2891ac7fa8fca6d5a /net/ipv6/ndisc.c
parent55f79cc0c02f9ce8f85e965e9679796f62b790f5 (diff)
[SK_BUFF]: More skb_put related skb_reset_transport_header
This time we have to set it to skb->tail that is not anymore equal to skb->data, so we either add a new helper or just add the skb->tail - skb->data offset, for now do the later. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r--net/ipv6/ndisc.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index f9a85ab594db..f8e619772fb4 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -492,8 +492,9 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
492 skb_reserve(skb, LL_RESERVED_SPACE(dev)); 492 skb_reserve(skb, LL_RESERVED_SPACE(dev));
493 ip6_nd_hdr(sk, skb, dev, src_addr, daddr, IPPROTO_ICMPV6, len); 493 ip6_nd_hdr(sk, skb, dev, src_addr, daddr, IPPROTO_ICMPV6, len);
494 494
495 msg = (struct nd_msg *)skb_put(skb, len); 495 skb_set_transport_header(skb, skb->tail - skb->data);
496 skb->h.raw = (unsigned char*)msg; 496 skb_put(skb, len);
497 msg = (struct nd_msg *)skb_transport_header(skb);
497 498
498 msg->icmph.icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT; 499 msg->icmph.icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT;
499 msg->icmph.icmp6_code = 0; 500 msg->icmph.icmp6_code = 0;
@@ -583,8 +584,9 @@ void ndisc_send_ns(struct net_device *dev, struct neighbour *neigh,
583 skb_reserve(skb, LL_RESERVED_SPACE(dev)); 584 skb_reserve(skb, LL_RESERVED_SPACE(dev));
584 ip6_nd_hdr(sk, skb, dev, saddr, daddr, IPPROTO_ICMPV6, len); 585 ip6_nd_hdr(sk, skb, dev, saddr, daddr, IPPROTO_ICMPV6, len);
585 586
586 msg = (struct nd_msg *)skb_put(skb, len); 587 skb_set_transport_header(skb, skb->tail - skb->data);
587 skb->h.raw = (unsigned char*)msg; 588 skb_put(skb, len);
589 msg = (struct nd_msg *)skb_transport_header(skb);
588 msg->icmph.icmp6_type = NDISC_NEIGHBOUR_SOLICITATION; 590 msg->icmph.icmp6_type = NDISC_NEIGHBOUR_SOLICITATION;
589 msg->icmph.icmp6_code = 0; 591 msg->icmph.icmp6_code = 0;
590 msg->icmph.icmp6_cksum = 0; 592 msg->icmph.icmp6_cksum = 0;
@@ -683,8 +685,9 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
683 skb_reserve(skb, LL_RESERVED_SPACE(dev)); 685 skb_reserve(skb, LL_RESERVED_SPACE(dev));
684 ip6_nd_hdr(sk, skb, dev, saddr, daddr, IPPROTO_ICMPV6, len); 686 ip6_nd_hdr(sk, skb, dev, saddr, daddr, IPPROTO_ICMPV6, len);
685 687
686 hdr = (struct icmp6hdr *)skb_put(skb, len); 688 skb_set_transport_header(skb, skb->tail - skb->data);
687 skb->h.raw = (unsigned char*)hdr; 689 skb_put(skb, len);
690 hdr = icmp6_hdr(skb);
688 hdr->icmp6_type = NDISC_ROUTER_SOLICITATION; 691 hdr->icmp6_type = NDISC_ROUTER_SOLICITATION;
689 hdr->icmp6_code = 0; 692 hdr->icmp6_code = 0;
690 hdr->icmp6_cksum = 0; 693 hdr->icmp6_cksum = 0;
@@ -1519,8 +1522,9 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
1519 ip6_nd_hdr(sk, buff, dev, &saddr_buf, &ipv6_hdr(skb)->saddr, 1522 ip6_nd_hdr(sk, buff, dev, &saddr_buf, &ipv6_hdr(skb)->saddr,
1520 IPPROTO_ICMPV6, len); 1523 IPPROTO_ICMPV6, len);
1521 1524
1522 icmph = (struct icmp6hdr *)skb_put(buff, len); 1525 skb_set_transport_header(buff, buff->tail - buff->data);
1523 buff->h.raw = (unsigned char*)icmph; 1526 skb_put(buff, len);
1527 icmph = icmp6_hdr(buff);
1524 1528
1525 memset(icmph, 0, sizeof(struct icmp6hdr)); 1529 memset(icmph, 0, sizeof(struct icmp6hdr));
1526 icmph->icmp6_type = NDISC_REDIRECT; 1530 icmph->icmp6_type = NDISC_REDIRECT;