From nobody Tue Feb 08 15:13:39 2022 X-Original-To: dev-commits-src-branches@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 E899419C29C4; Tue, 8 Feb 2022 15:13:39 +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 4JtRNg3YYJz4dP5; Tue, 8 Feb 2022 15:13:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644333219; 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=cQhAPMpdLatx3bU9aXvTEIxR//hYmoAUPf1Shx73xyM=; b=JBkkqqEVoHUTfUDaxcTxErLenw1F04dQpwEHDfbDdzO3f9xVPOrO1mBnQydLCkga1NJ/xN Qn/ik2VJgfuli2YrFgUCdI90qBof/1nC+6523nJhM/V0+1/bkc8Vb1BNK/7JQXFYbK4Lg9 PkOEtbyKrOU31IL+g6YAf/FrPecub2EAO3O0SURXQh8l7mWoOskvhpHYeoYu6BU41bab1B OVFydlgxvdJIFtGv4DEkeO77no91gOm29pgGrNVUw4d/o4d3ed9MtE87WqmoZYD5YY5rgd 84AIoRautvYfTC7vy4m3gd0JnWoquEFdqJoRkFrRY1jeshBJ4AgS47vWcera7g== 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 389DE1BA6D; Tue, 8 Feb 2022 15:13:39 +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 218FDdi1020233; Tue, 8 Feb 2022 15:13:39 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 218FDde3020232; Tue, 8 Feb 2022 15:13:39 GMT (envelope-from git) Date: Tue, 8 Feb 2022 15:13:39 GMT Message-Id: <202202081513.218FDde3020232@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Hans Petter Selasky Subject: git: cac68fff9f05 - stable/13 - Use layer five checksum flags in the mbuf packet header to pass on crypto state. List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: hselasky X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: cac68fff9f0500f5417dfe5634f13ecf9fdf2eaa Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1644333219; 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=cQhAPMpdLatx3bU9aXvTEIxR//hYmoAUPf1Shx73xyM=; b=P4GsPihYZvDph5NS2R50L3s/7DvveUbUwEzoJUfW/j6H0PokyD2maqNBNld6Jo5IwsIWWv jamkXgZzsKDgyEc47+gwWtk1T0xr+3pr73KvQA21QaXB497QzR8R/muRHKcwaFhqgX2MA5 8PTJ4RnlcN0aRm6iD3qZtf+1UlzzC2rgwZ352KzfSSOxwDCFF1l4jNMcRU3CAjmAMpxacZ OgVrD3DWkTX7XM5o5CFG/mgSzs+usPnhkAsFPTi/GbAamZw7YygEbxokBEaKyDpyc+tZS0 9RIQqjo3S8gxzouRjKYmWAn/Ydisyhi74rrT09p5+qyxYnh5OVdeRuIZ8x7wRA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1644333219; a=rsa-sha256; cv=none; b=Bj6WEa4Osp4bA19R+PAtvu2Q1AizVv6RrIa/AlUQKWk6Nwefr3jwPyHIc+ro2Sq138Mjoc Vw9YlJ5ondX6ByQD0x0B1lZ6BHGNZz1IY+n6lAfZSmPpZs31R5YgHz/x9SvubARd2cPxri XuhpqQOt80ZFFC+wkFNXgiU3gvMw7+8s6u8v8Oahk6aLCSwOru+oOY7oZsaCxbLxhYcGlQ t0QKWFb6zDG6qcP6iWK0Z9NyvQqBHdRR3uZoU3AUpeWFP0XtVzvxb122TX37q43rnaRV5/ JpCDvQBvup8MD7s39prB8GB1iynHYVq+TvuKdS4NzO69aRVSoVrnd6xLEuSu5A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by hselasky: URL: https://cgit.FreeBSD.org/src/commit/?id=cac68fff9f0500f5417dfe5634f13ecf9fdf2eaa commit cac68fff9f0500f5417dfe5634f13ecf9fdf2eaa Author: Hans Petter Selasky AuthorDate: 2022-02-08 15:08:50 +0000 Commit: Hans Petter Selasky CommitDate: 2022-02-08 15:08:50 +0000 Use layer five checksum flags in the mbuf packet header to pass on crypto state. The mbuf protocol flags get cleared between layers, and also it was discovered that M_DECRYPTED conflicts with M_HASFCS when receiving ethernet patckets. Add the proper CSUM_TLS_MASK and CSUM_TLS_DECRYPTED defines, and start using these instead of M_DECRYPTED inside the TCP LRO code. This change is needed by coming TLS RX hardware offload support patches. Suggested by: kib@ Reviewed by: jhb@ Sponsored by: NVIDIA Networking (cherry picked from commit 10a62eb109ceafce32aa2b18ec835b3b7285c2dd) --- sys/netinet/tcp_lro.c | 11 ++++++++++- sys/sys/mbuf.h | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/sys/netinet/tcp_lro.c b/sys/netinet/tcp_lro.c index 76083498b70e..4d735f41d84d 100644 --- a/sys/netinet/tcp_lro.c +++ b/sys/netinet/tcp_lro.c @@ -371,7 +371,8 @@ tcp_lro_parser(struct mbuf *m, struct lro_parser *po, struct lro_parser *pi, boo htons(m->m_pkthdr.ether_vtag) & htons(EVL_VLID_MASK); } /* Store decrypted flag, if any. */ - if (__predict_false(m->m_flags & M_DECRYPTED)) + if (__predict_false((m->m_pkthdr.csum_flags & + CSUM_TLS_MASK) == CSUM_TLS_DECRYPTED)) po->data.lro_flags |= LRO_FLAG_DECRYPTED; } @@ -807,6 +808,8 @@ tcp_flush_out_entry(struct lro_ctrl *lc, struct lro_entry *le) le->m_head->m_pkthdr.csum_flags = CSUM_DATA_VALID | CSUM_PSEUDO_HDR | CSUM_IP_CHECKED | CSUM_IP_VALID; le->m_head->m_pkthdr.csum_data = 0xffff; + if (__predict_false(le->outer.data.lro_flags & LRO_FLAG_DECRYPTED)) + le->m_head->m_pkthdr.csum_flags |= CSUM_TLS_DECRYPTED; break; case LRO_TYPE_IPV6_TCP: csum = tcp_lro_update_checksum(&le->inner, le, @@ -818,6 +821,8 @@ tcp_flush_out_entry(struct lro_ctrl *lc, struct lro_entry *le) le->m_head->m_pkthdr.csum_flags = CSUM_DATA_VALID | CSUM_PSEUDO_HDR; le->m_head->m_pkthdr.csum_data = 0xffff; + if (__predict_false(le->outer.data.lro_flags & LRO_FLAG_DECRYPTED)) + le->m_head->m_pkthdr.csum_flags |= CSUM_TLS_DECRYPTED; break; case LRO_TYPE_NONE: switch (le->outer.data.lro_type) { @@ -828,6 +833,8 @@ tcp_flush_out_entry(struct lro_ctrl *lc, struct lro_entry *le) le->m_head->m_pkthdr.csum_flags = CSUM_DATA_VALID | CSUM_PSEUDO_HDR | CSUM_IP_CHECKED | CSUM_IP_VALID; le->m_head->m_pkthdr.csum_data = 0xffff; + if (__predict_false(le->outer.data.lro_flags & LRO_FLAG_DECRYPTED)) + le->m_head->m_pkthdr.csum_flags |= CSUM_TLS_DECRYPTED; break; case LRO_TYPE_IPV6_TCP: csum = tcp_lro_update_checksum(&le->outer, le, @@ -836,6 +843,8 @@ tcp_flush_out_entry(struct lro_ctrl *lc, struct lro_entry *le) le->m_head->m_pkthdr.csum_flags = CSUM_DATA_VALID | CSUM_PSEUDO_HDR; le->m_head->m_pkthdr.csum_data = 0xffff; + if (__predict_false(le->outer.data.lro_flags & LRO_FLAG_DECRYPTED)) + le->m_head->m_pkthdr.csum_flags |= CSUM_TLS_DECRYPTED; break; default: break; diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h index 2182a6c7679c..a6376784a85f 100644 --- a/sys/sys/mbuf.h +++ b/sys/sys/mbuf.h @@ -725,6 +725,8 @@ m_epg_pagelen(const struct mbuf *m, int pidx, int pgoff) #define CSUM_UDP_IPV6 CSUM_IP6_UDP #define CSUM_TCP_IPV6 CSUM_IP6_TCP #define CSUM_SCTP_IPV6 CSUM_IP6_SCTP +#define CSUM_TLS_MASK (CSUM_L5_CALC|CSUM_L5_VALID) +#define CSUM_TLS_DECRYPTED CSUM_L5_CALC /* * mbuf types describing the content of the mbuf (including external storage).