From abb02bd18b668d083e6270c4b7317a937b6d7fda Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Mon, 8 Dec 2008 11:18:47 +0000 Subject: [PATCH] Fix autostart of domains with virtual networks used --- ChangeLog | 6 ++++++ src/qemu_driver.c | 13 ++++++++++++- src/uml_driver.c | 13 ++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c8c77fa51f..acb71de7d1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Dec 8 11:17:53 GMT 2008 Daniel P. Berrange + + * src/qemu_driver.c, src/uml_driver.c: Fix guest autostart + to have a virConnect object available to allow query of + virtual networks + Sun Dec 7 20:44:53 GMT 2008 Daniel P. Berrange * src/test.c: Fix integer long long overflow. Fix NULL defernce diff --git a/src/qemu_driver.c b/src/qemu_driver.c index 769085bbfd..31c4886622 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -146,13 +146,22 @@ static struct qemud_driver *qemu_driver = NULL; static void qemudAutostartConfigs(struct qemud_driver *driver) { unsigned int i; + /* XXX: Figure out a better way todo this. The domain + * startup code needs a connection handle in order + * to lookup the bridge associated with a virtual + * network + */ + virConnectPtr conn = virConnectOpen(getuid() ? + "qemu:///session" : + "qemu:///system"); + /* Ignoring NULL conn which is mostly harmless here */ for (i = 0 ; i < driver->domains.count ; i++) { virDomainObjPtr vm = driver->domains.objs[i]; virDomainObjLock(vm); if (vm->autostart && !virDomainIsActive(vm)) { - int ret = qemudStartVMDaemon(NULL, driver, vm, NULL); + int ret = qemudStartVMDaemon(conn, driver, vm, NULL); if (ret < 0) { virErrorPtr err = virGetLastError(); qemudLog(QEMUD_ERR, _("Failed to autostart VM '%s': %s\n"), @@ -169,6 +178,8 @@ qemudAutostartConfigs(struct qemud_driver *driver) { } virDomainObjUnlock(vm); } + + virConnectClose(conn); } /** diff --git a/src/uml_driver.c b/src/uml_driver.c index 61f07331b7..9c0d9c4c1c 100644 --- a/src/uml_driver.c +++ b/src/uml_driver.c @@ -126,16 +126,27 @@ static struct uml_driver *uml_driver = NULL; static void umlAutostartConfigs(struct uml_driver *driver) { unsigned int i; + /* XXX: Figure out a better way todo this. The domain + * startup code needs a connection handle in order + * to lookup the bridge associated with a virtual + * network + */ + virConnectPtr conn = virConnectOpen(getuid() ? + "uml:///session" : + "uml:///system"); + /* Ignoring NULL conn which is mostly harmless here */ for (i = 0 ; i < driver->domains.count ; i++) { if (driver->domains.objs[i]->autostart && !virDomainIsActive(driver->domains.objs[i]) && - umlStartVMDaemon(NULL, driver, driver->domains.objs[i]) < 0) { + umlStartVMDaemon(conn, driver, driver->domains.objs[i]) < 0) { virErrorPtr err = virGetLastError(); umlLog(UML_ERR, _("Failed to autostart VM '%s': %s\n"), driver->domains.objs[i]->def->name, err->message); } } + + virConnectClose(conn); }