[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [PATCH] virtio-net: define USO feature
Ping On Sat, Apr 10, 2021 at 12:27 PM Yuri Benditovich <yuri.benditovich@daynix.com> wrote: > > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/104 > > Unlike UFO (fragmenting the packet) the USO splits large UDP packet > to several segments when each of these smaller packets has UDP > header. In Linux see SKB_GSO_UDP_L4. > > Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com> > --- > content.tex | 31 ++++++++++++++++++++----------- > 1 file changed, 20 insertions(+), 11 deletions(-) > > diff --git a/content.tex b/content.tex > index e536fd4..2708386 100644 > --- a/content.tex > +++ b/content.tex > @@ -2964,6 +2964,8 @@ \subsection{Feature bits}\label{sec:Device Types / Network Device / Feature bits > \item[VIRTIO_NET_F_CTRL_MAC_ADDR(23)] Set MAC address through control > channel. > > +\item[VIRTIO_NET_F_HOST_USO (56)] Device can receive USO. > + > \item[VIRTIO_NET_F_HASH_REPORT(57)] Device can report per-packet hash > value and a type of calculated hash. > > @@ -2998,6 +3000,7 @@ \subsubsection{Feature bit requirements}\label{sec:Device Types / Network Device > \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_UFO] Requires VIRTIO_NET_F_CSUM. > +\item[VIRTIO_NET_F_HOST_USO] Requires VIRTIO_NET_F_CSUM. > > \item[VIRTIO_NET_F_CTRL_RX] Requires VIRTIO_NET_F_CTRL_VQ. > \item[VIRTIO_NET_F_CTRL_VLAN] Requires VIRTIO_NET_F_CTRL_VQ. > @@ -3200,10 +3203,10 @@ \subsection{Device Initialization}\label{sec:Device Types / Network Device / Dev > \item A performant driver would indicate that it will generate checksumless > packets by negotating the VIRTIO_NET_F_CSUM feature. > > -\item If that feature is negotiated, a driver can use TCP or UDP > - segmentation offload by negotiating the VIRTIO_NET_F_HOST_TSO4 (IPv4 > - TCP), VIRTIO_NET_F_HOST_TSO6 (IPv6 TCP) and VIRTIO_NET_F_HOST_UFO > - (UDP fragmentation) features. > +\item If that feature is negotiated, a driver can use TCP segmentation or UDP > + segmentation/fragmentation offload by negotiating the VIRTIO_NET_F_HOST_TSO4 (IPv4 > + TCP), VIRTIO_NET_F_HOST_TSO6 (IPv6 TCP), VIRTIO_NET_F_HOST_UFO > + (UDP fragmentation) and VIRTIO_NET_F_HOST_USO (UDP segmentation) features. > > \item The converse features are also available: a driver can save > the virtual device some work by negotiating these features.\note{For example, a network packet transported between two guests on > @@ -3242,6 +3245,7 @@ \subsection{Device Operation}\label{sec:Device Types / Network Device / Device O > #define VIRTIO_NET_HDR_GSO_TCPV4 1 > #define VIRTIO_NET_HDR_GSO_UDP 3 > #define VIRTIO_NET_HDR_GSO_TCPV6 4 > +#define VIRTIO_NET_HDR_GSO_UDP_L4 5 > #define VIRTIO_NET_HDR_GSO_ECN 0x80 > u8 gso_type; > le16 hdr_len; > @@ -3312,9 +3316,9 @@ \subsubsection{Packet Transmission}\label{sec:Device Types / Network Device / De > \end{note} > > \item If the driver negotiated > - VIRTIO_NET_F_HOST_TSO4, TSO6 or UFO, and the packet requires > - TCP segmentation or UDP fragmentation, then \field{gso_type} > - is set to VIRTIO_NET_HDR_GSO_TCPV4, TCPV6 or UDP. > + VIRTIO_NET_F_HOST_TSO4, TSO6, USO or UFO, and the packet requires > + TCP segmentation, UDP segmentation or fragmentation, then \field{gso_type} > + is set to VIRTIO_NET_HDR_GSO_TCPV4, TCPV6, UDP_L4 or UDP. > (Otherwise, it is set to VIRTIO_NET_HDR_GSO_NONE). In this > case, packets larger than 1514 bytes can be transmitted: the > metadata indicates how to replicate the packet header to cut it > @@ -3372,9 +3376,14 @@ \subsubsection{Packet Transmission}\label{sec:Device Types / Network Device / De > > If VIRTIO_NET_F_HOST_UFO is negotiated, the driver MAY set > \field{gso_type} to VIRTIO_NET_HDR_GSO_UDP to request UDP > -segmentation, otherwise the driver MUST NOT set > +fragmentation, otherwise the driver MUST NOT set > \field{gso_type} to VIRTIO_NET_HDR_GSO_UDP. > > +If VIRTIO_NET_F_HOST_USO is negotiated, the driver MAY set > +\field{gso_type} to VIRTIO_NET_HDR_GSO_UDP_L4 to request UDP > +segmentation, otherwise the driver MUST NOT set > +\field{gso_type} to VIRTIO_NET_HDR_GSO_UDP_L4. > + > The driver SHOULD NOT send to the device TCP packets requiring segmentation offload > which have the Explicit Congestion Notification bit set, unless the > VIRTIO_NET_F_HOST_ECN feature is negotiated, in which case the > @@ -3398,7 +3407,7 @@ \subsubsection{Packet Transmission}\label{sec:Device Types / Network Device / De > packet; > \end{enumerate} > > -If none of the VIRTIO_NET_F_HOST_TSO4, TSO6 or UFO options have > +If none of the VIRTIO_NET_F_HOST_TSO4, TSO6, USO or UFO options have > been negotiated, the driver MUST set \field{gso_type} to > VIRTIO_NET_HDR_GSO_NONE. > > @@ -3407,7 +3416,7 @@ \subsubsection{Packet Transmission}\label{sec:Device Types / Network Device / De > \field{flags} and MUST set \field{gso_size} to indicate the > desired MSS. > > -If one of the VIRTIO_NET_F_HOST_TSO4, TSO6 or UFO options have > +If one of the VIRTIO_NET_F_HOST_TSO4, TSO6, USO or UFO options have > been negotiated: > \begin{itemize} > \item If the VIRTIO_NET_F_GUEST_HDRLEN feature has been negotiated, > @@ -3434,7 +3443,7 @@ \subsubsection{Packet Transmission}\label{sec:Device Types / Network Device / De > If VIRTIO_NET_HDR_F_NEEDS_CSUM bit in \field{flags} is not set, the > device MUST NOT use the \field{csum_start} and \field{csum_offset}. > > -If one of the VIRTIO_NET_F_HOST_TSO4, TSO6 or UFO options have > +If one of the VIRTIO_NET_F_HOST_TSO4, TSO6, USO or UFO options have > been negotiated: > \begin{itemize} > \item If the VIRTIO_NET_F_GUEST_HDRLEN feature has been negotiated, > -- > 2.25.1 >
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]