Commit c449d5f3 authored by Jiayuan Chen's avatar Jiayuan Chen Committed by Jakub Kicinski
Browse files

tcp: add LINUX_MIB_PAWS_TW_REJECTED counter



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: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarJiayuan Chen <jiayuan.chen@linux.dev>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20250409112614.16153-3-jiayuan.chen@linux.dev


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 04271411
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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,
	/**
+1 −0
Original line number Diff line number Diff line
@@ -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 */
+1 −0
Original line number Diff line number Diff line
@@ -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),
+1 −1
Original line number Diff line number Diff line
@@ -248,7 +248,7 @@ tcp_timewait_state_process(struct inet_timewait_sock *tw, struct sk_buff *skb,

	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) {