[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH] Fix network hotplug to use device_add in QEMU



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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]