aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl/libxl.h
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-04-12 17:44:01 +0100
committerKeir Fraser <keir.fraser@citrix.com>2010-04-12 17:44:01 +0100
commit0ac8d8f1693527efd5f3a20ba8662f80434a1597 (patch)
tree1aa678d2835aa0b8ead070fcb96dfa4464f064da /tools/libxl/libxl.h
parent83a2d58bd62883a46439f46b7ad935d837329c78 (diff)
downloadxen-0ac8d8f1693527efd5f3a20ba8662f80434a1597.tar.gz
xen-0ac8d8f1693527efd5f3a20ba8662f80434a1597.tar.bz2
xen-0ac8d8f1693527efd5f3a20ba8662f80434a1597.zip
libxl: Per-domain data storage for the convenience of the library user
We provide a mechanism whereby a user of the libxl library is able to store some information alongside the domain. The information stored is a block of bytes. Its lifetime is that of the domain - ie the userdata is garbage collected alongside the domain if the domain is destroyed. (This is why the feature needs to be in libxl and cannot be implemented in the user itself or in libxlutil.) If a libxl caller does not need to use this feature it can ignore it. The data is tagged with the (self-declared) name of the libxl user, so that different users cannot accidentally trip over each others' userdata. The data is not interpreted at all by libxl. To assist developers and people debugging, there is a registry of the known userdata userids, and the corresponding data format as declared by that libxl user, in libxl.h next to these declarations: int libxl_userdata_store(struct libxl_ctx *ctx, uint32_t domid, const char *userdata_userid, const uint8_t *data, int datalen); int libxl_userdata_retrieve(struct libxl_ctx *ctx, uint32_t domid, const char *userdata_userid, uint8_t **data_r, int *datalen_r); The next patch will introduce the data for the userid "xl". Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Diffstat (limited to 'tools/libxl/libxl.h')
-rw-r--r--tools/libxl/libxl.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 43db1f6072..01b9da4884 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -366,6 +366,37 @@ int libxl_device_pci_init(libxl_device_pci *pcidev, unsigned int domain,
unsigned int bus, unsigned int dev,
unsigned int func, unsigned int vdevfn);
+/*
+ * Functions for allowing users of libxl to store private data
+ * relating to a domain. The data is an opaque sequence of bytes and
+ * is not interpreted or used by libxl.
+ *
+ * Data is indexed by the userdata userid, which is a short printable
+ * ASCII string. The following list is a registry of userdata userids
+ * (the registry may be updated by posting a patch to xen-devel):
+ *
+ * userid Data contents
+ * "xl" domain config file in xl format, Unix line endings
+ *
+ * libxl does not enforce the registration of userdata userids or the
+ * semantics of the data. For specifications of the data formats
+ * see the code or documentation for the libxl caller in question.
+ */
+int libxl_userdata_store(struct libxl_ctx *ctx, uint32_t domid,
+ const char *userdata_userid,
+ const uint8_t *data, int datalen);
+ /* If datalen==0, data is not used and the user data for
+ * that domain and userdata_userid is deleted. */
+int libxl_userdata_retrieve(struct libxl_ctx *ctx, uint32_t domid,
+ const char *userdata_userid,
+ uint8_t **data_r, int *datalen_r);
+ /* On successful return, *data_r is from malloc.
+ * If there is no data for that domain and userdata_userid,
+ * *data_r and *datalen_r will be set to 0.
+ * data_r and datalen_r may be 0.
+ * On error return, *data_r and *datalen_r are undefined.
+ */
+
typedef enum {
POWER_BUTTON,
SLEEP_BUTTON