# HG changeset patch
# User Kamala Narasimhan <kamala.narasimhan@xxxxxxxxxx>
# Date 1297799977 0
# Node ID ae4799bdd42510e24cdf83b275d4675fe3105009
# Parent a3c58347ab3445d9c01ef1328e8e3d6570b730b4
libxl: disk specification interface change
Currently we pile all the backend and format information pertaining to
disk option in a single enum. This check-in separates the two and
uses two enums, one for disk format and another for disk backend.
This helps clearly differentiate between disk format and backend
within the implementation and also helps cleanup the code in this area
in preparation for the impending parser revamping to be done post 4.1.
Along with separating format and backend, this check-in also removes
unwanted types and renames variables in the disk interface and fixes
the code affected by the interface changes.
In specific, here are the disk interface changes made - In
libxl_device_disk structure physpath was renamed to pdev_path,
virtpath was renamed to vdev, phystype was removed and replaced with
backend and format enums. Also previously a single enum
libxl_disk_phystype held the values for qcow, qcow2, vhd, aio, file,
phy, empty and that got refactored into two enums, libxl_disk_format
to hold unknown, qcow, qcow2, vhd, raw, empty and libxl_disk_backend
to hold unknown, phy, tap and qdisk.
Signed-off-by: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxxx>
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
tools/libxl/libxl.c | 163 +++++++++++++++++++++-----------------
tools/libxl/libxl.h | 22 +++--
tools/libxl/libxl.idl | 10 +-
tools/libxl/libxl_blktap2.c | 4
tools/libxl/libxl_device.c | 43 ++++------
tools/libxl/libxl_dm.c | 6 -
tools/libxl/libxl_internal.h | 6 -
tools/libxl/libxl_noblktap2.c | 2
tools/libxl/libxl_utils.c | 22 ++---
tools/libxl/libxl_utils.h | 2
tools/libxl/xl_cmdimpl.c | 88 ++++++++++++--------
tools/ocaml/libs/xl/xl_stubs.c | 13 +--
tools/python/xen/lowlevel/xl/xl.c | 17 ++-
13 files changed, 223 insertions(+), 175 deletions(-)
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/libxl.c Tue Feb 15 19:59:37 2011 +0000
@@ -588,7 +588,7 @@ int libxl_wait_for_disk_ejects(libxl_ctx
for (i = 0; i < num_disks; i++) {
if (asprintf(&(waiter[i].path), "%s/device/vbd/%d/eject",
libxl__xs_get_dompath(&gc, domid),
- libxl__device_disk_dev_number(disks[i].virtpath)) < 0)
+ libxl__device_disk_dev_number(disks[i].vdev)) < 0)
goto out;
if (asprintf(&(waiter[i].token), "%d", LIBXL_EVENT_DISK_EJECT) < 0)
goto out;
@@ -668,10 +668,10 @@ int libxl_event_get_disk_eject_info(libx
disk->backend_domid = 0;
disk->domid = domid;
- disk->physpath = strdup("");
- disk->phystype = PHYSTYPE_EMPTY;
+ disk->pdev_path = strdup("");
+ disk->format = DISK_FORMAT_EMPTY;
/* this value is returned to the user: do not free right away */
- disk->virtpath = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc,
"%s/dev", backend));
+ disk->vdev = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/dev",
backend));
disk->unpluggable = 1;
disk->readwrite = 0;
disk->is_cdrom = 1;
@@ -863,18 +863,19 @@ int libxl_vncviewer_exec(libxl_ctx *ctx,
/******************************************************************************/
-static int validate_virtual_disk(libxl_ctx *ctx, char *file_name,
libxl_disk_phystype disk_type)
+static int validate_virtual_disk(libxl_ctx *ctx, char *file_name,
+ libxl_disk_backend backend_type, libxl_disk_format format)
{
struct stat stat_buf;
- if ( (file_name[0] == '\0') && (disk_type == PHYSTYPE_EMPTY) )
+ if ((file_name[0] == '\0') && (format == DISK_FORMAT_EMPTY))
return 0;
if ( stat(file_name, &stat_buf) != 0 ) {
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "failed to stat %s",
file_name);
return ERROR_INVAL;
}
- if ( disk_type == PHYSTYPE_PHY ) {
+ if (backend_type == DISK_BACKEND_PHY) {
if ( !(S_ISBLK(stat_buf.st_mode)) ) {
LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s is not a block
device!\n",
file_name);
@@ -898,7 +899,8 @@ int libxl_device_disk_add(libxl_ctx *ctx
libxl__device device;
int major, minor, rc;
- rc = validate_virtual_disk(ctx, disk->physpath, disk->phystype);
+ rc = validate_virtual_disk(ctx, disk->pdev_path, disk->backend,
+ disk->format);
if (rc)
return rc;
@@ -913,11 +915,11 @@ int libxl_device_disk_add(libxl_ctx *ctx
goto out_free;
}
- backend_type = libxl__device_disk_backend_type_of_phystype(disk->phystype);
- devid = libxl__device_disk_dev_number(disk->virtpath);
+ backend_type = libxl__device_disk_string_of_backend(disk->backend);
+ devid = libxl__device_disk_dev_number(disk->vdev);
if (devid==-1) {
LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Invalid or unsupported"
- " virtual disk identifier %s", disk->virtpath);
+ " virtual disk identifier %s", disk->vdev);
rc = ERROR_INVAL;
goto out_free;
}
@@ -928,37 +930,32 @@ int libxl_device_disk_add(libxl_ctx *ctx
device.domid = disk->domid;
device.kind = DEVICE_VBD;
- switch (disk->phystype) {
- case PHYSTYPE_PHY: {
-
- libxl__device_physdisk_major_minor(disk->physpath, &major, &minor);
+ switch (disk->backend) {
+ case DISK_BACKEND_PHY:
+ libxl__device_physdisk_major_minor(disk->pdev_path, &major,
&minor);
flexarray_append(back, "physical-device");
flexarray_append(back, libxl__sprintf(&gc, "%x:%x", major, minor));
flexarray_append(back, "params");
- flexarray_append(back, disk->physpath);
+ flexarray_append(back, disk->pdev_path);
device.backend_kind = DEVICE_VBD;
break;
- }
- case PHYSTYPE_EMPTY:
- break;
- case PHYSTYPE_FILE:
- /* let's pretend is tap:aio for the moment */
- disk->phystype = PHYSTYPE_AIO;
- case PHYSTYPE_AIO:
- case PHYSTYPE_QCOW:
- case PHYSTYPE_QCOW2:
- case PHYSTYPE_VHD:
+ case DISK_BACKEND_TAP:
+ case DISK_BACKEND_QDISK:
+ if (disk->format == DISK_FORMAT_EMPTY)
+ break;
if (libxl__blktap_enabled(&gc)) {
const char *dev = libxl__blktap_devpath(&gc,
- disk->physpath, disk->phystype);
+ disk->pdev_path, disk->format);
if (!dev) {
rc = ERROR_FAIL;
goto out_free;
}
flexarray_append(back, "tapdisk-params");
- flexarray_append(back, libxl__sprintf(&gc, "%s:%s",
libxl__device_disk_string_of_phystype(disk->phystype), disk->physpath));
+ flexarray_append(back, libxl__sprintf(&gc, "%s:%s",
+ libxl__device_disk_string_of_format(disk->format),
+ disk->pdev_path));
flexarray_append(back, "params");
flexarray_append(back, libxl__strdup(&gc, dev));
backend_type = "phy";
@@ -971,16 +968,16 @@ int libxl_device_disk_add(libxl_ctx *ctx
}
flexarray_append(back, "params");
flexarray_append(back, libxl__sprintf(&gc, "%s:%s",
-
libxl__device_disk_string_of_phystype(disk->phystype), disk->physpath));
-
- if (libxl__blktap_enabled(&gc))
+ libxl__device_disk_string_of_format(disk->format),
disk->pdev_path));
+
+ if (libxl__blktap_enabled(&gc) &&
+ disk->backend != DISK_BACKEND_QDISK)
device.backend_kind = DEVICE_TAP;
else
device.backend_kind = DEVICE_QDISK;
break;
-
default:
- LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk physical
type: %d\n", disk->phystype);
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend type:
%d\n", disk->backend);
rc = ERROR_INVAL;
goto out_free;
}
@@ -996,7 +993,7 @@ int libxl_device_disk_add(libxl_ctx *ctx
flexarray_append(back, "state");
flexarray_append(back, libxl__sprintf(&gc, "%d", 1));
flexarray_append(back, "dev");
- flexarray_append(back, disk->virtpath);
+ flexarray_append(back, disk->vdev);
flexarray_append(back, "type");
flexarray_append(back, backend_type);
flexarray_append(back, "mode");
@@ -1036,11 +1033,11 @@ int libxl_device_disk_del(libxl_ctx *ctx
libxl__device device;
int devid;
- devid = libxl__device_disk_dev_number(disk->virtpath);
+ devid = libxl__device_disk_dev_number(disk->vdev);
device.backend_domid = disk->backend_domid;
device.backend_devid = devid;
device.backend_kind =
- (disk->phystype == PHYSTYPE_PHY) ? DEVICE_VBD : DEVICE_TAP;
+ (disk->backend == DISK_BACKEND_PHY) ? DEVICE_VBD : DEVICE_TAP;
device.domid = disk->domid;
device.devid = devid;
device.kind = DEVICE_VBD;
@@ -1052,36 +1049,62 @@ char * libxl_device_disk_local_attach(li
libxl__gc gc = LIBXL_INIT_GC(ctx);
const char *dev = NULL;
char *ret = NULL;
- int phystype = disk->phystype;
- switch (phystype) {
- case PHYSTYPE_PHY: {
- fprintf(stderr, "attaching PHY disk %s to domain 0\n",
disk->physpath);
- dev = disk->physpath;
- break;
- }
- case PHYSTYPE_FILE:
- /* let's pretend is tap:aio for the moment */
- phystype = PHYSTYPE_AIO;
- case PHYSTYPE_AIO:
- if (!libxl__blktap_enabled(&gc)) {
- dev = disk->physpath;
+
+ switch (disk->backend) {
+ case DISK_BACKEND_PHY:
+ if (disk->format != DISK_FORMAT_RAW) {
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "physical block device must"
+ " be raw");
break;
}
- case PHYSTYPE_VHD:
- if (libxl__blktap_enabled(&gc))
- dev = libxl__blktap_devpath(&gc, disk->physpath, phystype);
- else
- LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "tapdisk2 is required to
open a vhd disk\n");
+ LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "attaching PHY disk %s to domain
0",
+ disk->pdev_path);
+ dev = disk->pdev_path;
break;
- case PHYSTYPE_QCOW:
- case PHYSTYPE_QCOW2:
- LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "cannot locally attach a qcow or
qcow2 disk image\n");
+ case DISK_BACKEND_TAP:
+ if (disk->format == DISK_FORMAT_VHD || disk->format ==
DISK_FORMAT_RAW)
+ {
+ if (libxl__blktap_enabled(&gc))
+ dev = libxl__blktap_devpath(&gc, disk->pdev_path,
disk->format);
+ else {
+ if (disk->format != DISK_FORMAT_RAW) {
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "tapdisk2 is
required"
+ " to open a vhd disk");
+ break;
+ } else {
+ LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "attaching tap disk
%s to domain 0",
+ disk->pdev_path);
+ dev = disk->pdev_path;
+ break;
+ }
+ }
+ break;
+ } else if (disk->format == DISK_FORMAT_QCOW ||
+ disk->format == DISK_FORMAT_QCOW2) {
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "cannot locally attach a
qcow or qcow2 disk image");
+ break;
+ } else {
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend "
+ "type: %d", disk->backend);
+ break;
+ }
+ case DISK_BACKEND_QDISK:
+ if (disk->format != DISK_FORMAT_RAW) {
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "cannot locally attach a
qdisk "
+ "image if the format is not raw");
+ break;
+ }
+ LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "attaching qdisk %s to domain
0\n",
+ disk->pdev_path);
+ dev = disk->pdev_path;
break;
-
- default:
- LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk physical
type: %d\n", phystype);
+ case DISK_BACKEND_UNKNOWN:
+ default:
+ LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend "
+ "type: %d", disk->backend);
break;
}
+
if (dev != NULL)
ret = strdup(dev);
libxl__free_all(&gc);
@@ -1677,13 +1700,15 @@ static unsigned int libxl_append_disk_li
pdisk->domid = domid;
physpath_tmp = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc,
"%s/%s/params", be_path, *dir), &len);
if (physpath_tmp && strchr(physpath_tmp, ':')) {
- pdisk->physpath = strdup(strchr(physpath_tmp, ':') + 1);
+ pdisk->pdev_path = strdup(strchr(physpath_tmp, ':') + 1);
free(physpath_tmp);
} else {
- pdisk->physpath = physpath_tmp;
+ pdisk->pdev_path = physpath_tmp;
}
- libxl_string_to_phystype(ctx, libxl__xs_read(&gc, XBT_NULL,
libxl__sprintf(&gc, "%s/%s/type", be_path, *dir)), &(pdisk->phystype));
- pdisk->virtpath = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc,
"%s/%s/dev", be_path, *dir), &len);
+ libxl_string_to_backend(ctx, libxl__xs_read(&gc, XBT_NULL,
+ libxl__sprintf(&gc, "%s/%s/type", be_path, *dir)),
+ &(pdisk->backend));
+ pdisk->vdev = xs_read(ctx->xsh, XBT_NULL, libxl__sprintf(&gc,
"%s/%s/dev", be_path, *dir), &len);
pdisk->unpluggable = atoi(libxl__xs_read(&gc, XBT_NULL,
libxl__sprintf(&gc, "%s/%s/removable", be_path, *dir)));
if (!strcmp(libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc,
"%s/%s/mode", be_path, *dir)), "w"))
pdisk->readwrite = 1;
@@ -1718,7 +1743,7 @@ int libxl_device_disk_getinfo(libxl_ctx
char *val;
dompath = libxl__xs_get_dompath(&gc, domid);
- diskinfo->devid = libxl__device_disk_dev_number(disk->virtpath);
+ diskinfo->devid = libxl__device_disk_dev_number(disk->vdev);
/* tap devices entries in xenstore are written as vbd devices. */
diskpath = libxl__sprintf(&gc, "%s/device/vbd/%d", dompath,
diskinfo->devid);
@@ -1752,13 +1777,13 @@ int libxl_cdrom_insert(libxl_ctx *ctx, u
libxl_device_disk *disks;
int ret = ERROR_FAIL;
- if (!disk->physpath) {
- disk->physpath = strdup("");
- disk->phystype = PHYSTYPE_EMPTY;
+ if (!disk->pdev_path) {
+ disk->pdev_path = strdup("");
+ disk->format = DISK_FORMAT_EMPTY;
}
disks = libxl_device_disk_list(ctx, domid, &num);
for (i = 0; i < num; i++) {
- if (disks[i].is_cdrom && !strcmp(disk->virtpath, disks[i].virtpath))
+ if (disks[i].is_cdrom && !strcmp(disk->vdev, disks[i].vdev))
/* found */
break;
}
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/libxl.h
--- a/tools/libxl/libxl.h Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/libxl.h Tue Feb 15 19:59:37 2011 +0000
@@ -172,14 +172,20 @@ typedef enum {
} libxl_console_consback;
typedef enum {
- PHYSTYPE_QCOW = 1,
- PHYSTYPE_QCOW2,
- PHYSTYPE_VHD,
- PHYSTYPE_AIO,
- PHYSTYPE_FILE,
- PHYSTYPE_PHY,
- PHYSTYPE_EMPTY,
-} libxl_disk_phystype;
+ DISK_FORMAT_UNKNOWN = 0,
+ DISK_FORMAT_QCOW,
+ DISK_FORMAT_QCOW2,
+ DISK_FORMAT_VHD,
+ DISK_FORMAT_RAW,
+ DISK_FORMAT_EMPTY,
+} libxl_disk_format;
+
+typedef enum {
+ DISK_BACKEND_UNKNOWN = 0,
+ DISK_BACKEND_PHY,
+ DISK_BACKEND_TAP,
+ DISK_BACKEND_QDISK,
+} libxl_disk_backend;
typedef enum {
NICTYPE_IOEMU = 1,
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/libxl.idl
--- a/tools/libxl/libxl.idl Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/libxl.idl Tue Feb 15 19:59:37 2011 +0000
@@ -11,7 +11,8 @@ libxl_qemu_machine_type = Number("qemu_m
libxl_qemu_machine_type = Number("qemu_machine_type", namespace="libxl_")
libxl_console_consback = Number("console_consback", namespace="libxl_")
libxl_console_constype = Number("console_constype", namespace="libxl_")
-libxl_disk_phystype = Number("disk_phystype", namespace="libxl_")
+libxl_disk_format = Number("disk_format", namespace="libxl_")
+libxl_disk_backend = Number("disk_backend", namespace="libxl_")
libxl_nic_type = Number("nic_type", namespace="libxl_")
libxl_cpuid_policy_list = Builtin("cpuid_policy_list",
destructor_fn="libxl_cpuid_destroy", passby=PASS_BY_REFERENCE)
@@ -203,9 +204,10 @@ libxl_device_disk = Struct("device_disk"
libxl_device_disk = Struct("device_disk", [
("backend_domid", uint32),
("domid", domid),
- ("physpath", string),
- ("phystype", libxl_disk_phystype),
- ("virtpath", string),
+ ("pdev_path", string),
+ ("vdev", string),
+ ("backend", libxl_disk_backend),
+ ("format", libxl_disk_format),
("unpluggable", integer),
("readwrite", integer),
("is_cdrom", integer),
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/libxl_blktap2.c
--- a/tools/libxl/libxl_blktap2.c Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/libxl_blktap2.c Tue Feb 15 19:59:37 2011 +0000
@@ -26,13 +26,13 @@ int libxl__blktap_enabled(libxl__gc *gc)
const char *libxl__blktap_devpath(libxl__gc *gc,
const char *disk,
- libxl_disk_phystype phystype)
+ libxl_disk_format format)
{
const char *type;
char *params, *devname = NULL;
int minor, err;
- type = libxl__device_disk_string_of_phystype(phystype);
+ type = libxl__device_disk_string_of_format(format);
minor = tap_ctl_find_minor(type, disk);
if (minor >= 0) {
devname = libxl__sprintf(gc, "/dev/xen/blktap-2/tapdev%d", minor);
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/libxl_device.c Tue Feb 15 19:59:37 2011 +0000
@@ -121,31 +121,24 @@ out:
return rc;
}
-char *libxl__device_disk_string_of_phystype(libxl_disk_phystype phystype)
-{
- switch (phystype) {
- case PHYSTYPE_QCOW: return "qcow";
- case PHYSTYPE_QCOW2: return "qcow2";
- case PHYSTYPE_VHD: return "vhd";
- case PHYSTYPE_AIO: return "aio";
- case PHYSTYPE_FILE: return "file";
- case PHYSTYPE_PHY: return "phy";
- case PHYSTYPE_EMPTY: return "file";
- default: return NULL;
- }
-}
-
-char *libxl__device_disk_backend_type_of_phystype(libxl_disk_phystype phystype)
-{
- switch (phystype) {
- case PHYSTYPE_QCOW: return "tap";
- case PHYSTYPE_QCOW2: return "tap";
- case PHYSTYPE_VHD: return "tap";
- case PHYSTYPE_AIO: return "tap";
- /* let's pretend file is tap:aio */
- case PHYSTYPE_FILE: return "tap";
- case PHYSTYPE_EMPTY: return "tap";
- case PHYSTYPE_PHY: return "phy";
+char *libxl__device_disk_string_of_format(libxl_disk_format format)
+{
+ switch (format) {
+ case DISK_FORMAT_QCOW: return "qcow";
+ case DISK_FORMAT_QCOW2: return "qcow2";
+ case DISK_FORMAT_VHD: return "vhd";
+ case DISK_FORMAT_RAW:
+ case DISK_FORMAT_EMPTY: return "aio";
+ default: return NULL;
+ }
+}
+
+char *libxl__device_disk_string_of_backend(libxl_disk_backend backend)
+{
+ switch (backend) {
+ case DISK_BACKEND_QDISK: return "qdisk";
+ case DISK_BACKEND_TAP: return "tap";
+ case DISK_BACKEND_PHY: return "phy";
default: return NULL;
}
}
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/libxl_dm.c
--- a/tools/libxl/libxl_dm.c Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/libxl_dm.c Tue Feb 15 19:59:37 2011 +0000
@@ -316,10 +316,10 @@ static char ** libxl_build_device_model_
for (i; i < nb; i++) {
if (disks[i].is_cdrom) {
flexarray_append(dm_args, "-cdrom");
- flexarray_append(dm_args, libxl__strdup(gc,
disks[i].physpath));
+ flexarray_append(dm_args, libxl__strdup(gc,
disks[i].pdev_path));
} else {
- flexarray_append(dm_args, libxl__sprintf(gc, "-%s",
disks[i].virtpath));
- flexarray_append(dm_args, libxl__strdup(gc,
disks[i].physpath));
+ flexarray_append(dm_args, libxl__sprintf(gc, "-%s",
disks[i].vdev));
+ flexarray_append(dm_args, libxl__strdup(gc,
disks[i].pdev_path));
}
libxl_device_disk_destroy(&disks[i]);
}
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/libxl_internal.h Tue Feb 15 19:59:37 2011 +0000
@@ -178,8 +178,8 @@ _hidden void libxl__userdata_destroyall(
_hidden void libxl__userdata_destroyall(libxl_ctx *ctx, uint32_t domid);
/* from xl_device */
-_hidden char *libxl__device_disk_backend_type_of_phystype(libxl_disk_phystype
phystype);
-_hidden char *libxl__device_disk_string_of_phystype(libxl_disk_phystype
phystype);
+_hidden char *libxl__device_disk_string_of_backend(libxl_disk_backend backend);
+_hidden char *libxl__device_disk_string_of_format(libxl_disk_format format);
_hidden int libxl__device_physdisk_major_minor(const char *physpath, int
*major, int *minor);
_hidden int libxl__device_disk_dev_number(char *virtpath);
@@ -306,7 +306,7 @@ _hidden int libxl__blktap_enabled(libxl_
*/
_hidden const char *libxl__blktap_devpath(libxl__gc *gc,
const char *disk,
- libxl_disk_phystype phystype);
+ libxl_disk_format format);
_hidden char *libxl__uuid2string(libxl__gc *gc, const libxl_uuid uuid);
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/libxl_noblktap2.c
--- a/tools/libxl/libxl_noblktap2.c Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/libxl_noblktap2.c Tue Feb 15 19:59:37 2011 +0000
@@ -23,7 +23,7 @@ int libxl__blktap_enabled(libxl__gc *gc)
const char *libxl__blktap_devpath(libxl__gc *gc,
const char *disk,
- libxl_disk_phystype phystype)
+ libxl_disk_format format)
{
return NULL;
}
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/libxl_utils.c Tue Feb 15 19:59:37 2011 +0000
@@ -275,15 +275,15 @@ out:
return rc;
}
-int libxl_string_to_phystype(libxl_ctx *ctx, char *s, libxl_disk_phystype
*phystype)
+int libxl_string_to_backend(libxl_ctx *ctx, char *s, libxl_disk_backend
*backend)
{
char *p;
int rc = 0;
if (!strcmp(s, "phy")) {
- *phystype = PHYSTYPE_PHY;
+ *backend = DISK_BACKEND_PHY;
} else if (!strcmp(s, "file")) {
- *phystype = PHYSTYPE_FILE;
+ *backend = DISK_BACKEND_TAP;
} else if (!strcmp(s, "tap")) {
p = strchr(s, ':');
if (!p) {
@@ -291,14 +291,12 @@ int libxl_string_to_phystype(libxl_ctx *
goto out;
}
p++;
- if (!strcmp(p, "aio")) {
- *phystype = PHYSTYPE_AIO;
- } else if (!strcmp(p, "vhd")) {
- *phystype = PHYSTYPE_VHD;
+ if (!strcmp(p, "vhd")) {
+ *backend = DISK_BACKEND_TAP;
} else if (!strcmp(p, "qcow")) {
- *phystype = PHYSTYPE_QCOW;
+ *backend = DISK_BACKEND_QDISK;
} else if (!strcmp(p, "qcow2")) {
- *phystype = PHYSTYPE_QCOW2;
+ *backend = DISK_BACKEND_QDISK;
}
}
out:
@@ -553,10 +551,10 @@ int libxl_devid_to_device_disk(libxl_ctx
disk->backend_domid = strtoul(val, NULL, 10);
disk->domid = domid;
be_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/backend",
diskpath));
- disk->physpath = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc,
"%s/params", be_path));
+ disk->pdev_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc,
"%s/params", be_path));
val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type",
be_path));
- libxl_string_to_phystype(ctx, val, &(disk->phystype));
- disk->virtpath = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc,
"%s/dev", be_path));
+ libxl_string_to_backend(ctx, val, &(disk->backend));
+ disk->vdev = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/dev",
be_path));
val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/removable",
be_path));
disk->unpluggable = !strcmp(val, "1");
val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/mode",
be_path));
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/libxl_utils.h
--- a/tools/libxl/libxl_utils.h Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/libxl_utils.h Tue Feb 15 19:59:37 2011 +0000
@@ -29,7 +29,7 @@ int libxl_get_stubdom_id(libxl_ctx *ctx,
int libxl_get_stubdom_id(libxl_ctx *ctx, int guest_domid);
int libxl_is_stubdom(libxl_ctx *ctx, uint32_t domid, uint32_t *target_domid);
int libxl_create_logfile(libxl_ctx *ctx, char *name, char **full_name);
-int libxl_string_to_phystype(libxl_ctx *ctx, char *s, libxl_disk_phystype
*phystype);
+int libxl_string_to_backend(libxl_ctx *ctx, char *s, libxl_disk_backend
*backend);
int libxl_read_file_contents(libxl_ctx *ctx, const char *filename,
void **data_r, int *datalen_r);
diff -r a3c58347ab34 -r ae4799bdd425 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/libxl/xl_cmdimpl.c Tue Feb 15 19:59:37 2011 +0000
@@ -361,9 +361,9 @@ static void printf_info(int domid,
printf("\t\t(tap\n");
printf("\t\t\t(backend_domid %d)\n", d_config->disks[i].backend_domid);
printf("\t\t\t(domid %d)\n", d_config->disks[i].domid);
- printf("\t\t\t(physpath %s)\n", d_config->disks[i].physpath);
- printf("\t\t\t(phystype %d)\n", d_config->disks[i].phystype);
- printf("\t\t\t(virtpath %s)\n", d_config->disks[i].virtpath);
+ printf("\t\t\t(physpath %s)\n", d_config->disks[i].pdev_path);
+ printf("\t\t\t(phystype %d)\n", d_config->disks[i].backend);
+ printf("\t\t\t(virtpath %s)\n", d_config->disks[i].vdev);
printf("\t\t\t(unpluggable %d)\n", d_config->disks[i].unpluggable);
printf("\t\t\t(readwrite %d)\n", d_config->disks[i].readwrite);
printf("\t\t\t(is_cdrom %d)\n", d_config->disks[i].is_cdrom);
@@ -452,6 +452,8 @@ static int parse_disk_config(libxl_devic
char *p, *end, *tok;
memset(disk, 0, sizeof(*disk));
+ disk->format = DISK_FORMAT_RAW;
+ disk->backend = DISK_BACKEND_TAP;
for(tok = p = buf2, end = buf2 + strlen(buf2) + 1; p < end; p++) {
switch(state){
@@ -460,11 +462,14 @@ static int parse_disk_config(libxl_devic
*p = '\0';
if ( !strcmp(tok, "phy") ) {
state = DSTATE_PHYSPATH;
- disk->phystype = PHYSTYPE_PHY;
+ disk->format = DISK_FORMAT_RAW;
+ disk->backend = DISK_BACKEND_PHY;
}else if ( !strcmp(tok, "file") ) {
state = DSTATE_PHYSPATH;
- disk->phystype = PHYSTYPE_FILE;
- }else if ( !strcmp(tok, "tap") ) {
+ disk->format = DISK_FORMAT_RAW;
+ disk->backend = DISK_BACKEND_TAP;
+ }else if ((!strcmp(tok, "tap")) ||
+ (!strcmp(tok, "tap2"))) {
state = DSTATE_TAP;
}else{
fprintf(stderr, "Unknown disk type: %s\n", tok);
@@ -473,23 +478,33 @@ static int parse_disk_config(libxl_devic
tok = p + 1;
} else if (*p == ',') {
state = DSTATE_VIRTPATH;
- disk->phystype = PHYSTYPE_EMPTY;
- disk->physpath = strdup("");
+ disk->format = DISK_FORMAT_EMPTY;
+ disk->backend = DISK_BACKEND_TAP;
+ disk->pdev_path = strdup("");
tok = p + 1;
}
break;
case DSTATE_TAP:
if ( *p == ':' ) {
*p = '\0';
- if ( !strcmp(tok, "aio") ) {
- disk->phystype = PHYSTYPE_AIO;
- }else if ( !strcmp(tok, "vhd") ) {
- disk->phystype = PHYSTYPE_VHD;
+ if (!strcmp(tok, "aio")) {
+ tok = p + 1;
+ break;
+ }
+ if (!strcmp(tok, "vhd")) {
+ disk->format = DISK_FORMAT_VHD;
+ disk->backend = DISK_BACKEND_TAP;
}else if ( !strcmp(tok, "qcow") ) {
- disk->phystype = PHYSTYPE_QCOW;
+ disk->format = DISK_FORMAT_QCOW;
+ disk->backend = DISK_BACKEND_QDISK;
}else if ( !strcmp(tok, "qcow2") ) {
- disk->phystype = PHYSTYPE_QCOW2;
- }else {
+ disk->format = DISK_FORMAT_QCOW2;
+ disk->backend = DISK_BACKEND_QDISK;
+ }else if (!strcmp(tok, "raw")) {
+ disk->format = DISK_FORMAT_RAW;
+ disk->backend = DISK_BACKEND_TAP;
+ }
+ else {
fprintf(stderr, "Unknown tapdisk type: %s\n", tok);
return 0;
}
@@ -503,7 +518,7 @@ static int parse_disk_config(libxl_devic
int ioemu_len;
*p = '\0';
- disk->physpath = (*tok) ? strdup(tok) : NULL;
+ disk->pdev_path = (*tok) ? strdup(tok) : NULL;
tok = p + 1;
/* hack for ioemu disk spec */
@@ -532,7 +547,7 @@ static int parse_disk_config(libxl_devic
if ( tok == p )
goto out;
*p = '\0';
- disk->virtpath = (*tok) ? strdup(tok) : NULL;
+ disk->vdev = (*tok) ? strdup(tok) : NULL;
tok = p + 1;
}
break;
@@ -1838,25 +1853,25 @@ static void cd_insert(const char *dom, c
p = strchr(phys, ':');
if (!p) {
fprintf(stderr, "No type specified, ");
- disk.physpath = phys;
+ disk.pdev_path = phys;
if (!strncmp(phys, "/dev", 4)) {
fprintf(stderr, "assuming phy:\n");
- disk.phystype = PHYSTYPE_PHY;
+ disk.backend = DISK_BACKEND_PHY;
} else {
fprintf(stderr, "assuming file:\n");
- disk.phystype = PHYSTYPE_FILE;
+ disk.backend = DISK_BACKEND_TAP;
}
} else {
*p = '\0';
p++;
- disk.physpath = p;
- libxl_string_to_phystype(&ctx, phys, &disk.phystype);
+ disk.pdev_path = p;
+ libxl_string_to_backend(&ctx, phys, &disk.backend);
}
} else {
- disk.physpath = strdup("");
- disk.phystype = PHYSTYPE_EMPTY;
- }
- disk.virtpath = (char*)virtdev;
+ disk.pdev_path = strdup("");
+ disk.format = DISK_FORMAT_EMPTY;
+ }
+ disk.vdev = (char*)virtdev;
disk.unpluggable = 1;
disk.readwrite = 0;
disk.is_cdrom = 1;
@@ -4398,19 +4413,22 @@ int main_blockattach(int argc, char **ar
tok = strtok(argv[optind+1], ":");
if (!strcmp(tok, "phy")) {
- disk.phystype = PHYSTYPE_PHY;
+ disk.backend = DISK_BACKEND_PHY;
} else if (!strcmp(tok, "file")) {
- disk.phystype = PHYSTYPE_FILE;
+ disk.backend = DISK_BACKEND_TAP;
} else if (!strcmp(tok, "tap")) {
tok = strtok(NULL, ":");
if (!strcmp(tok, "aio")) {
- disk.phystype = PHYSTYPE_AIO;
+ disk.backend = DISK_BACKEND_TAP;
} else if (!strcmp(tok, "vhd")) {
- disk.phystype = PHYSTYPE_VHD;
+ disk.format = DISK_FORMAT_VHD;
+ disk.backend = DISK_BACKEND_TAP;
} else if (!strcmp(tok, "qcow")) {
- disk.phystype = PHYSTYPE_QCOW;
+ disk.format = DISK_FORMAT_QCOW;
+ disk.backend = DISK_BACKEND_QDISK;
} else if (!strcmp(tok, "qcow2")) {
- disk.phystype = PHYSTYPE_QCOW2;
+ disk.format = DISK_FORMAT_QCOW2;
+ disk.backend = DISK_BACKEND_QDISK;
} else {
fprintf(stderr, "Error: `%s' is not a valid disk image.\n", tok);
return 1;
@@ -4419,12 +4437,12 @@ int main_blockattach(int argc, char **ar
fprintf(stderr, "Error: `%s' is not a valid block device.\n", tok);
return 1;
}
- disk.physpath = strtok(NULL, "\0");
- if (!disk.physpath) {
+ disk.pdev_path = strtok(NULL, "\0");
+ if (!disk.pdev_path) {
fprintf(stderr, "Error: missing path to disk image.\n");
return 1;
}
- disk.virtpath = argv[optind+2];
+ disk.vdev = argv[optind+2];
disk.unpluggable = 1;
disk.readwrite = ((argc-optind <= 3) || (argv[optind+3][0] == 'w'));
diff -r a3c58347ab34 -r ae4799bdd425 tools/ocaml/libs/xl/xl_stubs.c
--- a/tools/ocaml/libs/xl/xl_stubs.c Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/ocaml/libs/xl/xl_stubs.c Tue Feb 15 19:59:37 2011 +0000
@@ -192,12 +192,13 @@ static int device_disk_val(caml_gc *gc,
CAMLparam1(v);
c_val->backend_domid = Int_val(Field(v, 0));
- c_val->physpath = dup_String_val(gc, Field(v, 1));
- c_val->phystype = (Int_val(Field(v, 2))) + PHYSTYPE_QCOW;
- c_val->virtpath = dup_String_val(gc, Field(v, 3));
- c_val->unpluggable = Bool_val(Field(v, 4));
- c_val->readwrite = Bool_val(Field(v, 5));
- c_val->is_cdrom = Bool_val(Field(v, 6));
+ c_val->pdev_path = dup_String_val(gc, Field(v, 1));
+ c_val->vdev = dup_String_val(gc, Field(v, 2));
+ c_val->backend = (Int_val(Field(v, 3)));
+ c_val->format = (Int_val(Field(v, 4)));
+ c_val->unpluggable = Bool_val(Field(v, 5));
+ c_val->readwrite = Bool_val(Field(v, 6));
+ c_val->is_cdrom = Bool_val(Field(v, 7));
CAMLreturn(0);
}
diff -r a3c58347ab34 -r ae4799bdd425 tools/python/xen/lowlevel/xl/xl.c
--- a/tools/python/xen/lowlevel/xl/xl.c Tue Feb 15 19:39:05 2011 +0000
+++ b/tools/python/xen/lowlevel/xl/xl.c Tue Feb 15 19:59:37 2011 +0000
@@ -779,12 +779,17 @@ PyMODINIT_FUNC initxl(void)
_INT_CONST_LIBXL(m, CONSBACK_XENCONSOLED);
_INT_CONST_LIBXL(m, CONSBACK_IOEMU);
- _INT_CONST(m, PHYSTYPE_QCOW);
- _INT_CONST(m, PHYSTYPE_QCOW2);
- _INT_CONST(m, PHYSTYPE_VHD);
- _INT_CONST(m, PHYSTYPE_AIO);
- _INT_CONST(m, PHYSTYPE_FILE);
- _INT_CONST(m, PHYSTYPE_PHY);
+ _INT_CONST(m, DISK_FORMAT_UNKNOWN);
+ _INT_CONST(m, DISK_FORMAT_QCOW);
+ _INT_CONST(m, DISK_FORMAT_QCOW2);
+ _INT_CONST(m, DISK_FORMAT_VHD);
+ _INT_CONST(m, DISK_FORMAT_RAW);
+ _INT_CONST(m, DISK_FORMAT_EMPTY);
+
+ _INT_CONST(m, DISK_BACKEND_UNKNOWN);
+ _INT_CONST(m, DISK_BACKEND_PHY);
+ _INT_CONST(m, DISK_BACKEND_TAP);
+ _INT_CONST(m, DISK_BACKEND_QDISK);
_INT_CONST(m, NICTYPE_IOEMU);
_INT_CONST(m, NICTYPE_VIF);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|