提交 d10b02b5 编写于 作者: M Mikhail Feoktistov 提交者: Maxim Nestratov

vz: save vz version in connection structure

Move code from connectGetVersion callback to vzInitVersion function
上级 0b231195
...@@ -62,7 +62,6 @@ ...@@ -62,7 +62,6 @@
VIR_LOG_INIT("parallels.parallels_driver"); VIR_LOG_INIT("parallels.parallels_driver");
#define PRLCTL "prlctl" #define PRLCTL "prlctl"
#define PRLSRVCTL "prlsrvctl"
static int vzConnectClose(virConnectPtr conn); static int vzConnectClose(virConnectPtr conn);
...@@ -234,6 +233,9 @@ vzOpenDefault(virConnectPtr conn) ...@@ -234,6 +233,9 @@ vzOpenDefault(virConnectPtr conn)
if (prlsdkConnect(privconn) < 0) if (prlsdkConnect(privconn) < 0)
goto err_free; goto err_free;
if (vzInitVersion(privconn) < 0)
goto error;
if (!(privconn->caps = vzBuildCapabilities())) if (!(privconn->caps = vzBuildCapabilities()))
goto error; goto error;
...@@ -345,49 +347,11 @@ vzConnectClose(virConnectPtr conn) ...@@ -345,49 +347,11 @@ vzConnectClose(virConnectPtr conn)
} }
static int static int
vzConnectGetVersion(virConnectPtr conn ATTRIBUTE_UNUSED, unsigned long *hvVer) vzConnectGetVersion(virConnectPtr conn, unsigned long *hvVer)
{ {
char *output, *sVer, *tmp; vzConnPtr privconn = conn->privateData;
const char *searchStr = "prlsrvctl version "; *hvVer = privconn->vzVersion;
int ret = -1; return 0;
output = vzGetOutput(PRLSRVCTL, "--help", NULL);
if (!output) {
vzParseError();
goto cleanup;
}
if (!(sVer = strstr(output, searchStr))) {
vzParseError();
goto cleanup;
}
sVer = sVer + strlen(searchStr);
/* parallels server has versions number like 6.0.17977.782218,
* so libvirt can handle only first two numbers. */
if (!(tmp = strchr(sVer, '.'))) {
vzParseError();
goto cleanup;
}
if (!(tmp = strchr(tmp + 1, '.'))) {
vzParseError();
goto cleanup;
}
tmp[0] = '\0';
if (virParseVersionString(sVer, hvVer, true) < 0) {
vzParseError();
goto cleanup;
}
ret = 0;
cleanup:
VIR_FREE(output);
return ret;
} }
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "datatypes.h" #include "datatypes.h"
#define VIR_FROM_THIS VIR_FROM_PARALLELS #define VIR_FROM_THIS VIR_FROM_PARALLELS
#define PRLSRVCTL "prlsrvctl"
/** /**
* vzDomObjFromDomain: * vzDomObjFromDomain:
...@@ -178,3 +179,49 @@ vzNewDomain(vzConnPtr privconn, char *name, const unsigned char *uuid) ...@@ -178,3 +179,49 @@ vzNewDomain(vzConnPtr privconn, char *name, const unsigned char *uuid)
VIR_FREE(pdom); VIR_FREE(pdom);
return NULL; return NULL;
} }
int
vzInitVersion(vzConnPtr privconn)
{
char *output, *sVer, *tmp;
const char *searchStr = "prlsrvctl version ";
int ret = -1;
output = vzGetOutput(PRLSRVCTL, "--help", NULL);
if (!output) {
vzParseError();
goto cleanup;
}
if (!(sVer = strstr(output, searchStr))) {
vzParseError();
goto cleanup;
}
sVer = sVer + strlen(searchStr);
/* parallels server has versions number like 6.0.17977.782218 or 7.0.0,
* In libvirt we handle only first two numbers. */
if (!(tmp = strchr(sVer, '.'))) {
vzParseError();
goto cleanup;
}
if (!(tmp = strchr(tmp + 1, '.'))) {
vzParseError();
goto cleanup;
}
tmp[0] = '\0';
if (virParseVersionString(sVer, &(privconn->vzVersion), true) < 0) {
vzParseError();
goto cleanup;
}
ret = 0;
cleanup:
VIR_FREE(output);
return ret;
}
...@@ -62,6 +62,7 @@ struct _vzConn { ...@@ -62,6 +62,7 @@ struct _vzConn {
const char *drivername; const char *drivername;
/* Immutable pointer, self-locking APIs */ /* Immutable pointer, self-locking APIs */
virConnectCloseCallbackDataPtr closeCallback; virConnectCloseCallbackDataPtr closeCallback;
unsigned long vzVersion;
}; };
typedef struct _vzConn vzConn; typedef struct _vzConn vzConn;
...@@ -97,6 +98,8 @@ virDomainObjPtr ...@@ -97,6 +98,8 @@ virDomainObjPtr
vzNewDomain(vzConnPtr privconn, vzNewDomain(vzConnPtr privconn,
char *name, char *name,
const unsigned char *uuid); const unsigned char *uuid);
int
vzInitVersion(vzConnPtr privconn);
# define PARALLELS_BLOCK_STATS_FOREACH(OP) \ # define PARALLELS_BLOCK_STATS_FOREACH(OP) \
OP(rd_req, VIR_DOMAIN_BLOCK_STATS_READ_REQ, "read_requests") \ OP(rd_req, VIR_DOMAIN_BLOCK_STATS_READ_REQ, "read_requests") \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册