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 24 Jan 2016, at 11:27, Michael S. Tsirkin <mst@redhat.com> wrote:

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?

By restriction I meant that the driver is not fully initialised yet. So we will have to use control queue in poll mode. 
Initial value restrictions are in the registry, but I think we can ignore them in this case.





   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



---------------------------------------------------------------------
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]