[PATCH v4 26/29] lxc, libxl: notify network driver of NICs during reconnect

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

 



When starting up it is important to notify the network driver of any
NICs which are used by running guests so that it can account for any
resources they are using.

Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx>
---
 src/libxl/libxl_driver.c | 30 ++++++++++++++++++++++++++++++
 src/lxc/lxc_process.c    | 30 ++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+)

diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 42221cb925..f9b5341ac0 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -352,6 +352,34 @@ libxlAutostartDomain(virDomainObjPtr vm,
     return ret;
 }
 
+
+static void
+libxlReconnectNotifyNets(virDomainDefPtr def)
+{
+    size_t i;
+    virConnectPtr conn = NULL;
+
+    for (i = 0; i < def->nnets; i++) {
+        virDomainNetDefPtr net = def->nets[i];
+        /* keep others from trying to use the macvtap device name, but
+         * don't return error if this happens, since that causes the
+         * domain to be unceremoniously killed, which would be *very*
+         * impolite.
+         */
+        if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT)
+           ignore_value(virNetDevMacVLanReserveName(net->ifname, false));
+
+        if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
+            if (!conn && !(conn = virGetConnectNetwork()))
+                continue;
+            virDomainNetNotifyActualDevice(conn, def, net);
+        }
+    }
+
+    virObjectUnref(conn);
+}
+
+
 /*
  * Reconnect to running domains that were previously started/created
  * with libxenlight driver.
@@ -424,6 +452,8 @@ libxlReconnectDomain(virDomainObjPtr vm,
     /* Enable domain death events */
     libxl_evenable_domain_death(cfg->ctx, vm->def->id, 0, &priv->deathW);
 
+    libxlReconnectNotifyNets(vm->def);
+
     /* now that we know it's reconnected call the hook if present */
     if (virHookPresent(VIR_HOOK_DRIVER_LIBXL) &&
         STRNEQ("Domain-0", vm->def->name)) {
diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
index 3a33418aca..397b9fd36c 100644
--- a/src/lxc/lxc_process.c
+++ b/src/lxc/lxc_process.c
@@ -1643,6 +1643,34 @@ virLXCProcessAutostartAll(virLXCDriverPtr driver)
     virObjectUnref(conn);
 }
 
+
+static void
+virLXCProcessReconnectNotifyNets(virDomainDefPtr def)
+{
+    size_t i;
+    virConnectPtr conn = NULL;
+
+    for (i = 0; i < def->nnets; i++) {
+        virDomainNetDefPtr net = def->nets[i];
+        /* keep others from trying to use the macvtap device name, but
+         * don't return error if this happens, since that causes the
+         * domain to be unceremoniously killed, which would be *very*
+         * impolite.
+         */
+        if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT)
+           ignore_value(virNetDevMacVLanReserveName(net->ifname, false));
+
+        if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
+            if (!conn && !(conn = virGetConnectNetwork()))
+                continue;
+            virDomainNetNotifyActualDevice(conn, def, net);
+        }
+    }
+
+    virObjectUnref(conn);
+}
+
+
 static int
 virLXCProcessReconnectDomain(virDomainObjPtr vm,
                              void *opaque)
@@ -1689,6 +1717,8 @@ virLXCProcessReconnectDomain(virDomainObjPtr vm,
                                            vm->def, vm->pid) < 0)
             goto error;
 
+        virLXCProcessReconnectNotifyNets(vm->def);
+
         /* now that we know it's reconnected call the hook if present */
         if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
             char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
-- 
2.20.1

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux