|
@@ -363,6 +363,70 @@ static int retrans_to_secs(u8 retrans, int timeout, int rto_max)
|
|
|
return period;
|
|
|
}
|
|
|
|
|
|
+/* Address-family independent initialization for a tcp_sock.
|
|
|
+ *
|
|
|
+ * NOTE: A lot of things set to zero explicitly by call to
|
|
|
+ * sk_alloc() so need not be done here.
|
|
|
+ */
|
|
|
+void tcp_init_sock(struct sock *sk)
|
|
|
+{
|
|
|
+ struct inet_connection_sock *icsk = inet_csk(sk);
|
|
|
+ struct tcp_sock *tp = tcp_sk(sk);
|
|
|
+
|
|
|
+ skb_queue_head_init(&tp->out_of_order_queue);
|
|
|
+ tcp_init_xmit_timers(sk);
|
|
|
+ tcp_prequeue_init(tp);
|
|
|
+
|
|
|
+ icsk->icsk_rto = TCP_TIMEOUT_INIT;
|
|
|
+ tp->mdev = TCP_TIMEOUT_INIT;
|
|
|
+
|
|
|
+ /* So many TCP implementations out there (incorrectly) count the
|
|
|
+ * initial SYN frame in their delayed-ACK and congestion control
|
|
|
+ * algorithms that we must have the following bandaid to talk
|
|
|
+ * efficiently to them. -DaveM
|
|
|
+ */
|
|
|
+ tp->snd_cwnd = TCP_INIT_CWND;
|
|
|
+
|
|
|
+ /* See draft-stevens-tcpca-spec-01 for discussion of the
|
|
|
+ * initialization of these values.
|
|
|
+ */
|
|
|
+ tp->snd_ssthresh = TCP_INFINITE_SSTHRESH;
|
|
|
+ tp->snd_cwnd_clamp = ~0;
|
|
|
+ tp->mss_cache = TCP_MSS_DEFAULT;
|
|
|
+
|
|
|
+ tp->reordering = sysctl_tcp_reordering;
|
|
|
+ icsk->icsk_ca_ops = &tcp_init_congestion_ops;
|
|
|
+
|
|
|
+ sk->sk_state = TCP_CLOSE;
|
|
|
+
|
|
|
+ sk->sk_write_space = sk_stream_write_space;
|
|
|
+ sock_set_flag(sk, SOCK_USE_WRITE_QUEUE);
|
|
|
+
|
|
|
+ icsk->icsk_sync_mss = tcp_sync_mss;
|
|
|
+
|
|
|
+ /* TCP Cookie Transactions */
|
|
|
+ if (sysctl_tcp_cookie_size > 0) {
|
|
|
+ /* Default, cookies without s_data_payload. */
|
|
|
+ tp->cookie_values =
|
|
|
+ kzalloc(sizeof(*tp->cookie_values),
|
|
|
+ sk->sk_allocation);
|
|
|
+ if (tp->cookie_values != NULL)
|
|
|
+ kref_init(&tp->cookie_values->kref);
|
|
|
+ }
|
|
|
+ /* Presumed zeroed, in order of appearance:
|
|
|
+ * cookie_in_always, cookie_out_never,
|
|
|
+ * s_data_constant, s_data_in, s_data_out
|
|
|
+ */
|
|
|
+ sk->sk_sndbuf = sysctl_tcp_wmem[1];
|
|
|
+ sk->sk_rcvbuf = sysctl_tcp_rmem[1];
|
|
|
+
|
|
|
+ local_bh_disable();
|
|
|
+ sock_update_memcg(sk);
|
|
|
+ sk_sockets_allocated_inc(sk);
|
|
|
+ local_bh_enable();
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(tcp_init_sock);
|
|
|
+
|
|
|
/*
|
|
|
* Wait for a TCP event.
|
|
|
*
|