diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2007-04-25 20:54:47 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-26 01:25:14 -0400 |
commit | 0660e03f6b18f19b6bbafe7583265a51b90daf36 (patch) | |
tree | 82cc819ead5ab7858ba211ee8719a3e6d2bb984f /net/ipv6 | |
parent | d0a92be05ed4aea7d35c2b257e3f9173565fe4eb (diff) |
[SK_BUFF]: Introduce ipv6_hdr(), remove skb->nh.ipv6h
Now the skb->nh union has just one member, .raw, i.e. it is just like the
skb->mac union, strange, no? I'm just leaving it like that till the transport
layer is done with, when we'll rename skb->mac.raw to skb->mac_header (or
->mac_header_offset?), ditto for ->{h,nh}.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
37 files changed, 235 insertions, 239 deletions
diff --git a/net/ipv6/ah6.c b/net/ipv6/ah6.c index 1c914386982f..b682d2368c2a 100644 --- a/net/ipv6/ah6.c +++ b/net/ipv6/ah6.c | |||
@@ -325,6 +325,7 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb) | |||
325 | */ | 325 | */ |
326 | 326 | ||
327 | struct ipv6_auth_hdr *ah; | 327 | struct ipv6_auth_hdr *ah; |
328 | struct ipv6hdr *ip6h; | ||
328 | struct ah_data *ahp; | 329 | struct ah_data *ahp; |
329 | unsigned char *tmp_hdr = NULL; | 330 | unsigned char *tmp_hdr = NULL; |
330 | u16 hdr_len; | 331 | u16 hdr_len; |
@@ -357,13 +358,14 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb) | |||
357 | tmp_hdr = kmemdup(skb_network_header(skb), hdr_len, GFP_ATOMIC); | 358 | tmp_hdr = kmemdup(skb_network_header(skb), hdr_len, GFP_ATOMIC); |
358 | if (!tmp_hdr) | 359 | if (!tmp_hdr) |
359 | goto out; | 360 | goto out; |
360 | if (ipv6_clear_mutable_options(skb->nh.ipv6h, hdr_len, XFRM_POLICY_IN)) | 361 | ip6h = ipv6_hdr(skb); |
362 | if (ipv6_clear_mutable_options(ip6h, hdr_len, XFRM_POLICY_IN)) | ||
361 | goto free_out; | 363 | goto free_out; |
362 | skb->nh.ipv6h->priority = 0; | 364 | ip6h->priority = 0; |
363 | skb->nh.ipv6h->flow_lbl[0] = 0; | 365 | ip6h->flow_lbl[0] = 0; |
364 | skb->nh.ipv6h->flow_lbl[1] = 0; | 366 | ip6h->flow_lbl[1] = 0; |
365 | skb->nh.ipv6h->flow_lbl[2] = 0; | 367 | ip6h->flow_lbl[2] = 0; |
366 | skb->nh.ipv6h->hop_limit = 0; | 368 | ip6h->hop_limit = 0; |
367 | 369 | ||
368 | { | 370 | { |
369 | u8 auth_data[MAX_AH_AUTH_LEN]; | 371 | u8 auth_data[MAX_AH_AUTH_LEN]; |
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c index ac95d3bfdfb7..f429290c2c37 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c | |||
@@ -254,7 +254,7 @@ void ipv6_local_error(struct sock *sk, int err, struct flowi *fl, u32 info) | |||
254 | 254 | ||
255 | skb_put(skb, sizeof(struct ipv6hdr)); | 255 | skb_put(skb, sizeof(struct ipv6hdr)); |
256 | skb_reset_network_header(skb); | 256 | skb_reset_network_header(skb); |
257 | iph = skb->nh.ipv6h; | 257 | iph = ipv6_hdr(skb); |
258 | ipv6_addr_copy(&iph->daddr, &fl->fl6_dst); | 258 | ipv6_addr_copy(&iph->daddr, &fl->fl6_dst); |
259 | 259 | ||
260 | serr = SKB_EXT_ERR(skb); | 260 | serr = SKB_EXT_ERR(skb); |
@@ -340,7 +340,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len) | |||
340 | sin->sin6_flowinfo = 0; | 340 | sin->sin6_flowinfo = 0; |
341 | sin->sin6_scope_id = 0; | 341 | sin->sin6_scope_id = 0; |
342 | if (serr->ee.ee_origin == SO_EE_ORIGIN_ICMP6) { | 342 | if (serr->ee.ee_origin == SO_EE_ORIGIN_ICMP6) { |
343 | ipv6_addr_copy(&sin->sin6_addr, &skb->nh.ipv6h->saddr); | 343 | ipv6_addr_copy(&sin->sin6_addr, &ipv6_hdr(skb)->saddr); |
344 | if (np->rxopt.all) | 344 | if (np->rxopt.all) |
345 | datagram_recv_ctl(sk, msg, skb); | 345 | datagram_recv_ctl(sk, msg, skb); |
346 | if (ipv6_addr_type(&sin->sin6_addr) & IPV6_ADDR_LINKLOCAL) | 346 | if (ipv6_addr_type(&sin->sin6_addr) & IPV6_ADDR_LINKLOCAL) |
@@ -391,17 +391,17 @@ int datagram_recv_ctl(struct sock *sk, struct msghdr *msg, struct sk_buff *skb) | |||
391 | struct in6_pktinfo src_info; | 391 | struct in6_pktinfo src_info; |
392 | 392 | ||
393 | src_info.ipi6_ifindex = opt->iif; | 393 | src_info.ipi6_ifindex = opt->iif; |
394 | ipv6_addr_copy(&src_info.ipi6_addr, &skb->nh.ipv6h->daddr); | 394 | ipv6_addr_copy(&src_info.ipi6_addr, &ipv6_hdr(skb)->daddr); |
395 | put_cmsg(msg, SOL_IPV6, IPV6_PKTINFO, sizeof(src_info), &src_info); | 395 | put_cmsg(msg, SOL_IPV6, IPV6_PKTINFO, sizeof(src_info), &src_info); |
396 | } | 396 | } |
397 | 397 | ||
398 | if (np->rxopt.bits.rxhlim) { | 398 | if (np->rxopt.bits.rxhlim) { |
399 | int hlim = skb->nh.ipv6h->hop_limit; | 399 | int hlim = ipv6_hdr(skb)->hop_limit; |
400 | put_cmsg(msg, SOL_IPV6, IPV6_HOPLIMIT, sizeof(hlim), &hlim); | 400 | put_cmsg(msg, SOL_IPV6, IPV6_HOPLIMIT, sizeof(hlim), &hlim); |
401 | } | 401 | } |
402 | 402 | ||
403 | if (np->rxopt.bits.rxtclass) { | 403 | if (np->rxopt.bits.rxtclass) { |
404 | int tclass = (ntohl(*(__be32 *)skb->nh.ipv6h) >> 20) & 0xff; | 404 | int tclass = (ntohl(*(__be32 *)ipv6_hdr(skb)) >> 20) & 0xff; |
405 | put_cmsg(msg, SOL_IPV6, IPV6_TCLASS, sizeof(tclass), &tclass); | 405 | put_cmsg(msg, SOL_IPV6, IPV6_TCLASS, sizeof(tclass), &tclass); |
406 | } | 406 | } |
407 | 407 | ||
@@ -428,7 +428,7 @@ int datagram_recv_ctl(struct sock *sk, struct msghdr *msg, struct sk_buff *skb) | |||
428 | * IPV6_RECVDSTOPTS is more generic. --yoshfuji | 428 | * IPV6_RECVDSTOPTS is more generic. --yoshfuji |
429 | */ | 429 | */ |
430 | unsigned int off = sizeof(struct ipv6hdr); | 430 | unsigned int off = sizeof(struct ipv6hdr); |
431 | u8 nexthdr = skb->nh.ipv6h->nexthdr; | 431 | u8 nexthdr = ipv6_hdr(skb)->nexthdr; |
432 | 432 | ||
433 | while (off <= opt->lastopt) { | 433 | while (off <= opt->lastopt) { |
434 | unsigned len; | 434 | unsigned len; |
@@ -466,11 +466,11 @@ int datagram_recv_ctl(struct sock *sk, struct msghdr *msg, struct sk_buff *skb) | |||
466 | struct in6_pktinfo src_info; | 466 | struct in6_pktinfo src_info; |
467 | 467 | ||
468 | src_info.ipi6_ifindex = opt->iif; | 468 | src_info.ipi6_ifindex = opt->iif; |
469 | ipv6_addr_copy(&src_info.ipi6_addr, &skb->nh.ipv6h->daddr); | 469 | ipv6_addr_copy(&src_info.ipi6_addr, &ipv6_hdr(skb)->daddr); |
470 | put_cmsg(msg, SOL_IPV6, IPV6_2292PKTINFO, sizeof(src_info), &src_info); | 470 | put_cmsg(msg, SOL_IPV6, IPV6_2292PKTINFO, sizeof(src_info), &src_info); |
471 | } | 471 | } |
472 | if (np->rxopt.bits.rxohlim) { | 472 | if (np->rxopt.bits.rxohlim) { |
473 | int hlim = skb->nh.ipv6h->hop_limit; | 473 | int hlim = ipv6_hdr(skb)->hop_limit; |
474 | put_cmsg(msg, SOL_IPV6, IPV6_2292HOPLIMIT, sizeof(hlim), &hlim); | 474 | put_cmsg(msg, SOL_IPV6, IPV6_2292HOPLIMIT, sizeof(hlim), &hlim); |
475 | } | 475 | } |
476 | if (np->rxopt.bits.ohopopts && opt->hop) { | 476 | if (np->rxopt.bits.ohopopts && opt->hop) { |
diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c index 6e6b57ac8013..7aff380e74ef 100644 --- a/net/ipv6/esp6.c +++ b/net/ipv6/esp6.c | |||
@@ -191,7 +191,7 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb) | |||
191 | skb->ip_summed = CHECKSUM_NONE; | 191 | skb->ip_summed = CHECKSUM_NONE; |
192 | 192 | ||
193 | esph = (struct ipv6_esp_hdr*)skb->data; | 193 | esph = (struct ipv6_esp_hdr*)skb->data; |
194 | iph = skb->nh.ipv6h; | 194 | iph = ipv6_hdr(skb); |
195 | 195 | ||
196 | /* Get ivec. This can be wrong, check against another impls. */ | 196 | /* Get ivec. This can be wrong, check against another impls. */ |
197 | if (esp->conf.ivlen) | 197 | if (esp->conf.ivlen) |
diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c index 9ebf120ba6d3..dab069b0b3f6 100644 --- a/net/ipv6/exthdrs.c +++ b/net/ipv6/exthdrs.c | |||
@@ -125,7 +125,7 @@ static int ip6_tlvopt_unknown(struct sk_buff **skbp, int optoff) | |||
125 | /* Actually, it is redundant check. icmp_send | 125 | /* Actually, it is redundant check. icmp_send |
126 | will recheck in any case. | 126 | will recheck in any case. |
127 | */ | 127 | */ |
128 | if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr)) | 128 | if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) |
129 | break; | 129 | break; |
130 | case 2: /* send ICMP PARM PROB regardless and drop packet */ | 130 | case 2: /* send ICMP PARM PROB regardless and drop packet */ |
131 | icmpv6_param_prob(skb, ICMPV6_UNK_OPTION, optoff); | 131 | icmpv6_param_prob(skb, ICMPV6_UNK_OPTION, optoff); |
@@ -202,7 +202,7 @@ static int ipv6_dest_hao(struct sk_buff **skbp, int optoff) | |||
202 | struct sk_buff *skb = *skbp; | 202 | struct sk_buff *skb = *skbp; |
203 | struct ipv6_destopt_hao *hao; | 203 | struct ipv6_destopt_hao *hao; |
204 | struct inet6_skb_parm *opt = IP6CB(skb); | 204 | struct inet6_skb_parm *opt = IP6CB(skb); |
205 | struct ipv6hdr *ipv6h = skb->nh.ipv6h; | 205 | struct ipv6hdr *ipv6h = ipv6_hdr(skb); |
206 | struct in6_addr tmp_addr; | 206 | struct in6_addr tmp_addr; |
207 | int ret; | 207 | int ret; |
208 | 208 | ||
@@ -248,7 +248,7 @@ static int ipv6_dest_hao(struct sk_buff **skbp, int optoff) | |||
248 | *skbp = skb = skb2; | 248 | *skbp = skb = skb2; |
249 | hao = (struct ipv6_destopt_hao *)(skb_network_header(skb2) + | 249 | hao = (struct ipv6_destopt_hao *)(skb_network_header(skb2) + |
250 | optoff); | 250 | optoff); |
251 | ipv6h = skb2->nh.ipv6h; | 251 | ipv6h = ipv6_hdr(skb2); |
252 | } | 252 | } |
253 | 253 | ||
254 | if (skb->ip_summed == CHECKSUM_COMPLETE) | 254 | if (skb->ip_summed == CHECKSUM_COMPLETE) |
@@ -414,7 +414,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp) | |||
414 | return -1; | 414 | return -1; |
415 | } | 415 | } |
416 | 416 | ||
417 | if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr) || | 417 | if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr) || |
418 | skb->pkt_type != PACKET_HOST) { | 418 | skb->pkt_type != PACKET_HOST) { |
419 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), | 419 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), |
420 | IPSTATS_MIB_INADDRERRORS); | 420 | IPSTATS_MIB_INADDRERRORS); |
@@ -522,7 +522,7 @@ looped_back: | |||
522 | #ifdef CONFIG_IPV6_MIP6 | 522 | #ifdef CONFIG_IPV6_MIP6 |
523 | case IPV6_SRCRT_TYPE_2: | 523 | case IPV6_SRCRT_TYPE_2: |
524 | if (xfrm6_input_addr(skb, (xfrm_address_t *)addr, | 524 | if (xfrm6_input_addr(skb, (xfrm_address_t *)addr, |
525 | (xfrm_address_t *)&skb->nh.ipv6h->saddr, | 525 | (xfrm_address_t *)&ipv6_hdr(skb)->saddr, |
526 | IPPROTO_ROUTING) < 0) { | 526 | IPPROTO_ROUTING) < 0) { |
527 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), | 527 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), |
528 | IPSTATS_MIB_INADDRERRORS); | 528 | IPSTATS_MIB_INADDRERRORS); |
@@ -549,8 +549,8 @@ looped_back: | |||
549 | } | 549 | } |
550 | 550 | ||
551 | ipv6_addr_copy(&daddr, addr); | 551 | ipv6_addr_copy(&daddr, addr); |
552 | ipv6_addr_copy(addr, &skb->nh.ipv6h->daddr); | 552 | ipv6_addr_copy(addr, &ipv6_hdr(skb)->daddr); |
553 | ipv6_addr_copy(&skb->nh.ipv6h->daddr, &daddr); | 553 | ipv6_addr_copy(&ipv6_hdr(skb)->daddr, &daddr); |
554 | 554 | ||
555 | dst_release(xchg(&skb->dst, NULL)); | 555 | dst_release(xchg(&skb->dst, NULL)); |
556 | ip6_route_input(skb); | 556 | ip6_route_input(skb); |
@@ -561,7 +561,7 @@ looped_back: | |||
561 | } | 561 | } |
562 | 562 | ||
563 | if (skb->dst->dev->flags&IFF_LOOPBACK) { | 563 | if (skb->dst->dev->flags&IFF_LOOPBACK) { |
564 | if (skb->nh.ipv6h->hop_limit <= 1) { | 564 | if (ipv6_hdr(skb)->hop_limit <= 1) { |
565 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), | 565 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), |
566 | IPSTATS_MIB_INHDRERRORS); | 566 | IPSTATS_MIB_INHDRERRORS); |
567 | icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, | 567 | icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, |
@@ -569,7 +569,7 @@ looped_back: | |||
569 | kfree_skb(skb); | 569 | kfree_skb(skb); |
570 | return -1; | 570 | return -1; |
571 | } | 571 | } |
572 | skb->nh.ipv6h->hop_limit--; | 572 | ipv6_hdr(skb)->hop_limit--; |
573 | goto looped_back; | 573 | goto looped_back; |
574 | } | 574 | } |
575 | 575 | ||
@@ -698,7 +698,7 @@ static int ipv6_hop_jumbo(struct sk_buff **skbp, int optoff) | |||
698 | icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff+2); | 698 | icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff+2); |
699 | return 0; | 699 | return 0; |
700 | } | 700 | } |
701 | if (skb->nh.ipv6h->payload_len) { | 701 | if (ipv6_hdr(skb)->payload_len) { |
702 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_INHDRERRORS); | 702 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_INHDRERRORS); |
703 | icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff); | 703 | icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff); |
704 | return 0; | 704 | return 0; |
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index e5293b34229f..3a01effda695 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c | |||
@@ -129,9 +129,9 @@ void icmpv6_param_prob(struct sk_buff *skb, int code, int pos) | |||
129 | 129 | ||
130 | static int is_ineligible(struct sk_buff *skb) | 130 | static int is_ineligible(struct sk_buff *skb) |
131 | { | 131 | { |
132 | int ptr = (u8*)(skb->nh.ipv6h+1) - skb->data; | 132 | int ptr = (u8 *)(ipv6_hdr(skb) + 1) - skb->data; |
133 | int len = skb->len - ptr; | 133 | int len = skb->len - ptr; |
134 | __u8 nexthdr = skb->nh.ipv6h->nexthdr; | 134 | __u8 nexthdr = ipv6_hdr(skb)->nexthdr; |
135 | 135 | ||
136 | if (len < 0) | 136 | if (len < 0) |
137 | return 1; | 137 | return 1; |
@@ -275,7 +275,7 @@ static int icmpv6_getfrag(void *from, char *to, int offset, int len, int odd, st | |||
275 | #ifdef CONFIG_IPV6_MIP6 | 275 | #ifdef CONFIG_IPV6_MIP6 |
276 | static void mip6_addr_swap(struct sk_buff *skb) | 276 | static void mip6_addr_swap(struct sk_buff *skb) |
277 | { | 277 | { |
278 | struct ipv6hdr *iph = skb->nh.ipv6h; | 278 | struct ipv6hdr *iph = ipv6_hdr(skb); |
279 | struct inet6_skb_parm *opt = IP6CB(skb); | 279 | struct inet6_skb_parm *opt = IP6CB(skb); |
280 | struct ipv6_destopt_hao *hao; | 280 | struct ipv6_destopt_hao *hao; |
281 | struct in6_addr tmp; | 281 | struct in6_addr tmp; |
@@ -303,7 +303,7 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info, | |||
303 | struct net_device *dev) | 303 | struct net_device *dev) |
304 | { | 304 | { |
305 | struct inet6_dev *idev = NULL; | 305 | struct inet6_dev *idev = NULL; |
306 | struct ipv6hdr *hdr = skb->nh.ipv6h; | 306 | struct ipv6hdr *hdr = ipv6_hdr(skb); |
307 | struct sock *sk; | 307 | struct sock *sk; |
308 | struct ipv6_pinfo *np; | 308 | struct ipv6_pinfo *np; |
309 | struct in6_addr *saddr = NULL; | 309 | struct in6_addr *saddr = NULL; |
@@ -485,7 +485,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb) | |||
485 | int hlimit; | 485 | int hlimit; |
486 | int tclass; | 486 | int tclass; |
487 | 487 | ||
488 | saddr = &skb->nh.ipv6h->daddr; | 488 | saddr = &ipv6_hdr(skb)->daddr; |
489 | 489 | ||
490 | if (!ipv6_unicast_destination(skb)) | 490 | if (!ipv6_unicast_destination(skb)) |
491 | saddr = NULL; | 491 | saddr = NULL; |
@@ -495,7 +495,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb) | |||
495 | 495 | ||
496 | memset(&fl, 0, sizeof(fl)); | 496 | memset(&fl, 0, sizeof(fl)); |
497 | fl.proto = IPPROTO_ICMPV6; | 497 | fl.proto = IPPROTO_ICMPV6; |
498 | ipv6_addr_copy(&fl.fl6_dst, &skb->nh.ipv6h->saddr); | 498 | ipv6_addr_copy(&fl.fl6_dst, &ipv6_hdr(skb)->saddr); |
499 | if (saddr) | 499 | if (saddr) |
500 | ipv6_addr_copy(&fl.fl6_src, saddr); | 500 | ipv6_addr_copy(&fl.fl6_src, saddr); |
501 | fl.oif = skb->dev->ifindex; | 501 | fl.oif = skb->dev->ifindex; |
@@ -583,8 +583,8 @@ static void icmpv6_notify(struct sk_buff *skb, int type, int code, __be32 info) | |||
583 | if (!pskb_may_pull(skb, inner_offset+8)) | 583 | if (!pskb_may_pull(skb, inner_offset+8)) |
584 | return; | 584 | return; |
585 | 585 | ||
586 | saddr = &skb->nh.ipv6h->saddr; | 586 | saddr = &ipv6_hdr(skb)->saddr; |
587 | daddr = &skb->nh.ipv6h->daddr; | 587 | daddr = &ipv6_hdr(skb)->daddr; |
588 | 588 | ||
589 | /* BUGGG_FUTURE: we should try to parse exthdrs in this packet. | 589 | /* BUGGG_FUTURE: we should try to parse exthdrs in this packet. |
590 | Without this we will not able f.e. to make source routed | 590 | Without this we will not able f.e. to make source routed |
@@ -628,8 +628,8 @@ static int icmpv6_rcv(struct sk_buff **pskb) | |||
628 | 628 | ||
629 | ICMP6_INC_STATS_BH(idev, ICMP6_MIB_INMSGS); | 629 | ICMP6_INC_STATS_BH(idev, ICMP6_MIB_INMSGS); |
630 | 630 | ||
631 | saddr = &skb->nh.ipv6h->saddr; | 631 | saddr = &ipv6_hdr(skb)->saddr; |
632 | daddr = &skb->nh.ipv6h->daddr; | 632 | daddr = &ipv6_hdr(skb)->daddr; |
633 | 633 | ||
634 | /* Perform checksum. */ | 634 | /* Perform checksum. */ |
635 | switch (skb->ip_summed) { | 635 | switch (skb->ip_summed) { |
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c index aecc74da0721..9c3c787a21c1 100644 --- a/net/ipv6/ip6_input.c +++ b/net/ipv6/ip6_input.c | |||
@@ -96,7 +96,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt | |||
96 | if (unlikely(!pskb_may_pull(skb, sizeof(*hdr)))) | 96 | if (unlikely(!pskb_may_pull(skb, sizeof(*hdr)))) |
97 | goto err; | 97 | goto err; |
98 | 98 | ||
99 | hdr = skb->nh.ipv6h; | 99 | hdr = ipv6_hdr(skb); |
100 | 100 | ||
101 | if (hdr->version != 6) | 101 | if (hdr->version != 6) |
102 | goto err; | 102 | goto err; |
@@ -116,7 +116,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt | |||
116 | IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); | 116 | IP6_INC_STATS_BH(idev, IPSTATS_MIB_INHDRERRORS); |
117 | goto drop; | 117 | goto drop; |
118 | } | 118 | } |
119 | hdr = skb->nh.ipv6h; | 119 | hdr = ipv6_hdr(skb); |
120 | } | 120 | } |
121 | 121 | ||
122 | if (hdr->nexthdr == NEXTHDR_HOP) { | 122 | if (hdr->nexthdr == NEXTHDR_HOP) { |
@@ -183,7 +183,7 @@ resubmit: | |||
183 | 183 | ||
184 | skb_postpull_rcsum(skb, skb_network_header(skb), | 184 | skb_postpull_rcsum(skb, skb_network_header(skb), |
185 | skb->h.raw - skb->nh.raw); | 185 | skb->h.raw - skb->nh.raw); |
186 | hdr = skb->nh.ipv6h; | 186 | hdr = ipv6_hdr(skb); |
187 | if (ipv6_addr_is_multicast(&hdr->daddr) && | 187 | if (ipv6_addr_is_multicast(&hdr->daddr) && |
188 | !ipv6_chk_mcast_addr(skb->dev, &hdr->daddr, | 188 | !ipv6_chk_mcast_addr(skb->dev, &hdr->daddr, |
189 | &hdr->saddr) && | 189 | &hdr->saddr) && |
@@ -234,7 +234,7 @@ int ip6_mc_input(struct sk_buff *skb) | |||
234 | 234 | ||
235 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_INMCASTPKTS); | 235 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_INMCASTPKTS); |
236 | 236 | ||
237 | hdr = skb->nh.ipv6h; | 237 | hdr = ipv6_hdr(skb); |
238 | deliver = likely(!(skb->dev->flags & (IFF_PROMISC|IFF_ALLMULTI))) || | 238 | deliver = likely(!(skb->dev->flags & (IFF_PROMISC|IFF_ALLMULTI))) || |
239 | ipv6_chk_mcast_addr(skb->dev, &hdr->daddr, NULL); | 239 | ipv6_chk_mcast_addr(skb->dev, &hdr->daddr, NULL); |
240 | 240 | ||
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index bd25825c0ccd..1900c6226866 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -107,13 +107,13 @@ static int ip6_output2(struct sk_buff *skb) | |||
107 | skb->protocol = htons(ETH_P_IPV6); | 107 | skb->protocol = htons(ETH_P_IPV6); |
108 | skb->dev = dev; | 108 | skb->dev = dev; |
109 | 109 | ||
110 | if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr)) { | 110 | if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) { |
111 | struct ipv6_pinfo* np = skb->sk ? inet6_sk(skb->sk) : NULL; | 111 | struct ipv6_pinfo* np = skb->sk ? inet6_sk(skb->sk) : NULL; |
112 | struct inet6_dev *idev = ip6_dst_idev(skb->dst); | 112 | struct inet6_dev *idev = ip6_dst_idev(skb->dst); |
113 | 113 | ||
114 | if (!(dev->flags & IFF_LOOPBACK) && (!np || np->mc_loop) && | 114 | if (!(dev->flags & IFF_LOOPBACK) && (!np || np->mc_loop) && |
115 | ipv6_chk_mcast_addr(dev, &skb->nh.ipv6h->daddr, | 115 | ipv6_chk_mcast_addr(dev, &ipv6_hdr(skb)->daddr, |
116 | &skb->nh.ipv6h->saddr)) { | 116 | &ipv6_hdr(skb)->saddr)) { |
117 | struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); | 117 | struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); |
118 | 118 | ||
119 | /* Do not check for IFF_ALLMULTI; multicast routing | 119 | /* Do not check for IFF_ALLMULTI; multicast routing |
@@ -124,7 +124,7 @@ static int ip6_output2(struct sk_buff *skb) | |||
124 | newskb->dev, | 124 | newskb->dev, |
125 | ip6_dev_loopback_xmit); | 125 | ip6_dev_loopback_xmit); |
126 | 126 | ||
127 | if (skb->nh.ipv6h->hop_limit == 0) { | 127 | if (ipv6_hdr(skb)->hop_limit == 0) { |
128 | IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); | 128 | IP6_INC_STATS(idev, IPSTATS_MIB_OUTDISCARDS); |
129 | kfree_skb(skb); | 129 | kfree_skb(skb); |
130 | return 0; | 130 | return 0; |
@@ -193,7 +193,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl, | |||
193 | 193 | ||
194 | skb_push(skb, sizeof(struct ipv6hdr)); | 194 | skb_push(skb, sizeof(struct ipv6hdr)); |
195 | skb_reset_network_header(skb); | 195 | skb_reset_network_header(skb); |
196 | hdr = skb->nh.ipv6h; | 196 | hdr = ipv6_hdr(skb); |
197 | 197 | ||
198 | /* | 198 | /* |
199 | * Fill in the IPv6 header | 199 | * Fill in the IPv6 header |
@@ -263,8 +263,8 @@ int ip6_nd_hdr(struct sock *sk, struct sk_buff *skb, struct net_device *dev, | |||
263 | 263 | ||
264 | totlen = len + sizeof(struct ipv6hdr); | 264 | totlen = len + sizeof(struct ipv6hdr); |
265 | 265 | ||
266 | hdr = (struct ipv6hdr *) skb_put(skb, sizeof(struct ipv6hdr)); | 266 | skb->nh.raw = skb_put(skb, sizeof(struct ipv6hdr)); |
267 | skb->nh.ipv6h = hdr; | 267 | hdr = ipv6_hdr(skb); |
268 | 268 | ||
269 | *(__be32*)hdr = htonl(0x60000000); | 269 | *(__be32*)hdr = htonl(0x60000000); |
270 | 270 | ||
@@ -309,7 +309,7 @@ static int ip6_call_ra_chain(struct sk_buff *skb, int sel) | |||
309 | 309 | ||
310 | static int ip6_forward_proxy_check(struct sk_buff *skb) | 310 | static int ip6_forward_proxy_check(struct sk_buff *skb) |
311 | { | 311 | { |
312 | struct ipv6hdr *hdr = skb->nh.ipv6h; | 312 | struct ipv6hdr *hdr = ipv6_hdr(skb); |
313 | u8 nexthdr = hdr->nexthdr; | 313 | u8 nexthdr = hdr->nexthdr; |
314 | int offset; | 314 | int offset; |
315 | 315 | ||
@@ -366,7 +366,7 @@ static inline int ip6_forward_finish(struct sk_buff *skb) | |||
366 | int ip6_forward(struct sk_buff *skb) | 366 | int ip6_forward(struct sk_buff *skb) |
367 | { | 367 | { |
368 | struct dst_entry *dst = skb->dst; | 368 | struct dst_entry *dst = skb->dst; |
369 | struct ipv6hdr *hdr = skb->nh.ipv6h; | 369 | struct ipv6hdr *hdr = ipv6_hdr(skb); |
370 | struct inet6_skb_parm *opt = IP6CB(skb); | 370 | struct inet6_skb_parm *opt = IP6CB(skb); |
371 | 371 | ||
372 | if (ipv6_devconf.forwarding == 0) | 372 | if (ipv6_devconf.forwarding == 0) |
@@ -475,7 +475,7 @@ int ip6_forward(struct sk_buff *skb) | |||
475 | goto drop; | 475 | goto drop; |
476 | } | 476 | } |
477 | 477 | ||
478 | hdr = skb->nh.ipv6h; | 478 | hdr = ipv6_hdr(skb); |
479 | 479 | ||
480 | /* Mangling hops number delayed to point after skb COW */ | 480 | /* Mangling hops number delayed to point after skb COW */ |
481 | 481 | ||
@@ -527,10 +527,11 @@ static void ip6_copy_metadata(struct sk_buff *to, struct sk_buff *from) | |||
527 | int ip6_find_1stfragopt(struct sk_buff *skb, u8 **nexthdr) | 527 | int ip6_find_1stfragopt(struct sk_buff *skb, u8 **nexthdr) |
528 | { | 528 | { |
529 | u16 offset = sizeof(struct ipv6hdr); | 529 | u16 offset = sizeof(struct ipv6hdr); |
530 | struct ipv6_opt_hdr *exthdr = (struct ipv6_opt_hdr*)(skb->nh.ipv6h + 1); | 530 | struct ipv6_opt_hdr *exthdr = |
531 | (struct ipv6_opt_hdr *)(ipv6_hdr(skb) + 1); | ||
531 | unsigned int packet_len = skb->tail - skb_network_header(skb); | 532 | unsigned int packet_len = skb->tail - skb_network_header(skb); |
532 | int found_rhdr = 0; | 533 | int found_rhdr = 0; |
533 | *nexthdr = &skb->nh.ipv6h->nexthdr; | 534 | *nexthdr = &ipv6_hdr(skb)->nexthdr; |
534 | 535 | ||
535 | while (offset + 1 <= packet_len) { | 536 | while (offset + 1 <= packet_len) { |
536 | 537 | ||
@@ -643,7 +644,8 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
643 | first_len = skb_pagelen(skb); | 644 | first_len = skb_pagelen(skb); |
644 | skb->data_len = first_len - skb_headlen(skb); | 645 | skb->data_len = first_len - skb_headlen(skb); |
645 | skb->len = first_len; | 646 | skb->len = first_len; |
646 | skb->nh.ipv6h->payload_len = htons(first_len - sizeof(struct ipv6hdr)); | 647 | ipv6_hdr(skb)->payload_len = htons(first_len - |
648 | sizeof(struct ipv6hdr)); | ||
647 | 649 | ||
648 | dst_hold(&rt->u.dst); | 650 | dst_hold(&rt->u.dst); |
649 | 651 | ||
@@ -665,7 +667,9 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
665 | if (frag->next != NULL) | 667 | if (frag->next != NULL) |
666 | fh->frag_off |= htons(IP6_MF); | 668 | fh->frag_off |= htons(IP6_MF); |
667 | fh->identification = frag_id; | 669 | fh->identification = frag_id; |
668 | frag->nh.ipv6h->payload_len = htons(frag->len - sizeof(struct ipv6hdr)); | 670 | ipv6_hdr(frag)->payload_len = |
671 | htons(frag->len - | ||
672 | sizeof(struct ipv6hdr)); | ||
669 | ip6_copy_metadata(frag, skb); | 673 | ip6_copy_metadata(frag, skb); |
670 | } | 674 | } |
671 | 675 | ||
@@ -779,7 +783,8 @@ slow_path: | |||
779 | fh->frag_off = htons(offset); | 783 | fh->frag_off = htons(offset); |
780 | if (left > 0) | 784 | if (left > 0) |
781 | fh->frag_off |= htons(IP6_MF); | 785 | fh->frag_off |= htons(IP6_MF); |
782 | frag->nh.ipv6h->payload_len = htons(frag->len - sizeof(struct ipv6hdr)); | 786 | ipv6_hdr(frag)->payload_len = htons(frag->len - |
787 | sizeof(struct ipv6hdr)); | ||
783 | 788 | ||
784 | ptr += len; | 789 | ptr += len; |
785 | offset += len; | 790 | offset += len; |
@@ -1355,7 +1360,7 @@ int ip6_push_pending_frames(struct sock *sk) | |||
1355 | 1360 | ||
1356 | skb_push(skb, sizeof(struct ipv6hdr)); | 1361 | skb_push(skb, sizeof(struct ipv6hdr)); |
1357 | skb_reset_network_header(skb); | 1362 | skb_reset_network_header(skb); |
1358 | hdr = skb->nh.ipv6h; | 1363 | hdr = ipv6_hdr(skb); |
1359 | 1364 | ||
1360 | *(__be32*)hdr = fl->fl6_flowlabel | | 1365 | *(__be32*)hdr = fl->fl6_flowlabel | |
1361 | htonl(0x60000000 | ((int)np->cork.tclass << 20)); | 1366 | htonl(0x60000000 | ((int)np->cork.tclass << 20)); |
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index bb65779be7a6..05b59a77bc69 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c | |||
@@ -602,7 +602,7 @@ ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
602 | skb_reset_network_header(skb2); | 602 | skb_reset_network_header(skb2); |
603 | 603 | ||
604 | /* Try to guess incoming interface */ | 604 | /* Try to guess incoming interface */ |
605 | rt = rt6_lookup(&skb2->nh.ipv6h->saddr, NULL, 0, 0); | 605 | rt = rt6_lookup(&ipv6_hdr(skb2)->saddr, NULL, 0, 0); |
606 | 606 | ||
607 | if (rt && rt->rt6i_dev) | 607 | if (rt && rt->rt6i_dev) |
608 | skb2->dev = rt->rt6i_dev; | 608 | skb2->dev = rt->rt6i_dev; |
@@ -636,10 +636,10 @@ static void ip6ip6_dscp_ecn_decapsulate(struct ip6_tnl *t, | |||
636 | struct sk_buff *skb) | 636 | struct sk_buff *skb) |
637 | { | 637 | { |
638 | if (t->parms.flags & IP6_TNL_F_RCV_DSCP_COPY) | 638 | if (t->parms.flags & IP6_TNL_F_RCV_DSCP_COPY) |
639 | ipv6_copy_dscp(ipv6h, skb->nh.ipv6h); | 639 | ipv6_copy_dscp(ipv6h, ipv6_hdr(skb)); |
640 | 640 | ||
641 | if (INET_ECN_is_ce(ipv6_get_dsfield(ipv6h))) | 641 | if (INET_ECN_is_ce(ipv6_get_dsfield(ipv6h))) |
642 | IP6_ECN_set_ce(skb->nh.ipv6h); | 642 | IP6_ECN_set_ce(ipv6_hdr(skb)); |
643 | } | 643 | } |
644 | 644 | ||
645 | static inline int ip6_tnl_rcv_ctl(struct ip6_tnl *t) | 645 | static inline int ip6_tnl_rcv_ctl(struct ip6_tnl *t) |
@@ -679,10 +679,8 @@ static int ip6_tnl_rcv(struct sk_buff *skb, __u16 protocol, | |||
679 | struct ipv6hdr *ipv6h, | 679 | struct ipv6hdr *ipv6h, |
680 | struct sk_buff *skb)) | 680 | struct sk_buff *skb)) |
681 | { | 681 | { |
682 | struct ipv6hdr *ipv6h; | ||
683 | struct ip6_tnl *t; | 682 | struct ip6_tnl *t; |
684 | 683 | struct ipv6hdr *ipv6h = ipv6_hdr(skb); | |
685 | ipv6h = skb->nh.ipv6h; | ||
686 | 684 | ||
687 | read_lock(&ip6_tnl_lock); | 685 | read_lock(&ip6_tnl_lock); |
688 | 686 | ||
@@ -836,7 +834,7 @@ static int ip6_tnl_xmit2(struct sk_buff *skb, | |||
836 | { | 834 | { |
837 | struct ip6_tnl *t = netdev_priv(dev); | 835 | struct ip6_tnl *t = netdev_priv(dev); |
838 | struct net_device_stats *stats = &t->stat; | 836 | struct net_device_stats *stats = &t->stat; |
839 | struct ipv6hdr *ipv6h = skb->nh.ipv6h; | 837 | struct ipv6hdr *ipv6h = ipv6_hdr(skb); |
840 | struct ipv6_tel_txoption opt; | 838 | struct ipv6_tel_txoption opt; |
841 | struct dst_entry *dst; | 839 | struct dst_entry *dst; |
842 | struct net_device *tdev; | 840 | struct net_device *tdev; |
@@ -909,7 +907,7 @@ static int ip6_tnl_xmit2(struct sk_buff *skb, | |||
909 | } | 907 | } |
910 | skb_push(skb, sizeof(struct ipv6hdr)); | 908 | skb_push(skb, sizeof(struct ipv6hdr)); |
911 | skb_reset_network_header(skb); | 909 | skb_reset_network_header(skb); |
912 | ipv6h = skb->nh.ipv6h; | 910 | ipv6h = ipv6_hdr(skb); |
913 | *(__be32*)ipv6h = fl->fl6_flowlabel | htonl(0x60000000); | 911 | *(__be32*)ipv6h = fl->fl6_flowlabel | htonl(0x60000000); |
914 | dsfield = INET_ECN_encapsulate(0, dsfield); | 912 | dsfield = INET_ECN_encapsulate(0, dsfield); |
915 | ipv6_change_dsfield(ipv6h, ~INET_ECN_MASK, dsfield); | 913 | ipv6_change_dsfield(ipv6h, ~INET_ECN_MASK, dsfield); |
@@ -983,7 +981,7 @@ static inline int | |||
983 | ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev) | 981 | ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev) |
984 | { | 982 | { |
985 | struct ip6_tnl *t = netdev_priv(dev); | 983 | struct ip6_tnl *t = netdev_priv(dev); |
986 | struct ipv6hdr *ipv6h = skb->nh.ipv6h; | 984 | struct ipv6hdr *ipv6h = ipv6_hdr(skb); |
987 | int encap_limit = -1; | 985 | int encap_limit = -1; |
988 | __u16 offset; | 986 | __u16 offset; |
989 | struct flowi fl; | 987 | struct flowi fl; |
diff --git a/net/ipv6/ipcomp6.c b/net/ipv6/ipcomp6.c index 3e71d1691b7d..e2404a629680 100644 --- a/net/ipv6/ipcomp6.c +++ b/net/ipv6/ipcomp6.c | |||
@@ -79,7 +79,7 @@ static int ipcomp6_input(struct xfrm_state *x, struct sk_buff *skb) | |||
79 | skb->ip_summed = CHECKSUM_NONE; | 79 | skb->ip_summed = CHECKSUM_NONE; |
80 | 80 | ||
81 | /* Remove ipcomp header and decompress original payload */ | 81 | /* Remove ipcomp header and decompress original payload */ |
82 | iph = skb->nh.ipv6h; | 82 | iph = ipv6_hdr(skb); |
83 | ipch = (void *)skb->data; | 83 | ipch = (void *)skb->data; |
84 | skb->h.raw = skb->nh.raw + sizeof(*ipch); | 84 | skb->h.raw = skb->nh.raw + sizeof(*ipch); |
85 | __skb_pull(skb, sizeof(*ipch)); | 85 | __skb_pull(skb, sizeof(*ipch)); |
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 1d56b465bddb..d16e0fd2cd89 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
@@ -101,7 +101,7 @@ static int ipv6_gso_send_check(struct sk_buff *skb) | |||
101 | if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) | 101 | if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) |
102 | goto out; | 102 | goto out; |
103 | 103 | ||
104 | ipv6h = skb->nh.ipv6h; | 104 | ipv6h = ipv6_hdr(skb); |
105 | __skb_pull(skb, sizeof(*ipv6h)); | 105 | __skb_pull(skb, sizeof(*ipv6h)); |
106 | err = -EPROTONOSUPPORT; | 106 | err = -EPROTONOSUPPORT; |
107 | 107 | ||
@@ -137,7 +137,7 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, int features) | |||
137 | if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) | 137 | if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) |
138 | goto out; | 138 | goto out; |
139 | 139 | ||
140 | ipv6h = skb->nh.ipv6h; | 140 | ipv6h = ipv6_hdr(skb); |
141 | __skb_pull(skb, sizeof(*ipv6h)); | 141 | __skb_pull(skb, sizeof(*ipv6h)); |
142 | segs = ERR_PTR(-EPROTONOSUPPORT); | 142 | segs = ERR_PTR(-EPROTONOSUPPORT); |
143 | 143 | ||
@@ -153,7 +153,7 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, int features) | |||
153 | goto out; | 153 | goto out; |
154 | 154 | ||
155 | for (skb = segs; skb; skb = skb->next) { | 155 | for (skb = segs; skb; skb = skb->next) { |
156 | ipv6h = skb->nh.ipv6h; | 156 | ipv6h = ipv6_hdr(skb); |
157 | ipv6h->payload_len = htons(skb->len - skb->mac_len - | 157 | ipv6h->payload_len = htons(skb->len - skb->mac_len - |
158 | sizeof(*ipv6h)); | 158 | sizeof(*ipv6h)); |
159 | } | 159 | } |
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 924e24907c3e..b2b37ba48b9c 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
@@ -1167,11 +1167,11 @@ int igmp6_event_query(struct sk_buff *skb) | |||
1167 | return -EINVAL; | 1167 | return -EINVAL; |
1168 | 1168 | ||
1169 | /* compute payload length excluding extension headers */ | 1169 | /* compute payload length excluding extension headers */ |
1170 | len = ntohs(skb->nh.ipv6h->payload_len) + sizeof(struct ipv6hdr); | 1170 | len = ntohs(ipv6_hdr(skb)->payload_len) + sizeof(struct ipv6hdr); |
1171 | len -= (char *)skb->h.raw - (char *)skb->nh.ipv6h; | 1171 | len -= skb->h.raw - skb->nh.raw; |
1172 | 1172 | ||
1173 | /* Drop queries with not link local source */ | 1173 | /* Drop queries with not link local source */ |
1174 | if (!(ipv6_addr_type(&skb->nh.ipv6h->saddr)&IPV6_ADDR_LINKLOCAL)) | 1174 | if (!(ipv6_addr_type(&ipv6_hdr(skb)->saddr) & IPV6_ADDR_LINKLOCAL)) |
1175 | return -EINVAL; | 1175 | return -EINVAL; |
1176 | 1176 | ||
1177 | idev = in6_dev_get(skb->dev); | 1177 | idev = in6_dev_get(skb->dev); |
@@ -1303,7 +1303,7 @@ int igmp6_event_report(struct sk_buff *skb) | |||
1303 | hdr = (struct icmp6hdr*) skb->h.raw; | 1303 | hdr = (struct icmp6hdr*) skb->h.raw; |
1304 | 1304 | ||
1305 | /* Drop reports with not link local source */ | 1305 | /* Drop reports with not link local source */ |
1306 | addr_type = ipv6_addr_type(&skb->nh.ipv6h->saddr); | 1306 | addr_type = ipv6_addr_type(&ipv6_hdr(skb)->saddr); |
1307 | if (addr_type != IPV6_ADDR_ANY && | 1307 | if (addr_type != IPV6_ADDR_ANY && |
1308 | !(addr_type&IPV6_ADDR_LINKLOCAL)) | 1308 | !(addr_type&IPV6_ADDR_LINKLOCAL)) |
1309 | return -EINVAL; | 1309 | return -EINVAL; |
@@ -1441,7 +1441,7 @@ static inline int mld_dev_queue_xmit2(struct sk_buff *skb) | |||
1441 | unsigned char ha[MAX_ADDR_LEN]; | 1441 | unsigned char ha[MAX_ADDR_LEN]; |
1442 | int err; | 1442 | int err; |
1443 | 1443 | ||
1444 | ndisc_mc_map(&skb->nh.ipv6h->daddr, ha, dev, 1); | 1444 | ndisc_mc_map(&ipv6_hdr(skb)->daddr, ha, dev, 1); |
1445 | err = dev->hard_header(skb, dev, ETH_P_IPV6, ha, NULL, skb->len); | 1445 | err = dev->hard_header(skb, dev, ETH_P_IPV6, ha, NULL, skb->len); |
1446 | if (err < 0) { | 1446 | if (err < 0) { |
1447 | kfree_skb(skb); | 1447 | kfree_skb(skb); |
@@ -1459,15 +1459,14 @@ static inline int mld_dev_queue_xmit(struct sk_buff *skb) | |||
1459 | 1459 | ||
1460 | static void mld_sendpack(struct sk_buff *skb) | 1460 | static void mld_sendpack(struct sk_buff *skb) |
1461 | { | 1461 | { |
1462 | struct ipv6hdr *pip6 = skb->nh.ipv6h; | 1462 | struct ipv6hdr *pip6 = ipv6_hdr(skb); |
1463 | struct mld2_report *pmr = (struct mld2_report *)skb->h.raw; | 1463 | struct mld2_report *pmr = (struct mld2_report *)skb->h.raw; |
1464 | int payload_len, mldlen; | 1464 | int payload_len, mldlen; |
1465 | struct inet6_dev *idev = in6_dev_get(skb->dev); | 1465 | struct inet6_dev *idev = in6_dev_get(skb->dev); |
1466 | int err; | 1466 | int err; |
1467 | 1467 | ||
1468 | IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); | 1468 | IP6_INC_STATS(idev, IPSTATS_MIB_OUTREQUESTS); |
1469 | payload_len = skb->tail - (unsigned char *)skb->nh.ipv6h - | 1469 | payload_len = skb->tail - skb_network_header(skb) - sizeof(*pip6); |
1470 | sizeof(struct ipv6hdr); | ||
1471 | mldlen = skb->tail - skb->h.raw; | 1470 | mldlen = skb->tail - skb->h.raw; |
1472 | pip6->payload_len = htons(payload_len); | 1471 | pip6->payload_len = htons(payload_len); |
1473 | 1472 | ||
diff --git a/net/ipv6/mip6.c b/net/ipv6/mip6.c index bb4033553f3b..7b5f9d82e801 100644 --- a/net/ipv6/mip6.c +++ b/net/ipv6/mip6.c | |||
@@ -129,7 +129,7 @@ static struct mip6_report_rate_limiter mip6_report_rl = { | |||
129 | 129 | ||
130 | static int mip6_destopt_input(struct xfrm_state *x, struct sk_buff *skb) | 130 | static int mip6_destopt_input(struct xfrm_state *x, struct sk_buff *skb) |
131 | { | 131 | { |
132 | struct ipv6hdr *iph = skb->nh.ipv6h; | 132 | struct ipv6hdr *iph = ipv6_hdr(skb); |
133 | struct ipv6_destopt_hdr *destopt = (struct ipv6_destopt_hdr *)skb->data; | 133 | struct ipv6_destopt_hdr *destopt = (struct ipv6_destopt_hdr *)skb->data; |
134 | 134 | ||
135 | if (!ipv6_addr_equal(&iph->saddr, (struct in6_addr *)x->coaddr) && | 135 | if (!ipv6_addr_equal(&iph->saddr, (struct in6_addr *)x->coaddr) && |
@@ -223,16 +223,16 @@ static int mip6_destopt_reject(struct xfrm_state *x, struct sk_buff *skb, struct | |||
223 | 223 | ||
224 | skb_get_timestamp(skb, &stamp); | 224 | skb_get_timestamp(skb, &stamp); |
225 | 225 | ||
226 | if (!mip6_report_rl_allow(&stamp, &skb->nh.ipv6h->daddr, | 226 | if (!mip6_report_rl_allow(&stamp, &ipv6_hdr(skb)->daddr, |
227 | hao ? &hao->addr : &skb->nh.ipv6h->saddr, | 227 | hao ? &hao->addr : &ipv6_hdr(skb)->saddr, |
228 | opt->iif)) | 228 | opt->iif)) |
229 | goto out; | 229 | goto out; |
230 | 230 | ||
231 | memset(&sel, 0, sizeof(sel)); | 231 | memset(&sel, 0, sizeof(sel)); |
232 | memcpy(&sel.daddr, (xfrm_address_t *)&skb->nh.ipv6h->daddr, | 232 | memcpy(&sel.daddr, (xfrm_address_t *)&ipv6_hdr(skb)->daddr, |
233 | sizeof(sel.daddr)); | 233 | sizeof(sel.daddr)); |
234 | sel.prefixlen_d = 128; | 234 | sel.prefixlen_d = 128; |
235 | memcpy(&sel.saddr, (xfrm_address_t *)&skb->nh.ipv6h->saddr, | 235 | memcpy(&sel.saddr, (xfrm_address_t *)&ipv6_hdr(skb)->saddr, |
236 | sizeof(sel.saddr)); | 236 | sizeof(sel.saddr)); |
237 | sel.prefixlen_s = 128; | 237 | sel.prefixlen_s = 128; |
238 | sel.family = AF_INET6; | 238 | sel.family = AF_INET6; |
@@ -256,12 +256,13 @@ static int mip6_destopt_offset(struct xfrm_state *x, struct sk_buff *skb, | |||
256 | u8 **nexthdr) | 256 | u8 **nexthdr) |
257 | { | 257 | { |
258 | u16 offset = sizeof(struct ipv6hdr); | 258 | u16 offset = sizeof(struct ipv6hdr); |
259 | struct ipv6_opt_hdr *exthdr = (struct ipv6_opt_hdr*)(skb->nh.ipv6h + 1); | 259 | struct ipv6_opt_hdr *exthdr = |
260 | (struct ipv6_opt_hdr *)(ipv6_hdr(skb) + 1); | ||
260 | const unsigned char *nh = skb_network_header(skb); | 261 | const unsigned char *nh = skb_network_header(skb); |
261 | unsigned int packet_len = skb->tail - nh; | 262 | unsigned int packet_len = skb->tail - nh; |
262 | int found_rhdr = 0; | 263 | int found_rhdr = 0; |
263 | 264 | ||
264 | *nexthdr = &skb->nh.ipv6h->nexthdr; | 265 | *nexthdr = &ipv6_hdr(skb)->nexthdr; |
265 | 266 | ||
266 | while (offset + 1 <= packet_len) { | 267 | while (offset + 1 <= packet_len) { |
267 | 268 | ||
@@ -387,12 +388,13 @@ static int mip6_rthdr_offset(struct xfrm_state *x, struct sk_buff *skb, | |||
387 | u8 **nexthdr) | 388 | u8 **nexthdr) |
388 | { | 389 | { |
389 | u16 offset = sizeof(struct ipv6hdr); | 390 | u16 offset = sizeof(struct ipv6hdr); |
390 | struct ipv6_opt_hdr *exthdr = (struct ipv6_opt_hdr*)(skb->nh.ipv6h + 1); | 391 | struct ipv6_opt_hdr *exthdr = |
392 | (struct ipv6_opt_hdr *)(ipv6_hdr(skb) + 1); | ||
391 | const unsigned char *nh = skb_network_header(skb); | 393 | const unsigned char *nh = skb_network_header(skb); |
392 | unsigned int packet_len = skb->tail - nh; | 394 | unsigned int packet_len = skb->tail - nh; |
393 | int found_rhdr = 0; | 395 | int found_rhdr = 0; |
394 | 396 | ||
395 | *nexthdr = &skb->nh.ipv6h->nexthdr; | 397 | *nexthdr = &ipv6_hdr(skb)->nexthdr; |
396 | 398 | ||
397 | while (offset + 1 <= packet_len) { | 399 | while (offset + 1 <= packet_len) { |
398 | 400 | ||
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 | ||
diff --git a/net/ipv6/netfilter.c b/net/ipv6/netfilter.c index 1c405dd30c67..38b149613915 100644 --- a/net/ipv6/netfilter.c +++ b/net/ipv6/netfilter.c | |||
@@ -11,7 +11,7 @@ | |||
11 | 11 | ||
12 | int ip6_route_me_harder(struct sk_buff *skb) | 12 | int ip6_route_me_harder(struct sk_buff *skb) |
13 | { | 13 | { |
14 | struct ipv6hdr *iph = skb->nh.ipv6h; | 14 | struct ipv6hdr *iph = ipv6_hdr(skb); |
15 | struct dst_entry *dst; | 15 | struct dst_entry *dst; |
16 | struct flowi fl = { | 16 | struct flowi fl = { |
17 | .oif = skb->sk ? skb->sk->sk_bound_dev_if : 0, | 17 | .oif = skb->sk ? skb->sk->sk_bound_dev_if : 0, |
@@ -61,7 +61,7 @@ static void nf_ip6_saveroute(const struct sk_buff *skb, struct nf_info *info) | |||
61 | struct ip6_rt_info *rt_info = nf_info_reroute(info); | 61 | struct ip6_rt_info *rt_info = nf_info_reroute(info); |
62 | 62 | ||
63 | if (info->hook == NF_IP6_LOCAL_OUT) { | 63 | if (info->hook == NF_IP6_LOCAL_OUT) { |
64 | struct ipv6hdr *iph = skb->nh.ipv6h; | 64 | struct ipv6hdr *iph = ipv6_hdr(skb); |
65 | 65 | ||
66 | rt_info->daddr = iph->daddr; | 66 | rt_info->daddr = iph->daddr; |
67 | rt_info->saddr = iph->saddr; | 67 | rt_info->saddr = iph->saddr; |
@@ -73,7 +73,7 @@ static int nf_ip6_reroute(struct sk_buff **pskb, const struct nf_info *info) | |||
73 | struct ip6_rt_info *rt_info = nf_info_reroute(info); | 73 | struct ip6_rt_info *rt_info = nf_info_reroute(info); |
74 | 74 | ||
75 | if (info->hook == NF_IP6_LOCAL_OUT) { | 75 | if (info->hook == NF_IP6_LOCAL_OUT) { |
76 | struct ipv6hdr *iph = (*pskb)->nh.ipv6h; | 76 | struct ipv6hdr *iph = ipv6_hdr(*pskb); |
77 | if (!ipv6_addr_equal(&iph->daddr, &rt_info->daddr) || | 77 | if (!ipv6_addr_equal(&iph->daddr, &rt_info->daddr) || |
78 | !ipv6_addr_equal(&iph->saddr, &rt_info->saddr)) | 78 | !ipv6_addr_equal(&iph->saddr, &rt_info->saddr)) |
79 | return ip6_route_me_harder(*pskb); | 79 | return ip6_route_me_harder(*pskb); |
@@ -84,7 +84,7 @@ static int nf_ip6_reroute(struct sk_buff **pskb, const struct nf_info *info) | |||
84 | __sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook, | 84 | __sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook, |
85 | unsigned int dataoff, u_int8_t protocol) | 85 | unsigned int dataoff, u_int8_t protocol) |
86 | { | 86 | { |
87 | struct ipv6hdr *ip6h = skb->nh.ipv6h; | 87 | struct ipv6hdr *ip6h = ipv6_hdr(skb); |
88 | __sum16 csum = 0; | 88 | __sum16 csum = 0; |
89 | 89 | ||
90 | switch (skb->ip_summed) { | 90 | switch (skb->ip_summed) { |
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c index 7c512e13f956..caf9e375a0f1 100644 --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c | |||
@@ -115,7 +115,7 @@ ip6_packet_match(const struct sk_buff *skb, | |||
115 | { | 115 | { |
116 | size_t i; | 116 | size_t i; |
117 | unsigned long ret; | 117 | unsigned long ret; |
118 | const struct ipv6hdr *ipv6 = skb->nh.ipv6h; | 118 | const struct ipv6hdr *ipv6 = ipv6_hdr(skb); |
119 | 119 | ||
120 | #define FWINV(bool,invflg) ((bool) ^ !!(ip6info->invflags & invflg)) | 120 | #define FWINV(bool,invflg) ((bool) ^ !!(ip6info->invflags & invflg)) |
121 | 121 | ||
@@ -301,7 +301,7 @@ ip6t_do_table(struct sk_buff **pskb, | |||
301 | goto no_match; | 301 | goto no_match; |
302 | 302 | ||
303 | ADD_COUNTER(e->counters, | 303 | ADD_COUNTER(e->counters, |
304 | ntohs((*pskb)->nh.ipv6h->payload_len) | 304 | ntohs(ipv6_hdr(*pskb)->payload_len) |
305 | + IPV6_HDR_LEN, | 305 | + IPV6_HDR_LEN, |
306 | 1); | 306 | 1); |
307 | 307 | ||
@@ -1448,8 +1448,8 @@ static void __exit ip6_tables_fini(void) | |||
1448 | int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, | 1448 | int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, |
1449 | int target, unsigned short *fragoff) | 1449 | int target, unsigned short *fragoff) |
1450 | { | 1450 | { |
1451 | unsigned int start = (u8*)(skb->nh.ipv6h + 1) - skb->data; | 1451 | unsigned int start = (u8 *)(ipv6_hdr(skb) + 1) - skb->data; |
1452 | u8 nexthdr = skb->nh.ipv6h->nexthdr; | 1452 | u8 nexthdr = ipv6_hdr(skb)->nexthdr; |
1453 | unsigned int len = skb->len - start; | 1453 | unsigned int len = skb->len - start; |
1454 | 1454 | ||
1455 | if (fragoff) | 1455 | if (fragoff) |
diff --git a/net/ipv6/netfilter/ip6t_HL.c b/net/ipv6/netfilter/ip6t_HL.c index ccbab66277e3..4115a576ba25 100644 --- a/net/ipv6/netfilter/ip6t_HL.c +++ b/net/ipv6/netfilter/ip6t_HL.c | |||
@@ -32,7 +32,7 @@ static unsigned int ip6t_hl_target(struct sk_buff **pskb, | |||
32 | if (!skb_make_writable(pskb, (*pskb)->len)) | 32 | if (!skb_make_writable(pskb, (*pskb)->len)) |
33 | return NF_DROP; | 33 | return NF_DROP; |
34 | 34 | ||
35 | ip6h = (*pskb)->nh.ipv6h; | 35 | ip6h = ipv6_hdr(*pskb); |
36 | 36 | ||
37 | switch (info->mode) { | 37 | switch (info->mode) { |
38 | case IP6T_HL_SET: | 38 | case IP6T_HL_SET: |
diff --git a/net/ipv6/netfilter/ip6t_LOG.c b/net/ipv6/netfilter/ip6t_LOG.c index fc9e51a77784..54d176187f3f 100644 --- a/net/ipv6/netfilter/ip6t_LOG.c +++ b/net/ipv6/netfilter/ip6t_LOG.c | |||
@@ -422,7 +422,7 @@ ip6t_log_packet(unsigned int pf, | |||
422 | printk(" "); | 422 | printk(" "); |
423 | } | 423 | } |
424 | 424 | ||
425 | dump_packet(loginfo, skb, (u8*)skb->nh.ipv6h - skb->data, 1); | 425 | dump_packet(loginfo, skb, skb_network_offset(skb), 1); |
426 | printk("\n"); | 426 | printk("\n"); |
427 | spin_unlock_bh(&log_lock); | 427 | spin_unlock_bh(&log_lock); |
428 | } | 428 | } |
diff --git a/net/ipv6/netfilter/ip6t_REJECT.c b/net/ipv6/netfilter/ip6t_REJECT.c index 4441bed430f8..cb3d2415a064 100644 --- a/net/ipv6/netfilter/ip6t_REJECT.c +++ b/net/ipv6/netfilter/ip6t_REJECT.c | |||
@@ -47,7 +47,7 @@ static void send_reset(struct sk_buff *oldskb) | |||
47 | struct tcphdr otcph, *tcph; | 47 | struct tcphdr otcph, *tcph; |
48 | unsigned int otcplen, hh_len; | 48 | unsigned int otcplen, hh_len; |
49 | int tcphoff, needs_ack; | 49 | int tcphoff, needs_ack; |
50 | struct ipv6hdr *oip6h = oldskb->nh.ipv6h, *ip6h; | 50 | struct ipv6hdr *oip6h = ipv6_hdr(oldskb), *ip6h; |
51 | struct dst_entry *dst = NULL; | 51 | struct dst_entry *dst = NULL; |
52 | u8 proto; | 52 | u8 proto; |
53 | struct flowi fl; | 53 | struct flowi fl; |
@@ -122,7 +122,7 @@ static void send_reset(struct sk_buff *oldskb) | |||
122 | 122 | ||
123 | skb_put(nskb, sizeof(struct ipv6hdr)); | 123 | skb_put(nskb, sizeof(struct ipv6hdr)); |
124 | skb_reset_network_header(nskb); | 124 | skb_reset_network_header(nskb); |
125 | ip6h = nskb->nh.ipv6h; | 125 | ip6h = ipv6_hdr(nskb); |
126 | ip6h->version = 6; | 126 | ip6h->version = 6; |
127 | ip6h->hop_limit = dst_metric(dst, RTAX_HOPLIMIT); | 127 | ip6h->hop_limit = dst_metric(dst, RTAX_HOPLIMIT); |
128 | ip6h->nexthdr = IPPROTO_TCP; | 128 | ip6h->nexthdr = IPPROTO_TCP; |
@@ -156,8 +156,8 @@ static void send_reset(struct sk_buff *oldskb) | |||
156 | tcph->check = 0; | 156 | tcph->check = 0; |
157 | 157 | ||
158 | /* Adjust TCP checksum */ | 158 | /* Adjust TCP checksum */ |
159 | tcph->check = csum_ipv6_magic(&nskb->nh.ipv6h->saddr, | 159 | tcph->check = csum_ipv6_magic(&ipv6_hdr(nskb)->saddr, |
160 | &nskb->nh.ipv6h->daddr, | 160 | &ipv6_hdr(nskb)->daddr, |
161 | sizeof(struct tcphdr), IPPROTO_TCP, | 161 | sizeof(struct tcphdr), IPPROTO_TCP, |
162 | csum_partial((char *)tcph, | 162 | csum_partial((char *)tcph, |
163 | sizeof(struct tcphdr), 0)); | 163 | sizeof(struct tcphdr), 0)); |
diff --git a/net/ipv6/netfilter/ip6t_eui64.c b/net/ipv6/netfilter/ip6t_eui64.c index c2676066a80f..0f3dd932f0a6 100644 --- a/net/ipv6/netfilter/ip6t_eui64.c +++ b/net/ipv6/netfilter/ip6t_eui64.c | |||
@@ -42,7 +42,7 @@ match(const struct sk_buff *skb, | |||
42 | memset(eui64, 0, sizeof(eui64)); | 42 | memset(eui64, 0, sizeof(eui64)); |
43 | 43 | ||
44 | if (eth_hdr(skb)->h_proto == htons(ETH_P_IPV6)) { | 44 | if (eth_hdr(skb)->h_proto == htons(ETH_P_IPV6)) { |
45 | if (skb->nh.ipv6h->version == 0x6) { | 45 | if (ipv6_hdr(skb)->version == 0x6) { |
46 | memcpy(eui64, eth_hdr(skb)->h_source, 3); | 46 | memcpy(eui64, eth_hdr(skb)->h_source, 3); |
47 | memcpy(eui64 + 5, eth_hdr(skb)->h_source + 3, 3); | 47 | memcpy(eui64 + 5, eth_hdr(skb)->h_source + 3, 3); |
48 | eui64[3] = 0xff; | 48 | eui64[3] = 0xff; |
@@ -50,7 +50,7 @@ match(const struct sk_buff *skb, | |||
50 | eui64[0] |= 0x02; | 50 | eui64[0] |= 0x02; |
51 | 51 | ||
52 | i = 0; | 52 | i = 0; |
53 | while ((skb->nh.ipv6h->saddr.s6_addr[8+i] == eui64[i]) | 53 | while ((ipv6_hdr(skb)->saddr.s6_addr[8 + i] == eui64[i]) |
54 | && (i < 8)) | 54 | && (i < 8)) |
55 | i++; | 55 | i++; |
56 | 56 | ||
diff --git a/net/ipv6/netfilter/ip6t_hl.c b/net/ipv6/netfilter/ip6t_hl.c index 37c8a4d4ed78..d606c0e6d6fd 100644 --- a/net/ipv6/netfilter/ip6t_hl.c +++ b/net/ipv6/netfilter/ip6t_hl.c | |||
@@ -25,7 +25,7 @@ static int match(const struct sk_buff *skb, | |||
25 | int offset, unsigned int protoff, int *hotdrop) | 25 | int offset, unsigned int protoff, int *hotdrop) |
26 | { | 26 | { |
27 | const struct ip6t_hl_info *info = matchinfo; | 27 | const struct ip6t_hl_info *info = matchinfo; |
28 | const struct ipv6hdr *ip6h = skb->nh.ipv6h; | 28 | const struct ipv6hdr *ip6h = ipv6_hdr(skb); |
29 | 29 | ||
30 | switch (info->mode) { | 30 | switch (info->mode) { |
31 | case IP6T_HL_EQ: | 31 | case IP6T_HL_EQ: |
diff --git a/net/ipv6/netfilter/ip6t_ipv6header.c b/net/ipv6/netfilter/ip6t_ipv6header.c index 700a11d25deb..fd6a0869099b 100644 --- a/net/ipv6/netfilter/ip6t_ipv6header.c +++ b/net/ipv6/netfilter/ip6t_ipv6header.c | |||
@@ -45,7 +45,7 @@ ipv6header_match(const struct sk_buff *skb, | |||
45 | /* Make sure this isn't an evil packet */ | 45 | /* Make sure this isn't an evil packet */ |
46 | 46 | ||
47 | /* type of the 1st exthdr */ | 47 | /* type of the 1st exthdr */ |
48 | nexthdr = skb->nh.ipv6h->nexthdr; | 48 | nexthdr = ipv6_hdr(skb)->nexthdr; |
49 | /* pointer to the 1st exthdr */ | 49 | /* pointer to the 1st exthdr */ |
50 | ptr = sizeof(struct ipv6hdr); | 50 | ptr = sizeof(struct ipv6hdr); |
51 | /* available length */ | 51 | /* available length */ |
diff --git a/net/ipv6/netfilter/ip6table_mangle.c b/net/ipv6/netfilter/ip6table_mangle.c index da2c1994539b..85b1c272946c 100644 --- a/net/ipv6/netfilter/ip6table_mangle.c +++ b/net/ipv6/netfilter/ip6table_mangle.c | |||
@@ -146,21 +146,21 @@ ip6t_local_hook(unsigned int hook, | |||
146 | #endif | 146 | #endif |
147 | 147 | ||
148 | /* save source/dest address, mark, hoplimit, flowlabel, priority, */ | 148 | /* save source/dest address, mark, hoplimit, flowlabel, priority, */ |
149 | memcpy(&saddr, &(*pskb)->nh.ipv6h->saddr, sizeof(saddr)); | 149 | memcpy(&saddr, &ipv6_hdr(*pskb)->saddr, sizeof(saddr)); |
150 | memcpy(&daddr, &(*pskb)->nh.ipv6h->daddr, sizeof(daddr)); | 150 | memcpy(&daddr, &ipv6_hdr(*pskb)->daddr, sizeof(daddr)); |
151 | mark = (*pskb)->mark; | 151 | mark = (*pskb)->mark; |
152 | hop_limit = (*pskb)->nh.ipv6h->hop_limit; | 152 | hop_limit = ipv6_hdr(*pskb)->hop_limit; |
153 | 153 | ||
154 | /* flowlabel and prio (includes version, which shouldn't change either */ | 154 | /* flowlabel and prio (includes version, which shouldn't change either */ |
155 | flowlabel = *((u_int32_t *) (*pskb)->nh.ipv6h); | 155 | flowlabel = *((u_int32_t *)ipv6_hdr(*pskb)); |
156 | 156 | ||
157 | ret = ip6t_do_table(pskb, hook, in, out, &packet_mangler); | 157 | ret = ip6t_do_table(pskb, hook, in, out, &packet_mangler); |
158 | 158 | ||
159 | if (ret != NF_DROP && ret != NF_STOLEN | 159 | if (ret != NF_DROP && ret != NF_STOLEN |
160 | && (memcmp(&(*pskb)->nh.ipv6h->saddr, &saddr, sizeof(saddr)) | 160 | && (memcmp(&ipv6_hdr(*pskb)->saddr, &saddr, sizeof(saddr)) |
161 | || memcmp(&(*pskb)->nh.ipv6h->daddr, &daddr, sizeof(daddr)) | 161 | || memcmp(&ipv6_hdr(*pskb)->daddr, &daddr, sizeof(daddr)) |
162 | || (*pskb)->mark != mark | 162 | || (*pskb)->mark != mark |
163 | || (*pskb)->nh.ipv6h->hop_limit != hop_limit)) | 163 | || ipv6_hdr(*pskb)->hop_limit != hop_limit)) |
164 | return ip6_route_me_harder(*pskb) == 0 ? ret : NF_DROP; | 164 | return ip6_route_me_harder(*pskb) == 0 ? ret : NF_DROP; |
165 | 165 | ||
166 | return ret; | 166 | return ret; |
diff --git a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c index d1102455668d..fe7f46c4dbff 100644 --- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c +++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | |||
@@ -138,16 +138,10 @@ static int | |||
138 | ipv6_prepare(struct sk_buff **pskb, unsigned int hooknum, unsigned int *dataoff, | 138 | ipv6_prepare(struct sk_buff **pskb, unsigned int hooknum, unsigned int *dataoff, |
139 | u_int8_t *protonum) | 139 | u_int8_t *protonum) |
140 | { | 140 | { |
141 | unsigned int extoff; | 141 | unsigned int extoff = (u8 *)(ipv6_hdr(*pskb) + 1) - (*pskb)->data; |
142 | unsigned char pnum; | 142 | unsigned char pnum = ipv6_hdr(*pskb)->nexthdr; |
143 | int protoff; | 143 | int protoff = nf_ct_ipv6_skip_exthdr(*pskb, extoff, &pnum, |
144 | 144 | (*pskb)->len - extoff); | |
145 | extoff = (u8*)((*pskb)->nh.ipv6h + 1) - (*pskb)->data; | ||
146 | pnum = (*pskb)->nh.ipv6h->nexthdr; | ||
147 | |||
148 | protoff = nf_ct_ipv6_skip_exthdr(*pskb, extoff, &pnum, | ||
149 | (*pskb)->len - extoff); | ||
150 | |||
151 | /* | 145 | /* |
152 | * (protoff == (*pskb)->len) mean that the packet doesn't have no data | 146 | * (protoff == (*pskb)->len) mean that the packet doesn't have no data |
153 | * except of IPv6 & ext headers. but it's tracked anyway. - YK | 147 | * except of IPv6 & ext headers. but it's tracked anyway. - YK |
@@ -179,9 +173,8 @@ static unsigned int ipv6_confirm(unsigned int hooknum, | |||
179 | struct nf_conn_help *help; | 173 | struct nf_conn_help *help; |
180 | enum ip_conntrack_info ctinfo; | 174 | enum ip_conntrack_info ctinfo; |
181 | unsigned int ret, protoff; | 175 | unsigned int ret, protoff; |
182 | unsigned int extoff = (u8*)((*pskb)->nh.ipv6h + 1) | 176 | unsigned int extoff = (u8 *)(ipv6_hdr(*pskb) + 1) - (*pskb)->data; |
183 | - (*pskb)->data; | 177 | unsigned char pnum = ipv6_hdr(*pskb)->nexthdr; |
184 | unsigned char pnum = (*pskb)->nh.ipv6h->nexthdr; | ||
185 | 178 | ||
186 | 179 | ||
187 | /* This is where we call the helper: as the packet goes out. */ | 180 | /* This is where we call the helper: as the packet goes out. */ |
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c index bc1d09584008..d3fbb1f1caf5 100644 --- a/net/ipv6/netfilter/nf_conntrack_reasm.c +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c | |||
@@ -400,8 +400,8 @@ static int nf_ct_frag6_queue(struct nf_ct_frag6_queue *fq, struct sk_buff *skb, | |||
400 | } | 400 | } |
401 | 401 | ||
402 | offset = ntohs(fhdr->frag_off) & ~0x7; | 402 | offset = ntohs(fhdr->frag_off) & ~0x7; |
403 | end = offset + (ntohs(skb->nh.ipv6h->payload_len) - | 403 | end = offset + (ntohs(ipv6_hdr(skb)->payload_len) - |
404 | ((u8 *) (fhdr + 1) - (u8 *) (skb->nh.ipv6h + 1))); | 404 | ((u8 *)(fhdr + 1) - (u8 *)(ipv6_hdr(skb) + 1))); |
405 | 405 | ||
406 | if ((unsigned int)end > IPV6_MAXPLEN) { | 406 | if ((unsigned int)end > IPV6_MAXPLEN) { |
407 | DEBUGP("offset is too large.\n"); | 407 | DEBUGP("offset is too large.\n"); |
@@ -652,7 +652,7 @@ nf_ct_frag6_reasm(struct nf_ct_frag6_queue *fq, struct net_device *dev) | |||
652 | head->next = NULL; | 652 | head->next = NULL; |
653 | head->dev = dev; | 653 | head->dev = dev; |
654 | head->tstamp = fq->stamp; | 654 | head->tstamp = fq->stamp; |
655 | head->nh.ipv6h->payload_len = htons(payload_len); | 655 | ipv6_hdr(head)->payload_len = htons(payload_len); |
656 | 656 | ||
657 | /* Yes, and fold redundant checksum back. 8) */ | 657 | /* Yes, and fold redundant checksum back. 8) */ |
658 | if (head->ip_summed == CHECKSUM_COMPLETE) | 658 | if (head->ip_summed == CHECKSUM_COMPLETE) |
@@ -706,9 +706,9 @@ out_fail: | |||
706 | static int | 706 | static int |
707 | find_prev_fhdr(struct sk_buff *skb, u8 *prevhdrp, int *prevhoff, int *fhoff) | 707 | find_prev_fhdr(struct sk_buff *skb, u8 *prevhdrp, int *prevhoff, int *fhoff) |
708 | { | 708 | { |
709 | u8 nexthdr = skb->nh.ipv6h->nexthdr; | 709 | u8 nexthdr = ipv6_hdr(skb)->nexthdr; |
710 | u8 prev_nhoff = (u8 *)&skb->nh.ipv6h->nexthdr - skb->data; | 710 | u8 prev_nhoff = (u8 *)&ipv6_hdr(skb)->nexthdr - skb->data; |
711 | int start = (u8 *)(skb->nh.ipv6h+1) - skb->data; | 711 | int start = (u8 *)(ipv6_hdr(skb) + 1) - skb->data; |
712 | int len = skb->len - start; | 712 | int len = skb->len - start; |
713 | u8 prevhdr = NEXTHDR_IPV6; | 713 | u8 prevhdr = NEXTHDR_IPV6; |
714 | 714 | ||
@@ -764,7 +764,7 @@ struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb) | |||
764 | struct sk_buff *ret_skb = NULL; | 764 | struct sk_buff *ret_skb = NULL; |
765 | 765 | ||
766 | /* Jumbo payload inhibits frag. header */ | 766 | /* Jumbo payload inhibits frag. header */ |
767 | if (skb->nh.ipv6h->payload_len == 0) { | 767 | if (ipv6_hdr(skb)->payload_len == 0) { |
768 | DEBUGP("payload len = 0\n"); | 768 | DEBUGP("payload len = 0\n"); |
769 | return skb; | 769 | return skb; |
770 | } | 770 | } |
@@ -786,7 +786,7 @@ struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb) | |||
786 | } | 786 | } |
787 | 787 | ||
788 | clone->h.raw = clone->data + fhoff; | 788 | clone->h.raw = clone->data + fhoff; |
789 | hdr = clone->nh.ipv6h; | 789 | hdr = ipv6_hdr(clone); |
790 | fhdr = (struct frag_hdr *)clone->h.raw; | 790 | fhdr = (struct frag_hdr *)clone->h.raw; |
791 | 791 | ||
792 | if (!(fhdr->frag_off & htons(0xFFF9))) { | 792 | if (!(fhdr->frag_off & htons(0xFFF9))) { |
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 9b2bcde73f19..0e2b56ce0a56 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c | |||
@@ -152,7 +152,7 @@ int ipv6_raw_deliver(struct sk_buff *skb, int nexthdr) | |||
152 | int delivered = 0; | 152 | int delivered = 0; |
153 | __u8 hash; | 153 | __u8 hash; |
154 | 154 | ||
155 | saddr = &skb->nh.ipv6h->saddr; | 155 | saddr = &ipv6_hdr(skb)->saddr; |
156 | daddr = saddr + 1; | 156 | daddr = saddr + 1; |
157 | 157 | ||
158 | hash = nexthdr & (MAX_INET_PROTOS - 1); | 158 | hash = nexthdr & (MAX_INET_PROTOS - 1); |
@@ -363,15 +363,16 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb) | |||
363 | if (skb->ip_summed == CHECKSUM_COMPLETE) { | 363 | if (skb->ip_summed == CHECKSUM_COMPLETE) { |
364 | skb_postpull_rcsum(skb, skb_network_header(skb), | 364 | skb_postpull_rcsum(skb, skb_network_header(skb), |
365 | skb->h.raw - skb->nh.raw); | 365 | skb->h.raw - skb->nh.raw); |
366 | if (!csum_ipv6_magic(&skb->nh.ipv6h->saddr, | 366 | if (!csum_ipv6_magic(&ipv6_hdr(skb)->saddr, |
367 | &skb->nh.ipv6h->daddr, | 367 | &ipv6_hdr(skb)->daddr, |
368 | skb->len, inet->num, skb->csum)) | 368 | skb->len, inet->num, skb->csum)) |
369 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 369 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
370 | } | 370 | } |
371 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) | 371 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) |
372 | skb->csum = ~csum_unfold(csum_ipv6_magic(&skb->nh.ipv6h->saddr, | 372 | skb->csum = ~csum_unfold(csum_ipv6_magic(&ipv6_hdr(skb)->saddr, |
373 | &skb->nh.ipv6h->daddr, | 373 | &ipv6_hdr(skb)->daddr, |
374 | skb->len, inet->num, 0)); | 374 | skb->len, |
375 | inet->num, 0)); | ||
375 | 376 | ||
376 | if (inet->hdrincl) { | 377 | if (inet->hdrincl) { |
377 | if (skb_checksum_complete(skb)) { | 378 | if (skb_checksum_complete(skb)) { |
@@ -438,7 +439,7 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk, | |||
438 | if (sin6) { | 439 | if (sin6) { |
439 | sin6->sin6_family = AF_INET6; | 440 | sin6->sin6_family = AF_INET6; |
440 | sin6->sin6_port = 0; | 441 | sin6->sin6_port = 0; |
441 | ipv6_addr_copy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr); | 442 | ipv6_addr_copy(&sin6->sin6_addr, &ipv6_hdr(skb)->saddr); |
442 | sin6->sin6_flowinfo = 0; | 443 | sin6->sin6_flowinfo = 0; |
443 | sin6->sin6_scope_id = 0; | 444 | sin6->sin6_scope_id = 0; |
444 | if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL) | 445 | if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL) |
@@ -578,7 +579,7 @@ static int rawv6_send_hdrinc(struct sock *sk, void *from, int length, | |||
578 | 579 | ||
579 | skb_put(skb, length); | 580 | skb_put(skb, length); |
580 | skb_reset_network_header(skb); | 581 | skb_reset_network_header(skb); |
581 | iph = skb->nh.ipv6h; | 582 | iph = ipv6_hdr(skb); |
582 | 583 | ||
583 | skb->ip_summed = CHECKSUM_NONE; | 584 | skb->ip_summed = CHECKSUM_NONE; |
584 | 585 | ||
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c index f85e49acb91a..156a37fe3ff3 100644 --- a/net/ipv6/reassembly.c +++ b/net/ipv6/reassembly.c | |||
@@ -430,8 +430,8 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb, | |||
430 | goto err; | 430 | goto err; |
431 | 431 | ||
432 | offset = ntohs(fhdr->frag_off) & ~0x7; | 432 | offset = ntohs(fhdr->frag_off) & ~0x7; |
433 | end = offset + (ntohs(skb->nh.ipv6h->payload_len) - | 433 | end = offset + (ntohs(ipv6_hdr(skb)->payload_len) - |
434 | ((u8 *) (fhdr + 1) - (u8 *) (skb->nh.ipv6h + 1))); | 434 | ((u8 *)(fhdr + 1) - (u8 *)(ipv6_hdr(skb) + 1))); |
435 | 435 | ||
436 | if ((unsigned int)end > IPV6_MAXPLEN) { | 436 | if ((unsigned int)end > IPV6_MAXPLEN) { |
437 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), | 437 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), |
@@ -671,7 +671,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in, | |||
671 | head->next = NULL; | 671 | head->next = NULL; |
672 | head->dev = dev; | 672 | head->dev = dev; |
673 | head->tstamp = fq->stamp; | 673 | head->tstamp = fq->stamp; |
674 | head->nh.ipv6h->payload_len = htons(payload_len); | 674 | ipv6_hdr(head)->payload_len = htons(payload_len); |
675 | IP6CB(head)->nhoff = nhoff; | 675 | IP6CB(head)->nhoff = nhoff; |
676 | 676 | ||
677 | *skb_in = head; | 677 | *skb_in = head; |
@@ -708,9 +708,7 @@ static int ipv6_frag_rcv(struct sk_buff **skbp) | |||
708 | struct net_device *dev = skb->dev; | 708 | struct net_device *dev = skb->dev; |
709 | struct frag_hdr *fhdr; | 709 | struct frag_hdr *fhdr; |
710 | struct frag_queue *fq; | 710 | struct frag_queue *fq; |
711 | struct ipv6hdr *hdr; | 711 | struct ipv6hdr *hdr = ipv6_hdr(skb); |
712 | |||
713 | hdr = skb->nh.ipv6h; | ||
714 | 712 | ||
715 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_REASMREQDS); | 713 | IP6_INC_STATS_BH(ip6_dst_idev(skb->dst), IPSTATS_MIB_REASMREQDS); |
716 | 714 | ||
@@ -726,7 +724,7 @@ static int ipv6_frag_rcv(struct sk_buff **skbp) | |||
726 | return -1; | 724 | return -1; |
727 | } | 725 | } |
728 | 726 | ||
729 | hdr = skb->nh.ipv6h; | 727 | hdr = ipv6_hdr(skb); |
730 | fhdr = (struct frag_hdr *)skb->h.raw; | 728 | fhdr = (struct frag_hdr *)skb->h.raw; |
731 | 729 | ||
732 | if (!(fhdr->frag_off & htons(0xFFF9))) { | 730 | if (!(fhdr->frag_off & htons(0xFFF9))) { |
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 0aa4762f53f7..52cbe1cd4045 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
@@ -726,7 +726,7 @@ out2: | |||
726 | 726 | ||
727 | void ip6_route_input(struct sk_buff *skb) | 727 | void ip6_route_input(struct sk_buff *skb) |
728 | { | 728 | { |
729 | struct ipv6hdr *iph = skb->nh.ipv6h; | 729 | struct ipv6hdr *iph = ipv6_hdr(skb); |
730 | int flags = RT6_LOOKUP_F_HAS_SADDR; | 730 | int flags = RT6_LOOKUP_F_HAS_SADDR; |
731 | struct flowi fl = { | 731 | struct flowi fl = { |
732 | .iif = skb->dev->ifindex, | 732 | .iif = skb->dev->ifindex, |
@@ -1775,7 +1775,7 @@ static inline int ip6_pkt_drop(struct sk_buff *skb, int code, | |||
1775 | int type; | 1775 | int type; |
1776 | switch (ipstats_mib_noroutes) { | 1776 | switch (ipstats_mib_noroutes) { |
1777 | case IPSTATS_MIB_INNOROUTES: | 1777 | case IPSTATS_MIB_INNOROUTES: |
1778 | type = ipv6_addr_type(&skb->nh.ipv6h->daddr); | 1778 | type = ipv6_addr_type(&ipv6_hdr(skb)->daddr); |
1779 | if (type == IPV6_ADDR_ANY || type == IPV6_ADDR_RESERVED) { | 1779 | if (type == IPV6_ADDR_ANY || type == IPV6_ADDR_RESERVED) { |
1780 | IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_INADDRERRORS); | 1780 | IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_INADDRERRORS); |
1781 | break; | 1781 | break; |
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index e33ac3c3a9ca..18ec86f177d9 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c | |||
@@ -366,7 +366,7 @@ out: | |||
366 | static inline void ipip6_ecn_decapsulate(struct iphdr *iph, struct sk_buff *skb) | 366 | static inline void ipip6_ecn_decapsulate(struct iphdr *iph, struct sk_buff *skb) |
367 | { | 367 | { |
368 | if (INET_ECN_is_ce(iph->tos)) | 368 | if (INET_ECN_is_ce(iph->tos)) |
369 | IP6_ECN_set_ce(skb->nh.ipv6h); | 369 | IP6_ECN_set_ce(ipv6_hdr(skb)); |
370 | } | 370 | } |
371 | 371 | ||
372 | static int ipip6_rcv(struct sk_buff *skb) | 372 | static int ipip6_rcv(struct sk_buff *skb) |
@@ -430,7 +430,7 @@ static int ipip6_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
430 | struct ip_tunnel *tunnel = netdev_priv(dev); | 430 | struct ip_tunnel *tunnel = netdev_priv(dev); |
431 | struct net_device_stats *stats = &tunnel->stat; | 431 | struct net_device_stats *stats = &tunnel->stat; |
432 | struct iphdr *tiph = &tunnel->parms.iph; | 432 | struct iphdr *tiph = &tunnel->parms.iph; |
433 | struct ipv6hdr *iph6 = skb->nh.ipv6h; | 433 | struct ipv6hdr *iph6 = ipv6_hdr(skb); |
434 | u8 tos = tunnel->parms.iph.tos; | 434 | u8 tos = tunnel->parms.iph.tos; |
435 | struct rtable *rt; /* Route to the other host */ | 435 | struct rtable *rt; /* Route to the other host */ |
436 | struct net_device *tdev; /* Device to other host */ | 436 | struct net_device *tdev; /* Device to other host */ |
@@ -468,7 +468,7 @@ static int ipip6_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
468 | addr_type = ipv6_addr_type(addr6); | 468 | addr_type = ipv6_addr_type(addr6); |
469 | 469 | ||
470 | if (addr_type == IPV6_ADDR_ANY) { | 470 | if (addr_type == IPV6_ADDR_ANY) { |
471 | addr6 = &skb->nh.ipv6h->daddr; | 471 | addr6 = &ipv6_hdr(skb)->daddr; |
472 | addr_type = ipv6_addr_type(addr6); | 472 | addr_type = ipv6_addr_type(addr6); |
473 | } | 473 | } |
474 | 474 | ||
@@ -550,7 +550,7 @@ static int ipip6_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
550 | skb_set_owner_w(new_skb, skb->sk); | 550 | skb_set_owner_w(new_skb, skb->sk); |
551 | dev_kfree_skb(skb); | 551 | dev_kfree_skb(skb); |
552 | skb = new_skb; | 552 | skb = new_skb; |
553 | iph6 = skb->nh.ipv6h; | 553 | iph6 = ipv6_hdr(skb); |
554 | } | 554 | } |
555 | 555 | ||
556 | skb->h.raw = skb->nh.raw; | 556 | skb->h.raw = skb->nh.raw; |
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 80a52ab1e384..85b3e89110f9 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -115,8 +115,8 @@ static __inline__ __sum16 tcp_v6_check(struct tcphdr *th, int len, | |||
115 | 115 | ||
116 | static __u32 tcp_v6_init_sequence(struct sk_buff *skb) | 116 | static __u32 tcp_v6_init_sequence(struct sk_buff *skb) |
117 | { | 117 | { |
118 | return secure_tcpv6_sequence_number(skb->nh.ipv6h->daddr.s6_addr32, | 118 | return secure_tcpv6_sequence_number(ipv6_hdr(skb)->daddr.s6_addr32, |
119 | skb->nh.ipv6h->saddr.s6_addr32, | 119 | ipv6_hdr(skb)->saddr.s6_addr32, |
120 | skb->h.th->dest, | 120 | skb->h.th->dest, |
121 | skb->h.th->source); | 121 | skb->h.th->source); |
122 | } | 122 | } |
@@ -837,7 +837,7 @@ static int tcp_v6_inbound_md5_hash (struct sock *sk, struct sk_buff *skb) | |||
837 | { | 837 | { |
838 | __u8 *hash_location = NULL; | 838 | __u8 *hash_location = NULL; |
839 | struct tcp_md5sig_key *hash_expected; | 839 | struct tcp_md5sig_key *hash_expected; |
840 | struct ipv6hdr *ip6h = skb->nh.ipv6h; | 840 | struct ipv6hdr *ip6h = ipv6_hdr(skb); |
841 | struct tcphdr *th = skb->h.th; | 841 | struct tcphdr *th = skb->h.th; |
842 | int length = (th->doff << 2) - sizeof (*th); | 842 | int length = (th->doff << 2) - sizeof (*th); |
843 | int genhash; | 843 | int genhash; |
@@ -966,7 +966,7 @@ static int tcp_v6_gso_send_check(struct sk_buff *skb) | |||
966 | if (!pskb_may_pull(skb, sizeof(*th))) | 966 | if (!pskb_may_pull(skb, sizeof(*th))) |
967 | return -EINVAL; | 967 | return -EINVAL; |
968 | 968 | ||
969 | ipv6h = skb->nh.ipv6h; | 969 | ipv6h = ipv6_hdr(skb); |
970 | th = skb->h.th; | 970 | th = skb->h.th; |
971 | 971 | ||
972 | th->check = 0; | 972 | th->check = 0; |
@@ -995,7 +995,7 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb) | |||
995 | 995 | ||
996 | #ifdef CONFIG_TCP_MD5SIG | 996 | #ifdef CONFIG_TCP_MD5SIG |
997 | if (sk) | 997 | if (sk) |
998 | key = tcp_v6_md5_do_lookup(sk, &skb->nh.ipv6h->daddr); | 998 | key = tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr); |
999 | else | 999 | else |
1000 | key = NULL; | 1000 | key = NULL; |
1001 | 1001 | ||
@@ -1039,20 +1039,18 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb) | |||
1039 | (TCPOPT_NOP << 16) | | 1039 | (TCPOPT_NOP << 16) | |
1040 | (TCPOPT_MD5SIG << 8) | | 1040 | (TCPOPT_MD5SIG << 8) | |
1041 | TCPOLEN_MD5SIG); | 1041 | TCPOLEN_MD5SIG); |
1042 | tcp_v6_do_calc_md5_hash((__u8*)&opt[1], | 1042 | tcp_v6_do_calc_md5_hash((__u8 *)&opt[1], key, |
1043 | key, | 1043 | &ipv6_hdr(skb)->daddr, |
1044 | &skb->nh.ipv6h->daddr, | 1044 | &ipv6_hdr(skb)->saddr, |
1045 | &skb->nh.ipv6h->saddr, | 1045 | t1, IPPROTO_TCP, tot_len); |
1046 | t1, IPPROTO_TCP, | ||
1047 | tot_len); | ||
1048 | } | 1046 | } |
1049 | #endif | 1047 | #endif |
1050 | 1048 | ||
1051 | buff->csum = csum_partial((char *)t1, sizeof(*t1), 0); | 1049 | buff->csum = csum_partial((char *)t1, sizeof(*t1), 0); |
1052 | 1050 | ||
1053 | memset(&fl, 0, sizeof(fl)); | 1051 | memset(&fl, 0, sizeof(fl)); |
1054 | ipv6_addr_copy(&fl.fl6_dst, &skb->nh.ipv6h->saddr); | 1052 | ipv6_addr_copy(&fl.fl6_dst, &ipv6_hdr(skb)->saddr); |
1055 | ipv6_addr_copy(&fl.fl6_src, &skb->nh.ipv6h->daddr); | 1053 | ipv6_addr_copy(&fl.fl6_src, &ipv6_hdr(skb)->daddr); |
1056 | 1054 | ||
1057 | t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst, | 1055 | t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst, |
1058 | sizeof(*t1), IPPROTO_TCP, | 1056 | sizeof(*t1), IPPROTO_TCP, |
@@ -1093,7 +1091,7 @@ static void tcp_v6_send_ack(struct tcp_timewait_sock *tw, | |||
1093 | 1091 | ||
1094 | #ifdef CONFIG_TCP_MD5SIG | 1092 | #ifdef CONFIG_TCP_MD5SIG |
1095 | if (!tw && skb->sk) { | 1093 | if (!tw && skb->sk) { |
1096 | key = tcp_v6_md5_do_lookup(skb->sk, &skb->nh.ipv6h->daddr); | 1094 | key = tcp_v6_md5_do_lookup(skb->sk, &ipv6_hdr(skb)->daddr); |
1097 | } else if (tw && tw->tw_md5_keylen) { | 1095 | } else if (tw && tw->tw_md5_keylen) { |
1098 | tw_key.key = tw->tw_md5_key; | 1096 | tw_key.key = tw->tw_md5_key; |
1099 | tw_key.keylen = tw->tw_md5_keylen; | 1097 | tw_key.keylen = tw->tw_md5_keylen; |
@@ -1142,20 +1140,18 @@ static void tcp_v6_send_ack(struct tcp_timewait_sock *tw, | |||
1142 | if (key) { | 1140 | if (key) { |
1143 | *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) | | 1141 | *topt++ = htonl((TCPOPT_NOP << 24) | (TCPOPT_NOP << 16) | |
1144 | (TCPOPT_MD5SIG << 8) | TCPOLEN_MD5SIG); | 1142 | (TCPOPT_MD5SIG << 8) | TCPOLEN_MD5SIG); |
1145 | tcp_v6_do_calc_md5_hash((__u8 *)topt, | 1143 | tcp_v6_do_calc_md5_hash((__u8 *)topt, key, |
1146 | key, | 1144 | &ipv6_hdr(skb)->daddr, |
1147 | &skb->nh.ipv6h->daddr, | 1145 | &ipv6_hdr(skb)->saddr, |
1148 | &skb->nh.ipv6h->saddr, | 1146 | t1, IPPROTO_TCP, tot_len); |
1149 | t1, IPPROTO_TCP, | ||
1150 | tot_len); | ||
1151 | } | 1147 | } |
1152 | #endif | 1148 | #endif |
1153 | 1149 | ||
1154 | buff->csum = csum_partial((char *)t1, tot_len, 0); | 1150 | buff->csum = csum_partial((char *)t1, tot_len, 0); |
1155 | 1151 | ||
1156 | memset(&fl, 0, sizeof(fl)); | 1152 | memset(&fl, 0, sizeof(fl)); |
1157 | ipv6_addr_copy(&fl.fl6_dst, &skb->nh.ipv6h->saddr); | 1153 | ipv6_addr_copy(&fl.fl6_dst, &ipv6_hdr(skb)->saddr); |
1158 | ipv6_addr_copy(&fl.fl6_src, &skb->nh.ipv6h->daddr); | 1154 | ipv6_addr_copy(&fl.fl6_src, &ipv6_hdr(skb)->daddr); |
1159 | 1155 | ||
1160 | t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst, | 1156 | t1->check = csum_ipv6_magic(&fl.fl6_src, &fl.fl6_dst, |
1161 | tot_len, IPPROTO_TCP, | 1157 | tot_len, IPPROTO_TCP, |
@@ -1204,13 +1200,13 @@ static struct sock *tcp_v6_hnd_req(struct sock *sk,struct sk_buff *skb) | |||
1204 | 1200 | ||
1205 | /* Find possible connection requests. */ | 1201 | /* Find possible connection requests. */ |
1206 | req = inet6_csk_search_req(sk, &prev, th->source, | 1202 | req = inet6_csk_search_req(sk, &prev, th->source, |
1207 | &skb->nh.ipv6h->saddr, | 1203 | &ipv6_hdr(skb)->saddr, |
1208 | &skb->nh.ipv6h->daddr, inet6_iif(skb)); | 1204 | &ipv6_hdr(skb)->daddr, inet6_iif(skb)); |
1209 | if (req) | 1205 | if (req) |
1210 | return tcp_check_req(sk, skb, req, prev); | 1206 | return tcp_check_req(sk, skb, req, prev); |
1211 | 1207 | ||
1212 | nsk = __inet6_lookup_established(&tcp_hashinfo, &skb->nh.ipv6h->saddr, | 1208 | nsk = __inet6_lookup_established(&tcp_hashinfo, &ipv6_hdr(skb)->saddr, |
1213 | th->source, &skb->nh.ipv6h->daddr, | 1209 | th->source, &ipv6_hdr(skb)->daddr, |
1214 | ntohs(th->dest), inet6_iif(skb)); | 1210 | ntohs(th->dest), inet6_iif(skb)); |
1215 | 1211 | ||
1216 | if (nsk) { | 1212 | if (nsk) { |
@@ -1277,8 +1273,8 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
1277 | tcp_openreq_init(req, &tmp_opt, skb); | 1273 | tcp_openreq_init(req, &tmp_opt, skb); |
1278 | 1274 | ||
1279 | treq = inet6_rsk(req); | 1275 | treq = inet6_rsk(req); |
1280 | ipv6_addr_copy(&treq->rmt_addr, &skb->nh.ipv6h->saddr); | 1276 | ipv6_addr_copy(&treq->rmt_addr, &ipv6_hdr(skb)->saddr); |
1281 | ipv6_addr_copy(&treq->loc_addr, &skb->nh.ipv6h->daddr); | 1277 | ipv6_addr_copy(&treq->loc_addr, &ipv6_hdr(skb)->daddr); |
1282 | TCP_ECN_create_request(req, skb->h.th); | 1278 | TCP_ECN_create_request(req, skb->h.th); |
1283 | treq->pktopts = NULL; | 1279 | treq->pktopts = NULL; |
1284 | if (ipv6_opt_accepted(sk, skb) || | 1280 | if (ipv6_opt_accepted(sk, skb) || |
@@ -1365,7 +1361,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1365 | newnp->pktoptions = NULL; | 1361 | newnp->pktoptions = NULL; |
1366 | newnp->opt = NULL; | 1362 | newnp->opt = NULL; |
1367 | newnp->mcast_oif = inet6_iif(skb); | 1363 | newnp->mcast_oif = inet6_iif(skb); |
1368 | newnp->mcast_hops = skb->nh.ipv6h->hop_limit; | 1364 | newnp->mcast_hops = ipv6_hdr(skb)->hop_limit; |
1369 | 1365 | ||
1370 | /* | 1366 | /* |
1371 | * No need to charge this sock to the relevant IPv6 refcnt debug socks count | 1367 | * No need to charge this sock to the relevant IPv6 refcnt debug socks count |
@@ -1473,7 +1469,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1473 | } | 1469 | } |
1474 | newnp->opt = NULL; | 1470 | newnp->opt = NULL; |
1475 | newnp->mcast_oif = inet6_iif(skb); | 1471 | newnp->mcast_oif = inet6_iif(skb); |
1476 | newnp->mcast_hops = skb->nh.ipv6h->hop_limit; | 1472 | newnp->mcast_hops = ipv6_hdr(skb)->hop_limit; |
1477 | 1473 | ||
1478 | /* Clone native IPv6 options from listening socket (if any) | 1474 | /* Clone native IPv6 options from listening socket (if any) |
1479 | 1475 | ||
@@ -1532,15 +1528,16 @@ out: | |||
1532 | static __sum16 tcp_v6_checksum_init(struct sk_buff *skb) | 1528 | static __sum16 tcp_v6_checksum_init(struct sk_buff *skb) |
1533 | { | 1529 | { |
1534 | if (skb->ip_summed == CHECKSUM_COMPLETE) { | 1530 | if (skb->ip_summed == CHECKSUM_COMPLETE) { |
1535 | if (!tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr, | 1531 | if (!tcp_v6_check(skb->h.th, skb->len, &ipv6_hdr(skb)->saddr, |
1536 | &skb->nh.ipv6h->daddr,skb->csum)) { | 1532 | &ipv6_hdr(skb)->daddr, skb->csum)) { |
1537 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 1533 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
1538 | return 0; | 1534 | return 0; |
1539 | } | 1535 | } |
1540 | } | 1536 | } |
1541 | 1537 | ||
1542 | skb->csum = ~csum_unfold(tcp_v6_check(skb->h.th,skb->len,&skb->nh.ipv6h->saddr, | 1538 | skb->csum = ~csum_unfold(tcp_v6_check(skb->h.th, skb->len, |
1543 | &skb->nh.ipv6h->daddr, 0)); | 1539 | &ipv6_hdr(skb)->saddr, |
1540 | &ipv6_hdr(skb)->daddr, 0)); | ||
1544 | 1541 | ||
1545 | if (skb->len <= 76) { | 1542 | if (skb->len <= 76) { |
1546 | return __skb_checksum_complete(skb); | 1543 | return __skb_checksum_complete(skb); |
@@ -1668,7 +1665,7 @@ ipv6_pktoptions: | |||
1668 | if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo) | 1665 | if (np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo) |
1669 | np->mcast_oif = inet6_iif(opt_skb); | 1666 | np->mcast_oif = inet6_iif(opt_skb); |
1670 | if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) | 1667 | if (np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) |
1671 | np->mcast_hops = opt_skb->nh.ipv6h->hop_limit; | 1668 | np->mcast_hops = ipv6_hdr(opt_skb)->hop_limit; |
1672 | if (ipv6_opt_accepted(sk, opt_skb)) { | 1669 | if (ipv6_opt_accepted(sk, opt_skb)) { |
1673 | skb_set_owner_r(opt_skb, sk); | 1670 | skb_set_owner_r(opt_skb, sk); |
1674 | opt_skb = xchg(&np->pktoptions, opt_skb); | 1671 | opt_skb = xchg(&np->pktoptions, opt_skb); |
@@ -1718,11 +1715,11 @@ static int tcp_v6_rcv(struct sk_buff **pskb) | |||
1718 | skb->len - th->doff*4); | 1715 | skb->len - th->doff*4); |
1719 | TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq); | 1716 | TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq); |
1720 | TCP_SKB_CB(skb)->when = 0; | 1717 | TCP_SKB_CB(skb)->when = 0; |
1721 | TCP_SKB_CB(skb)->flags = ipv6_get_dsfield(skb->nh.ipv6h); | 1718 | TCP_SKB_CB(skb)->flags = ipv6_get_dsfield(ipv6_hdr(skb)); |
1722 | TCP_SKB_CB(skb)->sacked = 0; | 1719 | TCP_SKB_CB(skb)->sacked = 0; |
1723 | 1720 | ||
1724 | sk = __inet6_lookup(&tcp_hashinfo, &skb->nh.ipv6h->saddr, th->source, | 1721 | sk = __inet6_lookup(&tcp_hashinfo, &ipv6_hdr(skb)->saddr, th->source, |
1725 | &skb->nh.ipv6h->daddr, ntohs(th->dest), | 1722 | &ipv6_hdr(skb)->daddr, ntohs(th->dest), |
1726 | inet6_iif(skb)); | 1723 | inet6_iif(skb)); |
1727 | 1724 | ||
1728 | if (!sk) | 1725 | if (!sk) |
@@ -1802,7 +1799,7 @@ do_time_wait: | |||
1802 | struct sock *sk2; | 1799 | struct sock *sk2; |
1803 | 1800 | ||
1804 | sk2 = inet6_lookup_listener(&tcp_hashinfo, | 1801 | sk2 = inet6_lookup_listener(&tcp_hashinfo, |
1805 | &skb->nh.ipv6h->daddr, | 1802 | &ipv6_hdr(skb)->daddr, |
1806 | ntohs(th->dest), inet6_iif(skb)); | 1803 | ntohs(th->dest), inet6_iif(skb)); |
1807 | if (sk2 != NULL) { | 1804 | if (sk2 != NULL) { |
1808 | struct inet_timewait_sock *tw = inet_twsk(sk); | 1805 | struct inet_timewait_sock *tw = inet_twsk(sk); |
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index e991e606ab1f..55affe39b2eb 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c | |||
@@ -180,7 +180,8 @@ try_again: | |||
180 | ipv6_addr_set(&sin6->sin6_addr, 0, 0, | 180 | ipv6_addr_set(&sin6->sin6_addr, 0, 0, |
181 | htonl(0xffff), ip_hdr(skb)->saddr); | 181 | htonl(0xffff), ip_hdr(skb)->saddr); |
182 | else { | 182 | else { |
183 | ipv6_addr_copy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr); | 183 | ipv6_addr_copy(&sin6->sin6_addr, |
184 | &ipv6_hdr(skb)->saddr); | ||
184 | if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL) | 185 | if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL) |
185 | sin6->sin6_scope_id = IP6CB(skb)->iif; | 186 | sin6->sin6_scope_id = IP6CB(skb)->iif; |
186 | } | 187 | } |
@@ -392,13 +393,13 @@ static inline int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh, | |||
392 | return 1; | 393 | return 1; |
393 | } | 394 | } |
394 | if (skb->ip_summed == CHECKSUM_COMPLETE && | 395 | if (skb->ip_summed == CHECKSUM_COMPLETE && |
395 | !csum_ipv6_magic(&skb->nh.ipv6h->saddr, &skb->nh.ipv6h->daddr, | 396 | !csum_ipv6_magic(&ipv6_hdr(skb)->saddr, &ipv6_hdr(skb)->daddr, |
396 | skb->len, proto, skb->csum)) | 397 | skb->len, proto, skb->csum)) |
397 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 398 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
398 | 399 | ||
399 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) | 400 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) |
400 | skb->csum = ~csum_unfold(csum_ipv6_magic(&skb->nh.ipv6h->saddr, | 401 | skb->csum = ~csum_unfold(csum_ipv6_magic(&ipv6_hdr(skb)->saddr, |
401 | &skb->nh.ipv6h->daddr, | 402 | &ipv6_hdr(skb)->daddr, |
402 | skb->len, proto, 0)); | 403 | skb->len, proto, 0)); |
403 | 404 | ||
404 | return 0; | 405 | return 0; |
@@ -417,8 +418,8 @@ int __udp6_lib_rcv(struct sk_buff **pskb, struct hlist_head udptable[], | |||
417 | if (!pskb_may_pull(skb, sizeof(struct udphdr))) | 418 | if (!pskb_may_pull(skb, sizeof(struct udphdr))) |
418 | goto short_packet; | 419 | goto short_packet; |
419 | 420 | ||
420 | saddr = &skb->nh.ipv6h->saddr; | 421 | saddr = &ipv6_hdr(skb)->saddr; |
421 | daddr = &skb->nh.ipv6h->daddr; | 422 | daddr = &ipv6_hdr(skb)->daddr; |
422 | uh = skb->h.uh; | 423 | uh = skb->h.uh; |
423 | 424 | ||
424 | ulen = ntohs(uh->len); | 425 | ulen = ntohs(uh->len); |
@@ -438,8 +439,8 @@ int __udp6_lib_rcv(struct sk_buff **pskb, struct hlist_head udptable[], | |||
438 | if (ulen < skb->len) { | 439 | if (ulen < skb->len) { |
439 | if (pskb_trim_rcsum(skb, ulen)) | 440 | if (pskb_trim_rcsum(skb, ulen)) |
440 | goto short_packet; | 441 | goto short_packet; |
441 | saddr = &skb->nh.ipv6h->saddr; | 442 | saddr = &ipv6_hdr(skb)->saddr; |
442 | daddr = &skb->nh.ipv6h->daddr; | 443 | daddr = &ipv6_hdr(skb)->daddr; |
443 | uh = skb->h.uh; | 444 | uh = skb->h.uh; |
444 | } | 445 | } |
445 | } | 446 | } |
diff --git a/net/ipv6/xfrm6_input.c b/net/ipv6/xfrm6_input.c index 5c929f886129..f30ef16072f6 100644 --- a/net/ipv6/xfrm6_input.c +++ b/net/ipv6/xfrm6_input.c | |||
@@ -35,7 +35,7 @@ int xfrm6_rcv_spi(struct sk_buff *skb, __be32 spi) | |||
35 | goto drop; | 35 | goto drop; |
36 | 36 | ||
37 | do { | 37 | do { |
38 | struct ipv6hdr *iph = skb->nh.ipv6h; | 38 | struct ipv6hdr *iph = ipv6_hdr(skb); |
39 | 39 | ||
40 | if (xfrm_nr == XFRM_MAX_DEPTH) | 40 | if (xfrm_nr == XFRM_MAX_DEPTH) |
41 | goto drop; | 41 | goto drop; |
@@ -112,7 +112,7 @@ int xfrm6_rcv_spi(struct sk_buff *skb, __be32 spi) | |||
112 | return -1; | 112 | return -1; |
113 | } else { | 113 | } else { |
114 | #ifdef CONFIG_NETFILTER | 114 | #ifdef CONFIG_NETFILTER |
115 | skb->nh.ipv6h->payload_len = htons(skb->len); | 115 | ipv6_hdr(skb)->payload_len = htons(skb->len); |
116 | __skb_push(skb, skb->data - skb_network_header(skb)); | 116 | __skb_push(skb, skb->data - skb_network_header(skb)); |
117 | 117 | ||
118 | NF_HOOK(PF_INET6, NF_IP6_PRE_ROUTING, skb, skb->dev, NULL, | 118 | NF_HOOK(PF_INET6, NF_IP6_PRE_ROUTING, skb, skb->dev, NULL, |
diff --git a/net/ipv6/xfrm6_mode_beet.c b/net/ipv6/xfrm6_mode_beet.c index 247e2d5d2acf..b5a48c255f07 100644 --- a/net/ipv6/xfrm6_mode_beet.c +++ b/net/ipv6/xfrm6_mode_beet.c | |||
@@ -38,7 +38,7 @@ static int xfrm6_beet_output(struct xfrm_state *x, struct sk_buff *skb) | |||
38 | int hdr_len; | 38 | int hdr_len; |
39 | 39 | ||
40 | skb_push(skb, x->props.header_len); | 40 | skb_push(skb, x->props.header_len); |
41 | iph = skb->nh.ipv6h; | 41 | iph = ipv6_hdr(skb); |
42 | 42 | ||
43 | hdr_len = ip6_find_1stfragopt(skb, &prevhdr); | 43 | hdr_len = ip6_find_1stfragopt(skb, &prevhdr); |
44 | skb->nh.raw = prevhdr - x->props.header_len; | 44 | skb->nh.raw = prevhdr - x->props.header_len; |
@@ -46,7 +46,7 @@ static int xfrm6_beet_output(struct xfrm_state *x, struct sk_buff *skb) | |||
46 | memmove(skb->data, iph, hdr_len); | 46 | memmove(skb->data, iph, hdr_len); |
47 | 47 | ||
48 | skb_reset_network_header(skb); | 48 | skb_reset_network_header(skb); |
49 | top_iph = skb->nh.ipv6h; | 49 | top_iph = ipv6_hdr(skb); |
50 | skb->nh.raw = &top_iph->nexthdr; | 50 | skb->nh.raw = &top_iph->nexthdr; |
51 | skb->h.ipv6h = top_iph + 1; | 51 | skb->h.ipv6h = top_iph + 1; |
52 | 52 | ||
@@ -74,7 +74,7 @@ static int xfrm6_beet_input(struct xfrm_state *x, struct sk_buff *skb) | |||
74 | skb_set_mac_header(skb, -skb->mac_len); | 74 | skb_set_mac_header(skb, -skb->mac_len); |
75 | memmove(skb_mac_header(skb), old_mac, skb->mac_len); | 75 | memmove(skb_mac_header(skb), old_mac, skb->mac_len); |
76 | 76 | ||
77 | ip6h = skb->nh.ipv6h; | 77 | ip6h = ipv6_hdr(skb); |
78 | ip6h->payload_len = htons(skb->len - size); | 78 | ip6h->payload_len = htons(skb->len - size); |
79 | ipv6_addr_copy(&ip6h->daddr, (struct in6_addr *) &x->sel.daddr.a6); | 79 | ipv6_addr_copy(&ip6h->daddr, (struct in6_addr *) &x->sel.daddr.a6); |
80 | ipv6_addr_copy(&ip6h->saddr, (struct in6_addr *) &x->sel.saddr.a6); | 80 | ipv6_addr_copy(&ip6h->saddr, (struct in6_addr *) &x->sel.saddr.a6); |
diff --git a/net/ipv6/xfrm6_mode_ro.c b/net/ipv6/xfrm6_mode_ro.c index 6031c16d46ca..d01958d921ac 100644 --- a/net/ipv6/xfrm6_mode_ro.c +++ b/net/ipv6/xfrm6_mode_ro.c | |||
@@ -50,7 +50,7 @@ static int xfrm6_ro_output(struct xfrm_state *x, struct sk_buff *skb) | |||
50 | int hdr_len; | 50 | int hdr_len; |
51 | 51 | ||
52 | skb_push(skb, x->props.header_len); | 52 | skb_push(skb, x->props.header_len); |
53 | iph = skb->nh.ipv6h; | 53 | iph = ipv6_hdr(skb); |
54 | 54 | ||
55 | hdr_len = x->type->hdr_offset(x, skb, &prevhdr); | 55 | hdr_len = x->type->hdr_offset(x, skb, &prevhdr); |
56 | skb->nh.raw = prevhdr - x->props.header_len; | 56 | skb->nh.raw = prevhdr - x->props.header_len; |
diff --git a/net/ipv6/xfrm6_mode_transport.c b/net/ipv6/xfrm6_mode_transport.c index ace0bbf4f25d..358b60d9d912 100644 --- a/net/ipv6/xfrm6_mode_transport.c +++ b/net/ipv6/xfrm6_mode_transport.c | |||
@@ -32,7 +32,7 @@ static int xfrm6_transport_output(struct xfrm_state *x, struct sk_buff *skb) | |||
32 | int hdr_len; | 32 | int hdr_len; |
33 | 33 | ||
34 | skb_push(skb, x->props.header_len); | 34 | skb_push(skb, x->props.header_len); |
35 | iph = skb->nh.ipv6h; | 35 | iph = ipv6_hdr(skb); |
36 | 36 | ||
37 | hdr_len = x->type->hdr_offset(x, skb, &prevhdr); | 37 | hdr_len = x->type->hdr_offset(x, skb, &prevhdr); |
38 | skb->nh.raw = prevhdr - x->props.header_len; | 38 | skb->nh.raw = prevhdr - x->props.header_len; |
@@ -57,7 +57,7 @@ static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb) | |||
57 | memmove(skb->h.raw, skb_network_header(skb), ihl); | 57 | memmove(skb->h.raw, skb_network_header(skb), ihl); |
58 | skb->nh.raw = skb->h.raw; | 58 | skb->nh.raw = skb->h.raw; |
59 | } | 59 | } |
60 | skb->nh.ipv6h->payload_len = htons(skb->len + ihl - | 60 | ipv6_hdr(skb)->payload_len = htons(skb->len + ihl - |
61 | sizeof(struct ipv6hdr)); | 61 | sizeof(struct ipv6hdr)); |
62 | skb->h.raw = skb->data; | 62 | skb->h.raw = skb->data; |
63 | return 0; | 63 | return 0; |
diff --git a/net/ipv6/xfrm6_mode_tunnel.c b/net/ipv6/xfrm6_mode_tunnel.c index 498f17b5c42f..28f36b363d1f 100644 --- a/net/ipv6/xfrm6_mode_tunnel.c +++ b/net/ipv6/xfrm6_mode_tunnel.c | |||
@@ -18,7 +18,7 @@ | |||
18 | 18 | ||
19 | static inline void ipip6_ecn_decapsulate(struct sk_buff *skb) | 19 | static inline void ipip6_ecn_decapsulate(struct sk_buff *skb) |
20 | { | 20 | { |
21 | struct ipv6hdr *outer_iph = skb->nh.ipv6h; | 21 | struct ipv6hdr *outer_iph = ipv6_hdr(skb); |
22 | struct ipv6hdr *inner_iph = skb->h.ipv6h; | 22 | struct ipv6hdr *inner_iph = skb->h.ipv6h; |
23 | 23 | ||
24 | if (INET_ECN_is_ce(ipv6_get_dsfield(outer_iph))) | 24 | if (INET_ECN_is_ce(ipv6_get_dsfield(outer_iph))) |
@@ -27,7 +27,7 @@ static inline void ipip6_ecn_decapsulate(struct sk_buff *skb) | |||
27 | 27 | ||
28 | static inline void ip6ip_ecn_decapsulate(struct sk_buff *skb) | 28 | static inline void ip6ip_ecn_decapsulate(struct sk_buff *skb) |
29 | { | 29 | { |
30 | if (INET_ECN_is_ce(ipv6_get_dsfield(skb->nh.ipv6h))) | 30 | if (INET_ECN_is_ce(ipv6_get_dsfield(ipv6_hdr(skb)))) |
31 | IP_ECN_set_ce(skb->h.ipiph); | 31 | IP_ECN_set_ce(skb->h.ipiph); |
32 | } | 32 | } |
33 | 33 | ||
@@ -51,10 +51,10 @@ static int xfrm6_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) | |||
51 | int dsfield; | 51 | int dsfield; |
52 | 52 | ||
53 | skb_push(skb, x->props.header_len); | 53 | skb_push(skb, x->props.header_len); |
54 | iph = skb->nh.ipv6h; | 54 | iph = ipv6_hdr(skb); |
55 | 55 | ||
56 | skb_reset_network_header(skb); | 56 | skb_reset_network_header(skb); |
57 | top_iph = skb->nh.ipv6h; | 57 | top_iph = ipv6_hdr(skb); |
58 | skb->nh.raw = &top_iph->nexthdr; | 58 | skb->nh.raw = &top_iph->nexthdr; |
59 | skb->h.ipv6h = top_iph + 1; | 59 | skb->h.ipv6h = top_iph + 1; |
60 | 60 | ||
@@ -102,7 +102,7 @@ static int xfrm6_tunnel_input(struct xfrm_state *x, struct sk_buff *skb) | |||
102 | nh = skb_network_header(skb); | 102 | nh = skb_network_header(skb); |
103 | if (nh[IP6CB(skb)->nhoff] == IPPROTO_IPV6) { | 103 | if (nh[IP6CB(skb)->nhoff] == IPPROTO_IPV6) { |
104 | if (x->props.flags & XFRM_STATE_DECAP_DSCP) | 104 | if (x->props.flags & XFRM_STATE_DECAP_DSCP) |
105 | ipv6_copy_dscp(skb->nh.ipv6h, skb->h.ipv6h); | 105 | ipv6_copy_dscp(ipv6_hdr(skb), skb->h.ipv6h); |
106 | if (!(x->props.flags & XFRM_STATE_NOECN)) | 106 | if (!(x->props.flags & XFRM_STATE_NOECN)) |
107 | ipip6_ecn_decapsulate(skb); | 107 | ipip6_ecn_decapsulate(skb); |
108 | } else { | 108 | } else { |
diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c index cb5a723d4cb4..b93bfb87f494 100644 --- a/net/ipv6/xfrm6_policy.c +++ b/net/ipv6/xfrm6_policy.c | |||
@@ -271,7 +271,7 @@ static inline void | |||
271 | _decode_session6(struct sk_buff *skb, struct flowi *fl) | 271 | _decode_session6(struct sk_buff *skb, struct flowi *fl) |
272 | { | 272 | { |
273 | u16 offset = skb->h.raw - skb->nh.raw; | 273 | u16 offset = skb->h.raw - skb->nh.raw; |
274 | struct ipv6hdr *hdr = skb->nh.ipv6h; | 274 | struct ipv6hdr *hdr = ipv6_hdr(skb); |
275 | struct ipv6_opt_hdr *exthdr; | 275 | struct ipv6_opt_hdr *exthdr; |
276 | const unsigned char *nh = skb_network_header(skb); | 276 | const unsigned char *nh = skb_network_header(skb); |
277 | u8 nexthdr = nh[IP6CB(skb)->nhoff]; | 277 | u8 nexthdr = nh[IP6CB(skb)->nhoff]; |
diff --git a/net/ipv6/xfrm6_tunnel.c b/net/ipv6/xfrm6_tunnel.c index 93c42232aa39..538499a89975 100644 --- a/net/ipv6/xfrm6_tunnel.c +++ b/net/ipv6/xfrm6_tunnel.c | |||
@@ -257,7 +257,7 @@ static int xfrm6_tunnel_input(struct xfrm_state *x, struct sk_buff *skb) | |||
257 | 257 | ||
258 | static int xfrm6_tunnel_rcv(struct sk_buff *skb) | 258 | static int xfrm6_tunnel_rcv(struct sk_buff *skb) |
259 | { | 259 | { |
260 | struct ipv6hdr *iph = skb->nh.ipv6h; | 260 | struct ipv6hdr *iph = ipv6_hdr(skb); |
261 | __be32 spi; | 261 | __be32 spi; |
262 | 262 | ||
263 | spi = xfrm6_tunnel_spi_lookup((xfrm_address_t *)&iph->saddr); | 263 | spi = xfrm6_tunnel_spi_lookup((xfrm_address_t *)&iph->saddr); |