From nobody Mon Sep 26 19:22:07 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Mbt1D1n4Yz4cXw8; Mon, 26 Sep 2022 19:22:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Mbt1D1409z3X3m; Mon, 26 Sep 2022 19:22:08 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1664220128; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Eylr19Ho5w2ozEbsP64gN9y2WbaBFwPK44+A3/ETxeA=; b=yNWlwlOnPxpZECt7Ev+KDMOlD4zMzARBQ7iToAko9vwlIw/IKcAOTakCs0pIhvNXWoca+P zgzRQh2SWBAEacPu8hi7Zp+AditvmPMv/zeYtYbOQge7ZX82Ivk1uJuor7cW4nXuUObuGX 2CqCJSU+TNzBKEroZ51r3iCVTHeVmpB5TgBOnmaGXLsHXkCrEgACgRzkeA1r3PIz07lMXI rIRbTakKRcArH0pka/WT16nU9NUtzWgMOQTYGRCq2LvvS+qcUG+P86Eg7A5YwQQM8577rN 1rwYHm1XyH1VWpyPVzan54bkwUAhr/w/pQVmPGLylWkb4tSsv6JDeCHTbQJe2w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Mbt1C6wQ0zsLp; Mon, 26 Sep 2022 19:22:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 28QJM7Qo037284; Mon, 26 Sep 2022 19:22:07 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 28QJM7iO037283; Mon, 26 Sep 2022 19:22:07 GMT (envelope-from git) Date: Mon, 26 Sep 2022 19:22:07 GMT Message-Id: <202209261922.28QJM7iO037283@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Randall Stewart Subject: git: d1b07f36a2aa - main - TCP complete end status work. List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: rrs X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d1b07f36a2aa37591cd2b81bc8d0628ddb1f7a73 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1664220128; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Eylr19Ho5w2ozEbsP64gN9y2WbaBFwPK44+A3/ETxeA=; b=GDfcSUiKwpWqAbTmAnm6bRTjubiWqtFEQEKyx4hz3r87fEpew3IGD1PVLDc33OwupNEv2H 4kFYkyif839J1XuXgFPpmxSXi63A9EXDt+n8+j7MHVIg5jyHA4qWfJ9HhKzBoCq29Sby0s fEesvOAYagG/uhLLIjPEqRjDOnxg1nQeyQL3XbcXBZViSYQe6BAAbOaDHvDTGndFryQhou rtuzv4NIwArNsJdhoXq5ITwsdfcnzuYJgTjZgWMYuqdhIe9TSct+r/sdX2fun8wYC7T3FC zoAkWObe6Gae0qCVX/JJd+7NwNP6Q2s4Y4QPCtFc/bXaKYPaLciOfkCcQ7qFmA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1664220128; a=rsa-sha256; cv=none; b=R1DAXFEjt5P6dETcXcMtCxTRlQgtZRMGESGJyF4MXEZgQ/WNUoWPiOlU6b0/DT3AMjMQFi Maq+bT54+u3dPyNk7NvcEh22S1xRYcELA+5BaXZIcc80P45OnHmUAqoORMODaht3I5tsfQ VzG/rNHVxwFUC7N63OLKwtRCG01aIuxpHkPSOP9eRTefe/n/WzPw6GtBa2vjro3ED0THae iJ9Ivj+DruMi9sWW7+QvkNY6jNeYMo2TobzzXWnUKIHU89RFdHmvYsz55zPQXkLZ5vpH9j sJJ/05iVjpP0btGonsSaP0lswf9Q0Enj2m9qqWF2M9NkzoSQIrNttASa/XdMiQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by rrs: URL: https://cgit.FreeBSD.org/src/commit/?id=d1b07f36a2aa37591cd2b81bc8d0628ddb1f7a73 commit d1b07f36a2aa37591cd2b81bc8d0628ddb1f7a73 Author: Randall Stewart AuthorDate: 2022-09-26 19:20:18 +0000 Commit: Randall Stewart CommitDate: 2022-09-26 19:20:18 +0000 TCP complete end status work. The ending of a connection can tell us a lot about what happened i.e. did it fail to setup, did it timeout, was it a normal close. Often times this is useful information to help analyze and debug issues. Rack has had end status for some time but the base stack as not. Lets go a ahead and add in the missing bits to populate the end status. Reviewed by: tuexen, rscheff Sponsored by: Netflix Inc Differential Revision: https://reviews.freebsd.org/D36712 --- sys/netinet/tcp_input.c | 13 +++++++++++++ sys/netinet/tcp_timer.c | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 03941e2bb9a7..8c9b171e4eb5 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1604,6 +1604,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, if ((tp->t_state == TCPS_SYN_SENT) && (thflags & TH_ACK) && (SEQ_LEQ(th->th_ack, tp->iss) || SEQ_GT(th->th_ack, tp->snd_max))) { rstreason = BANDLIM_UNLIMITED; + tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT); goto dropwithreset; } @@ -1615,6 +1616,8 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, */ tp->t_rcvtime = ticks; + if (thflags & TH_FIN) + tcp_log_end_status(tp, TCP_EI_STATUS_CLIENT_FIN); /* * Scale up the window into a 32-bit value. * For the SYN_SENT state the scale is zero. @@ -1988,6 +1991,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, (SEQ_LEQ(th->th_ack, tp->snd_una) || SEQ_GT(th->th_ack, tp->snd_max))) { rstreason = BANDLIM_RST_OPENPORT; + tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT); goto dropwithreset; } if (IS_FASTOPEN(tp->t_flags)) { @@ -2000,6 +2004,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, */ if ((thflags & (TH_SYN|TH_ACK)) == (TH_SYN|TH_ACK)) { rstreason = BANDLIM_RST_OPENPORT; + tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT); goto dropwithreset; } else if (thflags & TH_SYN) { /* non-initial SYN is ignored */ @@ -2031,6 +2036,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, if ((thflags & (TH_ACK|TH_RST)) == (TH_ACK|TH_RST)) { TCP_PROBE5(connect__refused, NULL, tp, m, tp, th); + tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT); tp = tcp_drop(tp, ECONNREFUSED); } if (thflags & TH_RST) @@ -2193,6 +2199,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, close: /* FALLTHROUGH */ default: + tcp_log_end_status(tp, TCP_EI_STATUS_CLIENT_RST); tp = tcp_close(tp); } } else { @@ -2217,6 +2224,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, if (V_tcp_insecure_syn && SEQ_GEQ(th->th_seq, tp->last_ack_sent) && SEQ_LT(th->th_seq, tp->last_ack_sent + tp->rcv_wnd)) { + tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT); tp = tcp_drop(tp, ECONNRESET); rstreason = BANDLIM_UNLIMITED; } else { @@ -2268,6 +2276,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, */ if (tp->t_state == TCPS_SYN_RECEIVED && SEQ_LT(th->th_seq, tp->irs)) { rstreason = BANDLIM_RST_OPENPORT; + tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT); goto dropwithreset; } @@ -2341,6 +2350,9 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so, s, __func__, tcpstates[tp->t_state], tlen); free(s, M_TCPLOG); } + tcp_log_end_status(tp, TCP_EI_STATUS_DATA_A_CLOSE); + /* tcp_close will kill the inp pre-log the Reset */ + tcp_log_end_status(tp, TCP_EI_STATUS_SERVER_RST); tp = tcp_close(tp); TCPSTAT_INC(tcps_rcvafterclose); rstreason = BANDLIM_UNLIMITED; @@ -3332,6 +3344,7 @@ dropafterack: (SEQ_GT(tp->snd_una, th->th_ack) || SEQ_GT(th->th_ack, tp->snd_max)) ) { rstreason = BANDLIM_RST_OPENPORT; + tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT); goto dropwithreset; } #ifdef TCPDEBUG diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c index 6828364deea1..dea53e67c29b 100644 --- a/sys/netinet/tcp_timer.c +++ b/sys/netinet/tcp_timer.c @@ -327,6 +327,7 @@ tcp_timer_2msl(void *xtp) inp = tp->t_inpcb; KASSERT(inp != NULL, ("%s: tp %p tp->t_inpcb == NULL", __func__, tp)); INP_WLOCK(inp); + tcp_log_end_status(tp, TCP_EI_STATUS_2MSL); tcp_free_sackholes(tp); if (callout_pending(&tp->t_timers->tt_2msl) || !callout_active(&tp->t_timers->tt_2msl)) { @@ -490,6 +491,7 @@ tcp_timer_keep(void *xtp) dropit: TCPSTAT_INC(tcps_keepdrops); NET_EPOCH_ENTER(et); + tcp_log_end_status(tp, TCP_EI_STATUS_KEEP_MAX); tp = tcp_drop(tp, ETIMEDOUT); #ifdef TCPDEBUG @@ -550,6 +552,7 @@ tcp_timer_persist(void *xtp) ticks - tp->t_rcvtime >= TCP_REXMTVAL(tp) * tcp_totbackoff)) { TCPSTAT_INC(tcps_persistdrop); NET_EPOCH_ENTER(et); + tcp_log_end_status(tp, TCP_EI_STATUS_PERSIST_MAX); tp = tcp_drop(tp, ETIMEDOUT); NET_EPOCH_EXIT(et); tcp_inpinfo_lock_del(inp, tp); @@ -563,6 +566,7 @@ tcp_timer_persist(void *xtp) (ticks - tp->t_rcvtime) >= TCPTV_PERSMAX) { TCPSTAT_INC(tcps_persistdrop); NET_EPOCH_ENTER(et); + tcp_log_end_status(tp, TCP_EI_STATUS_PERSIST_MAX); tp = tcp_drop(tp, ETIMEDOUT); NET_EPOCH_EXIT(et); tcp_inpinfo_lock_del(inp, tp); @@ -631,6 +635,7 @@ tcp_timer_rexmt(void * xtp) tp->t_rxtshift = TCP_MAXRXTSHIFT; TCPSTAT_INC(tcps_timeoutdrop); NET_EPOCH_ENTER(et); + tcp_log_end_status(tp, TCP_EI_STATUS_RETRAN); tp = tcp_drop(tp, ETIMEDOUT); NET_EPOCH_EXIT(et); tcp_inpinfo_lock_del(inp, tp);