aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/tcp_ipv6.c
diff options
context:
space:
mode:
authorOctavian Purdila <octavian.purdila@intel.com>2014-06-25 10:09:58 -0400
committerDavid S. Miller <davem@davemloft.net>2014-06-27 18:53:36 -0400
commitd6274bd8d6ea84b7b54cc1c3fde6bcb6143b104f (patch)
tree15c41b8907768843f435e2cbe01b998970cdb06f /net/ipv6/tcp_ipv6.c
parent936b8bdb53f90840e658904530f9db8d02ac804b (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.c14
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
472static int tcp_v6_send_synack(struct sock *sk, struct dst_entry *dst, 472static 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
508static int tcp_v6_rtx_synack(struct sock *sk, struct request_sock *req) 509static 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
758struct request_sock_ops tcp6_request_sock_ops __read_mostly = { 759struct 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
781static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win, 783static 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;