xenRegister (void)
{
/* Ignore failures here. */
- (void) xenHypervisorInit ();
+ (void) xenHypervisorInit (NULL);
#ifdef WITH_LIBVIRTD
if (virRegisterStateDriver (&state_driver) == -1) return -1;
/**
* xenHypervisorInit:
+ * @override_versions: pointer to optional struct xenHypervisorVersions with
+ * version information used instead of automatic version detection.
*
* Initialize the hypervisor layer. Try to detect the kind of interface
* used i.e. pre or post changeset 10277
+ *
+ * Returns 0 or -1 in case of failure
*/
int
-xenHypervisorInit(void)
+xenHypervisorInit(struct xenHypervisorVersions *override_versions)
{
int fd, ret, cmd, errcode;
hypercall_t hc;
return -1;
}
+ if (override_versions) {
+ hv_versions = *override_versions;
+ in_init = 0;
+ return 0;
+ }
+
/* Xen hypervisor version detection begins. */
ret = open(XEN_HYPERVISOR_SOCKET, O_RDWR);
if (ret < 0) {
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
if (initialized == 0)
- if (xenHypervisorInit() == -1)
+ if (xenHypervisorInit(NULL) == -1)
return -1;
priv->handle = -1;
};
extern struct xenUnifiedDriver xenHypervisorDriver;
-int xenHypervisorInit (void);
+int xenHypervisorInit(struct xenHypervisorVersions *override_versions);
virCapsPtr xenHypervisorMakeCapabilities (virConnectPtr conn);
}
+/* Fake initialization data for xenHypervisorInit(). Must be initialized
+ * explicitly before the implicit call via virInitialize(). */
+static struct xenHypervisorVersions hv_versions = {
+ .hv = 0,
+ .hypervisor = 2,
+ .sys_interface = -1,
+ .dom_interface = -1,
+};
+
static int
mymain(void)
{
int ret = 0;
+ xenHypervisorInit(&hv_versions);
virInitialize();
if (virtTestRun("Capabilities for i686, no PAE, no HVM",