[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH V5 28/32] libxl: store up-to-date domain configuration as we create domain
This patch utilizes "libxl-json" format and helper functions introduced in previous patch to store up-to-do domain configuration when creating a domain. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- tools/libxl/libxl_create.c | 53 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index da1517c..47859e0 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -716,6 +716,7 @@ static void initiate_domain_create(libxl__egc *egc, int i, ret; size_t last_devid = -1; bool pod_enabled = false; + libxl_domain_config d_config_saved; /* convenience aliases */ libxl_domain_config *const d_config = dcs->guest_config; @@ -724,6 +725,8 @@ static void initiate_domain_create(libxl__egc *egc, domid = 0; + libxl_domain_config_init(&d_config_saved); + if (d_config->c_info.ssid_label) { char *s = d_config->c_info.ssid_label; ret = libxl_flask_context_to_sid(ctx, s, strlen(s), @@ -800,6 +803,8 @@ static void initiate_domain_create(libxl__egc *egc, goto error_out; } + libxl_domain_config_copy(ctx, &d_config_saved, d_config); + ret = libxl__domain_create_info_setdefault(gc, &d_config->c_info); if (ret) goto error_out; @@ -814,6 +819,16 @@ static void initiate_domain_create(libxl__egc *egc, dcs->guest_domid = domid; dcs->dmss.dm.guest_domid = 0; /* means we haven't spawned */ + /* At this point we've got domid and UUID, store configuration */ + ret = libxl_store_domain_configuration(ctx, domid, &d_config_saved); + if (ret) { + LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "cannot store domain configuration: %d", + ret); + ret = ERROR_FAIL; + goto error_out; + } + libxl_domain_config_dispose(&d_config_saved); + ret = libxl__domain_build_info_setdefault(gc, &d_config->b_info); if (ret) goto error_out; @@ -874,6 +889,7 @@ static void initiate_domain_create(libxl__egc *egc, return; error_out: + libxl_domain_config_dispose(&d_config_saved); assert(ret); domcreate_complete(egc, dcs, ret); } @@ -1356,6 +1372,24 @@ error_out: domcreate_complete(egc, dcs, ret); } +static void update_domain_config(libxl_ctx *ctx, + libxl_domain_config *dst, + const libxl_domain_config *src) +{ + int i; + + /* update network interface information */ + for (i = 0; i < src->num_nics; i++) + libxl_mac_copy(ctx, &dst->nics[i].mac, &src->nics[i].mac); + + /* update vtpm information */ + for (i = 0; i < src->num_vtpms; i++) + libxl_uuid_copy(ctx, &dst->vtpms[i].uuid, &src->vtpms[i].uuid); + + /* update guest UUID */ + libxl_uuid_copy(ctx, &dst->c_info.uuid, &src->c_info.uuid); +} + static void domcreate_complete(libxl__egc *egc, libxl__domain_create_state *dcs, int rc) @@ -1366,6 +1400,25 @@ static void domcreate_complete(libxl__egc *egc, if (!rc && d_config->b_info.exec_ssidref) rc = xc_flask_relabel_domain(CTX->xch, dcs->guest_domid, d_config->b_info.exec_ssidref); + if (!rc) { + libxl_domain_config d_config_saved; + + libxl_domain_config_init(&d_config_saved); + rc = libxl_load_domain_configuration(CTX, dcs->guest_domid, + &d_config_saved); + if (rc) { + LOG(ERROR, "cannot load domain configuration: %d", rc); + goto out; + } + update_domain_config(CTX, &d_config_saved, d_config); + rc = libxl_store_domain_configuration(CTX, dcs->guest_domid, + &d_config_saved); + if (rc) + LOG(ERROR, "cannot store domain configuration: %d", rc); + libxl_domain_config_dispose(&d_config_saved); + } + +out: if (rc) { if (dcs->guest_domid) { dcs->dds.ao = ao; -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |