Re: [libvirt] [PATCH] vz: add func to set shared drivers after libvirtd init
22.10.2015 11:13, Mikhail Feoktistov пишет: Built-in drivers in libvirt are initialized before libvirtd initialization. Libvirt loads shared drivers on libvirtd initialization step. For built-in drivers we can't set shared drivers, because they are not initialized yet. This patch adds function to set shared drivers after libvirtd init. --- daemon/libvirtd.c| 4 src/libvirt.c| 41 + src/libvirt_internal.h | 1 + src/libvirt_private.syms | 1 + 4 files changed, 47 insertions(+) diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index 250094b..aac1826 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -431,6 +431,10 @@ static void daemonInitialize(void) bhyveRegister(); # endif #endif +# ifdef WITH_VZ +virAssignSharedDrivers("vz"); +virAssignSharedDrivers("Parallels"); +# endif } diff --git a/src/libvirt.c b/src/libvirt.c index 2602dde..4c4b7bd 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -1433,3 +1433,44 @@ virTypedParameterValidateSet(virConnectPtr conn, } return 0; } + +/** + * virAssignSharedDrivers: + * @name: name of connection driver + * + * This function fills in any empty pointers for shared drivers + * in connect driver structure + * + * Returns 0 in case of success, -1 in case of error +*/ +int +virAssignSharedDrivers(const char *name) +{ +size_t i; + +if (name == NULL) { +virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Driver name must be specified")); +return -1; +} + +for (i = 0; i < virConnectDriverTabCount; i++) { +if (STREQ(virConnectDriverTab[i]->hypervisorDriver->name, name)) { +if (virConnectDriverTab[i]->interfaceDriver == NULL) +virConnectDriverTab[i]->interfaceDriver = virSharedInterfaceDriver; +if (virConnectDriverTab[i]->networkDriver == NULL) +virConnectDriverTab[i]->networkDriver = virSharedNetworkDriver; +if (virConnectDriverTab[i]->nodeDeviceDriver == NULL) +virConnectDriverTab[i]->nodeDeviceDriver = virSharedNodeDeviceDriver; +if (virConnectDriverTab[i]->nwfilterDriver == NULL) +virConnectDriverTab[i]->nwfilterDriver = virSharedNWFilterDriver; +if (virConnectDriverTab[i]->secretDriver == NULL) +virConnectDriverTab[i]->secretDriver = virSharedSecretDriver; +if (virConnectDriverTab[i]->storageDriver == NULL) +virConnectDriverTab[i]->storageDriver = virSharedStorageDriver; +break; + } +} + +return 0; +} diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h index 1313b58..2a7227b 100644 --- a/src/libvirt_internal.h +++ b/src/libvirt_internal.h @@ -289,4 +289,5 @@ virTypedParameterValidateSet(virConnectPtr conn, virTypedParameterPtr params, int nparams); +int virAssignSharedDrivers(const char *name); #endif diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index be6ee19..340555a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -943,6 +943,7 @@ virFDStreamSetInternalCloseCb; # libvirt_internal.h +virAssignSharedDrivers; virConnectSupportsFeature; virDomainMigrateBegin3; virDomainMigrateBegin3Params; Looks good. ACK. -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH] vz: add func to set shared drivers after libvirtd init
Built-in drivers in libvirt are initialized before libvirtd initialization. Libvirt loads shared drivers on libvirtd initialization step. For built-in drivers we can't set shared drivers, because they are not initialized yet. This patch adds function to set shared drivers after libvirtd init. --- daemon/libvirtd.c| 4 src/libvirt.c| 41 + src/libvirt_internal.h | 1 + src/libvirt_private.syms | 1 + 4 files changed, 47 insertions(+) diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index 250094b..aac1826 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -431,6 +431,10 @@ static void daemonInitialize(void) bhyveRegister(); # endif #endif +# ifdef WITH_VZ +virAssignSharedDrivers("vz"); +virAssignSharedDrivers("Parallels"); +# endif } diff --git a/src/libvirt.c b/src/libvirt.c index 2602dde..4c4b7bd 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -1433,3 +1433,44 @@ virTypedParameterValidateSet(virConnectPtr conn, } return 0; } + +/** + * virAssignSharedDrivers: + * @name: name of connection driver + * + * This function fills in any empty pointers for shared drivers + * in connect driver structure + * + * Returns 0 in case of success, -1 in case of error +*/ +int +virAssignSharedDrivers(const char *name) +{ +size_t i; + +if (name == NULL) { +virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Driver name must be specified")); +return -1; +} + +for (i = 0; i < virConnectDriverTabCount; i++) { +if (STREQ(virConnectDriverTab[i]->hypervisorDriver->name, name)) { +if (virConnectDriverTab[i]->interfaceDriver == NULL) +virConnectDriverTab[i]->interfaceDriver = virSharedInterfaceDriver; +if (virConnectDriverTab[i]->networkDriver == NULL) +virConnectDriverTab[i]->networkDriver = virSharedNetworkDriver; +if (virConnectDriverTab[i]->nodeDeviceDriver == NULL) +virConnectDriverTab[i]->nodeDeviceDriver = virSharedNodeDeviceDriver; +if (virConnectDriverTab[i]->nwfilterDriver == NULL) +virConnectDriverTab[i]->nwfilterDriver = virSharedNWFilterDriver; +if (virConnectDriverTab[i]->secretDriver == NULL) +virConnectDriverTab[i]->secretDriver = virSharedSecretDriver; +if (virConnectDriverTab[i]->storageDriver == NULL) +virConnectDriverTab[i]->storageDriver = virSharedStorageDriver; +break; + } +} + +return 0; +} diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h index 1313b58..2a7227b 100644 --- a/src/libvirt_internal.h +++ b/src/libvirt_internal.h @@ -289,4 +289,5 @@ virTypedParameterValidateSet(virConnectPtr conn, virTypedParameterPtr params, int nparams); +int virAssignSharedDrivers(const char *name); #endif diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index be6ee19..340555a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -943,6 +943,7 @@ virFDStreamSetInternalCloseCb; # libvirt_internal.h +virAssignSharedDrivers; virConnectSupportsFeature; virDomainMigrateBegin3; virDomainMigrateBegin3Params; -- 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list