All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Heng Qi <hengqi@linux.alibaba.com>
Cc: virtio-dev@lists.oasis-open.org,
	"Michael S . Tsirkin" <mst@redhat.com>,
	Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
	Heng Qi <henqqi@linux.alibaba.com>
Subject: [virtio-dev] Re: [PATCH 2/2] virtio_net: support inner header hash for GRE-encapsulated packets
Date: Thu, 10 Nov 2022 11:35:19 +0800	[thread overview]
Message-ID: <CACGkMEtVMLKDGfXzhbVshO2DkHmU6ayNH=-EJg2ins9jJYjGNg@mail.gmail.com> (raw)
In-Reply-To: <20221109113336.121773-3-hengqi@linux.alibaba.com>

On Wed, Nov 9, 2022 at 7:33 PM Heng Qi <hengqi@linux.alibaba.com> wrote:
>
> From: Heng Qi <henqqi@linux.alibaba.com>
>
> When VIRTIO_NET_F_RSS is negotiated and the tunnel is used to
> encapsulate the packets, the hash calculated using the outer header
> of the receive packets is always fixed for the same flow packets,
> i.e. they will be steered to the same receive queue.
>
> We add a VIRTIO_NET_HASH_TYPE_GRE_INNER bitmask in \field{hash_types},
> which instructs the device to calculate the hash using the inner headers
> of GRE-encapsulated packets.
>
> Signed-off-by: Heng Qi <henqqi@linux.alibaba.com>
> Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
> ---
>  content.tex | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 116 insertions(+)
>
> diff --git a/content.tex b/content.tex
> index 6fabf1d..319d401 100644
> --- a/content.tex
> +++ b/content.tex
> @@ -3883,6 +3883,10 @@ \subsubsection{Processing of Incoming Packets}\label{sec:Device Types / Network
>  #define VIRTIO_NET_HASH_TYPE_TCP_EX            (1 << 7)
>  #define VIRTIO_NET_HASH_TYPE_UDP_EX            (1 << 8)
>  \end{lstlisting}
> +Hash types applicable to inner payloads of GRE-encapsulated packets
> +\begin{lstlisting}
> +#define VIRTIO_NET_HASH_TYPE_GRE_INNER         (1 << 9)
> +\end{lstlisting}
>
>  \subparagraph{IPv4 packets}
>  \label{sec:Device Types / Network Device / Device Operation / Processing of Incoming Packets / Hash calculation for incoming packets / IPv4 packets}
> @@ -3975,6 +3979,114 @@ \subsubsection{Processing of Incoming Packets}\label{sec:Device Types / Network
>  (see \ref{sec:Device Types / Network Device / Device Operation / Processing of Incoming Packets / Hash calculation for incoming packets / IPv6 packets without extension header}).
>  \end{itemize}
>
> +\subparagraph{Inner payloads of GRE-encapsulated packets}
> +\label{sec:Device Types / Network Device / Device Operation / Processing of Incoming Packets / Hash calculation for incoming packets / Inner payloads of GRE-encapsulated packets}}
> +VIRTIO_NET_HASH_TYPE_GRE_INNER bit MUST be set at the same time as one of
> +the bits between VIRTIO_NET_HASH_TYPE_IPv4 and VIRTIO_NET_HASH_TYPE_UDP_EX.

"MUST" keyword must belong to the normative section.

> +
> +The device calculates the hash on GRE-encapsulated packets whose inner payloads
> +are IPv4 packets according to 'Enabled hash types' bitmasks as follows:
> +\begin{itemize}
> +  \item If both VIRTIO_NET_HASH_TYPE_GRE_INNER and VIRTIO_NET_HASH_TYPE_TCPv4 bits
> +      are set, and the GRE-encapsulated packet has an inner TCPv4 header in its
> +      payload, the hash is calculated over the following fields:
> +    \begin{itemsize}
> +      \item Inner source IP address
> +      \item Inner destination IP address
> +      \item Inner source TCP port
> +      \item Inner destination TCP port
> +    \end{itemsize}
> +  \item Else if both VIRTIO_NET_HASH_TYPE_GRE_INNER and VIRTIO_NET_HASH_TYPE_UDPv4
> +      bits are set, and the GRE-encapsulated packet has an inner UDPv4 header in
> +      its payload, the hash is calculated over the following fields:
> +    \begin{itemsize}
> +      \item Inner source IP address
> +      \item Inner destination IP address
> +      \item Inner source UDP port
> +      \item Inner destination UDP port
> +    \end{itemize}
> +  \item Else if both VIRTIO_NET_HASH_TYPE_GRE_INNER and VIRTIO_NET_HASH_TYPE_IPv4
> +      bits are set, the hash is calculated over the following fields:
> +    \begin{itemsize}
> +      \item Inner source IP address
> +      \item Inner destination IP address
> +    \end{itemsize}
> +  \item Else the device does not calculate the hash
> +\end{itemize}
> +
> +The device calculates the hash on GRE-encapsulated packets whose inner payloads
> +are IPv6 packets without extension headers according to 'Enabled hash types'
> +bitmasks as follows:
> +\begin{itemsize}
> +  \item If both VIRTIO_NET_HASH_TYPE_GRE_INNER and VIRTIO_NET_HASH_TYPE_TCPv6
> +      bits are set, and the GRE-encapsulated packet has an inner TCPv6 header in
> +      its payload, the hash is calculated over the following fields:
> +    \begin{itemsize}
> +      \item Inner source IPv6 address
> +      \item Inner destination IPv6 address
> +      \item Inner source TCP port
> +      \item Inner destination TCP port
> +    \end{itemsize}
> +  \item Else if both VIRTIO_NET_HASH_TYPE_GRE_INNER and VIRTIO_NET_HASH_TYPE_UDPv6
> +      bits are set, and the GRE-encapsulated packet has an inner UDPv6 header in
> +      its payload, the hash is calculated over the following fields:
> +    \begin{itemsize}
> +      \item Inner source IPv6 address
> +      \item Inner destination IPv6 address
> +      \item Inner source UDP port
> +      \item Inner destination UDP port
> +    \end{itemize}
> +  \item Else if both VIRTIO_NET_HASH_TYPE_GRE_INNER and VIRTIO_NET_HASH_TYPE_IPv6
> +      bits are set, the hash is calculated over the following fields:
> +    \begin{itemsize}
> +      \item Inner source IPv6 address
> +      \item Inner destination IPv6 address
> +    \end{itemsize}
> +  \item Else the device does not calculate the hash
> +\end{itemize}
> +
> +The device calculates the hash on GRE-encapsulated packets whose inner payloads
> +are IPv6 packets with extension headers according to 'Enabled hash types'
> +bitmasks as follows:
> +\begin{itemsize}
> +  \item If both VIRTIO_NET_HASH_TYPE_GRE_INNER and VIRTIO_NET_HASH_TYPE_TCP_EX
> +      bits are set, and the GRE-encapsulated packet has an inner TCPv6 header in
> +      its payload, the hash is calculated over the following fields:
> +    \begin{itemize}
> +      \item Home address from the home address option in the IPv6 destination options

Is this inner or outer?

Thanks

> +          header. If the extension header is not present, use the Source IPv6 address.
> +      \item IPv6 address that is contained in the Routing-Header-Type-2 from the
> +          associated extension header. If the extension header is not present, use
> +          the Destination IPv6 address.
> +      \item Source TCP port
> +      \item Destination TCP port
> +    \end{itemize}
> +  \item Else if both VIRTIO_NET_HASH_TYPE_GRE_INNER and VIRTIO_NET_HASH_TYPE_UDP_EX
> +  bits are set, and the GRE-encapsulated packet has an inner UDPv6 header in its
> +  payload, the hash is calculated over the following fields:
> +    \begin{itemsize}
> +      \item Home address from the home address option in the IPv6 destination options
> +          header. If the extension header is not present, use the Source IPv6 address.
> +      \item IPv6 address that is contained in the Routing-Header-Type-2 from the
> +          associated extension header. If the extension header is not present, use the
> +          Destination IPv6 address.
> +      \item Source UDP port
> +      \item Destination UDP port
> +    \end{itemize}
> +  \item Else if both VIRTIO_NET_HASH_TYPE_GRE_INNER and VIRTIO_NET_HASH_TYPE_IP_EX
> +      bits are set, the hash is calculated over the following fields:
> +    \begin{itemsize}
> +      \item Home address from the home address option in the IPv6 destination options
> +          header. If the extension header is not present, use the Source IPv6 address.
> +      \item IPv6 address that is contained in the Routing-Header-Type-2 from the
> +          associated extension header. If the extension header is not present, use the
> +          Destination IPv6 address.
> +    \end{itemize}
> +  \item Else skip IPv6 extension headers and calculate the hash as defined for
> +      a GRE-encapsulated packet whose inner payload is an IPv6 packet without
> +      extension headers
> +\end{itemsize}
> +
>  \paragraph{Hash reporting for incoming packets}
>  \label{sec:Device Types / Network Device / Device Operation / Processing of Incoming Packets / Hash reporting for incoming packets}
>
> @@ -4005,6 +4117,10 @@ \subsubsection{Processing of Incoming Packets}\label{sec:Device Types / Network
>  #define VIRTIO_NET_HASH_REPORT_UDPv6_EX        9
>  \end{lstlisting}
>
> +VIRTIO_NET_HASH_TYPE_GRE_INNER bit is not included in \field{hash_report},
> +it just indicates that the hash is calculated using the inner header inside
> +the GRE-encapsulated packet.
> +
>  \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Device Operation / Control Virtqueue}
>
>  The driver uses the control virtqueue (if VIRTIO_NET_F_CTRL_VQ is
> --
> 2.19.1.6.gb485710b
>


---------------------------------------------------------------------
To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org
For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org


  reply	other threads:[~2022-11-10  3:35 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-09 11:33 [virtio-dev] [PATCH 0/2] virtio_net: support inner header hash for GRE-encapsulated packets Heng Qi
2022-11-09 11:33 ` [virtio-dev] [PATCH 1/2] virtio_net: fix syntax errors Heng Qi
2022-11-09 11:33 ` [virtio-dev] [PATCH 2/2] virtio_net: support inner header hash for GRE-encapsulated packets Heng Qi
2022-11-10  3:35   ` Jason Wang [this message]
2022-11-10  3:37     ` [virtio-dev] " Heng Qi
2022-11-10  3:41     ` Heng Qi
2022-11-16 23:32       ` Yuri Benditovich
2022-11-17  2:52         ` Heng Qi
2022-11-17  4:29           ` Jason Wang
2022-11-17  5:00             ` Heng Qi
2022-11-17  5:34               ` Jason Wang
2022-11-17  6:00                 ` Heng Qi
2022-11-17  6:09                   ` Jason Wang
2022-11-17  7:48                     ` Heng Qi
2022-11-18  7:34                       ` Jason Wang
2022-11-18  9:25                         ` Heng Qi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CACGkMEtVMLKDGfXzhbVshO2DkHmU6ayNH=-EJg2ins9jJYjGNg@mail.gmail.com' \
    --to=jasowang@redhat.com \
    --cc=hengqi@linux.alibaba.com \
    --cc=henqqi@linux.alibaba.com \
    --cc=mst@redhat.com \
    --cc=virtio-dev@lists.oasis-open.org \
    --cc=xuanzhuo@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.