Stefano Stabellini wrote:
> On Thu, 10 Feb 2011, Kamala Narasimhan wrote:
>> Stefano - This includes a fix for empty cdrom case issue you found while
>> testing.
>>
>> Description:
>>
>> This patch refactors xl disk specific interface to separate disk format and
>> backend types, rename some variables, changes code that is impacted by this
>> interface change.
>>
>
> you need to update the ocaml bindings, otherwise the patch will cause
> build problems:
>
> make[7]: Entering directory
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml/libs/xl'
> CC xl_stubs.o
> xl_stubs.c: In function 'device_disk_val':
> xl_stubs.c:195: error: 'libxl_device_disk' has no member named 'physpath'
> xl_stubs.c:196: error: 'libxl_device_disk' has no member named 'phystype'
> xl_stubs.c:196: error: 'PHYSTYPE_QCOW' undeclared (first use in this function)
> xl_stubs.c:196: error: (Each undeclared identifier is reported only once
> xl_stubs.c:196: error: for each function it appears in.)
> xl_stubs.c:197: error: 'libxl_device_disk' has no member named 'virtpath'
> make[7]: *** [xl_stubs.o] Error 1
> make[7]: Leaving directory
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml/libs/xl'
> make[6]: *** [subdir-install-xl] Error 2
> make[6]: Leaving directory
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml/libs'
> make[5]: *** [subdirs-install] Error 2
> make[5]: Leaving directory
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml/libs'
> make[4]: *** [subdir-install-libs] Error 2
> make[4]: Leaving directory
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml'
> make[3]: *** [subdirs-install] Error 2
> make[3]: Leaving directory
> `/local/scratch/sstabellini/xen-unstable.hg/tools/ocaml'
> make[2]: *** [subdir-install-ocaml] Error 2
> make[2]: Leaving directory `/local/scratch/sstabellini/xen-unstable.hg/tools'
> make[1]: *** [subdirs-install] Error 2
> make[1]: Leaving directory `/local/scratch/sstabellini/xen-unstable.hg/tools'
> make: *** [install-tools] Error 2
>
>
> apart from this it looks OK to me.
Stefano - Here is a revised patch that fixes the ocaml bindings build issues.
While I confirmed that the build now works, I wouldn't even know where to start
when it comes to testing it!
Signed-off-by: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxxx>
Kamala
diff -r 1967c7c290eb tools/libxl/libxl.c
--- a/tools/libxl/libxl.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl.c Fri Feb 11 10:08:40 2011 -0500
@@ -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,24 +863,25 @@ 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 ) {
+ 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);
return ERROR_INVAL;
}
- } else if ( S_ISREG(stat_buf.st_mode) && stat_buf.st_size == 0 ) {
+ } else if (S_ISREG(stat_buf.st_mode) && stat_buf.st_size == 0) {
LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s size is 0!\n",
file_name);
return ERROR_INVAL;
}
@@ -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,33 @@ 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 +969,17 @@ 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));
+ libxl__device_disk_string_of_format(disk->format),
disk->pdev_path));
- if (libxl__blktap_enabled(&gc))
+ if (libxl__blktap_enabled(&gc) &&
+ disk->format != 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 +995,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 +1035,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 +1051,67 @@ 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;
+
+ 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;
+ }
+ LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "attaching PHY disk %s to domain
0",
+ disk->pdev_path);
+ dev = disk->pdev_path;
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;
+ 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 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");
- 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_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 +1707,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 +1750,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 +1784,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 1967c7c290eb tools/libxl/libxl.h
--- a/tools/libxl/libxl.h Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl.h Fri Feb 11 10:08:40 2011 -0500
@@ -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 1967c7c290eb tools/libxl/libxl.idl
--- a/tools/libxl/libxl.idl Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl.idl Fri Feb 11 10:08:40 2011 -0500
@@ -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 1967c7c290eb tools/libxl/libxl_blktap2.c
--- a/tools/libxl/libxl_blktap2.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_blktap2.c Fri Feb 11 10:08:40 2011 -0500
@@ -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 1967c7c290eb tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_device.c Fri Feb 11 10:08:40 2011 -0500
@@ -121,31 +121,24 @@ out:
return rc;
}
-char *libxl__device_disk_string_of_phystype(libxl_disk_phystype phystype)
+char *libxl__device_disk_string_of_format(libxl_disk_format format)
{
- 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;
+ 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_backend_type_of_phystype(libxl_disk_phystype phystype)
+char *libxl__device_disk_string_of_backend(libxl_disk_backend backend)
{
- 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";
+ 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 1967c7c290eb tools/libxl/libxl_dm.c
--- a/tools/libxl/libxl_dm.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_dm.c Fri Feb 11 10:08:40 2011 -0500
@@ -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 1967c7c290eb tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_internal.h Fri Feb 11 10:08:40 2011 -0500
@@ -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 1967c7c290eb tools/libxl/libxl_noblktap2.c
--- a/tools/libxl/libxl_noblktap2.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_noblktap2.c Fri Feb 11 10:08:40 2011 -0500
@@ -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 1967c7c290eb tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_utils.c Fri Feb 11 10:08:40 2011 -0500
@@ -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 1967c7c290eb tools/libxl/libxl_utils.h
--- a/tools/libxl/libxl_utils.h Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/libxl_utils.h Fri Feb 11 10:08:40 2011 -0500
@@ -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 1967c7c290eb tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/libxl/xl_cmdimpl.c Fri Feb 11 10:08:40 2011 -0500
@@ -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);
@@ -456,15 +456,17 @@ static int parse_disk_config(libxl_devic
for(tok = p = buf2, end = buf2 + strlen(buf2) + 1; p < end; p++) {
switch(state){
case DSTATE_INITIAL:
- if ( *p == ':' ) {
+ if (*p == ':') {
*p = '\0';
- if ( !strcmp(tok, "phy") ) {
+ if (!strcmp(tok, "phy")) {
state = DSTATE_PHYSPATH;
- disk->phystype = PHYSTYPE_PHY;
- }else if ( !strcmp(tok, "file") ) {
+ 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")) {
state = DSTATE_TAP;
}else{
fprintf(stderr, "Unknown disk type: %s\n", tok);
@@ -473,22 +475,27 @@ 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;
- }else if ( !strcmp(tok, "qcow") ) {
- disk->phystype = PHYSTYPE_QCOW;
- }else if ( !strcmp(tok, "qcow2") ) {
- disk->phystype = PHYSTYPE_QCOW2;
+ if (!strcmp(tok, "aio")) {
+ disk->format = DISK_FORMAT_RAW;
+ disk->backend = DISK_BACKEND_TAP;
+ }else if (!strcmp(tok, "vhd")) {
+ disk->format = DISK_FORMAT_VHD;
+ disk->backend = DISK_BACKEND_TAP;
+ }else if (!strcmp(tok, "qcow")) {
+ disk->format = DISK_FORMAT_QCOW;
+ disk->backend = DISK_BACKEND_QDISK;
+ }else if (!strcmp(tok, "qcow2")) {
+ disk->format = DISK_FORMAT_QCOW2;
+ disk->backend = DISK_BACKEND_QDISK;
}else {
fprintf(stderr, "Unknown tapdisk type: %s\n", tok);
return 0;
@@ -499,17 +506,17 @@ static int parse_disk_config(libxl_devic
}
break;
case DSTATE_PHYSPATH:
- if ( *p == ',' ) {
+ if (*p == ',') {
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 */
ioemu_len = strlen("ioemu:");
state = DSTATE_VIRTPATH;
- if ( tok + ioemu_len < end &&
+ if (tok + ioemu_len < end &&
!strncmp(tok, "ioemu:", ioemu_len)) {
tok += ioemu_len;
p += ioemu_len;
@@ -517,7 +524,7 @@ static int parse_disk_config(libxl_devic
}
break;
case DSTATE_VIRTPATH:
- if ( *p == ',' || *p == ':' || *p == '\0' ) {
+ if (*p == ',' || *p == ':' || *p == '\0') {
switch(*p) {
case ':':
state = DSTATE_VIRTTYPE;
@@ -529,17 +536,17 @@ static int parse_disk_config(libxl_devic
state = DSTATE_TERMINAL;
break;
}
- if ( tok == p )
+ if (tok == p)
goto out;
*p = '\0';
- disk->virtpath = (*tok) ? strdup(tok) : NULL;
+ disk->vdev = (*tok) ? strdup(tok) : NULL;
tok = p + 1;
}
break;
case DSTATE_VIRTTYPE:
- if ( *p == ',' || *p == '\0' ) {
+ if (*p == ',' || *p == '\0') {
*p = '\0';
- if ( !strcmp(tok, "cdrom") ) {
+ if (!strcmp(tok, "cdrom")) {
disk->is_cdrom = 1;
disk->unpluggable = 1;
}else{
@@ -551,7 +558,7 @@ static int parse_disk_config(libxl_devic
}
break;
case DSTATE_RW:
- if ( *p == '\0' ) {
+ if (*p == '\0') {
disk->readwrite = (tok[0] == 'w');
tok = p + 1;
state = DSTATE_TERMINAL;
@@ -563,7 +570,7 @@ static int parse_disk_config(libxl_devic
}
out:
- if ( tok != p || state != DSTATE_TERMINAL ) {
+ if (tok != p || state != DSTATE_TERMINAL) {
fprintf(stderr, "parse error in disk config near '%s'\n", tok);
return 0;
}
@@ -1838,25 +1845,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);
- }
- } else {
- disk.physpath = strdup("");
- disk.phystype = PHYSTYPE_EMPTY;
- }
- disk.virtpath = (char*)virtdev;
+ disk.pdev_path = p;
+ libxl_string_to_backend(&ctx, phys, &disk.backend);
+ }
+ } else {
+ disk.pdev_path = strdup("");
+ disk.format = DISK_FORMAT_EMPTY;
+ }
+ disk.vdev = (char*)virtdev;
disk.unpluggable = 1;
disk.readwrite = 0;
disk.is_cdrom = 1;
@@ -4383,19 +4390,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;
@@ -4404,12 +4414,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 1967c7c290eb tools/ocaml/libs/xl/xl_stubs.c
--- a/tools/ocaml/libs/xl/xl_stubs.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/ocaml/libs/xl/xl_stubs.c Fri Feb 11 10:08:40 2011 -0500
@@ -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 1967c7c290eb tools/python/xen/lowlevel/xl/xl.c
--- a/tools/python/xen/lowlevel/xl/xl.c Wed Feb 09 12:03:09 2011 +0000
+++ b/tools/python/xen/lowlevel/xl/xl.c Fri Feb 11 10:08:40 2011 -0500
@@ -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-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|