diff options
author | Octavian Purdila <octavian.purdila@intel.com> | 2014-06-25 10:09:58 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-06-27 18:53:36 -0400 |
commit | d6274bd8d6ea84b7b54cc1c3fde6bcb6143b104f (patch) | |
tree | 15c41b8907768843f435e2cbe01b998970cdb06f /net/ipv6/tcp_ipv6.c | |
parent | 936b8bdb53f90840e658904530f9db8d02ac804b (diff) |
tcp: add send_synack method to tcp_request_sock_ops
Create a new tcp_request_sock_ops method to unify the IPv4/IPv6
signature for tcp_v[46]_send_synack. This allows us to later unify
tcp_v4_rtx_synack with tcp_v6_rtx_synack and tcp_v4_conn_request with
tcp_v4_conn_request.
Signed-off-by: Octavian Purdila <octavian.purdila@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 2fd886fe8340..210b6105afed 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -470,13 +470,14 @@ out: | |||
470 | 470 | ||
471 | 471 | ||
472 | static int tcp_v6_send_synack(struct sock *sk, struct dst_entry *dst, | 472 | static int tcp_v6_send_synack(struct sock *sk, struct dst_entry *dst, |
473 | struct flowi6 *fl6, | 473 | struct flowi *fl, |
474 | struct request_sock *req, | 474 | struct request_sock *req, |
475 | u16 queue_mapping, | 475 | u16 queue_mapping, |
476 | struct tcp_fastopen_cookie *foc) | 476 | struct tcp_fastopen_cookie *foc) |
477 | { | 477 | { |
478 | struct inet_request_sock *ireq = inet_rsk(req); | 478 | struct inet_request_sock *ireq = inet_rsk(req); |
479 | struct ipv6_pinfo *np = inet6_sk(sk); | 479 | struct ipv6_pinfo *np = inet6_sk(sk); |
480 | struct flowi6 *fl6 = &fl->u.ip6; | ||
480 | struct sk_buff *skb; | 481 | struct sk_buff *skb; |
481 | int err = -ENOMEM; | 482 | int err = -ENOMEM; |
482 | 483 | ||
@@ -507,10 +508,11 @@ done: | |||
507 | 508 | ||
508 | static int tcp_v6_rtx_synack(struct sock *sk, struct request_sock *req) | 509 | static int tcp_v6_rtx_synack(struct sock *sk, struct request_sock *req) |
509 | { | 510 | { |
510 | struct flowi6 fl6; | 511 | const struct tcp_request_sock_ops *af_ops = tcp_rsk(req)->af_specific; |
512 | struct flowi fl; | ||
511 | int res; | 513 | int res; |
512 | 514 | ||
513 | res = tcp_v6_send_synack(sk, NULL, &fl6, req, 0, NULL); | 515 | res = af_ops->send_synack(sk, NULL, &fl, req, 0, NULL); |
514 | if (!res) { | 516 | if (!res) { |
515 | TCP_INC_STATS_BH(sock_net(sk), TCP_MIB_RETRANSSEGS); | 517 | TCP_INC_STATS_BH(sock_net(sk), TCP_MIB_RETRANSSEGS); |
516 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPSYNRETRANS); | 518 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPSYNRETRANS); |
@@ -754,7 +756,6 @@ static struct dst_entry *tcp_v6_route_req(struct sock *sk, struct flowi *fl, | |||
754 | return inet6_csk_route_req(sk, &fl->u.ip6, req); | 756 | return inet6_csk_route_req(sk, &fl->u.ip6, req); |
755 | } | 757 | } |
756 | 758 | ||
757 | |||
758 | struct request_sock_ops tcp6_request_sock_ops __read_mostly = { | 759 | struct request_sock_ops tcp6_request_sock_ops __read_mostly = { |
759 | .family = AF_INET6, | 760 | .family = AF_INET6, |
760 | .obj_size = sizeof(struct tcp6_request_sock), | 761 | .obj_size = sizeof(struct tcp6_request_sock), |
@@ -776,6 +777,7 @@ static const struct tcp_request_sock_ops tcp_request_sock_ipv6_ops = { | |||
776 | #endif | 777 | #endif |
777 | .route_req = tcp_v6_route_req, | 778 | .route_req = tcp_v6_route_req, |
778 | .init_seq = tcp_v6_init_sequence, | 779 | .init_seq = tcp_v6_init_sequence, |
780 | .send_synack = tcp_v6_send_synack, | ||
779 | }; | 781 | }; |
780 | 782 | ||
781 | static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win, | 783 | static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win, |
@@ -1128,8 +1130,8 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
1128 | tcp_openreq_init_rwin(req, sk, dst); | 1130 | tcp_openreq_init_rwin(req, sk, dst); |
1129 | fastopen = !want_cookie && | 1131 | fastopen = !want_cookie && |
1130 | tcp_try_fastopen(sk, skb, req, &foc, dst); | 1132 | tcp_try_fastopen(sk, skb, req, &foc, dst); |
1131 | err = tcp_v6_send_synack(sk, dst, &fl6, req, | 1133 | err = af_ops->send_synack(sk, dst, (struct flowi *)&fl6, req, |
1132 | skb_get_queue_mapping(skb), &foc); | 1134 | skb_get_queue_mapping(skb), &foc); |
1133 | if (!fastopen) { | 1135 | if (!fastopen) { |
1134 | if (err || want_cookie) | 1136 | if (err || want_cookie) |
1135 | goto drop_and_free; | 1137 | goto drop_and_free; |