opnsense-src/sys/conf
John Baldwin bddf73433e NIC KTLS for Chelsio T6 adapters.
This adds support for ifnet (NIC) KTLS using Chelsio T6 adapters.
Unlike the TOE-based KTLS in r353328, NIC TLS works with non-TOE
connections.

NIC KTLS on T6 is not able to use the normal TSO (LSO) path to segment
the encrypted TLS frames output by the crypto engine.  Instead, the
TOE is placed into a special setup to permit "dummy" connections to be
associated with regular sockets using KTLS.  This permits using the
TOE to segment the encrypted TLS records.  However, this approach does
have some limitations:

1) Regular TOE sockets cannot be used when the TOE is in this special
   mode.  One can use either TOE and TOE-based KTLS or NIC KTLS, but
   not both at the same time.

2) In NIC KTLS mode, the TOE is only able to accept a per-connection
   timestamp offset that varies in the upper 4 bits.  Put another way,
   only connections whose timestamp offset has the 28 lower bits
   cleared can use NIC KTLS and generate correct timestamps.  The
   driver will refuse to enable NIC KTLS on connections with a
   timestamp offset with any of the lower 28 bits set.  To use NIC
   KTLS, users can either disable TCP timestamps by setting the
   net.inet.tcp.rfc1323 sysctl to 0, or apply a local patch to the
   tcp_new_ts_offset() function to clear the lower 28 bits of the
   generated offset.

3) Because the TCP segmentation relies on fields mirrored in a TCB in
   the TOE, not all fields in a TCP packet can be sent in the TCP
   segments generated from a TLS record.  Specifically, for packets
   containing TCP options other than timestamps, the driver will
   inject an "empty" TCP packet holding the requested options (e.g. a
   SACK scoreboard) along with the segments from the TLS record.
   These empty TCP packets are counted by the
   dev.cc.N.txq.M.kern_tls_options sysctls.

Unlike TOE TLS which is able to buffer encrypted TLS records in
on-card memory to handle retransmits, NIC KTLS must re-encrypt TLS
records for retransmit requests as well as non-retransmit requests
that do not include the start of a TLS record but do include the
trailer.  The T6 NIC KTLS code tries to optimize some of the cases for
requests to transmit partial TLS records.  In particular it attempts
to minimize sending "waste" bytes that have to be given as input to
the crypto engine but are not needed on the wire to satisfy mbufs sent
from the TCP stack down to the driver.

TCP packets for TLS requests are broken down into the following
classes (with associated counters):

- Mbufs that send an entire TLS record in full do not have any waste
  bytes (dev.cc.N.txq.M.kern_tls_full).

- Mbufs that send a short TLS record that ends before the end of the
  trailer (dev.cc.N.txq.M.kern_tls_short).  For sockets using AES-CBC,
  the encryption must always start at the beginning, so if the mbuf
  starts at an offset into the TLS record, the offset bytes will be
  "waste" bytes.  For sockets using AES-GCM, the encryption can start
  at the 16 byte block before the starting offset capping the waste at
  15 bytes.

- Mbufs that send a partial TLS record that has a non-zero starting
  offset but ends at the end of the trailer
  (dev.cc.N.txq.M.kern_tls_partial).  In order to compute the
  authentication hash stored in the trailer, the entire TLS record
  must be sent as input to the crypto engine, so the bytes before the
  offset are always "waste" bytes.

In addition, other per-txq sysctls are provided:

- dev.cc.N.txq.M.kern_tls_cbc: Count of sockets sent via this txq
  using AES-CBC.

- dev.cc.N.txq.M.kern_tls_gcm: Count of sockets sent via this txq
  using AES-GCM.

- dev.cc.N.txq.M.kern_tls_fin: Count of empty FIN-only packets sent to
  compensate for the TOE engine not being able to set FIN on the last
  segment of a TLS record if the TLS record mbuf had FIN set.

- dev.cc.N.txq.M.kern_tls_records: Count of TLS records sent via this
  txq including full, short, and partial records.

- dev.cc.N.txq.M.kern_tls_octets: Count of non-waste bytes (TLS header
  and payload) sent for TLS record requests.

- dev.cc.N.txq.M.kern_tls_waste: Count of waste bytes sent for TLS
  record requests.

To enable NIC KTLS with T6, set the following tunables prior to
loading the cxgbe(4) driver:

hw.cxgbe.config_file=kern_tls
hw.cxgbe.kern_tls=1

Reviewed by:	np
Sponsored by:	Chelsio Communications
Differential Revision:	https://reviews.freebsd.org/D21962
2019-11-21 19:30:31 +00:00
..
config.mk Add comments about KERN_OPT here. 2019-07-19 17:48:29 +00:00
dtb.build.mk Introduce bsd.sysdir.mk to consolidate looking for the kernel. 2019-11-21 15:59:33 +00:00
dtb.mk Allow kernel config to specify DTS/DTSO to build, and out-of-tree support 2019-03-26 02:45:23 +00:00
files NIC KTLS for Chelsio T6 adapters. 2019-11-21 19:30:31 +00:00
files.amd64 Remove sio(4). 2019-11-21 01:24:49 +00:00
files.arm Compile in arm/unwind.c if options STACK is in effect; the new arm stack(9) 2019-11-14 17:04:19 +00:00
files.arm64 Port the NetBSD KCSAN runtime to FreeBSD. 2019-11-21 11:22:08 +00:00
files.i386 Remove sio(4). 2019-11-21 01:24:49 +00:00
files.mips Add support for BERI statcounters. 2019-09-18 16:13:50 +00:00
files.powerpc powerpc: Add AmigaOne platform, a subclass of MPC85xx 2019-10-16 00:38:50 +00:00
files.riscv RISC-V: add support for SBI spec v0.2 2019-11-15 03:34:27 +00:00
files.sparc64 emulate illumos membar_producer with atomic_thread_fence_rel 2019-10-10 07:39:41 +00:00
files.x86 Move all the sys/dev/[a-j]* that are common to files.x86 2019-10-30 19:53:46 +00:00
kern.mk Honor CWARNFLAGS.clang/gcc in the kernel build 2019-09-22 18:27:57 +00:00
kern.opts.mk Disable REPRODUCIBLE_BUILD for kernel builds. 2019-09-28 14:14:42 +00:00
kern.post.mk Port the NetBSD KCSAN runtime to FreeBSD. 2019-11-21 11:22:08 +00:00
kern.pre.mk Port the NetBSD KCSAN runtime to FreeBSD. 2019-11-21 11:22:08 +00:00
kmod.mk Add a kmod.opts.mk. 2019-11-21 18:14:26 +00:00
kmod.opts.mk Add a kmod.opts.mk. 2019-11-21 18:14:26 +00:00
kmod_syms.awk
kmod_syms_prefix.awk Add the infrastructure to support loading multiple versions of TCP 2017-06-08 20:41:28 +00:00
ldscript.amd64 Tighten mapping protections on preloaded files on amd64. 2019-10-18 14:05:13 +00:00
ldscript.arm Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.arm64 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.i386 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.kmod.amd64 Add an ldscript for amd64 kernel modules. 2019-10-17 21:39:23 +00:00
ldscript.kmod.i386 Formalize the use of linker scripts for kernel modules. 2019-10-16 22:19:56 +00:00
ldscript.mips Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.mips.cfe Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.mips.mips64 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.mips.octeon1 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.powerpc powerpc: Kernel fixes for ppc32 and powerpcspe w/ lld 2019-11-14 04:34:17 +00:00
ldscript.powerpc64 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.powerpcspe powerpc: Kernel fixes for ppc32 and powerpcspe w/ lld 2019-11-14 04:34:17 +00:00
ldscript.riscv riscv: Ensure that BSS is 8-byte aligned 2019-09-09 15:57:24 +00:00
ldscript.sparc64 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
Makefile.amd64 Retire CLANG_NO_IAS34 2018-11-01 23:11:47 +00:00
Makefile.arm Remove support for kernel.tramp and kernel.tramp.gz 2019-07-27 17:24:19 +00:00
Makefile.arm64 Boot arm64 kernel using booti command from U-boot. 2019-11-14 21:58:40 +00:00
Makefile.i386 Retire CLANG_NO_IAS34 2018-11-01 23:11:47 +00:00
Makefile.mips Update MIPS kernel builds to work with mips-gcc. 2019-10-15 17:11:42 +00:00
Makefile.powerpc Add support for building Book-E kernels with clang/lld. 2019-11-02 21:15:56 +00:00
Makefile.riscv Revert r336353 completely based on protest; compatibility shims incoming 2018-07-17 14:11:30 +00:00
Makefile.sparc64 Revert r336353 completely based on protest; compatibility shims incoming 2018-07-17 14:11:30 +00:00
makeLINT.mk Also clean LINT64 kernel configuration for powerpc 2019-11-18 01:56:19 +00:00
makeLINT.sed Match the files directive and all the ways to add or subtract options 2011-10-04 17:11:38 +00:00
newvers.sh newvers: append commit count to uname version string 2019-08-01 14:13:04 +00:00
NOTES Actually hook CAM_IO_STATS up to the build 2019-11-16 19:12:17 +00:00
options Port the NetBSD KCSAN runtime to FreeBSD. 2019-11-21 11:22:08 +00:00
options.amd64 Remove iBCS2, part2: general kernel 2018-12-19 21:57:58 +00:00
options.arm Remove now the cow unused CPU_ARM9 and CPU_FA526 options. These are for 2018-07-28 11:00:45 +00:00
options.arm64 Boot arm64 kernel using booti command from U-boot. 2019-11-14 21:58:40 +00:00
options.i386 i386: Merge PAE and non-PAE pmaps into same kernel. 2019-01-30 02:07:13 +00:00
options.mips Add SMP support for BERI CPU. 2018-04-12 17:43:19 +00:00
options.powerpc powerpc: Add AmigaOne platform, a subclass of MPC85xx 2019-10-16 00:38:50 +00:00
options.riscv o Add driver for PLIC (Platform-Level Interrupt Controller) device. 2018-06-12 17:45:15 +00:00
options.sparc64 - While Netra X1 generally show no ill effects when registering a power 2013-03-02 00:37:31 +00:00
systags.sh sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
WITHOUT_SOURCELESS Move WITHOUT_SOURCELESS_* files to sys/conf/ in order to avoid "universe" 2012-02-12 14:55:27 +00:00
WITHOUT_SOURCELESS_HOST Retire the nve(4) driver; nfe(4) has been the default driver for NVIDIA 2014-02-16 12:22:43 +00:00
WITHOUT_SOURCELESS_UCODE Remove adv(4) and adw(4) 2018-10-22 02:34:47 +00:00