diff options
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r-- | net/ipv6/ndisc.c | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index a3e3d9e2f44b..00feb4c4d98b 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -598,7 +598,7 @@ void ndisc_send_ns(struct net_device *dev, struct neighbour *neigh, | |||
598 | dev->addr_len, dev->type); | 598 | dev->addr_len, dev->type); |
599 | 599 | ||
600 | /* checksum */ | 600 | /* checksum */ |
601 | msg->icmph.icmp6_cksum = csum_ipv6_magic(&skb->nh.ipv6h->saddr, | 601 | msg->icmph.icmp6_cksum = csum_ipv6_magic(&ipv6_hdr(skb)->saddr, |
602 | daddr, len, | 602 | daddr, len, |
603 | IPPROTO_ICMPV6, | 603 | IPPROTO_ICMPV6, |
604 | csum_partial((__u8 *) msg, | 604 | csum_partial((__u8 *) msg, |
@@ -697,7 +697,7 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr, | |||
697 | dev->addr_len, dev->type); | 697 | dev->addr_len, dev->type); |
698 | 698 | ||
699 | /* checksum */ | 699 | /* checksum */ |
700 | hdr->icmp6_cksum = csum_ipv6_magic(&skb->nh.ipv6h->saddr, daddr, len, | 700 | hdr->icmp6_cksum = csum_ipv6_magic(&ipv6_hdr(skb)->saddr, daddr, len, |
701 | IPPROTO_ICMPV6, | 701 | IPPROTO_ICMPV6, |
702 | csum_partial((__u8 *) hdr, len, 0)); | 702 | csum_partial((__u8 *) hdr, len, 0)); |
703 | 703 | ||
@@ -736,8 +736,8 @@ static void ndisc_solicit(struct neighbour *neigh, struct sk_buff *skb) | |||
736 | struct in6_addr *target = (struct in6_addr *)&neigh->primary_key; | 736 | struct in6_addr *target = (struct in6_addr *)&neigh->primary_key; |
737 | int probes = atomic_read(&neigh->probes); | 737 | int probes = atomic_read(&neigh->probes); |
738 | 738 | ||
739 | if (skb && ipv6_chk_addr(&skb->nh.ipv6h->saddr, dev, 1)) | 739 | if (skb && ipv6_chk_addr(&ipv6_hdr(skb)->saddr, dev, 1)) |
740 | saddr = &skb->nh.ipv6h->saddr; | 740 | saddr = &ipv6_hdr(skb)->saddr; |
741 | 741 | ||
742 | if ((probes -= neigh->parms->ucast_probes) < 0) { | 742 | if ((probes -= neigh->parms->ucast_probes) < 0) { |
743 | if (!(neigh->nud_state & NUD_VALID)) { | 743 | if (!(neigh->nud_state & NUD_VALID)) { |
@@ -761,8 +761,8 @@ static void ndisc_solicit(struct neighbour *neigh, struct sk_buff *skb) | |||
761 | static void ndisc_recv_ns(struct sk_buff *skb) | 761 | static void ndisc_recv_ns(struct sk_buff *skb) |
762 | { | 762 | { |
763 | struct nd_msg *msg = (struct nd_msg *)skb->h.raw; | 763 | struct nd_msg *msg = (struct nd_msg *)skb->h.raw; |
764 | struct in6_addr *saddr = &skb->nh.ipv6h->saddr; | 764 | struct in6_addr *saddr = &ipv6_hdr(skb)->saddr; |
765 | struct in6_addr *daddr = &skb->nh.ipv6h->daddr; | 765 | struct in6_addr *daddr = &ipv6_hdr(skb)->daddr; |
766 | u8 *lladdr = NULL; | 766 | u8 *lladdr = NULL; |
767 | u32 ndoptlen = skb->tail - msg->opt; | 767 | u32 ndoptlen = skb->tail - msg->opt; |
768 | struct ndisc_options ndopts; | 768 | struct ndisc_options ndopts; |
@@ -939,8 +939,8 @@ out: | |||
939 | static void ndisc_recv_na(struct sk_buff *skb) | 939 | static void ndisc_recv_na(struct sk_buff *skb) |
940 | { | 940 | { |
941 | struct nd_msg *msg = (struct nd_msg *)skb->h.raw; | 941 | struct nd_msg *msg = (struct nd_msg *)skb->h.raw; |
942 | struct in6_addr *saddr = &skb->nh.ipv6h->saddr; | 942 | struct in6_addr *saddr = &ipv6_hdr(skb)->saddr; |
943 | struct in6_addr *daddr = &skb->nh.ipv6h->daddr; | 943 | struct in6_addr *daddr = &ipv6_hdr(skb)->daddr; |
944 | u8 *lladdr = NULL; | 944 | u8 *lladdr = NULL; |
945 | u32 ndoptlen = skb->tail - msg->opt; | 945 | u32 ndoptlen = skb->tail - msg->opt; |
946 | struct ndisc_options ndopts; | 946 | struct ndisc_options ndopts; |
@@ -1044,7 +1044,7 @@ static void ndisc_recv_rs(struct sk_buff *skb) | |||
1044 | unsigned long ndoptlen = skb->len - sizeof(*rs_msg); | 1044 | unsigned long ndoptlen = skb->len - sizeof(*rs_msg); |
1045 | struct neighbour *neigh; | 1045 | struct neighbour *neigh; |
1046 | struct inet6_dev *idev; | 1046 | struct inet6_dev *idev; |
1047 | struct in6_addr *saddr = &skb->nh.ipv6h->saddr; | 1047 | struct in6_addr *saddr = &ipv6_hdr(skb)->saddr; |
1048 | struct ndisc_options ndopts; | 1048 | struct ndisc_options ndopts; |
1049 | u8 *lladdr = NULL; | 1049 | u8 *lladdr = NULL; |
1050 | 1050 | ||
@@ -1110,7 +1110,7 @@ static void ndisc_router_discovery(struct sk_buff *skb) | |||
1110 | 1110 | ||
1111 | optlen = (skb->tail - skb->h.raw) - sizeof(struct ra_msg); | 1111 | optlen = (skb->tail - skb->h.raw) - sizeof(struct ra_msg); |
1112 | 1112 | ||
1113 | if (!(ipv6_addr_type(&skb->nh.ipv6h->saddr) & IPV6_ADDR_LINKLOCAL)) { | 1113 | if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)) { |
1114 | ND_PRINTK2(KERN_WARNING | 1114 | ND_PRINTK2(KERN_WARNING |
1115 | "ICMPv6 RA: source address is not link-local.\n"); | 1115 | "ICMPv6 RA: source address is not link-local.\n"); |
1116 | return; | 1116 | return; |
@@ -1176,7 +1176,7 @@ static void ndisc_router_discovery(struct sk_buff *skb) | |||
1176 | pref = ICMPV6_ROUTER_PREF_MEDIUM; | 1176 | pref = ICMPV6_ROUTER_PREF_MEDIUM; |
1177 | #endif | 1177 | #endif |
1178 | 1178 | ||
1179 | rt = rt6_get_dflt_router(&skb->nh.ipv6h->saddr, skb->dev); | 1179 | rt = rt6_get_dflt_router(&ipv6_hdr(skb)->saddr, skb->dev); |
1180 | 1180 | ||
1181 | if (rt) | 1181 | if (rt) |
1182 | neigh = rt->rt6i_nexthop; | 1182 | neigh = rt->rt6i_nexthop; |
@@ -1191,7 +1191,7 @@ static void ndisc_router_discovery(struct sk_buff *skb) | |||
1191 | ND_PRINTK3(KERN_DEBUG | 1191 | ND_PRINTK3(KERN_DEBUG |
1192 | "ICMPv6 RA: adding default router.\n"); | 1192 | "ICMPv6 RA: adding default router.\n"); |
1193 | 1193 | ||
1194 | rt = rt6_add_dflt_router(&skb->nh.ipv6h->saddr, skb->dev, pref); | 1194 | rt = rt6_add_dflt_router(&ipv6_hdr(skb)->saddr, skb->dev, pref); |
1195 | if (rt == NULL) { | 1195 | if (rt == NULL) { |
1196 | ND_PRINTK0(KERN_ERR | 1196 | ND_PRINTK0(KERN_ERR |
1197 | "ICMPv6 RA: %s() failed to add default route.\n", | 1197 | "ICMPv6 RA: %s() failed to add default route.\n", |
@@ -1263,7 +1263,7 @@ skip_defrtr: | |||
1263 | */ | 1263 | */ |
1264 | 1264 | ||
1265 | if (!neigh) | 1265 | if (!neigh) |
1266 | neigh = __neigh_lookup(&nd_tbl, &skb->nh.ipv6h->saddr, | 1266 | neigh = __neigh_lookup(&nd_tbl, &ipv6_hdr(skb)->saddr, |
1267 | skb->dev, 1); | 1267 | skb->dev, 1); |
1268 | if (neigh) { | 1268 | if (neigh) { |
1269 | u8 *lladdr = NULL; | 1269 | u8 *lladdr = NULL; |
@@ -1292,7 +1292,7 @@ skip_defrtr: | |||
1292 | if (((struct route_info *)p)->prefix_len > in6_dev->cnf.accept_ra_rt_info_max_plen) | 1292 | if (((struct route_info *)p)->prefix_len > in6_dev->cnf.accept_ra_rt_info_max_plen) |
1293 | continue; | 1293 | continue; |
1294 | rt6_route_rcv(skb->dev, (u8*)p, (p->nd_opt_len) << 3, | 1294 | rt6_route_rcv(skb->dev, (u8*)p, (p->nd_opt_len) << 3, |
1295 | &skb->nh.ipv6h->saddr); | 1295 | &ipv6_hdr(skb)->saddr); |
1296 | } | 1296 | } |
1297 | } | 1297 | } |
1298 | #endif | 1298 | #endif |
@@ -1351,7 +1351,7 @@ static void ndisc_redirect_rcv(struct sk_buff *skb) | |||
1351 | int optlen; | 1351 | int optlen; |
1352 | u8 *lladdr = NULL; | 1352 | u8 *lladdr = NULL; |
1353 | 1353 | ||
1354 | if (!(ipv6_addr_type(&skb->nh.ipv6h->saddr) & IPV6_ADDR_LINKLOCAL)) { | 1354 | if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)) { |
1355 | ND_PRINTK2(KERN_WARNING | 1355 | ND_PRINTK2(KERN_WARNING |
1356 | "ICMPv6 Redirect: source address is not link-local.\n"); | 1356 | "ICMPv6 Redirect: source address is not link-local.\n"); |
1357 | return; | 1357 | return; |
@@ -1416,8 +1416,8 @@ static void ndisc_redirect_rcv(struct sk_buff *skb) | |||
1416 | 1416 | ||
1417 | neigh = __neigh_lookup(&nd_tbl, target, skb->dev, 1); | 1417 | neigh = __neigh_lookup(&nd_tbl, target, skb->dev, 1); |
1418 | if (neigh) { | 1418 | if (neigh) { |
1419 | rt6_redirect(dest, &skb->nh.ipv6h->daddr, | 1419 | rt6_redirect(dest, &ipv6_hdr(skb)->daddr, |
1420 | &skb->nh.ipv6h->saddr, neigh, lladdr, | 1420 | &ipv6_hdr(skb)->saddr, neigh, lladdr, |
1421 | on_link); | 1421 | on_link); |
1422 | neigh_release(neigh); | 1422 | neigh_release(neigh); |
1423 | } | 1423 | } |
@@ -1453,14 +1453,14 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh, | |||
1453 | return; | 1453 | return; |
1454 | } | 1454 | } |
1455 | 1455 | ||
1456 | if (!ipv6_addr_equal(&skb->nh.ipv6h->daddr, target) && | 1456 | if (!ipv6_addr_equal(&ipv6_hdr(skb)->daddr, target) && |
1457 | !(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) { | 1457 | !(ipv6_addr_type(target) & IPV6_ADDR_LINKLOCAL)) { |
1458 | ND_PRINTK2(KERN_WARNING | 1458 | ND_PRINTK2(KERN_WARNING |
1459 | "ICMPv6 Redirect: target address is not link-local.\n"); | 1459 | "ICMPv6 Redirect: target address is not link-local.\n"); |
1460 | return; | 1460 | return; |
1461 | } | 1461 | } |
1462 | 1462 | ||
1463 | ndisc_flow_init(&fl, NDISC_REDIRECT, &saddr_buf, &skb->nh.ipv6h->saddr, | 1463 | ndisc_flow_init(&fl, NDISC_REDIRECT, &saddr_buf, &ipv6_hdr(skb)->saddr, |
1464 | dev->ifindex); | 1464 | dev->ifindex); |
1465 | 1465 | ||
1466 | dst = ip6_route_output(NULL, &fl); | 1466 | dst = ip6_route_output(NULL, &fl); |
@@ -1515,7 +1515,7 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh, | |||
1515 | hlen = 0; | 1515 | hlen = 0; |
1516 | 1516 | ||
1517 | skb_reserve(buff, LL_RESERVED_SPACE(dev)); | 1517 | skb_reserve(buff, LL_RESERVED_SPACE(dev)); |
1518 | ip6_nd_hdr(sk, buff, dev, &saddr_buf, &skb->nh.ipv6h->saddr, | 1518 | ip6_nd_hdr(sk, buff, dev, &saddr_buf, &ipv6_hdr(skb)->saddr, |
1519 | IPPROTO_ICMPV6, len); | 1519 | IPPROTO_ICMPV6, len); |
1520 | 1520 | ||
1521 | icmph = (struct icmp6hdr *)skb_put(buff, len); | 1521 | icmph = (struct icmp6hdr *)skb_put(buff, len); |
@@ -1531,7 +1531,7 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh, | |||
1531 | addrp = (struct in6_addr *)(icmph + 1); | 1531 | addrp = (struct in6_addr *)(icmph + 1); |
1532 | ipv6_addr_copy(addrp, target); | 1532 | ipv6_addr_copy(addrp, target); |
1533 | addrp++; | 1533 | addrp++; |
1534 | ipv6_addr_copy(addrp, &skb->nh.ipv6h->daddr); | 1534 | ipv6_addr_copy(addrp, &ipv6_hdr(skb)->daddr); |
1535 | 1535 | ||
1536 | opt = (u8*) (addrp + 1); | 1536 | opt = (u8*) (addrp + 1); |
1537 | 1537 | ||
@@ -1552,9 +1552,9 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh, | |||
1552 | *(opt++) = (rd_len >> 3); | 1552 | *(opt++) = (rd_len >> 3); |
1553 | opt += 6; | 1553 | opt += 6; |
1554 | 1554 | ||
1555 | memcpy(opt, skb->nh.ipv6h, rd_len - 8); | 1555 | memcpy(opt, ipv6_hdr(skb), rd_len - 8); |
1556 | 1556 | ||
1557 | icmph->icmp6_cksum = csum_ipv6_magic(&saddr_buf, &skb->nh.ipv6h->saddr, | 1557 | icmph->icmp6_cksum = csum_ipv6_magic(&saddr_buf, &ipv6_hdr(skb)->saddr, |
1558 | len, IPPROTO_ICMPV6, | 1558 | len, IPPROTO_ICMPV6, |
1559 | csum_partial((u8 *) icmph, len, 0)); | 1559 | csum_partial((u8 *) icmph, len, 0)); |
1560 | 1560 | ||
@@ -1588,10 +1588,10 @@ int ndisc_rcv(struct sk_buff *skb) | |||
1588 | 1588 | ||
1589 | __skb_push(skb, skb->data-skb->h.raw); | 1589 | __skb_push(skb, skb->data-skb->h.raw); |
1590 | 1590 | ||
1591 | if (skb->nh.ipv6h->hop_limit != 255) { | 1591 | if (ipv6_hdr(skb)->hop_limit != 255) { |
1592 | ND_PRINTK2(KERN_WARNING | 1592 | ND_PRINTK2(KERN_WARNING |
1593 | "ICMPv6 NDISC: invalid hop-limit: %d\n", | 1593 | "ICMPv6 NDISC: invalid hop-limit: %d\n", |
1594 | skb->nh.ipv6h->hop_limit); | 1594 | ipv6_hdr(skb)->hop_limit); |
1595 | return 0; | 1595 | return 0; |
1596 | } | 1596 | } |
1597 | 1597 | ||