From 2bfd45c9428fc25ccdeab30689fb7318d291223e Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Tue, 13 Jun 2006 18:29:42 +0000 Subject: [PATCH] * src/libvirt.c src/xen_internal.c src/xend_internal.c src/xs_internal.c: fix the connection and GetType initialization. Daniel --- ChangeLog | 5 +++++ src/libvirt.c | 25 ++++++++++++++++++++++--- src/xen_internal.c | 26 ++++++++++++++++++++++++-- src/xend_internal.c | 23 ++++++++++++++++++++++- src/xs_internal.c | 2 +- 5 files changed, 74 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 73365f95e2..b3a3217c03 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Jun 13 18:35:22 EDT 2006 Daniel Veillard + + * src/libvirt.c src/xen_internal.c src/xend_internal.c + src/xs_internal.c: fix the connection and GetType initialization. + Tue Jun 13 16:37:27 EDT 2006 Daniel Veillard * docs//*: rebuilt the documentation diff --git a/src/libvirt.c b/src/libvirt.c index dd0cd4a50a..80a61d967c 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -217,12 +217,19 @@ virGetVersion(unsigned long *libVer, const char *type, virConnectPtr virConnectOpen(const char *name) { - int i, res; + int i, res, for_xen = 0; virConnectPtr ret = NULL; if (!initialized) virInitialize(); + if (name == NULL) { + name = "Xen"; + for_xen = 1; + } else if (strncasecmp(name, "xen", 3)) { + for_xen = 1; + } + ret = virGetConnect(); if (ret == NULL) { virLibConnError(NULL, VIR_ERR_NO_MEMORY, "Allocating connection"); @@ -236,8 +243,8 @@ virConnectOpen(const char *name) * For a default connect to Xen make sure we manage to contact * all related drivers. */ - if ((res < 0) && (name == NULL) && - (!strncmp(virDriverTab[i]->name, "Xen", 3))) + if ((res < 0) && (for_xen) && + (!strncasecmp(virDriverTab[i]->name, "xen", 3))) goto failed; if (res == 0) ret->drivers[ret->nb_drivers++] = virDriverTab[i]; @@ -282,6 +289,9 @@ virConnectOpenReadOnly(const char *name) if (!initialized) virInitialize(); + if (name == NULL) + name = "Xen"; + ret = virGetConnect(); if (ret == NULL) { virLibConnError(NULL, VIR_ERR_NO_MEMORY, "Allocating connection"); @@ -354,11 +364,20 @@ const char * virConnectGetType(virConnectPtr conn) { int i; + const char *ret; if (!VIR_IS_CONNECT(conn)) { virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); return (NULL); } + for (i = 0;i < conn->nb_drivers;i++) { + if ((conn->drivers[i] != NULL) && + (conn->drivers[i]->type != NULL)) { + ret = conn->drivers[i]->type(conn); + if (ret != NULL) + return(ret); + } + } for (i = 0;i < conn->nb_drivers;i++) { if ((conn->drivers[i] != NULL) && (conn->drivers[i]->name != NULL)) { diff --git a/src/xen_internal.c b/src/xen_internal.c index 11473fd6ee..6ab54779dc 100644 --- a/src/xen_internal.c +++ b/src/xen_internal.c @@ -40,6 +40,8 @@ typedef struct hypercall_struct { #define XEN_HYPERVISOR_SOCKET "/proc/xen/privcmd" +static const char * xenHypervisorGetType(virConnectPtr conn); + static virDriver xenHypervisorDriver = { "Xen", (DOM0_INTERFACE_VERSION >> 24) * 1000000 + @@ -48,7 +50,7 @@ static virDriver xenHypervisorDriver = { NULL, /* init */ xenHypervisorOpen, /* open */ xenHypervisorClose, /* close */ - NULL, /* type */ + xenHypervisorGetType, /* type */ xenHypervisorGetVersion, /* version */ NULL, /* nodeGetInfo */ xenHypervisorListDomains, /* listDomains */ @@ -121,7 +123,7 @@ xenHypervisorOpen(virConnectPtr conn, const char *name, int flags) { int ret; - if ((name != NULL) && (strcmp(name, "xen"))) + if ((name != NULL) && (strcasecmp(name, "xen"))) return(-1); conn->handle = -1; @@ -201,6 +203,26 @@ xenHypervisorDoOp(int handle, dom0_op_t * op) return (0); } +/** + * xenHypervisorGetType: + * @conn: pointer to the Xen Hypervisor block + * + * Get the version level of the Hypervisor running. + * + * Returns -1 in case of error, 0 otherwise. if the version can't be + * extracted by lack of capacities returns 0 and @hvVer is 0, otherwise + * @hvVer value is major * 1,000,000 + minor * 1,000 + release + */ +static const char * +xenHypervisorGetType(virConnectPtr conn) +{ + if (!VIR_IS_CONNECT(conn)) { + virXenError(VIR_ERR_INVALID_CONN, __FUNCTION__, 0); + return (NULL); + } + return("Xen"); +} + /** * xenHypervisorGetVersion: * @conn: pointer to the connection block diff --git a/src/xend_internal.c b/src/xend_internal.c index cb1ae7fde3..a682705e40 100644 --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -36,6 +36,7 @@ #include "xend_internal.h" #include "xen_internal.h" /* for DOM0_INTERFACE_VERSION */ +static const char * xenDaemonGetType(virConnectPtr conn); static int xenDaemonNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info); static int xenDaemonGetVersion(virConnectPtr conn, unsigned long *hvVer); @@ -47,7 +48,7 @@ static virDriver xenDaemonDriver = { NULL, /* init */ xenDaemonOpen, /* open */ xenDaemonClose, /* close */ - NULL, /* type */ + xenDaemonGetType, /* type */ xenDaemonGetVersion, /* version */ xenDaemonNodeGetInfo, /* nodeGetInfo */ NULL, /* listDomains */ @@ -2076,6 +2077,26 @@ xenDaemonNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info) { return (ret); } +/** + * xenDaemonGetType: + * @conn: pointer to the Xen Daemon block + * + * Get the version level of the Hypervisor running. + * + * Returns -1 in case of error, 0 otherwise. if the version can't be + * extracted by lack of capacities returns 0 and @hvVer is 0, otherwise + * @hvVer value is major * 1,000,000 + minor * 1,000 + release + */ +static const char * +xenDaemonGetType(virConnectPtr conn) +{ + if (!VIR_IS_CONNECT(conn)) { + virXendError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__); + return (NULL); + } + return("XenDaemon"); +} + /** * xenDaemonGetVersion: * @conn: pointer to the Xen Daemon block diff --git a/src/xs_internal.c b/src/xs_internal.c index 69989e2560..2c61f4af9f 100644 --- a/src/xs_internal.c +++ b/src/xs_internal.c @@ -288,7 +288,7 @@ virConnectCheckStoreID(virConnectPtr conn, int id) int xenStoreOpen(virConnectPtr conn, const char *name, int flags) { - if ((name != NULL) && (strcmp(name, "xen"))) + if ((name != NULL) && (strcasecmp(name, "xen"))) return(-1); if (flags & VIR_DRV_OPEN_RO) -- GitLab