mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
tcp: count CLOSE-WAIT sockets for TCP_MIB_CURRESTAB
[ Upstream commita46d0ea5c9
] According to RFC 1213, we should also take CLOSE-WAIT sockets into consideration: "tcpCurrEstab OBJECT-TYPE ... The number of TCP connections for which the current state is either ESTABLISHED or CLOSE- WAIT." After this, CurrEstab counter will display the total number of ESTABLISHED and CLOSE-WAIT sockets. The logic of counting When we increment the counter? a) if we change the state to ESTABLISHED. b) if we change the state from SYN-RECEIVED to CLOSE-WAIT. When we decrement the counter? a) if the socket leaves ESTABLISHED and will never go into CLOSE-WAIT, say, on the client side, changing from ESTABLISHED to FIN-WAIT-1. b) if the socket leaves CLOSE-WAIT, say, on the server side, changing from CLOSE-WAIT to LAST-ACK. Please note: there are two chances that old state of socket can be changed to CLOSE-WAIT in tcp_fin(). One is SYN-RECV, the other is ESTABLISHED. So we have to take care of the former case. Fixes:1da177e4c3
("Linux-2.6.12-rc2") Signed-off-by: Jason Xing <kernelxing@tencent.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
924f7bbfc5
commit
acdf17546e
@ -2640,6 +2640,10 @@ void tcp_set_state(struct sock *sk, int state)
|
||||
if (oldstate != TCP_ESTABLISHED)
|
||||
TCP_INC_STATS(sock_net(sk), TCP_MIB_CURRESTAB);
|
||||
break;
|
||||
case TCP_CLOSE_WAIT:
|
||||
if (oldstate == TCP_SYN_RECV)
|
||||
TCP_INC_STATS(sock_net(sk), TCP_MIB_CURRESTAB);
|
||||
break;
|
||||
|
||||
case TCP_CLOSE:
|
||||
if (oldstate == TCP_CLOSE_WAIT || oldstate == TCP_ESTABLISHED)
|
||||
@ -2651,7 +2655,7 @@ void tcp_set_state(struct sock *sk, int state)
|
||||
inet_put_port(sk);
|
||||
fallthrough;
|
||||
default:
|
||||
if (oldstate == TCP_ESTABLISHED)
|
||||
if (oldstate == TCP_ESTABLISHED || oldstate == TCP_CLOSE_WAIT)
|
||||
TCP_DEC_STATS(sock_net(sk), TCP_MIB_CURRESTAB);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user