From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jean Guyader Subject: [PATCH 2/3] qemu: xenstore-domains Date: Thu, 16 Jul 2009 14:27:42 +0100 Message-ID: <20090716132742.GC16500@citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="TakKZr9L6Hm6aLOc" Return-path: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --TakKZr9L6Hm6aLOc Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline Signed-off-by: Jean Guyader --TakKZr9L6Hm6aLOc Content-Type: text/plain; charset="us-ascii" Content-Disposition: attachment; filename="xenstore-domains.patch" diff --git a/qemu-xen.h b/qemu-xen.h index 09d0539..5e30c61 100644 --- a/qemu-xen.h +++ b/qemu-xen.h @@ -96,6 +96,11 @@ int xenstore_unsubscribe_from_hotplug_status(struct xs_handle *handle, typedef void (*xenstore_callback) (const char *path, void *opaque); int xenstore_watch_new_callback(const char *path, xenstore_callback fptr, void *opaque); +char *xenstore_dom_read(int domid, const char *key, unsigned int *len); +int xenstore_dom_write(int domid, const char *key, const char *value); +void xenstore_dom_watch(int domid, const char *key, xenstore_callback ftp, void *opaque); +void xenstore_dom_chmod(int domid, const char *key, const char *perms); + /* `danger' means that this parameter, variable or function refers to * an area of xenstore which is writeable by the guest and thus must * not be trusted by qemu code. For variables containing xenstore diff --git a/xenstore.c b/xenstore.c index df5d940..1ad6dc9 100644 --- a/xenstore.c +++ b/xenstore.c @@ -1462,3 +1462,103 @@ void xenstore_store_serial_port_info(int i, CharDriverState *chr, if (i == 0) /* serial 0 is also called the console */ store_dev_info(devname, domid, chr, "/console"); } + +char *xenstore_dom_read(int domid, const char *key, unsigned int *len) +{ + char *buf = NULL, *path = NULL, *value = NULL; + + if (xsh == NULL) + goto out; + + path = xs_get_domain_path(xsh, domid); + if (path == NULL) { + fprintf(logfile, "xs_get_domain_path(%d): error\n", domid); + goto out; + } + + pasprintf(&buf, "%s/%s", path, key); + value = xs_read(xsh, XBT_NULL, buf, len); + if (value == NULL) { + fprintf(logfile, "xs_read(%s): read error\n", buf); + goto out; + } + + out: + free(path); + free(buf); + return value; +} + +void xenstore_dom_watch(int domid, const char *key, xenstore_callback fptr, void *opaque) +{ + char *buf = NULL, *path = NULL; + int rc = -1; + + if (xsh == NULL) + goto out; + + path = xs_get_domain_path(xsh, domid); + if (path == NULL) { + fprintf(logfile, "xs_get_domain_path: error\n"); + goto out; + } + + pasprintf(&buf, "%s/%s", path, key); + xenstore_watch_new_callback(buf, fptr, opaque); + + out: + free(path); + free(buf); +} + +void xenstore_dom_chmod(int domid, const char *key, const char *perms) +{ + char *buf = NULL, *path = NULL; + int rc = -1; + struct xs_permissions p; + + if (xsh == NULL) + goto out; + + path = xs_get_domain_path(xsh, domid); + if (path == NULL) { + fprintf(logfile, "xs_get_domain_path: error\n"); + goto out; + } + + pasprintf(&buf, "%s/%s", path, key); + + xs_strings_to_perms(&p, 1, perms); + xs_set_permissions(xsh, XBT_NULL, buf, &p, 1); + + out: + free(path); + free(buf); +} + +int xenstore_dom_write(int domid, const char *key, const char *value) +{ + char *buf = NULL, *path = NULL; + int rc = -1; + + if (xsh == NULL) + goto out; + + path = xs_get_domain_path(xsh, domid); + if (path == NULL) { + fprintf(logfile, "xs_get_domain_path: error\n"); + goto out; + } + + pasprintf(&buf, "%s/%s", path, key); + rc = xs_write(xsh, XBT_NULL, buf, value, strlen(value)); + if (rc == 0) { + fprintf(logfile, "xs_write(%s, %s): write error\n", buf, key); + goto out; + } + + out: + free(path); + free(buf); + return rc; +} --TakKZr9L6Hm6aLOc Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --TakKZr9L6Hm6aLOc--