inet_sk_diag_fill() populates r->idiag_timer with the following precedence order: 1 - Retransmit timer. 4 - Probe0 timer. 2 - Keepalive timer. This patch adds a new value, last in the list, if other timers are not active. 5 - Delayed ACK timer. A corresponding iproute2 patch is needed to replace "unknown" with "delack": ESTAB 10 0 [2002:a05:6830:1f86::]:12875 [2002:a05:6830:1f85::]:50438 timer:(unknown,003ms,0) ino:152178 sk:3004 cgroup:unreachable:189 <-> skmem:(r1344,rb12780520,t0,tb262144,f2752,w0,o250,bl0,d0) ts usec_ts sack ecnseen bbr2s wscale:12,12 rto:10 rtt:4.073/0.205 ato:4 mss:4096 pmtu:5000 rcvmss:536 advmss:4096 cwnd:48 ssthresh:48 bytes_sent:288980 bytes_retrans:20 bytes_acked:288960 bytes_received:288970 segs_out:28986 segs_in:30626 data_segs_out:28898 data_segs_in:28897 bbr2:(bw:575Mbps,mrtt:0.049,bw_hi:1.48e+08Tbps,inflight_hi:48, extra_acked:1,mode:2,phase:PROBE_BW_UP,pacing_gain:1.25,cwnd_gain:2.25) send 386Mbps lastsnd:5 lastrcv:1 lastack:1 pacing_rate 711Mbps delivery_rate 575Mbps delivered:28898 app_limited busy:91010ms retrans:0/2 dsack_dups:1 rcv_rtt:151640 rcv_space:266250 rcv_ssthresh:265904 minrtt:0.049 snd_wnd:270336 rcv_wnd:266240 rehash:1 Signed-off-by: Eric Dumazet --- net/ipv4/inet_diag.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c index 9d215485b5c7e7ba29dd53c924f0245439d74af5..e4cb18061aefcc22df04644c00bf5c7db4e150d2 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c @@ -298,6 +298,10 @@ int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk, r->idiag_retrans = READ_ONCE(icsk->icsk_probes_out); r->idiag_expires = jiffies_delta_to_msecs(icsk->icsk_keepalive_timer.expires - jiffies); + } else if (timer_pending(&icsk->icsk_delack_timer)) { + r->idiag_timer = 5; + r->idiag_expires = + jiffies_delta_to_msecs(icsk_delack_timeout(icsk) - jiffies); } if ((ext & (1 << (INET_DIAG_INFO - 1))) && handler->idiag_info_size) { -- 2.53.0.473.g4a7958ca14-goog