[Libvir] Connect up more internal driver methods
Daniel P. Berrange
berrange at redhat.com
Fri May 26 18:15:43 UTC 2006
The attached patch connects up more of the internal driver methods, as
the final step preparing for a minimally operational test driver.
* src/hash.c, src/internal.h: Switch the uuid parameter in virGetDomain
to be of type 'unsigned char' since its a raw UUID we're passing in,
not a printable one.
* src/libvirt.c: Remove bogus "unsigned char" -> "char" type casts. Hook
up the "domainLookupByID", "domainLookupByUUID", "domainLookupByName"
and "domainGetInfo" driver backend functions.
Regards,
Dan.
--
|=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=|
|=- Perl modules: http://search.cpan.org/~danberr/ -=|
|=- Projects: http://freshmeat.net/~danielpb/ -=|
|=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|
-------------- next part --------------
# HG changeset patch
# User "Daniel P. Berrange <berrange at redhat.com>"
# Node ID 5ec05a73e1fb1eeda431c0ddc7bd6ae1ce44812b
# Parent e6fc9607648cbe0b150bbaf9f7e9a07e8dd263e3
Hooked up more driver methods. Fix type for uuid parameter in virGetDomain
diff -r e6fc9607648c -r 5ec05a73e1fb ChangeLog
--- a/ChangeLog Fri May 26 12:02:10 2006 -0400
+++ b/ChangeLog Fri May 26 12:03:10 2006 -0400
@@ -1,3 +1,12 @@ Fri May 26 11:40:20 EDT 2006 Daniel P. B
+Fri May 26 11:59:20 EDT 2006 Daniel P. Berrange <berrange at redhat.com>
+
+ * src/hash.c, src/internal.h: Switch the uuid parameter in virGetDomain
+ to be of type 'unsigned char' since its a raw UUID we're passing in,
+ not a printable one.
+ * src/libvirt.c: Remove bogus "unsigned char" -> "char" type casts. Hook
+ up the "domainLookupByID", "domainLookupByUUID", "domainLookupByName"
+ and "domainGetInfo" driver backend functions.
+
Fri May 26 11:40:20 EDT 2006 Daniel P. Berrange <berrange at redhat.com>
* src/virsh.c: added 'domuuid' command to display printable UUID
diff -r e6fc9607648c -r 5ec05a73e1fb src/hash.c
--- a/src/hash.c Fri May 26 12:02:10 2006 -0400
+++ b/src/hash.c Fri May 26 12:03:10 2006 -0400
@@ -602,7 +602,7 @@ virFreeConnect(virConnectPtr conn) {
* Returns a pointer to the domain, or NULL in case of failure
*/
virDomainPtr
-virGetDomain(virConnectPtr conn, const char *name, const char *uuid) {
+virGetDomain(virConnectPtr conn, const char *name, const unsigned char *uuid) {
virDomainPtr ret = NULL;
if ((!VIR_IS_CONNECT(conn)) || ((name == NULL) && (uuid == NULL)) ||
diff -r e6fc9607648c -r 5ec05a73e1fb src/internal.h
--- a/src/internal.h Fri May 26 12:02:10 2006 -0400
+++ b/src/internal.h Fri May 26 12:03:10 2006 -0400
@@ -182,7 +182,7 @@ int virFreeConnect (virConnectPtr conn)
int virFreeConnect (virConnectPtr conn);
virDomainPtr virGetDomain (virConnectPtr conn,
const char *name,
- const char *uuid);
+ const unsigned char *uuid);
int virFreeDomain (virConnectPtr conn,
virDomainPtr domain);
virDomainPtr virGetDomainByID(virConnectPtr conn,
diff -r e6fc9607648c -r 5ec05a73e1fb src/libvirt.c
--- a/src/libvirt.c Fri May 26 12:02:10 2006 -0400
+++ b/src/libvirt.c Fri May 26 12:03:10 2006 -0400
@@ -29,7 +29,6 @@
#include "xend_internal.h"
#include "xs_internal.h"
#include "xml.h"
-
/*
* TODO:
@@ -293,6 +292,7 @@ virConnectOpenReadOnly(const char *name)
VIR_DRV_OPEN_QUIET | VIR_DRV_OPEN_RO);
if (res == 0)
ret->drivers[ret->nb_drivers++] = virDriverTab[i];
+
}
}
if (ret->nb_drivers == 0) {
@@ -600,6 +600,7 @@ virDomainLookupByID(virConnectPtr conn,
virDomainPtr ret;
char *name = NULL;
unsigned char uuid[16];
+ int i;
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
@@ -608,6 +609,16 @@ virDomainLookupByID(virConnectPtr conn,
if (id < 0) {
virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
return (NULL);
+ }
+
+ /* Go though the driver registered entry points */
+ for (i = 0;i < conn->nb_drivers;i++) {
+ if ((conn->drivers[i] != NULL) &&
+ (conn->drivers[i]->domainLookupByID != NULL)) {
+ ret = conn->drivers[i]->domainLookupByID(conn, id);
+ if (ret)
+ return(ret);
+ }
}
/* retrieve home path of the domain */
@@ -633,7 +644,7 @@ virDomainLookupByID(virConnectPtr conn,
if (name == NULL)
goto error;
- ret = virGetDomain(conn, name, (const char *)&uuid[0]);
+ ret = virGetDomain(conn, name, uuid);
if (ret == NULL) {
virLibConnError(conn, VIR_ERR_NO_MEMORY, "Allocating domain");
goto error;
@@ -670,6 +681,7 @@ virDomainLookupByUUID(virConnectPtr conn
char **tmp;
unsigned char ident[16];
int id = -1;
+ int i;
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
@@ -679,6 +691,17 @@ virDomainLookupByUUID(virConnectPtr conn
virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
return (NULL);
}
+
+ /* Go though the driver registered entry points */
+ for (i = 0;i < conn->nb_drivers;i++) {
+ if ((conn->drivers[i] != NULL) &&
+ (conn->drivers[i]->domainLookupByUUID != NULL)) {
+ ret = conn->drivers[i]->domainLookupByUUID(conn, uuid);
+ if (ret)
+ return(ret);
+ }
+ }
+
names = xenDaemonListDomains(conn);
tmp = names;
@@ -701,7 +724,7 @@ virDomainLookupByUUID(virConnectPtr conn
if (name == NULL)
return (NULL);
- ret = virGetDomain(conn, name, (const char *)&uuid[0]);
+ ret = virGetDomain(conn, name, uuid);
if (ret == NULL) {
if (name != NULL)
free(name);
@@ -774,6 +797,7 @@ virDomainLookupByName(virConnectPtr conn
virDomainLookupByName(virConnectPtr conn, const char *name)
{
virDomainPtr ret = NULL;
+ int i;
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
@@ -782,6 +806,16 @@ virDomainLookupByName(virConnectPtr conn
if (name == NULL) {
virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
return (NULL);
+ }
+
+ /* Go though the driver registered entry points */
+ for (i = 0;i < conn->nb_drivers;i++) {
+ if ((conn->drivers[i] != NULL) &&
+ (conn->drivers[i]->domainLookupByName != NULL)) {
+ ret = conn->drivers[i]->domainLookupByName(conn, name);
+ if (ret)
+ return(ret);
+ }
}
/* try first though Xend */
@@ -1400,6 +1434,7 @@ virDomainGetInfo(virDomainPtr domain, vi
virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
{
int ret;
+ int i;
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
virLibDomainError(domain, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
@@ -1411,6 +1446,14 @@ virDomainGetInfo(virDomainPtr domain, vi
}
memset(info, 0, sizeof(virDomainInfo));
+
+ for (i = 0;i < domain->conn->nb_drivers;i++) {
+ if ((domain->conn->drivers[i] != NULL) &&
+ (domain->conn->drivers[i]->domainGetInfo != NULL)) {
+ if (domain->conn->drivers[i]->domainGetInfo(domain, info) == 0)
+ return 0;
+ }
+ }
/*
* if we have direct access though the hypervisor do a direct call
More information about the libvir-list
mailing list