From 123fd2a93eeaeff0bb3ac433526296f44b75e368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dag-Erling=20Sm=C3=B8rgrav?= Date: Wed, 18 Oct 2023 16:13:12 +0200 Subject: [PATCH] Add the BBR and RACK stacks to the LINT kernel. While here, drop the EXTRA_TCP_STACKS option, which serves no purpose and should never have been added. Instead, build bbr and rack as long as either or both of INET and INET6 is enabled. There is no risk to anyone who doesn't load one or both and then twiddle the relevant sysctls. Differential Revision: https://reviews.freebsd.org/D42088 (cherry picked from commit 3a338c534154164504005beb00a3c6feb03756cc) --- share/man/man5/src.conf.5 | 2 -- sys/conf/NOTES | 4 +++- sys/conf/files | 7 +++++++ sys/conf/kern.opts.mk | 1 - sys/conf/kern.post.mk | 4 ---- sys/conf/options | 2 ++ sys/modules/tcp/Makefile | 7 ++----- 7 files changed, 14 insertions(+), 13 deletions(-) diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5 index b31d44abde9..89070b097f6 100644 --- a/share/man/man5/src.conf.5 +++ b/share/man/man5/src.conf.5 @@ -643,8 +643,6 @@ Avoid installing examples to .Pa /usr/share/examples/ . .It Va WITH_EXPERIMENTAL Include experimental features in the build. -.It Va WITH_EXTRA_TCP_STACKS -Build extra TCP stack modules. .It Va WITHOUT_FDT Do not build Flattened Device Tree support as part of the base system. This includes the device tree compiler (dtc) and libfdt support library. diff --git a/sys/conf/NOTES b/sys/conf/NOTES index 088bd7426a7..45dd6c30c7b 100644 --- a/sys/conf/NOTES +++ b/sys/conf/NOTES @@ -678,7 +678,6 @@ options TCP_OFFLOAD # TCP offload support. options TCP_RFC7413 # TCP Fast Open options TCPHPTS -makeoptions WITH_EXTRA_TCP_STACKS=1 # RACK and BBR TCP kernel modules # In order to enable IPSEC you MUST also add device crypto to # your kernel configuration @@ -690,6 +689,9 @@ options IPSEC #IP security (requires device crypto) options IPSEC_SUPPORT #options IPSEC_DEBUG #debug for IP security +# Alternative TCP stacks +options TCP_BBR +options TCP_RACK # TLS framing and encryption/decryption of data over TCP sockets. options KERN_TLS # TLS transmit and receive offload diff --git a/sys/conf/files b/sys/conf/files index 39b68a79e20..2b558bf339a 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -4362,6 +4362,13 @@ netinet/tcp_pcap.c optional inet tcppcap | inet6 tcppcap \ compile-with "${NORMAL_C} ${NO_WNONNULL}" netinet/tcp_reass.c optional inet | inet6 netinet/tcp_sack.c optional inet | inet6 +netinet/tcp_stacks/bbr.c optional inet tcp_bbr | inet6 tcp_bbr \ + compile-with "${NORMAL_C} -DMODNAME=tcp_bbr -DSTACKNAME=bbr" +netinet/tcp_stacks/rack.c optional inet tcp_bbr | inet6 tcp_bbr \ + compile-with "${NORMAL_C} -DMODNAME=tcp_rack -DSTACKNAME=rack" +netinet/tcp_stacks/rack_bbr_common.c optional inet tcp_bbr | inet tcp_rack | inet6 tcp_bbr | inet6 tcp_rack +netinet/tcp_stacks/sack_filter.c optional inet tcp_bbr | inet tcp_rack | inet6 tcp_bbr | inet6 tcp_rack +netinet/tcp_stacks/tailq_hash.c optional inet tcp_bbr | inet tcp_rack | inet6 tcp_bbr | inet6 tcp_rack netinet/tcp_stats.c optional stats inet | stats inet6 netinet/tcp_subr.c optional inet | inet6 netinet/tcp_syncache.c optional inet | inet6 diff --git a/sys/conf/kern.opts.mk b/sys/conf/kern.opts.mk index 178a4db61cb..f8bedab700b 100644 --- a/sys/conf/kern.opts.mk +++ b/sys/conf/kern.opts.mk @@ -56,7 +56,6 @@ __DEFAULT_YES_OPTIONS = \ __DEFAULT_NO_OPTIONS = \ BHYVE_SNAPSHOT \ - EXTRA_TCP_STACKS \ INIT_ALL_PATTERN \ INIT_ALL_ZERO \ KERNEL_RETPOLINE \ diff --git a/sys/conf/kern.post.mk b/sys/conf/kern.post.mk index f42ec4a9564..d74087fc7c3 100644 --- a/sys/conf/kern.post.mk +++ b/sys/conf/kern.post.mk @@ -33,10 +33,6 @@ MKMODULESENV+= CONF_CFLAGS="${CONF_CFLAGS}" MKMODULESENV+= WITH_CTF="${WITH_CTF}" .endif -.if defined(WITH_EXTRA_TCP_STACKS) -MKMODULESENV+= WITH_EXTRA_TCP_STACKS="${WITH_EXTRA_TCP_STACKS}" -.endif - .if !empty(KCSAN_ENABLED) MKMODULESENV+= KCSAN_ENABLED="yes" .endif diff --git a/sys/conf/options b/sys/conf/options index aede28eeaaa..31ddbe2e698 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -229,6 +229,8 @@ SW_WATCHDOG opt_watchdog.h TCPHPTS opt_inet.h TCP_REQUEST_TRK opt_global.h TCP_ACCOUNTING opt_global.h +TCP_BBR opt_inet.h +TCP_RACK opt_inet.h # # TCP SaD Detection is an experimental Sack attack Detection (SaD) # algorithm that uses "normal" behaviour with SACK's to detect diff --git a/sys/modules/tcp/Makefile b/sys/modules/tcp/Makefile index 8f89977b5b6..364c0326c40 100644 --- a/sys/modules/tcp/Makefile +++ b/sys/modules/tcp/Makefile @@ -8,13 +8,10 @@ SUBDIR= \ ${_tcp_rack} \ ${_tcpmd5} \ -.if ${MK_EXTRA_TCP_STACKS} != "no" || defined(ALL_MODULES) -_tcp_bbr= bbr -_tcp_rack= rack -.endif - .if (${MK_INET_SUPPORT} != "no" || ${MK_INET6_SUPPORT} != "no") || \ defined(ALL_MODULES) +_tcp_bbr= bbr +_tcp_rack= rack .if ${KERN_OPTS:MIPSEC_SUPPORT} && !${KERN_OPTS:MTCP_SIGNATURE} _tcpmd5= tcpmd5 .endif