]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tcp: add LINUX_MIB_PAWS_TW_REJECTED counter
authorJiayuan Chen <jiayuan.chen@linux.dev>
Wed, 9 Apr 2025 11:26:05 +0000 (19:26 +0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 11 Apr 2025 01:29:26 +0000 (18:29 -0700)
When TCP is in TIME_WAIT state, PAWS verification uses
LINUX_PAWSESTABREJECTED, which is ambiguous and cannot be distinguished
from other PAWS verification processes.

We added a new counter, like the existing PAWS_OLD_ACK one.

Also we update the doc with previously missing PAWS_OLD_ACK.

usage:
'''
nstat -az | grep PAWSTimewait
TcpExtPAWSTimewait              1                  0.0
'''

Suggested-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20250409112614.16153-3-jiayuan.chen@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Documentation/networking/net_cachelines/snmp.rst
include/net/dropreason-core.h
include/uapi/linux/snmp.h
net/ipv4/proc.c
net/ipv4/tcp_minisocks.c

index bc96efc92cf5b888c1e441412c78f3974be1f587..bd44b3eebbef75352599883b9dde36e7889d4120 100644 (file)
@@ -37,6 +37,8 @@ unsigned_long  LINUX_MIB_TIMEWAITKILLED
 unsigned_long  LINUX_MIB_PAWSACTIVEREJECTED
 unsigned_long  LINUX_MIB_PAWSESTABREJECTED
 unsigned_long  LINUX_MIB_TSECR_REJECTED
+unsigned_long  LINUX_MIB_PAWS_OLD_ACK
+unsigned_long  LINUX_MIB_PAWS_TW_REJECTED
 unsigned_long  LINUX_MIB_DELAYEDACKLOST
 unsigned_long  LINUX_MIB_LISTENOVERFLOWS
 unsigned_long  LINUX_MIB_LISTENDROPS
index 9701d7f936f6894772369e0a881d5361f68e4aa2..bea77934a235c8c8bb50fec8cc955ead46ea578f 100644 (file)
@@ -287,6 +287,7 @@ enum skb_drop_reason {
        /**
         * @SKB_DROP_REASON_TCP_RFC7323_TW_PAWS: PAWS check, socket is in
         * TIME_WAIT state.
+        * Corresponds to LINUX_MIB_PAWS_TW_REJECTED.
         */
        SKB_DROP_REASON_TCP_RFC7323_TW_PAWS,
        /**
index ec47f9b68a1bfb1908f2197555c876424481ab1c..1d234d7e1892778c5ff04c240f8360608f391401 100644 (file)
@@ -188,6 +188,7 @@ enum
        LINUX_MIB_PAWSESTABREJECTED,            /* PAWSEstabRejected */
        LINUX_MIB_TSECRREJECTED,                /* TSEcrRejected */
        LINUX_MIB_PAWS_OLD_ACK,                 /* PAWSOldAck */
+       LINUX_MIB_PAWS_TW_REJECTED,             /* PAWSTimewait */
        LINUX_MIB_DELAYEDACKS,                  /* DelayedACKs */
        LINUX_MIB_DELAYEDACKLOCKED,             /* DelayedACKLocked */
        LINUX_MIB_DELAYEDACKLOST,               /* DelayedACKLost */
index 10cbeb76c27456ae7f220acf0a22203bad6bbc53..ea2f01584379a59a0a01226ae0f45d3614733fef 100644 (file)
@@ -191,6 +191,7 @@ static const struct snmp_mib snmp4_net_list[] = {
        SNMP_MIB_ITEM("PAWSEstab", LINUX_MIB_PAWSESTABREJECTED),
        SNMP_MIB_ITEM("TSEcrRejected", LINUX_MIB_TSECRREJECTED),
        SNMP_MIB_ITEM("PAWSOldAck", LINUX_MIB_PAWS_OLD_ACK),
+       SNMP_MIB_ITEM("PAWSTimewait", LINUX_MIB_PAWS_TW_REJECTED),
        SNMP_MIB_ITEM("DelayedACKs", LINUX_MIB_DELAYEDACKS),
        SNMP_MIB_ITEM("DelayedACKLocked", LINUX_MIB_DELAYEDACKLOCKED),
        SNMP_MIB_ITEM("DelayedACKLost", LINUX_MIB_DELAYEDACKLOST),
index 27511bf58c0f58119e6d378f6c7a0209523af2ed..43d7852ce07e0440c7f43b7509df9229e666fd19 100644 (file)
@@ -248,7 +248,7 @@ kill:
 
        if (paws_reject) {
                *drop_reason = SKB_DROP_REASON_TCP_RFC7323_TW_PAWS;
-               __NET_INC_STATS(twsk_net(tw), LINUX_MIB_PAWSESTABREJECTED);
+               __NET_INC_STATS(twsk_net(tw), LINUX_MIB_PAWS_TW_REJECTED);
        }
 
        if (!th->rst) {