Here is a simple example of xenstore query functionality. Please
do not apply this patch.
After the xenbus ring initialization we issue a directory query
for the list of virtual block devices attached to the current
guest. The answer is displayed in the console. For simplicity we
only print the first vbd but we leave a clue that there may be
more.
Signed-off-by: Daniel Castro <evil.dani@xxxxxxxxx>
---
src/xen-xs.c | 10 +++++++++-
src/xen-xs.h | 1 +
2 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/src/xen-xs.c b/src/xen-xs.c
index d4b6b26..1173ce2 100644
--- a/src/xen-xs.c
+++ b/src/xen-xs.c
@@ -36,7 +36,7 @@ static struct xenstore_domain_interface *rings; /* Shared
ring with dom0 */
static evtchn_port_t event; /* Event-channel to dom0 */
static char payload[XENSTORE_PAYLOAD_MAX + 1]; /* Unmarshalling area */
-
+void test_xenstore(void);
/*
* Connect our xenbus client to the backend.
* Call once, before any other xenbus actions.
@@ -62,6 +62,7 @@ void xenbus_setup(void)
event = param.value;
dprintf(1,"Xenbus rings @0x%lx, event channel %lu\n",
(unsigned long) rings, (unsigned long) event);
+ test_xenstore();
}
/*
@@ -241,3 +242,10 @@ char * xenstore_directory(char *path, u32 *ans_len){
/* We know xenbus_send() nul-terminates its answer, so just pass it on.
*/
return answer;
}
+
+void test_xenstore(void){
+ char path[11] = {'d','e','v','i','c','e','/','v','b','d','\0'};
+ u32 ans_len;
+ char * res = xenstore_directory(path,&ans_len);
+ dprintf(1,"length: %d strlen: %d vdb-id: %s
.\n",ans_len,strlen(res),res);
+}
diff --git a/src/xen-xs.h b/src/xen-xs.h
index 91e8da0..6957031 100644
--- a/src/xen-xs.h
+++ b/src/xen-xs.h
@@ -4,5 +4,6 @@
void xenbus_setup(void);
char * xenstore_read(char *path);
char * xenstore_directory(char *path, u32 *ans_len);
+void test_xenstore(void);
#endif
--
1.7.4.1
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|