[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: RE: [PATCH v6 2/5] virtio-net: Add flow filter capabilities read commands
> From: Cornelia Huck <cohuck@redhat.com> > Sent: Wednesday, November 22, 2023 7:08 PM > > On Fri, Nov 10 2023, Parav Pandit <parav@nvidia.com> wrote: > > > diff --git a/device-types/net/description.tex > > b/device-types/net/description.tex > > index 30220b5..eccd8d6 100644 > > --- a/device-types/net/description.tex > > +++ b/device-types/net/description.tex > > @@ -1173,7 +1173,11 @@ \subsubsection{Flow Filter}\label{sec:Device > > Types / Network Device / Device Ope > > > > The device indicates the flow filter capabilities to the driver. > > These capabilities include various maximum device limits and > > -supported packet match fields. > > +supported packet match fields. These control virtqueue commands are: > > Wait, if this uses control vq commands, what are the "flow control > virtqueues" mentioned in the previous patch? > As I replied, please ignore that text where you gave example of M, M + 1 etc. I am going to remove that stale left over text. > > +\ref{sec:Device Types / Network Device / Device Operation / Control > > +Virtqueue / Flow Filter / Flow Filter Capabilities Get} and > > +\ref{sec:Device Types / Network Device / Device Operation / Control > Virtqueue / Flow Filter / Flow Filter Match Capabilities Get}. > > > > The flow filters are grouped using a flow filter group. Each flow > > filter group has a priority. The device first applies the flow > > filters of the highest @@ -1224,7 +1228,136 @@ \subsubsection{Flow > Filter}\label{sec:Device Types / Network Device / Device Ope > > the flow filters in group_C, the flow filters of next level group_B are > applied. > > \end{itemize} > > > > -\label{sec:Device Types / Network Device / Device Operation / Control > > Virtqueue / Setting Promiscuous Mode}%old label for latexdiff > > I think you added this in the last patch? Just drop it? > Yes. it was some wrong hunk. > > +\paragraph{Match Types and Fields}\label{sec:Device Types / Network > > +Device / Device Operation / Flow Filter / Match Types and Fields} > > + > > +\begin{lstlisting} > > +struct virtio_net_ff_match_type_cap { > > + le16 type; > > + u8 mask_supported; > > + u8 reserved[5]; > > + le64 fields_bmap; > > +}; > > +\end{lstlisting} > > + > > +The \field{type} corresponds to following table: > > + > > +\begin{tabular}{|l|l|l|} > > +\hline > > +Type & Name & Description \\ > > +\hline \hline > > +0 & VIRTIO_NET_FF_ETH_HDR & Ethernet header of the packet \\ > > +\hline > > +0x1 & VIRTIO_NET_FF_VLAN_TAG_HDR & VLAN tag of the packet \\ > > +\hline > > +0x200 & VIRTIO_NET_FF_IPV4_HDR & IPv4 header of the packet \\ > > +\hline > > +0x300 & VIRTIO_NET_FF_IPV6_HDR & IPv6 header of the packet \\ > > +\hline > > +0x400 & VIRTIO_NET_FF_TCP_HDR & TCP header of the packet \\ > > +\hline > > +0x500 & VIRTIO_NET_FF_UDP_HDR & UDP header of the packet \\ > > +\hline > > +other & - & reserved \\ > > +\hline > > +\end{tabular} > > + > > +When the \field{mask_supported} is set, for the specific > > +\field{type}, the > > s/When the/When/ > > > +device can perform masking packet fields with the mask supplied in > > +the flow > > s/perform masking/mask/ > > > +filter match entry. > > + > > +For each \field{type} the \field{fields_bmap} indicates supported > > +fields of the packet header which can be matched. > > + > > +For the \field{type} of VIRTIO_NET_FF_ETH_HDR, header fields are > > +represented by a bitmap in \field{fields_bmap} are following: > > s/are following/as follows/ > > > + > > +\begin{tabular}{|l|l|l|} > > +\hline > > +Bit & Name & Description \\ > > +\hline \hline > > +0 & VIRTIO_NET_FF_DST_MAC & Destination MAC address in the packet > \\ > > +\hline > > +1 & VIRTIO_NET_FF_SRC_MAC & Source MAC address in the packet \\ > > +\hline > > +2 & VIRTIO_NET_FF_ETHER_TYPE & Ether type in the packet \\ > > +\hline > > +other & - & reserved \\ > > +\hline > > +\end{tabular} > > + > > +For the \field{type} of VIRTIO_NET_FF_VLAN_TAG_HDR, VLAN tag fields > > +are represented by a bitmap in \field{fields_bmap} are following: > > s/are following/as follows/ > > > + > > +\begin{tabular}{|l|l|l|} > > +\hline > > +Bit & Name & Description \\ > > +\hline \hline > > +0 & VIRTIO_NET_FF_VLAN_TAG_TCI & Vlan tag TCI 16-bit field \\ > > +\hline > > +other & - & reserved \\ > > +\hline > > +\end{tabular} > > + > > +For the \field{type} of VIRTIO_NET_FF_IPV4_HDR, header fields are > > +represented by a bitmap in \field{fields_bmap} are following: > > s/are following/as follows/ > > > + > > +\begin{tabular}{|l|l|l|} > > +\hline > > +Bit & Name & Description \\ > > +\hline \hline > > +0 & VIRTIO_NET_FF_SRC_IPV4 & Source IPV4 address in the packet \\ > > +\hline > > +1 & VIRTIO_NET_FF_DST_IPV4 & Destination IPV4 address in the packet > \\ > > +\hline > > +other & - & reserved \\ > > +\hline > > +\end{tabular} > > + > > +For the \field{type} of VIRTIO_NET_FF_IPV6_HDR, header fields are > > +represented by a bitmap in \field{fields_bmap} are following: > > s/are following/as follows/ > > > + > > +\begin{tabular}{|l|l|l|} > > +\hline > > +Bit & Name & Description \\ > > +\hline \hline > > +0 & VIRTIO_NET_FF_SRC_IPV6 & Source IPV6 address in the packet \\ > > +\hline > > +1 & VIRTIO_NET_FF_DST_IPV6 & Destination IPV6 address in the packet > \\ > > +\hline > > +other & - & reserved \\ > > +\hline > > +\end{tabular} > > + > > +For the \field{type} of VIRTIO_NET_FF_TCP_HDR, header fields are > > +represented by a bitmap in \field{fields_bmap} are following: > > s/are following/as follows/ > > > + > > +\begin{tabular}{|l|l|l|} > > +\hline > > +Bit & Name & Description \\ > > +\hline \hline > > +0 & VIRTIO_NET_FF_SRC_TCP_PORT & Source TCP port in the packet \\ > > +\hline > > +1 & VIRTIO_NET_FF_DST_TCP_PORT & Destination TCP port in the packet > \\ > > +\hline > > +other & - & reserved \\ > > +\hline > > +\end{tabular} > > + > > +For the \field{type} of VIRTIO_NET_FF_UDP_HDR, header fields are > > +represented by a bitmap in \field{fields_bmap} are following: > > s/are following/as follows/ > > > + > > +\begin{tabular}{|l|l|l|} > > +\hline > > +Bit & Name & Description \\ > > +\hline \hline > > +0 & VIRTIO_NET_FF_SRC_UDP_PORT & Source UDP port in the packet \\ > > +\hline > > +1 & VIRTIO_NET_FF_DST_UDP_PORT & Destination UDP port in the > packet \\ > > +\hline > > +other & - & reserved \\ > > +\hline > > +\end{tabular} > > + > > \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 @@ > > -2392,6 +2525,77 @@ \subsubsection{Control Virtqueue}\label{sec:Device > > Types / Network Device / Devi of the driver's records. In such cases, > > the driver should allocate additional space for the \field{command- > specific-result} buffer. > > > > +\paragraph{Flow Filter}\label{sec:Device Types / Network Device / > > +Device Operation / Control Virtqueue / Flow Filter} > > + > > +If the VIRTIO_NET_F_FLOW_FILTER feature is negotiated, > > + > > +\begin{itemize} > > +\item the driver can send commands VIRTIO_NET_CTRL_FF_CAP_GET and > > +VIRTIO_NET_CTRL_FF_MATCH_CAP_GET to query the flow filter > > +capabilities of the device. > > +\end{itemize} > > + > > +\begin{lstlisting} > > +#define VIRTIO_NET_CTRL_FF 7 > > + #define VIRTIO_NET_CTRL_FF_CAP_GET 0 #define > > +VIRTIO_NET_CTRL_FF_MATCH_CAP_GET 1 \end{lstlisting} > > + > > +\subparagraph{Flow Filter Capabilities Get}\label{sec:Device Types / > > +Network Device / Device Operation / Control Virtqueue / Flow Filter / > > +Flow Filter Capabilities Get} > > + > > +The command VIRTIO_NET_CTRL_FF_CAP_GET provides the flow filter > device capabilities. > > + > > +\begin{lstlisting} > > +struct virtio_net_ctrl_ff_caps { > > + le16 max_match_fields; > > + le16 max_groups; /* valid group id = max_groups - 1 */ > > + le32 max_ff_per_group; > > + le32 max_ff; /* max flow_id in add/del = max_ff - 1 */ > > + le16 max_actions; > > + u8 max_flow_priorities_per_group; }; \end{lstlisting} > > + > > +The \field{max_groups} indicates total number of flow filter groups > > +supported > > s/The// > > > +by the device whose group identifier can be any value in the range > > +from 0 to > > s/group identifier/group indentifiers/ > > > +\field{max_groups - 1}. The flow filter group can have any priority > > +in range of 0 to \field{max_groups - 1}. > > + > > +The \field{max_ff_per_group} indicates maximum number of > > s/The// > s/maximum/the maximum/ > > > +flow filter per flow filter group which can be added by the driver. > > "flow filters" > > > + > > +The \field{max_ff} indicates maximum number of flow filters across > > s/The// > s/maximum/the maximum/ > > > +all the flow groups which can be added by the driver. > > + > > +The \field{max_ff_priorities_per_group} indicates maximum priority > > +value > > s/The// > s/maximum/the maximum/ > > > +of a flow filter within a group. A flow filter within a group can > > +have any priority in range of zero to \field{max_ff_priorities_per_group - > 1}. > > + > > +The \field{max_match_fields} indicates maximum number of fields of > > +the packet > > s/The// > s/maximum/the maximum/ > s/of the packet/of a packet/ > > > +which can be matched by the device for a flow filter. > > + > > +The \field{max_actions} indicates maximum number of actions for a > > +flow filter > > s/The// > s/maximum/the maximum/ > > > +match entry can be supplied by the driver. > > "that can be supplied" > > > + > > +The \field{max_flow_priorities_per_group} indicates maximum number of > > s/The// > s/maximum/the maximum/ > > > +priorities supported by the device per flow filter group. > > + > > +\subparagraph{Flow Filter Match Capabilities Get}\label{sec:Device > > +Types / Network Device / Device Operation / Control Virtqueue / Flow > > +Filter / Flow Filter Match Capabilities Get} > > + > > +The command VIRTIO_NET_CTRL_FF_MATCH_CAP_GET indicates which > fields > > +from the packet can be matched. > > s/from/of/ > > > + > > +\begin{lstlisting} > > +struct virtio_net_ctrl_ff_match_types { > > + le32 num_entries; > > + struct virtio_net_ff_match_type_cap types[]; }; > > +\end{lstlisting} > > + > > +The \field{num_entries} indicates the length of an array \field{types}. > > s/The// > s/an/the/ > > > +Each array entry of \field{types} represents supported match fields > > +of the packet by the device. > > "represents the fields of the packet which are supported for matching by the > device" > > > + > > \subsubsection{Legacy Interface: Framing > > Requirements}\label{sec:Device Types / Network Device / Legacy > > Interface: Framing Requirements} > >
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]