inet: includes a sock_common in request_sock
TCP listener refactoring, part 5 : We want to be able to insert request sockets (SYN_RECV) into main ehash table instead of the per listener hash table to allow RCU lookups and remove listener lock contention. This patch includes the needed struct sock_common in front of struct request_sock This means there is no more inet6_request_sock IPv6 specific structure. Following inet_request_sock fields were renamed as they became macros to reference fields from struct sock_common. Prefix ir_ was chosen to avoid name collisions. loc_port -> ir_loc_port loc_addr -> ir_loc_addr rmt_addr -> ir_rmt_addr rmt_port -> ir_rmt_port iif -> ir_iif Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
8a29111c7c
commit
634fb979e8
@@ -835,11 +835,11 @@ static int tcp_v4_send_synack(struct sock *sk, struct dst_entry *dst,
|
||||
skb = tcp_make_synack(sk, dst, req, NULL);
|
||||
|
||||
if (skb) {
|
||||
__tcp_v4_send_check(skb, ireq->loc_addr, ireq->rmt_addr);
|
||||
__tcp_v4_send_check(skb, ireq->ir_loc_addr, ireq->ir_rmt_addr);
|
||||
|
||||
skb_set_queue_mapping(skb, queue_mapping);
|
||||
err = ip_build_and_send_pkt(skb, sk, ireq->loc_addr,
|
||||
ireq->rmt_addr,
|
||||
err = ip_build_and_send_pkt(skb, sk, ireq->ir_loc_addr,
|
||||
ireq->ir_rmt_addr,
|
||||
ireq->opt);
|
||||
err = net_xmit_eval(err);
|
||||
if (!tcp_rsk(req)->snt_synack && !err)
|
||||
@@ -972,7 +972,7 @@ static struct tcp_md5sig_key *tcp_v4_reqsk_md5_lookup(struct sock *sk,
|
||||
{
|
||||
union tcp_md5_addr *addr;
|
||||
|
||||
addr = (union tcp_md5_addr *)&inet_rsk(req)->rmt_addr;
|
||||
addr = (union tcp_md5_addr *)&inet_rsk(req)->ir_rmt_addr;
|
||||
return tcp_md5_do_lookup(sk, addr, AF_INET);
|
||||
}
|
||||
|
||||
@@ -1149,8 +1149,8 @@ int tcp_v4_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key,
|
||||
saddr = inet_sk(sk)->inet_saddr;
|
||||
daddr = inet_sk(sk)->inet_daddr;
|
||||
} else if (req) {
|
||||
saddr = inet_rsk(req)->loc_addr;
|
||||
daddr = inet_rsk(req)->rmt_addr;
|
||||
saddr = inet_rsk(req)->ir_loc_addr;
|
||||
daddr = inet_rsk(req)->ir_rmt_addr;
|
||||
} else {
|
||||
const struct iphdr *iph = ip_hdr(skb);
|
||||
saddr = iph->saddr;
|
||||
@@ -1366,8 +1366,8 @@ static int tcp_v4_conn_req_fastopen(struct sock *sk,
|
||||
kfree_skb(skb_synack);
|
||||
return -1;
|
||||
}
|
||||
err = ip_build_and_send_pkt(skb_synack, sk, ireq->loc_addr,
|
||||
ireq->rmt_addr, ireq->opt);
|
||||
err = ip_build_and_send_pkt(skb_synack, sk, ireq->ir_loc_addr,
|
||||
ireq->ir_rmt_addr, ireq->opt);
|
||||
err = net_xmit_eval(err);
|
||||
if (!err)
|
||||
tcp_rsk(req)->snt_synack = tcp_time_stamp;
|
||||
@@ -1502,8 +1502,8 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||
tcp_openreq_init(req, &tmp_opt, skb);
|
||||
|
||||
ireq = inet_rsk(req);
|
||||
ireq->loc_addr = daddr;
|
||||
ireq->rmt_addr = saddr;
|
||||
ireq->ir_loc_addr = daddr;
|
||||
ireq->ir_rmt_addr = saddr;
|
||||
ireq->no_srccheck = inet_sk(sk)->transparent;
|
||||
ireq->opt = tcp_v4_save_options(skb);
|
||||
|
||||
@@ -1578,15 +1578,15 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||
fastopen_cookie_present(&valid_foc) ? &valid_foc : NULL);
|
||||
|
||||
if (skb_synack) {
|
||||
__tcp_v4_send_check(skb_synack, ireq->loc_addr, ireq->rmt_addr);
|
||||
__tcp_v4_send_check(skb_synack, ireq->ir_loc_addr, ireq->ir_rmt_addr);
|
||||
skb_set_queue_mapping(skb_synack, skb_get_queue_mapping(skb));
|
||||
} else
|
||||
goto drop_and_free;
|
||||
|
||||
if (likely(!do_fastopen)) {
|
||||
int err;
|
||||
err = ip_build_and_send_pkt(skb_synack, sk, ireq->loc_addr,
|
||||
ireq->rmt_addr, ireq->opt);
|
||||
err = ip_build_and_send_pkt(skb_synack, sk, ireq->ir_loc_addr,
|
||||
ireq->ir_rmt_addr, ireq->opt);
|
||||
err = net_xmit_eval(err);
|
||||
if (err || want_cookie)
|
||||
goto drop_and_free;
|
||||
@@ -1644,9 +1644,9 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
|
||||
newtp = tcp_sk(newsk);
|
||||
newinet = inet_sk(newsk);
|
||||
ireq = inet_rsk(req);
|
||||
newinet->inet_daddr = ireq->rmt_addr;
|
||||
newinet->inet_rcv_saddr = ireq->loc_addr;
|
||||
newinet->inet_saddr = ireq->loc_addr;
|
||||
newinet->inet_daddr = ireq->ir_rmt_addr;
|
||||
newinet->inet_rcv_saddr = ireq->ir_loc_addr;
|
||||
newinet->inet_saddr = ireq->ir_loc_addr;
|
||||
inet_opt = ireq->opt;
|
||||
rcu_assign_pointer(newinet->inet_opt, inet_opt);
|
||||
ireq->opt = NULL;
|
||||
@@ -2548,10 +2548,10 @@ static void get_openreq4(const struct sock *sk, const struct request_sock *req,
|
||||
seq_printf(f, "%4d: %08X:%04X %08X:%04X"
|
||||
" %02X %08X:%08X %02X:%08lX %08X %5u %8d %u %d %pK%n",
|
||||
i,
|
||||
ireq->loc_addr,
|
||||
ireq->ir_loc_addr,
|
||||
ntohs(inet_sk(sk)->inet_sport),
|
||||
ireq->rmt_addr,
|
||||
ntohs(ireq->rmt_port),
|
||||
ireq->ir_rmt_addr,
|
||||
ntohs(ireq->ir_rmt_port),
|
||||
TCP_SYN_RECV,
|
||||
0, 0, /* could print option size, but that is af dependent. */
|
||||
1, /* timers active (only the expire timer) */
|
||||
|
Reference in New Issue
Block a user