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

 


Help: OASIS Mailing Lists Help | MarkMail Help

virtio-dev message

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


Subject: Re: [virtio-dev] [PATCH v2] virtio-net: add mtu configuration field


On Sun, Jan 24, 2016 at 10:42:24AM +0200, Yan Vugenfirer wrote:
> 
>     On 21 Jan 2016, at 07:27, Michael S. Tsirkin <mst@redhat.com> wrote:
> 
>     On Wed, Jan 20, 2016 at 12:42:45PM -0500, Aaron Conole wrote:
> 
>         "Michael S. Tsirkin" <mst@redhat.com> writes:
> 
>             On Fri, Jan 15, 2016 at 04:28:30PM -0500, Aaron Conole wrote:
> 
>                 Sometimes it is essential for libvirt to be able to configure
>                 MTU
>                 on guest's NICs to a value different from 1500.
> 
>                 The change adds a new field to configuration area of network
>                 devices. It will be used to pass initial MTU from the device to
>                 the driver, and to pass modified MTU from driver to the device
>                 or from device to driver for both host-guest and guest-host
>                 interaction.
> 
>                 In addition, in order to support backward and forward
>                 compatibility, we introduce a new feature bit called
>                 VIRTIO_NET_F_DEFAULT_MTU.
> 
>                 Signed-off-by: Aaron Conole <aconole@redhat.com>
>                 Cc: Victor Kaplansky <victork@redhat.com>
> 
> 
>             Since apparently windows guests can't support
>             such mtu negotiation in the driver, we'd have
>             to implement this in a guest agent for these
>             guests.
> 
> 
>         I think that was due to a previous patch which did not include a
>         mechanism for reporting the guest->host changes. This includes such a
>         feedback mechanism. However, I may have misunderstood Yan's previous
>         email.
> 
> 
> 
> What I meant to say is that in Windows we cannot dynamically change MTU from
> the device driver. We can set MTU on driver initialisation. Also 
> 
> 
> 
>     This part?
>     We don’t have the way to support host report of MTU change to the guest
>     on Windows.
> 
>     Actually I have a question about this, too.
> 
>     MTU changes can't be reported to guest, ok.
> 
>     But let's assume MTU is static.
>     Can this MTU be discovered during install?
> 
> 
> If it is static, it can be discovered during driver load with some
> restrictions.

Are the restrictions on value or on how it's accessed then?


> 
> 
>     I see this:
> 
>     NetKVM/wlh/ParaNdis6-Driver.c:
>     miniportAttributes.GeneralAttributes.MtuSize =
>     pContext->MaxPacketSize.nMaxDataSize;
> 
> 
> 
> This is an initialisation of the miniport driver. We could access virtio device
> at this point (most probably without interrupts) and get MTU.
> Currently we get the value from registry - pContext->MaxPacketSize.nMaxDataSize
> = pConfiguration->MTU.ulValue;
> 
> 
> 
>     Yan?
> 
> 
> 
>         Please advise, Yan.
> 
> 
>             It thus seems advantageous to always have it in
>             a guest agent, so that libvirt can change it
>             for all guests in the same way, consistently.
> 
>             Do you agree to the above? If yes, why do we need
>             a new device field?
> 
> 
>         I am not very familiar with qemu-ga. If Yan says the new proposal
>         will not work, then I will investigate that more thoroughly.
> 
> 
>                 ---
>                 v1:
>                 This is an attempt at continuing the work done by Victor
>                 Kaplansky on
>                 mtu negiotiation for virtio-net devices. It attempts to pick up
>                 from
>                 https://lists.oasis-open.org/archives/virtio-dev/201508/
>                 msg00007.html
>                 and is just a minor blurb from the first patch along with the
>                 2nd patch
>                 from the series, and some of the feedback integrated.
> 
>                 v2:
>                 Rephrase and provide a mechanism for guest->host and host->
>                 guest
>                 communication through a driver read-only and driver write-only
>                 field.
> 
>                 content.tex | 31 +++++++++++++++++++++++++++++++
>                 1 file changed, 31 insertions(+)
> 
>                 diff --git a/content.tex b/content.tex
>                 index d989d98..b855691 100644
>                 --- a/content.tex
>                 +++ b/content.tex
>                 @@ -3078,6 +3078,11 @@ features.
> 
>                 \item[VIRTIO_NET_F_CTRL_MAC_ADDR(23)] Set MAC address through
>                 control
>                     channel.
>                 +
>                 +\item[VIRTIO_NET_F_MTU(24)] Negotiated MTU is supported. If
>                 +    offered by the device, device advises driver about initial
>                 +    MTU to be used. If negotiated, the driver uses \field{mtu}
>                 as
>                 +    an initial value.
>                 \end{description}
> 
>                 \subsubsection{Feature bit requirements}\label{sec:Device Types
>                 / Network Device / Feature bits / Feature bit requirements}
>                 @@ -3132,11 +3137,21 @@ of each of transmit and receive
>                 virtqueues (receiveq1\ldots receiveqN
>                 and transmitq1\ldots transmitqN respectively) that can be
>                 configured once VIRTIO_NET_F_MQ
>                 is negotiated.
> 
>                 +The following driver-read-only field, \field{mtu} only exists
>                 if
>                 +VIRTIO_NET_F_MTU is set. This field specifies the MTU that the
>                 device expects
>                 +the driver to honor.
>                 +
>                 +The following driver-write-only field, \field{mtu_requested}
>                 only exists if
>                 +VIRTIO_NET_F_MTU is set. This field will be written by the
>                 driver when it wants
>                 +to request an MTU change from the device.
>                 +
>                 \begin{lstlisting}
>                 struct virtio_net_config {
>                         u8 mac[6];
>                         le16 status;
>                         le16 max_virtqueue_pairs;
>                 +        le16 mtu;
>                 +        le16 mtu_requested;
>                 };
>                 \end{lstlisting}
> 
>                 @@ -3145,6 +3160,18 @@ struct virtio_net_config {
>                 The device MUST set \field{max_virtqueue_pairs} to between 1
>                 and 0x8000 inclusive,
>                 if it offers VIRTIO_NET_F_MQ.
> 
>                 +\devicenormative{\subsubsection}{Device configuration layout}
>                 {Device Types / Network Device / Device configuration layout}
>                 +
>                 +The device MUST set \field{mtu} to between 68 and 65535
>                 inclusive,
>                 +if it offers VIRTIO_NET_F_MTU.
>                 +
>                 +Any time the device modifies \field{mtu}, it MUST send a
>                 configuration change
>                 +notification.
>                 +
>                 +The driver MAY set \field{mtu_requested} to between 68 and
>                 65535 inclusive,
>                 +if the device offers VIRTIO_NET_F_MTU. Any time the driver
>                 modifies
>                 +\field{mtu_requested}, it MUST also send a configuration
>                 change notification.
>                 +
>                 \drivernormative{\subsubsection}{Device configuration layout}
>                 {Device Types / Network Device / Device configuration layout}
> 
>                 A driver SHOULD negotiate VIRTIO_NET_F_MAC if the device offers
>                 it.
>                 @@ -3157,6 +3184,10 @@ If the driver does not negotiate the
>                 VIRTIO_NET_F_STATUS feature, it SHOULD
>                 assume the link is active, otherwise it SHOULD read the link
>                 status from
>                 the bottom bit of \field{status}.
> 
>                 +A driver SHOULD negotiate VIRTIO_NET_F_MTU if the device
>                 offers it.  If the
>                 +driver negotiates the VIRTIO_NET_F_MTU feature, the driver
>                 MUST use \field{mtu}
>                 +as the value for MTU.
>                 +
>                 \subsubsection{Legacy Interface: Device configuration layout}\
>                 label{sec:Device Types / Network Device / Device configuration
>                 layout / Legacy Interface: Device configuration layout}
>                 \label{sec:Device Types / Block Device / Feature bits / Device
>                 configuration layout / Legacy Interface: Device configuration
>                 layout}
>                 When using the legacy interface, transitional devices and
>                 drivers
>                 -- 
>                 2.5.0
> 
> 
>             ---------------------------------------------------------------------
>             To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org
>             For additional commands, e-mail:
>             virtio-dev-help@lists.oasis-open.org
> 
> 


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