From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony PERARD Subject: [PATCH 1/3] libxl_qmp, Introduce libxl__qmp_insert_cdrom. Date: Fri, 27 Jul 2012 18:17:29 +0100 Message-ID: <1343409451-30136-2-git-send-email-anthony.perard@citrix.com> References: <1343409451-30136-1-git-send-email-anthony.perard@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1343409451-30136-1-git-send-email-anthony.perard@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Xen Devel Cc: Anthony PERARD , Ian Jackson , Ian Campbell , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org This function can eject or change the CDROM for a guest that use qemu-xen as a device-model. Signed-off-by: Anthony PERARD --- tools/libxl/libxl_internal.h | 1 + tools/libxl/libxl_qmp.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 0 deletions(-) diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index c369fd3..eb8786c 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1389,6 +1389,7 @@ _hidden int libxl__qmp_resume(libxl__gc *gc, int domid); _hidden int libxl__qmp_save(libxl__gc *gc, int domid, const char *filename); /* Set dirty bitmap logging status */ _hidden int libxl__qmp_set_global_dirty_log(libxl__gc *gc, int domid, bool enable); +_hidden int libxl__qmp_insert_cdrom(libxl__gc *gc, int domid, const libxl_device_disk *disk); /* close and free the QMP handler */ _hidden void libxl__qmp_close(libxl__qmp_handler *qmp); /* remove the socket file, if the file has already been removed, diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c index 2c5559f..aebc733 100644 --- a/tools/libxl/libxl_qmp.c +++ b/tools/libxl/libxl_qmp.c @@ -1024,6 +1024,41 @@ out: return rc; } +int libxl__qmp_insert_cdrom(libxl__gc *gc, int domid, + const libxl_device_disk *disk) +{ + libxl__qmp_handler *qmp = NULL; + char *device_id; + int rc = 0; + + device_id = libxl__sprintf(gc, "ide-%s", disk->vdev); + if (!device_id) + return ERROR_NOMEM; + + qmp = libxl__qmp_initialize(gc, domid); + if (!qmp) + return ERROR_FAIL; + + if (disk->format == LIBXL_DISK_FORMAT_EMPTY) { + libxl__json_object *args = NULL; + + args = qmp_parameters_add_string(gc, NULL, "device", device_id); + if (!args) { + rc = ERROR_NOMEM; + goto out; + } + rc = qmp_synchronous_send(qmp, "eject", args, NULL, NULL, qmp->timeout); + libxl__json_object_free(gc, args); + } else { + char *file = disk->pdev_path; + rc = qmp_change(gc, qmp, device_id, file, NULL); + } + +out: + libxl__qmp_close(qmp); + return rc; +} + int libxl__qmp_initializations(libxl__gc *gc, uint32_t domid, const libxl_domain_config *guest_config) { -- Anthony PERARD