"Michael S. Tsirkin" <> 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 <>
>> Cc: Victor Kaplansky <>
>
> 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.
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:
> For additional commands, e-mail: