d7c5a620e2
7 Commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
John Baldwin
|
1e9538d253 |
Support for TLS offload of TOE connections on T6 adapters.
The TOE engine in Chelsio T6 adapters supports offloading of TLS encryption and TCP segmentation for offloaded connections. Sockets using TLS are required to use a set of custom socket options to upload RX and TX keys to the NIC and to enable RX processing. Currently these socket options are implemented as TCP options in the vendor specific range. A patched OpenSSL library will be made available in a port / package for use with the TLS TOE support. TOE sockets can either offload both transmit and reception of TLS records or just transmit. TLS offload (both RX and TX) is enabled by setting the dev.t6nex.<x>.tls sysctl to 1 and requires TOE to be enabled on the relevant interface. Transmit offload can be used on any "normal" or TLS TOE socket by using the custom socket option to program a transmit key. This permits most TOE sockets to transparently offload TLS when applications use a patched SSL library (e.g. using LD_LIBRARY_PATH to request use of a patched OpenSSL library). Receive offload can only be used with TOE sockets using the TLS mode. The dev.t6nex.0.toe.tls_rx_ports sysctl can be set to a list of TCP port numbers. Any connection with either a local or remote port number in that list will be created as a TLS socket rather than a plain TOE socket. Note that although this sysctl accepts an arbitrary list of port numbers, the sysctl(8) tool is only able to set sysctl nodes to a single value. A TLS socket will hang without receiving data if used by an application that is not using a patched SSL library. Thus, the tls_rx_ports node should be used with care. For a server mostly concerned with offloading TLS transmit, this node is not needed as plain TOE sockets will fall back to software crypto when using an unpatched SSL library. New per-interface statistics nodes are added giving counts of TLS packets and payload bytes (payload bytes do not include TLS headers or authentication tags/MACs) offloaded via the TOE engine, e.g.: dev.cc.0.stats.rx_tls_octets: 149 dev.cc.0.stats.rx_tls_records: 13 dev.cc.0.stats.tx_tls_octets: 26501823 dev.cc.0.stats.tx_tls_records: 1620 TLS transmit work requests are constructed by a new variant of t4_push_frames() called t4_push_tls_records() in tom/t4_tls.c. TLS transmit work requests require a buffer containing IVs. If the IVs are too large to fit into the work request, a separate buffer is allocated when constructing a work request. This buffer is associated with the transmit descriptor and freed when the descriptor is ACKed by the adapter. Received TLS frames use two new CPL messages. The first message is a CPL_TLS_DATA containing the decryped payload of a single TLS record. The handler places the mbuf containing the received payload on an mbufq in the TOE pcb. The second message is a CPL_RX_TLS_CMP message which includes a copy of the TLS header and indicates if there were any errors. The handler for this message places the TLS header into the socket buffer followed by the saved mbuf with the payload data. Both of these handlers are contained in tom/t4_tls.c. A few routines were exposed from t4_cpl_io.c for use by t4_tls.c including send_rx_credits(), a new send_rx_modulate(), and t4_close_conn(). TLS keys for both transmit and receive are stored in onboard memory in the NIC in the "TLS keys" memory region. In some cases a TLS socket can hang with pending data available in the NIC that is not delivered to the host. As a workaround, TLS sockets are more aggressive about sending CPL_RX_DATA_ACK messages anytime that any data is read from a TLS socket. In addition, a fallback timer will periodically send CPL_RX_DATA_ACK messages to the NIC for connections that are still in the handshake phase. Once the connection has finished the handshake and programmed RX keys via the socket option, the timer is stopped. A new function select_ulp_mode() is used to determine what sub-mode a given TOE socket should use (plain TOE, DDP, or TLS). The existing set_tcpddp_ulp_mode() function has been renamed to set_ulp_mode() and handles initialization of TLS-specific state when necessary in addition to DDP-specific state. Since TLS sockets do not receive individual TCP segments but always receive full TLS records, they can receive more data than is available in the current window (e.g. if a 16k TLS record is received but the socket buffer is itself 16k). To cope with this, just drop the window to 0 when this happens, but track the overage and "eat" the overage as it is read from the socket buffer not opening the window (or adding rx_credits) for the overage bytes. Reviewed by: np (earlier version) Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D14529 |
||
John Baldwin
|
4fedff3ca1 |
Enable support for lookaside crypto operations by default.
This permits ccr(4) to be used with the default firmware configuration file. Discussed with: np Sponsored by: Chelsio Communications |
||
Navdeep Parhar
|
fc740a161b |
cxgbe(4): Update T6/T5/T4 firmwares to 1.16.59.0.
These firmwares come from a pre-release snapshot. The final firmwares in this Chelsio release cycle will likely be .61.0 or later and those will be the next "long lived" firmwares in FreeBSD head and stable branches. .59 is being provided in head (only) for wider test exposure. Obtained from: Chelsio Communications Sponsored by: Chelsio Communications |
||
Navdeep Parhar
|
c88fa71928 |
cxgbe(4): Update T4, T5 and T6 firmwares to 1.16.26.0. Changelog for
all public firmwares for all chips since the last release (1.15.37.0) follows (it's a straight copy-paste from the Release Notes for the 12/30/2016 Unified Wire release on Chelsio's website). T6 Firmware ++++++++++++ Version : 1.16.26.0 Date : 12/28/2016 Fixes ----- BASE: - Max number of egress and control queues adjusted to accomodate co-processor mode queues. - Fixed intermittent DDR3/4 ECC errors. - Fixed a traffic stall when ETS BW is configured as 0%. - Max number of ethctrl queue in VF set to 1. ETH: - Added a new config file option 'speed' under port section to set the port speed. Use only when auto negotiation is off. - FEC option removed from firmware config file. cxgbtool can be used to change the fec setting. - CPL_TX_TNL_LSO cpl handling added in ETH_TX_PKT_VM handler. This fixes large tunnel tcp packet support for VxLAN. Version : 1.16.22.0 Date : 12/05/2016 Fixes ----- BASE: - fw_port_type updated in fw API to match kernel.org definitions. - Saved power by disaling unused MAC lanes. - Configures correct power bin. - Enhanced DDR4 performance. - Enabled interrupts. - Fixed an issue where filter rule for 'unicast hash' is not working. ETH: - Disabled auto negotiation by default because most of 100G switches do not support AN as of today. - Fixed flow control not getting disabled problem. - Fixed an issue where port0 doesn't come up sometimes. - Fixed 10G link not coming up issue. - Fixed an issue with promiscuous mode when dcbx disabled. OFLD: - Fixed a connection stuck issue when abort is received during out of tx pages backpressure. ENHANCEMENTS ------------ BASE: - Added inline TLS mode support. Version : 1.16.12.0 Date : 11/11/2016 ENHANCEMENTS ------------ BASE: - Added T6 support. - Added T6 1G/10G/25G/40G/100G link speeds. - Added T6 co-processor mode crypto support. - Added facility to increase link AN+AEC timeout. OFLD: - Added support for all T5 offload protocols except FCoE. iSCSI: - iscsi completion moderation enabled. ======================================================================= T5 Firmware ++++++++++++ Version : 1.16.26.0 Date : 12/28/2016 FIXES ----- BASE: - Max number of ethctrl queue in VF set to 1. Version : 1.16.22.0 Date : 12/05/2016 FIXES ----- BASE: - Fixed an issue where filter rule for 'unicast hash' is not working. ETH: - Fixed an issue with promiscuous mode when dcbx disabled. ENHANCEMENTS ------------ ETH: - Added 40G-KR support. Version : 1.16.12.0 Date : 11/11/2016 FIXES ----- BASE: - Fixed multiple issues related with VFs FLR processing. - Fixed channel assignment based on number of ports in adapter. - Fixed a crash when VM having PF assigned as passthrough mode is rebooted. - Handled 2nd HELLO command from the same PF without seeing BYE from the same PF and if that is the only PF. - A warning is printed in firmware log if PCI-E cookie generation is enabled in serial initialization file. - Fixed multiple issues related with Filtering. - Enabled DSGL memory write for iscsi and rdma. - Added new FW_PARAMS_CMD[DEV] options to retrieve Serial Configuration and VPD version numbers. - Fixed an issue where LVDS output was not getting enabled using vpd. DCBX: - Fixed DCBX CEE Incorrect class to pririty mapping. - Fixed incorrect interpretation of DCBX IEEE PFC. ETH: - Adjusted the link related delay timings according to the QSFP spec. - Improved 40G link bringup time with few switches. OFLD: - Do not reserve qp/cq if rdma capability is not enabled. - Fixed an issue where approx 1600+ TOE connections were causing a firmware fatal error. FOiSCSI: - Fixed an issue where unloading foiscsi driver causes mailbox timeout. ENHANCEMENTS ------------ BASE: - Added 10G KR/KX support. - Added T540-BT adapter support. - Added 4 new rss key modes for PFs and VFs. OFLD: - Added new WR FW_RI_FR_NSMR_TPTE_WR to improve fast MR write performance in RDMA. Version : 1.16.5.0 Date : 10/26/2016 FIXES ----- BASE: - Fixed multiple issues where FLR from multiple VFs can cause firmware crash. - Fixed channel assignment based on number of ports in adapter. - Fixed the HELLO command master force api to handle the 2nd HELLO correctly without getting BYE from the PF driver. - Added facility to retrieve Serial configuration and VPD version. Two new FW_PARAMS_CMD[DEV] options added to retrieve these values. - Fixed multiple issues where FLR from multiple VFs are not completing. - Added new RSS hash secret key modes. - Fixed an issue where LVDS output was not getting enabled using vpd. DCBX: - Fixed an issue where iscsi tlv is sent incorrectly to host (DCBX CEE). - Fixed an issue where app priority values are not handled correctly in fw (DCBX IEEE). ETH: - Adjusts the link related delay timings according to the QSFP spec. - Changed 2.5G mac speed bit to 25G mac speed bit in fw API. - Improvement in 40G link bringup time with few switches. OFLD: - Do not reserve qp/cq if rdma capability is not enabled. - Fixed an issue where approx 1600+ TOE connections were causing a firmware fatal error. - Fixed DSGL memory write in T5. Now iwarp and iscsi can use DSGL to do memory write. - Fixed multiple issues in hash filter mode where incorrect protocol mask was getting used and affecting hash filter functionality. - New fastpath WR FW_RI_FR_NSMR_TPTE_WR (with fully populated TPTE) is added for small REG_MR operations. FOiSCSI: - Fixed an issue in foiscsi recovery path. - Fixed an issue where foiscsi (in VM in PCIE passthrough mode) didn't come up after VM FLR. ENHANCEMENTS ------------ ETH: - Implemented 1G/10G KR/KX ability. - Implemented T540-BT adapter support. ======================================================================= T4 Firmware +++++++++++ Version : 1.16.12.0 Date : 11/11/2016 FIXES ----- BASE: - Fixed an issue where reading temperature sesors using ldst command causes mailbox timeout. - Added new FW_PARAMS_CMD[DEV] options to retrieve Serial Configuration and VPD version numbers. ETH: - Fixed DCBX CEE Incorrect class to pririty mapping. FOiSCSI: - Fixed an issue where unloading foiscsi driver causes mailbox timeout. MFC after: 3 days Sponsored by: Chelsio Communications |
||
Navdeep Parhar
|
07b5fdfd01 |
cxgbe(4): Changes to the default T6 firmware configuration file.
- Disable features that are not supported or not used on FreeBSD. - Increase the RSS table slice per interface. - Increase the share of the TCAM reserved for filtering. MFH: 2 weeks Sponsored by: Chelsio Communications |
||
Navdeep Parhar
|
3cbaf64f2e |
cxgbe(4): Update firmwares from version 1.16.12.0 to 1.16.22.0.
Obtained from: Chelsio Communications MFC after: 3 days Sponsored by: Chelsio Communications |
||
Navdeep Parhar
|
a10443e8ba |
cxgbe(4): Include firmware for T6 cards in the driver. Update all
firmwares to 1.16.12.0. Obtained from: Chelsio Communications MFC after: 3 days Sponsored by: Chelsio Communications |