diff options
Diffstat (limited to 'net/dccp')
-rw-r--r-- | net/dccp/ipv4.c | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index 4a83978aa660..b85437dae0e7 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
@@ -363,8 +363,8 @@ EXPORT_SYMBOL_GPL(dccp_v4_send_check); | |||
363 | 363 | ||
364 | static inline u64 dccp_v4_init_sequence(const struct sk_buff *skb) | 364 | static inline u64 dccp_v4_init_sequence(const struct sk_buff *skb) |
365 | { | 365 | { |
366 | return secure_dccp_sequence_number(skb->nh.iph->daddr, | 366 | return secure_dccp_sequence_number(ip_hdr(skb)->daddr, |
367 | skb->nh.iph->saddr, | 367 | ip_hdr(skb)->saddr, |
368 | dccp_hdr(skb)->dccph_dport, | 368 | dccp_hdr(skb)->dccph_dport, |
369 | dccp_hdr(skb)->dccph_sport); | 369 | dccp_hdr(skb)->dccph_sport); |
370 | } | 370 | } |
@@ -405,7 +405,7 @@ struct sock *dccp_v4_request_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
405 | newinet->opt = ireq->opt; | 405 | newinet->opt = ireq->opt; |
406 | ireq->opt = NULL; | 406 | ireq->opt = NULL; |
407 | newinet->mc_index = inet_iif(skb); | 407 | newinet->mc_index = inet_iif(skb); |
408 | newinet->mc_ttl = skb->nh.iph->ttl; | 408 | newinet->mc_ttl = ip_hdr(skb)->ttl; |
409 | newinet->id = jiffies; | 409 | newinet->id = jiffies; |
410 | 410 | ||
411 | dccp_sync_mss(newsk, dst_mtu(dst)); | 411 | dccp_sync_mss(newsk, dst_mtu(dst)); |
@@ -428,7 +428,7 @@ EXPORT_SYMBOL_GPL(dccp_v4_request_recv_sock); | |||
428 | static struct sock *dccp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) | 428 | static struct sock *dccp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) |
429 | { | 429 | { |
430 | const struct dccp_hdr *dh = dccp_hdr(skb); | 430 | const struct dccp_hdr *dh = dccp_hdr(skb); |
431 | const struct iphdr *iph = skb->nh.iph; | 431 | const struct iphdr *iph = ip_hdr(skb); |
432 | struct sock *nsk; | 432 | struct sock *nsk; |
433 | struct request_sock **prev; | 433 | struct request_sock **prev; |
434 | /* Find possible connection requests. */ | 434 | /* Find possible connection requests. */ |
@@ -460,8 +460,8 @@ static struct dst_entry* dccp_v4_route_skb(struct sock *sk, | |||
460 | struct rtable *rt; | 460 | struct rtable *rt; |
461 | struct flowi fl = { .oif = ((struct rtable *)skb->dst)->rt_iif, | 461 | struct flowi fl = { .oif = ((struct rtable *)skb->dst)->rt_iif, |
462 | .nl_u = { .ip4_u = | 462 | .nl_u = { .ip4_u = |
463 | { .daddr = skb->nh.iph->saddr, | 463 | { .daddr = ip_hdr(skb)->saddr, |
464 | .saddr = skb->nh.iph->daddr, | 464 | .saddr = ip_hdr(skb)->daddr, |
465 | .tos = RT_CONN_FLAGS(sk) } }, | 465 | .tos = RT_CONN_FLAGS(sk) } }, |
466 | .proto = sk->sk_protocol, | 466 | .proto = sk->sk_protocol, |
467 | .uli_u = { .ports = | 467 | .uli_u = { .ports = |
@@ -513,6 +513,7 @@ static void dccp_v4_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb) | |||
513 | { | 513 | { |
514 | int err; | 514 | int err; |
515 | struct dccp_hdr *rxdh = dccp_hdr(rxskb), *dh; | 515 | struct dccp_hdr *rxdh = dccp_hdr(rxskb), *dh; |
516 | const struct iphdr *rxiph; | ||
516 | const int dccp_hdr_reset_len = sizeof(struct dccp_hdr) + | 517 | const int dccp_hdr_reset_len = sizeof(struct dccp_hdr) + |
517 | sizeof(struct dccp_hdr_ext) + | 518 | sizeof(struct dccp_hdr_ext) + |
518 | sizeof(struct dccp_hdr_reset); | 519 | sizeof(struct dccp_hdr_reset); |
@@ -559,13 +560,13 @@ static void dccp_v4_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb) | |||
559 | dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), DCCP_SKB_CB(rxskb)->dccpd_seq); | 560 | dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), DCCP_SKB_CB(rxskb)->dccpd_seq); |
560 | 561 | ||
561 | dccp_csum_outgoing(skb); | 562 | dccp_csum_outgoing(skb); |
562 | dh->dccph_checksum = dccp_v4_csum_finish(skb, rxskb->nh.iph->saddr, | 563 | rxiph = ip_hdr(rxskb); |
563 | rxskb->nh.iph->daddr); | 564 | dh->dccph_checksum = dccp_v4_csum_finish(skb, rxiph->saddr, |
565 | rxiph->daddr); | ||
564 | 566 | ||
565 | bh_lock_sock(dccp_v4_ctl_socket->sk); | 567 | bh_lock_sock(dccp_v4_ctl_socket->sk); |
566 | err = ip_build_and_send_pkt(skb, dccp_v4_ctl_socket->sk, | 568 | err = ip_build_and_send_pkt(skb, dccp_v4_ctl_socket->sk, |
567 | rxskb->nh.iph->daddr, | 569 | rxiph->daddr, rxiph->saddr, NULL); |
568 | rxskb->nh.iph->saddr, NULL); | ||
569 | bh_unlock_sock(dccp_v4_ctl_socket->sk); | 570 | bh_unlock_sock(dccp_v4_ctl_socket->sk); |
570 | 571 | ||
571 | if (net_xmit_eval(err) == 0) { | 572 | if (net_xmit_eval(err) == 0) { |
@@ -640,8 +641,8 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) | |||
640 | goto drop_and_free; | 641 | goto drop_and_free; |
641 | 642 | ||
642 | ireq = inet_rsk(req); | 643 | ireq = inet_rsk(req); |
643 | ireq->loc_addr = skb->nh.iph->daddr; | 644 | ireq->loc_addr = ip_hdr(skb)->daddr; |
644 | ireq->rmt_addr = skb->nh.iph->saddr; | 645 | ireq->rmt_addr = ip_hdr(skb)->saddr; |
645 | ireq->opt = NULL; | 646 | ireq->opt = NULL; |
646 | 647 | ||
647 | /* | 648 | /* |
@@ -809,6 +810,7 @@ EXPORT_SYMBOL_GPL(dccp_invalid_packet); | |||
809 | static int dccp_v4_rcv(struct sk_buff *skb) | 810 | static int dccp_v4_rcv(struct sk_buff *skb) |
810 | { | 811 | { |
811 | const struct dccp_hdr *dh; | 812 | const struct dccp_hdr *dh; |
813 | const struct iphdr *iph; | ||
812 | struct sock *sk; | 814 | struct sock *sk; |
813 | int min_cov; | 815 | int min_cov; |
814 | 816 | ||
@@ -817,8 +819,9 @@ static int dccp_v4_rcv(struct sk_buff *skb) | |||
817 | if (dccp_invalid_packet(skb)) | 819 | if (dccp_invalid_packet(skb)) |
818 | goto discard_it; | 820 | goto discard_it; |
819 | 821 | ||
822 | iph = ip_hdr(skb); | ||
820 | /* Step 1: If header checksum is incorrect, drop packet and return */ | 823 | /* Step 1: If header checksum is incorrect, drop packet and return */ |
821 | if (dccp_v4_csum_finish(skb, skb->nh.iph->saddr, skb->nh.iph->daddr)) { | 824 | if (dccp_v4_csum_finish(skb, iph->saddr, iph->daddr)) { |
822 | DCCP_WARN("dropped packet with invalid checksum\n"); | 825 | DCCP_WARN("dropped packet with invalid checksum\n"); |
823 | goto discard_it; | 826 | goto discard_it; |
824 | } | 827 | } |
@@ -832,8 +835,8 @@ static int dccp_v4_rcv(struct sk_buff *skb) | |||
832 | "src=%u.%u.%u.%u@%-5d " | 835 | "src=%u.%u.%u.%u@%-5d " |
833 | "dst=%u.%u.%u.%u@%-5d seq=%llu", | 836 | "dst=%u.%u.%u.%u@%-5d seq=%llu", |
834 | dccp_packet_name(dh->dccph_type), | 837 | dccp_packet_name(dh->dccph_type), |
835 | NIPQUAD(skb->nh.iph->saddr), ntohs(dh->dccph_sport), | 838 | NIPQUAD(iph->saddr), ntohs(dh->dccph_sport), |
836 | NIPQUAD(skb->nh.iph->daddr), ntohs(dh->dccph_dport), | 839 | NIPQUAD(iph->daddr), ntohs(dh->dccph_dport), |
837 | (unsigned long long) DCCP_SKB_CB(skb)->dccpd_seq); | 840 | (unsigned long long) DCCP_SKB_CB(skb)->dccpd_seq); |
838 | 841 | ||
839 | if (dccp_packet_without_ack(skb)) { | 842 | if (dccp_packet_without_ack(skb)) { |
@@ -848,10 +851,8 @@ static int dccp_v4_rcv(struct sk_buff *skb) | |||
848 | /* Step 2: | 851 | /* Step 2: |
849 | * Look up flow ID in table and get corresponding socket */ | 852 | * Look up flow ID in table and get corresponding socket */ |
850 | sk = __inet_lookup(&dccp_hashinfo, | 853 | sk = __inet_lookup(&dccp_hashinfo, |
851 | skb->nh.iph->saddr, dh->dccph_sport, | 854 | iph->saddr, dh->dccph_sport, |
852 | skb->nh.iph->daddr, dh->dccph_dport, | 855 | iph->daddr, dh->dccph_dport, inet_iif(skb)); |
853 | inet_iif(skb)); | ||
854 | |||
855 | /* | 856 | /* |
856 | * Step 2: | 857 | * Step 2: |
857 | * If no socket ... | 858 | * If no socket ... |