Re: [libvirt] [PATCH] vz: add func to set shared drivers after libvirtd init

2015-10-23 Thread Maxim Nestratov

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

2015-10-22 Thread 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;
-- 
1.8.3.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list