The initial boot of VMs uses -device for NICs where available. The
corresponding monitor command is device_add, but the network hotplug
code was still using device_del by mistake.
* src/qemu/qemu_driver.c: Use device_add for NIC hotplug where
available
---
src/qemu/qemu_driver.c | 28 ++++++++++++++++++++--------
1 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 5c15c1d..9e0a353 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -7210,17 +7210,29 @@ static int qemudDomainAttachNetDevice(virConnectPtr conn,
close(tapfd);
tapfd = -1;
- if (!(nicstr = qemuBuildNicStr(net, NULL, vlan)))
- goto try_remove;
+ if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) {
+ if (!(nicstr = qemuBuildNicDevStr(net, vlan)))
+ goto try_remove;
+ } else {
+ if (!(nicstr = qemuBuildNicStr(net, NULL, vlan)))
+ goto try_remove;
+ }
qemuDomainObjEnterMonitorWithDriver(driver, vm);
- if (qemuMonitorAddPCINetwork(priv->mon, nicstr,
- &guestAddr) < 0) {
- qemuDomainObjExitMonitorWithDriver(driver, vm);
- goto try_remove;
+ if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) {
+ if (qemuMonitorAddDevice(priv->mon, nicstr) < 0) {
+ qemuDomainObjExitMonitorWithDriver(driver, vm);
+ goto try_remove;
+ }
+ } else {
+ if (qemuMonitorAddPCINetwork(priv->mon, nicstr,
+ &guestAddr) < 0) {
+ qemuDomainObjExitMonitorWithDriver(driver, vm);
+ goto try_remove;
+ }
+ net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
+ memcpy(&net->info.addr.pci, &guestAddr, sizeof(guestAddr));
}
- net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
- memcpy(&net->info.addr.pci, &guestAddr, sizeof(guestAddr));
qemuDomainObjExitMonitorWithDriver(driver, vm);
ret = 0;
--
1.6.6.1