]> www.infradead.org Git - users/hch/configfs.git/commit
tcp: count CLOSE-WAIT sockets for TCP_MIB_CURRESTAB
authorJason Xing <kernelxing@tencent.com>
Mon, 3 Jun 2024 17:02:16 +0000 (01:02 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 5 Jun 2024 11:32:46 +0000 (12:32 +0100)
commita46d0ea5c94205f40ecf912d1bb7806a8a64704f
tree5ef5c41c9c4ed5ebaf58281544c65b98f2e42670
parent712115a24b1a5318c10fc757d48d8f33815a6bfa
tcp: count CLOSE-WAIT sockets for TCP_MIB_CURRESTAB

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: 1da177e4c3f4 ("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>
net/ipv4/tcp.c