RE: [PATCH 3/3] virtio-net: Define cvq configuration related device parts

Parav Pandit
2024-10-18T16:54:04Z

> From: Matias Ezequiel Vara Larsen <mvaralar@redhat.com>
> Sent: Friday, October 18, 2024 9:55 PM
>
> On Fri, Oct 18, 2024 at 04:17:41PM +0300, Parav Pandit wrote:
> > virtio net driver sends the control virtqueue commands for device
> > configuration. Such driver configuration is currently not captured in
> > the device parts.
> >
> > This series adds several of such device parts which represents the
> > network device specific configuration.
> >
> > It is done by utilizing the existing device parts structure.
> > A new generic selector format is added to enable device type specific
> > device parts.
> >
> > This series also reuses the existing control virtqueue command
> > structures, fields, and values to define the network device parts.
> >
> > Fixes: https://github.com/oasis-tcs/virtio-spec/issues/209
> > Signed-off-by: Parav Pandit <parav@nvidia.com>
> > ---
> > device-types/net/description.tex | 90
> > ++++++++++++++++++++++++++++++++
> > 1 file changed, 90 insertions(+)
> >
> > diff --git a/device-types/net/description.tex
> > b/device-types/net/description.tex
> > index e45ecbd..a5c6975 100644
> > --- a/device-types/net/description.tex
> > +++ b/device-types/net/description.tex
> > @@ -433,6 +433,96 @@ \subsection{Device resource
> > objects}\label{sec:Device Types / Network Device / D \hline
> > \end{tabularx}
> >
> > +\subsection{Device parts}\label{sec:Device Types / Network Device /
> > +Device parts}
> > +
> > +Network device parts represent the configuration done by the driver
> > +using control virtqueue commands. Network device part is in the
> > +format of \field{struct virtio_dev_part}.
> > +
> > +\begin{tabularx}{\textwidth}{ |l||l|X| } \hline Type & Name &
> > +Description \\ \hline \hline
> > +0x200 & VIRTIO_NET_DEV_PART_CVQ_CFG_PART & Represents device
> > +configuration done through a control virtqueue command, see
> > +\ref{sec:Device Types / Network Device / Device parts /
> > +VIRTIO-NET-DEV-PART-CVQ-CFG-PART} \\ \hline
> > +0x201 - 0x5FF & - & reserved for future \\ \hline \hline
> > +\end{tabularx}
> > +
> >
> +\subsubsection{VIRTIO_NET_DEV_PART_CVQ_CFG_PART}\label{sec:Device
> > +Types / Network Device / Device parts /
> > +VIRTIO-NET-DEV-PART-CVQ-CFG-PART}
> > +
> > +For VIRTIO_NET_DEV_PART_CVQ_CFG_PART, \field{part_type} is set to
> > +0x200. The VIRTIO_NET_DEV_PART_CVQ_CFG_PART part indicates
> > +configuration performed by the driver using a control virtqueue
> command.
> > +
> > +\begin{lstlisting}
> > +struct virtio_net_dev_part_cvq_selector {
> > + u8 class;
> > + u8 command;
> > + u8 reserved[6];
> > +};
> > +\end{lstlisting}
> > +
> > +There is one device part of type VIRTIO_NET_DEV_PART_CVQ_CFG_PART
> for
> > +each individual configuration. Each part is identified by a unique selector
> value.
> > +The selector, \field{device_type_raw}, is in the format \field{struct
> > +virtio_net_dev_part_cvq_selector}.
> > +
> > +The selector consists of two fields: \field{class} and
> > +\field{command}. These fields correspond to the \field{class} and
> > +\field{command} defined in \field{struct virtio_net_ctrl}, as
> > +described in the relevant sections of \ref{sec:Device Types / Network
> Device / Device Operation / Control Virtqueue}.
> > +
> > +The value corresponding to each part’s selector follows the same
> > +format as the respective \field{command-specific-data} described in
> > +the relevant sections of \ref{sec:Device Types / Network Device / Device
> Operation / Control Virtqueue}.
> > +
> > +For example, when the \field{class} is VIRTIO_NET_CTRL_MAC, the
> > +\field{command} can be either VIRTIO_NET_CTRL_MAC_TABLE_SET or
> > +VIRTIO_NET_CTRL_MAC_ADDR_SET; when \field{command} is set to
> > +VIRTIO_NET_CTRL_MAC_TABLE_SET, \field{value} is in the format of
> \field{struct virtio_net_ctrl_mac}.
> > +
> > +Supported selctors are listed in the table:
>
> s/selctors/selectors
>
I ran codespell tool but pity it didn’t catch this.
Need to look for another one.
Will fix this.

> > +
> > +\begin{tabularx}{\textwidth}{ |l|X| } \hline Class selector & Command
> > +selector \\ \hline \hline VIRTIO_NET_CTRL_RX &
> > +VIRTIO_NET_CTRL_RX_PROMISC \\ \hline VIRTIO_NET_CTRL_RX &
> > +VIRTIO_NET_CTRL_RX_ALLMULTI \\ \hline VIRTIO_NET_CTRL_RX &
> > +VIRTIO_NET_CTRL_RX_ALLUNI \\ \hline VIRTIO_NET_CTRL_RX &
> > +VIRTIO_NET_CTRL_RX_NOMULTI \\ \hline VIRTIO_NET_CTRL_RX &
> > +VIRTIO_NET_CTRL_RX_NOUNI \\ \hline VIRTIO_NET_CTRL_RX &
> > +VIRTIO_NET_CTRL_RX_NOBCAST \\ \hline VIRTIO_NET_CTRL_MAC &
> > +VIRTIO_NET_CTRL_MAC_TABLE_SET \\ \hline VIRTIO_NET_CTRL_MAC &
> > +VIRTIO_NET_CTRL_MAC_ADDR_SET \\ \hline VIRTIO_NET_CTRL_VLAN &
> > +VIRTIO_NET_CTRL_VLAN_ADD \\ \hline VIRTIO_NET_CTRL_ANNOUNCE &
> > +VIRTIO_NET_CTRL_ANNOUNCE_ACK \\ \hline VIRTIO_NET_CTRL_MQ &
> > +VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET \\ \hline VIRTIO_NET_CTRL_MQ &
> > +VIRTIO_NET_CTRL_MQ_RSS_CONFIG \\ \hline VIRTIO_NET_CTRL_MQ &
> > +VIRTIO_NET_CTRL_MQ_HASH_CONFIG \\ \hline \hline \end{tabularx}
> > +
> > +For command selector VIRTIO_NET_CTRL_VLAN_ADD, device part consists
> > +of a whole VLAN table.
> > +
> > +\field{reserved} is reserved and set to zero.
> > +
> > \subsection{Device Operation}\label{sec:Device Types / Network Device
> > / Device Operation}
> >
> > Packets are transmitted by placing them in the
> > --
> > 2.34.1
> >
>
> Reviewed-by: Matias Ezequiel Vara Larsen <mvaralar@redhat.com>

Thanks.