RE: [PATCH RFC v5 4/4] virtio-net: Add IPsec operation device and driver requirements

Parav Pandit <[email protected]>
Newsgroups dev.linux.lists.virtio-comment
Message-ID <CY8PR12MB71959919529D28EE34378D00DC812@CY8PR12MB7195.namprd12.prod.outlook.com>
> From: Srujana Challa <[email protected]>
> Sent: Thursday, April 24, 2025 3:14 PM
> 
> Add device and driver requirements for IPsec Operation.
> 
> Signed-off-by: Srujana Challa <[email protected]>
> ---
>  device-types/net/description.tex        | 83 +++++++++++++++++++++++++
>  device-types/net/device-conformance.tex |  1 +  device-types/net/driver-
> conformance.tex |  1 +
>  3 files changed, 85 insertions(+)
> 
> diff --git a/device-types/net/description.tex b/device-
> types/net/description.tex
> index 8903e03..0674bd8 100644
> --- a/device-types/net/description.tex
> +++ b/device-types/net/description.tex
> @@ -3597,6 +3597,89 @@ \subsubsection{IPsec Operation}\label{sec:Device
> Types / Network Device / Device
> 
>  See \hyperref[par:Device Types / Crypto Device / Device Operation / IPsec
> Service Operation / Resource objects / VIRTIO-CRYPTO-RESOURCE-OBJ-IPSEC-
> INBOUND-SA]{VIRTIO_NET_RESOURCE_OBJ_IPSEC_INB_SA}.
> 
> +\devicenormative{\paragraph}{IPsec Operation}{Device Types / Net Device
> +/ Device Operation / IPsec Operation}
> +
> +When the device supports IPsec operations, \begin{itemize} \item the
> +device MUST set VIRTIO_NET_IPSEC_RESOURCE_CAP,
> VIRTIO_NET_IPSEC_SA_CAP
> +capability in the \field{supported_caps} in the command
> VIRTIO_ADMIN_CMD_CAP_SUPPORT_QUERY.
> +\item the device MUST support the administration commands
> +VIRTIO_ADMIN_CMD_RESOURCE_OBJ_CREATE,
> +VIRTIO_ADMIN_CMD_RESOURCE_OBJ_MODIFY,
> +VIRTIO_ADMIN_CMD_RESOURCE_OBJ_QUERY,
> +VIRTIO_ADMIN_CMD_RESOURCE_OBJ_DESTROY for the resource types
> +VIRTIO_NET_RESOURCE_OBJ_IPSEC_OUTB_SA and
> VIRTIO_NET_RESOURCE_OBJ_IPSEC_INB_SA.
> +\end{itemize}
> +
> +When any of the VIRTIO_NET_IPSEC_RESOURCE_CAP or
> +VIRTIO_NET_IPSEC_SA_CAP capability is disabled, the device MUST set
> +\field{status} to VIRTIO_ADMIN_STATUS_Q_INVALID_OPCODE for the
> commands
> +VIRTIO_ADMIN_CMD_RESOURCE_OBJ_CREATE,
> +VIRTIO_ADMIN_CMD_RESOURCE_OBJ_MODIFY,
> +VIRTIO_ADMIN_CMD_RESOURCE_OBJ_QUERY,
> +and VIRTIO_ADMIN_CMD_RESOURCE_OBJ_DESTROY for the resource types
> +VIRTIO_NET_RESOURCE_OBJ_IPSEC_OUTB_SA and
> VIRTIO_NET_RESOURCE_OBJ_IPSEC_INB_SA.
> +
> +The device MUST set \field{status} to VIRTIO_ADMIN_STATUS_EEXIT for the
> +command VIRTIO_ADMIN_CMD_RESOURCE_OBJ_CREATE when the
> resource
> +\field{type} is VIRTIO_NET_RESOURCE_OBJ_IPSEC_OUTB_SA or
> +VIRTIO_NET_RESOURCE_OBJ_IPSEC_INB_SA,
> +if the object already exists with the supplied \field{id}.
> +
> +The device MUST fail the command
> VIRTIO_ADMIN_CMD_RESOURCE_OBJ_CREATE
> +for the VIRTIO_NET_RESOURCE_OBJ_IPSEC_OUTB_SA object if,
> +\begin{itemize} \item \field{id} is greater than or equal to
> +\field{outb_sa_limit}.
> +\item the supplied SA parameters, such as mode, options, cipher and
> authentication
> +      algorithms are not supported in the capabitlity
> VIRTIO_NET_IPSEC_SA_CAP.
> +\end{itemize}
> +
> +The device MUST fail the command
> VIRTIO_ADMIN_CMD_RESOURCE_OBJ_CREATE
> +for the VIRTIO_NET_RESOURCE_OBJ_IPSEC_INB_SA object if, \begin{itemize}
> +\item \field{id} is greater than or equal to \field{inb_sa_limit}.
> +\item the supplied SA parameters, such as mode, options, cipher and
> authentication
> +      algorithms are not supported in the capabitlity
> VIRTIO_NET_IPSEC_SA_CAP.
> +\end{itemize}
> +
> +The device SHOULD maintain a table for subsequent lookups to
> +inbound/outbound data with the corresponding SA based on the supplied
> \field{id}.
> +
> +The device MUST allow recreating the resource objects using the command
> +VIRTIO_ADMIN_CMD_RESOURCE_OBJ_CREATE which was previously
> destroyed
> +using the command VIRTIO_ADMIN_CMD_RESOURCE_OBJ_DESTROY
> respectively
> +without undergoing a device reset.
> +
> +The device MAY fail the command
> VIRTIO_ADMIN_CMD_RESOURCE_OBJ_CREATE
> +with the \field{status} set to VIRTIO_ADMIN_STATUS_EINVAL for the
> +VIRTIO_CRYPTO_RESOURCE_OBJ_IPSEC_OUTB_SA or
> +VIRTIO_CRYPTO_RESOURCE_OBJ_IPSEC_INB_SA
> +commands if the resource object with the same \field{spi} already exists.
> +
> +On device reset, the device MUST destroy all the resource objects which have
> been created.
> +
> +\drivernormative{\paragraph}{IPsec Operation}{Device Types / Net Device
> +/ Device Operation / IPsec Operation}
> +
> +The driver MUST query the capabilities using
> +VIRTIO_ADMIN_CMD_CAP_ID_LIST_QUERY
> +to discover the capability types the device offers.
> +
> +The driver MUST get VIRTIO_NET_IPSEC_RESOURCE_CAP and
> +VIRTIO_NET_IPSEC_SA_CAP if listed in
> VIRTIO_ADMIN_CMD_CAP_ID_LIST_QUERY
> +command result, using VIRTION_ADMIN_CMD_DEVICE_CAP_GET to
> discover the
> +capabilities the device is able to offer.
> +The driver MUST set VIRTIO_NET_IPSEC_RESOURCE_CAP and
> +VIRTIO_NET_IPSEC_SA_CAP using VIRTIO_ADMIN_CMD_DEVICE_CAP_SET to
> +indicate the device which capability the driver uses.
> +
> +For the command VIRTIO_ADMIN_CMD_RESOURCE_OBJ_CREATE, when
> creating a
> +resource VIRTIO_NET_RESOURCE_OBJ_IPSEC_OUTB_SA, the driver MUST set
> all
> +the parameters in \field{struct virtio_crypto_resource_obj_ipsec_sa} with
> relevant values.
> +And when create a resource object
> VIRTIO_NET_RESOURCE_OBJ_IPSEC_INB_SA,
> +the driver MUST set all the parameters except \field{struct
> +virtio_crypto_ipsec_tunnel_param}.
> +
> +The driver SHOULD NOT add multiple inbound SA objects with the same
> \field{spi}.
> +
> +In the outbound data path, the driver MUST ensure that packets do not
> +exceed the PMTU prior to transmission to the device.
> +(Refer to \hyperref[intro:IPSEC]{[IPSEC]} for a detailed description of
> +PMTU)
> +
>  \subsubsection{Legacy Interface: Framing Requirements}\label{sec:Device
> Types / Network Device / Legacy Interface: Framing Requirements}
> 
> diff --git a/device-types/net/device-conformance.tex b/device-
> types/net/device-conformance.tex
> index d88484c..7fe8505 100644
> --- a/device-types/net/device-conformance.tex
> +++ b/device-types/net/device-conformance.tex
> @@ -18,4 +18,5 @@
>  \item \ref{devicenormative:Device Types / Network Device / Device
> Operation / Control Virtqueue / Device Statistics}  \item
> \ref{devicenormative:Device Types / Network Device / Device Operation /
> Control Virtqueue / RSS Context}  \item \ref{devicenormative:Device Types /
> Network Device / Device Operation / Flow filter}
> +\item \ref{devicenormative:Device Types / Network Device / Device
> +Operation / IPsec Operation}
>  \end{itemize}
> diff --git a/device-types/net/driver-conformance.tex b/device-
> types/net/driver-conformance.tex
> index d346b88..0d20190 100644
> --- a/device-types/net/driver-conformance.tex
> +++ b/device-types/net/driver-conformance.tex
> @@ -18,4 +18,5 @@
>  \item \ref{drivernormative:Device Types / Network Device / Device Operation
> / Control Virtqueue / Device Statistics}  \item \ref{drivernormative:Device
> Types / Network Device / Device Operation / Control Virtqueue / RSS Context}
> \item \ref{drivernormative:Device Types / Network Device / Device Operation
> / Flow filter}
> +\item \ref{drivernormative:Device Types / Network Device / Device
> +Operation / IPsec Operation}
>  \end{itemize}
> --
> 2.25.1
Reviewed-by: Parav Pandit <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.