diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index ce5c224a7851410973d2a823d65cac41f27200b5..1e4638654b6a3d04d9d85cfd88e079748717fb16 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -5764,7 +5764,11 @@ qemu-kvm -net nic,model=? /dev/null
Typical values for QEMU and KVM include:
- ne2k_isa i82551 i82557b i82559er ne2k_pci pcnet rtl8139 e1000 virtio
+ ne2k_isa i82551 i82557b i82559er ne2k_pci pcnet rtl8139 e1000 virtio.
+ Since 5.2.0, virtio-transitional
+ and virtio-non-transitional
values are supported.
+ See Virtio transitional devices
+ for more details.
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index e033dc1fc301602dbd7dd05dbf97d85ba58a0ec2..e87c82fb3454781a1c7bb5e04abd99e4b3bfeea7 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -29418,7 +29418,9 @@ virDomainNetGetActualTrustGuestRxFilters(virDomainNetDefPtr iface)
bool
virDomainNetIsVirtioModel(const virDomainNetDef *net)
{
- return STREQ_NULLABLE(net->model, "virtio");
+ return (STREQ_NULLABLE(net->model, "virtio") ||
+ STREQ_NULLABLE(net->model, "virtio-transitional") ||
+ STREQ_NULLABLE(net->model, "virtio-non-transitional"));
}
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 933dea85a3db8f788b931e2bc9e7a8a33b6f875e..3878e6f49f75c894d0cfdc0e10a4a75d3389a30a 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -479,6 +479,12 @@ qemuBuildVirtioDevStr(virBufferPtr buf,
break;
case VIR_DOMAIN_DEVICE_NET:
+ has_tmodel = STREQ_NULLABLE(device.data.net->model,
+ "virtio-transitional");
+ has_ntmodel = STREQ_NULLABLE(device.data.net->model,
+ "virtio-non-transitional");
+ break;
+
case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_FS:
case VIR_DOMAIN_DEVICE_INPUT:
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index 40b8efa0b57273aeba83c113420ebebccd64a91e..5920439a9610f6a8ee2b4e1ff17d9bf8908a18f8 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -692,8 +692,13 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
return 0;
}
- if (STREQ_NULLABLE(net->model, "virtio"))
- return virtioFlags;
+ if (STREQ_NULLABLE(net->model, "virtio") ||
+ STREQ_NULLABLE(net->model, "virtio-non-transitional"))
+ return virtioFlags;
+
+ /* Transitional devices only work in conventional PCI slots */
+ if (STREQ_NULLABLE(net->model, "virtio-transitional"))
+ return pciFlags;
if (STREQ_NULLABLE(net->model, "e1000e"))
return pcieFlags;
diff --git a/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-3.1.0.args b/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-3.1.0.args
index 70446f16f23b856d5081c0a255595dbd7a256506..827b4070d49dcb30799b276530dc9619d23ea1f5 100644
--- a/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-3.1.0.args
+++ b/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-3.1.0.args
@@ -26,9 +26,13 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
-device pcie-root-port,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\
addr=0x1 \
-device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \
+-device pcie-root-port,port=0xa,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x2 \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \
--device virtio-blk-pci,disable-legacy=on,disable-modern=off,scsi=off,bus=pci.1,\
+-device virtio-blk-pci,disable-legacy=on,disable-modern=off,scsi=off,bus=pci.2,\
addr=0x0,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
+-netdev user,id=hostnet0 \
+-device virtio-net-pci,disable-legacy=on,disable-modern=off,netdev=hostnet0,\
+id=net0,mac=00:11:22:33:44:55,bus=pci.1,addr=0x0 \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
resourcecontrol=deny \
-msg timestamp=on
diff --git a/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-latest.args
index 37078765bc2e438cb0ac70bc5f24b8f4c2642414..9a0eb9a1f31b009c4a7baabcc7c7e88517cc92f0 100644
--- a/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/virtio-non-transitional.x86_64-latest.args
@@ -26,9 +26,13 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
-device pcie-root-port,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\
addr=0x1 \
-device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \
+-device pcie-root-port,port=0xa,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x2 \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \
--device virtio-blk-pci-non-transitional,scsi=off,bus=pci.1,addr=0x0,\
+-device virtio-blk-pci-non-transitional,scsi=off,bus=pci.2,addr=0x0,\
drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
+-netdev user,id=hostnet0 \
+-device virtio-net-pci-non-transitional,netdev=hostnet0,id=net0,\
+mac=00:11:22:33:44:55,bus=pci.1,addr=0x0 \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
resourcecontrol=deny \
-msg timestamp=on
diff --git a/tests/qemuxml2argvdata/virtio-non-transitional.xml b/tests/qemuxml2argvdata/virtio-non-transitional.xml
index 38c3375faade4bd8a435fbaed3b11751bf2f4d4e..f7a08210212f5288ab286aae6f5acd269723f596 100644
--- a/tests/qemuxml2argvdata/virtio-non-transitional.xml
+++ b/tests/qemuxml2argvdata/virtio-non-transitional.xml
@@ -11,6 +11,10 @@
+
+
+
+
diff --git a/tests/qemuxml2argvdata/virtio-transitional.x86_64-3.1.0.args b/tests/qemuxml2argvdata/virtio-transitional.x86_64-3.1.0.args
index e254014471099434c981985778591a445deec31c..ed0d3b7f7aaab2e1cde1947ca7f9fac10db7a2c5 100644
--- a/tests/qemuxml2argvdata/virtio-transitional.x86_64-3.1.0.args
+++ b/tests/qemuxml2argvdata/virtio-transitional.x86_64-3.1.0.args
@@ -29,7 +29,10 @@ addr=0x1 \
-device pcie-root-port,port=0x9,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x1 \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \
-device virtio-blk-pci,disable-legacy=off,disable-modern=off,scsi=off,\
-bus=pci.2,addr=0x1,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
+bus=pci.2,addr=0x2,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
+-netdev user,id=hostnet0 \
+-device virtio-net-pci,disable-legacy=off,disable-modern=off,netdev=hostnet0,\
+id=net0,mac=00:11:22:33:44:55,bus=pci.2,addr=0x1 \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
resourcecontrol=deny \
-msg timestamp=on
diff --git a/tests/qemuxml2argvdata/virtio-transitional.x86_64-latest.args b/tests/qemuxml2argvdata/virtio-transitional.x86_64-latest.args
index e78223eac88ce358f259d4c42e2bcb25fe6b9a10..46e139d4926d3863d373d0294060adebe69e3098 100644
--- a/tests/qemuxml2argvdata/virtio-transitional.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/virtio-transitional.x86_64-latest.args
@@ -28,8 +28,11 @@ addr=0x1 \
-device pcie-pci-bridge,id=pci.2,bus=pci.1,addr=0x0 \
-device pcie-root-port,port=0x9,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x1 \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \
--device virtio-blk-pci-transitional,scsi=off,bus=pci.2,addr=0x1,\
+-device virtio-blk-pci-transitional,scsi=off,bus=pci.2,addr=0x2,\
drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
+-netdev user,id=hostnet0 \
+-device virtio-net-pci-transitional,netdev=hostnet0,id=net0,\
+mac=00:11:22:33:44:55,bus=pci.2,addr=0x1 \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
resourcecontrol=deny \
-msg timestamp=on
diff --git a/tests/qemuxml2argvdata/virtio-transitional.xml b/tests/qemuxml2argvdata/virtio-transitional.xml
index ab6d264cf9c3f8cc756fc5b672eadc129ab3aff6..4aa08ba16a1cde06ad44f4f73aaeb68475e631f5 100644
--- a/tests/qemuxml2argvdata/virtio-transitional.xml
+++ b/tests/qemuxml2argvdata/virtio-transitional.xml
@@ -11,6 +11,10 @@
+
+
+
+
diff --git a/tests/qemuxml2xmloutdata/virtio-non-transitional.xml b/tests/qemuxml2xmloutdata/virtio-non-transitional.xml
index 7e4aa16b3287116a8f1fe90e3e8921ad5e3571f5..f0dc7c08336728ab5da45f4e212e22bd4ff7264e 100644
--- a/tests/qemuxml2xmloutdata/virtio-non-transitional.xml
+++ b/tests/qemuxml2xmloutdata/virtio-non-transitional.xml
@@ -18,7 +18,7 @@
-
+
@@ -35,6 +35,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2xmloutdata/virtio-transitional.xml b/tests/qemuxml2xmloutdata/virtio-transitional.xml
index c19e133bb3c9c61e6bff5fe1b18604b7143a10db..f9729391a58512b5f52aff76a6f6012657fb017b 100644
--- a/tests/qemuxml2xmloutdata/virtio-transitional.xml
+++ b/tests/qemuxml2xmloutdata/virtio-transitional.xml
@@ -18,7 +18,7 @@
-
+
@@ -39,6 +39,11 @@
+
+
+
+
+