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.
/* 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)) {
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)
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);