mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
hyperv: Add basic driver for Microsoft Hyper-V
Domain listing, basic information retrieval and domain life cycle management is implemented. But currently the domain XML output lacks the complete devices section. The driver uses OpenWSMAN to directly communicate with a Hyper-V server over its WS-Management interface exposed via Microsoft WinRM. The driver is based on the work of Michael Sievers. This started in the same master program project group at the University of Paderborn as the ESX driver. See Michael's blog for details: http://hyperv4libvirt.wordpress.com/
This commit is contained in:
parent
e224b6f8fb
commit
5e3b0f8b57
@ -29,6 +29,7 @@ src/esx/esx_vi_methods.c
|
||||
src/esx/esx_vi_types.c
|
||||
src/fdstream.c
|
||||
src/hyperv/hyperv_driver.c
|
||||
src/hyperv/hyperv_util.c
|
||||
src/hyperv/hyperv_wmi.c
|
||||
src/interface/netcf_driver.c
|
||||
src/internal.h
|
||||
|
@ -412,6 +412,7 @@ HYPERV_DRIVER_SOURCES = \
|
||||
hyperv/hyperv_device_monitor.c hyperv/hyperv_device_monitor.h \
|
||||
hyperv/hyperv_secret_driver.c hyperv/hyperv_secret_driver.h \
|
||||
hyperv/hyperv_nwfilter_driver.c hyperv/hyperv_nwfilter_driver.h \
|
||||
hyperv/hyperv_util.c hyperv/hyperv_util.h \
|
||||
hyperv/hyperv_wmi.c hyperv/hyperv_wmi.h \
|
||||
hyperv/hyperv_wmi_classes.c hyperv/hyperv_wmi_classes.h \
|
||||
hyperv/openwsman.h
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -26,6 +26,7 @@
|
||||
|
||||
# include "internal.h"
|
||||
# include "virterror_internal.h"
|
||||
# include "hyperv_util.h"
|
||||
# include "openwsman.h"
|
||||
|
||||
# define HYPERV_ERROR(code, ...) \
|
||||
@ -35,6 +36,7 @@
|
||||
typedef struct _hypervPrivate hypervPrivate;
|
||||
|
||||
struct _hypervPrivate {
|
||||
hypervParsedUri *parsedUri;
|
||||
WsManClient *client;
|
||||
};
|
||||
|
||||
|
129
src/hyperv/hyperv_util.c
Normal file
129
src/hyperv/hyperv_util.c
Normal file
@ -0,0 +1,129 @@
|
||||
|
||||
/*
|
||||
* hyperv_util.c: utility functions for the Microsoft Hyper-V driver
|
||||
*
|
||||
* Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "internal.h"
|
||||
#include "datatypes.h"
|
||||
#include "qparams.h"
|
||||
#include "util.h"
|
||||
#include "memory.h"
|
||||
#include "logging.h"
|
||||
#include "uuid.h"
|
||||
#include "hyperv_private.h"
|
||||
#include "hyperv_util.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_HYPERV
|
||||
|
||||
|
||||
|
||||
int
|
||||
hypervParseUri(hypervParsedUri **parsedUri, xmlURIPtr uri)
|
||||
{
|
||||
int result = -1;
|
||||
struct qparam_set *queryParamSet = NULL;
|
||||
struct qparam *queryParam = NULL;
|
||||
int i;
|
||||
|
||||
if (parsedUri == NULL || *parsedUri != NULL) {
|
||||
HYPERV_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (VIR_ALLOC(*parsedUri) < 0) {
|
||||
virReportOOMError();
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef HAVE_XMLURI_QUERY_RAW
|
||||
queryParamSet = qparam_query_parse(uri->query_raw);
|
||||
#else
|
||||
queryParamSet = qparam_query_parse(uri->query);
|
||||
#endif
|
||||
|
||||
if (queryParamSet == NULL) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
for (i = 0; i < queryParamSet->n; i++) {
|
||||
queryParam = &queryParamSet->p[i];
|
||||
|
||||
if (STRCASEEQ(queryParam->name, "transport")) {
|
||||
VIR_FREE((*parsedUri)->transport);
|
||||
|
||||
(*parsedUri)->transport = strdup(queryParam->value);
|
||||
|
||||
if ((*parsedUri)->transport == NULL) {
|
||||
virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (STRNEQ((*parsedUri)->transport, "http") &&
|
||||
STRNEQ((*parsedUri)->transport, "https")) {
|
||||
HYPERV_ERROR(VIR_ERR_INVALID_ARG,
|
||||
_("Query parameter 'transport' has unexpected value "
|
||||
"'%s' (should be http|https)"),
|
||||
(*parsedUri)->transport);
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
VIR_WARN("Ignoring unexpected query parameter '%s'",
|
||||
queryParam->name);
|
||||
}
|
||||
}
|
||||
|
||||
if ((*parsedUri)->transport == NULL) {
|
||||
(*parsedUri)->transport = strdup("https");
|
||||
|
||||
if ((*parsedUri)->transport == NULL) {
|
||||
virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
result = 0;
|
||||
|
||||
cleanup:
|
||||
if (result < 0) {
|
||||
hypervFreeParsedUri(parsedUri);
|
||||
}
|
||||
|
||||
if (queryParamSet != NULL) {
|
||||
free_qparam_set(queryParamSet);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
hypervFreeParsedUri(hypervParsedUri **parsedUri)
|
||||
{
|
||||
if (parsedUri == NULL || *parsedUri == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
VIR_FREE((*parsedUri)->transport);
|
||||
|
||||
VIR_FREE(*parsedUri);
|
||||
}
|
40
src/hyperv/hyperv_util.h
Normal file
40
src/hyperv/hyperv_util.h
Normal file
@ -0,0 +1,40 @@
|
||||
|
||||
/*
|
||||
* hyperv_util.h: utility functions for the Microsoft Hyper-V driver
|
||||
*
|
||||
* Copyright (C) 2011 Matthias Bolte <matthias.bolte@googlemail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __HYPERV_UTIL_H__
|
||||
# define __HYPERV_UTIL_H__
|
||||
|
||||
# include <libxml/uri.h>
|
||||
|
||||
# include "internal.h"
|
||||
|
||||
typedef struct _hypervParsedUri hypervParsedUri;
|
||||
|
||||
struct _hypervParsedUri {
|
||||
char *transport;
|
||||
};
|
||||
|
||||
int hypervParseUri(hypervParsedUri **parsedUri, xmlURIPtr uri);
|
||||
|
||||
void hypervFreeParsedUri(hypervParsedUri **parsedUri);
|
||||
|
||||
#endif /* __HYPERV_UTIL_H__ */
|
Loading…
x
Reference in New Issue
Block a user