[libvirt] [PATCH 0/8] Refactoring driver registration

This series continues on my previous work to refactor the driver registration process. With this patch series applied, there is no probing of secondary drivers any more. Once the hypervisor driver is chosen, the correct secondary drivers are immediately known. This enables a bunch of hacks to be removed from the ESX, HyperV and VirtualBox drivers. The final remaining problem will be to address the circular dependancy problems wrt to the secrets and storage drivers. Daniel P. Berrange (8): Remove use of secretPrivateData from secret driver Remove use of nwfilterPrivateData from nwfilter driver Remove use of storagePrivateData/networkPrivateData from vbox Remove use of nodeDevicePrivateData from nodeDev driver Remove use of interfacePrivateData from udev driver Remove all secondary driver private data fields don't disable state driver when libvirtd is not built Removing probing of secondary drivers daemon/libvirtd.c | 19 +- src/Makefile.am | 69 +------ src/bhyve/bhyve_driver.c | 14 +- src/check-driverimpls.pl | 3 +- src/conf/domain_nwfilter.c | 5 +- src/conf/domain_nwfilter.h | 6 +- src/datatypes.c | 12 -- src/datatypes.h | 6 - src/driver-hypervisor.h | 3 - src/driver-interface.h | 9 - src/driver-network.h | 11 +- src/driver-nodedev.h | 8 +- src/driver-nwfilter.h | 13 +- src/driver-secret.h | 12 +- src/driver-storage.h | 12 +- src/driver.h | 60 +++--- src/esx/esx_device_monitor.c | 74 -------- src/esx/esx_device_monitor.h | 28 --- src/esx/esx_driver.c | 25 +-- src/esx/esx_interface_driver.c | 37 +--- src/esx/esx_interface_driver.h | 4 +- src/esx/esx_network_driver.c | 37 +--- src/esx/esx_network_driver.h | 4 +- src/esx/esx_nwfilter_driver.c | 74 -------- src/esx/esx_nwfilter_driver.h | 28 --- src/esx/esx_secret_driver.c | 72 ------- src/esx/esx_secret_driver.h | 27 --- src/esx/esx_storage_driver.c | 37 +--- src/esx/esx_storage_driver.h | 4 +- src/hyperv/hyperv_device_monitor.c | 71 ------- src/hyperv/hyperv_device_monitor.h | 28 --- src/hyperv/hyperv_driver.c | 25 +-- src/hyperv/hyperv_interface_driver.c | 71 ------- src/hyperv/hyperv_interface_driver.h | 28 --- src/hyperv/hyperv_network_driver.c | 71 ------- src/hyperv/hyperv_network_driver.h | 28 --- src/hyperv/hyperv_nwfilter_driver.c | 71 ------- src/hyperv/hyperv_nwfilter_driver.h | 28 --- src/hyperv/hyperv_secret_driver.c | 71 ------- src/hyperv/hyperv_secret_driver.h | 28 --- src/hyperv/hyperv_storage_driver.c | 71 ------- src/hyperv/hyperv_storage_driver.h | 28 --- src/interface/interface_backend_netcf.c | 26 +-- src/interface/interface_backend_udev.c | 120 ++++++------ src/libvirt.c | 327 ++++++++++++++------------------ src/libvirt_daemon.syms | 15 -- src/libvirt_internal.h | 2 - src/libvirt_private.syms | 19 +- src/libxl/libxl_driver.c | 10 +- src/lxc/lxc_driver.c | 13 +- src/lxc/lxc_process.c | 8 +- src/lxc/lxc_process.h | 3 +- src/network/bridge_driver.c | 25 +-- src/node_device/node_device_driver.c | 78 +++----- src/node_device/node_device_driver.h | 6 +- src/node_device/node_device_hal.c | 106 ++++------- src/node_device/node_device_udev.c | 78 +++----- src/nwfilter/nwfilter_driver.c | 132 +++++-------- src/openvz/openvz_driver.c | 12 +- src/phyp/phyp_driver.c | 64 +------ src/qemu/qemu_command.c | 8 +- src/qemu/qemu_command.h | 1 - src/qemu/qemu_driver.c | 12 +- src/qemu/qemu_hotplug.c | 12 +- src/qemu/qemu_hotplug.h | 1 - src/qemu/qemu_process.c | 10 +- src/remote/remote_driver.c | 158 ++------------- src/secret/secret_driver.c | 215 +++++++++------------ src/storage/storage_driver.c | 25 +-- src/test/test_driver.c | 156 ++------------- src/uml/uml_conf.c | 9 +- src/uml/uml_driver.c | 10 +- src/vbox/vbox_common.c | 1 - src/vbox/vbox_driver.c | 47 ++--- src/vbox/vbox_network.c | 32 ---- src/vbox/vbox_storage.c | 30 --- src/vmware/vmware_driver.c | 12 +- src/xen/xen_driver.c | 11 +- src/xenapi/xenapi_driver.c | 10 +- tests/qemuxml2argvtest.c | 17 -- tests/virdrivermoduletest.c | 18 +- 81 files changed, 648 insertions(+), 2523 deletions(-) delete mode 100644 src/esx/esx_device_monitor.c delete mode 100644 src/esx/esx_device_monitor.h delete mode 100644 src/esx/esx_nwfilter_driver.c delete mode 100644 src/esx/esx_nwfilter_driver.h delete mode 100644 src/esx/esx_secret_driver.c delete mode 100644 src/esx/esx_secret_driver.h delete mode 100644 src/hyperv/hyperv_device_monitor.c delete mode 100644 src/hyperv/hyperv_device_monitor.h delete mode 100644 src/hyperv/hyperv_interface_driver.c delete mode 100644 src/hyperv/hyperv_interface_driver.h delete mode 100644 src/hyperv/hyperv_network_driver.c delete mode 100644 src/hyperv/hyperv_network_driver.h delete mode 100644 src/hyperv/hyperv_nwfilter_driver.c delete mode 100644 src/hyperv/hyperv_nwfilter_driver.h delete mode 100644 src/hyperv/hyperv_secret_driver.c delete mode 100644 src/hyperv/hyperv_secret_driver.h delete mode 100644 src/hyperv/hyperv_storage_driver.c delete mode 100644 src/hyperv/hyperv_storage_driver.h delete mode 100644 src/libvirt_daemon.syms -- 2.1.0

The secret driver can rely on its global state instead of the connect private data. --- src/secret/secret_driver.c | 198 ++++++++++++++++++++------------------------- 1 file changed, 89 insertions(+), 109 deletions(-) diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c index c7a51bb..26a23ac 100644 --- a/src/secret/secret_driver.c +++ b/src/secret/secret_driver.c @@ -69,16 +69,16 @@ struct _virSecretDriverState { char *directory; }; -static virSecretDriverStatePtr driverState; +static virSecretDriverStatePtr driver; static void -secretDriverLock(virSecretDriverStatePtr driver) +secretDriverLock(void) { virMutexLock(&driver->lock); } static void -secretDriverUnlock(virSecretDriverStatePtr driver) +secretDriverUnlock(void) { virMutexUnlock(&driver->lock); } @@ -115,7 +115,7 @@ secretFree(virSecretEntryPtr secret) } static virSecretEntryPtr -secretFindByUUID(virSecretDriverStatePtr driver, const unsigned char *uuid) +secretFindByUUID(const unsigned char *uuid) { virSecretEntryPtr *pptr, s; @@ -128,7 +128,7 @@ secretFindByUUID(virSecretDriverStatePtr driver, const unsigned char *uuid) } static virSecretEntryPtr -secretFindByUsage(virSecretDriverStatePtr driver, int usageType, const char *usageID) +secretFindByUsage(int usageType, const char *usageID) { virSecretEntryPtr *pptr, s; @@ -217,8 +217,7 @@ replaceFile(const char *filename, void *data, size_t size) } static char * -secretComputePath(virSecretDriverStatePtr driver, - const virSecretEntry *secret, const char *suffix) +secretComputePath(const virSecretEntry *secret, const char *suffix) { char *ret; char uuidstr[VIR_UUID_STRING_BUFLEN]; @@ -230,21 +229,19 @@ secretComputePath(virSecretDriverStatePtr driver, } static char * -secretXMLPath(virSecretDriverStatePtr driver, - const virSecretEntry *secret) +secretXMLPath(const virSecretEntry *secret) { - return secretComputePath(driver, secret, ".xml"); + return secretComputePath(secret, ".xml"); } static char * -secretBase64Path(virSecretDriverStatePtr driver, - const virSecretEntry *secret) +secretBase64Path(const virSecretEntry *secret) { - return secretComputePath(driver, secret, ".base64"); + return secretComputePath(secret, ".base64"); } static int -secretEnsureDirectory(virSecretDriverStatePtr driver) +secretEnsureDirectory(void) { if (mkdir(driver->directory, S_IRWXU) < 0 && errno != EEXIST) { virReportSystemError(errno, _("cannot create '%s'"), @@ -255,16 +252,15 @@ secretEnsureDirectory(virSecretDriverStatePtr driver) } static int -secretSaveDef(virSecretDriverStatePtr driver, - const virSecretEntry *secret) +secretSaveDef(const virSecretEntry *secret) { char *filename = NULL, *xml = NULL; int ret = -1; - if (secretEnsureDirectory(driver) < 0) + if (secretEnsureDirectory() < 0) goto cleanup; - filename = secretXMLPath(driver, secret); + filename = secretXMLPath(secret); if (filename == NULL) goto cleanup; xml = virSecretDefFormat(secret->def); @@ -283,8 +279,7 @@ secretSaveDef(virSecretDriverStatePtr driver, } static int -secretSaveValue(virSecretDriverStatePtr driver, - const virSecretEntry *secret) +secretSaveValue(const virSecretEntry *secret) { char *filename = NULL, *base64 = NULL; int ret = -1; @@ -292,10 +287,10 @@ secretSaveValue(virSecretDriverStatePtr driver, if (secret->value == NULL) return 0; - if (secretEnsureDirectory(driver) < 0) + if (secretEnsureDirectory() < 0) goto cleanup; - filename = secretBase64Path(driver, secret); + filename = secretBase64Path(secret); if (filename == NULL) goto cleanup; base64_encode_alloc((const char *)secret->value, secret->value_size, @@ -317,16 +312,15 @@ secretSaveValue(virSecretDriverStatePtr driver, } static int -secretDeleteSaved(virSecretDriverStatePtr driver, - const virSecretEntry *secret) +secretDeleteSaved(const virSecretEntry *secret) { char *xml_filename = NULL, *value_filename = NULL; int ret = -1; - xml_filename = secretXMLPath(driver, secret); + xml_filename = secretXMLPath(secret); if (xml_filename == NULL) goto cleanup; - value_filename = secretBase64Path(driver, secret); + value_filename = secretBase64Path(secret); if (value_filename == NULL) goto cleanup; @@ -363,15 +357,14 @@ secretLoadValidateUUID(virSecretDefPtr def, } static int -secretLoadValue(virSecretDriverStatePtr driver, - virSecretEntryPtr secret) +secretLoadValue(virSecretEntryPtr secret) { int ret = -1, fd = -1; struct stat st; char *filename = NULL, *contents = NULL, *value = NULL; size_t value_size; - filename = secretBase64Path(driver, secret); + filename = secretBase64Path(secret); if (filename == NULL) goto cleanup; @@ -431,8 +424,7 @@ secretLoadValue(virSecretDriverStatePtr driver, } static virSecretEntryPtr -secretLoad(virSecretDriverStatePtr driver, - const char *xml_basename) +secretLoad(const char *xml_basename) { virSecretDefPtr def = NULL; virSecretEntryPtr secret = NULL, ret = NULL; @@ -454,7 +446,7 @@ secretLoad(virSecretDriverStatePtr driver, secret->def = def; def = NULL; - if (secretLoadValue(driver, secret) < 0) + if (secretLoadValue(secret) < 0) goto cleanup; ret = secret; @@ -468,8 +460,7 @@ secretLoad(virSecretDriverStatePtr driver, } static int -loadSecrets(virSecretDriverStatePtr driver, - virSecretEntryPtr *dest) +loadSecrets(virSecretEntryPtr *dest) { int ret = -1; DIR *dir = NULL; @@ -492,7 +483,7 @@ loadSecrets(virSecretDriverStatePtr driver, if (!virFileHasSuffix(de->d_name, ".xml")) continue; - secret = secretLoad(driver, de->d_name); + secret = secretLoad(de->d_name); if (secret == NULL) { virErrorPtr err = virGetLastError(); @@ -524,36 +515,34 @@ loadSecrets(virSecretDriverStatePtr driver, /* Driver functions */ static virDrvOpenStatus -secretOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, +secretOpen(virConnectPtr conn ATTRIBUTE_UNUSED, + virConnectAuthPtr auth ATTRIBUTE_UNUSED, unsigned int flags) { virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - if (driverState == NULL) + if (driver == NULL) return VIR_DRV_OPEN_DECLINED; - conn->secretPrivateData = driverState; return VIR_DRV_OPEN_SUCCESS; } static int -secretClose(virConnectPtr conn) +secretClose(virConnectPtr conn ATTRIBUTE_UNUSED) { - conn->secretPrivateData = NULL; return 0; } static int secretConnectNumOfSecrets(virConnectPtr conn) { - virSecretDriverStatePtr driver = conn->secretPrivateData; size_t i; virSecretEntryPtr secret; if (virConnectNumOfSecretsEnsureACL(conn) < 0) return -1; - secretDriverLock(driver); + secretDriverLock(); i = 0; for (secret = driver->secrets; secret != NULL; secret = secret->next) { @@ -562,14 +551,13 @@ secretConnectNumOfSecrets(virConnectPtr conn) i++; } - secretDriverUnlock(driver); + secretDriverUnlock(); return i; } static int secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids) { - virSecretDriverStatePtr driver = conn->secretPrivateData; size_t i; virSecretEntryPtr secret; @@ -578,7 +566,7 @@ secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids) if (virConnectListSecretsEnsureACL(conn) < 0) return -1; - secretDriverLock(driver); + secretDriverLock(); i = 0; for (secret = driver->secrets; secret != NULL; secret = secret->next) { @@ -595,11 +583,11 @@ secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids) i++; } - secretDriverUnlock(driver); + secretDriverUnlock(); return i; cleanup: - secretDriverUnlock(driver); + secretDriverUnlock(); for (i = 0; i < maxuuids; i++) VIR_FREE(uuids[i]); @@ -634,7 +622,6 @@ secretConnectListAllSecrets(virConnectPtr conn, virSecretPtr **secrets, unsigned int flags) { - virSecretDriverStatePtr driver = conn->secretPrivateData; virSecretPtr *tmp_secrets = NULL; int nsecrets = 0; int ret_nsecrets = 0; @@ -648,7 +635,7 @@ secretConnectListAllSecrets(virConnectPtr conn, if (virConnectListAllSecretsEnsureACL(conn) < 0) return -1; - secretDriverLock(driver); + secretDriverLock(); for (entry = driver->secrets; entry != NULL; entry = entry->next) nsecrets++; @@ -698,7 +685,7 @@ secretConnectListAllSecrets(virConnectPtr conn, ret = ret_nsecrets; cleanup: - secretDriverUnlock(driver); + secretDriverUnlock(); if (tmp_secrets) { for (i = 0; i < ret_nsecrets; i ++) virObjectUnref(tmp_secrets[i]); @@ -713,13 +700,12 @@ secretConnectListAllSecrets(virConnectPtr conn, static virSecretPtr secretLookupByUUID(virConnectPtr conn, const unsigned char *uuid) { - virSecretDriverStatePtr driver = conn->secretPrivateData; virSecretPtr ret = NULL; virSecretEntryPtr secret; - secretDriverLock(driver); + secretDriverLock(); - secret = secretFindByUUID(driver, uuid); + secret = secretFindByUUID(uuid); if (secret == NULL) { char uuidstr[VIR_UUID_STRING_BUFLEN]; virUUIDFormat(uuid, uuidstr); @@ -737,7 +723,7 @@ secretLookupByUUID(virConnectPtr conn, const unsigned char *uuid) secretUsageIDForDef(secret->def)); cleanup: - secretDriverUnlock(driver); + secretDriverUnlock(); return ret; } @@ -745,13 +731,12 @@ secretLookupByUUID(virConnectPtr conn, const unsigned char *uuid) static virSecretPtr secretLookupByUsage(virConnectPtr conn, int usageType, const char *usageID) { - virSecretDriverStatePtr driver = conn->secretPrivateData; virSecretPtr ret = NULL; virSecretEntryPtr secret; - secretDriverLock(driver); + secretDriverLock(); - secret = secretFindByUsage(driver, usageType, usageID); + secret = secretFindByUsage(usageType, usageID); if (secret == NULL) { virReportError(VIR_ERR_NO_SECRET, _("no secret with matching usage '%s'"), usageID); @@ -767,7 +752,7 @@ secretLookupByUsage(virConnectPtr conn, int usageType, const char *usageID) secretUsageIDForDef(secret->def)); cleanup: - secretDriverUnlock(driver); + secretDriverUnlock(); return ret; } @@ -776,7 +761,6 @@ static virSecretPtr secretDefineXML(virConnectPtr conn, const char *xml, unsigned int flags) { - virSecretDriverStatePtr driver = conn->secretPrivateData; virSecretPtr ret = NULL; virSecretEntryPtr secret; virSecretDefPtr backup = NULL; @@ -788,16 +772,16 @@ secretDefineXML(virConnectPtr conn, const char *xml, if (new_attrs == NULL) return NULL; - secretDriverLock(driver); + secretDriverLock(); if (virSecretDefineXMLEnsureACL(conn, new_attrs) < 0) goto cleanup; - secret = secretFindByUUID(driver, new_attrs->uuid); + secret = secretFindByUUID(new_attrs->uuid); if (secret == NULL) { /* No existing secret with same UUID, try look for matching usage instead */ const char *usageID = secretUsageIDForDef(new_attrs); - secret = secretFindByUsage(driver, new_attrs->usage_type, usageID); + secret = secretFindByUsage(new_attrs->usage_type, usageID); if (secret) { char uuidstr[VIR_UUID_STRING_BUFLEN]; virUUIDFormat(secret->def->uuid, uuidstr); @@ -838,15 +822,15 @@ secretDefineXML(virConnectPtr conn, const char *xml, if (!new_attrs->ephemeral) { if (backup && backup->ephemeral) { - if (secretSaveValue(driver, secret) < 0) + if (secretSaveValue(secret) < 0) goto restore_backup; } - if (secretSaveDef(driver, secret) < 0) { + if (secretSaveDef(secret) < 0) { if (backup && backup->ephemeral) { char *filename; /* Undo the secretSaveValue() above; ignore errors */ - filename = secretBase64Path(driver, secret); + filename = secretBase64Path(secret); if (filename != NULL) (void)unlink(filename); VIR_FREE(filename); @@ -854,7 +838,7 @@ secretDefineXML(virConnectPtr conn, const char *xml, goto restore_backup; } } else if (backup && !backup->ephemeral) { - if (secretDeleteSaved(driver, secret) < 0) + if (secretDeleteSaved(secret) < 0) goto restore_backup; } /* Saved successfully - drop old values */ @@ -873,7 +857,7 @@ secretDefineXML(virConnectPtr conn, const char *xml, secret->def = backup; } else { /* "secret" was added to the head of the list above */ - if (listUnlink(&driverState->secrets) != secret) + if (listUnlink(&driver->secrets) != secret) virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("list of secrets is inconsistent")); else @@ -882,7 +866,7 @@ secretDefineXML(virConnectPtr conn, const char *xml, cleanup: virSecretDefFree(new_attrs); - secretDriverUnlock(driver); + secretDriverUnlock(); return ret; } @@ -890,15 +874,14 @@ secretDefineXML(virConnectPtr conn, const char *xml, static char * secretGetXMLDesc(virSecretPtr obj, unsigned int flags) { - virSecretDriverStatePtr driver = obj->conn->secretPrivateData; char *ret = NULL; virSecretEntryPtr secret; virCheckFlags(0, NULL); - secretDriverLock(driver); + secretDriverLock(); - secret = secretFindByUUID(driver, obj->uuid); + secret = secretFindByUUID(obj->uuid); if (secret == NULL) { char uuidstr[VIR_UUID_STRING_BUFLEN]; virUUIDFormat(obj->uuid, uuidstr); @@ -913,7 +896,7 @@ secretGetXMLDesc(virSecretPtr obj, unsigned int flags) ret = virSecretDefFormat(secret->def); cleanup: - secretDriverUnlock(driver); + secretDriverUnlock(); return ret; } @@ -922,7 +905,6 @@ static int secretSetValue(virSecretPtr obj, const unsigned char *value, size_t value_size, unsigned int flags) { - virSecretDriverStatePtr driver = obj->conn->secretPrivateData; int ret = -1; unsigned char *old_value, *new_value; size_t old_value_size; @@ -933,9 +915,9 @@ secretSetValue(virSecretPtr obj, const unsigned char *value, if (VIR_ALLOC_N(new_value, value_size) < 0) return -1; - secretDriverLock(driver); + secretDriverLock(); - secret = secretFindByUUID(driver, obj->uuid); + secret = secretFindByUUID(obj->uuid); if (secret == NULL) { char uuidstr[VIR_UUID_STRING_BUFLEN]; virUUIDFormat(obj->uuid, uuidstr); @@ -954,7 +936,7 @@ secretSetValue(virSecretPtr obj, const unsigned char *value, secret->value = new_value; secret->value_size = value_size; if (!secret->def->ephemeral) { - if (secretSaveValue(driver, secret) < 0) + if (secretSaveValue(secret) < 0) goto restore_backup; } /* Saved successfully - drop old value */ @@ -974,7 +956,7 @@ secretSetValue(virSecretPtr obj, const unsigned char *value, memset(new_value, 0, value_size); cleanup: - secretDriverUnlock(driver); + secretDriverUnlock(); VIR_FREE(new_value); @@ -985,15 +967,14 @@ static unsigned char * secretGetValue(virSecretPtr obj, size_t *value_size, unsigned int flags, unsigned int internalFlags) { - virSecretDriverStatePtr driver = obj->conn->secretPrivateData; unsigned char *ret = NULL; virSecretEntryPtr secret; virCheckFlags(0, NULL); - secretDriverLock(driver); + secretDriverLock(); - secret = secretFindByUUID(driver, obj->uuid); + secret = secretFindByUUID(obj->uuid); if (secret == NULL) { char uuidstr[VIR_UUID_STRING_BUFLEN]; virUUIDFormat(obj->uuid, uuidstr); @@ -1026,7 +1007,7 @@ secretGetValue(virSecretPtr obj, size_t *value_size, unsigned int flags, *value_size = secret->value_size; cleanup: - secretDriverUnlock(driver); + secretDriverUnlock(); return ret; } @@ -1034,13 +1015,12 @@ secretGetValue(virSecretPtr obj, size_t *value_size, unsigned int flags, static int secretUndefine(virSecretPtr obj) { - virSecretDriverStatePtr driver = obj->conn->secretPrivateData; int ret = -1; virSecretEntryPtr secret; - secretDriverLock(driver); + secretDriverLock(); - secret = secretFindByUUID(driver, obj->uuid); + secret = secretFindByUUID(obj->uuid); if (secret == NULL) { char uuidstr[VIR_UUID_STRING_BUFLEN]; virUUIDFormat(obj->uuid, uuidstr); @@ -1053,7 +1033,7 @@ secretUndefine(virSecretPtr obj) goto cleanup; if (!secret->def->ephemeral && - secretDeleteSaved(driver, secret) < 0) + secretDeleteSaved(secret) < 0) goto cleanup; if (driver->secrets == secret) { @@ -1070,7 +1050,7 @@ secretUndefine(virSecretPtr obj) ret = 0; cleanup: - secretDriverUnlock(driver); + secretDriverUnlock(); return ret; } @@ -1078,22 +1058,22 @@ secretUndefine(virSecretPtr obj) static int secretStateCleanup(void) { - if (driverState == NULL) + if (driver == NULL) return -1; - secretDriverLock(driverState); + secretDriverLock(); - while (driverState->secrets != NULL) { + while (driver->secrets != NULL) { virSecretEntryPtr s; - s = listUnlink(&driverState->secrets); + s = listUnlink(&driver->secrets); secretFree(s); } - VIR_FREE(driverState->directory); + VIR_FREE(driver->directory); - secretDriverUnlock(driverState); - virMutexDestroy(&driverState->lock); - VIR_FREE(driverState); + secretDriverUnlock(); + virMutexDestroy(&driver->lock); + VIR_FREE(driver); return 0; } @@ -1105,14 +1085,14 @@ secretStateInitialize(bool privileged, { char *base = NULL; - if (VIR_ALLOC(driverState) < 0) + if (VIR_ALLOC(driver) < 0) return -1; - if (virMutexInit(&driverState->lock) < 0) { - VIR_FREE(driverState); + if (virMutexInit(&driver->lock) < 0) { + VIR_FREE(driver); return -1; } - secretDriverLock(driverState); + secretDriverLock(); if (privileged) { if (VIR_STRDUP(base, SYSCONFDIR "/libvirt") < 0) @@ -1122,19 +1102,19 @@ secretStateInitialize(bool privileged, if (!base) goto error; } - if (virAsprintf(&driverState->directory, "%s/secrets", base) < 0) + if (virAsprintf(&driver->directory, "%s/secrets", base) < 0) goto error; VIR_FREE(base); - if (loadSecrets(driverState, &driverState->secrets) < 0) + if (loadSecrets(&driver->secrets) < 0) goto error; - secretDriverUnlock(driverState); + secretDriverUnlock(); return 0; error: VIR_FREE(base); - secretDriverUnlock(driverState); + secretDriverUnlock(); secretStateCleanup(); return -1; } @@ -1144,29 +1124,29 @@ secretStateReload(void) { virSecretEntryPtr new_secrets = NULL; - if (!driverState) + if (!driver) return -1; - secretDriverLock(driverState); + secretDriverLock(); - if (loadSecrets(driverState, &new_secrets) < 0) + if (loadSecrets(&new_secrets) < 0) goto end; /* Keep ephemeral secrets from current state. Discard non-ephemeral secrets that were removed by the secrets directory. */ - while (driverState->secrets != NULL) { + while (driver->secrets != NULL) { virSecretEntryPtr s; - s = listUnlink(&driverState->secrets); + s = listUnlink(&driver->secrets); if (s->def->ephemeral) listInsert(&new_secrets, s); else secretFree(s); } - driverState->secrets = new_secrets; + driver->secrets = new_secrets; end: - secretDriverUnlock(driverState); + secretDriverUnlock(); return 0; } -- 2.1.0

The nwfilter driver can rely on its global state instead of the connect private data. --- src/conf/domain_nwfilter.c | 5 +- src/conf/domain_nwfilter.h | 6 +-- src/lxc/lxc_driver.c | 3 +- src/lxc/lxc_process.c | 8 ++- src/lxc/lxc_process.h | 3 +- src/nwfilter/nwfilter_driver.c | 113 +++++++++++++++++++---------------------- src/qemu/qemu_command.c | 8 ++- src/qemu/qemu_command.h | 1 - src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_hotplug.c | 12 ++--- src/qemu/qemu_hotplug.h | 1 - src/qemu/qemu_process.c | 10 ++-- src/uml/uml_conf.c | 9 ++-- 13 files changed, 76 insertions(+), 105 deletions(-) diff --git a/src/conf/domain_nwfilter.c b/src/conf/domain_nwfilter.c index 6330f67..176e7e6 100644 --- a/src/conf/domain_nwfilter.c +++ b/src/conf/domain_nwfilter.c @@ -38,12 +38,11 @@ virDomainConfNWFilterRegister(virDomainConfNWFilterDriverPtr driver) } int -virDomainConfNWFilterInstantiate(virConnectPtr conn, - const unsigned char *vmuuid, +virDomainConfNWFilterInstantiate(const unsigned char *vmuuid, virDomainNetDefPtr net) { if (nwfilterDriver != NULL) - return nwfilterDriver->instantiateFilter(conn, vmuuid, net); + return nwfilterDriver->instantiateFilter(vmuuid, net); /* driver module not available -- don't indicate failure */ return 0; } diff --git a/src/conf/domain_nwfilter.h b/src/conf/domain_nwfilter.h index 268a03b..af047c7 100644 --- a/src/conf/domain_nwfilter.h +++ b/src/conf/domain_nwfilter.h @@ -23,8 +23,7 @@ #ifndef DOMAIN_NWFILTER_H # define DOMAIN_NWFILTER_H -typedef int (*virDomainConfInstantiateNWFilter)(virConnectPtr conn, - const unsigned char *vmuuid, +typedef int (*virDomainConfInstantiateNWFilter)(const unsigned char *vmuuid, virDomainNetDefPtr net); typedef void (*virDomainConfTeardownNWFilter)(virDomainNetDefPtr net); @@ -36,8 +35,7 @@ typedef virDomainConfNWFilterDriver *virDomainConfNWFilterDriverPtr; void virDomainConfNWFilterRegister(virDomainConfNWFilterDriverPtr driver); -int virDomainConfNWFilterInstantiate(virConnectPtr conn, - const unsigned char *vmuuid, +int virDomainConfNWFilterInstantiate(const unsigned char *vmuuid, virDomainNetDefPtr net); void virDomainConfNWFilterTeardown(virDomainNetDefPtr net); void virDomainConfVMNWFilterTeardown(virDomainObjPtr vm); diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 1b1ecd0..a0bc971 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -4189,8 +4189,7 @@ lxcDomainAttachDeviceNetLive(virConnectPtr conn, _("No bridge name specified")); goto cleanup; } - if (!(veth = virLXCProcessSetupInterfaceBridged(conn, - vm->def, + if (!(veth = virLXCProcessSetupInterfaceBridged(vm->def, net, brname))) goto cleanup; diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index 89e9249..63040b6 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -239,8 +239,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver, } -char *virLXCProcessSetupInterfaceBridged(virConnectPtr conn, - virDomainDefPtr vm, +char *virLXCProcessSetupInterfaceBridged(virDomainDefPtr vm, virDomainNetDefPtr net, const char *brname) { @@ -274,7 +273,7 @@ char *virLXCProcessSetupInterfaceBridged(virConnectPtr conn, goto cleanup; if (net->filter && - virDomainConfNWFilterInstantiate(conn, vm->uuid, net) < 0) + virDomainConfNWFilterInstantiate(vm->uuid, net) < 0) goto cleanup; ret = containerVeth; @@ -391,8 +390,7 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn, _("No bridge name specified")); goto cleanup; } - if (!(veth = virLXCProcessSetupInterfaceBridged(conn, - def, + if (!(veth = virLXCProcessSetupInterfaceBridged(def, net, brname))) goto cleanup; diff --git a/src/lxc/lxc_process.h b/src/lxc/lxc_process.h index 9c2d00e..b6c8083 100644 --- a/src/lxc/lxc_process.h +++ b/src/lxc/lxc_process.h @@ -47,8 +47,7 @@ void virLXCProcessAutostartAll(virLXCDriverPtr driver); int virLXCProcessReconnectAll(virLXCDriverPtr driver, virDomainObjListPtr doms); -char *virLXCProcessSetupInterfaceBridged(virConnectPtr conn, - virDomainDefPtr vm, +char *virLXCProcessSetupInterfaceBridged(virDomainDefPtr vm, virDomainNetDefPtr net, const char *brname); char *virLXCProcessSetupInterfaceDirect(virConnectPtr conn, diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 0a04d5d..225ae14 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -64,17 +64,17 @@ VIR_LOG_INIT("nwfilter.nwfilter_driver"); ",member='Reloaded'" -static virNWFilterDriverStatePtr driverState; +static virNWFilterDriverStatePtr driver; static int nwfilterStateCleanup(void); static int nwfilterStateReload(void); -static void nwfilterDriverLock(virNWFilterDriverStatePtr driver) +static void nwfilterDriverLock(void) { virMutexLock(&driver->lock); } -static void nwfilterDriverUnlock(virNWFilterDriverStatePtr driver) +static void nwfilterDriverUnlock(void) { virMutexUnlock(&driver->lock); } @@ -183,17 +183,17 @@ nwfilterStateInitialize(bool privileged, !(sysbus = virDBusGetSystemBus())) return -1; - if (VIR_ALLOC(driverState) < 0) + if (VIR_ALLOC(driver) < 0) return -1; - if (virMutexInit(&driverState->lock) < 0) + if (virMutexInit(&driver->lock) < 0) goto err_free_driverstate; /* remember that we are going to use firewalld */ - driverState->watchingFirewallD = (sysbus != NULL); - driverState->privileged = privileged; + driver->watchingFirewallD = (sysbus != NULL); + driver->privileged = privileged; - nwfilterDriverLock(driverState); + nwfilterDriverLock(); if (virNWFilterIPAddrMapInit() < 0) goto err_free_driverstate; @@ -206,7 +206,7 @@ nwfilterStateInitialize(bool privileged, goto err_dhcpsnoop_shutdown; if (virNWFilterConfLayerInit(virNWFilterDomainFWUpdateCB, - driverState) < 0) + driver) < 0) goto err_techdrivers_shutdown; /* @@ -231,23 +231,23 @@ nwfilterStateInitialize(bool privileged, if (VIR_STRDUP(base, SYSCONFDIR "/libvirt") < 0) goto error; - if (virAsprintf(&driverState->configDir, + if (virAsprintf(&driver->configDir, "%s/nwfilter", base) == -1) goto error; VIR_FREE(base); - if (virNWFilterLoadAllConfigs(&driverState->nwfilters, - driverState->configDir) < 0) + if (virNWFilterLoadAllConfigs(&driver->nwfilters, + driver->configDir) < 0) goto error; - nwfilterDriverUnlock(driverState); + nwfilterDriverUnlock(); return 0; error: VIR_FREE(base); - nwfilterDriverUnlock(driverState); + nwfilterDriverUnlock(); nwfilterStateCleanup(); return -1; @@ -262,7 +262,7 @@ nwfilterStateInitialize(bool privileged, virNWFilterIPAddrMapShutdown(); err_free_driverstate: - VIR_FREE(driverState); + VIR_FREE(driver); return -1; } @@ -276,26 +276,26 @@ nwfilterStateInitialize(bool privileged, static int nwfilterStateReload(void) { - if (!driverState) + if (!driver) return -1; - if (!driverState->privileged) + if (!driver->privileged) return 0; virNWFilterDHCPSnoopEnd(NULL); /* shut down all threads -- they will be restarted if necessary */ virNWFilterLearnThreadsTerminate(true); - nwfilterDriverLock(driverState); + nwfilterDriverLock(); virNWFilterWriteLockFilterUpdates(); virNWFilterCallbackDriversLock(); - virNWFilterLoadAllConfigs(&driverState->nwfilters, - driverState->configDir); + virNWFilterLoadAllConfigs(&driver->nwfilters, + driver->configDir); virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); - nwfilterDriverUnlock(driverState); + nwfilterDriverUnlock(); virNWFilterInstFiltersOnAllVMs(); @@ -313,10 +313,10 @@ nwfilterStateReload(void) bool virNWFilterDriverIsWatchingFirewallD(void) { - if (!driverState) + if (!driver) return false; - return driverState->watchingFirewallD; + return driver->watchingFirewallD; } /** @@ -327,29 +327,29 @@ virNWFilterDriverIsWatchingFirewallD(void) static int nwfilterStateCleanup(void) { - if (!driverState) + if (!driver) return -1; - if (driverState->privileged) { + if (driver->privileged) { virNWFilterConfLayerShutdown(); virNWFilterDHCPSnoopShutdown(); virNWFilterLearnShutdown(); virNWFilterIPAddrMapShutdown(); virNWFilterTechDriversShutdown(); - nwfilterDriverLock(driverState); + nwfilterDriverLock(); nwfilterDriverRemoveDBusMatches(); /* free inactive nwfilters */ - virNWFilterObjListFree(&driverState->nwfilters); + virNWFilterObjListFree(&driver->nwfilters); - VIR_FREE(driverState->configDir); - nwfilterDriverUnlock(driverState); + VIR_FREE(driver->configDir); + nwfilterDriverUnlock(); } - virMutexDestroy(&driverState->lock); - VIR_FREE(driverState); + virMutexDestroy(&driver->lock); + VIR_FREE(driver); return 0; } @@ -359,13 +359,12 @@ static virNWFilterPtr nwfilterLookupByUUID(virConnectPtr conn, const unsigned char *uuid) { - virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData; virNWFilterObjPtr nwfilter; virNWFilterPtr ret = NULL; - nwfilterDriverLock(driver); + nwfilterDriverLock(); nwfilter = virNWFilterObjFindByUUID(&driver->nwfilters, uuid); - nwfilterDriverUnlock(driver); + nwfilterDriverUnlock(); if (!nwfilter) { virReportError(VIR_ERR_NO_NWFILTER, @@ -389,13 +388,12 @@ static virNWFilterPtr nwfilterLookupByName(virConnectPtr conn, const char *name) { - virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData; virNWFilterObjPtr nwfilter; virNWFilterPtr ret = NULL; - nwfilterDriverLock(driver); + nwfilterDriverLock(); nwfilter = virNWFilterObjFindByName(&driver->nwfilters, name); - nwfilterDriverUnlock(driver); + nwfilterDriverUnlock(); if (!nwfilter) { virReportError(VIR_ERR_NO_NWFILTER, @@ -416,24 +414,22 @@ nwfilterLookupByName(virConnectPtr conn, static virDrvOpenStatus -nwfilterOpen(virConnectPtr conn, +nwfilterOpen(virConnectPtr conn ATTRIBUTE_UNUSED, virConnectAuthPtr auth ATTRIBUTE_UNUSED, unsigned int flags) { virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - if (!driverState) + if (!driver) return VIR_DRV_OPEN_DECLINED; - conn->nwfilterPrivateData = driverState; return VIR_DRV_OPEN_SUCCESS; } static int -nwfilterClose(virConnectPtr conn) +nwfilterClose(virConnectPtr conn ATTRIBUTE_UNUSED) { - conn->nwfilterPrivateData = NULL; return 0; } @@ -441,7 +437,6 @@ nwfilterClose(virConnectPtr conn) static int nwfilterConnectNumOfNWFilters(virConnectPtr conn) { - virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData; size_t i; int n; @@ -466,14 +461,13 @@ nwfilterConnectListNWFilters(virConnectPtr conn, char **const names, int nnames) { - virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData; int got = 0; size_t i; if (virConnectListNWFiltersEnsureACL(conn) < 0) return -1; - nwfilterDriverLock(driver); + nwfilterDriverLock(); for (i = 0; i < driver->nwfilters.count && got < nnames; i++) { virNWFilterObjPtr obj = driver->nwfilters.objs[i]; virNWFilterObjLock(obj); @@ -486,11 +480,11 @@ nwfilterConnectListNWFilters(virConnectPtr conn, } virNWFilterObjUnlock(obj); } - nwfilterDriverUnlock(driver); + nwfilterDriverUnlock(); return got; cleanup: - nwfilterDriverUnlock(driver); + nwfilterDriverUnlock(); for (i = 0; i < got; i++) VIR_FREE(names[i]); memset(names, 0, nnames * sizeof(*names)); @@ -503,7 +497,6 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn, virNWFilterPtr **filters, unsigned int flags) { - virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData; virNWFilterPtr *tmp_filters = NULL; int nfilters = 0; virNWFilterPtr filter = NULL; @@ -516,7 +509,7 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn, if (virConnectListAllNWFiltersEnsureACL(conn) < 0) return -1; - nwfilterDriverLock(driver); + nwfilterDriverLock(); if (!filters) { ret = driver->nwfilters.count; @@ -545,7 +538,7 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn, ret = nfilters; cleanup: - nwfilterDriverUnlock(driver); + nwfilterDriverUnlock(); if (tmp_filters) { for (i = 0; i < nfilters; i ++) virObjectUnref(tmp_filters[i]); @@ -559,12 +552,11 @@ static virNWFilterPtr nwfilterDefineXML(virConnectPtr conn, const char *xml) { - virNWFilterDriverStatePtr driver = conn->nwfilterPrivateData; virNWFilterDefPtr def; virNWFilterObjPtr nwfilter = NULL; virNWFilterPtr ret = NULL; - nwfilterDriverLock(driver); + nwfilterDriverLock(); virNWFilterWriteLockFilterUpdates(); virNWFilterCallbackDriversLock(); @@ -593,7 +585,7 @@ nwfilterDefineXML(virConnectPtr conn, virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); - nwfilterDriverUnlock(driver); + nwfilterDriverUnlock(); return ret; } @@ -601,11 +593,10 @@ nwfilterDefineXML(virConnectPtr conn, static int nwfilterUndefine(virNWFilterPtr obj) { - virNWFilterDriverStatePtr driver = obj->conn->nwfilterPrivateData; virNWFilterObjPtr nwfilter; int ret = -1; - nwfilterDriverLock(driver); + nwfilterDriverLock(); virNWFilterWriteLockFilterUpdates(); virNWFilterCallbackDriversLock(); @@ -641,7 +632,7 @@ nwfilterUndefine(virNWFilterPtr obj) virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); - nwfilterDriverUnlock(driver); + nwfilterDriverUnlock(); return ret; } @@ -650,15 +641,14 @@ static char * nwfilterGetXMLDesc(virNWFilterPtr obj, unsigned int flags) { - virNWFilterDriverStatePtr driver = obj->conn->nwfilterPrivateData; virNWFilterObjPtr nwfilter; char *ret = NULL; virCheckFlags(0, NULL); - nwfilterDriverLock(driver); + nwfilterDriverLock(); nwfilter = virNWFilterObjFindByUUID(&driver->nwfilters, obj->uuid); - nwfilterDriverUnlock(driver); + nwfilterDriverUnlock(); if (!nwfilter) { virReportError(VIR_ERR_NO_NWFILTER, @@ -679,11 +669,10 @@ nwfilterGetXMLDesc(virNWFilterPtr obj, static int -nwfilterInstantiateFilter(virConnectPtr conn, - const unsigned char *vmuuid, +nwfilterInstantiateFilter(const unsigned char *vmuuid, virDomainNetDefPtr net) { - return virNWFilterInstantiateFilter(conn->nwfilterPrivateData, vmuuid, net); + return virNWFilterInstantiateFilter(driver, vmuuid, net); } diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c041ee7..f8acc76 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -285,7 +285,6 @@ static int qemuCreateInBridgePortWithHelper(virQEMUDriverConfigPtr cfg, */ int qemuNetworkIfaceConnect(virDomainDefPtr def, - virConnectPtr conn, virQEMUDriverPtr driver, virDomainNetDefPtr net, virQEMUCapsPtr qemuCaps, @@ -368,7 +367,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr def, goto cleanup; if (net->filter && - virDomainConfNWFilterInstantiate(conn, def->uuid, net) < 0) { + virDomainConfNWFilterInstantiate(def->uuid, net) < 0) { goto cleanup; } @@ -7376,7 +7375,6 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd, static int qemuBuildInterfaceCommandLine(virCommandPtr cmd, virQEMUDriverPtr driver, - virConnectPtr conn, virDomainDefPtr def, virDomainNetDefPtr net, virQEMUCapsPtr qemuCaps, @@ -7432,7 +7430,7 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, memset(tapfd, -1, tapfdSize * sizeof(tapfd[0])); - if (qemuNetworkIfaceConnect(def, conn, driver, net, + if (qemuNetworkIfaceConnect(def, driver, net, qemuCaps, tapfd, &tapfdSize) < 0) goto cleanup; } else if (actualType == VIR_DOMAIN_NET_TYPE_DIRECT) { @@ -8889,7 +8887,7 @@ qemuBuildCommandLine(virConnectPtr conn, else vlan = i; - if (qemuBuildInterfaceCommandLine(cmd, driver, conn, def, net, + if (qemuBuildInterfaceCommandLine(cmd, driver, def, net, qemuCaps, vlan, bootNet, vmop, standalone) < 0) goto error; diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index dcc7127..a3b30e6 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -190,7 +190,6 @@ char *qemuBuildRedirdevDevStr(virDomainDefPtr def, virDomainRedirdevDefPtr dev, virQEMUCapsPtr qemuCaps); int qemuNetworkIfaceConnect(virDomainDefPtr def, - virConnectPtr conn, virQEMUDriverPtr driver, virDomainNetDefPtr net, virQEMUCapsPtr qemuCaps, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 5994558..2b0a3fd 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7167,7 +7167,7 @@ qemuDomainUpdateDeviceLive(virConnectPtr conn, ret = qemuDomainChangeGraphics(driver, vm, dev->data.graphics); break; case VIR_DOMAIN_DEVICE_NET: - ret = qemuDomainChangeNet(driver, vm, dom, dev); + ret = qemuDomainChangeNet(driver, vm, dev); break; case VIR_DOMAIN_DEVICE_FS: case VIR_DOMAIN_DEVICE_INPUT: diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9ed96dc..62a9cba 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -914,7 +914,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, if (VIR_ALLOC_N(vhostfd, vhostfdSize) < 0) goto cleanup; memset(vhostfd, -1, sizeof(*vhostfd) * vhostfdSize); - if (qemuNetworkIfaceConnect(vm->def, conn, driver, net, + if (qemuNetworkIfaceConnect(vm->def, driver, net, priv->qemuCaps, tapfd, &tapfdSize) < 0) goto cleanup; iface_connected = true; @@ -1830,8 +1830,7 @@ qemuDomainChangeNetBridge(virDomainObjPtr vm, } static int -qemuDomainChangeNetFilter(virConnectPtr conn, - virDomainObjPtr vm, +qemuDomainChangeNetFilter(virDomainObjPtr vm, virDomainNetDefPtr olddev, virDomainNetDefPtr newdev) { @@ -1851,7 +1850,7 @@ qemuDomainChangeNetFilter(virConnectPtr conn, virDomainConfNWFilterTeardown(olddev); if (newdev->filter && - virDomainConfNWFilterInstantiate(conn, vm->def->uuid, newdev) < 0) { + virDomainConfNWFilterInstantiate(vm->def->uuid, newdev) < 0) { virErrorPtr errobj; virReportError(VIR_ERR_OPERATION_FAILED, @@ -1859,7 +1858,7 @@ qemuDomainChangeNetFilter(virConnectPtr conn, "- attempting to restore old rules"), olddev->ifname); errobj = virSaveLastError(); - ignore_value(virDomainConfNWFilterInstantiate(conn, vm->def->uuid, olddev)); + ignore_value(virDomainConfNWFilterInstantiate(vm->def->uuid, olddev)); virSetError(errobj); virFreeError(errobj); return -1; @@ -1902,7 +1901,6 @@ int qemuDomainChangeNetLinkState(virQEMUDriverPtr driver, int qemuDomainChangeNet(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainPtr dom, virDomainDeviceDefPtr dev) { virDomainNetDefPtr newdev = dev->data.net; @@ -2230,7 +2228,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver, } if (needFilterChange) { - if (qemuDomainChangeNetFilter(dom->conn, vm, olddev, newdev) < 0) + if (qemuDomainChangeNetFilter(vm, olddev, newdev) < 0) goto cleanup; /* we successfully switched to the new filter, and we've * determined that the rest of newdev is equivalent to olddev, diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h index 19ab9a0..a30788d 100644 --- a/src/qemu/qemu_hotplug.h +++ b/src/qemu/qemu_hotplug.h @@ -68,7 +68,6 @@ int qemuDomainChangeGraphicsPasswords(virQEMUDriverPtr driver, int asyncJob); int qemuDomainChangeNet(virQEMUDriverPtr driver, virDomainObjPtr vm, - virDomainPtr dom, virDomainDeviceDefPtr dev); int qemuDomainChangeNetLinkState(virQEMUDriverPtr driver, virDomainObjPtr vm, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 97c04f2..cbcd9be 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3331,18 +3331,14 @@ qemuProcessNotifyNets(virDomainDefPtr def) } static int -qemuProcessFiltersInstantiate(virConnectPtr conn, - virDomainDefPtr def) +qemuProcessFiltersInstantiate(virDomainDefPtr def) { size_t i; - if (!conn) - return 1; - for (i = 0; i < def->nnets; i++) { virDomainNetDefPtr net = def->nets[i]; if ((net->filter) && (net->ifname)) { - if (virDomainConfNWFilterInstantiate(conn, def->uuid, net) < 0) + if (virDomainConfNWFilterInstantiate(def->uuid, net) < 0) return 1; } } @@ -3800,7 +3796,7 @@ qemuProcessReconnect(void *opaque) if (qemuProcessNotifyNets(obj->def) < 0) goto error; - if (qemuProcessFiltersInstantiate(conn, obj->def)) + if (qemuProcessFiltersInstantiate(obj->def)) goto error; if (qemuDomainCheckEjectableMedia(driver, obj, QEMU_ASYNC_JOB_NONE) < 0) diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c index c4ad889..02f15c6 100644 --- a/src/uml/uml_conf.c +++ b/src/uml/uml_conf.c @@ -105,8 +105,7 @@ virCapsPtr umlCapsInit(void) static int -umlConnectTapDevice(virConnectPtr conn, - virDomainDefPtr vm, +umlConnectTapDevice(virDomainDefPtr vm, virDomainNetDefPtr net, const char *bridge) { @@ -135,7 +134,7 @@ umlConnectTapDevice(virConnectPtr conn, } if (net->filter) { - if (virDomainConfNWFilterInstantiate(conn, vm->uuid, net) < 0) { + if (virDomainConfNWFilterInstantiate(vm->uuid, net) < 0) { if (template_ifname) VIR_FREE(net->ifname); goto error; @@ -217,7 +216,7 @@ umlBuildCommandLineNet(virConnectPtr conn, if (bridge == NULL) goto error; - if (umlConnectTapDevice(conn, vm, def, bridge) < 0) { + if (umlConnectTapDevice(vm, def, bridge) < 0) { VIR_FREE(bridge); goto error; } @@ -228,7 +227,7 @@ umlBuildCommandLineNet(virConnectPtr conn, } case VIR_DOMAIN_NET_TYPE_BRIDGE: - if (umlConnectTapDevice(conn, vm, def, + if (umlConnectTapDevice(vm, def, def->data.bridge.brname) < 0) goto error; -- 2.1.0

The vbox driver can use the main hypervisor private data and so does not need to use the storage/network private data fields. --- src/vbox/vbox_network.c | 6 +++--- src/vbox/vbox_storage.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/vbox/vbox_network.c b/src/vbox/vbox_network.c index 7472537..a6079b4 100644 --- a/src/vbox/vbox_network.c +++ b/src/vbox/vbox_network.c @@ -102,17 +102,17 @@ vboxNetworkOpen(virConnectPtr conn, goto cleanup; VIR_DEBUG("network initialized"); - /* conn->networkPrivateData = some network specific data */ + return VIR_DRV_OPEN_SUCCESS; cleanup: return VIR_DRV_OPEN_DECLINED; } -static int vboxNetworkClose(virConnectPtr conn) +static int vboxNetworkClose(virConnectPtr conn ATTRIBUTE_UNUSED) { VIR_DEBUG("network uninitialized"); - conn->networkPrivateData = NULL; + return 0; } diff --git a/src/vbox/vbox_storage.c b/src/vbox/vbox_storage.c index 194484c..3af5f94 100644 --- a/src/vbox/vbox_storage.c +++ b/src/vbox/vbox_storage.c @@ -58,14 +58,14 @@ vboxStorageOpen(virConnectPtr conn, return VIR_DRV_OPEN_ERROR; VIR_DEBUG("vbox storage initialized"); - /* conn->storagePrivateData = some storage specific data */ + return VIR_DRV_OPEN_SUCCESS; } -static int vboxStorageClose(virConnectPtr conn) +static int vboxStorageClose(virConnectPtr conn ATTRIBUTE_UNUSED) { VIR_DEBUG("vbox storage uninitialized"); - conn->storagePrivateData = NULL; + return 0; } -- 2.1.0

The node device driver can rely on its global state instead of the connect private data. --- src/node_device/node_device_driver.c | 68 +++++++++++++---------------- src/node_device/node_device_driver.h | 6 ++- src/node_device/node_device_hal.c | 84 ++++++++++++++++-------------------- src/node_device/node_device_udev.c | 61 ++++++++++++-------------- 4 files changed, 99 insertions(+), 120 deletions(-) diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c index 5d0efb4..b1f17f4 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -43,6 +43,8 @@ #define VIR_FROM_THIS VIR_FROM_NODEDEV +virNodeDeviceDriverStatePtr driver; + static int update_caps(virNodeDeviceObjPtr dev) { virNodeDevCapsDefPtr cap = dev->def->caps; @@ -114,11 +116,11 @@ static int update_driver_name(virNodeDeviceObjPtr dev ATTRIBUTE_UNUSED) #endif -void nodeDeviceLock(virNodeDeviceDriverStatePtr driver) +void nodeDeviceLock(void) { virMutexLock(&driver->lock); } -void nodeDeviceUnlock(virNodeDeviceDriverStatePtr driver) +void nodeDeviceUnlock(void) { virMutexUnlock(&driver->lock); } @@ -128,7 +130,6 @@ nodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags) { - virNodeDeviceDriverStatePtr driver = conn->nodeDevicePrivateData; int ndevs = 0; size_t i; @@ -137,7 +138,7 @@ nodeNumOfDevices(virConnectPtr conn, virCheckFlags(0, -1); - nodeDeviceLock(driver); + nodeDeviceLock(); for (i = 0; i < driver->devs.count; i++) { virNodeDeviceObjPtr obj = driver->devs.objs[i]; virNodeDeviceObjLock(obj); @@ -147,7 +148,7 @@ nodeNumOfDevices(virConnectPtr conn, ++ndevs; virNodeDeviceObjUnlock(obj); } - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); return ndevs; } @@ -158,7 +159,6 @@ nodeListDevices(virConnectPtr conn, char **const names, int maxnames, unsigned int flags) { - virNodeDeviceDriverStatePtr driver = conn->nodeDevicePrivateData; int ndevs = 0; size_t i; @@ -167,7 +167,7 @@ nodeListDevices(virConnectPtr conn, virCheckFlags(0, -1); - nodeDeviceLock(driver); + nodeDeviceLock(); for (i = 0; i < driver->devs.count && ndevs < maxnames; i++) { virNodeDeviceObjPtr obj = driver->devs.objs[i]; virNodeDeviceObjLock(obj); @@ -181,12 +181,12 @@ nodeListDevices(virConnectPtr conn, } virNodeDeviceObjUnlock(obj); } - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); return ndevs; failure: - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); --ndevs; while (--ndevs >= 0) VIR_FREE(names[ndevs]); @@ -198,7 +198,6 @@ nodeConnectListAllNodeDevices(virConnectPtr conn, virNodeDevicePtr **devices, unsigned int flags) { - virNodeDeviceDriverStatePtr driver = conn->nodeDevicePrivateData; int ret = -1; virCheckFlags(VIR_CONNECT_LIST_NODE_DEVICES_FILTERS_CAP, -1); @@ -206,24 +205,23 @@ nodeConnectListAllNodeDevices(virConnectPtr conn, if (virConnectListAllNodeDevicesEnsureACL(conn) < 0) return -1; - nodeDeviceLock(driver); + nodeDeviceLock(); ret = virNodeDeviceObjListExport(conn, driver->devs, devices, virConnectListAllNodeDevicesCheckACL, flags); - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); return ret; } virNodeDevicePtr nodeDeviceLookupByName(virConnectPtr conn, const char *name) { - virNodeDeviceDriverStatePtr driver = conn->nodeDevicePrivateData; virNodeDeviceObjPtr obj; virNodeDevicePtr ret = NULL; - nodeDeviceLock(driver); + nodeDeviceLock(); obj = virNodeDeviceFindByName(&driver->devs, name); - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); if (!obj) { virReportError(VIR_ERR_NO_NODE_DEVICE, NULL); @@ -249,7 +247,6 @@ nodeDeviceLookupSCSIHostByWWN(virConnectPtr conn, unsigned int flags) { size_t i; - virNodeDeviceDriverStatePtr driver = conn->nodeDevicePrivateData; virNodeDeviceObjListPtr devs = &driver->devs; virNodeDevCapsDefPtr cap = NULL; virNodeDeviceObjPtr obj = NULL; @@ -257,7 +254,7 @@ nodeDeviceLookupSCSIHostByWWN(virConnectPtr conn, virCheckFlags(0, NULL); - nodeDeviceLock(driver); + nodeDeviceLock(); for (i = 0; i < devs->count; i++) { obj = devs->objs[i]; @@ -288,7 +285,7 @@ nodeDeviceLookupSCSIHostByWWN(virConnectPtr conn, } out: - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); return dev; } @@ -297,15 +294,14 @@ char * nodeDeviceGetXMLDesc(virNodeDevicePtr dev, unsigned int flags) { - virNodeDeviceDriverStatePtr driver = dev->conn->nodeDevicePrivateData; virNodeDeviceObjPtr obj; char *ret = NULL; virCheckFlags(0, NULL); - nodeDeviceLock(driver); + nodeDeviceLock(); obj = virNodeDeviceFindByName(&driver->devs, dev->name); - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); if (!obj) { virReportError(VIR_ERR_NO_NODE_DEVICE, @@ -333,13 +329,12 @@ nodeDeviceGetXMLDesc(virNodeDevicePtr dev, char * nodeDeviceGetParent(virNodeDevicePtr dev) { - virNodeDeviceDriverStatePtr driver = dev->conn->nodeDevicePrivateData; virNodeDeviceObjPtr obj; char *ret = NULL; - nodeDeviceLock(driver); + nodeDeviceLock(); obj = virNodeDeviceFindByName(&driver->devs, dev->name); - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); if (!obj) { virReportError(VIR_ERR_NO_NODE_DEVICE, @@ -369,15 +364,14 @@ nodeDeviceGetParent(virNodeDevicePtr dev) int nodeDeviceNumOfCaps(virNodeDevicePtr dev) { - virNodeDeviceDriverStatePtr driver = dev->conn->nodeDevicePrivateData; virNodeDeviceObjPtr obj; virNodeDevCapsDefPtr caps; int ncaps = 0; int ret = -1; - nodeDeviceLock(driver); + nodeDeviceLock(); obj = virNodeDeviceFindByName(&driver->devs, dev->name); - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); if (!obj) { virReportError(VIR_ERR_NO_NODE_DEVICE, @@ -403,15 +397,14 @@ nodeDeviceNumOfCaps(virNodeDevicePtr dev) int nodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames) { - virNodeDeviceDriverStatePtr driver = dev->conn->nodeDevicePrivateData; virNodeDeviceObjPtr obj; virNodeDevCapsDefPtr caps; int ncaps = 0; int ret = -1; - nodeDeviceLock(driver); + nodeDeviceLock(); obj = virNodeDeviceFindByName(&driver->devs, dev->name); - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); if (!obj) { virReportError(VIR_ERR_NO_NODE_DEVICE, @@ -474,7 +467,6 @@ get_time(time_t *t) static virNodeDevicePtr find_new_device(virConnectPtr conn, const char *wwnn, const char *wwpn) { - virNodeDeviceDriverStatePtr driver = conn->nodeDevicePrivateData; virNodeDevicePtr dev = NULL; time_t start = 0, now = 0; @@ -483,7 +475,7 @@ find_new_device(virConnectPtr conn, const char *wwnn, const char *wwpn) * We're not doing anything with the driver pointer at this point, * so it's safe to release it, assuming that the pointer itself * doesn't become invalid. */ - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); get_time(&start); @@ -501,7 +493,7 @@ find_new_device(virConnectPtr conn, const char *wwnn, const char *wwpn) break; } - nodeDeviceLock(driver); + nodeDeviceLock(); return dev; } @@ -511,7 +503,6 @@ nodeDeviceCreateXML(virConnectPtr conn, const char *xmlDesc, unsigned int flags) { - virNodeDeviceDriverStatePtr driver = conn->nodeDevicePrivateData; virNodeDeviceDefPtr def = NULL; char *wwnn = NULL, *wwpn = NULL; int parent_host = -1; @@ -521,7 +512,7 @@ nodeDeviceCreateXML(virConnectPtr conn, virCheckFlags(0, NULL); virt_type = virConnectGetType(conn); - nodeDeviceLock(driver); + nodeDeviceLock(); def = virNodeDeviceDefParseString(xmlDesc, CREATE_DEVICE, virt_type); if (def == NULL) @@ -555,7 +546,7 @@ nodeDeviceCreateXML(virConnectPtr conn, virReportError(VIR_ERR_NO_NODE_DEVICE, NULL); cleanup: - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); virNodeDeviceDefFree(def); VIR_FREE(wwnn); VIR_FREE(wwpn); @@ -567,14 +558,13 @@ int nodeDeviceDestroy(virNodeDevicePtr dev) { int ret = -1; - virNodeDeviceDriverStatePtr driver = dev->conn->nodeDevicePrivateData; virNodeDeviceObjPtr obj = NULL; char *parent_name = NULL, *wwnn = NULL, *wwpn = NULL; int parent_host = -1; - nodeDeviceLock(driver); + nodeDeviceLock(); obj = virNodeDeviceFindByName(&driver->devs, dev->name); - nodeDeviceUnlock(driver); + nodeDeviceUnlock(); if (!obj) { virReportError(VIR_ERR_NO_NODE_DEVICE, NULL); diff --git a/src/node_device/node_device_driver.h b/src/node_device/node_device_driver.h index e238ff8..79583cd 100644 --- a/src/node_device/node_device_driver.h +++ b/src/node_device/node_device_driver.h @@ -37,8 +37,10 @@ int halNodeRegister(void); int udevNodeRegister(void); # endif -void nodeDeviceLock(virNodeDeviceDriverStatePtr driver); -void nodeDeviceUnlock(virNodeDeviceDriverStatePtr driver); +void nodeDeviceLock(void); +void nodeDeviceUnlock(void); + +extern virNodeDeviceDriverStatePtr driver; int nodedevRegister(void); diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_device_hal.c index c32b1fe..2885bd3 100644 --- a/src/node_device/node_device_hal.c +++ b/src/node_device/node_device_hal.c @@ -49,12 +49,7 @@ VIR_LOG_INIT("node_device.node_device_hal"); * Host device enumeration (HAL implementation) */ -static virNodeDeviceDriverStatePtr driverState; - -#define CONN_DRV_STATE(conn) \ - ((virNodeDeviceDriverStatePtr)((conn)->nodeDevicePrivateData)) #define DRV_STATE_HAL_CTX(ds) ((LibHalContext *)((ds)->privateData)) -#define CONN_HAL_CTX(conn) DRV_STATE_HAL_CTX(CONN_DRV_STATE(conn)) #define NODE_DEV_UDI(obj) ((const char *)((obj)->privateData) @@ -481,8 +476,8 @@ dev_create(const char *udi) if (VIR_STRDUP(privData, udi) < 0) return; - nodeDeviceLock(driverState); - ctx = DRV_STATE_HAL_CTX(driverState); + nodeDeviceLock(); + ctx = DRV_STATE_HAL_CTX(driver); if (VIR_ALLOC(def) < 0) goto failure; @@ -507,7 +502,7 @@ dev_create(const char *udi) /* Some devices don't have a path in sysfs, so ignore failure */ (void)get_str_prop(ctx, udi, "linux.sysfs_path", &devicePath); - dev = virNodeDeviceAssignDef(&driverState->devs, + dev = virNodeDeviceAssignDef(&driver->devs, def); if (!dev) { @@ -521,7 +516,7 @@ dev_create(const char *udi) virNodeDeviceObjUnlock(dev); - nodeDeviceUnlock(driverState); + nodeDeviceUnlock(); return; failure: @@ -529,7 +524,7 @@ dev_create(const char *udi) cleanup: VIR_FREE(privData); virNodeDeviceDefFree(def); - nodeDeviceUnlock(driverState); + nodeDeviceUnlock(); } static void @@ -538,17 +533,17 @@ dev_refresh(const char *udi) const char *name = hal_name(udi); virNodeDeviceObjPtr dev; - nodeDeviceLock(driverState); - dev = virNodeDeviceFindByName(&driverState->devs, name); + nodeDeviceLock(); + dev = virNodeDeviceFindByName(&driver->devs, name); if (dev) { /* Simply "rediscover" device -- incrementally handling changes * to sub-capabilities (like net.80203) is nasty ... so avoid it. */ - virNodeDeviceObjRemove(&driverState->devs, dev); + virNodeDeviceObjRemove(&driver->devs, dev); } else { VIR_DEBUG("no device named %s", name); } - nodeDeviceUnlock(driverState); + nodeDeviceUnlock(); if (dev) dev_create(udi); @@ -570,14 +565,14 @@ device_removed(LibHalContext *ctx ATTRIBUTE_UNUSED, const char *name = hal_name(udi); virNodeDeviceObjPtr dev; - nodeDeviceLock(driverState); - dev = virNodeDeviceFindByName(&driverState->devs, name); + nodeDeviceLock(); + dev = virNodeDeviceFindByName(&driver->devs, name); VIR_DEBUG("%s", name); if (dev) - virNodeDeviceObjRemove(&driverState->devs, dev); + virNodeDeviceObjRemove(&driver->devs, dev); else VIR_DEBUG("no device named %s", name); - nodeDeviceUnlock(driverState); + nodeDeviceUnlock(); } @@ -588,9 +583,9 @@ device_cap_added(LibHalContext *ctx, const char *name = hal_name(udi); virNodeDeviceObjPtr dev; - nodeDeviceLock(driverState); - dev = virNodeDeviceFindByName(&driverState->devs, name); - nodeDeviceUnlock(driverState); + nodeDeviceLock(); + dev = virNodeDeviceFindByName(&driver->devs, name); + nodeDeviceUnlock(); VIR_DEBUG("%s %s", cap, name); if (dev) { (void)gather_capability(ctx, udi, cap, &dev->def->caps); @@ -644,14 +639,14 @@ nodeStateInitialize(bool privileged ATTRIBUTE_UNUSED, qsort(caps_tbl, ARRAY_CARDINALITY(caps_tbl), sizeof(caps_tbl[0]), cmpstringp); - if (VIR_ALLOC(driverState) < 0) + if (VIR_ALLOC(driver) < 0) return -1; - if (virMutexInit(&driverState->lock) < 0) { - VIR_FREE(driverState); + if (virMutexInit(&driver->lock) < 0) { + VIR_FREE(driver); return -1; } - nodeDeviceLock(driverState); + nodeDeviceLock(); dbus_error_init(&err); if (!(sysbus = virDBusGetSystemBus())) { @@ -682,14 +677,14 @@ nodeStateInitialize(bool privileged ATTRIBUTE_UNUSED, } /* Populate with known devices */ - driverState->privateData = hal_ctx; + driver->privateData = hal_ctx; /* We need to unlock state now, since setting these callbacks cause * a dbus RPC call, and while this call is waiting for the reply, * a signal may already arrive, triggering the callback and thus * requiring the lock ! */ - nodeDeviceUnlock(driverState); + nodeDeviceUnlock(); /* Register HAL event callbacks */ if (!libhal_ctx_set_device_added(hal_ctx, device_added) || @@ -720,11 +715,11 @@ nodeStateInitialize(bool privileged ATTRIBUTE_UNUSED, VIR_ERROR(_("%s: %s"), err.name, err.message); dbus_error_free(&err); } - virNodeDeviceObjListFree(&driverState->devs); + virNodeDeviceObjListFree(&driver->devs); if (hal_ctx) (void)libhal_ctx_free(hal_ctx); - nodeDeviceUnlock(driverState); - VIR_FREE(driverState); + nodeDeviceUnlock(); + VIR_FREE(driver); return ret; } @@ -733,15 +728,15 @@ nodeStateInitialize(bool privileged ATTRIBUTE_UNUSED, static int nodeStateCleanup(void) { - if (driverState) { - nodeDeviceLock(driverState); - LibHalContext *hal_ctx = DRV_STATE_HAL_CTX(driverState); - virNodeDeviceObjListFree(&driverState->devs); + if (driver) { + nodeDeviceLock(); + LibHalContext *hal_ctx = DRV_STATE_HAL_CTX(driver); + virNodeDeviceObjListFree(&driver->devs); (void)libhal_ctx_shutdown(hal_ctx, NULL); (void)libhal_ctx_free(hal_ctx); - nodeDeviceUnlock(driverState); - virMutexDestroy(&driverState->lock); - VIR_FREE(driverState); + nodeDeviceUnlock(); + virMutexDestroy(&driver->lock); + VIR_FREE(driver); return 0; } return -1; @@ -758,12 +753,12 @@ nodeStateReload(void) LibHalContext *hal_ctx; VIR_INFO("Reloading HAL device state"); - nodeDeviceLock(driverState); + nodeDeviceLock(); VIR_INFO("Removing existing objects"); - virNodeDeviceObjListFree(&driverState->devs); - nodeDeviceUnlock(driverState); + virNodeDeviceObjListFree(&driver->devs); + nodeDeviceUnlock(); - hal_ctx = DRV_STATE_HAL_CTX(driverState); + hal_ctx = DRV_STATE_HAL_CTX(driver); VIR_INFO("Creating new objects"); dbus_error_init(&err); udi = libhal_get_all_devices(hal_ctx, &num_devs, &err); @@ -783,24 +778,21 @@ nodeStateReload(void) static virDrvOpenStatus -nodeDeviceOpen(virConnectPtr conn, +nodeDeviceOpen(virConnectPtr conn ATTRIBUTE_UNUSED, virConnectAuthPtr auth ATTRIBUTE_UNUSED, unsigned int flags) { virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - if (driverState == NULL) + if (driver == NULL) return VIR_DRV_OPEN_DECLINED; - conn->nodeDevicePrivateData = driverState; - return VIR_DRV_OPEN_SUCCESS; } static int nodeDeviceClose(virConnectPtr conn ATTRIBUTE_UNUSED) { - conn->nodeDevicePrivateData = NULL; return 0; } diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index 1a35c07..115a92b 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -56,8 +56,6 @@ struct _udevPrivate { bool privileged; }; -static virNodeDeviceDriverStatePtr driverState; - static int udevStrToLong_ull(char const *s, char **end_ptr, int base, @@ -419,7 +417,7 @@ static int udevProcessPCI(struct udev_device *device, virPCIDeviceAddress addr; virPCIEDeviceInfoPtr pci_express = NULL; virPCIDevicePtr pciDev = NULL; - udevPrivate *priv = driverState->privateData; + udevPrivate *priv = driver->privateData; int tmpGroup, ret = -1; char *p; int rc; @@ -1330,12 +1328,12 @@ static int udevRemoveOneDevice(struct udev_device *device) int ret = 0; name = udev_device_get_syspath(device); - dev = virNodeDeviceFindBySysfsPath(&driverState->devs, name); + dev = virNodeDeviceFindBySysfsPath(&driver->devs, name); if (dev != NULL) { VIR_DEBUG("Removing device '%s' with sysfs path '%s'", dev->def->name, name); - virNodeDeviceObjRemove(&driverState->devs, dev); + virNodeDeviceObjRemove(&driver->devs, dev); } else { VIR_DEBUG("Failed to find device to remove that has udev name '%s'", name); @@ -1369,7 +1367,7 @@ static int udevSetParent(struct udev_device *device, goto out; } - dev = virNodeDeviceFindBySysfsPath(&driverState->devs, + dev = virNodeDeviceFindBySysfsPath(&driver->devs, parent_sysfs_path); if (dev != NULL) { if (VIR_STRDUP(def->parent, dev->def->name) < 0) { @@ -1426,7 +1424,7 @@ static int udevAddOneDevice(struct udev_device *device) /* If this is a device change, the old definition will be freed * and the current definition will take its place. */ - dev = virNodeDeviceAssignDef(&driverState->devs, def); + dev = virNodeDeviceAssignDef(&driver->devs, def); if (dev == NULL) { VIR_ERROR(_("Failed to create device for '%s'"), def->name); @@ -1507,15 +1505,15 @@ static int nodeStateCleanup(void) struct udev_monitor *udev_monitor = NULL; struct udev *udev = NULL; - if (driverState) { - nodeDeviceLock(driverState); + if (driver) { + nodeDeviceLock(); - priv = driverState->privateData; + priv = driver->privateData; if (priv->watch != -1) virEventRemoveHandle(priv->watch); - udev_monitor = DRV_STATE_UDEV_MONITOR(driverState); + udev_monitor = DRV_STATE_UDEV_MONITOR(driver); if (udev_monitor != NULL) { udev = udev_monitor_get_udev(udev_monitor); @@ -1525,10 +1523,10 @@ static int nodeStateCleanup(void) if (udev != NULL) udev_unref(udev); - virNodeDeviceObjListFree(&driverState->devs); - nodeDeviceUnlock(driverState); - virMutexDestroy(&driverState->lock); - VIR_FREE(driverState); + virNodeDeviceObjListFree(&driver->devs); + nodeDeviceUnlock(); + virMutexDestroy(&driver->lock); + VIR_FREE(driver); VIR_FREE(priv); } else { ret = -1; @@ -1551,11 +1549,11 @@ static void udevEventHandleCallback(int watch ATTRIBUTE_UNUSED, void *data ATTRIBUTE_UNUSED) { struct udev_device *device = NULL; - struct udev_monitor *udev_monitor = DRV_STATE_UDEV_MONITOR(driverState); + struct udev_monitor *udev_monitor = DRV_STATE_UDEV_MONITOR(driver); const char *action = NULL; int udev_fd = -1; - nodeDeviceLock(driverState); + nodeDeviceLock(); udev_fd = udev_monitor_get_fd(udev_monitor); if (fd != udev_fd) { VIR_ERROR(_("File descriptor returned by udev %d does not " @@ -1584,7 +1582,7 @@ static void udevEventHandleCallback(int watch ATTRIBUTE_UNUSED, out: udev_device_unref(device); - nodeDeviceUnlock(driverState); + nodeDeviceUnlock(); return; } @@ -1598,7 +1596,7 @@ udevGetDMIData(union _virNodeDevCapData *data) struct udev_device *device = NULL; char *tmp = NULL; - udev = udev_monitor_get_udev(DRV_STATE_UDEV_MONITOR(driverState)); + udev = udev_monitor_get_udev(DRV_STATE_UDEV_MONITOR(driver)); device = udev_device_new_from_syspath(udev, DMI_DEVPATH); if (device == NULL) { @@ -1684,7 +1682,7 @@ static int udevSetupSystemDev(void) udevGetDMIData(&def->caps->data); #endif - dev = virNodeDeviceAssignDef(&driverState->devs, def); + dev = virNodeDeviceAssignDef(&driver->devs, def); if (dev == NULL) { VIR_ERROR(_("Failed to create device for '%s'"), def->name); goto out; @@ -1737,21 +1735,21 @@ static int nodeStateInitialize(bool privileged, priv->watch = -1; priv->privileged = privileged; - if (VIR_ALLOC(driverState) < 0) { + if (VIR_ALLOC(driver) < 0) { VIR_FREE(priv); ret = -1; goto out; } - if (virMutexInit(&driverState->lock) < 0) { - VIR_ERROR(_("Failed to initialize mutex for driverState")); + if (virMutexInit(&driver->lock) < 0) { + VIR_ERROR(_("Failed to initialize mutex for driver")); VIR_FREE(priv); - VIR_FREE(driverState); + VIR_FREE(driver); ret = -1; goto out; } - nodeDeviceLock(driverState); + nodeDeviceLock(); /* * http://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/libudev-udev.ht... @@ -1776,7 +1774,7 @@ static int nodeStateInitialize(bool privileged, udev_monitor_enable_receiving(priv->udev_monitor); /* udev can be retrieved from udev_monitor */ - driverState->privateData = priv; + driver->privateData = priv; /* We register the monitor with the event callback so we are * notified by udev of device changes before we enumerate existing @@ -1808,7 +1806,7 @@ static int nodeStateInitialize(bool privileged, } out_unlock: - nodeDeviceUnlock(driverState); + nodeDeviceUnlock(); out: if (ret == -1) @@ -1823,23 +1821,20 @@ static int nodeStateReload(void) } -static virDrvOpenStatus nodeDeviceOpen(virConnectPtr conn, +static virDrvOpenStatus nodeDeviceOpen(virConnectPtr conn ATTRIBUTE_UNUSED, virConnectAuthPtr auth ATTRIBUTE_UNUSED, unsigned int flags) { virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - if (driverState == NULL) + if (driver == NULL) return VIR_DRV_OPEN_DECLINED; - conn->nodeDevicePrivateData = driverState; - return VIR_DRV_OPEN_SUCCESS; } -static int nodeDeviceClose(virConnectPtr conn) +static int nodeDeviceClose(virConnectPtr conn ATTRIBUTE_UNUSED) { - conn->nodeDevicePrivateData = NULL; return 0; } -- 2.1.0

The udev driver can be implemented using global state instead of the connect private data. --- src/interface/interface_backend_udev.c | 103 +++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 45 deletions(-) diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c index d4f8c0f..b027de0 100644 --- a/src/interface/interface_backend_udev.c +++ b/src/interface/interface_backend_udev.c @@ -48,6 +48,8 @@ typedef enum { VIR_UDEV_IFACE_ALL } virUdevStatus; +static struct udev_iface_driver *driver; + static virInterfaceDef *udevGetIfaceDef(struct udev *udev, const char *name); static const char * @@ -134,48 +136,21 @@ udevGetDevices(struct udev *udev, virUdevStatus status) } static virDrvOpenStatus -udevInterfaceOpen(virConnectPtr conn, +udevInterfaceOpen(virConnectPtr conn ATTRIBUTE_UNUSED, virConnectAuthPtr auth ATTRIBUTE_UNUSED, unsigned int flags) { - struct udev_iface_driver *driverState = NULL; - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - if (VIR_ALLOC(driverState) < 0) - goto cleanup; - - driverState->udev = udev_new(); - if (!driverState->udev) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("failed to create udev context")); - goto cleanup; - } - - conn->interfacePrivateData = driverState; + if (!driver) + return VIR_DRV_OPEN_ERROR; return VIR_DRV_OPEN_SUCCESS; - - cleanup: - VIR_FREE(driverState); - - return VIR_DRV_OPEN_ERROR; } static int -udevInterfaceClose(virConnectPtr conn) +udevInterfaceClose(virConnectPtr conn ATTRIBUTE_UNUSED) { - struct udev_iface_driver *driverState; - - if (conn->interfacePrivateData != NULL) { - driverState = conn->interfacePrivateData; - - udev_unref(driverState->udev); - - VIR_FREE(driverState); - } - - conn->interfacePrivateData = NULL; return 0; } @@ -183,8 +158,7 @@ static int udevNumOfInterfacesByStatus(virConnectPtr conn, virUdevStatus status, virInterfaceObjListFilter filter) { - struct udev_iface_driver *driverState = conn->interfacePrivateData; - struct udev *udev = udev_ref(driverState->udev); + struct udev *udev = udev_ref(driver->udev); struct udev_enumerate *enumerate = NULL; struct udev_list_entry *devices; struct udev_list_entry *dev_entry; @@ -237,8 +211,7 @@ udevListInterfacesByStatus(virConnectPtr conn, virUdevStatus status, virInterfaceObjListFilter filter) { - struct udev_iface_driver *driverState = conn->interfacePrivateData; - struct udev *udev = udev_ref(driverState->udev); + struct udev *udev = udev_ref(driver->udev); struct udev_enumerate *enumerate = NULL; struct udev_list_entry *devices; struct udev_list_entry *dev_entry; @@ -353,7 +326,6 @@ udevConnectListAllInterfaces(virConnectPtr conn, virInterfacePtr **ifaces, unsigned int flags) { - struct udev_iface_driver *driverState = conn->interfacePrivateData; struct udev *udev; struct udev_enumerate *enumerate = NULL; struct udev_list_entry *devices; @@ -371,7 +343,7 @@ udevConnectListAllInterfaces(virConnectPtr conn, return -1; /* Grab a udev reference */ - udev = udev_ref(driverState->udev); + udev = udev_ref(driver->udev); /* List all interfaces in case we support more filter flags in the future */ enumerate = udevGetDevices(udev, VIR_UDEV_IFACE_ALL); @@ -483,8 +455,7 @@ udevConnectListAllInterfaces(virConnectPtr conn, static virInterfacePtr udevInterfaceLookupByName(virConnectPtr conn, const char *name) { - struct udev_iface_driver *driverState = conn->interfacePrivateData; - struct udev *udev = udev_ref(driverState->udev); + struct udev *udev = udev_ref(driver->udev); struct udev_device *dev; virInterfacePtr ret = NULL; virInterfaceDefPtr def = NULL; @@ -517,8 +488,7 @@ udevInterfaceLookupByName(virConnectPtr conn, const char *name) static virInterfacePtr udevInterfaceLookupByMACString(virConnectPtr conn, const char *macstr) { - struct udev_iface_driver *driverState = conn->interfacePrivateData; - struct udev *udev = udev_ref(driverState->udev); + struct udev *udev = udev_ref(driver->udev); struct udev_enumerate *enumerate = NULL; struct udev_list_entry *dev_entry; struct udev_device *dev; @@ -1141,8 +1111,7 @@ static char * udevInterfaceGetXMLDesc(virInterfacePtr ifinfo, unsigned int flags) { - struct udev_iface_driver *driverState = ifinfo->conn->interfacePrivateData; - struct udev *udev = udev_ref(driverState->udev); + struct udev *udev = udev_ref(driver->udev); virInterfaceDef *ifacedef; char *xmlstr = NULL; @@ -1173,8 +1142,7 @@ udevInterfaceGetXMLDesc(virInterfacePtr ifinfo, static int udevInterfaceIsActive(virInterfacePtr ifinfo) { - struct udev_iface_driver *driverState = ifinfo->conn->interfacePrivateData; - struct udev *udev = udev_ref(driverState->udev); + struct udev *udev = udev_ref(driver->udev); struct udev_device *dev; virInterfaceDefPtr def = NULL; int status = -1; @@ -1206,6 +1174,43 @@ udevInterfaceIsActive(virInterfacePtr ifinfo) return status; } + +static int +udevStateInitialize(bool privileged ATTRIBUTE_UNUSED, + virStateInhibitCallback callback ATTRIBUTE_UNUSED, + void *opaque ATTRIBUTE_UNUSED) +{ + int ret = -1; + + if (VIR_ALLOC(driver) < 0) + goto cleanup; + + driver->udev = udev_new(); + if (!driver->udev) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("failed to create udev context")); + goto cleanup; + } + + ret = 0; + + cleanup: + return ret; +} + +static int +udevStateCleanup(void) +{ + if (!driver) + return -1; + + udev_unref(driver->udev); + + VIR_FREE(driver); + return 0; +} + + static virInterfaceDriver udevIfaceDriver = { "udev", .interfaceOpen = udevInterfaceOpen, /* 1.0.0 */ @@ -1221,6 +1226,12 @@ static virInterfaceDriver udevIfaceDriver = { .interfaceGetXMLDesc = udevInterfaceGetXMLDesc, /* 1.0.0 */ }; +static virStateDriver interfaceStateDriver = { + .name = "udev", + .stateInitialize = udevStateInitialize, + .stateCleanup = udevStateCleanup, +}; + int udevIfaceRegister(void) { @@ -1229,5 +1240,7 @@ udevIfaceRegister(void) _("failed to register udev interface driver")); return -1; } + if (virRegisterStateDriver(&interfaceStateDriver) < 0) + return -1; return 0; } -- 2.1.0

Now all drivers are converted to use their global state directly, there is no need for private data fields for the secondary drivers in virConnectPtr --- src/datatypes.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/datatypes.h b/src/datatypes.h index d202597..4973b07 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -350,12 +350,6 @@ struct _virConnect { * NB: 'private' is a reserved word in C++. */ void * privateData; - void * networkPrivateData; - void * interfacePrivateData; - void * storagePrivateData; - void * nodeDevicePrivateData; - void * secretPrivateData; - void * nwfilterPrivateData; /* * The lock mutex must be acquired before accessing/changing -- 2.1.0

A bunch of code is wrapped in #if WITH_LIBVIRTD in order to enable the virStateDriver to be disabled when libvirtd is not built. Disabling this code doesn't have any real functional benefit beyond removing 1 pointer from the virConnectPtr struct, while having a cost of many more conditionals. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/Makefile.am | 6 ------ src/driver.h | 6 +----- src/libvirt.c | 4 ---- src/libvirt_daemon.syms | 15 --------------- src/libvirt_internal.h | 2 -- src/libvirt_private.syms | 5 +++++ src/remote/remote_driver.c | 6 ------ 7 files changed, 6 insertions(+), 38 deletions(-) delete mode 100644 src/libvirt_daemon.syms diff --git a/src/Makefile.am b/src/Makefile.am index 4bba536..1e21279 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1949,12 +1949,6 @@ else ! WITH_ESX SYM_FILES += $(srcdir)/libvirt_esx.syms endif ! WITH_ESX -if WITH_LIBVIRTD -USED_SYM_FILES += $(srcdir)/libvirt_daemon.syms -else ! WITH_LIBVIRTD -SYM_FILES += $(srcdir)/libvirt_daemon.syms -endif ! WITH_LIBVIRTD - if WITH_REMOTE USED_SYM_FILES += $(srcdir)/libvirt_remote.syms else ! WITH_REMOTE diff --git a/src/driver.h b/src/driver.h index f7e10a1..5b7862b 100644 --- a/src/driver.h +++ b/src/driver.h @@ -91,9 +91,7 @@ typedef enum { # include "driver-nodedev.h" # include "driver-nwfilter.h" # include "driver-secret.h" -# ifdef WITH_LIBVIRTD -# include "driver-state.h" -# endif +# include "driver-state.h" # include "driver-stream.h" # include "driver-storage.h" @@ -106,9 +104,7 @@ int virRegisterNetworkDriver(virNetworkDriverPtr) ATTRIBUTE_RETURN_CHECK; int virRegisterNodeDeviceDriver(virNodeDeviceDriverPtr) ATTRIBUTE_RETURN_CHECK; int virRegisterNWFilterDriver(virNWFilterDriverPtr) ATTRIBUTE_RETURN_CHECK; int virRegisterSecretDriver(virSecretDriverPtr) ATTRIBUTE_RETURN_CHECK; -# ifdef WITH_LIBVIRTD int virRegisterStateDriver(virStateDriverPtr) ATTRIBUTE_RETURN_CHECK; -# endif int virRegisterStorageDriver(virStorageDriverPtr) ATTRIBUTE_RETURN_CHECK; void *virDriverLoadModule(const char *name); diff --git a/src/libvirt.c b/src/libvirt.c index d51c014..43eb95c 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -135,10 +135,8 @@ static virSecretDriverPtr virSecretDriverTab[MAX_DRIVERS]; static int virSecretDriverTabCount; static virNWFilterDriverPtr virNWFilterDriverTab[MAX_DRIVERS]; static int virNWFilterDriverTabCount; -#ifdef WITH_LIBVIRTD static virStateDriverPtr virStateDriverTab[MAX_DRIVERS]; static int virStateDriverTabCount; -#endif #if defined(POLKIT_AUTH) @@ -691,7 +689,6 @@ virRegisterHypervisorDriver(virHypervisorDriverPtr driver) } -#ifdef WITH_LIBVIRTD /** * virRegisterStateDriver: * @driver: pointer to a driver block @@ -826,7 +823,6 @@ virStateStop(void) } return ret; } -#endif /* WITH_LIBVIRTD */ /** diff --git a/src/libvirt_daemon.syms b/src/libvirt_daemon.syms deleted file mode 100644 index 2855f00..0000000 --- a/src/libvirt_daemon.syms +++ /dev/null @@ -1,15 +0,0 @@ -# -# These symbols are dependent upon --with-libvirtd via WITH_LIBVIRTD. -# - -# libvirt_internal.h -virRegisterStateDriver; -virStateCleanup; -virStateInitialize; -virStateReload; -virStateStop; - -# Let emacs know we want case-insensitive sorting -# Local Variables: -# sort-fold-case: t -# End: diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h index 304d90f..1313b58 100644 --- a/src/libvirt_internal.h +++ b/src/libvirt_internal.h @@ -30,14 +30,12 @@ typedef void (*virStateInhibitCallback)(bool inhibit, void *opaque); -# ifdef WITH_LIBVIRTD int virStateInitialize(bool privileged, virStateInhibitCallback inhibit, void *opaque); int virStateCleanup(void); int virStateReload(void); int virStateStop(void); -# endif /* Feature detection. This is a libvirt-private interface for determining * what features are supported by the driver. diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a2eec83..7df5972 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -889,7 +889,12 @@ virRegisterNetworkDriver; virRegisterNodeDeviceDriver; virRegisterNWFilterDriver; virRegisterSecretDriver; +virRegisterStateDriver; virRegisterStorageDriver; +virStateCleanup; +virStateInitialize; +virStateReload; +virStateStop; # locking/domain_lock.h diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 3cc603f..0ad0531 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -164,7 +164,6 @@ static void make_nonnull_domain_snapshot(remote_nonnull_domain_snapshot *snapsho /* Helper functions for remoteOpen. */ static char *get_transport_from_scheme(char *scheme); -#ifdef WITH_LIBVIRTD static int remoteStateInitialize(bool privileged ATTRIBUTE_UNUSED, virStateInhibitCallback callback ATTRIBUTE_UNUSED, @@ -176,7 +175,6 @@ remoteStateInitialize(bool privileged ATTRIBUTE_UNUSED, inside_daemon = true; return 0; } -#endif static void @@ -8433,12 +8431,10 @@ static virNWFilterDriver nwfilter_driver = { }; -#ifdef WITH_LIBVIRTD static virStateDriver state_driver = { .name = "Remote", .stateInitialize = remoteStateInitialize, }; -#endif /** remoteRegister: @@ -8464,10 +8460,8 @@ remoteRegister(void) return -1; if (virRegisterNWFilterDriver(&nwfilter_driver) < 0) return -1; -#ifdef WITH_LIBVIRTD if (virRegisterStateDriver(&state_driver) < 0) return -1; -#endif return 0; } -- 2.1.0

For stateless, client side drivers, it is never correct to probe for secondary drivers. It is only ever appropriate to use the secondary driver that is associated with the hypervisor in question. As a result the ESX & HyperV drivers have both been forced to do hacks where they register no-op drivers for the ones they don't implement. For stateful, server side drivers, we always just want to use the same built-in shared driver. The exception is virtualbox which is really a stateless driver and so wants to use its own server side secondary drivers. To deal with this virtualbox has to be built as 3 separate loadable modules to allow registration to work in the right order. This can all be simplified by introducing a new struct recording the precise set of secondary drivers each hypervisor driver wants struct _virConnectDriver { virHypervisorDriverPtr hypervisorDriver; virInterfaceDriverPtr interfaceDriver; virNetworkDriverPtr networkDriver; virNodeDeviceDriverPtr nodeDeviceDriver; virNWFilterDriverPtr nwfilterDriver; virSecretDriverPtr secretDriver; virStorageDriverPtr storageDriver; }; Instead of registering the hypervisor driver, we now just register a virConnectDriver instead. This allows us to remove all probing of secondary drivers. Once we have chosen the primary driver, we immediately know the correct secondary drivers to use. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- daemon/libvirtd.c | 19 +- src/Makefile.am | 63 +------ src/bhyve/bhyve_driver.c | 14 +- src/check-driverimpls.pl | 3 +- src/datatypes.c | 12 -- src/driver-hypervisor.h | 3 - src/driver-interface.h | 9 - src/driver-network.h | 11 +- src/driver-nodedev.h | 8 +- src/driver-nwfilter.h | 13 +- src/driver-secret.h | 12 +- src/driver-storage.h | 12 +- src/driver.h | 54 +++--- src/esx/esx_device_monitor.c | 74 -------- src/esx/esx_device_monitor.h | 28 --- src/esx/esx_driver.c | 25 +-- src/esx/esx_interface_driver.c | 37 +--- src/esx/esx_interface_driver.h | 4 +- src/esx/esx_network_driver.c | 37 +--- src/esx/esx_network_driver.h | 4 +- src/esx/esx_nwfilter_driver.c | 74 -------- src/esx/esx_nwfilter_driver.h | 28 --- src/esx/esx_secret_driver.c | 72 ------- src/esx/esx_secret_driver.h | 27 --- src/esx/esx_storage_driver.c | 37 +--- src/esx/esx_storage_driver.h | 4 +- src/hyperv/hyperv_device_monitor.c | 71 ------- src/hyperv/hyperv_device_monitor.h | 28 --- src/hyperv/hyperv_driver.c | 25 +-- src/hyperv/hyperv_interface_driver.c | 71 ------- src/hyperv/hyperv_interface_driver.h | 28 --- src/hyperv/hyperv_network_driver.c | 71 ------- src/hyperv/hyperv_network_driver.h | 28 --- src/hyperv/hyperv_nwfilter_driver.c | 71 ------- src/hyperv/hyperv_nwfilter_driver.h | 28 --- src/hyperv/hyperv_secret_driver.c | 71 ------- src/hyperv/hyperv_secret_driver.h | 28 --- src/hyperv/hyperv_storage_driver.c | 71 ------- src/hyperv/hyperv_storage_driver.h | 28 --- src/interface/interface_backend_netcf.c | 26 +-- src/interface/interface_backend_udev.c | 25 +-- src/libvirt.c | 323 ++++++++++++++------------------ src/libvirt_private.syms | 14 +- src/libxl/libxl_driver.c | 10 +- src/lxc/lxc_driver.c | 10 +- src/network/bridge_driver.c | 25 +-- src/node_device/node_device_driver.c | 10 +- src/node_device/node_device_hal.c | 26 +-- src/node_device/node_device_udev.c | 23 +-- src/nwfilter/nwfilter_driver.c | 25 +-- src/openvz/openvz_driver.c | 12 +- src/phyp/phyp_driver.c | 64 +------ src/qemu/qemu_driver.c | 10 +- src/remote/remote_driver.c | 152 ++------------- src/secret/secret_driver.c | 25 +-- src/storage/storage_driver.c | 25 +-- src/test/test_driver.c | 156 ++------------- src/uml/uml_driver.c | 10 +- src/vbox/vbox_common.c | 1 - src/vbox/vbox_driver.c | 47 ++--- src/vbox/vbox_network.c | 32 ---- src/vbox/vbox_storage.c | 30 --- src/vmware/vmware_driver.c | 12 +- src/xen/xen_driver.c | 11 +- src/xenapi/xenapi_driver.c | 10 +- tests/qemuxml2argvtest.c | 17 -- tests/virdrivermoduletest.c | 18 +- 67 files changed, 336 insertions(+), 2116 deletions(-) delete mode 100644 src/esx/esx_device_monitor.c delete mode 100644 src/esx/esx_device_monitor.h delete mode 100644 src/esx/esx_nwfilter_driver.c delete mode 100644 src/esx/esx_nwfilter_driver.h delete mode 100644 src/esx/esx_secret_driver.c delete mode 100644 src/esx/esx_secret_driver.h delete mode 100644 src/hyperv/hyperv_device_monitor.c delete mode 100644 src/hyperv/hyperv_device_monitor.h delete mode 100644 src/hyperv/hyperv_interface_driver.c delete mode 100644 src/hyperv/hyperv_interface_driver.h delete mode 100644 src/hyperv/hyperv_network_driver.c delete mode 100644 src/hyperv/hyperv_network_driver.h delete mode 100644 src/hyperv/hyperv_nwfilter_driver.c delete mode 100644 src/hyperv/hyperv_nwfilter_driver.h delete mode 100644 src/hyperv/hyperv_secret_driver.c delete mode 100644 src/hyperv/hyperv_secret_driver.h delete mode 100644 src/hyperv/hyperv_storage_driver.c delete mode 100644 src/hyperv/hyperv_storage_driver.h diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index b7f82c5..5ccfcdd 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -334,12 +334,7 @@ static void daemonInitialize(void) * priority when calling virStateInitialize. We must register the * network, storage and nodedev drivers before any stateful domain * driver, since their resources must be auto-started before any - * domains can be auto-started. Moreover, some stateless drivers - * implement their own subdrivers (e.g. the vbox driver has its - * own network and storage subdriers) which need to have higher - * priority. Otherwise, when connecting to such driver the generic - * subdriver may be opened instead of the one corresponding to the - * stateless driver. + * domains can be auto-started. */ #ifdef WITH_DRIVER_MODULES /* We don't care if any of these fail, because the whole point @@ -347,18 +342,12 @@ static void daemonInitialize(void) * If they try to open a connection for a module that * is not loaded they'll get a suitable error at that point */ -# ifdef WITH_VBOX - virDriverLoadModule("vbox_network"); -# endif # ifdef WITH_NETWORK virDriverLoadModule("network"); # endif # ifdef WITH_INTERFACE virDriverLoadModule("interface"); # endif -# ifdef WITH_VBOX - virDriverLoadModule("vbox_storage"); -# endif # ifdef WITH_STORAGE virDriverLoadModule("storage"); # endif @@ -393,18 +382,12 @@ static void daemonInitialize(void) virDriverLoadModule("bhyve"); # endif #else -# ifdef WITH_VBOX - vboxNetworkRegister(); -# endif # ifdef WITH_NETWORK networkRegister(); # endif # ifdef WITH_INTERFACE interfaceRegister(); # endif -# ifdef WITH_VBOX - vboxStorageRegister(); -# endif # ifdef WITH_STORAGE storageRegister(); # endif diff --git a/src/Makefile.am b/src/Makefile.am index 1e21279..b41c6d4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -539,8 +539,6 @@ DRIVER_SOURCE_FILES = \ $(TEST_DRIVER_SOURCES) \ $(UML_DRIVER_SOURCES) \ $(VBOX_DRIVER_SOURCES) \ - $(VBOX_NETWORK_DRIVER_SOURCES) \ - $(VBOX_STORAGE_DRIVER_SOURCES) \ vbox/vbox_tmpl.c \ $(VMWARE_DRIVER_SOURCES) \ $(XEN_DRIVER_SOURCES) \ @@ -701,15 +699,9 @@ VBOX_DRIVER_SOURCES = \ vbox/vbox_V4_3_4.c vbox/vbox_CAPI_v4_3_4.h \ vbox/vbox_common.c vbox/vbox_common.h \ vbox/vbox_uniformed_api.h \ - vbox/vbox_get_driver.h - -VBOX_NETWORK_DRIVER_SOURCES = \ - vbox/vbox_driver.c vbox/vbox_driver.h \ - vbox/vbox_network.c vbox/vbox_get_driver.h - -VBOX_STORAGE_DRIVER_SOURCES = \ - vbox/vbox_driver.c vbox/vbox_driver.h \ - vbox/vbox_storage.c vbox/vbox_get_driver.h + vbox/vbox_get_driver.h \ + vbox/vbox_network.c \ + vbox/vbox_storage.c VBOX_DRIVER_EXTRA_DIST = \ vbox/vbox_tmpl.c vbox/README \ @@ -760,10 +752,7 @@ ESX_DRIVER_SOURCES = \ esx/esx_storage_driver.c esx/esx_storage_driver.h \ esx/esx_storage_backend_vmfs.c esx/esx_storage_backend_vmfs.h \ esx/esx_storage_backend_iscsi.c esx/esx_storage_backend_iscsi.h \ - esx/esx_device_monitor.c esx/esx_device_monitor.h \ - esx/esx_secret_driver.c esx/esx_secret_driver.h \ esx/esx_stream.c esx/esx_stream.h \ - esx/esx_nwfilter_driver.c esx/esx_nwfilter_driver.h \ esx/esx_util.c esx/esx_util.h \ esx/esx_vi.c esx/esx_vi.h \ esx/esx_vi_methods.c esx/esx_vi_methods.h \ @@ -791,12 +780,6 @@ ESX_DRIVER_EXTRA_DIST = \ HYPERV_DRIVER_SOURCES = \ hyperv/hyperv_private.h \ hyperv/hyperv_driver.c hyperv/hyperv_driver.h \ - hyperv/hyperv_interface_driver.c hyperv/hyperv_interface_driver.h \ - hyperv/hyperv_network_driver.c hyperv/hyperv_network_driver.h \ - hyperv/hyperv_storage_driver.c hyperv/hyperv_storage_driver.h \ - hyperv/hyperv_device_monitor.c hyperv/hyperv_device_monitor.h \ - hyperv/hyperv_secret_driver.c hyperv/hyperv_secret_driver.h \ - hyperv/hyperv_nwfilter_driver.c hyperv/hyperv_nwfilter_driver.h \ hyperv/hyperv_util.c hyperv/hyperv_util.h \ hyperv/hyperv_wmi.c hyperv/hyperv_wmi.h \ hyperv/hyperv_wmi_classes.c hyperv/hyperv_wmi_classes.h \ @@ -1180,33 +1163,19 @@ endif WITH_VMWARE if WITH_VBOX noinst_LTLIBRARIES += \ - libvirt_driver_vbox_impl.la \ - libvirt_driver_vbox_network_impl.la \ - libvirt_driver_vbox_storage_impl.la + libvirt_driver_vbox_impl.la libvirt_driver_vbox_la_SOURCES = libvirt_driver_vbox_la_LIBADD = libvirt_driver_vbox_impl.la -libvirt_driver_vbox_network_la_SOURCES = -libvirt_driver_vbox_network_la_LIBADD = libvirt_driver_vbox_network_impl.la -libvirt_driver_vbox_storage_la_SOURCES = -libvirt_driver_vbox_storage_la_LIBADD = libvirt_driver_vbox_storage_impl.la if WITH_DRIVER_MODULES mod_LTLIBRARIES += \ - libvirt_driver_vbox.la \ - libvirt_driver_vbox_network.la \ - libvirt_driver_vbox_storage.la + libvirt_driver_vbox.la libvirt_driver_vbox_la_LIBADD += ../gnulib/lib/libgnu.la libvirt_driver_vbox_la_LDFLAGS = -module -avoid-version $(AM_LDFLAGS) -libvirt_driver_vbox_network_la_LIBADD += ../gnulib/lib/libgnu.la -libvirt_driver_vbox_network_la_LDFLAGS = -module -avoid-version $(AM_LDFLAGS) -libvirt_driver_vbox_storage_la_LIBADD += ../gnulib/lib/libgnu.la -libvirt_driver_vbox_storage_la_LDFLAGS = -module -avoid-version $(AM_LDFLAGS) else ! WITH_DRIVER_MODULES noinst_LTLIBRARIES += libvirt_driver_vbox.la # GPLv2-only license requries that it be linked into # libvirtd and *not* libvirt.so #libvirt_la_BUILT_LIBADD += libvirt_driver_vbox.la -libvirt_driver_vbox_la_LIBADD += libvirt_driver_vbox_network_impl.la \ - libvirt_driver_vbox_storage_impl.la endif ! WITH_DRIVER_MODULES libvirt_driver_vbox_impl_la_CFLAGS = \ @@ -1218,28 +1187,6 @@ libvirt_driver_vbox_impl_la_LIBADD = $(DLOPEN_LIBS) \ $(MSCOM_LIBS) \ $(LIBXML_LIBS) libvirt_driver_vbox_impl_la_SOURCES = $(VBOX_DRIVER_SOURCES) - -libvirt_driver_vbox_network_impl_la_CFLAGS = \ - -I$(srcdir)/conf \ - $(AM_CFLAGS) \ - -DVBOX_NETWORK_DRIVER -libvirt_driver_vbox_network_impl_la_LDFLAGS = $(AM_LDFLAGS) -libvirt_driver_vbox_network_impl_la_LIBADD = $(DLOPEN_LIBS) \ - $(MSCOM_LIBS) \ - $(LIBXML_LIBS) \ - libvirt_driver_vbox_impl.la -libvirt_driver_vbox_network_impl_la_SOURCES = $(VBOX_NETWORK_DRIVER_SOURCES) - -libvirt_driver_vbox_storage_impl_la_CFLAGS = \ - -I$(srcdir)/conf \ - $(AM_CFLAGS) \ - -DVBOX_STORAGE_DRIVER -libvirt_driver_vbox_storage_impl_la_LDFLAGS = $(AM_LDFLAGS) -libvirt_driver_vbox_storage_impl_la_LIBADD = $(DLOPEN_LIBS) \ - $(MSCOM_LIBS) \ - $(LIBXML_LIBS) \ - libvirt_driver_vbox_impl.la -libvirt_driver_vbox_storage_impl_la_SOURCES = $(VBOX_STORAGE_DRIVER_SOURCES) endif WITH_VBOX if WITH_XENAPI diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index 8264ad8..56cc8ab 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -1430,8 +1430,7 @@ bhyveConnectDomainEventDeregisterAny(virConnectPtr conn, return 0; } -static virHypervisorDriver bhyveDriver = { - .no = VIR_DRV_BHYVE, +static virHypervisorDriver bhyveHypervisorDriver = { .name = "bhyve", .connectOpen = bhyveConnectOpen, /* 1.2.2 */ .connectClose = bhyveConnectClose, /* 1.2.2 */ @@ -1480,6 +1479,10 @@ static virHypervisorDriver bhyveDriver = { }; +static virConnectDriver bhyveConnectDriver = { + .hypervisorDriver = &bhyveHypervisorDriver, +}; + static virStateDriver bhyveStateDriver = { .name = "bhyve", .stateInitialize = bhyveStateInitialize, @@ -1490,9 +1493,10 @@ static virStateDriver bhyveStateDriver = { int bhyveRegister(void) { - if (virRegisterHypervisorDriver(&bhyveDriver) < 0) + if (virRegisterConnectDriver(&bhyveConnectDriver, + true) < 0) return -1; - if (virRegisterStateDriver(&bhyveStateDriver) < 0) + if (virRegisterStateDriver(&bhyveStateDriver) < 0) return -1; - return 0; + return 0; } diff --git a/src/check-driverimpls.pl b/src/check-driverimpls.pl index 17e2b48..e320558 100755 --- a/src/check-driverimpls.pl +++ b/src/check-driverimpls.pl @@ -69,7 +69,8 @@ while (<>) { } } elsif (/^(?:static\s+)?(vir(?:\w+)?Driver)\s+/) { next if $1 eq "virNWFilterCallbackDriver" || - $1 eq "virNWFilterTechDriver"; + $1 eq "virNWFilterTechDriver" || + $1 eq "virConnectDriver"; $intable = 1; $table = $1; } diff --git a/src/datatypes.c b/src/datatypes.c index b4f6765..1afaf00 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -138,18 +138,6 @@ virConnectDispose(void *obj) { virConnectPtr conn = obj; - if (conn->networkDriver) - conn->networkDriver->networkClose(conn); - if (conn->interfaceDriver) - conn->interfaceDriver->interfaceClose(conn); - if (conn->storageDriver) - conn->storageDriver->storageClose(conn); - if (conn->nodeDeviceDriver) - conn->nodeDeviceDriver->nodeDeviceClose(conn); - if (conn->secretDriver) - conn->secretDriver->secretClose(conn); - if (conn->nwfilterDriver) - conn->nwfilterDriver->nwfilterClose(conn); if (conn->driver) conn->driver->connectClose(conn); diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h index a1d2a0a..a1198ad 100644 --- a/src/driver-hypervisor.h +++ b/src/driver-hypervisor.h @@ -33,7 +33,6 @@ typedef virDrvOpenStatus typedef int (*virDrvConnectClose)(virConnectPtr conn); - typedef int (*virDrvConnectSupportsFeature)(virConnectPtr conn, int feature); @@ -1185,13 +1184,11 @@ typedef virHypervisorDriver *virHypervisorDriverPtr; * entry points for it. * * All drivers must support the following fields/methods: - * - no * - name * - open * - close */ struct _virHypervisorDriver { - int no; /* the number virDrvNo */ const char *name; /* the name of the driver */ virDrvConnectOpen connectOpen; virDrvConnectClose connectClose; diff --git a/src/driver-interface.h b/src/driver-interface.h index eb9b1ad..3f05a93 100644 --- a/src/driver-interface.h +++ b/src/driver-interface.h @@ -25,9 +25,6 @@ # error "Don't include this file directly, only use driver.h" # endif -typedef virDrvConnectOpen virDrvInterfaceOpen; -typedef virDrvConnectClose virDrvInterfaceClose; - typedef int (*virDrvConnectNumOfInterfaces)(virConnectPtr conn); @@ -100,15 +97,9 @@ typedef virInterfaceDriver *virInterfaceDriverPtr; * * Structure associated to a network interface driver, defining the various * entry points for it. - * - * All drivers must support the following fields/methods: - * - open - * - close */ struct _virInterfaceDriver { const char *name; /* the name of the driver */ - virDrvInterfaceOpen interfaceOpen; - virDrvInterfaceClose interfaceClose; virDrvConnectNumOfInterfaces connectNumOfInterfaces; virDrvConnectListInterfaces connectListInterfaces; virDrvConnectNumOfDefinedInterfaces connectNumOfDefinedInterfaces; diff --git a/src/driver-network.h b/src/driver-network.h index 9ede53c..e65117c 100644 --- a/src/driver-network.h +++ b/src/driver-network.h @@ -25,9 +25,6 @@ # error "Don't include this file directly, only use driver.h" # endif -typedef virDrvConnectOpen virDrvNetworkOpen; -typedef virDrvConnectClose virDrvNetworkClose; - typedef int (*virDrvConnectNumOfNetworks)(virConnectPtr conn); @@ -129,15 +126,9 @@ typedef virNetworkDriver *virNetworkDriverPtr; * * Structure associated to a network virtualization driver, defining the various * entry points for it. - * - * All drivers must support the following fields/methods: - * - open - * - close */ struct _virNetworkDriver { - const char * name; /* the name of the driver */ - virDrvNetworkOpen networkOpen; - virDrvNetworkClose networkClose; + const char *name; /* the name of the driver */ virDrvConnectNumOfNetworks connectNumOfNetworks; virDrvConnectListNetworks connectListNetworks; virDrvConnectNumOfDefinedNetworks connectNumOfDefinedNetworks; diff --git a/src/driver-nodedev.h b/src/driver-nodedev.h index 8d1c8a9..e846612 100644 --- a/src/driver-nodedev.h +++ b/src/driver-nodedev.h @@ -25,10 +25,6 @@ # error "Don't include this file directly, only use driver.h" # endif -typedef virDrvConnectOpen virDrvNodeDeviceOpen; -typedef virDrvConnectClose virDrvNodeDeviceClose; - - typedef int (*virDrvNodeNumOfDevices)(virConnectPtr conn, const char *cap, @@ -92,9 +88,7 @@ typedef virNodeDeviceDriver *virNodeDeviceDriverPtr; * */ struct _virNodeDeviceDriver { - const char * name; /* the name of the driver */ - virDrvNodeDeviceOpen nodeDeviceOpen; - virDrvNodeDeviceClose nodeDeviceClose; + const char *name; /* the name of the driver */ virDrvNodeNumOfDevices nodeNumOfDevices; virDrvNodeListDevices nodeListDevices; virDrvConnectListAllNodeDevices connectListAllNodeDevices; diff --git a/src/driver-nwfilter.h b/src/driver-nwfilter.h index 502700f..cb49542 100644 --- a/src/driver-nwfilter.h +++ b/src/driver-nwfilter.h @@ -25,11 +25,6 @@ # error "Don't include this file directly, only use driver.h" # endif - -typedef virDrvConnectOpen virDrvNWFilterOpen; -typedef virDrvConnectClose virDrvNWFilterClose; - - typedef int (*virDrvConnectNumOfNWFilters)(virConnectPtr conn); @@ -71,15 +66,9 @@ typedef virNWFilterDriver *virNWFilterDriverPtr; * * Structure associated to a network filter driver, defining the various * entry points for it. - * - * All drivers must support the following fields/methods: - * - open - * - close */ struct _virNWFilterDriver { - const char * name; /* the name of the driver */ - virDrvNWFilterOpen nwfilterOpen; - virDrvNWFilterClose nwfilterClose; + const char *name; /* the name of the driver */ virDrvConnectNumOfNWFilters connectNumOfNWFilters; virDrvConnectListNWFilters connectListNWFilters; virDrvConnectListAllNWFilters connectListAllNWFilters; diff --git a/src/driver-secret.h b/src/driver-secret.h index d82e7df..c39e0d7 100644 --- a/src/driver-secret.h +++ b/src/driver-secret.h @@ -31,10 +31,6 @@ enum { VIR_SECRET_GET_VALUE_INTERNAL_CALL = 1 << 0, }; -typedef virDrvConnectOpen virDrvSecretOpen; -typedef virDrvConnectClose virDrvSecretClose; - - typedef virSecretPtr (*virDrvSecretLookupByUUID)(virConnectPtr conn, const unsigned char *uuid); @@ -89,15 +85,9 @@ typedef virSecretDriver *virSecretDriverPtr; * * Structure associated to a driver for storing secrets, defining the various * entry points for it. - * - * All drivers must support the following fields/methods: - * - open - * - close */ struct _virSecretDriver { - const char *name; - virDrvSecretOpen secretOpen; - virDrvSecretClose secretClose; + const char *name; /* the name of the driver */ virDrvConnectNumOfSecrets connectNumOfSecrets; virDrvConnectListSecrets connectListSecrets; virDrvConnectListAllSecrets connectListAllSecrets; diff --git a/src/driver-storage.h b/src/driver-storage.h index 4848dd3..0489647 100644 --- a/src/driver-storage.h +++ b/src/driver-storage.h @@ -25,10 +25,6 @@ # error "Don't include this file directly, only use driver.h" # endif -typedef virDrvConnectOpen virDrvStorageOpen; -typedef virDrvConnectClose virDrvStorageClose; - - typedef int (*virDrvConnectNumOfStoragePools)(virConnectPtr conn); @@ -210,15 +206,9 @@ typedef virStorageDriver *virStorageDriverPtr; * * Structure associated to a storage driver, defining the various * entry points for it. - * - * All drivers must support the following fields/methods: - * - open - * - close */ struct _virStorageDriver { - const char * name; /* the name of the driver */ - virDrvStorageOpen storageOpen; - virDrvStorageClose storageClose; + const char *name; /* the name of the driver */ virDrvConnectNumOfStoragePools connectNumOfStoragePools; virDrvConnectListStoragePools connectListStoragePools; virDrvConnectNumOfDefinedStoragePools connectNumOfDefinedStoragePools; diff --git a/src/driver.h b/src/driver.h index 5b7862b..e4e382b 100644 --- a/src/driver.h +++ b/src/driver.h @@ -27,28 +27,6 @@ # include "internal.h" # include "libvirt_internal.h" # include "viruri.h" -/* - * List of registered drivers numbers - */ -typedef enum { - VIR_DRV_XEN_UNIFIED = 1, - VIR_DRV_TEST = 2, - VIR_DRV_QEMU = 3, - VIR_DRV_REMOTE = 4, - VIR_DRV_OPENVZ = 5, - VIR_DRV_LXC = 6, - VIR_DRV_UML = 7, - VIR_DRV_VBOX = 8, - VIR_DRV_ONE = 9, - VIR_DRV_ESX = 10, - VIR_DRV_PHYP = 11, - VIR_DRV_XENAPI = 12, - VIR_DRV_VMWARE = 13, - VIR_DRV_LIBXL = 14, - VIR_DRV_HYPERV = 15, - VIR_DRV_PARALLELS = 16, - VIR_DRV_BHYVE = 17, -} virDrvNo; /* Status codes returned from driver open call. */ @@ -97,15 +75,29 @@ typedef enum { # undef __VIR_DRIVER_H_INCLUDES___ -int virRegisterHypervisorDriver(virHypervisorDriverPtr) ATTRIBUTE_RETURN_CHECK; -int virRegisterNetworkDriver(virNetworkDriverPtr) ATTRIBUTE_RETURN_CHECK; -int virRegisterInterfaceDriver(virInterfaceDriverPtr) ATTRIBUTE_RETURN_CHECK; -int virRegisterNetworkDriver(virNetworkDriverPtr) ATTRIBUTE_RETURN_CHECK; -int virRegisterNodeDeviceDriver(virNodeDeviceDriverPtr) ATTRIBUTE_RETURN_CHECK; -int virRegisterNWFilterDriver(virNWFilterDriverPtr) ATTRIBUTE_RETURN_CHECK; -int virRegisterSecretDriver(virSecretDriverPtr) ATTRIBUTE_RETURN_CHECK; -int virRegisterStateDriver(virStateDriverPtr) ATTRIBUTE_RETURN_CHECK; -int virRegisterStorageDriver(virStorageDriverPtr) ATTRIBUTE_RETURN_CHECK; +typedef struct _virConnectDriver virConnectDriver; +typedef virConnectDriver *virConnectDriverPtr; + +struct _virConnectDriver { + virHypervisorDriverPtr hypervisorDriver; + virInterfaceDriverPtr interfaceDriver; + virNetworkDriverPtr networkDriver; + virNodeDeviceDriverPtr nodeDeviceDriver; + virNWFilterDriverPtr nwfilterDriver; + virSecretDriverPtr secretDriver; + virStorageDriverPtr storageDriver; +}; + +int virRegisterConnectDriver(virConnectDriverPtr driver, + bool setSharedDrivers) ATTRIBUTE_RETURN_CHECK; +int virRegisterStateDriver(virStateDriverPtr driver) ATTRIBUTE_RETURN_CHECK; + +int virSetSharedInterfaceDriver(virInterfaceDriverPtr driver) ATTRIBUTE_RETURN_CHECK; +int virSetSharedNetworkDriver(virNetworkDriverPtr driver) ATTRIBUTE_RETURN_CHECK; +int virSetSharedNodeDeviceDriver(virNodeDeviceDriverPtr driver) ATTRIBUTE_RETURN_CHECK; +int virSetSharedNWFilterDriver(virNWFilterDriverPtr driver) ATTRIBUTE_RETURN_CHECK; +int virSetSharedSecretDriver(virSecretDriverPtr driver) ATTRIBUTE_RETURN_CHECK; +int virSetSharedStorageDriver(virStorageDriverPtr driver) ATTRIBUTE_RETURN_CHECK; void *virDriverLoadModule(const char *name); diff --git a/src/esx/esx_device_monitor.c b/src/esx/esx_device_monitor.c deleted file mode 100644 index bf71145..0000000 --- a/src/esx/esx_device_monitor.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * esx_device_monitor.c: device monitor functions for managing VMware ESX - * host devices - * - * Copyright (C) 2010-2011 Red Hat, Inc. - * Copyright (C) 2010 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#include <config.h> - -#include "internal.h" -#include "viralloc.h" -#include "viruuid.h" -#include "esx_private.h" -#include "esx_device_monitor.h" -#include "esx_vi.h" -#include "esx_vi_methods.h" -#include "esx_util.h" - -#define VIR_FROM_THIS VIR_FROM_ESX - - - -static virDrvOpenStatus -esxNodeDeviceOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_ESX) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -esxNodeDeviceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - -static virNodeDeviceDriver esxNodeDeviceDriver = { - .name = "ESX", - .nodeDeviceOpen = esxNodeDeviceOpen, /* 0.7.6 */ - .nodeDeviceClose = esxNodeDeviceClose, /* 0.7.6 */ -}; - - - -int -esxDeviceRegister(void) -{ - return virRegisterNodeDeviceDriver(&esxNodeDeviceDriver); -} diff --git a/src/esx/esx_device_monitor.h b/src/esx/esx_device_monitor.h deleted file mode 100644 index 1b2795e..0000000 --- a/src/esx/esx_device_monitor.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * esx_device_monitor.h: device monitor methods for managing VMware ESX - * host devices - * - * Copyright (C) 2010 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#ifndef __ESX_DEVICE_MONITOR_H__ -# define __ESX_DEVICE_MONITOR_H__ - -int esxDeviceRegister(void); - -#endif /* __ESX_DEVICE_MONITOR_H__ */ diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index bfa1d79..6b9965f 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -37,9 +37,6 @@ #include "esx_interface_driver.h" #include "esx_network_driver.h" #include "esx_storage_driver.h" -#include "esx_device_monitor.h" -#include "esx_secret_driver.h" -#include "esx_nwfilter_driver.h" #include "esx_private.h" #include "esx_vi.h" #include "esx_vi_methods.h" @@ -5151,8 +5148,7 @@ esxConnectListAllDomains(virConnectPtr conn, #undef MATCH -static virHypervisorDriver esxDriver = { - .no = VIR_DRV_ESX, +static virHypervisorDriver esxHypervisorDriver = { .name = "ESX", .connectOpen = esxConnectOpen, /* 0.7.0 */ .connectClose = esxConnectClose, /* 0.7.0 */ @@ -5233,19 +5229,16 @@ static virHypervisorDriver esxDriver = { }; +static virConnectDriver esxConnectDriver = { + .hypervisorDriver = &esxHypervisorDriver, + .interfaceDriver = &esxInterfaceDriver, + .networkDriver = &esxNetworkDriver, + .storageDriver = &esxStorageDriver, +}; int esxRegister(void) { - if (virRegisterHypervisorDriver(&esxDriver) < 0 || - esxInterfaceRegister() < 0 || - esxNetworkRegister() < 0 || - esxStorageRegister() < 0 || - esxDeviceRegister() < 0 || - esxSecretRegister() < 0 || - esxNWFilterRegister() < 0) { - return -1; - } - - return 0; + return virRegisterConnectDriver(&esxConnectDriver, + false); } diff --git a/src/esx/esx_interface_driver.c b/src/esx/esx_interface_driver.c index 20c9361..58096e8 100644 --- a/src/esx/esx_interface_driver.c +++ b/src/esx/esx_interface_driver.c @@ -38,30 +38,6 @@ #define VIR_FROM_THIS VIR_FROM_ESX - -static virDrvOpenStatus -esxInterfaceOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_ESX) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -esxInterfaceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - static int esxConnectNumOfInterfaces(virConnectPtr conn) { @@ -282,10 +258,7 @@ esxInterfaceIsActive(virInterfacePtr iface ATTRIBUTE_UNUSED) -static virInterfaceDriver esxInterfaceDriver = { - .name = "ESX", - .interfaceOpen = esxInterfaceOpen, /* 0.7.6 */ - .interfaceClose = esxInterfaceClose, /* 0.7.6 */ +virInterfaceDriver esxInterfaceDriver = { .connectNumOfInterfaces = esxConnectNumOfInterfaces, /* 0.10.0 */ .connectListInterfaces = esxConnectListInterfaces, /* 0.10.0 */ .connectNumOfDefinedInterfaces = esxConnectNumOfDefinedInterfaces, /* 0.10.0 */ @@ -295,11 +268,3 @@ static virInterfaceDriver esxInterfaceDriver = { .interfaceGetXMLDesc = esxInterfaceGetXMLDesc, /* 0.10.0 */ .interfaceIsActive = esxInterfaceIsActive, /* 0.10.0 */ }; - - - -int -esxInterfaceRegister(void) -{ - return virRegisterInterfaceDriver(&esxInterfaceDriver); -} diff --git a/src/esx/esx_interface_driver.h b/src/esx/esx_interface_driver.h index cf0c4bd..dfe245b 100644 --- a/src/esx/esx_interface_driver.h +++ b/src/esx/esx_interface_driver.h @@ -23,6 +23,8 @@ #ifndef __ESX_INTERFACE_DRIVER_H__ # define __ESX_INTERFACE_DRIVER_H__ -int esxInterfaceRegister(void); +# include "driver.h" + +extern virInterfaceDriver esxInterfaceDriver; #endif /* __ESX_INTERFACE_DRIVER_H__ */ diff --git a/src/esx/esx_network_driver.c b/src/esx/esx_network_driver.c index 8defcd6..6793b80 100644 --- a/src/esx/esx_network_driver.c +++ b/src/esx/esx_network_driver.c @@ -44,30 +44,6 @@ verify(MD5_DIGEST_SIZE == VIR_UUID_BUFLEN); - -static virDrvOpenStatus -esxNetworkOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_ESX) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -esxNetworkClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - static int esxConnectNumOfNetworks(virConnectPtr conn) { @@ -881,10 +857,7 @@ esxNetworkIsPersistent(virNetworkPtr network ATTRIBUTE_UNUSED) -static virNetworkDriver esxNetworkDriver = { - .name = "ESX", - .networkOpen = esxNetworkOpen, /* 0.7.6 */ - .networkClose = esxNetworkClose, /* 0.7.6 */ +virNetworkDriver esxNetworkDriver = { .connectNumOfNetworks = esxConnectNumOfNetworks, /* 0.10.0 */ .connectListNetworks = esxConnectListNetworks, /* 0.10.0 */ .connectNumOfDefinedNetworks = esxConnectNumOfDefinedNetworks, /* 0.10.0 */ @@ -899,11 +872,3 @@ static virNetworkDriver esxNetworkDriver = { .networkIsActive = esxNetworkIsActive, /* 0.10.0 */ .networkIsPersistent = esxNetworkIsPersistent, /* 0.10.0 */ }; - - - -int -esxNetworkRegister(void) -{ - return virRegisterNetworkDriver(&esxNetworkDriver); -} diff --git a/src/esx/esx_network_driver.h b/src/esx/esx_network_driver.h index 7a8a225..d5bf0dd 100644 --- a/src/esx/esx_network_driver.h +++ b/src/esx/esx_network_driver.h @@ -23,6 +23,8 @@ #ifndef __ESX_NETWORK_DRIVER_H__ # define __ESX_NETWORK_DRIVER_H__ -int esxNetworkRegister(void); +# include "driver.h" + +extern virNetworkDriver esxNetworkDriver; #endif /* __ESX_NETWORK_DRIVER_H__ */ diff --git a/src/esx/esx_nwfilter_driver.c b/src/esx/esx_nwfilter_driver.c deleted file mode 100644 index 705035c..0000000 --- a/src/esx/esx_nwfilter_driver.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * esx_nwfilter_driver.c: nwfilter driver functions for managing VMware ESX - * firewall rules - * - * Copyright (C) 2011 Red Hat, Inc. - * Copyright (C) 2010 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#include <config.h> - -#include "internal.h" -#include "viralloc.h" -#include "viruuid.h" -#include "esx_private.h" -#include "esx_nwfilter_driver.h" -#include "esx_vi.h" -#include "esx_vi_methods.h" -#include "esx_util.h" - -#define VIR_FROM_THIS VIR_FROM_ESX - - - -static virDrvOpenStatus -esxNWFilterOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_ESX) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -esxNWFilterClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - -static virNWFilterDriver esxNWFilterDriver = { - .name = "ESX", - .nwfilterOpen = esxNWFilterOpen, /* 0.8.1 */ - .nwfilterClose = esxNWFilterClose, /* 0.8.1 */ -}; - - - -int -esxNWFilterRegister(void) -{ - return virRegisterNWFilterDriver(&esxNWFilterDriver); -} diff --git a/src/esx/esx_nwfilter_driver.h b/src/esx/esx_nwfilter_driver.h deleted file mode 100644 index 4fa88c3..0000000 --- a/src/esx/esx_nwfilter_driver.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * esx_nwfilter_driver.h: nwfilter driver functions for managing VMware ESX - * firewall rules - * - * Copyright (C) 2010 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#ifndef __ESX_NWFILTER_DRIVER_H__ -# define __ESX_NWFILTER_DRIVER_H__ - -int esxNWFilterRegister(void); - -#endif /* __ESX_NWFILTER_DRIVER_H__ */ diff --git a/src/esx/esx_secret_driver.c b/src/esx/esx_secret_driver.c deleted file mode 100644 index de398af..0000000 --- a/src/esx/esx_secret_driver.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * esx_secret_driver.c: secret driver functions for VMware ESX secret manipulation - * - * Copyright (C) 2010-2011 Red Hat, Inc. - * Copyright (C) 2010 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#include <config.h> - -#include "internal.h" -#include "viralloc.h" -#include "viruuid.h" -#include "esx_private.h" -#include "esx_secret_driver.h" -#include "esx_vi.h" -#include "esx_vi_methods.h" -#include "esx_util.h" - -#define VIR_FROM_THIS VIR_FROM_ESX - - - -static virDrvOpenStatus -esxSecretOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_ESX) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -esxSecretClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - -static virSecretDriver esxSecretDriver = { - .name = "ESX", - .secretOpen = esxSecretOpen, /* 0.7.6 */ - .secretClose = esxSecretClose, /* 0.7.6 */ -}; - - - -int -esxSecretRegister(void) -{ - return virRegisterSecretDriver(&esxSecretDriver); -} diff --git a/src/esx/esx_secret_driver.h b/src/esx/esx_secret_driver.h deleted file mode 100644 index 07f8b13..0000000 --- a/src/esx/esx_secret_driver.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * esx_secret_driver.h: secret driver functions for VMware ESX secret manipulation - * - * Copyright (C) 2010 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#ifndef __ESX_SECRET_DRIVER_H__ -# define __ESX_SECRET_DRIVER_H__ - -int esxSecretRegister(void); - -#endif /* __ESX_SECRET_DRIVER_H__ */ diff --git a/src/esx/esx_storage_driver.c b/src/esx/esx_storage_driver.c index b8e2fda..e692e86 100644 --- a/src/esx/esx_storage_driver.c +++ b/src/esx/esx_storage_driver.c @@ -52,30 +52,6 @@ static virStorageDriverPtr backends[] = { }; - -static virDrvOpenStatus -esxStorageOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_ESX) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -esxStorageClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - static int esxConnectNumOfStoragePools(virConnectPtr conn) { @@ -541,10 +517,7 @@ esxStoragePoolIsPersistent(virStoragePoolPtr pool ATTRIBUTE_UNUSED) -static virStorageDriver esxStorageDriver = { - .name = "ESX", - .storageOpen = esxStorageOpen, /* 0.7.6 */ - .storageClose = esxStorageClose, /* 0.7.6 */ +virStorageDriver esxStorageDriver = { .connectNumOfStoragePools = esxConnectNumOfStoragePools, /* 0.8.2 */ .connectListStoragePools = esxConnectListStoragePools, /* 0.8.2 */ .connectNumOfDefinedStoragePools = esxConnectNumOfDefinedStoragePools, /* 0.8.2 */ @@ -572,11 +545,3 @@ static virStorageDriver esxStorageDriver = { .storagePoolIsActive = esxStoragePoolIsActive, /* 0.8.2 */ .storagePoolIsPersistent = esxStoragePoolIsPersistent, /* 0.8.2 */ }; - - - -int -esxStorageRegister(void) -{ - return virRegisterStorageDriver(&esxStorageDriver); -} diff --git a/src/esx/esx_storage_driver.h b/src/esx/esx_storage_driver.h index 871e59c..eee3c5c 100644 --- a/src/esx/esx_storage_driver.h +++ b/src/esx/esx_storage_driver.h @@ -23,6 +23,8 @@ #ifndef __ESX_STORAGE_DRIVER_H__ # define __ESX_STORAGE_DRIVER_H__ -int esxStorageRegister(void); +# include "driver.h" + +extern virStorageDriver esxStorageDriver; #endif /* __ESX_STORAGE_DRIVER_H__ */ diff --git a/src/hyperv/hyperv_device_monitor.c b/src/hyperv/hyperv_device_monitor.c deleted file mode 100644 index c24c384..0000000 --- a/src/hyperv/hyperv_device_monitor.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * hyperv_device_monitor.c: device monitor functions for managing - * Microsoft Hyper-V host devices - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#include <config.h> - -#include "internal.h" -#include "virerror.h" -#include "datatypes.h" -#include "viralloc.h" -#include "viruuid.h" -#include "hyperv_device_monitor.h" - -#define VIR_FROM_THIS VIR_FROM_HYPERV - - - -static virDrvOpenStatus -hypervNodeDeviceOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_HYPERV) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -hypervNodeDeviceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - -static virNodeDeviceDriver hypervNodeDeviceDriver = { - "Hyper-V", - .nodeDeviceOpen = hypervNodeDeviceOpen, /* 0.9.5 */ - .nodeDeviceClose = hypervNodeDeviceClose, /* 0.9.5 */ -}; - - - -int -hypervDeviceRegister(void) -{ - return virRegisterNodeDeviceDriver(&hypervNodeDeviceDriver); -} diff --git a/src/hyperv/hyperv_device_monitor.h b/src/hyperv/hyperv_device_monitor.h deleted file mode 100644 index 36459b6..0000000 --- a/src/hyperv/hyperv_device_monitor.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * hyperv_device_monitor.h: device monitor functions for managing - * Microsoft Hyper-V host devices - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#ifndef __HYPERV_DEVICE_MONITOR_H__ -# define __HYPERV_DEVICE_MONITOR_H__ - -int hypervDeviceRegister(void); - -#endif /* __HYPERV_DEVICE_MONITOR_H__ */ diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index be379e9..906c603 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -30,12 +30,6 @@ #include "virlog.h" #include "viruuid.h" #include "hyperv_driver.h" -#include "hyperv_interface_driver.h" -#include "hyperv_network_driver.h" -#include "hyperv_storage_driver.h" -#include "hyperv_device_monitor.h" -#include "hyperv_secret_driver.h" -#include "hyperv_nwfilter_driver.h" #include "hyperv_private.h" #include "hyperv_util.h" #include "hyperv_wmi.h" @@ -1326,8 +1320,7 @@ hypervConnectListAllDomains(virConnectPtr conn, -static virHypervisorDriver hypervDriver = { - .no = VIR_DRV_HYPERV, +static virHypervisorDriver hypervHypervisorDriver = { .name = "Hyper-V", .connectOpen = hypervConnectOpen, /* 0.9.5 */ .connectClose = hypervConnectClose, /* 0.9.5 */ @@ -1386,22 +1379,16 @@ hypervDebugHandler(const char *message, debug_level_e level, } +static virConnectDriver hypervConnectDriver = { + .hypervisorDriver = &hypervHypervisorDriver, +}; int hypervRegister(void) { - if (virRegisterHypervisorDriver(&hypervDriver) < 0 || - hypervInterfaceRegister() < 0 || - hypervNetworkRegister() < 0 || - hypervStorageRegister() < 0 || - hypervDeviceRegister() < 0 || - hypervSecretRegister() < 0 || - hypervNWFilterRegister() < 0) { - return -1; - } - /* Forward openwsman errors and warnings to libvirt's logging */ debug_add_handler(hypervDebugHandler, DEBUG_LEVEL_WARNING, NULL); - return 0; + return virRegisterConnectDriver(&hypervConnectDriver, + false); } diff --git a/src/hyperv/hyperv_interface_driver.c b/src/hyperv/hyperv_interface_driver.c deleted file mode 100644 index 6529e37..0000000 --- a/src/hyperv/hyperv_interface_driver.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * hyperv_interface_driver.c: interface driver functions for managing - * Microsoft Hyper-V host interfaces - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#include <config.h> - -#include "internal.h" -#include "virerror.h" -#include "datatypes.h" -#include "viralloc.h" -#include "viruuid.h" -#include "hyperv_interface_driver.h" - -#define VIR_FROM_THIS VIR_FROM_HYPERV - - - -static virDrvOpenStatus -hypervInterfaceOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_HYPERV) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -hypervInterfaceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - -static virInterfaceDriver hypervInterfaceDriver = { - .name = "Hyper-V", - .interfaceOpen = hypervInterfaceOpen, /* 0.9.5 */ - .interfaceClose = hypervInterfaceClose, /* 0.9.5 */ -}; - - - -int -hypervInterfaceRegister(void) -{ - return virRegisterInterfaceDriver(&hypervInterfaceDriver); -} diff --git a/src/hyperv/hyperv_interface_driver.h b/src/hyperv/hyperv_interface_driver.h deleted file mode 100644 index 2ab0225..0000000 --- a/src/hyperv/hyperv_interface_driver.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * hyperv_interface_driver.h: interface driver functions for managing - * Microsoft Hyper-V host interfaces - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#ifndef __HYPERV_INTERFACE_DRIVER_H__ -# define __HYPERV_INTERFACE_DRIVER_H__ - -int hypervInterfaceRegister(void); - -#endif /* __HYPERV_INTERFACE_DRIVER_H__ */ diff --git a/src/hyperv/hyperv_network_driver.c b/src/hyperv/hyperv_network_driver.c deleted file mode 100644 index 93f3718..0000000 --- a/src/hyperv/hyperv_network_driver.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * hyperv_network_driver.c: network driver functions for managing - * Microsoft Hyper-V host networks - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#include <config.h> - -#include "internal.h" -#include "virerror.h" -#include "datatypes.h" -#include "viralloc.h" -#include "viruuid.h" -#include "hyperv_network_driver.h" - -#define VIR_FROM_THIS VIR_FROM_HYPERV - - - -static virDrvOpenStatus -hypervNetworkOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_HYPERV) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -hypervNetworkClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - -static virNetworkDriver hypervNetworkDriver = { - .name = "Hyper-V", - .networkOpen = hypervNetworkOpen, /* 0.9.5 */ - .networkClose = hypervNetworkClose, /* 0.9.5 */ -}; - - - -int -hypervNetworkRegister(void) -{ - return virRegisterNetworkDriver(&hypervNetworkDriver); -} diff --git a/src/hyperv/hyperv_network_driver.h b/src/hyperv/hyperv_network_driver.h deleted file mode 100644 index 231d94b..0000000 --- a/src/hyperv/hyperv_network_driver.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * hyperv_network_driver.h: network driver functions for managing - * Microsoft Hyper-V host networks - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#ifndef __HYPERV_NETWORK_DRIVER_H__ -# define __HYPERV_NETWORK_DRIVER_H__ - -int hypervNetworkRegister(void); - -#endif /* __HYPERV_NETWORK_DRIVER_H__ */ diff --git a/src/hyperv/hyperv_nwfilter_driver.c b/src/hyperv/hyperv_nwfilter_driver.c deleted file mode 100644 index fc6ae19..0000000 --- a/src/hyperv/hyperv_nwfilter_driver.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * hyperv_nwfilter_driver.c: nwfilter driver functions for managing - * Microsoft Hyper-V firewall rules - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#include <config.h> - -#include "internal.h" -#include "virerror.h" -#include "datatypes.h" -#include "viralloc.h" -#include "viruuid.h" -#include "hyperv_nwfilter_driver.h" - -#define VIR_FROM_THIS VIR_FROM_HYPERV - - - -static virDrvOpenStatus -hypervNWFilterOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_HYPERV) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -hypervNWFilterClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - -static virNWFilterDriver hypervNWFilterDriver = { - .name = "Hyper-V", - .nwfilterOpen = hypervNWFilterOpen, /* 0.9.5 */ - .nwfilterClose = hypervNWFilterClose, /* 0.9.5 */ -}; - - - -int -hypervNWFilterRegister(void) -{ - return virRegisterNWFilterDriver(&hypervNWFilterDriver); -} diff --git a/src/hyperv/hyperv_nwfilter_driver.h b/src/hyperv/hyperv_nwfilter_driver.h deleted file mode 100644 index d5918cb..0000000 --- a/src/hyperv/hyperv_nwfilter_driver.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * hyperv_nwfilter_driver.h: nwfilter driver functions for managing - * Microsoft Hyper-V firewall rules - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#ifndef __HYPERV_NWFILTER_DRIVER_H__ -# define __HYPERV_NWFILTER_DRIVER_H__ - -int hypervNWFilterRegister(void); - -#endif /* __HYPERV_NWFILTER_DRIVER_H__ */ diff --git a/src/hyperv/hyperv_secret_driver.c b/src/hyperv/hyperv_secret_driver.c deleted file mode 100644 index 31cf915..0000000 --- a/src/hyperv/hyperv_secret_driver.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * hyperv_secret_driver.c: secret driver functions for Microsoft Hyper-V - * secret manipulation - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#include <config.h> - -#include "internal.h" -#include "virerror.h" -#include "datatypes.h" -#include "viralloc.h" -#include "viruuid.h" -#include "hyperv_secret_driver.h" - -#define VIR_FROM_THIS VIR_FROM_HYPERV - - - -static virDrvOpenStatus -hypervSecretOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_HYPERV) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -hypervSecretClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - -static virSecretDriver hypervSecretDriver = { - .name = "Hyper-V", - .secretOpen = hypervSecretOpen, /* 0.9.5 */ - .secretClose = hypervSecretClose, /* 0.9.5 */ -}; - - - -int -hypervSecretRegister(void) -{ - return virRegisterSecretDriver(&hypervSecretDriver); -} diff --git a/src/hyperv/hyperv_secret_driver.h b/src/hyperv/hyperv_secret_driver.h deleted file mode 100644 index 40bb3ad..0000000 --- a/src/hyperv/hyperv_secret_driver.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * hyperv_secret_driver.h: secret driver functions for Microsoft Hyper-V - * secret manipulation - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#ifndef __HYPERV_SECRET_DRIVER_H__ -# define __HYPERV_SECRET_DRIVER_H__ - -int hypervSecretRegister(void); - -#endif /* __HYPERV_SECRET_DRIVER_H__ */ diff --git a/src/hyperv/hyperv_storage_driver.c b/src/hyperv/hyperv_storage_driver.c deleted file mode 100644 index 8fa1343..0000000 --- a/src/hyperv/hyperv_storage_driver.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * hyperv_storage_driver.c: storage driver functions for managing - * Microsoft Hyper-V host storage - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#include <config.h> - -#include "internal.h" -#include "virerror.h" -#include "datatypes.h" -#include "viralloc.h" -#include "viruuid.h" -#include "hyperv_storage_driver.h" - -#define VIR_FROM_THIS VIR_FROM_HYPERV - - - -static virDrvOpenStatus -hypervStorageOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_HYPERV) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - - -static int -hypervStorageClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - - -static virStorageDriver hypervStorageDriver = { - .name = "Hyper-V", - .storageOpen = hypervStorageOpen, /* 0.9.5*/ - .storageClose = hypervStorageClose, /* 0.9.5 */ -}; - - - -int -hypervStorageRegister(void) -{ - return virRegisterStorageDriver(&hypervStorageDriver); -} diff --git a/src/hyperv/hyperv_storage_driver.h b/src/hyperv/hyperv_storage_driver.h deleted file mode 100644 index 651fb51..0000000 --- a/src/hyperv/hyperv_storage_driver.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * hyperv_storage_driver.h: storage driver methods for managing - * Microsoft Hyper-V host storage - * - * Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - */ - -#ifndef __HYPERV_STORAGE_DRIVER_H__ -# define __HYPERV_STORAGE_DRIVER_H__ - -int hypervStorageRegister(void); - -#endif /* __HYPERV_STORAGE_DRIVER_H__ */ diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interface_backend_netcf.c index 116d84e..947f1e2 100644 --- a/src/interface/interface_backend_netcf.c +++ b/src/interface/interface_backend_netcf.c @@ -264,25 +264,6 @@ netcfInterfaceObjIsActive(struct netcf_if *iface, return ret; } -static virDrvOpenStatus -netcfInterfaceOpen(virConnectPtr conn ATTRIBUTE_UNUSED, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (!driver) - return VIR_DRV_OPEN_ERROR; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int -netcfInterfaceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static int netcfConnectNumOfInterfacesImpl(virConnectPtr conn, int status, virInterfaceObjListFilter filter) @@ -1136,8 +1117,6 @@ static int netcfInterfaceChangeRollback(virConnectPtr conn, unsigned int flags) static virInterfaceDriver interfaceDriver = { .name = INTERFACE_DRIVER_NAME, - .interfaceOpen = netcfInterfaceOpen, /* 0.7.0 */ - .interfaceClose = netcfInterfaceClose, /* 0.7.0 */ .connectNumOfInterfaces = netcfConnectNumOfInterfaces, /* 0.7.0 */ .connectListInterfaces = netcfConnectListInterfaces, /* 0.7.0 */ .connectNumOfDefinedInterfaces = netcfConnectNumOfDefinedInterfaces, /* 0.7.0 */ @@ -1167,11 +1146,8 @@ static virStateDriver interfaceStateDriver = { int netcfIfaceRegister(void) { - if (virRegisterInterfaceDriver(&interfaceDriver) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("failed to register netcf interface driver")); + if (virSetSharedInterfaceDriver(&interfaceDriver) < 0) return -1; - } if (virRegisterStateDriver(&interfaceStateDriver) < 0) return -1; return 0; diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c index b027de0..27a772d 100644 --- a/src/interface/interface_backend_udev.c +++ b/src/interface/interface_backend_udev.c @@ -135,25 +135,6 @@ udevGetDevices(struct udev *udev, virUdevStatus status) return enumerate; } -static virDrvOpenStatus -udevInterfaceOpen(virConnectPtr conn ATTRIBUTE_UNUSED, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (!driver) - return VIR_DRV_OPEN_ERROR; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int -udevInterfaceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static int udevNumOfInterfacesByStatus(virConnectPtr conn, virUdevStatus status, virInterfaceObjListFilter filter) @@ -1212,9 +1193,7 @@ udevStateCleanup(void) static virInterfaceDriver udevIfaceDriver = { - "udev", - .interfaceOpen = udevInterfaceOpen, /* 1.0.0 */ - .interfaceClose = udevInterfaceClose, /* 1.0.0 */ + .name = "udev", .connectNumOfInterfaces = udevConnectNumOfInterfaces, /* 1.0.0 */ .connectListInterfaces = udevConnectListInterfaces, /* 1.0.0 */ .connectNumOfDefinedInterfaces = udevConnectNumOfDefinedInterfaces, /* 1.0.0 */ @@ -1235,7 +1214,7 @@ static virStateDriver interfaceStateDriver = { int udevIfaceRegister(void) { - if (virRegisterInterfaceDriver(&udevIfaceDriver) < 0) { + if (virSetSharedInterfaceDriver(&udevIfaceDriver) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to register udev interface driver")); return -1; diff --git a/src/libvirt.c b/src/libvirt.c index 43eb95c..c8a5834 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -111,33 +111,18 @@ VIR_LOG_INIT("libvirt"); #define MAX_DRIVERS 20 -#define virDriverCheckTabMaxReturn(count, ret) \ - do { \ - if ((count) >= MAX_DRIVERS) { \ - virReportError(VIR_ERR_INTERNAL_ERROR, \ - _("Too many drivers, cannot register %s"), \ - driver->name); \ - return ret; \ - } \ - } while (0) - -static virHypervisorDriverPtr virHypervisorDriverTab[MAX_DRIVERS]; -static int virHypervisorDriverTabCount; -static virNetworkDriverPtr virNetworkDriverTab[MAX_DRIVERS]; -static int virNetworkDriverTabCount; -static virInterfaceDriverPtr virInterfaceDriverTab[MAX_DRIVERS]; -static int virInterfaceDriverTabCount; -static virStorageDriverPtr virStorageDriverTab[MAX_DRIVERS]; -static int virStorageDriverTabCount; -static virNodeDeviceDriverPtr virNodeDeviceDriverTab[MAX_DRIVERS]; -static int virNodeDeviceDriverTabCount; -static virSecretDriverPtr virSecretDriverTab[MAX_DRIVERS]; -static int virSecretDriverTabCount; -static virNWFilterDriverPtr virNWFilterDriverTab[MAX_DRIVERS]; -static int virNWFilterDriverTabCount; +static virConnectDriverPtr virConnectDriverTab[MAX_DRIVERS]; +static int virConnectDriverTabCount; static virStateDriverPtr virStateDriverTab[MAX_DRIVERS]; static int virStateDriverTabCount; +static virNetworkDriverPtr virSharedNetworkDriver; +static virInterfaceDriverPtr virSharedInterfaceDriver; +static virStorageDriverPtr virSharedStorageDriver; +static virNodeDeviceDriverPtr virSharedNodeDeviceDriver; +static virSecretDriverPtr virSharedSecretDriver; +static virNWFilterDriverPtr virSharedNWFilterDriver; + #if defined(POLKIT_AUTH) static int @@ -533,29 +518,33 @@ DllMain(HINSTANCE instance ATTRIBUTE_UNUSED, /** - * virRegisterNetworkDriver: + * virSetSharedNetworkDriver: * @driver: pointer to a network driver block * * Register a network virtualization driver * - * Returns the driver priority or -1 in case of error. + * Returns 0 on success, or -1 in case of error. */ int -virRegisterNetworkDriver(virNetworkDriverPtr driver) +virSetSharedNetworkDriver(virNetworkDriverPtr driver) { virCheckNonNullArgReturn(driver, -1); - virDriverCheckTabMaxReturn(virNetworkDriverTabCount, -1); - VIR_DEBUG("registering %s as network driver %d", - driver->name, virNetworkDriverTabCount); + if (virSharedNetworkDriver) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("A network driver is already registered")); + return -1; + } + + VIR_DEBUG("registering %s as network driver", driver->name); - virNetworkDriverTab[virNetworkDriverTabCount] = driver; - return virNetworkDriverTabCount++; + virSharedNetworkDriver = driver; + return 0; } /** - * virRegisterInterfaceDriver: + * virSetSharedInterfaceDriver: * @driver: pointer to an interface driver block * * Register an interface virtualization driver @@ -563,21 +552,25 @@ virRegisterNetworkDriver(virNetworkDriverPtr driver) * Returns the driver priority or -1 in case of error. */ int -virRegisterInterfaceDriver(virInterfaceDriverPtr driver) +virSetSharedInterfaceDriver(virInterfaceDriverPtr driver) { virCheckNonNullArgReturn(driver, -1); - virDriverCheckTabMaxReturn(virInterfaceDriverTabCount, -1); - VIR_DEBUG("registering %s as interface driver %d", - driver->name, virInterfaceDriverTabCount); + if (virSharedInterfaceDriver) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("A interface driver is already registered")); + return -1; + } - virInterfaceDriverTab[virInterfaceDriverTabCount] = driver; - return virInterfaceDriverTabCount++; + VIR_DEBUG("registering %s as interface driver", driver->name); + + virSharedInterfaceDriver = driver; + return 0; } /** - * virRegisterStorageDriver: + * virSetSharedStorageDriver: * @driver: pointer to a storage driver block * * Register a storage virtualization driver @@ -585,21 +578,25 @@ virRegisterInterfaceDriver(virInterfaceDriverPtr driver) * Returns the driver priority or -1 in case of error. */ int -virRegisterStorageDriver(virStorageDriverPtr driver) +virSetSharedStorageDriver(virStorageDriverPtr driver) { virCheckNonNullArgReturn(driver, -1); - virDriverCheckTabMaxReturn(virStorageDriverTabCount, -1); - VIR_DEBUG("registering %s as storage driver %d", - driver->name, virStorageDriverTabCount); + if (virSharedStorageDriver) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("A storage driver is already registered")); + return -1; + } + + VIR_DEBUG("registering %s as storage driver", driver->name); - virStorageDriverTab[virStorageDriverTabCount] = driver; - return virStorageDriverTabCount++; + virSharedStorageDriver = driver; + return 0; } /** - * virRegisterNodeDeviceDriver: + * virSetSharedNodeDeviceDriver: * @driver: pointer to a device monitor block * * Register a device monitor @@ -607,21 +604,25 @@ virRegisterStorageDriver(virStorageDriverPtr driver) * Returns the driver priority or -1 in case of error. */ int -virRegisterNodeDeviceDriver(virNodeDeviceDriverPtr driver) +virSetSharedNodeDeviceDriver(virNodeDeviceDriverPtr driver) { virCheckNonNullArgReturn(driver, -1); - virDriverCheckTabMaxReturn(virNodeDeviceDriverTabCount, -1); - VIR_DEBUG("registering %s as device driver %d", - driver->name, virNodeDeviceDriverTabCount); + if (virSharedNodeDeviceDriver) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("A node device driver is already registered")); + return -1; + } - virNodeDeviceDriverTab[virNodeDeviceDriverTabCount] = driver; - return virNodeDeviceDriverTabCount++; + VIR_DEBUG("registering %s as device driver", driver->name); + + virSharedNodeDeviceDriver = driver; + return 0; } /** - * virRegisterSecretDriver: + * virSetSharedSecretDriver: * @driver: pointer to a secret driver block * * Register a secret driver @@ -629,21 +630,25 @@ virRegisterNodeDeviceDriver(virNodeDeviceDriverPtr driver) * Returns the driver priority or -1 in case of error. */ int -virRegisterSecretDriver(virSecretDriverPtr driver) +virSetSharedSecretDriver(virSecretDriverPtr driver) { virCheckNonNullArgReturn(driver, -1); - virDriverCheckTabMaxReturn(virSecretDriverTabCount, -1); - VIR_DEBUG("registering %s as secret driver %d", - driver->name, virSecretDriverTabCount); + if (virSharedSecretDriver) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("A secret driver is already registered")); + return -1; + } + + VIR_DEBUG("registering %s as secret driver", driver->name); - virSecretDriverTab[virSecretDriverTabCount] = driver; - return virSecretDriverTabCount++; + virSharedSecretDriver = driver; + return 0; } /** - * virRegisterNWFilterDriver: + * virSetSharedNWFilterDriver: * @driver: pointer to a network filter driver block * * Register a network filter virtualization driver @@ -651,41 +656,68 @@ virRegisterSecretDriver(virSecretDriverPtr driver) * Returns the driver priority or -1 in case of error. */ int -virRegisterNWFilterDriver(virNWFilterDriverPtr driver) +virSetSharedNWFilterDriver(virNWFilterDriverPtr driver) { virCheckNonNullArgReturn(driver, -1); - virDriverCheckTabMaxReturn(virNWFilterDriverTabCount, -1); - VIR_DEBUG("registering %s as network filter driver %d", - driver->name, virNWFilterDriverTabCount); + if (virSharedNWFilterDriver) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("A network filter driver is already registered")); + return -1; + } - virNWFilterDriverTab[virNWFilterDriverTabCount] = driver; - return virNWFilterDriverTabCount++; + VIR_DEBUG("registering %s as network filter driver", driver->name); + + virSharedNWFilterDriver = driver; + return 0; } /** - * virRegisterHypervisorDriver: + * virRegisterConnectDriver: * @driver: pointer to a driver block + * @setSharedDrivers: populate shared drivers * - * Register a virtualization driver + * Register a virtualization driver, optionally filling in + * any empty pointers for shared secondary drivers * * Returns the driver priority or -1 in case of error. */ int -virRegisterHypervisorDriver(virHypervisorDriverPtr driver) +virRegisterConnectDriver(virConnectDriverPtr driver, + bool setSharedDrivers) { VIR_DEBUG("driver=%p name=%s", driver, - driver ? NULLSTR(driver->name) : "(null)"); + driver ? NULLSTR(driver->hypervisorDriver->name) : "(null)"); virCheckNonNullArgReturn(driver, -1); - virDriverCheckTabMaxReturn(virHypervisorDriverTabCount, -1); + if (virConnectDriverTabCount >= MAX_DRIVERS) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Too many drivers, cannot register %s"), + driver->hypervisorDriver->name); + return -1; + } VIR_DEBUG("registering %s as driver %d", - driver->name, virHypervisorDriverTabCount); + driver->hypervisorDriver->name, virConnectDriverTabCount); + + if (setSharedDrivers) { + if (driver->interfaceDriver == NULL) + driver->interfaceDriver = virSharedInterfaceDriver; + if (driver->networkDriver == NULL) + driver->networkDriver = virSharedNetworkDriver; + if (driver->nodeDeviceDriver == NULL) + driver->nodeDeviceDriver = virSharedNodeDeviceDriver; + if (driver->nwfilterDriver == NULL) + driver->nwfilterDriver = virSharedNWFilterDriver; + if (driver->secretDriver == NULL) + driver->secretDriver = virSharedSecretDriver; + if (driver->storageDriver == NULL) + driver->storageDriver = virSharedStorageDriver; + } - virHypervisorDriverTab[virHypervisorDriverTabCount] = driver; - return virHypervisorDriverTabCount++; + virConnectDriverTab[virConnectDriverTabCount] = driver; + return virConnectDriverTabCount++; } @@ -701,7 +733,13 @@ int virRegisterStateDriver(virStateDriverPtr driver) { virCheckNonNullArgReturn(driver, -1); - virDriverCheckTabMaxReturn(virStateDriverTabCount, -1); + + if (virStateDriverTabCount >= MAX_DRIVERS) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Too many drivers, cannot register %s"), + driver->name); + return -1; + } virStateDriverTab[virStateDriverTabCount] = driver; return virStateDriverTabCount++; @@ -1101,7 +1139,7 @@ do_open(const char *name, /* Cleansing flags */ ret->flags = flags & VIR_CONNECT_RO; - for (i = 0; i < virHypervisorDriverTabCount; i++) { + for (i = 0; i < virConnectDriverTabCount; i++) { /* We're going to probe the remote driver next. So we have already * probed all other client-side-only driver before, but none of them * accepted the URI. @@ -1109,7 +1147,7 @@ do_open(const char *name, * driver then report a useful error, instead of a cryptic one about * not being able to connect to libvirtd or not being able to find * certificates. */ - if (virHypervisorDriverTab[i]->no == VIR_DRV_REMOTE && + if (STREQ(virConnectDriverTab[i]->hypervisorDriver->name, "remote") && ret->uri != NULL && ret->uri->scheme != NULL && ( #ifndef WITH_PHYP @@ -1137,22 +1175,37 @@ do_open(const char *name, goto failed; } - VIR_DEBUG("trying driver %zu (%s) ...", i, virHypervisorDriverTab[i]->name); - ret->driver = virHypervisorDriverTab[i]; - res = virHypervisorDriverTab[i]->connectOpen(ret, auth, flags); + VIR_DEBUG("trying driver %zu (%s) ...", + i, virConnectDriverTab[i]->hypervisorDriver->name); + + ret->driver = virConnectDriverTab[i]->hypervisorDriver; + ret->interfaceDriver = virConnectDriverTab[i]->interfaceDriver; + ret->networkDriver = virConnectDriverTab[i]->networkDriver; + ret->nodeDeviceDriver = virConnectDriverTab[i]->nodeDeviceDriver; + ret->nwfilterDriver = virConnectDriverTab[i]->nwfilterDriver; + ret->secretDriver = virConnectDriverTab[i]->secretDriver; + ret->storageDriver = virConnectDriverTab[i]->storageDriver; + + res = virConnectDriverTab[i]->hypervisorDriver->connectOpen(ret, auth, flags); VIR_DEBUG("driver %zu %s returned %s", - i, virHypervisorDriverTab[i]->name, + i, virConnectDriverTab[i]->hypervisorDriver->name, res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" : (res == VIR_DRV_OPEN_DECLINED ? "DECLINED" : (res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status"))); if (res == VIR_DRV_OPEN_SUCCESS) { break; - } else if (res == VIR_DRV_OPEN_ERROR) { - ret->driver = NULL; - goto failed; } else { ret->driver = NULL; + ret->interfaceDriver = NULL; + ret->networkDriver = NULL; + ret->nodeDeviceDriver = NULL; + ret->nwfilterDriver = NULL; + ret->secretDriver = NULL; + ret->storageDriver = NULL; + + if (res == VIR_DRV_OPEN_ERROR) + goto failed; } } @@ -1162,106 +1215,6 @@ do_open(const char *name, goto failed; } - for (i = 0; i < virNetworkDriverTabCount; i++) { - res = virNetworkDriverTab[i]->networkOpen(ret, auth, flags); - VIR_DEBUG("network driver %zu %s returned %s", - i, virNetworkDriverTab[i]->name, - res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" : - (res == VIR_DRV_OPEN_DECLINED ? "DECLINED" : - (res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status"))); - - if (res == VIR_DRV_OPEN_SUCCESS) { - ret->networkDriver = virNetworkDriverTab[i]; - break; - } else if (res == VIR_DRV_OPEN_ERROR) { - break; - } - } - - for (i = 0; i < virInterfaceDriverTabCount; i++) { - res = virInterfaceDriverTab[i]->interfaceOpen(ret, auth, flags); - VIR_DEBUG("interface driver %zu %s returned %s", - i, virInterfaceDriverTab[i]->name, - res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" : - (res == VIR_DRV_OPEN_DECLINED ? "DECLINED" : - (res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status"))); - - if (res == VIR_DRV_OPEN_SUCCESS) { - ret->interfaceDriver = virInterfaceDriverTab[i]; - break; - } else if (res == VIR_DRV_OPEN_ERROR) { - break; - } - } - - /* Secondary driver for storage. Optional */ - for (i = 0; i < virStorageDriverTabCount; i++) { - res = virStorageDriverTab[i]->storageOpen(ret, auth, flags); - VIR_DEBUG("storage driver %zu %s returned %s", - i, virStorageDriverTab[i]->name, - res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" : - (res == VIR_DRV_OPEN_DECLINED ? "DECLINED" : - (res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status"))); - - if (res == VIR_DRV_OPEN_SUCCESS) { - ret->storageDriver = virStorageDriverTab[i]; - break; - } else if (res == VIR_DRV_OPEN_ERROR) { - break; - } - } - - /* Node driver (optional) */ - for (i = 0; i < virNodeDeviceDriverTabCount; i++) { - res = virNodeDeviceDriverTab[i]->nodeDeviceOpen(ret, auth, flags); - VIR_DEBUG("node driver %zu %s returned %s", - i, virNodeDeviceDriverTab[i]->name, - res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" : - (res == VIR_DRV_OPEN_DECLINED ? "DECLINED" : - (res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status"))); - - if (res == VIR_DRV_OPEN_SUCCESS) { - ret->nodeDeviceDriver = virNodeDeviceDriverTab[i]; - break; - } else if (res == VIR_DRV_OPEN_ERROR) { - break; - } - } - - /* Secret manipulation driver. Optional */ - for (i = 0; i < virSecretDriverTabCount; i++) { - res = virSecretDriverTab[i]->secretOpen(ret, auth, flags); - VIR_DEBUG("secret driver %zu %s returned %s", - i, virSecretDriverTab[i]->name, - res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" : - (res == VIR_DRV_OPEN_DECLINED ? "DECLINED" : - (res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status"))); - - if (res == VIR_DRV_OPEN_SUCCESS) { - ret->secretDriver = virSecretDriverTab[i]; - break; - } else if (res == VIR_DRV_OPEN_ERROR) { - break; - } - } - - /* Network filter driver. Optional */ - for (i = 0; i < virNWFilterDriverTabCount; i++) { - res = virNWFilterDriverTab[i]->nwfilterOpen(ret, auth, flags); - VIR_DEBUG("nwfilter driver %zu %s returned %s", - i, virNWFilterDriverTab[i]->name, - res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" : - (res == VIR_DRV_OPEN_DECLINED ? "DECLINED" : - (res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status"))); - - if (res == VIR_DRV_OPEN_SUCCESS) { - ret->nwfilterDriver = virNWFilterDriverTab[i]; - break; - } else if (res == VIR_DRV_OPEN_ERROR) { - break; - } - } - virConfFree(conf); return ret; diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 7df5972..d193422 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -883,14 +883,14 @@ virDomainMigratePrepare3Params; virDomainMigratePrepareTunnel; virDomainMigratePrepareTunnel3; virDomainMigratePrepareTunnel3Params; -virRegisterHypervisorDriver; -virRegisterInterfaceDriver; -virRegisterNetworkDriver; -virRegisterNodeDeviceDriver; -virRegisterNWFilterDriver; -virRegisterSecretDriver; +virRegisterConnectDriver; virRegisterStateDriver; -virRegisterStorageDriver; +virSetSharedInterfaceDriver; +virSetSharedNetworkDriver; +virSetSharedNodeDeviceDriver; +virSetSharedNWFilterDriver; +virSetSharedSecretDriver; +virSetSharedStorageDriver; virStateCleanup; virStateInitialize; virStateReload; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index cd56cbc..c95b387 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -4749,8 +4749,7 @@ libxlDomainMigrateConfirm3Params(virDomainPtr domain, } -static virHypervisorDriver libxlDriver = { - .no = VIR_DRV_LIBXL, +static virHypervisorDriver libxlHypervisorDriver = { .name = LIBXL_DRIVER_NAME, .connectOpen = libxlConnectOpen, /* 0.9.0 */ .connectClose = libxlConnectClose, /* 0.9.0 */ @@ -4846,6 +4845,10 @@ static virHypervisorDriver libxlDriver = { .domainMigrateConfirm3Params = libxlDomainMigrateConfirm3Params, /* 1.2.6 */ }; +static virConnectDriver libxlConnectDriver = { + .hypervisorDriver = &libxlHypervisorDriver, +}; + static virStateDriver libxlStateDriver = { .name = "LIBXL", .stateInitialize = libxlStateInitialize, @@ -4858,7 +4861,8 @@ static virStateDriver libxlStateDriver = { int libxlRegister(void) { - if (virRegisterHypervisorDriver(&libxlDriver) < 0) + if (virRegisterConnectDriver(&libxlConnectDriver, + true) < 0) return -1; if (virRegisterStateDriver(&libxlStateDriver) < 0) return -1; diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index a0bc971..487e2a2 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -5727,8 +5727,7 @@ lxcNodeAllocPages(virConnectPtr conn, /* Function Tables */ -static virHypervisorDriver lxcDriver = { - .no = VIR_DRV_LXC, +static virHypervisorDriver lxcHypervisorDriver = { .name = LXC_DRIVER_NAME, .connectOpen = lxcConnectOpen, /* 0.4.2 */ .connectClose = lxcConnectClose, /* 0.4.2 */ @@ -5821,6 +5820,10 @@ static virHypervisorDriver lxcDriver = { .nodeAllocPages = lxcNodeAllocPages, /* 1.2.9 */ }; +static virConnectDriver lxcConnectDriver = { + .hypervisorDriver = &lxcHypervisorDriver, +}; + static virStateDriver lxcStateDriver = { .name = LXC_DRIVER_NAME, .stateInitialize = lxcStateInitialize, @@ -5831,7 +5834,8 @@ static virStateDriver lxcStateDriver = { int lxcRegister(void) { - if (virRegisterHypervisorDriver(&lxcDriver) < 0) + if (virRegisterConnectDriver(&lxcConnectDriver, + true) < 0) return -1; if (virRegisterStateDriver(&lxcStateDriver) < 0) return -1; diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 7b84e27..a1bd97b 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -2509,23 +2509,6 @@ static virNetworkPtr networkLookupByName(virConnectPtr conn, return ret; } -static virDrvOpenStatus networkOpen(virConnectPtr conn ATTRIBUTE_UNUSED, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (!driver) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int networkClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static int networkConnectNumOfNetworks(virConnectPtr conn) { int nactive = 0; @@ -3665,9 +3648,7 @@ networkGetDHCPLeases(virNetworkPtr network, static virNetworkDriver networkDriver = { - "Network", - .networkOpen = networkOpen, /* 0.2.0 */ - .networkClose = networkClose, /* 0.2.0 */ + .name = "bridge", .connectNumOfNetworks = networkConnectNumOfNetworks, /* 0.2.0 */ .connectListNetworks = networkConnectListNetworks, /* 0.2.0 */ .connectNumOfDefinedNetworks = networkConnectNumOfDefinedNetworks, /* 0.2.0 */ @@ -3693,7 +3674,7 @@ static virNetworkDriver networkDriver = { }; static virStateDriver networkStateDriver = { - .name = "Network", + .name = "bridge", .stateInitialize = networkStateInitialize, .stateAutoStart = networkStateAutoStart, .stateCleanup = networkStateCleanup, @@ -3702,7 +3683,7 @@ static virStateDriver networkStateDriver = { int networkRegister(void) { - if (virRegisterNetworkDriver(&networkDriver) < 0) + if (virSetSharedNetworkDriver(&networkDriver) < 0) return -1; if (virRegisterStateDriver(&networkStateDriver) < 0) return -1; diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c index b1f17f4..c1ad3cd 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -616,17 +616,11 @@ nodeDeviceDestroy(virNodeDevicePtr dev) int nodedevRegister(void) { -#if defined(WITH_HAL) && defined(WITH_UDEV) - /* Register only one of these two - they conflict */ - if (udevNodeRegister() == -1) - return halNodeRegister(); - return 0; +#ifdef WITH_UDEV + return udevNodeRegister(); #else # ifdef WITH_HAL return halNodeRegister(); # endif -# ifdef WITH_UDEV - return udevNodeRegister(); -# endif #endif } diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_device_hal.c index 2885bd3..fa37787 100644 --- a/src/node_device/node_device_hal.c +++ b/src/node_device/node_device_hal.c @@ -777,30 +777,8 @@ nodeStateReload(void) } -static virDrvOpenStatus -nodeDeviceOpen(virConnectPtr conn ATTRIBUTE_UNUSED, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (driver == NULL) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int -nodeDeviceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - static virNodeDeviceDriver halNodeDeviceDriver = { - .name = "halNodeDeviceDriver", - .nodeDeviceOpen = nodeDeviceOpen, /* 0.5.0 */ - .nodeDeviceClose = nodeDeviceClose, /* 0.5.0 */ + .name = "HAL", .nodeNumOfDevices = nodeNumOfDevices, /* 0.5.0 */ .nodeListDevices = nodeListDevices, /* 0.5.0 */ .connectListAllNodeDevices = nodeConnectListAllNodeDevices, /* 0.10.2 */ @@ -825,7 +803,7 @@ static virStateDriver halStateDriver = { int halNodeRegister(void) { - if (virRegisterNodeDeviceDriver(&halNodeDeviceDriver) < 0) + if (virSetSharedNodeDeviceDriver(&halNodeDeviceDriver) < 0) return -1; return virRegisterStateDriver(&halStateDriver); } diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index 115a92b..03c7a0b 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1821,27 +1821,8 @@ static int nodeStateReload(void) } -static virDrvOpenStatus nodeDeviceOpen(virConnectPtr conn ATTRIBUTE_UNUSED, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (driver == NULL) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int nodeDeviceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static virNodeDeviceDriver udevNodeDeviceDriver = { - .name = "udevNodeDeviceDriver", - .nodeDeviceOpen = nodeDeviceOpen, /* 0.7.3 */ - .nodeDeviceClose = nodeDeviceClose, /* 0.7.3 */ + .name = "udev", .nodeNumOfDevices = nodeNumOfDevices, /* 0.7.3 */ .nodeListDevices = nodeListDevices, /* 0.7.3 */ .connectListAllNodeDevices = nodeConnectListAllNodeDevices, /* 0.10.2 */ @@ -1866,7 +1847,7 @@ int udevNodeRegister(void) { VIR_DEBUG("Registering udev node device backend"); - if (virRegisterNodeDeviceDriver(&udevNodeDeviceDriver) < 0) + if (virSetSharedNodeDeviceDriver(&udevNodeDeviceDriver) < 0) return -1; return virRegisterStateDriver(&udevStateDriver); diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 225ae14..8e3db43 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -413,27 +413,6 @@ nwfilterLookupByName(virConnectPtr conn, } -static virDrvOpenStatus -nwfilterOpen(virConnectPtr conn ATTRIBUTE_UNUSED, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (!driver) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - - -static int -nwfilterClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - static int nwfilterConnectNumOfNWFilters(virConnectPtr conn) { @@ -686,8 +665,6 @@ nwfilterTeardownFilter(virDomainNetDefPtr net) static virNWFilterDriver nwfilterDriver = { .name = "nwfilter", - .nwfilterOpen = nwfilterOpen, /* 0.8.0 */ - .nwfilterClose = nwfilterClose, /* 0.8.0 */ .connectNumOfNWFilters = nwfilterConnectNumOfNWFilters, /* 0.8.0 */ .connectListNWFilters = nwfilterConnectListNWFilters, /* 0.8.0 */ .connectListAllNWFilters = nwfilterConnectListAllNWFilters, /* 0.10.2 */ @@ -715,7 +692,7 @@ static virDomainConfNWFilterDriver domainNWFilterDriver = { int nwfilterRegister(void) { - if (virRegisterNWFilterDriver(&nwfilterDriver) < 0) + if (virSetSharedNWFilterDriver(&nwfilterDriver) < 0) return -1; if (virRegisterStateDriver(&stateDriver) < 0) return -1; diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index bdab1c3..556f626 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -2568,8 +2568,7 @@ openvzDomainMigrateConfirm3Params(virDomainPtr domain, } -static virHypervisorDriver openvzDriver = { - .no = VIR_DRV_OPENVZ, +static virHypervisorDriver openvzHypervisorDriver = { .name = "OPENVZ", .connectOpen = openvzConnectOpen, /* 0.3.1 */ .connectClose = openvzConnectClose, /* 0.3.1 */ @@ -2635,9 +2634,12 @@ static virHypervisorDriver openvzDriver = { .domainMigrateConfirm3Params = openvzDomainMigrateConfirm3Params, /* 1.2.8 */ }; +static virConnectDriver openvzConnectDriver = { + .hypervisorDriver = &openvzHypervisorDriver, +}; + int openvzRegister(void) { - if (virRegisterHypervisorDriver(&openvzDriver) < 0) - return -1; - return 0; + return virRegisterConnectDriver(&openvzConnectDriver, + false); } diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index 17859b0..6c5a91e 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -3669,46 +3669,7 @@ phypDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) return phypDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_VCPU_LIVE); } -static virDrvOpenStatus -phypStorageOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_PHYP) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int -phypStorageClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - -static virDrvOpenStatus -phypInterfaceOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (conn->driver->no != VIR_DRV_PHYP) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int -phypInterfaceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - -static virHypervisorDriver phypDriver = { - .no = VIR_DRV_PHYP, +static virHypervisorDriver phypHypervisorDriver = { .name = "PHYP", .connectOpen = phypConnectOpen, /* 0.7.0 */ .connectClose = phypConnectClose, /* 0.7.0 */ @@ -3740,10 +3701,6 @@ static virHypervisorDriver phypDriver = { }; static virStorageDriver phypStorageDriver = { - .name = "PHYP", - .storageOpen = phypStorageOpen, /* 0.8.2 */ - .storageClose = phypStorageClose, /* 0.8.2 */ - .connectNumOfStoragePools = phypConnectNumOfStoragePools, /* 0.8.2 */ .connectListStoragePools = phypConnectListStoragePools, /* 0.8.2 */ .storagePoolLookupByName = phypStoragePoolLookupByName, /* 0.8.2 */ @@ -3762,9 +3719,6 @@ static virStorageDriver phypStorageDriver = { }; static virInterfaceDriver phypInterfaceDriver = { - .name = "PHYP", - .interfaceOpen = phypInterfaceOpen, /* 0.9.1 */ - .interfaceClose = phypInterfaceClose, /* 0.9.1 */ .connectNumOfInterfaces = phypConnectNumOfInterfaces, /* 0.9.1 */ .connectListInterfaces = phypConnectListInterfaces, /* 0.9.1 */ .interfaceLookupByName = phypInterfaceLookupByName, /* 0.9.1 */ @@ -3773,15 +3727,15 @@ static virInterfaceDriver phypInterfaceDriver = { .interfaceIsActive = phypInterfaceIsActive /* 0.9.1 */ }; +static virConnectDriver phypConnectDriver = { + .hypervisorDriver = &phypHypervisorDriver, + .interfaceDriver = &phypInterfaceDriver, + .storageDriver = &phypStorageDriver, +}; + int phypRegister(void) { - if (virRegisterHypervisorDriver(&phypDriver) < 0) - return -1; - if (virRegisterStorageDriver(&phypStorageDriver) < 0) - return -1; - if (virRegisterInterfaceDriver(&phypInterfaceDriver) < 0) - return -1; - - return 0; + return virRegisterConnectDriver(&phypConnectDriver, + false); } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2b0a3fd..a471572 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -18898,8 +18898,7 @@ qemuDomainGetFSInfo(virDomainPtr dom, } -static virHypervisorDriver qemuDriver = { - .no = VIR_DRV_QEMU, +static virHypervisorDriver qemuHypervisorDriver = { .name = QEMU_DRIVER_NAME, .connectOpen = qemuConnectOpen, /* 0.2.0 */ .connectClose = qemuConnectClose, /* 0.2.0 */ @@ -19103,6 +19102,10 @@ static virHypervisorDriver qemuDriver = { }; +static virConnectDriver qemuConnectDriver = { + .hypervisorDriver = &qemuHypervisorDriver, +}; + static virStateDriver qemuStateDriver = { .name = QEMU_DRIVER_NAME, .stateInitialize = qemuStateInitialize, @@ -19114,7 +19117,8 @@ static virStateDriver qemuStateDriver = { int qemuRegister(void) { - if (virRegisterHypervisorDriver(&qemuDriver) < 0) + if (virRegisterConnectDriver(&qemuConnectDriver, + true) < 0) return -1; if (virRegisterStateDriver(&qemuStateDriver) < 0) return -1; diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 0ad0531..d4fd658 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -3527,69 +3527,6 @@ remoteConnectListAllSecrets(virConnectPtr conn, /*----------------------------------------------------------------------*/ -static virDrvOpenStatus ATTRIBUTE_NONNULL(1) -remoteGenericOpen(virConnectPtr conn) -{ - if (inside_daemon) - return VIR_DRV_OPEN_DECLINED; - - if (conn->driver && - STREQ(conn->driver->name, "remote")) { - return VIR_DRV_OPEN_SUCCESS; - } - - return VIR_DRV_OPEN_DECLINED; -} - -static virDrvOpenStatus ATTRIBUTE_NONNULL(1) -remoteNetworkOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - return remoteGenericOpen(conn); -} - -static int -remoteNetworkClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - -/*----------------------------------------------------------------------*/ - -static virDrvOpenStatus ATTRIBUTE_NONNULL(1) -remoteInterfaceOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - return remoteGenericOpen(conn); -} - -static int -remoteInterfaceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - -/*----------------------------------------------------------------------*/ - -static virDrvOpenStatus ATTRIBUTE_NONNULL(1) -remoteStorageOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - return remoteGenericOpen(conn); -} - -static int -remoteStorageClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static char * remoteConnectFindStoragePoolSources(virConnectPtr conn, const char *type, @@ -3757,21 +3694,6 @@ remoteStoragePoolListAllVolumes(virStoragePoolPtr pool, /*----------------------------------------------------------------------*/ -static virDrvOpenStatus ATTRIBUTE_NONNULL(1) -remoteNodeDeviceOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - return remoteGenericOpen(conn); -} - -static int -remoteNodeDeviceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static int remoteNodeDeviceDettach(virNodeDevicePtr dev) { @@ -3870,22 +3792,6 @@ remoteNodeDeviceReset(virNodeDevicePtr dev) return rv; } -/* ------------------------------------------------------------- */ - -static virDrvOpenStatus ATTRIBUTE_NONNULL(1) -remoteNWFilterOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - return remoteGenericOpen(conn); -} - -static int -remoteNWFilterClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} /*----------------------------------------------------------------------*/ @@ -5551,21 +5457,6 @@ remoteDomainBuildQemuMonitorEvent(virNetClientProgramPtr prog ATTRIBUTE_UNUSED, } -static virDrvOpenStatus ATTRIBUTE_NONNULL(1) -remoteSecretOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - return remoteGenericOpen(conn); -} - -static int -remoteSecretClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static unsigned char * remoteSecretGetValue(virSecretPtr secret, size_t *value_size, unsigned int flags, unsigned int internalFlags) @@ -8074,7 +7965,6 @@ unsigned long remoteVersion(void) } static virHypervisorDriver hypervisor_driver = { - .no = VIR_DRV_REMOTE, .name = "remote", .connectOpen = remoteConnectOpen, /* 0.3.0 */ .connectClose = remoteConnectClose, /* 0.3.0 */ @@ -8287,9 +8177,6 @@ static virHypervisorDriver hypervisor_driver = { }; static virNetworkDriver network_driver = { - .name = "remote", - .networkOpen = remoteNetworkOpen, /* 0.3.0 */ - .networkClose = remoteNetworkClose, /* 0.3.0 */ .connectNumOfNetworks = remoteConnectNumOfNetworks, /* 0.3.0 */ .connectListNetworks = remoteConnectListNetworks, /* 0.3.0 */ .connectNumOfDefinedNetworks = remoteConnectNumOfDefinedNetworks, /* 0.3.0 */ @@ -8315,9 +8202,6 @@ static virNetworkDriver network_driver = { }; static virInterfaceDriver interface_driver = { - .name = "remote", - .interfaceOpen = remoteInterfaceOpen, /* 0.7.2 */ - .interfaceClose = remoteInterfaceClose, /* 0.7.2 */ .connectNumOfInterfaces = remoteConnectNumOfInterfaces, /* 0.7.2 */ .connectListInterfaces = remoteConnectListInterfaces, /* 0.7.2 */ .connectNumOfDefinedInterfaces = remoteConnectNumOfDefinedInterfaces, /* 0.7.2 */ @@ -8337,9 +8221,6 @@ static virInterfaceDriver interface_driver = { }; static virStorageDriver storage_driver = { - .name = "remote", - .storageOpen = remoteStorageOpen, /* 0.4.1 */ - .storageClose = remoteStorageClose, /* 0.4.1 */ .connectNumOfStoragePools = remoteConnectNumOfStoragePools, /* 0.4.1 */ .connectListStoragePools = remoteConnectListStoragePools, /* 0.4.1 */ .connectNumOfDefinedStoragePools = remoteConnectNumOfDefinedStoragePools, /* 0.4.1 */ @@ -8384,9 +8265,6 @@ static virStorageDriver storage_driver = { }; static virSecretDriver secret_driver = { - .name = "remote", - .secretOpen = remoteSecretOpen, /* 0.7.1 */ - .secretClose = remoteSecretClose, /* 0.7.1 */ .connectNumOfSecrets = remoteConnectNumOfSecrets, /* 0.7.1 */ .connectListSecrets = remoteConnectListSecrets, /* 0.7.1 */ .connectListAllSecrets = remoteConnectListAllSecrets, /* 0.10.2 */ @@ -8400,9 +8278,6 @@ static virSecretDriver secret_driver = { }; static virNodeDeviceDriver node_device_driver = { - .name = "remote", - .nodeDeviceOpen = remoteNodeDeviceOpen, /* 0.5.0 */ - .nodeDeviceClose = remoteNodeDeviceClose, /* 0.5.0 */ .nodeNumOfDevices = remoteNodeNumOfDevices, /* 0.5.0 */ .nodeListDevices = remoteNodeListDevices, /* 0.5.0 */ .connectListAllNodeDevices = remoteConnectListAllNodeDevices, /* 0.10.2 */ @@ -8417,9 +8292,6 @@ static virNodeDeviceDriver node_device_driver = { }; static virNWFilterDriver nwfilter_driver = { - .name = "remote", - .nwfilterOpen = remoteNWFilterOpen, /* 0.8.0 */ - .nwfilterClose = remoteNWFilterClose, /* 0.8.0 */ .nwfilterLookupByUUID = remoteNWFilterLookupByUUID, /* 0.8.0 */ .nwfilterLookupByName = remoteNWFilterLookupByName, /* 0.8.0 */ .nwfilterGetXMLDesc = remoteNWFilterGetXMLDesc, /* 0.8.0 */ @@ -8430,6 +8302,15 @@ static virNWFilterDriver nwfilter_driver = { .connectListAllNWFilters = remoteConnectListAllNWFilters, /* 0.10.2 */ }; +static virConnectDriver connect_driver = { + .hypervisorDriver = &hypervisor_driver, + .interfaceDriver = &interface_driver, + .networkDriver = &network_driver, + .nodeDeviceDriver = &node_device_driver, + .nwfilterDriver = &nwfilter_driver, + .secretDriver = &secret_driver, + .storageDriver = &storage_driver, +}; static virStateDriver state_driver = { .name = "Remote", @@ -8446,19 +8327,8 @@ static virStateDriver state_driver = { int remoteRegister(void) { - if (virRegisterHypervisorDriver(&hypervisor_driver) < 0) - return -1; - if (virRegisterNetworkDriver(&network_driver) < 0) - return -1; - if (virRegisterInterfaceDriver(&interface_driver) < 0) - return -1; - if (virRegisterStorageDriver(&storage_driver) < 0) - return -1; - if (virRegisterNodeDeviceDriver(&node_device_driver) < 0) - return -1; - if (virRegisterSecretDriver(&secret_driver) < 0) - return -1; - if (virRegisterNWFilterDriver(&nwfilter_driver) < 0) + if (virRegisterConnectDriver(&connect_driver, + false) < 0) return -1; if (virRegisterStateDriver(&state_driver) < 0) return -1; diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c index 26a23ac..fcdff1b 100644 --- a/src/secret/secret_driver.c +++ b/src/secret/secret_driver.c @@ -514,25 +514,6 @@ loadSecrets(virSecretEntryPtr *dest) /* Driver functions */ -static virDrvOpenStatus -secretOpen(virConnectPtr conn ATTRIBUTE_UNUSED, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (driver == NULL) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int -secretClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static int secretConnectNumOfSecrets(virConnectPtr conn) { @@ -1152,8 +1133,6 @@ secretStateReload(void) static virSecretDriver secretDriver = { .name = "secret", - .secretOpen = secretOpen, /* 0.7.1 */ - .secretClose = secretClose, /* 0.7.1 */ .connectNumOfSecrets = secretConnectNumOfSecrets, /* 0.7.1 */ .connectListSecrets = secretConnectListSecrets, /* 0.7.1 */ .connectListAllSecrets = secretConnectListAllSecrets, /* 0.10.2 */ @@ -1167,7 +1146,7 @@ static virSecretDriver secretDriver = { }; static virStateDriver stateDriver = { - .name = "Secret", + .name = "secret", .stateInitialize = secretStateInitialize, .stateCleanup = secretStateCleanup, .stateReload = secretStateReload, @@ -1176,7 +1155,7 @@ static virStateDriver stateDriver = { int secretRegister(void) { - if (virRegisterSecretDriver(&secretDriver) < 0) + if (virSetSharedSecretDriver(&secretDriver) < 0) return -1; if (virRegisterStateDriver(&stateDriver) < 0) return -1; diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 66dc994..3fc09ce 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -355,25 +355,6 @@ storagePoolLookupByVolume(virStorageVolPtr vol) return ret; } -static virDrvOpenStatus -storageOpen(virConnectPtr conn ATTRIBUTE_UNUSED, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (!driver) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int -storageClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static int storageConnectNumOfStoragePools(virConnectPtr conn) { @@ -2389,8 +2370,6 @@ storageConnectListAllStoragePools(virConnectPtr conn, static virStorageDriver storageDriver = { .name = "storage", - .storageOpen = storageOpen, /* 0.4.0 */ - .storageClose = storageClose, /* 0.4.0 */ .connectNumOfStoragePools = storageConnectNumOfStoragePools, /* 0.4.0 */ .connectListStoragePools = storageConnectListStoragePools, /* 0.4.0 */ .connectNumOfDefinedStoragePools = storageConnectNumOfDefinedStoragePools, /* 0.4.0 */ @@ -2437,7 +2416,7 @@ static virStorageDriver storageDriver = { static virStateDriver stateDriver = { - .name = "Storage", + .name = "storage", .stateInitialize = storageStateInitialize, .stateAutoStart = storageStateAutoStart, .stateCleanup = storageStateCleanup, @@ -2446,7 +2425,7 @@ static virStateDriver stateDriver = { int storageRegister(void) { - if (virRegisterStorageDriver(&storageDriver) < 0) + if (virSetSharedStorageDriver(&storageDriver) < 0) return -1; if (virRegisterStateDriver(&stateDriver) < 0) return -1; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 777ef3a..a386270 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -3485,23 +3485,6 @@ static int testDomainInterfaceStats(virDomainPtr domain, return ret; } -static virDrvOpenStatus testNetworkOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (STRNEQ(conn->driver->name, "Test")) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int testNetworkClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static virNetworkPtr testNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid) @@ -4043,23 +4026,6 @@ static int testNetworkSetAutostart(virNetworkPtr network, * Physical host interface routines */ -static virDrvOpenStatus testInterfaceOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (STRNEQ(conn->driver->name, "Test")) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int testInterfaceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static int testConnectNumOfInterfaces(virConnectPtr conn) { @@ -4478,23 +4444,6 @@ static int testStoragePoolObjSetDefaults(virStoragePoolObjPtr pool) return VIR_STRDUP(pool->configFile, ""); } -static virDrvOpenStatus testStorageOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (STRNEQ(conn->driver->name, "Test")) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int testStorageClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static virStoragePoolPtr testStoragePoolLookupByUUID(virConnectPtr conn, @@ -5816,22 +5765,6 @@ testStorageVolGetPath(virStorageVolPtr vol) /* Node device implementations */ -static virDrvOpenStatus testNodeDeviceOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (STRNEQ(conn->driver->name, "Test")) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int testNodeDeviceClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} static int testNodeNumOfDevices(virConnectPtr conn, @@ -6281,41 +6214,6 @@ static void testObjectEventQueue(testConnPtr driver, virObjectEventStateQueue(driver->eventState, event); } -static virDrvOpenStatus testSecretOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (STRNEQ(conn->driver->name, "Test")) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int testSecretClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - - -static virDrvOpenStatus testNWFilterOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (STRNEQ(conn->driver->name, "Test")) - return VIR_DRV_OPEN_DECLINED; - - return VIR_DRV_OPEN_SUCCESS; -} - -static int testNWFilterClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static int testConnectListAllDomains(virConnectPtr conn, virDomainPtr **domains, @@ -7344,8 +7242,7 @@ testDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, -static virHypervisorDriver testDriver = { - .no = VIR_DRV_TEST, +static virHypervisorDriver testHypervisorDriver = { .name = "Test", .connectOpen = testConnectOpen, /* 0.1.1 */ .connectClose = testConnectClose, /* 0.1.1 */ @@ -7444,9 +7341,6 @@ static virHypervisorDriver testDriver = { }; static virNetworkDriver testNetworkDriver = { - "Test", - .networkOpen = testNetworkOpen, /* 0.3.2 */ - .networkClose = testNetworkClose, /* 0.3.2 */ .connectNumOfNetworks = testConnectNumOfNetworks, /* 0.3.2 */ .connectListNetworks = testConnectListNetworks, /* 0.3.2 */ .connectNumOfDefinedNetworks = testConnectNumOfDefinedNetworks, /* 0.3.2 */ @@ -7471,9 +7365,6 @@ static virNetworkDriver testNetworkDriver = { }; static virInterfaceDriver testInterfaceDriver = { - "Test", /* name */ - .interfaceOpen = testInterfaceOpen, /* 0.7.0 */ - .interfaceClose = testInterfaceClose, /* 0.7.0 */ .connectNumOfInterfaces = testConnectNumOfInterfaces, /* 0.7.0 */ .connectListInterfaces = testConnectListInterfaces, /* 0.7.0 */ .connectNumOfDefinedInterfaces = testConnectNumOfDefinedInterfaces, /* 0.7.0 */ @@ -7493,10 +7384,6 @@ static virInterfaceDriver testInterfaceDriver = { static virStorageDriver testStorageDriver = { - .name = "Test", - .storageOpen = testStorageOpen, /* 0.4.1 */ - .storageClose = testStorageClose, /* 0.4.1 */ - .connectNumOfStoragePools = testConnectNumOfStoragePools, /* 0.5.0 */ .connectListStoragePools = testConnectListStoragePools, /* 0.5.0 */ .connectNumOfDefinedStoragePools = testConnectNumOfDefinedStoragePools, /* 0.5.0 */ @@ -7536,10 +7423,6 @@ static virStorageDriver testStorageDriver = { }; static virNodeDeviceDriver testNodeDeviceDriver = { - .name = "Test", - .nodeDeviceOpen = testNodeDeviceOpen, /* 0.6.0 */ - .nodeDeviceClose = testNodeDeviceClose, /* 0.6.0 */ - .nodeNumOfDevices = testNodeNumOfDevices, /* 0.7.2 */ .nodeListDevices = testNodeListDevices, /* 0.7.2 */ .nodeDeviceLookupByName = testNodeDeviceLookupByName, /* 0.7.2 */ @@ -7551,17 +7434,14 @@ static virNodeDeviceDriver testNodeDeviceDriver = { .nodeDeviceDestroy = testNodeDeviceDestroy, /* 0.7.3 */ }; -static virSecretDriver testSecretDriver = { - .name = "Test", - .secretOpen = testSecretOpen, /* 0.7.1 */ - .secretClose = testSecretClose, /* 0.7.1 */ -}; - - -static virNWFilterDriver testNWFilterDriver = { - .name = "Test", - .nwfilterOpen = testNWFilterOpen, /* 0.8.0 */ - .nwfilterClose = testNWFilterClose, /* 0.8.0 */ +static virConnectDriver testConnectDriver = { + .hypervisorDriver = &testHypervisorDriver, + .interfaceDriver = &testInterfaceDriver, + .networkDriver = &testNetworkDriver, + .nodeDeviceDriver = &testNodeDeviceDriver, + .nwfilterDriver = NULL, + .secretDriver = NULL, + .storageDriver = &testStorageDriver, }; /** @@ -7572,20 +7452,6 @@ static virNWFilterDriver testNWFilterDriver = { int testRegister(void) { - if (virRegisterHypervisorDriver(&testDriver) < 0) - return -1; - if (virRegisterNetworkDriver(&testNetworkDriver) < 0) - return -1; - if (virRegisterInterfaceDriver(&testInterfaceDriver) < 0) - return -1; - if (virRegisterStorageDriver(&testStorageDriver) < 0) - return -1; - if (virRegisterNodeDeviceDriver(&testNodeDeviceDriver) < 0) - return -1; - if (virRegisterSecretDriver(&testSecretDriver) < 0) - return -1; - if (virRegisterNWFilterDriver(&testNWFilterDriver) < 0) - return -1; - - return 0; + return virRegisterConnectDriver(&testConnectDriver, + false); } diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index d5bc8ab..6ca038a 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -2943,8 +2943,7 @@ umlNodeAllocPages(virConnectPtr conn, } -static virHypervisorDriver umlDriver = { - .no = VIR_DRV_UML, +static virHypervisorDriver umlHypervisorDriver = { .name = "UML", .connectOpen = umlConnectOpen, /* 0.5.0 */ .connectClose = umlConnectClose, /* 0.5.0 */ @@ -3009,6 +3008,10 @@ static virHypervisorDriver umlDriver = { .nodeAllocPages = umlNodeAllocPages, /* 1.2.9 */ }; +static virConnectDriver umlConnectDriver = { + .hypervisorDriver = ¨HypervisorDriver, +}; + static virStateDriver umlStateDriver = { .name = "UML", .stateInitialize = umlStateInitialize, @@ -3019,7 +3022,8 @@ static virStateDriver umlStateDriver = { int umlRegister(void) { - if (virRegisterHypervisorDriver(¨Driver) < 0) + if (virRegisterConnectDriver(¨ConnectDriver, + true) < 0) return -1; if (virRegisterStateDriver(¨StateDriver) < 0) return -1; diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index e020f83..bd3f50c 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -7594,7 +7594,6 @@ vboxNodeAllocPages(virConnectPtr conn ATTRIBUTE_UNUSED, */ virHypervisorDriver vboxCommonDriver = { - .no = VIR_DRV_VBOX, .name = "VBOX", .connectOpen = vboxConnectOpen, /* 0.6.3 */ .connectClose = vboxConnectClose, /* 0.6.3 */ diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c index b2e35e9..d363fef 100644 --- a/src/vbox/vbox_driver.c +++ b/src/vbox/vbox_driver.c @@ -50,36 +50,6 @@ VIR_LOG_INIT("vbox.vbox_driver"); #define VIR_FROM_THIS VIR_FROM_VBOX -#if !defined(WITH_DRIVER_MODULES) || defined(VBOX_NETWORK_DRIVER) -int vboxNetworkRegister(void) -{ - virNetworkDriverPtr networkDriver = NULL; - uint32_t uVersion; - - if (VBoxCGlueInit(&uVersion) == 0) - networkDriver = vboxGetNetworkDriver(uVersion); - - if (networkDriver && virRegisterNetworkDriver(networkDriver) < 0) - return -1; - return 0; -} -#endif - -#if !defined(WITH_DRIVER_MODULES) || defined(VBOX_STORAGE_DRIVER) -int vboxStorageRegister(void) -{ - virStorageDriverPtr storageDriver = NULL; - uint32_t uVersion; - - if (VBoxCGlueInit(&uVersion) == 0) - storageDriver = vboxGetStorageDriver(uVersion); - - if (storageDriver && virRegisterStorageDriver(storageDriver) < 0) - return -1; - return 0; -} -#endif - #if !defined(WITH_DRIVER_MODULES) || defined(VBOX_DRIVER) static virDrvOpenStatus dummyConnectOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, @@ -122,23 +92,28 @@ static virDrvOpenStatus dummyConnectOpen(virConnectPtr conn, } static virHypervisorDriver vboxDriverDummy = { - VIR_DRV_VBOX, "VBOX", .connectOpen = dummyConnectOpen, /* 0.6.3 */ }; +static virConnectDriver vboxConnectDriver; + int vboxRegister(void) { - virHypervisorDriverPtr driver = NULL; uint32_t uVersion; if (VBoxCGlueInit(&uVersion) == 0) - driver = vboxGetHypervisorDriver(uVersion); + vboxConnectDriver.hypervisorDriver = vboxGetHypervisorDriver(uVersion); - if (!driver) - driver = &vboxDriverDummy; + if (vboxConnectDriver.hypervisorDriver) { + vboxConnectDriver.networkDriver = vboxGetNetworkDriver(uVersion); + vboxConnectDriver.storageDriver = vboxGetStorageDriver(uVersion); + } else { + vboxConnectDriver.hypervisorDriver = &vboxDriverDummy; + } - if (virRegisterHypervisorDriver(driver) < 0) + if (virRegisterConnectDriver(&vboxConnectDriver, + false) < 0) return -1; return 0; } diff --git a/src/vbox/vbox_network.c b/src/vbox/vbox_network.c index a6079b4..ee409e3 100644 --- a/src/vbox/vbox_network.c +++ b/src/vbox/vbox_network.c @@ -86,35 +86,6 @@ static vboxUniformedAPI gVBoxAPI; * The Network Functions here on */ -static virDrvOpenStatus -vboxNetworkOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - vboxGlobalData *data = conn->privateData; - - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (STRNEQ(conn->driver->name, "VBOX")) - goto cleanup; - - if (!data->pFuncs || !data->vboxObj || !data->vboxSession) - goto cleanup; - - VIR_DEBUG("network initialized"); - - return VIR_DRV_OPEN_SUCCESS; - - cleanup: - return VIR_DRV_OPEN_DECLINED; -} - -static int vboxNetworkClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - VIR_DEBUG("network uninitialized"); - - return 0; -} static int vboxConnectNumOfNetworks(virConnectPtr conn) { @@ -998,9 +969,6 @@ static char *vboxNetworkGetXMLDesc(virNetworkPtr network, unsigned int flags) } virNetworkDriver vboxNetworkDriver = { - "VBOX", - .networkOpen = vboxNetworkOpen, /* 0.6.4 */ - .networkClose = vboxNetworkClose, /* 0.6.4 */ .connectNumOfNetworks = vboxConnectNumOfNetworks, /* 0.6.4 */ .connectListNetworks = vboxConnectListNetworks, /* 0.6.4 */ .connectNumOfDefinedNetworks = vboxConnectNumOfDefinedNetworks, /* 0.6.4 */ diff --git a/src/vbox/vbox_storage.c b/src/vbox/vbox_storage.c index 3af5f94..599f917 100644 --- a/src/vbox/vbox_storage.c +++ b/src/vbox/vbox_storage.c @@ -42,33 +42,6 @@ static vboxUniformedAPI gVBoxAPI; * The Storage Functions here on */ -static virDrvOpenStatus -vboxStorageOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags) -{ - vboxGlobalData *data = conn->privateData; - - virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - - if (STRNEQ(conn->driver->name, "VBOX")) - return VIR_DRV_OPEN_DECLINED; - - if ((!data->pFuncs) || (!data->vboxObj) || (!data->vboxSession)) - return VIR_DRV_OPEN_ERROR; - - VIR_DEBUG("vbox storage initialized"); - - return VIR_DRV_OPEN_SUCCESS; -} - -static int vboxStorageClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - VIR_DEBUG("vbox storage uninitialized"); - - return 0; -} - static int vboxConnectNumOfStoragePools(virConnectPtr conn ATTRIBUTE_UNUSED) { @@ -894,9 +867,6 @@ static char *vboxStorageVolGetPath(virStorageVolPtr vol) */ virStorageDriver vboxStorageDriver = { - .name = "VBOX", - .storageOpen = vboxStorageOpen, /* 0.7.1 */ - .storageClose = vboxStorageClose, /* 0.7.1 */ .connectNumOfStoragePools = vboxConnectNumOfStoragePools, /* 0.7.1 */ .connectListStoragePools = vboxConnectListStoragePools, /* 0.7.1 */ .storagePoolLookupByName = vboxStoragePoolLookupByName, /* 0.7.1 */ diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c index d045993..2d7ba04 100644 --- a/src/vmware/vmware_driver.c +++ b/src/vmware/vmware_driver.c @@ -1197,8 +1197,7 @@ vmwareConnectListAllDomains(virConnectPtr conn, -static virHypervisorDriver vmwareDriver = { - .no = VIR_DRV_VMWARE, +static virHypervisorDriver vmwareHypervisorDriver = { .name = "VMWARE", .connectOpen = vmwareConnectOpen, /* 0.8.7 */ .connectClose = vmwareConnectClose, /* 0.8.7 */ @@ -1236,10 +1235,13 @@ static virHypervisorDriver vmwareDriver = { .connectIsAlive = vmwareConnectIsAlive, /* 0.9.8 */ }; +static virConnectDriver vmwareConnectDriver = { + .hypervisorDriver = &vmwareHypervisorDriver, +}; + int vmwareRegister(void) { - if (virRegisterHypervisorDriver(&vmwareDriver) < 0) - return -1; - return 0; + return virRegisterConnectDriver(&vmwareConnectDriver, + false); } diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c index 65dc24f..5e6ef68 100644 --- a/src/xen/xen_driver.c +++ b/src/xen/xen_driver.c @@ -2759,8 +2759,7 @@ xenUnifiedNodeSuspendForDuration(virConnectPtr conn, /*----- Register with libvirt.c, and initialize Xen drivers. -----*/ /* The interface which we export upwards to libvirt.c. */ -static virHypervisorDriver xenUnifiedDriver = { - .no = VIR_DRV_XEN_UNIFIED, +static virHypervisorDriver xenUnifiedHypervisorDriver = { .name = "Xen", .connectOpen = xenUnifiedConnectOpen, /* 0.0.3 */ .connectClose = xenUnifiedConnectClose, /* 0.0.3 */ @@ -2856,6 +2855,11 @@ static virHypervisorDriver xenUnifiedDriver = { .nodeSetMemoryParameters = xenUnifiedNodeSetMemoryParameters, /* 0.10.2 */ }; + +static virConnectDriver xenUnifiedConnectDriver = { + .hypervisorDriver = &xenUnifiedHypervisorDriver, +}; + /** * xenRegister: * @@ -2868,7 +2872,8 @@ xenRegister(void) { if (virRegisterStateDriver(&state_driver) == -1) return -1; - return virRegisterHypervisorDriver(&xenUnifiedDriver); + return virRegisterConnectDriver(&xenUnifiedConnectDriver, + true); } /** diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c index c5118ec..3ea91de 100644 --- a/src/xenapi/xenapi_driver.c +++ b/src/xenapi/xenapi_driver.c @@ -1978,8 +1978,7 @@ xenapiConnectIsAlive(virConnectPtr conn) } /* The interface which we export upwards to libvirt.c. */ -static virHypervisorDriver xenapiDriver = { - .no = VIR_DRV_XENAPI, +static virHypervisorDriver xenapiHypervisorDriver = { .name = "XenAPI", .connectOpen = xenapiConnectOpen, /* 0.8.0 */ .connectClose = xenapiConnectClose, /* 0.8.0 */ @@ -2032,6 +2031,11 @@ static virHypervisorDriver xenapiDriver = { .connectIsAlive = xenapiConnectIsAlive, /* 0.9.8 */ }; + +static virConnectDriver xenapiConnectDriver = { + .hypervisorDriver = &xenapiHypervisorDriver, +}; + /** * xenapiRegister: * @@ -2041,7 +2045,7 @@ static virHypervisorDriver xenapiDriver = { int xenapiRegister(void) { - return virRegisterHypervisorDriver(&xenapiDriver); + return virRegisterConnectDriver(&xenapiConnectDriver); } /* diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index d1a95c5..3d79759 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -58,16 +58,7 @@ fakeSecretLookupByUsage(virConnectPtr conn, return virGetSecret(conn, uuid, usageType, usageID); } -static int -fakeSecretClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - static virSecretDriver fakeSecretDriver = { - .name = "fake_secret", - .secretOpen = NULL, - .secretClose = fakeSecretClose, .connectNumOfSecrets = NULL, .connectListSecrets = NULL, .secretLookupByUUID = NULL, @@ -213,12 +204,6 @@ fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool, } static int -fakeStorageClose(virConnectPtr conn ATTRIBUTE_UNUSED) -{ - return 0; -} - -static int fakeStoragePoolIsActive(virStoragePoolPtr pool) { if (STREQ(pool->name, "inactive")) @@ -244,8 +229,6 @@ fakeStoragePoolIsActive(virStoragePoolPtr pool) * type is assumed. */ static virStorageDriver fakeStorageDriver = { - .name = "fake_storage", - .storageClose = fakeStorageClose, .storagePoolLookupByName = fakeStoragePoolLookupByName, .storageVolLookupByName = fakeStorageVolLookupByName, .storagePoolGetXMLDesc = fakeStoragePoolGetXMLDesc, diff --git a/tests/virdrivermoduletest.c b/tests/virdrivermoduletest.c index d823ad9..6fb842e 100644 --- a/tests/virdrivermoduletest.c +++ b/tests/virdrivermoduletest.c @@ -30,23 +30,12 @@ VIR_LOG_INIT("tests.drivermoduletest"); -struct testDriverData { - const char *name; - const char *dep1; -}; - - static int testDriverModule(const void *args) { - const struct testDriverData *data = args; - - /* coverity[leaked_storage] */ - if (data->dep1 && - !virDriverLoadModule(data->dep1)) - return -1; + const char *name = args; /* coverity[leaked_storage] */ - if (!virDriverLoadModule(data->name)) + if (!virDriverLoadModule(name)) return -1; return 0; @@ -60,8 +49,7 @@ mymain(void) #define TEST(name, dep1) \ do { \ - const struct testDriverData data = { name, dep1 }; \ - if (virtTestRun("Test driver " # name, testDriverModule, &data) < 0) \ + if (virtTestRun("Test driver " # name, testDriverModule, name) < 0) \ ret = -1; \ } while (0) -- 2.1.0

On 20.01.2015 17:37, Daniel P. Berrange wrote:
For stateless, client side drivers, it is never correct to probe for secondary drivers. It is only ever appropriate to use the secondary driver that is associated with the hypervisor in question. As a result the ESX & HyperV drivers have both been forced to do hacks where they register no-op drivers for the ones they don't implement.
For stateful, server side drivers, we always just want to use the same built-in shared driver. The exception is virtualbox which is really a stateless driver and so wants to use its own server side secondary drivers. To deal with this virtualbox has to be built as 3 separate loadable modules to allow registration to work in the right order.
This can all be simplified by introducing a new struct recording the precise set of secondary drivers each hypervisor driver wants
struct _virConnectDriver { virHypervisorDriverPtr hypervisorDriver; virInterfaceDriverPtr interfaceDriver; virNetworkDriverPtr networkDriver; virNodeDeviceDriverPtr nodeDeviceDriver; virNWFilterDriverPtr nwfilterDriver; virSecretDriverPtr secretDriver; virStorageDriverPtr storageDriver; };
Instead of registering the hypervisor driver, we now just register a virConnectDriver instead. This allows us to remove all probing of secondary drivers. Once we have chosen the primary driver, we immediately know the correct secondary drivers to use.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- daemon/libvirtd.c | 19 +- src/Makefile.am | 63 +------ src/bhyve/bhyve_driver.c | 14 +- src/check-driverimpls.pl | 3 +- src/datatypes.c | 12 -- src/driver-hypervisor.h | 3 - src/driver-interface.h | 9 - src/driver-network.h | 11 +- src/driver-nodedev.h | 8 +- src/driver-nwfilter.h | 13 +- src/driver-secret.h | 12 +- src/driver-storage.h | 12 +- src/driver.h | 54 +++--- src/esx/esx_device_monitor.c | 74 -------- src/esx/esx_device_monitor.h | 28 --- src/esx/esx_driver.c | 25 +-- src/esx/esx_interface_driver.c | 37 +--- src/esx/esx_interface_driver.h | 4 +- src/esx/esx_network_driver.c | 37 +--- src/esx/esx_network_driver.h | 4 +- src/esx/esx_nwfilter_driver.c | 74 -------- src/esx/esx_nwfilter_driver.h | 28 --- src/esx/esx_secret_driver.c | 72 ------- src/esx/esx_secret_driver.h | 27 --- src/esx/esx_storage_driver.c | 37 +--- src/esx/esx_storage_driver.h | 4 +- src/hyperv/hyperv_device_monitor.c | 71 ------- src/hyperv/hyperv_device_monitor.h | 28 --- src/hyperv/hyperv_driver.c | 25 +-- src/hyperv/hyperv_interface_driver.c | 71 ------- src/hyperv/hyperv_interface_driver.h | 28 --- src/hyperv/hyperv_network_driver.c | 71 ------- src/hyperv/hyperv_network_driver.h | 28 --- src/hyperv/hyperv_nwfilter_driver.c | 71 ------- src/hyperv/hyperv_nwfilter_driver.h | 28 --- src/hyperv/hyperv_secret_driver.c | 71 ------- src/hyperv/hyperv_secret_driver.h | 28 --- src/hyperv/hyperv_storage_driver.c | 71 ------- src/hyperv/hyperv_storage_driver.h | 28 --- src/interface/interface_backend_netcf.c | 26 +-- src/interface/interface_backend_udev.c | 25 +-- src/libvirt.c | 323 ++++++++++++++------------------ src/libvirt_private.syms | 14 +- src/libxl/libxl_driver.c | 10 +- src/lxc/lxc_driver.c | 10 +- src/network/bridge_driver.c | 25 +-- src/node_device/node_device_driver.c | 10 +- src/node_device/node_device_hal.c | 26 +-- src/node_device/node_device_udev.c | 23 +-- src/nwfilter/nwfilter_driver.c | 25 +-- src/openvz/openvz_driver.c | 12 +- src/phyp/phyp_driver.c | 64 +------ src/qemu/qemu_driver.c | 10 +- src/remote/remote_driver.c | 152 ++------------- src/secret/secret_driver.c | 25 +-- src/storage/storage_driver.c | 25 +-- src/test/test_driver.c | 156 ++------------- src/uml/uml_driver.c | 10 +- src/vbox/vbox_common.c | 1 - src/vbox/vbox_driver.c | 47 ++--- src/vbox/vbox_network.c | 32 ---- src/vbox/vbox_storage.c | 30 --- src/vmware/vmware_driver.c | 12 +- src/xen/xen_driver.c | 11 +- src/xenapi/xenapi_driver.c | 10 +- tests/qemuxml2argvtest.c | 17 -- tests/virdrivermoduletest.c | 18 +- 67 files changed, 336 insertions(+), 2116 deletions(-) delete mode 100644 src/esx/esx_device_monitor.c delete mode 100644 src/esx/esx_device_monitor.h delete mode 100644 src/esx/esx_nwfilter_driver.c delete mode 100644 src/esx/esx_nwfilter_driver.h delete mode 100644 src/esx/esx_secret_driver.c delete mode 100644 src/esx/esx_secret_driver.h delete mode 100644 src/hyperv/hyperv_device_monitor.c delete mode 100644 src/hyperv/hyperv_device_monitor.h delete mode 100644 src/hyperv/hyperv_interface_driver.c delete mode 100644 src/hyperv/hyperv_interface_driver.h delete mode 100644 src/hyperv/hyperv_network_driver.c delete mode 100644 src/hyperv/hyperv_network_driver.h delete mode 100644 src/hyperv/hyperv_nwfilter_driver.c delete mode 100644 src/hyperv/hyperv_nwfilter_driver.h delete mode 100644 src/hyperv/hyperv_secret_driver.c delete mode 100644 src/hyperv/hyperv_secret_driver.h delete mode 100644 src/hyperv/hyperv_storage_driver.c delete mode 100644 src/hyperv/hyperv_storage_driver.h
Instead of finding a needle in haystack (read pointing out line in the diff that needs to be fixed), I'm pasting diff that you need to squash in. I'm sure you'll get the idea why: diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c index 5531d6d..b569160 100644 --- a/src/parallels/parallels_driver.c +++ b/src/parallels/parallels_driver.c @@ -262,7 +262,9 @@ parallelsConnectOpen(virConnectPtr conn, return VIR_DRV_OPEN_ERROR; } - if ((ret = parallelsOpenDefault(conn)) != VIR_DRV_OPEN_SUCCESS) + if ((ret = parallelsOpenDefault(conn)) != VIR_DRV_OPEN_SUCCESS || + (ret = parallelsStorageOpen(conn, flags)) != VIR_DRV_OPEN_SUCCESS || + (ret = parallelsNetworkOpen(conn, flags)) != VIR_DRV_OPEN_SUCCESS) return ret; return VIR_DRV_OPEN_SUCCESS; @@ -273,6 +275,9 @@ parallelsConnectClose(virConnectPtr conn) { parallelsConnPtr privconn = conn->privateData; + parallelsNetworkClose(conn); + parallelsStorageClose(conn); + parallelsDriverLock(privconn); prlsdkUnsubscribeFromPCSEvents(privconn); virObjectUnref(privconn->caps); @@ -952,7 +957,6 @@ parallelsDomainUndefine(virDomainPtr domain) } static virHypervisorDriver parallelsDriver = { - .no = VIR_DRV_PARALLELS, .name = "Parallels", .connectOpen = parallelsConnectOpen, /* 0.10.0 */ .connectClose = parallelsConnectClose, /* 0.10.0 */ @@ -995,6 +999,12 @@ static virHypervisorDriver parallelsDriver = { .connectIsAlive = parallelsConnectIsAlive, /* 1.2.5 */ }; +static virConnectDriver parallelsConnectDriver = { + .hypervisorDriver = ¶llelsDriver, + .storageDriver = ¶llelsStorageDriver, + .networkDriver = ¶llelsNetworkDriver, +}; + /** * parallelsRegister: * @@ -1013,11 +1023,7 @@ parallelsRegister(void) VIR_FREE(prlctl_path); - if (virRegisterHypervisorDriver(¶llelsDriver) < 0) - return -1; - if (parallelsStorageRegister()) - return -1; - if (parallelsNetworkRegister()) + if (virRegisterConnectDriver(¶llelsConnectDriver, false) < 0) return -1; return 0; diff --git a/src/parallels/parallels_network.c b/src/parallels/parallels_network.c index 90217df..3e7087d 100644 --- a/src/parallels/parallels_network.c +++ b/src/parallels/parallels_network.c @@ -318,9 +318,8 @@ static int parallelsLoadNetworks(parallelsConnPtr privconn) return ret; } -static virDrvOpenStatus +virDrvOpenStatus parallelsNetworkOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, unsigned int flags) { virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); @@ -334,7 +333,7 @@ parallelsNetworkOpen(virConnectPtr conn, return VIR_DRV_OPEN_SUCCESS; } -static int parallelsNetworkClose(virConnectPtr conn) +int parallelsNetworkClose(virConnectPtr conn) { parallelsConnPtr privconn = conn->privateData; parallelsDriverLock(privconn); @@ -597,10 +596,9 @@ static int parallelsNetworkGetAutostart(virNetworkPtr net, virNetworkObjUnlock(network); return ret; } -static virNetworkDriver parallelsNetworkDriver = { - "Parallels", - .networkOpen = parallelsNetworkOpen, /* 1.0.1 */ - .networkClose = parallelsNetworkClose, /* 1.0.1 */ + +virNetworkDriver parallelsNetworkDriver = { + .name = "Parallels", .connectNumOfNetworks = parallelsConnectNumOfNetworks, /* 1.0.1 */ .connectListNetworks = parallelsConnectListNetworks, /* 1.0.1 */ .connectNumOfDefinedNetworks = parallelsConnectNumOfDefinedNetworks, /* 1.0.1 */ @@ -613,12 +611,3 @@ static virNetworkDriver parallelsNetworkDriver = { .networkIsActive = parallelsNetworkIsActive, /* 1.0.1 */ .networkIsPersistent = parallelsNetworkIsPersistent, /* 1.0.1 */ }; - -int -parallelsNetworkRegister(void) -{ - if (virRegisterNetworkDriver(¶llelsNetworkDriver) < 0) - return -1; - - return 0; -} diff --git a/src/parallels/parallels_storage.c b/src/parallels/parallels_storage.c index e916e0f..d2c5bf2 100644 --- a/src/parallels/parallels_storage.c +++ b/src/parallels/parallels_storage.c @@ -67,7 +67,7 @@ parallelsStorageUnlock(virStorageDriverStatePtr driver) virMutexUnlock(&driver->lock); } -static int +int parallelsStorageClose(virConnectPtr conn) { parallelsConnPtr privconn = conn->privateData; @@ -456,9 +456,8 @@ static int parallelsLoadPools(virConnectPtr conn) return -1; } -static virDrvOpenStatus +virDrvOpenStatus parallelsStorageOpen(virConnectPtr conn, - virConnectAuthPtr auth ATTRIBUTE_UNUSED, unsigned int flags) { parallelsConnPtr privconn = conn->privateData; @@ -1612,10 +1611,8 @@ parallelsStorageVolGetPath(virStorageVolPtr vol) return ret; } -static virStorageDriver parallelsStorageDriver = { +virStorageDriver parallelsStorageDriver = { .name = "Parallels", - .storageOpen = parallelsStorageOpen, /* 0.10.0 */ - .storageClose = parallelsStorageClose, /* 0.10.0 */ .connectNumOfStoragePools = parallelsConnectNumOfStoragePools, /* 0.10.0 */ .connectListStoragePools = parallelsConnectListStoragePools, /* 0.10.0 */ @@ -1648,12 +1645,3 @@ static virStorageDriver parallelsStorageDriver = { .storagePoolIsActive = parallelsStoragePoolIsActive, /* 0.10.0 */ .storagePoolIsPersistent = parallelsStoragePoolIsPersistent, /* 0.10.0 */ }; - -int -parallelsStorageRegister(void) -{ - if (virRegisterStorageDriver(¶llelsStorageDriver) < 0) - return -1; - - return 0; -} diff --git a/src/parallels/parallels_utils.h b/src/parallels/parallels_utils.h index b5aa209..bebf841 100644 --- a/src/parallels/parallels_utils.h +++ b/src/parallels/parallels_utils.h @@ -75,8 +75,13 @@ struct parallelsDomObj { typedef struct parallelsDomObj *parallelsDomObjPtr; -int parallelsStorageRegister(void); -int parallelsNetworkRegister(void); +virDrvOpenStatus parallelsStorageOpen(virConnectPtr conn, unsigned int flags); +int parallelsStorageClose(virConnectPtr conn); +extern virStorageDriver parallelsStorageDriver; + +virDrvOpenStatus parallelsNetworkOpen(virConnectPtr conn, unsigned int flags); +int parallelsNetworkClose(virConnectPtr conn); +extern virNetworkDriver parallelsNetworkDriver; virJSONValuePtr parallelsParseOutput(const char *binary, ...) ATTRIBUTE_NONNULL(1) ATTRIBUTE_SENTINEL; diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c index 3ea91de..eefe9ab 100644 --- a/src/xenapi/xenapi_driver.c +++ b/src/xenapi/xenapi_driver.c @@ -2045,7 +2045,7 @@ static virConnectDriver xenapiConnectDriver = { int xenapiRegister(void) { - return virRegisterConnectDriver(&xenapiConnectDriver); + return virRegisterConnectDriver(&xenapiConnectDriver, true); } /* Michal

On Wed, Jan 21, 2015 at 11:08:54AM +0100, Michal Privoznik wrote:
On 20.01.2015 17:37, Daniel P. Berrange wrote:
For stateless, client side drivers, it is never correct to probe for secondary drivers. It is only ever appropriate to use the secondary driver that is associated with the hypervisor in question. As a result the ESX & HyperV drivers have both been forced to do hacks where they register no-op drivers for the ones they don't implement.
For stateful, server side drivers, we always just want to use the same built-in shared driver. The exception is virtualbox which is really a stateless driver and so wants to use its own server side secondary drivers. To deal with this virtualbox has to be built as 3 separate loadable modules to allow registration to work in the right order.
This can all be simplified by introducing a new struct recording the precise set of secondary drivers each hypervisor driver wants
struct _virConnectDriver { virHypervisorDriverPtr hypervisorDriver; virInterfaceDriverPtr interfaceDriver; virNetworkDriverPtr networkDriver; virNodeDeviceDriverPtr nodeDeviceDriver; virNWFilterDriverPtr nwfilterDriver; virSecretDriverPtr secretDriver; virStorageDriverPtr storageDriver; };
Instead of registering the hypervisor driver, we now just register a virConnectDriver instead. This allows us to remove all probing of secondary drivers. Once we have chosen the primary driver, we immediately know the correct secondary drivers to use.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- daemon/libvirtd.c | 19 +- src/Makefile.am | 63 +------ src/bhyve/bhyve_driver.c | 14 +- src/check-driverimpls.pl | 3 +- src/datatypes.c | 12 -- src/driver-hypervisor.h | 3 - src/driver-interface.h | 9 - src/driver-network.h | 11 +- src/driver-nodedev.h | 8 +- src/driver-nwfilter.h | 13 +- src/driver-secret.h | 12 +- src/driver-storage.h | 12 +- src/driver.h | 54 +++--- src/esx/esx_device_monitor.c | 74 -------- src/esx/esx_device_monitor.h | 28 --- src/esx/esx_driver.c | 25 +-- src/esx/esx_interface_driver.c | 37 +--- src/esx/esx_interface_driver.h | 4 +- src/esx/esx_network_driver.c | 37 +--- src/esx/esx_network_driver.h | 4 +- src/esx/esx_nwfilter_driver.c | 74 -------- src/esx/esx_nwfilter_driver.h | 28 --- src/esx/esx_secret_driver.c | 72 ------- src/esx/esx_secret_driver.h | 27 --- src/esx/esx_storage_driver.c | 37 +--- src/esx/esx_storage_driver.h | 4 +- src/hyperv/hyperv_device_monitor.c | 71 ------- src/hyperv/hyperv_device_monitor.h | 28 --- src/hyperv/hyperv_driver.c | 25 +-- src/hyperv/hyperv_interface_driver.c | 71 ------- src/hyperv/hyperv_interface_driver.h | 28 --- src/hyperv/hyperv_network_driver.c | 71 ------- src/hyperv/hyperv_network_driver.h | 28 --- src/hyperv/hyperv_nwfilter_driver.c | 71 ------- src/hyperv/hyperv_nwfilter_driver.h | 28 --- src/hyperv/hyperv_secret_driver.c | 71 ------- src/hyperv/hyperv_secret_driver.h | 28 --- src/hyperv/hyperv_storage_driver.c | 71 ------- src/hyperv/hyperv_storage_driver.h | 28 --- src/interface/interface_backend_netcf.c | 26 +-- src/interface/interface_backend_udev.c | 25 +-- src/libvirt.c | 323 ++++++++++++++------------------ src/libvirt_private.syms | 14 +- src/libxl/libxl_driver.c | 10 +- src/lxc/lxc_driver.c | 10 +- src/network/bridge_driver.c | 25 +-- src/node_device/node_device_driver.c | 10 +- src/node_device/node_device_hal.c | 26 +-- src/node_device/node_device_udev.c | 23 +-- src/nwfilter/nwfilter_driver.c | 25 +-- src/openvz/openvz_driver.c | 12 +- src/phyp/phyp_driver.c | 64 +------ src/qemu/qemu_driver.c | 10 +- src/remote/remote_driver.c | 152 ++------------- src/secret/secret_driver.c | 25 +-- src/storage/storage_driver.c | 25 +-- src/test/test_driver.c | 156 ++------------- src/uml/uml_driver.c | 10 +- src/vbox/vbox_common.c | 1 - src/vbox/vbox_driver.c | 47 ++--- src/vbox/vbox_network.c | 32 ---- src/vbox/vbox_storage.c | 30 --- src/vmware/vmware_driver.c | 12 +- src/xen/xen_driver.c | 11 +- src/xenapi/xenapi_driver.c | 10 +- tests/qemuxml2argvtest.c | 17 -- tests/virdrivermoduletest.c | 18 +- 67 files changed, 336 insertions(+), 2116 deletions(-) delete mode 100644 src/esx/esx_device_monitor.c delete mode 100644 src/esx/esx_device_monitor.h delete mode 100644 src/esx/esx_nwfilter_driver.c delete mode 100644 src/esx/esx_nwfilter_driver.h delete mode 100644 src/esx/esx_secret_driver.c delete mode 100644 src/esx/esx_secret_driver.h delete mode 100644 src/hyperv/hyperv_device_monitor.c delete mode 100644 src/hyperv/hyperv_device_monitor.h delete mode 100644 src/hyperv/hyperv_interface_driver.c delete mode 100644 src/hyperv/hyperv_interface_driver.h delete mode 100644 src/hyperv/hyperv_network_driver.c delete mode 100644 src/hyperv/hyperv_network_driver.h delete mode 100644 src/hyperv/hyperv_nwfilter_driver.c delete mode 100644 src/hyperv/hyperv_nwfilter_driver.h delete mode 100644 src/hyperv/hyperv_secret_driver.c delete mode 100644 src/hyperv/hyperv_secret_driver.h delete mode 100644 src/hyperv/hyperv_storage_driver.c delete mode 100644 src/hyperv/hyperv_storage_driver.h
Instead of finding a needle in haystack (read pointing out line in the diff that needs to be fixed), I'm pasting diff that you need to squash in. I'm sure you'll get the idea why:
Hehe, thanks. I forgot that we needed an SDK to compile the parallels driver now. Any idea if that's in Fedora yet ? Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On 21.01.2015 11:15, Daniel P. Berrange wrote:
On Wed, Jan 21, 2015 at 11:08:54AM +0100, Michal Privoznik wrote:
On 20.01.2015 17:37, Daniel P. Berrange wrote:
For stateless, client side drivers, it is never correct to probe for secondary drivers. It is only ever appropriate to use the secondary driver that is associated with the hypervisor in question. As a result the ESX & HyperV drivers have both been forced to do hacks where they register no-op drivers for the ones they don't implement.
For stateful, server side drivers, we always just want to use the same built-in shared driver. The exception is virtualbox which is really a stateless driver and so wants to use its own server side secondary drivers. To deal with this virtualbox has to be built as 3 separate loadable modules to allow registration to work in the right order.
This can all be simplified by introducing a new struct recording the precise set of secondary drivers each hypervisor driver wants
struct _virConnectDriver { virHypervisorDriverPtr hypervisorDriver; virInterfaceDriverPtr interfaceDriver; virNetworkDriverPtr networkDriver; virNodeDeviceDriverPtr nodeDeviceDriver; virNWFilterDriverPtr nwfilterDriver; virSecretDriverPtr secretDriver; virStorageDriverPtr storageDriver; };
Instead of registering the hypervisor driver, we now just register a virConnectDriver instead. This allows us to remove all probing of secondary drivers. Once we have chosen the primary driver, we immediately know the correct secondary drivers to use.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- daemon/libvirtd.c | 19 +- src/Makefile.am | 63 +------ src/bhyve/bhyve_driver.c | 14 +- src/check-driverimpls.pl | 3 +- src/datatypes.c | 12 -- src/driver-hypervisor.h | 3 - src/driver-interface.h | 9 - src/driver-network.h | 11 +- src/driver-nodedev.h | 8 +- src/driver-nwfilter.h | 13 +- src/driver-secret.h | 12 +- src/driver-storage.h | 12 +- src/driver.h | 54 +++--- src/esx/esx_device_monitor.c | 74 -------- src/esx/esx_device_monitor.h | 28 --- src/esx/esx_driver.c | 25 +-- src/esx/esx_interface_driver.c | 37 +--- src/esx/esx_interface_driver.h | 4 +- src/esx/esx_network_driver.c | 37 +--- src/esx/esx_network_driver.h | 4 +- src/esx/esx_nwfilter_driver.c | 74 -------- src/esx/esx_nwfilter_driver.h | 28 --- src/esx/esx_secret_driver.c | 72 ------- src/esx/esx_secret_driver.h | 27 --- src/esx/esx_storage_driver.c | 37 +--- src/esx/esx_storage_driver.h | 4 +- src/hyperv/hyperv_device_monitor.c | 71 ------- src/hyperv/hyperv_device_monitor.h | 28 --- src/hyperv/hyperv_driver.c | 25 +-- src/hyperv/hyperv_interface_driver.c | 71 ------- src/hyperv/hyperv_interface_driver.h | 28 --- src/hyperv/hyperv_network_driver.c | 71 ------- src/hyperv/hyperv_network_driver.h | 28 --- src/hyperv/hyperv_nwfilter_driver.c | 71 ------- src/hyperv/hyperv_nwfilter_driver.h | 28 --- src/hyperv/hyperv_secret_driver.c | 71 ------- src/hyperv/hyperv_secret_driver.h | 28 --- src/hyperv/hyperv_storage_driver.c | 71 ------- src/hyperv/hyperv_storage_driver.h | 28 --- src/interface/interface_backend_netcf.c | 26 +-- src/interface/interface_backend_udev.c | 25 +-- src/libvirt.c | 323 ++++++++++++++------------------ src/libvirt_private.syms | 14 +- src/libxl/libxl_driver.c | 10 +- src/lxc/lxc_driver.c | 10 +- src/network/bridge_driver.c | 25 +-- src/node_device/node_device_driver.c | 10 +- src/node_device/node_device_hal.c | 26 +-- src/node_device/node_device_udev.c | 23 +-- src/nwfilter/nwfilter_driver.c | 25 +-- src/openvz/openvz_driver.c | 12 +- src/phyp/phyp_driver.c | 64 +------ src/qemu/qemu_driver.c | 10 +- src/remote/remote_driver.c | 152 ++------------- src/secret/secret_driver.c | 25 +-- src/storage/storage_driver.c | 25 +-- src/test/test_driver.c | 156 ++------------- src/uml/uml_driver.c | 10 +- src/vbox/vbox_common.c | 1 - src/vbox/vbox_driver.c | 47 ++--- src/vbox/vbox_network.c | 32 ---- src/vbox/vbox_storage.c | 30 --- src/vmware/vmware_driver.c | 12 +- src/xen/xen_driver.c | 11 +- src/xenapi/xenapi_driver.c | 10 +- tests/qemuxml2argvtest.c | 17 -- tests/virdrivermoduletest.c | 18 +- 67 files changed, 336 insertions(+), 2116 deletions(-) delete mode 100644 src/esx/esx_device_monitor.c delete mode 100644 src/esx/esx_device_monitor.h delete mode 100644 src/esx/esx_nwfilter_driver.c delete mode 100644 src/esx/esx_nwfilter_driver.h delete mode 100644 src/esx/esx_secret_driver.c delete mode 100644 src/esx/esx_secret_driver.h delete mode 100644 src/hyperv/hyperv_device_monitor.c delete mode 100644 src/hyperv/hyperv_device_monitor.h delete mode 100644 src/hyperv/hyperv_interface_driver.c delete mode 100644 src/hyperv/hyperv_interface_driver.h delete mode 100644 src/hyperv/hyperv_network_driver.c delete mode 100644 src/hyperv/hyperv_network_driver.h delete mode 100644 src/hyperv/hyperv_nwfilter_driver.c delete mode 100644 src/hyperv/hyperv_nwfilter_driver.h delete mode 100644 src/hyperv/hyperv_secret_driver.c delete mode 100644 src/hyperv/hyperv_secret_driver.h delete mode 100644 src/hyperv/hyperv_storage_driver.c delete mode 100644 src/hyperv/hyperv_storage_driver.h
Instead of finding a needle in haystack (read pointing out line in the diff that needs to be fixed), I'm pasting diff that you need to squash in. I'm sure you'll get the idea why:
Hehe, thanks. I forgot that we needed an SDK to compile the parallels driver now. Any idea if that's in Fedora yet ?
I don't think so. But they have spec file in their git repo: https://github.com/CloudServer/parallels-sdk Michal

On 20.01.2015 17:37, Daniel P. Berrange wrote:
This series continues on my previous work to refactor the driver registration process. With this patch series applied, there is no probing of secondary drivers any more. Once the hypervisor driver is chosen, the correct secondary drivers are immediately known. This enables a bunch of hacks to be removed from the ESX, HyperV and VirtualBox drivers.
The final remaining problem will be to address the circular dependancy problems wrt to the secrets and storage drivers.
Daniel P. Berrange (8): Remove use of secretPrivateData from secret driver Remove use of nwfilterPrivateData from nwfilter driver Remove use of storagePrivateData/networkPrivateData from vbox Remove use of nodeDevicePrivateData from nodeDev driver Remove use of interfacePrivateData from udev driver Remove all secondary driver private data fields don't disable state driver when libvirtd is not built Removing probing of secondary drivers
daemon/libvirtd.c | 19 +- src/Makefile.am | 69 +------ src/bhyve/bhyve_driver.c | 14 +- src/check-driverimpls.pl | 3 +- src/conf/domain_nwfilter.c | 5 +- src/conf/domain_nwfilter.h | 6 +- src/datatypes.c | 12 -- src/datatypes.h | 6 - src/driver-hypervisor.h | 3 - src/driver-interface.h | 9 - src/driver-network.h | 11 +- src/driver-nodedev.h | 8 +- src/driver-nwfilter.h | 13 +- src/driver-secret.h | 12 +- src/driver-storage.h | 12 +- src/driver.h | 60 +++--- src/esx/esx_device_monitor.c | 74 -------- src/esx/esx_device_monitor.h | 28 --- src/esx/esx_driver.c | 25 +-- src/esx/esx_interface_driver.c | 37 +--- src/esx/esx_interface_driver.h | 4 +- src/esx/esx_network_driver.c | 37 +--- src/esx/esx_network_driver.h | 4 +- src/esx/esx_nwfilter_driver.c | 74 -------- src/esx/esx_nwfilter_driver.h | 28 --- src/esx/esx_secret_driver.c | 72 ------- src/esx/esx_secret_driver.h | 27 --- src/esx/esx_storage_driver.c | 37 +--- src/esx/esx_storage_driver.h | 4 +- src/hyperv/hyperv_device_monitor.c | 71 ------- src/hyperv/hyperv_device_monitor.h | 28 --- src/hyperv/hyperv_driver.c | 25 +-- src/hyperv/hyperv_interface_driver.c | 71 ------- src/hyperv/hyperv_interface_driver.h | 28 --- src/hyperv/hyperv_network_driver.c | 71 ------- src/hyperv/hyperv_network_driver.h | 28 --- src/hyperv/hyperv_nwfilter_driver.c | 71 ------- src/hyperv/hyperv_nwfilter_driver.h | 28 --- src/hyperv/hyperv_secret_driver.c | 71 ------- src/hyperv/hyperv_secret_driver.h | 28 --- src/hyperv/hyperv_storage_driver.c | 71 ------- src/hyperv/hyperv_storage_driver.h | 28 --- src/interface/interface_backend_netcf.c | 26 +-- src/interface/interface_backend_udev.c | 120 ++++++------ src/libvirt.c | 327 ++++++++++++++------------------ src/libvirt_daemon.syms | 15 -- src/libvirt_internal.h | 2 - src/libvirt_private.syms | 19 +- src/libxl/libxl_driver.c | 10 +- src/lxc/lxc_driver.c | 13 +- src/lxc/lxc_process.c | 8 +- src/lxc/lxc_process.h | 3 +- src/network/bridge_driver.c | 25 +-- src/node_device/node_device_driver.c | 78 +++----- src/node_device/node_device_driver.h | 6 +- src/node_device/node_device_hal.c | 106 ++++------- src/node_device/node_device_udev.c | 78 +++----- src/nwfilter/nwfilter_driver.c | 132 +++++-------- src/openvz/openvz_driver.c | 12 +- src/phyp/phyp_driver.c | 64 +------ src/qemu/qemu_command.c | 8 +- src/qemu/qemu_command.h | 1 - src/qemu/qemu_driver.c | 12 +- src/qemu/qemu_hotplug.c | 12 +- src/qemu/qemu_hotplug.h | 1 - src/qemu/qemu_process.c | 10 +- src/remote/remote_driver.c | 158 ++------------- src/secret/secret_driver.c | 215 +++++++++------------ src/storage/storage_driver.c | 25 +-- src/test/test_driver.c | 156 ++------------- src/uml/uml_conf.c | 9 +- src/uml/uml_driver.c | 10 +- src/vbox/vbox_common.c | 1 - src/vbox/vbox_driver.c | 47 ++--- src/vbox/vbox_network.c | 32 ---- src/vbox/vbox_storage.c | 30 --- src/vmware/vmware_driver.c | 12 +- src/xen/xen_driver.c | 11 +- src/xenapi/xenapi_driver.c | 10 +- tests/qemuxml2argvtest.c | 17 -- tests/virdrivermoduletest.c | 18 +- 81 files changed, 648 insertions(+), 2523 deletions(-) delete mode 100644 src/esx/esx_device_monitor.c delete mode 100644 src/esx/esx_device_monitor.h delete mode 100644 src/esx/esx_nwfilter_driver.c delete mode 100644 src/esx/esx_nwfilter_driver.h delete mode 100644 src/esx/esx_secret_driver.c delete mode 100644 src/esx/esx_secret_driver.h delete mode 100644 src/hyperv/hyperv_device_monitor.c delete mode 100644 src/hyperv/hyperv_device_monitor.h delete mode 100644 src/hyperv/hyperv_interface_driver.c delete mode 100644 src/hyperv/hyperv_interface_driver.h delete mode 100644 src/hyperv/hyperv_network_driver.c delete mode 100644 src/hyperv/hyperv_network_driver.h delete mode 100644 src/hyperv/hyperv_nwfilter_driver.c delete mode 100644 src/hyperv/hyperv_nwfilter_driver.h delete mode 100644 src/hyperv/hyperv_secret_driver.c delete mode 100644 src/hyperv/hyperv_secret_driver.h delete mode 100644 src/hyperv/hyperv_storage_driver.c delete mode 100644 src/hyperv/hyperv_storage_driver.h delete mode 100644 src/libvirt_daemon.syms
Nice diff stat. ACK series but see my comment to the last patch. Michal
participants (2)
-
Daniel P. Berrange
-
Michal Privoznik