From nobody Tue Feb 01 17:59:26 2022 X-Original-To: dev-commits-src-main@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 E6A8F19BB540; Tue, 1 Feb 2022 17:59:26 +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 4JpCPB5LqVz3jds; Tue, 1 Feb 2022 17:59:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1643738366; 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=WTJSbUcXZATKi0A/OkBdvnmNsWkM4rLAvUX9txnLm5U=; b=tX6Sr9FGBZB0wsYwm39Hm9k2Bx/pblS5HiqaTAyWixyNmdTh4HY3PN4cBbGBjUYqtgdNMo sABwht/GlaVxYqIeenMAVkPNHfihJAf9Pn7/8WTyomxwyWyCKZbg13qgxdKnF4QjPOjtZi gh3vUFIuv5wxLYR7k8GctRu/GD1EQ8OYUcaXqdopcEX99TM1JTW9gd9ZogVXldn0K+cQ/T dQNpww8LIStbWPmQL9D+hmWeS6QcGG2Aci2iltvZGxTADN5c1UnIZFOKAclb06snNzWxrq joGrrawR5TdaV9kBOT2jJwUPlr8VT0z6hmm6NQfnY1oZtp+W90eDc8SZV55RuA== 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 85C131555B; Tue, 1 Feb 2022 17:59:26 +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 211HxQeW054207; Tue, 1 Feb 2022 17:59:26 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 211HxQao054206; Tue, 1 Feb 2022 17:59:26 GMT (envelope-from git) Date: Tue, 1 Feb 2022 17:59:26 GMT Message-Id: <202202011759.211HxQao054206@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: 93e28d6e89e9 - main - tcp: LRO code to deal with all 12 TCP header flags List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@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: 93e28d6e89e9fe5e25313762ed248ea7e88c9345 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1643738366; 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=WTJSbUcXZATKi0A/OkBdvnmNsWkM4rLAvUX9txnLm5U=; b=yKoqyFtrXDigo4qy2W0cOs5L09Fu/1K0ynJV7NIVWUC94rlhDSolhNNjt2uaM1aaU/v4GW Vpamnisoe7xtZmPah+3Q3n1HoMfkcu48JLMjLYadXITrpoe6PyIKmd1a3PyTv0W+fQqJSn xWtUtqcjaGtfVa0q64Ba8/rl+4ROom02NoK2ABfh5Kf5RZo153p9UhNLbVXkXAXgwHDMAG t/BL53hZsUKKM3dhffV4k83CP/Jtb53BQGu1N10ysISUknsSQdayAV6L0QG3JmCf765XJy Ktx35fnC58wtnhYp8mLTKnYUbbbr8lDOlNpMTQYqdEAXsl9YadSaeJDumtooxw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1643738366; a=rsa-sha256; cv=none; b=bJJGiBZjg318ZIbfE+WcAUw2LSmbW9UvK/iZtCxm4soQgcafe/xz1ra3C8K7T16jKZt1I/ 3iQdsv3OITb6QTeF5SML8Rqyf6Ia2f/FpbJVv/xX5he6xcPEsjW+egYXasIJrhpNbejSyb Jkp6YUJNsxtMdsbmlZTOZwal2/ynidgi8T/97h9cnQVyH7f8mF+IUAhigfI27guRdcFe/Z xu839LL1y1CNaOKR9I7D64IJovA0M76q2HiwxF82z2joi3x+vQ8cwA5FXooMicXTXPBwdB MMeFAQFXqDnL1dm520Wxx3X9gHH1AED+AZDpy8RjiKZBxwRFBBERPDRUm7U+dw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by rscheff: URL: https://cgit.FreeBSD.org/src/commit/?id=93e28d6e89e9fe5e25313762ed248ea7e88c9345 commit 93e28d6e89e9fe5e25313762ed248ea7e88c9345 Author: Richard Scheffenegger AuthorDate: 2022-02-01 16:25:49 +0000 Commit: Richard Scheffenegger CommitDate: 2022-02-01 17:41:36 +0000 tcp: LRO code to deal with all 12 TCP header flags TCP per RFC793 has 4 reserved flag bits for future use. One of those bits may be used for Accurate ECN. This patch is to include these bits in the LRO code to ease the extensibility if/when these bits are used. Reviewed By: hselasky, rrs, #transport Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D34127 --- sys/netinet/tcp.h | 4 ++-- sys/netinet/tcp_lro.c | 10 +++++----- sys/netinet/tcp_lro.h | 17 +++++++++-------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/sys/netinet/tcp.h b/sys/netinet/tcp.h index 6dc7403aae28..6a3603287f5d 100644 --- a/sys/netinet/tcp.h +++ b/sys/netinet/tcp.h @@ -55,12 +55,12 @@ struct tcphdr { tcp_seq th_seq; /* sequence number */ tcp_seq th_ack; /* acknowledgement number */ #if BYTE_ORDER == LITTLE_ENDIAN - u_char th_x2:4, /* (unused) */ + u_char th_x2:4, /* upper 4 (reserved) flags */ th_off:4; /* data offset */ #endif #if BYTE_ORDER == BIG_ENDIAN u_char th_off:4, /* data offset */ - th_x2:4; /* (unused) */ + th_x2:4; /* upper 4 (reserved) flags */ #endif u_char th_flags; #define TH_FIN 0x01 diff --git a/sys/netinet/tcp_lro.c b/sys/netinet/tcp_lro.c index b973c788d23e..c1d3b0d4f13f 100644 --- a/sys/netinet/tcp_lro.c +++ b/sys/netinet/tcp_lro.c @@ -921,7 +921,7 @@ tcp_set_entry_to_mbuf(struct lro_ctrl *lc, struct lro_entry *le, le->next_seq = ntohl(th->th_seq) + tcp_data_len; le->ack_seq = th->th_ack; le->window = th->th_win; - le->flags = th->th_flags; + le->flags = (th->th_x2 << 8) | th->th_flags; le->needs_merge = 0; /* Setup new data pointers. */ @@ -1033,7 +1033,7 @@ again: tcp_push_and_replace(lc, le, m); goto again; } - if ((th->th_flags & ~(TH_ACK | TH_PUSH)) != 0) { + if ((((th->th_x2 << 8) | th->th_flags) & ~(TH_ACK | TH_PUSH)) != 0) { /* * Make sure that previously seen segments/ACKs are delivered * before this segment, e.g. FIN. @@ -1077,7 +1077,7 @@ again: tcp_push_and_replace(lc, le, m); goto again; } - if ((th->th_flags & ~(TH_ACK | TH_PUSH)) != 0) { + if ((((th->th_x2 << 8) | th->th_flags) & ~(TH_ACK | TH_PUSH)) != 0) { tcp_push_and_replace(lc, le, m); goto again; } @@ -1265,7 +1265,7 @@ tcp_lro_ack_valid(struct mbuf *m, struct tcphdr *th, uint32_t **ppts, bool *othe break; } /* For ACKCMP we only accept ACK, PUSH, ECE and CWR. */ - if ((th->th_flags & ~(TH_ACK | TH_PUSH | TH_ECE | TH_CWR)) != 0) + if ((((th->th_x2 << 8) | th->th_flags) & ~(TH_ACK | TH_PUSH | TH_ECE | TH_CWR)) != 0) ret = false; /* If it has data on it we cannot compress it */ if (m->m_pkthdr.lro_tcp_d_len) @@ -1576,7 +1576,7 @@ build_ack_entry(struct tcp_ackent *ae, struct tcphdr *th, struct mbuf *m, ae->flags = TSTMP_HDWR; ae->seq = ntohl(th->th_seq); ae->ack = ntohl(th->th_ack); - ae->flags |= th->th_flags; + ae->flags |= (th->th_x2 << 8) | th->th_flags; if (ts_ptr != NULL) { ae->ts_value = ntohl(ts_ptr[1]); ae->ts_echo = ntohl(ts_ptr[2]); diff --git a/sys/netinet/tcp_lro.h b/sys/netinet/tcp_lro.h index b8abc2fa1ab3..dd2aa1148822 100644 --- a/sys/netinet/tcp_lro.h +++ b/sys/netinet/tcp_lro.h @@ -42,20 +42,20 @@ /* * Flags for ACK entry for compression - * the bottom 8 bits has the th_flags. + * the bottom 12 bits has the th_x2|th_flags. * LRO itself adds only the TSTMP flags * to indicate if either of the types * of timestamps are filled and the * HAS_TSTMP option to indicate if the * TCP timestamp option is valid. * - * The other 5 flag bits are for processing + * The other 1 flag bits are for processing * by a stack. * */ -#define TSTMP_LRO 0x0100 -#define TSTMP_HDWR 0x0200 -#define HAS_TSTMP 0x0400 +#define TSTMP_LRO 0x1000 +#define TSTMP_HDWR 0x2000 +#define HAS_TSTMP 0x4000 /* * Default number of interrupts on the same cpu in a row * that will cause us to declare a "affinity cpu". @@ -146,9 +146,10 @@ struct lro_entry { uint16_t compressed; uint16_t uncompressed; uint16_t window; - uint8_t flags; - uint8_t timestamp : 1; - uint8_t needs_merge : 1; + uint16_t flags : 12, /* 12 TCP header bits */ + timestamp : 1, + needs_merge : 1, + reserved : 2; /* unused */ struct bintime alloc_time; /* time when entry was allocated */ };