diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2007-03-14 20:05:37 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-26 01:26:01 -0400 |
commit | d10ba34b001944a8d1c8adb5646140ef089c432b (patch) | |
tree | cba54f5d23021a2b0061f5f2891ac7fa8fca6d5a /net/ipv6/ndisc.c | |
parent | 55f79cc0c02f9ce8f85e965e9679796f62b790f5 (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.c | 20 |
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; |