mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
libxl: use IDL to define device front- and back-end kinds
I'd like to use the from_string functionality... Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Ian Jackson <ian.jackson.citrix.com> Committed-by: Ian Jackson <ian.jackson.citrix.com>
This commit is contained in:
1 parent
391419266c
commit
08ae462e06
5 files changed
+38
-57
No files matched your search
+17
-17
@@ -962,7 +962,7 @@ int libxl_device_disk_add(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *dis
|
||||
device.backend_domid = disk->backend_domid;
|
||||
device.devid = devid;
|
||||
device.domid = domid;
|
||||
device.kind = DEVICE_VBD;
|
||||
device.kind = LIBXL__DEVICE_KIND_VBD;
|
||||
|
||||
switch (disk->backend) {
|
||||
case LIBXL_DISK_BACKEND_PHY:
|
||||
@@ -975,7 +975,7 @@ int libxl_device_disk_add(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *dis
|
||||
flexarray_append(back, "params");
|
||||
flexarray_append(back, dev);
|
||||
|
||||
device.backend_kind = DEVICE_VBD;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_VBD;
|
||||
break;
|
||||
case LIBXL_DISK_BACKEND_TAP:
|
||||
dev = libxl__blktap_devpath(&gc, disk->pdev_path, disk->format);
|
||||
@@ -994,7 +994,7 @@ int libxl_device_disk_add(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *dis
|
||||
flexarray_append(back, "params");
|
||||
flexarray_append(back, libxl__sprintf(&gc, "%s:%s",
|
||||
libxl__device_disk_string_of_format(disk->format), disk->pdev_path));
|
||||
device.backend_kind = DEVICE_QDISK;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_QDISK;
|
||||
break;
|
||||
default:
|
||||
LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend type: %d\n", disk->backend);
|
||||
@@ -1057,13 +1057,13 @@ int libxl_device_disk_del(libxl_ctx *ctx, uint32_t domid,
|
||||
|
||||
switch (disk->backend) {
|
||||
case LIBXL_DISK_BACKEND_PHY:
|
||||
device.backend_kind = DEVICE_VBD;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_VBD;
|
||||
break;
|
||||
case LIBXL_DISK_BACKEND_TAP:
|
||||
device.backend_kind = DEVICE_VBD;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_VBD;
|
||||
break;
|
||||
case LIBXL_DISK_BACKEND_QDISK:
|
||||
device.backend_kind = DEVICE_QDISK;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_QDISK;
|
||||
break;
|
||||
default:
|
||||
LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk backend type: %d\n",
|
||||
@@ -1073,7 +1073,7 @@ int libxl_device_disk_del(libxl_ctx *ctx, uint32_t domid,
|
||||
}
|
||||
device.domid = domid;
|
||||
device.devid = devid;
|
||||
device.kind = DEVICE_VBD;
|
||||
device.kind = LIBXL__DEVICE_KIND_VBD;
|
||||
if (wait)
|
||||
rc = libxl__device_del(&gc, &device);
|
||||
else
|
||||
@@ -1221,10 +1221,10 @@ int libxl_device_nic_add(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic)
|
||||
|
||||
device.backend_devid = nic->devid;
|
||||
device.backend_domid = nic->backend_domid;
|
||||
device.backend_kind = DEVICE_VIF;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_VIF;
|
||||
device.devid = nic->devid;
|
||||
device.domid = domid;
|
||||
device.kind = DEVICE_VIF;
|
||||
device.kind = LIBXL__DEVICE_KIND_VIF;
|
||||
|
||||
flexarray_append(back, "frontend-id");
|
||||
flexarray_append(back, libxl__sprintf(&gc, "%d", domid));
|
||||
@@ -1284,10 +1284,10 @@ int libxl_device_nic_del(libxl_ctx *ctx, uint32_t domid,
|
||||
|
||||
device.backend_devid = nic->devid;
|
||||
device.backend_domid = nic->backend_domid;
|
||||
device.backend_kind = DEVICE_VIF;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_VIF;
|
||||
device.devid = nic->devid;
|
||||
device.domid = domid;
|
||||
device.kind = DEVICE_VIF;
|
||||
device.kind = LIBXL__DEVICE_KIND_VIF;
|
||||
|
||||
if (wait)
|
||||
rc = libxl__device_del(&gc, &device);
|
||||
@@ -1486,10 +1486,10 @@ int libxl__device_console_add(libxl__gc *gc, uint32_t domid,
|
||||
|
||||
device.backend_devid = console->devid;
|
||||
device.backend_domid = console->backend_domid;
|
||||
device.backend_kind = DEVICE_CONSOLE;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_CONSOLE;
|
||||
device.devid = console->devid;
|
||||
device.domid = domid;
|
||||
device.kind = DEVICE_CONSOLE;
|
||||
device.kind = LIBXL__DEVICE_KIND_CONSOLE;
|
||||
|
||||
flexarray_append(back, "frontend-id");
|
||||
flexarray_append(back, libxl__sprintf(gc, "%d", domid));
|
||||
@@ -1577,10 +1577,10 @@ int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb)
|
||||
|
||||
device.backend_devid = vkb->devid;
|
||||
device.backend_domid = vkb->backend_domid;
|
||||
device.backend_kind = DEVICE_VKBD;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_VKBD;
|
||||
device.devid = vkb->devid;
|
||||
device.domid = domid;
|
||||
device.kind = DEVICE_VKBD;
|
||||
device.kind = LIBXL__DEVICE_KIND_VKBD;
|
||||
|
||||
flexarray_append(back, "frontend-id");
|
||||
flexarray_append(back, libxl__sprintf(&gc, "%d", domid));
|
||||
@@ -1864,10 +1864,10 @@ int libxl_device_vfb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vfb *vfb)
|
||||
|
||||
device.backend_devid = vfb->devid;
|
||||
device.backend_domid = vfb->backend_domid;
|
||||
device.backend_kind = DEVICE_VFB;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_VFB;
|
||||
device.devid = vfb->devid;
|
||||
device.domid = domid;
|
||||
device.kind = DEVICE_VFB;
|
||||
device.kind = LIBXL__DEVICE_KIND_VFB;
|
||||
|
||||
flexarray_append_pair(back, "frontend-id", libxl__sprintf(&gc, "%d", domid));
|
||||
flexarray_append_pair(back, "online", "1");
|
||||
|
||||
@@ -24,30 +24,20 @@
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
|
||||
#include "libxl.h"
|
||||
#include "libxl_internal.h"
|
||||
|
||||
static const char *string_of_kinds[] = {
|
||||
[DEVICE_VIF] = "vif",
|
||||
[DEVICE_VBD] = "vbd",
|
||||
[DEVICE_QDISK] = "qdisk",
|
||||
[DEVICE_PCI] = "pci",
|
||||
[DEVICE_VFB] = "vfb",
|
||||
[DEVICE_VKBD] = "vkbd",
|
||||
[DEVICE_CONSOLE] = "console",
|
||||
};
|
||||
|
||||
char *libxl__device_frontend_path(libxl__gc *gc, libxl__device *device)
|
||||
{
|
||||
char *dom_path = libxl__xs_get_dompath(gc, device->domid);
|
||||
|
||||
/* Console 0 is a special case */
|
||||
if (device->kind == DEVICE_CONSOLE && device->devid == 0)
|
||||
if (device->kind == LIBXL__DEVICE_KIND_CONSOLE && device->devid == 0)
|
||||
return libxl__sprintf(gc, "%s/console", dom_path);
|
||||
|
||||
return libxl__sprintf(gc, "%s/device/%s/%d", dom_path,
|
||||
string_of_kinds[device->kind], device->devid);
|
||||
libxl__device_kind_to_string(device->kind),
|
||||
device->devid);
|
||||
}
|
||||
|
||||
char *libxl__device_backend_path(libxl__gc *gc, libxl__device *device)
|
||||
@@ -55,7 +45,7 @@ char *libxl__device_backend_path(libxl__gc *gc, libxl__device *device)
|
||||
char *dom_path = libxl__xs_get_dompath(gc, device->backend_domid);
|
||||
|
||||
return libxl__sprintf(gc, "%s/backend/%s/%u/%d", dom_path,
|
||||
string_of_kinds[device->backend_kind],
|
||||
libxl__device_kind_to_string(device->backend_kind),
|
||||
device->domid, device->devid);
|
||||
}
|
||||
|
||||
@@ -67,12 +57,6 @@ int libxl__device_generic_add(libxl__gc *gc, libxl__device *device,
|
||||
xs_transaction_t t;
|
||||
struct xs_permissions frontend_perms[2];
|
||||
struct xs_permissions backend_perms[2];
|
||||
int rc;
|
||||
|
||||
if (!is_valid_device_kind(device->backend_kind) || !is_valid_device_kind(device->kind)) {
|
||||
rc = ERROR_INVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
frontend_path = libxl__device_frontend_path(gc, device);
|
||||
backend_path = libxl__device_backend_path(gc, device);
|
||||
@@ -113,9 +97,8 @@ retry_transaction:
|
||||
else
|
||||
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "xs transaction failed");
|
||||
}
|
||||
rc = 0;
|
||||
out:
|
||||
return rc;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -97,25 +97,13 @@ struct libxl__ctx {
|
||||
libxl_version_info version_info;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
DEVICE_VIF = 1,
|
||||
DEVICE_VBD,
|
||||
DEVICE_QDISK,
|
||||
DEVICE_PCI,
|
||||
DEVICE_VFB,
|
||||
DEVICE_VKBD,
|
||||
DEVICE_CONSOLE,
|
||||
} libxl__device_kinds;
|
||||
|
||||
#define is_valid_device_kind(kind) (((kind) >= DEVICE_VIF) && ((kind) <= DEVICE_CONSOLE))
|
||||
|
||||
typedef struct {
|
||||
uint32_t backend_devid;
|
||||
uint32_t backend_domid;
|
||||
uint32_t devid;
|
||||
uint32_t domid;
|
||||
libxl__device_kinds backend_kind;
|
||||
libxl__device_kinds kind;
|
||||
libxl__device_kind backend_kind;
|
||||
libxl__device_kind kind;
|
||||
} libxl__device;
|
||||
|
||||
#define XC_PCI_BDF "0x%x, 0x%x, 0x%x, 0x%x"
|
||||
|
||||
@@ -244,10 +244,10 @@ int libxl__create_pci_backend(libxl__gc *gc, uint32_t domid,
|
||||
/* add pci device */
|
||||
device.backend_devid = 0;
|
||||
device.backend_domid = 0;
|
||||
device.backend_kind = DEVICE_PCI;
|
||||
device.backend_kind = LIBXL__DEVICE_KIND_PCI;
|
||||
device.devid = 0;
|
||||
device.domid = domid;
|
||||
device.kind = DEVICE_PCI;
|
||||
device.kind = LIBXL__DEVICE_KIND_PCI;
|
||||
|
||||
flexarray_append_pair(back, "frontend-id", libxl__sprintf(gc, "%d", domid));
|
||||
flexarray_append_pair(back, "online", "1");
|
||||
|
||||
@@ -1,9 +1,19 @@
|
||||
namespace("libxl__")
|
||||
|
||||
libxl__qmp_message_type = Enumeration("qmp_message_type", [
|
||||
libxl__qmp_message_type = Enumeration("qmp_message_type", [
|
||||
(1, "QMP"),
|
||||
(2, "return"),
|
||||
(3, "error"),
|
||||
(4, "event"),
|
||||
(5, "invalid"),
|
||||
])
|
||||
|
||||
libxl__device_kind = Enumeration("device_kind", [
|
||||
(1, "VIF"),
|
||||
(2, "VBD"),
|
||||
(3, "QDISK"),
|
||||
(4, "PCI"),
|
||||
(5, "VFB"),
|
||||
(6, "VKBD"),
|
||||
(7, "CONSOLE"),
|
||||
])
|
||||