This new field in libxlDomainObjPrivate is named "config"
and is kept while the domain is active. For now, "config"
will be used in libxlDomainStartCallback to set
network interface names based on domid and
libxl_device_nic devid that is set in the config on domain
create.
Signed-off-by: Joao Martins <joao.m.martins(a)oracle.com>
---
src/libxl/libxl_domain.c | 34 ++++++++++++++++++++++++----------
src/libxl/libxl_domain.h | 1 +
2 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 40dcea1..60ef3a0 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -709,6 +709,11 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver,
vm->def->id = -1;
+ if (priv->config) {
+ libxl_domain_config_dispose(priv->config);
+ VIR_FREE(priv->config);
+ }
+
if (priv->deathW) {
libxl_evdisable_domain_death(cfg->ctx, priv->deathW);
priv->deathW = NULL;
@@ -897,7 +902,7 @@ int
libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
bool start_paused, int restore_fd)
{
- libxl_domain_config d_config;
+ libxl_domain_config *d_config = NULL;
virDomainDefPtr def = NULL;
virObjectEventPtr event = NULL;
libxlSavefileHeader hdr;
@@ -914,7 +919,10 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
libxl_asyncprogress_how aop_console_how;
- libxl_domain_config_init(&d_config);
+ if (VIR_ALLOC(d_config) < 0)
+ return ret;
+
+ libxl_domain_config_init(d_config);
cfg = libxlDriverConfigGet(driver);
/* If there is a managed saved state restore it instead of starting
@@ -960,10 +968,10 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
}
if (libxlBuildDomainConfig(driver->reservedGraphicsPorts, vm->def,
- cfg->ctx, &d_config) < 0)
+ cfg->ctx, d_config) < 0)
goto cleanup;
- if (cfg->autoballoon && libxlDomainFreeMem(cfg->ctx, &d_config)
< 0)
+ if (cfg->autoballoon && libxlDomainFreeMem(cfg->ctx, d_config) < 0)
goto cleanup;
if (virHostdevPrepareDomainDevices(hostdev_mgr, LIBXL_DRIVER_NAME,
@@ -987,19 +995,20 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
/* Unlock virDomainObj while creating the domain */
virObjectUnlock(vm);
+ priv->config = d_config;
aop_console_how.for_callback = vm;
aop_console_how.callback = libxlConsoleCallback;
if (restore_fd < 0) {
- ret = libxl_domain_create_new(cfg->ctx, &d_config,
+ ret = libxl_domain_create_new(cfg->ctx, d_config,
&domid, NULL, &aop_console_how);
} else {
#ifdef LIBXL_HAVE_DOMAIN_CREATE_RESTORE_PARAMS
params.checkpointed_stream = 0;
- ret = libxl_domain_create_restore(cfg->ctx, &d_config, &domid,
+ ret = libxl_domain_create_restore(cfg->ctx, d_config, &domid,
restore_fd, ¶ms, NULL,
&aop_console_how);
#else
- ret = libxl_domain_create_restore(cfg->ctx, &d_config, &domid,
+ ret = libxl_domain_create_restore(cfg->ctx, d_config, &domid,
restore_fd, NULL, &aop_console_how);
#endif
}
@@ -1009,11 +1018,11 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr
vm,
if (restore_fd < 0)
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight failed to create new domain
'%s'"),
- d_config.c_info.name);
+ d_config->c_info.name);
else
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight failed to restore domain
'%s'"),
- d_config.c_info.name);
+ d_config->c_info.name);
goto release_dom;
}
@@ -1061,6 +1070,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
if (event)
libxlDomainEventQueue(driver, event);
+ d_config = NULL;
ret = 0;
goto cleanup;
@@ -1078,7 +1088,11 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState);
cleanup:
- libxl_domain_config_dispose(&d_config);
+ if (d_config) {
+ libxl_domain_config_dispose(d_config);
+ VIR_FREE(d_config);
+ priv->config = NULL;
+ }
VIR_FREE(dom_xml);
VIR_FREE(managed_save_path);
virDomainDefFree(def);
diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h
index 44b3e0b..52ee726 100644
--- a/src/libxl/libxl_domain.h
+++ b/src/libxl/libxl_domain.h
@@ -65,6 +65,7 @@ struct _libxlDomainObjPrivate {
libxl_evgen_domain_death *deathW;
unsigned short migrationPort;
char *lockState;
+ libxl_domain_config *config;
struct libxlDomainJobObj job;
};
--
2.1.4