mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
qemu: Implement mtu on interface
Not only we should set the MTU on the host end of the device but also let qemu know what MTU did we set. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
b020cf73fe
commit
572eda12ad
src/qemu
tests
@ -356,6 +356,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
|
||||
"drive-iotune-group",
|
||||
|
||||
"query-cpu-model-expansion", /* 245 */
|
||||
"virtio-net.host_mtu",
|
||||
);
|
||||
|
||||
|
||||
@ -1642,6 +1643,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioNet[] = {
|
||||
{ "tx", QEMU_CAPS_VIRTIO_TX_ALG },
|
||||
{ "event_idx", QEMU_CAPS_VIRTIO_NET_EVENT_IDX },
|
||||
{ "rx_queue_size", QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE },
|
||||
{ "host_mtu", QEMU_CAPS_VIRTIO_NET_HOST_MTU },
|
||||
};
|
||||
|
||||
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioSCSI[] = {
|
||||
|
@ -392,6 +392,7 @@ typedef enum {
|
||||
|
||||
/* 245 */
|
||||
QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION, /* qmp query-cpu-model-expansion */
|
||||
QEMU_CAPS_VIRTIO_NET_HOST_MTU, /* virtio-net-*.host_mtu */
|
||||
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
|
@ -3678,6 +3678,16 @@ qemuBuildNicDevStr(virDomainDefPtr def,
|
||||
}
|
||||
virBufferAsprintf(&buf, ",rx_queue_size=%u", net->driver.virtio.rx_queue_size);
|
||||
}
|
||||
|
||||
if (usingVirtio && net->mtu) {
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_NET_HOST_MTU)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("setting MTU is not supported with this QEMU binary"));
|
||||
goto error;
|
||||
}
|
||||
virBufferAsprintf(&buf, ",host_mtu=%u", net->mtu);
|
||||
}
|
||||
|
||||
if (vlan == -1)
|
||||
virBufferAsprintf(&buf, ",netdev=host%s", net->info.alias);
|
||||
else
|
||||
@ -8251,6 +8261,10 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver,
|
||||
}
|
||||
}
|
||||
|
||||
if (net->mtu &&
|
||||
virNetDevSetMTU(net->ifname, net->mtu) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if ((actualType == VIR_DOMAIN_NET_TYPE_NETWORK ||
|
||||
actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
|
||||
actualType == VIR_DOMAIN_NET_TYPE_ETHERNET ||
|
||||
|
@ -6541,14 +6541,15 @@ bool
|
||||
qemuDomainNetSupportsMTU(virDomainNetType type)
|
||||
{
|
||||
switch (type) {
|
||||
case VIR_DOMAIN_NET_TYPE_USER:
|
||||
case VIR_DOMAIN_NET_TYPE_NETWORK:
|
||||
case VIR_DOMAIN_NET_TYPE_BRIDGE:
|
||||
case VIR_DOMAIN_NET_TYPE_ETHERNET:
|
||||
case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
|
||||
return true;
|
||||
case VIR_DOMAIN_NET_TYPE_USER:
|
||||
case VIR_DOMAIN_NET_TYPE_SERVER:
|
||||
case VIR_DOMAIN_NET_TYPE_CLIENT:
|
||||
case VIR_DOMAIN_NET_TYPE_MCAST:
|
||||
case VIR_DOMAIN_NET_TYPE_NETWORK:
|
||||
case VIR_DOMAIN_NET_TYPE_BRIDGE:
|
||||
case VIR_DOMAIN_NET_TYPE_INTERNAL:
|
||||
case VIR_DOMAIN_NET_TYPE_DIRECT:
|
||||
case VIR_DOMAIN_NET_TYPE_HOSTDEV:
|
||||
|
68
tests/qemuxml2xmloutdata/qemuxml2xmlout-net-mtu.xml
Normal file
68
tests/qemuxml2xmloutdata/qemuxml2xmlout-net-mtu.xml
Normal file
@ -0,0 +1,68 @@
|
||||
<domain type='qemu'>
|
||||
<name>test</name>
|
||||
<uuid>15d091de-0181-456b-9554-e4382dc1f1ab</uuid>
|
||||
<memory unit='KiB'>1048576</memory>
|
||||
<currentMemory unit='KiB'>1048576</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='x86_64' machine='pc-0.13'>hvm</type>
|
||||
<boot dev='cdrom'/>
|
||||
<boot dev='hd'/>
|
||||
<bootmenu enable='yes'/>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>restart</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu</emulator>
|
||||
<disk type='file' device='disk'>
|
||||
<driver name='qemu' type='qcow2' event_idx='on'/>
|
||||
<source file='/var/lib/libvirt/images/f14.img'/>
|
||||
<target dev='vda' bus='virtio'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
|
||||
</disk>
|
||||
<disk type='file' device='cdrom'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source file='/var/lib/libvirt/Fedora-14-x86_64-Live-KDE.iso'/>
|
||||
<target dev='hdc' bus='ide'/>
|
||||
<readonly/>
|
||||
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
|
||||
</disk>
|
||||
<controller type='usb' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||
</controller>
|
||||
<controller type='virtio-serial' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='ide' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||
</controller>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<interface type='network'>
|
||||
<mac address='52:54:00:e5:48:58'/>
|
||||
<source network='default'/>
|
||||
<model type='virtio'/>
|
||||
<mtu size='1500'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
</interface>
|
||||
<interface type='network'>
|
||||
<mac address='52:54:00:e5:48:59'/>
|
||||
<source network='default'/>
|
||||
<model type='virtio'/>
|
||||
<mtu size='9000'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
||||
</interface>
|
||||
<serial type='pty'>
|
||||
<target port='0'/>
|
||||
</serial>
|
||||
<console type='pty'>
|
||||
<target type='serial' port='0'/>
|
||||
</console>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<memballoon model='virtio'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
|
||||
</memballoon>
|
||||
</devices>
|
||||
</domain>
|
@ -524,6 +524,7 @@ mymain(void)
|
||||
DO_TEST("watchdog", NONE);
|
||||
DO_TEST("net-bandwidth", NONE);
|
||||
DO_TEST("net-bandwidth2", NONE);
|
||||
DO_TEST("net-mtu", NONE);
|
||||
|
||||
DO_TEST("serial-vc", NONE);
|
||||
DO_TEST("serial-pty", NONE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user