In my testing there appeared to be a couple of bugs with the QEMU driver and the interaction with networking - It was auto-starting the daemon even with qemu://system - It was opening the QEMU connection twice due to inverted check, and not opening it at all in the non-QEMU hv case. - Once that is fixed, then it SEGVs when using a Xen connection as uri->scheme is NULL That attached patch rectifies those flaws - Mark can you double check this just in case I've missed some edge case for the networking stuff - I have strace'd virsh when doing virsh list (as root & non-root) virsh --connect test://default list (as root & non-root) virsh --connect xen list (as root & non-root) virsh --connect qemu://session list (as non-root) virsh --connect qemu://system list (as root) virsh --connect qemu://session --readonly list (as non-root) virsh --connect qemu://system --readonly list (as root & non-root) And it appears to now be making the correct connectiosn to the QEMU daemons in all cases Regards, Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|
Index: qemu_internal.c =================================================================== RCS file: /data/cvs/libvirt/src/qemu_internal.c,v retrieving revision 1.15 diff -u -p -r1.15 qemu_internal.c --- qemu_internal.c 8 Mar 2007 08:31:07 -0000 1.15 +++ qemu_internal.c 8 Mar 2007 14:36:12 -0000 @@ -329,6 +329,7 @@ static int qemuProcessRequest(virConnect */ static int qemuOpenConnection(virConnectPtr conn, xmlURIPtr uri, int readonly) { char path[PATH_MAX]; + int autostart = 0; if (uri->server != NULL) { return -1; @@ -358,8 +359,9 @@ static int qemuOpenConnection(virConnect if (snprintf(path, sizeof(path), "@%s/.libvirt/qemud-sock", pw->pw_dir) == sizeof(path)) { return -1; } + autostart = 1; } - return qemuOpenClientUNIX(conn, path, 1); + return qemuOpenClientUNIX(conn, path, autostart); } @@ -845,13 +847,13 @@ static int qemuNetworkOpen(virConnectPtr xmlURIPtr uri = NULL; int ret = -1; - if (conn->qemud_fd == -1) + if (conn->qemud_fd != -1) return 0; if (name) uri = xmlParseURI(name); - if (uri && !strcmp(uri->scheme, "qemu")) + if (uri && uri->scheme && !strcmp(uri->scheme, "qemu")) ret = qemuOpen(conn, name, flags); else if (geteuid() == 0) ret = qemuOpen(conn, "qemu:///system", flags);