[INET]: Remove struct dst_entry *dst from request_sock_ops.rtx_syn_ack.
It looks like dst parameter is used in this API due to historical reasons. Actually, it is really used in the direct call to tcp_v4_send_synack only. So, create a wrapper for tcp_v4_send_synack and remove dst from rtx_syn_ack. Signed-off-by: Denis V. Lunev <den@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
58fbbed4fb
commit
fd80eb942a
@@ -224,8 +224,7 @@ out:
|
||||
}
|
||||
|
||||
|
||||
static int dccp_v6_send_response(struct sock *sk, struct request_sock *req,
|
||||
struct dst_entry *dst)
|
||||
static int dccp_v6_send_response(struct sock *sk, struct request_sock *req)
|
||||
{
|
||||
struct inet6_request_sock *ireq6 = inet6_rsk(req);
|
||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
@@ -234,6 +233,7 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req,
|
||||
struct in6_addr *final_p = NULL, final;
|
||||
struct flowi fl;
|
||||
int err = -1;
|
||||
struct dst_entry *dst;
|
||||
|
||||
memset(&fl, 0, sizeof(fl));
|
||||
fl.proto = IPPROTO_DCCP;
|
||||
@@ -245,29 +245,27 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req,
|
||||
fl.fl_ip_sport = inet_sk(sk)->sport;
|
||||
security_req_classify_flow(req, &fl);
|
||||
|
||||
if (dst == NULL) {
|
||||
opt = np->opt;
|
||||
opt = np->opt;
|
||||
|
||||
if (opt != NULL && opt->srcrt != NULL) {
|
||||
const struct rt0_hdr *rt0 = (struct rt0_hdr *)opt->srcrt;
|
||||
if (opt != NULL && opt->srcrt != NULL) {
|
||||
const struct rt0_hdr *rt0 = (struct rt0_hdr *)opt->srcrt;
|
||||
|
||||
ipv6_addr_copy(&final, &fl.fl6_dst);
|
||||
ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
|
||||
final_p = &final;
|
||||
}
|
||||
|
||||
err = ip6_dst_lookup(sk, &dst, &fl);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
if (final_p)
|
||||
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
||||
|
||||
err = xfrm_lookup(&dst, &fl, sk, 0);
|
||||
if (err < 0)
|
||||
goto done;
|
||||
ipv6_addr_copy(&final, &fl.fl6_dst);
|
||||
ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
|
||||
final_p = &final;
|
||||
}
|
||||
|
||||
err = ip6_dst_lookup(sk, &dst, &fl);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
if (final_p)
|
||||
ipv6_addr_copy(&fl.fl6_dst, final_p);
|
||||
|
||||
err = xfrm_lookup(&dst, &fl, sk, 0);
|
||||
if (err < 0)
|
||||
goto done;
|
||||
|
||||
skb = dccp_make_response(sk, dst, req);
|
||||
if (skb != NULL) {
|
||||
struct dccp_hdr *dh = dccp_hdr(skb);
|
||||
@@ -448,7 +446,7 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||
dreq->dreq_iss = dccp_v6_init_sequence(skb);
|
||||
dreq->dreq_service = service;
|
||||
|
||||
if (dccp_v6_send_response(sk, req, NULL))
|
||||
if (dccp_v6_send_response(sk, req))
|
||||
goto drop_and_free;
|
||||
|
||||
inet6_csk_reqsk_queue_hash_add(sk, req, DCCP_TIMEOUT_INIT);
|
||||
|
Reference in New Issue
Block a user