From nobody Tue Nov 08 18:10:01 2022 X-Original-To: dev-commits-src-all@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 4N6GN950qYz4V3Z8; Tue, 8 Nov 2022 18:10:01 +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 4N6GN94SKPz4GZK; Tue, 8 Nov 2022 18:10:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1667931001; 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=mLCdMwnDRxrJEacChe9Hag9JWpLJoA7ZHDVwclMhuB8=; b=aklv4puKRVg3agktK0Xn+72XM3jd+HxDTVKiMX9/L2tAD9L29948hvg2WueKvSSE6ZraEB 4DxFp2xoGzWyw4lN6bBzfponMH3d5h5U8/T+khOrGC0w3alj9/gKEW7bPfzOV6LSyBC0HV QaC9WiieYbhRgOGQnZ+/jAFZmmg6jmv+/td4wJ2I97ZiNZY0Qtn+yqygM9RnX6NSFmMQSv rbsC3i+agUQuV28Od4x469AAtfXksW2zLwmScizLdouq3bvCGI6h/TrDk1dXCBlzBBS8M1 cXeptW9x070PFd7hzpOcmSmLyZFHx+NqaQa3yY8u5d5PYfiW6DPvVH4/l6km9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1667931001; 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=mLCdMwnDRxrJEacChe9Hag9JWpLJoA7ZHDVwclMhuB8=; b=jb+BhOI5GWzH1MSxEtlDaytbErmc3VUttocMkdaVYKXVLwTMGkpGVa3Uh+d4NX0p5dRZX1 6hxeEFRZ3SFzcyafmRhXVIusf/jyZV8HyFE/VLCRi3Wn/POtDfkbQzswJkcZtfJvbfdFpJ sayUGvVuNF9Q1sr9M2cHLyKqL2bpeuv+NDyXtEvH3wAI2xGBG3d1xr3LhCclX04p6bKWKQ AQ+yH6cM5jygwVnwWTzBnrU6lAvoigOXdvCndAsC9iYsNx/ngh0+q2NqJyezCfwUhSIaXV S9eqlmuopGY4TFL7eRuBRKTlMKgtBMFrtqs6PkWeaDjJ4jcCuGZsCTkVpCRnQg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1667931001; a=rsa-sha256; cv=none; b=ooIAERIskPNcXurYK1IvCgtOZcqzapWx3+KhOwAIQIAnujypTiZ7HyyW57MYnFk7bKdZZ4 NSHYABsIpi3gihD8YrVGLNtEB8/RfymVGN+67m2akbJ/mDLXR+ZFXiwVzs3edr7sPNFJ4L Mnp+SRIeDj8+c17I5psdKLgC4aRn1JsK8afbNpnAKL7B6Na4dvqjY+Bu0I9XbPPMffipAW wgz+/tTcopLQypDVdRJboOoUucSgj0iMdpocQ8+0MYhmIHrHQE4q5NKPtkvPd7F9cdcPY8 XMYO/IAxYVOO1FKIUbH/z98rcjszilpqLsl6fHCyjJd8xq5nG0ubd1wiGiE0cA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4N6GN93Ypyzr4M; Tue, 8 Nov 2022 18:10:01 +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 2A8IA1Lh016627; Tue, 8 Nov 2022 18:10:01 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2A8IA1GV016623; Tue, 8 Nov 2022 18:10:01 GMT (envelope-from git) Date: Tue, 8 Nov 2022 18:10:01 GMT Message-Id: <202211081810.2A8IA1GV016623@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Richard Scheffenegger Subject: git: dc9daa04fb68 - main - tcp: allow packets to be marked as ECT1 instead of ECT0 List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: rscheff X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: dc9daa04fb6813c5229470b71201d0645c95c206 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by rscheff: URL: https://cgit.FreeBSD.org/src/commit/?id=dc9daa04fb6813c5229470b71201d0645c95c206 commit dc9daa04fb6813c5229470b71201d0645c95c206 Author: Richard Scheffenegger AuthorDate: 2022-11-08 17:35:58 +0000 Commit: Richard Scheffenegger CommitDate: 2022-11-08 17:36:38 +0000 tcp: allow packets to be marked as ECT1 instead of ECT0 This adds the capability for a modular congestion control to select which variant of ECN-capable-transport it wants to use when sending out elegible segments. As an initial CC to utilize this, DCTCP was selected. Event: IETF 115 Hackathon Reviewed By: tuexen, #transport Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D24869 --- share/man/man4/cc_dctcp.4 | 7 ++++++- sys/netinet/cc/cc_dctcp.c | 12 +++++++++++- sys/netinet/tcp_ecn.c | 9 +++++++-- sys/netinet/tcp_var.h | 4 +++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/share/man/man4/cc_dctcp.4 b/share/man/man4/cc_dctcp.4 index 8c23f2eaa134..c4c8eb7da623 100644 --- a/share/man/man4/cc_dctcp.4 +++ b/share/man/man4/cc_dctcp.4 @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 13, 2021 +.Dd November 8, 2022 .Dt CC_DCTCP 4 .Os .Sh NAME @@ -91,6 +91,11 @@ gain of 1 / ( 2 ^ .It Va slowstart A flag if the congestion window should be reduced by one half after slow start. Valid settings 0 and 1, default 0. +.It Va ect1 +Controls if a DCTCP session should use IP ECT(0) marking when sending out +segments (default), or ECT(1) marking making use of L4S infrastructure. +Changes to this setting will only affect new sessions, existing sessions will +retain their previous marking value. .El .Sh SEE ALSO .Xr cc_cdg 4 , diff --git a/sys/netinet/cc/cc_dctcp.c b/sys/netinet/cc/cc_dctcp.c index 5e4a01649f57..ce11e611a0e5 100644 --- a/sys/netinet/cc/cc_dctcp.c +++ b/sys/netinet/cc/cc_dctcp.c @@ -68,6 +68,8 @@ VNET_DEFINE_STATIC(uint32_t, dctcp_shift_g) = 4; #define V_dctcp_shift_g VNET(dctcp_shift_g) VNET_DEFINE_STATIC(uint32_t, dctcp_slowstart) = 0; #define V_dctcp_slowstart VNET(dctcp_slowstart) +VNET_DEFINE_STATIC(uint32_t, dctcp_ect1) = 0; +#define V_dctcp_ect1 VNET(dctcp_ect1) struct dctcp { uint32_t bytes_ecn; /* # of marked bytes during a RTT */ @@ -313,8 +315,11 @@ dctcp_conn_init(struct cc_var *ccv) dctcp_data = ccv->cc_data; - if (CCV(ccv, t_flags2) & TF2_ECN_PERMIT) + if (CCV(ccv, t_flags2) & TF2_ECN_PERMIT) { dctcp_data->save_sndnxt = CCV(ccv, snd_nxt); + if (V_dctcp_ect1) + CCV(ccv, t_flags2) |= TF2_ECN_USE_ECT1; + } } /* @@ -478,5 +483,10 @@ SYSCTL_PROC(_net_inet_tcp_cc_dctcp, OID_AUTO, slowstart, &VNET_NAME(dctcp_slowstart), 0, &dctcp_slowstart_handler, "IU", "half CWND reduction after the first slow start"); +SYSCTL_UINT(_net_inet_tcp_cc_dctcp, OID_AUTO, ect1, + CTLFLAG_VNET | CTLFLAG_RW | CTLFLAG_NEEDGIANT, + &VNET_NAME(dctcp_ect1), 0, + "Send DCTCP segments with ÍP ECT(0) or ECT(1)"); + DECLARE_CC_MODULE(dctcp, &dctcp_cc_algo); MODULE_VERSION(dctcp, 2); diff --git a/sys/netinet/tcp_ecn.c b/sys/netinet/tcp_ecn.c index 3cbc1c53dad7..8e3e38ddabfc 100644 --- a/sys/netinet/tcp_ecn.c +++ b/sys/netinet/tcp_ecn.c @@ -411,8 +411,13 @@ tcp_ecn_output_established(struct tcpcb *tp, uint16_t *thflags, int len, bool rx !((tp->t_flags & TF_FORCEDATA) && len == 1)); /* RFC3168 ECN marking, only new data segments */ if (newdata) { - ipecn = IPTOS_ECN_ECT0; - TCPSTAT_INC(tcps_ecn_ect0); + if (tp->t_flags2 & TF2_ECN_USE_ECT1) { + ipecn = IPTOS_ECN_ECT1; + TCPSTAT_INC(tcps_ecn_ect1); + } else { + ipecn = IPTOS_ECN_ECT0; + TCPSTAT_INC(tcps_ecn_ect0); + } } /* * Reply with proper ECN notifications. diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h index 3bcba227d5da..0655eb85aae0 100644 --- a/sys/netinet/tcp_var.h +++ b/sys/netinet/tcp_var.h @@ -577,7 +577,9 @@ tcp_packets_this_ack(struct tcpcb *tp, tcp_seq ack) #define TF2_ECN_SND_CWR 0x00000040 /* ECN CWR in queue */ #define TF2_ECN_SND_ECE 0x00000080 /* ECN ECE in queue */ #define TF2_ACE_PERMIT 0x00000100 /* Accurate ECN mode */ -#define TF2_FBYTES_COMPLETE 0x00000400 /* We have first bytes in and out */ +#define TF2_FBYTES_COMPLETE 0x00000400 /* We have first bytes in and out */ +#define TF2_ECN_USE_ECT1 0x00000800 /* Use ECT(1) marking on session */ + /* * Structure to hold TCP options that are only used during segment * processing (in tcp_input), but not held in the tcpcb.