[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Regarding Xenstore/Xenbus
Thanks for your reply. I was into trying out xenstore acess using 'libxenstore.so'. I have copied the exact code that I am trying to run (most of this comes from xenstore wiki). The issue is that I am able to run this code from dom0 but when I try to run it from inside a domU after the first printf output i.e. "Msg1" it terminates abnormally saying "unknown error". My guess is that its failing when it calls xs_daemon_open(). I can't figure out what am i missing. Some processes need to be started before i can acess xenstore? Are there any packages that need to be installed in domU to access xenstore? I already have 'xen-devel', 'xen-lib' and 'xen-tools' packages installed inside domU. Please help. ------------------------------------------------------------------------------------------- #include <xs.h> #include <sys/types.h> #include <stdio.h> #include <string.h> void main(int argc, char *argv[]) { struct xs_handle *xs; xs_transaction_t th; char *path; int fd; fd_set set; int er; struct timeval tv = {.tv_sec = 0, .tv_usec = 0 }; char **vec; unsigned int num; char * buf; char ** buf2; unsigned int len; unsigned int domid; printf("Msg1\n"); /* Get a connection to the daemon */ xs = xs_daemon_open(); if ( xs == NULL ) error(); th = xs_transaction_start(xs); buf2 = xs_directory(xs, th,"/local/domain", &len); xs_transaction_end(xs, th, true); int i=0; for(i=0;i<len;i++) { printf("%s\n",buf2[i]); }// I am running dom0 and oly 1 domU so this condition chooses one of them if(len>1) domid = atoi(buf2[1]); if(len==1) domid = atoi(buf2[0]); //sprintf( domid, "%ui", buf2[0] ); printf("Domid: %i\n", domid); /* Get the local domain path */ path = xs_get_domain_path(xs, domid); if ( path == NULL ) error(); printf("Msg3\n"); /* Make space for our node on the path */ path = realloc(path, strlen(path) + strlen("/memory/target") + 1); if ( path == NULL ) error(); strcat(path, "/memory/target"); /* Create a watch on /local/domain/%d/mynode. */ er = xs_watch(xs, path, "mytoken"); if ( er == 0 ) error(); /* We are notified of read availability on the watch via the * file descriptor. */ fd = xs_fileno(xs); while (1) { FD_ZERO(&set); FD_SET(fd, &set); /* Poll for data. */ if ( select(fd + 1, &set, NULL, NULL, &tv) > 0 && FD_ISSET(fd, &set)) { /* I am not sure how num works -- please describe. */ vec = xs_read_watch(xs, &num); if ( !vec ) error(); printf("vec contents: %s|%s\n", vec[XS_WATCH_PATH], vec[XS_WATCH_TOKEN]); /* Prepare a transaction and do a read. */ th = xs_transaction_start(xs); buf = xs_read(xs, th, vec[XS_WATCH_PATH], &len); xs_transaction_end(xs, th, true); if ( buf ) { printf("buflen: %d\nbuf: %s\n", len, buf); } /* Prepare a transaction and do a write. */ /*th = xs_transaction_start(xs);er = xs_write(xs, th, path, "somestuff", strlen("somestuff")); xs_transaction_end(xs, th, true); if ( er == 0 ) error();*/ } } /* Cleanup */ close(fd); xs_daemon_close(xs); free(path); } ------------------------------------------------------------------------------------------------ Original Message ----- From: "Andrew D. Ball" <aball@xxxxxxxxxxxxxxxxxx> To: "Umar Farooq Minhas" <umarfm13@xxxxxxxxxxx> Cc: <xen-devel@xxxxxxxxxxxxxxxxxxx> Sent: Monday, November 20, 2006 5:02 PM Subject: Re: [Xen-devel] Regarding Xenstore/Xenbus I think that's right. Look into using libxenstore inside of the domU -- I think there are functions to do what you want there. Peace. Andrew On Sun, 2006-11-19 at 03:09 -0500, Umar Farooq Minhas wrote:Hi everyone, I have installed Xen on OpenSUSE Linux 10.1 and am just starting to develop with Xen. I want to implement a very straightforward application in domUs which simply gets notified whenever a resource provisioning change (specifically for cpu/memory allocation) is made for that particular domU using for example xm mem-set. From the readings that I have done so far it seems that since xenstore is a shared database between all the domains which keeps track of domain specific values(including values of allocated resources) and that it can be accessed through xenbus from domUs so what I need to do is to write a program that would access xenstore from withing that domU over xenbus. Or more specifically I will have to register a 'watch' in xenstore (just as the balloon driver does) to monitor memory values. I don't know whether this is true or not. I would greatly appreciate if someone could verify this understanding or point me in the right direction. Also if this is true some pointers to start developing with xenbus/xenstore would be very helpful. A prompt response will be appreciated as I am running on a deadline :) Thanks. -Umar _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |