RE: [PATCH v10 2/2] virtio-net: Define Accurate ECN feature in virtio-spec

Parav Pandit <[email protected]>
Newsgroups dev.linux.lists.virtio-comment
Message-ID <CY8PR12MB71950FC97DBD868FCC9872F7DC1BA@CY8PR12MB7195.namprd12.prod.outlook.com>

> From: Mirja Kuehlewind <[email protected]>
> 
> The draft is final and approved. The next "version" will be RFC9768 with some
> minor editorial changes. We are only waiting for the final approval of one
> author otherwise this is ready to publish as RFC.
>
This is good. Thanks for the confirmation.
Continuing rest of the review.
 
> On 29.09.25, 13:01, "Parav Pandit" <[email protected]
> <mailto:[email protected]>> wrote:
> 
> 
> > From: [email protected]
> > <mailto:[email protected]> <chia-yu.chang@nokia-bell-
> > labs.com>
> >
> > From: Chia-Yu Chang <[email protected]
> > <mailto:[email protected]>>
> >
> > This change implements Accurate ECN based on the AccECN specification
> > (RFC-to-be 9768):
> >
> > https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftool
> > s.ietf.org%2Fid%2Fdraft-ietf-tcpm-accurate-ecn-34.txt&data=05%7C02%7Cp
> >
> arav%40nvidia.com%7Caed29967ec87454c35e208ddff50d6ef%7C43083d1572
> 7340c
> >
> 1b7db39efd9ccc17a%7C0%7C0%7C638947444875846641%7CUnknown%7CT
> WFpbGZsb3d
> >
> 8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOI
> joiT
> >
> WFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=I8SBCd4SV%2FJHeW0tf
> djMvoZNp
> > i4OerT04rdKAf7qlyI%3D&reserved=0
> > <https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftoo
> > ls.ietf.org%2Fid%2Fdraft-ietf-tcpm-accurate-ecn-34.txt&data=05%7C02%7C
> >
> parav%40nvidia.com%7Caed29967ec87454c35e208ddff50d6ef%7C43083d157
> 27340
> >
> c1b7db39efd9ccc17a%7C0%7C0%7C638947444875883972%7CUnknown%7CT
> WFpbGZsb3
> >
> d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkF
> OIjoi
> >
> TWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=XIvEjEX%2Fpa6FH8%2
> BOs0nwzq
> > vdOZgfMqHeXJYJ1jHNUiM%3D&reserved=0>
> >
> is this approved IETF draft or there is next version after this?
> Suggested link indicates that this draft expires on 11th this month.
> 
> 
> 
> 
> > Unlike RFC3168 ECN, Accurate ECN uses the TCP CWR flag as part of the
> > ACE field to count new packets with CE marks in the IP-ECN field;
> > however, RFC
> > 3168 ECN-aware TSO will clean the TCP CWR flag from the 2nd segment of
> > an aggregated segment. Therefore, fallback shall be applied by setting
> > NETIF_F_GSO_ACCECN to ensure that the CWR flag should not be changed
> > within the aggregated segment (e.g., super-skb in Linux).
> >
> It would be to add the link in commit message to NETIF_F_GSO_ACCECN
> Linux kernel documentation.
> 
> 
> > To apply it in virtio-spec, new feature bits for host and guest are
> > added for feature negotiation between driver and device. And the
> > translation of the Accurate ECN GSO flag between virtio_net_hdr and
> > skb header for NETIF_F_GSO_ACCECN is also added to avoid CWR flag
> > corruption due to
> > RFC3168 ECN TSO.
> >
> > Signed-off-by: Chia-Yu Chang <[email protected]
> > <mailto:[email protected]>>
> > ---
> > device-types/net/description.tex | 54 +++++++++++++++++++++++++-------
> > introduction.tex | 3 ++
> > 2 files changed, 46 insertions(+), 11 deletions(-)
> >
> > diff --git a/device-types/net/description.tex b/device-
> > types/net/description.tex index 0da8f9f..6761148 100644
> > --- a/device-types/net/description.tex
> > +++ b/device-types/net/description.tex
> > @@ -150,6 +150,15 @@ \subsection{Feature bits}\label{sec:Device Types
> > / Network Device / Feature bits when VIRTIO_NET_F_IPSEC is negotiated.
> > When a device offers IPsec feature, it SHOULD also offer the
> > VIRTIO_NET_F_OUT_NET_HEADER feature.
> >
> > +\item[VIRTIO_NET_F_HOST_ACCECN (71)] Device can receive TSO and
> > +follow  the requirements of the ACE field described in  ``Section
> > +3.3.4 . Requirements for TCP Segmentation Offload and Large
> > Receive Offload''
> > + of \hyperref[intro:accecn]{[AccECN]}.
> > +
> > +\item[VIRTIO_NET_F_GUEST_ACCECN (72)] Driver can receive TSO and
> > follow
> > + the requirements of the ACE field described in ``Section 3.3.4 .
> > + Requirements for TCP Segmentation Offload and Large
> > Receive Offload''
> > + of \hyperref[intro:accecn]{[AccECN]}.
> > \end{description}
> >
> > \subsubsection{Feature bit requirements}\label{sec:Device Types /
> > Network Device / Feature bits / Feature bit requirements} @@ -161,6
> > +170,7 @@ \subsubsection{Feature bit requirements}\label{sec:Device
> > Types / Network Device \item[VIRTIO_NET_F_GUEST_TSO4] Requires
> > VIRTIO_NET_F_GUEST_CSUM.
> > \item[VIRTIO_NET_F_GUEST_TSO6] Requires VIRTIO_NET_F_GUEST_CSUM.
> > \item[VIRTIO_NET_F_GUEST_ECN] Requires VIRTIO_NET_F_GUEST_TSO4 or
> > VIRTIO_NET_F_GUEST_TSO6.
> > +\item[VIRTIO_NET_F_GUEST_ACCECN] Requires
> > VIRTIO_NET_F_GUEST_TSO4 or VIRTIO_NET_F_GUEST_TSO6.
> > \item[VIRTIO_NET_F_GUEST_UFO] Requires VIRTIO_NET_F_GUEST_CSUM.
> > \item[VIRTIO_NET_F_GUEST_USO4] Requires VIRTIO_NET_F_GUEST_CSUM.
> > \item[VIRTIO_NET_F_GUEST_USO6] Requires VIRTIO_NET_F_GUEST_CSUM.
> > @@ -171,6 +181,7 @@ \subsubsection{Feature bit
> > requirements}\label{sec:Device Types / Network Device
> > \item[VIRTIO_NET_F_HOST_TSO4] Requires VIRTIO_NET_F_CSUM.
> > \item[VIRTIO_NET_F_HOST_TSO6] Requires VIRTIO_NET_F_CSUM.
> > \item[VIRTIO_NET_F_HOST_ECN] Requires VIRTIO_NET_F_HOST_TSO4 or
> > VIRTIO_NET_F_HOST_TSO6.
> > +\item[VIRTIO_NET_F_HOST_ACCECN] Requires VIRTIO_NET_F_HOST_TSO4
> > or VIRTIO_NET_F_HOST_TSO6.
> > \item[VIRTIO_NET_F_HOST_UFO] Requires VIRTIO_NET_F_CSUM.
> > \item[VIRTIO_NET_F_HOST_USO] Requires VIRTIO_NET_F_CSUM.
> > \item[VIRTIO_NET_F_HOST_UDP_TUNNEL_GSO] Requires
> > VIRTIO_NET_F_HOST_TSO4, VIRTIO_NET_F_HOST_TSO6 @@ -294,11
> > +305,11 @@ \subsection{Device configuration layout}\label{sec:Device
> > +Types
> > / Network Device The device MUST NOT modify \field{mtu} once it has
> > been set.
> >
> > The device MUST NOT pass received packets that exceed \field{mtu}
> > (plus low -level ethernet header length) size with \field{gso_type}
> > NONE or ECN
> > +level ethernet header length) size with \field{gso_type} NONE, ECN or
> > +ACCECN
> > after VIRTIO_NET_F_MTU has been successfully negotiated.
> >
> > The device MUST forward transmitted packets of up to \field{mtu} (plus
> > low - level ethernet header length) size with \field{gso_type} NONE or
> > ECN, and do
> > +level ethernet header length) size with \field{gso_type} NONE, ECN or
> > +ACCECN, and do
> > so without fragmentation, after VIRTIO_NET_F_MTU has been successfully
> > negotiated.
> >
> > @@ -348,11 +359,11 @@ \subsection{Device configuration
> > layout}\label{sec:Device Types / Network Device
> >
> > If the driver negotiates VIRTIO_NET_F_MTU, it MUST supply enough
> > receive buffers to receive at least one receive packet of size
> > \field{mtu} (plus low -level ethernet header length) with \field{gso_type}
> NONE or ECN.
> > +level ethernet header length) with \field{gso_type} NONE, ECN or ACCECN.
> >
> > If the driver negotiates VIRTIO_NET_F_MTU, it MUST NOT transmit
> > packets of size exceeding the value of \field{mtu} (plus low level
> > ethernet header length) - with \field{gso_type} NONE or ECN.
> > +with \field{gso_type} NONE, ECN or ACCECN.
> >
> > A driver SHOULD negotiate the VIRTIO_NET_F_STANDBY feature if the
> > device offers it.
> >
> > @@ -443,7 +454,7 @@ \subsection{Device
> > Initialization}\label{sec:Device Types / Network Device / Dev The
> > VIRTIO_NET_F_GUEST_CSUM feature indicates that partially checksummed
> > packets can be received, and if it can do that then the
> > VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6,
> > - VIRTIO_NET_F_GUEST_UFO, VIRTIO_NET_F_GUEST_ECN,
> > VIRTIO_NET_F_GUEST_USO4,
> > + VIRTIO_NET_F_GUEST_UFO, VIRTIO_NET_F_GUEST_ECN,
> > + VIRTIO_NET_F_GUEST_ACCECN, VIRTIO_NET_F_GUEST_USO4,
> > VIRTIO_NET_F_GUEST_USO6 VIRTIO_NET_F_GUEST_UDP_TUNNEL_GSO
> and
> > VIRTIO_NET_F_GUEST_UDP_TUNNEL_GSO_CSUM are the input equivalents
> of
> > the features described above.
> > @@ -613,6 +624,7 @@ \subsection{Device Operation}\label{sec:Device
> > Types / Network Device / Device O #define
> > VIRTIO_NET_HDR_GSO_UDP_TUNNEL_IPV4 0x20 #define
> > VIRTIO_NET_HDR_GSO_UDP_TUNNEL_IPV6 0x40 #define
> VIRTIO_NET_HDR_GSO_ECN
> > 0x80
> > +#define VIRTIO_NET_HDR_GSO_ACCECN 0x10
> > u8 gso_type;
> > le16 hdr_len;
> > le16 gso_size;
> > @@ -737,6 +749,13 @@ \subsubsection{Packet
> > Transmission}\label{sec:Device Types / Network Device / De has the CWR
> > flag set and follows the requirements of the CWR flag described in
> > ``Section 6.1.2. The TCP Sender'' of \hyperref[intro:rfc3168]{[RFC3168]}.
> > \footnote{This case is not handled by some older hardware, so is
> > called out specifically in the protocol.}.
> > +
> > + \item If the driver negotiated the VIRTIO_NET_F_HOST_ACCECN feature,
> > + the VIRTIO_NET_HDR_GSO_ACCECN bit in \field{gso_type} indicates that
> > the TCP packet
> > + follows the requirements of the ACE field described in ``Section
> > + 3.3.4 . Requirements for TCP Segmentation Offload and Large
> > Receive Offload''
> > + of \hyperref[intro:accecn]{[AccECN]}.
> > + \footnote{This case is not handled by some older hardware, so is
> > + called out
> > specifically in the protocol.}.
> > \end{itemize}
> >
> > \item If the driver negotiated the VIRTIO_NET_F_HOST_UDP_TUNNEL_GSO
> > feature and the @@ -837,6 +856,12 @@ \subsubsection{Packet
> > Transmission}\label{sec:Device Types / Network Device / De of
> > \hyperref[intro:rfc3168]{[RFC3168]}, unless the VIRTIO_NET_F_HOST_ECN
> > feature is negotiated, in which case the driver MUST set the
> > VIRTIO_NET_HDR_GSO_ECN bit in \field{gso_type}.
> >
> > +The driver SHOULD NOT send to the device TCP packets requiring
> > +segmentation offload which need to follow the ACE field requirements
> > +described in ``Section 3.3.4 . Requirements for TCP Segmentation
> > +Offload and
> > Large Receive Offload''
> > +of \hyperref[intro:accecn]{[AccECN]}, unless the
> > +VIRTIO_NET_F_HOST_ACCECN feature is negotiated, in which case the
> > +driver
> > MUST set the VIRTIO_NET_HDR_GSO_ACCECN bit in \field{gso_type}.
> > +
> > If VIRTIO_NET_F_HOST_UDP_TUNNEL_GSO is negotiated, the driver MAY
> set
> > VIRTIO_NET_HDR_GSO_UDP_TUNNEL_IPV4 bit or the
> > VIRTIO_NET_HDR_GSO_UDP_TUNNEL_IPV6 bit in \field{gso_type} according
> > to the inner network header protocol type @@ -1171,12 +1196,12 @@
> > \subsubsection{Processing of Incoming Packets}\label{sec:Device Types
> > / Network value to indicate the outer network header offset in packet.
> > \end{enumerate}
> >
> > -Additionally, VIRTIO_NET_F_GUEST_CSUM, TSO4, TSO6, UDP, UDP_TUNNEL
> > -and ECN features enable receive checksum, large receive offload and
> > RFC3168 -ECN support which are the input equivalents of the transmit
> > checksum, - transmit segmentation offloading and RFC3168 ECN features,
> > as described -in \ref{sec:Device Types / Network Device / Device
> > Operation / -Packet
> > Transmission}:
> > +Additionally, VIRTIO_NET_F_GUEST_CSUM, TSO4, TSO6, UDP,
> UDP_TUNNEL,
> > ECN
> > +and ACCECN features enable receive checksum, large receive offload,
> > +RFC3168 ECN and Accurate ECN support which are the input equivalents
> > +of the transmit checksum, transmit segmentation offloading, RFC3168
> > +ECN and Accurate ECN features, as described in \ref{sec:Device Types
> > +/ Network Device / Device Operation / Packet Transmission}:
> > \begin{enumerate}
> > \item If the VIRTIO_NET_F_GUEST_TSO4, TSO6, UFO, USO4 or USO6 options
> > were negotiated, then \field{gso_type} MAY be something other than @@
> > -
> > 1286,6 +1311,12 @@ \subsubsection{Processing of Incoming
> > Packets}\label{sec:Device Types / Network if packet contains a valid
> > network header. Otherwise, the device MUST not use
> \field{outer_nh_offset}.
> >
> > +The device SHOULD NOT send to the driver TCP packets requiring
> > +segmentation offload which need to follow the ACE field requirements
> > +described in ``Section 3.3.4 . Requirements for TCP Segmentation
> > +Offload and
> > Large Receive Offload''
> > +of \hyperref[intro:accecn]{[AccECN]}, unless the
> > +VIRTIO_NET_F_GUEST_ACCECN feature is negotiated, in which case the
> > device MUST set the VIRTIO_NET_HDR_GSO_ACCECN bit in \field{gso_type}.
> > +
> > If the VIRTIO_NET_F_GUEST_CSUM feature has been negotiated, the device
> > MAY set the VIRTIO_NET_HDR_F_NEEDS_CSUM bit in \field{flags}, if so:
> > @@ -2286,6 +2317,7 @@ \subsubsection{Control
> > Virtqueue}\label{sec:Device Types / Network Device / Devi #define
> > VIRTIO_NET_F_GUEST_UDP_TUNNEL_GSO_CSUM 47 #define
> > VIRTIO_NET_F_GUEST_USO4 54 #define VIRTIO_NET_F_GUEST_USO6 55
> > +#define VIRTIO_NET_F_GUEST_ACCECN 70
> >
> > #define VIRTIO_NET_CTRL_GUEST_OFFLOADS 5 #define
> > VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET 0 diff --git a/introduction.tex
> > b/introduction.tex index 1c4cb33..fabefe4 100644
> > --- a/introduction.tex
> > +++ b/introduction.tex
> > @@ -183,6 +183,9 @@ \section{Normative
> References}\label{sec:Normative
> > References} \phantomsection\label{intro:rfc3168}\textbf{[RFC3168]} &
> > S. Floyd., ``The Addition of Explicit Congestion Notification (ECN) to
> > IP'', September 2001.
> >
> > \newline\url{http://h/ <http://h/>
> > ttp%3A%2F%2Fwww.ietf.org%2Frfc%2Frfc3168.txt&data=05%7C02%7Cpara
> > v%40nvidia.com%7Ccd0d940b2c75467aded808dddb2a55ed%7C43083d15
> > 727340c1b7db39efd9ccc17a%7C0%7C0%7C638907697092805411%7CUn
> > known%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAw
> > MCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%
> > 7C&sdata=q85q1Dlh1v%2Bvf5PUA4D3KlNdTkm6FNhy701It%2BS7648%3D
> > &reserved=0}\\
> > + \phantomsection\label{intro:accecn}\textbf{[AccECN]} & B. Briscoe.,
> > + ``More Accurate Explicit Congestion Notification (AccECN)
> > Feedback in TCP'', March 2025.
> > +
> > + \newline\url{http://https/ <http://https/>
> > + %3A%2F%2Fwww.ietf.org%2Farchive%2Fid%2Fdraft-ietf-tcpm-accurate-
> > ecn-34
> > +
> > .txt&data=05%7C02%7Cparav%40nvidia.com%7Ccd0d940b2c75467aded80
> > 8dddb2a5
> > +
> > 5ed%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C6389076970
> > 92821586%7C
> > +
> > Unknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMD
> > AwMCIsIlAi
> > +
> > OiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdat
> > a=nFBacE
> > + %2BDuwZTbFR6kPuHdJaBt3tWOLzUjrLsYDyRKso%3D&reserved=0}\\
> > \end{longtable}
> >
> > \section{Non-Normative References}
> > --
> > 2.34.1
> >
> 
> 
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.