OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

virtio-comment message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: [PATCH] virtio-net: define support for controlled steering mode


Introducing feature bit and set of control commands
for steering mode configuration.
---
 content.tex | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 109 insertions(+)

diff --git a/content.tex b/content.tex
index 8f0498e..3515ed1 100644
--- a/content.tex
+++ b/content.tex
@@ -2732,6 +2732,9 @@ \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_CTRL_STEERING_MODE(61)] Device supports selectable
+    steering mode and/or control of steering mode parameters.
+
 \item[VIRTIO_NET_F_RSC_EXT(61)] Device can process duplicated ACKs
     and report number of coalesced segments and duplicated ACKs
 
@@ -2761,6 +2764,7 @@ \subsubsection{Feature bit requirements}\label{sec:Device Types / Network Device
 \item[VIRTIO_NET_F_MQ] Requires VIRTIO_NET_F_CTRL_VQ.
 \item[VIRTIO_NET_F_CTRL_MAC_ADDR] Requires VIRTIO_NET_F_CTRL_VQ.
 \item[VIRTIO_NET_F_RSC_EXT] Requires VIRTIO_NET_F_HOST_TSO4 or VIRTIO_NET_F_HOST_TSO6.
+\item[VIRTIO_NET_F_CTRL_STEERING_MODE] Requires VIRTIO_NET_F_MQ.
 \end{description}
 
 \subsubsection{Legacy Interface: Feature bits}\label{sec:Device Types / Network Device / Feature bits / Legacy Interface: Feature bits}
@@ -3700,8 +3704,113 @@ \subsubsection{Control Virtqueue}\label{sec:Device Types / Network Device / Devi
 MUST format \field{offloads}
 according to the native endian of the guest rather than
 (necessarily when not using the legacy interface) little-endian.
+\paragraph{Controlled steering mode}\label{sec:Device Types / Network Device / Device Operation / Control Virtqueue / Controlled steering mode}
+Device indicates presence of this feature if it supports selectable/configurable steering modes.
+\subparagraph{Querying and setting steering mode}\label{sec:Device Types / Network Device / Device Operation / Control Virtqueue / Controlled steering mode / Querying and setting steering mode}
+There are two kinds of defined commands: GET and SET.
+
+For both types of commands driver sends output buffer containing \field{virtio_net_ctrl}, as defined by the \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue}.
+
+For GET commands driver provides input for response structure defined for respective GET command.
+
+Each response structure includes first byte for \field{ack} code of regular response for control command.
+
+Driver uses following value as \field{class} for all the commands related to steering control
+\begin{lstlisting}
+#define VIRTIO_NET_CTRL_STEERING_MODE              6
+\end{lstlisting}
+To query available steering modes driver uses following value as \field{command}
+
+Device responds with \field{ack} following by bitmask designating supported steering modes
+
+\begin{lstlisting}
+#define VIRTIO_NET_CTRL_SM_GET_SUPPORTED_MODES    0
+/* automatic steering mode (default defined by the device) */
+#define STEERING_MODE_AUTO                         (1 << 0)
+/* RSS (Receive Side Scaling): input queue defined by
+   calculated hash and indirection table */
+#define STEERING_MODE_RSS                          (1 << 1)
+struct virtio_net_supported_steering_modes {
+    u8 ack;
+    u8 steering_modes;
+};
+\end{lstlisting}
+
+For all operation related to specific steering mode driver uses following value as \field{command}
+and uses following structure for \field{command-specific-data}
+\begin{lstlisting}
+#define VIRTIO_NET_CTRL_SM_CONTROL                1
+
+struct virtio_net_steering_mode_control {
+    u8 steering_mode;
+    u8 mode_command;
+};
+\end{lstlisting}
+In case of \field{steering_mode}=STEERING_MODE_AUTO the value of \field{mode_command} is ignored.
+
+In case of \field{steering_mode}=STEERING_MODE_RSS possible values of \field{mode_command} are:
+\begin{lstlisting}
+#define VIRTIO_NET_SM_CTRL_RSS_SET                       0
+#define VIRTIO_NET_SM_CTRL_RSS_GET_SUPPORTED_FUNCTIONS   1
+#define VIRTIO_NET_SM_CTRL_RSS_GET_SUPPORTED_HASHES      2
+\end{lstlisting}
+Response on VIRTIO_NET_SM_CTRL_RSS_GET_SUPPORTED_FUNCTIONS is a structure containing bitmask value:
+\begin{lstlisting}
+struct virtio_net_supported_hash_functions {
+    u8 ack;
+    u8 supported_hash_functions;
+};
+#define VIRTIO_RSS_HASH_FUNCTION_TOEPLITZ          (1 << 0)
+#define VIRTIO_RSS_HASH_FUNCTION_SYMMETRIC         (1 << 1)
+\end{lstlisting}
+Response on VIRTIO_NET_SM_CTRL_RSS_GET_SUPPORTED_HASHES command  is a structure containing bitmask values:
+
+Device reports supported hash types separately for IPv4 and IPv6.
+\begin{lstlisting}
+struct virtio_net_supported_hashes {
+    u8  ack;
+    u8  hash_types_v4;
+    u8  hash_types_v6;
+    u8  max_key_length;
+    /* maximal number of 16-bit entries */
+    le16  max_indirection_table_len;
+};
+#define VIRTIO_NET_SM_HASH_SUPPORT_IP              (1 << 0)
+#define VIRTIO_NET_SM_HASH_SUPPORT_IP_EX           (1 << 1)
+#define VIRTIO_NET_SM_HASH_SUPPORT_TCP             (1 << 2)
+#define VIRTIO_NET_SM_HASH_SUPPORT_TCP_EX          (1 << 3)
+#define VIRTIO_NET_SM_HASH_SUPPORT_UDP             (1 << 4)
+#define VIRTIO_NET_SM_HASH_SUPPORT_UDP_EX          (1 << 5)
+\end{lstlisting}
+For VIRTIO_NET_SM_CTRL_RSS_SET command driver sends following structure:
+\begin{lstlisting}
+struct virtio_net_rss_conf {
+    u8  hash_types_v4; /* one or more of VIRTIO_NET_SM_HASH_SUPPORT bits*/
+    u8  hash_types_v6; /* one or more of VIRTIO_NET_SM_HASH_SUPPORT bits*/
+    u8  hash_function; /* one of VIRTIO_RSS_HASH_FUNCTION*/
+    u8  hash_key_length;
+    le16 indirection_table_length;
+    /* queue to place unclassified packets in */
+    le16 default_queue;
+    /* le16 indirection_table[indirection_table_length] */
+    /* u8   hash key data[hash_key_length]*/
+};
+\end{lstlisting}
+\drivernormative{\subparagraph}{Querying and setting steering mode}{Device Types / Network Device / Device Operation / Control Virtqueue / Controlled steering mode / Querying and setting steering mode}
+
+A driver MUST NOT use commands of steering mode control if
+the feature VIRTIO_NET_F_CTRL_STEERING_MODE has not been negotiated
+and before it successfully enabled operation with multiple queues.
+
+A driver MUST fill \field{indirection_table} array only with indices of active queues.
+
+A \field{indirection_table_length} MUST be power of two.
+\devicenormative{\subparagraph}{RSS Toeplitz implementation}{Device Types / Network Device / Device Operation / Control Virtqueue / Controlled steering mode / Querying and setting steering mode }
+If device reports support for VIRTIO_RSS_HASH_FUNCTION_TOEPLITZ:
 
+It MUST support keys of at least 40 bytes and indirection table of at least 128 entries.
 
+The device applies mask of (indirection_table_length - 1) to the calculated hash and uses the result as the index in the indirection table to get index of destination receive queue.
 \subsubsection{Legacy Interface: Framing Requirements}\label{sec:Device
 Types / Network Device / Legacy Interface: Framing Requirements}
 
-- 
2.17.2



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]