Commit c380d37e authored by Richard Sailer's avatar Richard Sailer Committed by David S. Miller

tcp_timer.c: Add kernel-doc function descriptions

This adds kernel-doc style descriptions for 6 functions and
fixes 1 typo.
Signed-off-by: default avatarRichard Sailer <richard@weltraumpflege.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7dc09934
...@@ -24,6 +24,13 @@ ...@@ -24,6 +24,13 @@
int sysctl_tcp_thin_linear_timeouts __read_mostly; int sysctl_tcp_thin_linear_timeouts __read_mostly;
/**
* tcp_write_err() - close socket and save error info
* @sk: The socket the error has appeared on.
*
* Returns: Nothing (void)
*/
static void tcp_write_err(struct sock *sk) static void tcp_write_err(struct sock *sk)
{ {
sk->sk_err = sk->sk_err_soft ? : ETIMEDOUT; sk->sk_err = sk->sk_err_soft ? : ETIMEDOUT;
...@@ -33,16 +40,21 @@ static void tcp_write_err(struct sock *sk) ...@@ -33,16 +40,21 @@ static void tcp_write_err(struct sock *sk)
__NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPABORTONTIMEOUT); __NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPABORTONTIMEOUT);
} }
/* Do not allow orphaned sockets to eat all our resources. /**
* This is direct violation of TCP specs, but it is required * tcp_out_of_resources() - Close socket if out of resources
* to prevent DoS attacks. It is called when a retransmission timeout * @sk: pointer to current socket
* or zero probe timeout occurs on orphaned socket. * @do_reset: send a last packet with reset flag
* *
* Criteria is still not confirmed experimentally and may change. * Do not allow orphaned sockets to eat all our resources.
* We kill the socket, if: * This is direct violation of TCP specs, but it is required
* 1. If number of orphaned sockets exceeds an administratively configured * to prevent DoS attacks. It is called when a retransmission timeout
* limit. * or zero probe timeout occurs on orphaned socket.
* 2. If we have strong memory pressure. *
* Criteria is still not confirmed experimentally and may change.
* We kill the socket, if:
* 1. If number of orphaned sockets exceeds an administratively configured
* limit.
* 2. If we have strong memory pressure.
*/ */
static int tcp_out_of_resources(struct sock *sk, bool do_reset) static int tcp_out_of_resources(struct sock *sk, bool do_reset)
{ {
...@@ -74,7 +86,11 @@ static int tcp_out_of_resources(struct sock *sk, bool do_reset) ...@@ -74,7 +86,11 @@ static int tcp_out_of_resources(struct sock *sk, bool do_reset)
return 0; return 0;
} }
/* Calculate maximal number or retries on an orphaned socket. */ /**
* tcp_orphan_retries() - Returns maximal number of retries on an orphaned socket
* @sk: Pointer to the current socket.
* @alive: bool, socket alive state
*/
static int tcp_orphan_retries(struct sock *sk, bool alive) static int tcp_orphan_retries(struct sock *sk, bool alive)
{ {
int retries = sock_net(sk)->ipv4.sysctl_tcp_orphan_retries; /* May be zero. */ int retries = sock_net(sk)->ipv4.sysctl_tcp_orphan_retries; /* May be zero. */
...@@ -115,10 +131,22 @@ static void tcp_mtu_probing(struct inet_connection_sock *icsk, struct sock *sk) ...@@ -115,10 +131,22 @@ static void tcp_mtu_probing(struct inet_connection_sock *icsk, struct sock *sk)
} }
} }
/* This function calculates a "timeout" which is equivalent to the timeout of a
* TCP connection after "boundary" unsuccessful, exponentially backed-off /**
* retransmits_timed_out() - returns true if this connection has timed out
* @sk: The current socket
* @boundary: max number of retransmissions
* @timeout: A custom timeout value.
* If set to 0 the default timeout is calculated and used.
* Using TCP_RTO_MIN and the number of unsuccessful retransmits.
* @syn_set: true if the SYN Bit was set.
*
* The default "timeout" value this function can calculate and use
* is equivalent to the timeout of a TCP Connection
* after "boundary" unsuccessful, exponentially backed-off
* retransmissions with an initial RTO of TCP_RTO_MIN or TCP_TIMEOUT_INIT if * retransmissions with an initial RTO of TCP_RTO_MIN or TCP_TIMEOUT_INIT if
* syn_set flag is set. * syn_set flag is set.
*
*/ */
static bool retransmits_timed_out(struct sock *sk, static bool retransmits_timed_out(struct sock *sk,
unsigned int boundary, unsigned int boundary,
...@@ -257,6 +285,16 @@ void tcp_delack_timer_handler(struct sock *sk) ...@@ -257,6 +285,16 @@ void tcp_delack_timer_handler(struct sock *sk)
sk_mem_reclaim(sk); sk_mem_reclaim(sk);
} }
/**
* tcp_delack_timer() - The TCP delayed ACK timeout handler
* @data: Pointer to the current socket. (gets casted to struct sock *)
*
* This function gets (indirectly) called when the kernel timer for a TCP packet
* of this socket expires. Calls tcp_delack_timer_handler() to do the actual work.
*
* Returns: Nothing (void)
*/
static void tcp_delack_timer(unsigned long data) static void tcp_delack_timer(unsigned long data)
{ {
struct sock *sk = (struct sock *)data; struct sock *sk = (struct sock *)data;
...@@ -350,10 +388,18 @@ static void tcp_fastopen_synack_timer(struct sock *sk) ...@@ -350,10 +388,18 @@ static void tcp_fastopen_synack_timer(struct sock *sk)
TCP_TIMEOUT_INIT << req->num_timeout, TCP_RTO_MAX); TCP_TIMEOUT_INIT << req->num_timeout, TCP_RTO_MAX);
} }
/*
* The TCP retransmit timer.
*/
/**
* tcp_retransmit_timer() - The TCP retransmit timeout handler
* @sk: Pointer to the current socket.
*
* This function gets called when the kernel timer for a TCP packet
* of this socket expires.
*
* It handles retransmission, timer adjustment and other necesarry measures.
*
* Returns: Nothing (void)
*/
void tcp_retransmit_timer(struct sock *sk) void tcp_retransmit_timer(struct sock *sk)
{ {
struct tcp_sock *tp = tcp_sk(sk); struct tcp_sock *tp = tcp_sk(sk);
...@@ -494,7 +540,8 @@ void tcp_retransmit_timer(struct sock *sk) ...@@ -494,7 +540,8 @@ void tcp_retransmit_timer(struct sock *sk)
out:; out:;
} }
/* Called with BH disabled */ /* Called with bottom-half processing disabled.
Called by tcp_write_timer() */
void tcp_write_timer_handler(struct sock *sk) void tcp_write_timer_handler(struct sock *sk)
{ {
struct inet_connection_sock *icsk = inet_csk(sk); struct inet_connection_sock *icsk = inet_csk(sk);
...@@ -539,7 +586,7 @@ static void tcp_write_timer(unsigned long data) ...@@ -539,7 +586,7 @@ static void tcp_write_timer(unsigned long data)
if (!sock_owned_by_user(sk)) { if (!sock_owned_by_user(sk)) {
tcp_write_timer_handler(sk); tcp_write_timer_handler(sk);
} else { } else {
/* deleguate our work to tcp_release_cb() */ /* delegate our work to tcp_release_cb() */
if (!test_and_set_bit(TCP_WRITE_TIMER_DEFERRED, &tcp_sk(sk)->tsq_flags)) if (!test_and_set_bit(TCP_WRITE_TIMER_DEFERRED, &tcp_sk(sk)->tsq_flags))
sock_hold(sk); sock_hold(sk);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment