提交 7c82cb73 编写于 作者: D Daniel Veillard

* configure.in src/Makefile.am src/libvir.c src/xen_internal.c

  src/xen_internal.h: removed dependancy on xenctrl library, untested
  yet.
Daniel
上级 b996e843
Wed Dec 7 19:09:48 CET 2005 Daniel Veillard <veillard@redhat.com>
* configure.in src/Makefile.am src/libvir.c src/xen_internal.c
src/xen_internal.h: removed dependancy on xenctrl library, untested
yet.
Wed Dec 7 15:08:54 CET 2005 Daniel Veillard <veillard@redhat.com>
* docs/*: adding missing links to API page.
......
......@@ -66,7 +66,7 @@ dnl specific tests to setup DV devel environments with debug etc ...
dnl
if [[ "${LOGNAME}" = "veillard" -a "`pwd`" = "/u/veillard/libvir" ]] ; then
if test "${GCC}" = "yes" ; then
CFLAGS="-g -O -pedantic -W -Wformat -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wall"
CFLAGS="-g -O -W -Wformat -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls -Wall"
fi
STATIC_BINARIES="-static"
else
......@@ -75,7 +75,6 @@ fi
AC_SUBST(STATIC_BINARIES)
dnl search for the low level Xen library
AC_SEARCH_LIBS(xc_domain_create, [xenctrl], [], [AC_MSG_ERROR([Xen control library not found])])
AC_SEARCH_LIBS(xs_read, [xenstore], [], [AC_MSG_ERROR([Xen store library not found])])
AC_OUTPUT(Makefile src/Makefile include/Makefile docs/Makefile libvir.pc libvir.spec)
......@@ -10,7 +10,10 @@ lib_LTLIBRARIES = libvir.la
libvir_la_LIBADD =
libvir_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libvir_sym.version \
-version-info @LIBXEN_VERSION_INFO@
libvir_la_SOURCES = libvir.c internal.h hash.c hash.h
libvir_la_SOURCES = \
libvir.c internal.hi \
hash.c hash.h \
xen_internal.c xen_internal.h
noinst_PROGRAMS=virsh
......
/*
* libvir.h: Main interfaces for the libvir library to handle virtualization
* libvir.c: Main interfaces for the libvir library to handle virtualization
* domains from a process running in domain 0
*
* Copyright (C) 2005 Red Hat, Inc.
......@@ -10,11 +10,11 @@
*/
#include "libvir.h"
#include "xen_internal.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <xenctrl.h>
#include <xs.h>
#include "internal.h"
#include "hash.h"
......@@ -82,7 +82,7 @@ virConnectOpen(const char *name) {
if (name != NULL)
return(NULL);
handle = xc_interface_open();
handle = xenHypervisorOpen();
if (handle == -1)
goto failed;
xshandle = xs_daemon_open();
......@@ -103,7 +103,7 @@ virConnectOpen(const char *name) {
return(ret);
failed:
if (handle >= 0)
xc_interface_close(handle);
xenHypervisorClose(handle);
if (xshandle != NULL)
xs_daemon_close(xshandle);
if (ret != NULL)
......@@ -187,7 +187,7 @@ virConnectClose(virConnectPtr conn) {
xs_daemon_close(conn->xshandle);
conn->xshandle = NULL;
if (conn->handle != -1)
xc_interface_close(conn->handle);
xenHypervisorClose(conn->handle);
conn->handle = -1;
free(conn);
return(0);
......@@ -427,19 +427,10 @@ virDomainPtr
virDomainLookupByID(virConnectPtr conn, int id) {
char *path;
virDomainPtr ret;
xc_dominfo_t info;
int res;
if ((conn == NULL) || (conn->magic != VIR_CONNECT_MAGIC) || (id < 0))
return(NULL);
if ((conn->flags & VIR_CONNECT_RO) == 0) {
res = xc_domain_getinfo(conn->handle, (uint32_t) id, 1, &info);
if (res != 1) {
return(NULL);
}
}
path = xs_get_domain_path(conn->xshandle, (unsigned int) id);
if (path == NULL) {
return(NULL);
......@@ -640,11 +631,11 @@ virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info) {
}
} else {
xc_domaininfo_t dominfo;
dom0_getdomaininfo_t dominfo;
dominfo.domain = domain->handle;
ret = xc_domain_getinfolist(domain->conn->handle, domain->handle,
1, &dominfo);
ret = xenHypervisorGetDomainInfo(domain->conn->handle, domain->handle,
&dominfo);
if (ret <= 0)
return(-1);
switch (dominfo.flags & 0xFF) {
......
/*
* xen_internal.c: direct access to Xen hypervisor level
*
* Copyright (C) 2005 Red Hat, Inc.
*
* See COPYING.LIB for the License of this software
*
* Daniel Veillard <veillard@redhat.com>
*/
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <xen/dom0_ops.h>
#include <xen/xen.h>
#ifndef __LINUX_PUBLIC_PRIVCMD_H__
typedef struct hypercall_struct
{
unsigned long op;
unsigned long arg[5];
} hypercall_t;
#endif
#include "internal.h"
#include "xen_internal.h"
#define XEN_HYPERVISOR_SOCKET "/proc/xen/privcmd"
/**
* xenHypervisorOpen:
*
* Connects to the Xen hypervisor.
*
* Returns the handle or -1 in case of error.
*/
int xenHypervisorOpen(void) {
int ret;
ret = open(XEN_HYPERVISOR_SOCKET, O_RDWR);
if (ret < 0)
return(-1);
return(ret);
}
/**
* xenHypervisorClose:
* @handle: the handle to the Xen hypervisor
*
* Close the connection to the Xen hypervisor.
*
* Returns 0 in case of success or -1 in case of error.
*/
int xenHypervisorClose(int handle) {
int ret;
if (handle < 0)
return(-1);
ret = close(handle);
if (ret < 0)
return(-1);
return(0);
}
/**
* xenHypervisorDoOp:
* @handle: the handle to the Xen hypervisor
* @op: pointer to the hyperviros operation structure
*
* Do an hypervisor operation, this leads to an hypervisor call through ioctl.
*
* Returns 0 in case of success and -1 in case of error.
*/
static int
xenHypervisorDoOp(int handle, dom0_op_t *op) {
int ret;
hypercall_t hc;
op->interface_version = DOM0_INTERFACE_VERSION;
hc.op = __HYPERVISOR_dom0_op;
hc.arg[0] = (unsigned long)op;
if (mlock(op, sizeof(dom0_op_t)) < 0)
return(-1);
ret = ioctl(handle, _IOC(_IOC_NONE, 'P', 0, sizeof(hypercall_t)),
(unsigned long) &hc);
if (munlock(op, sizeof(dom0_op_t)) < 0)
ret = -1;
if (ret < 0)
return(-1);
return(0);
}
/**
* xenHypervisorGetDomainInfo:
* @handle: the handle to the Xen hypervisor
* @domain: the domain ID
* @info: the place where informations should be stored
*
* Do an hypervisor call to get the related set of domain informations.
*
* Returns 0 in case of success, -1 in case of error.
*/
int
xenHypervisorGetDomainInfo(int handle, int domain, dom0_getdomaininfo_t *info) {
dom0_op_t op;
int ret;
if (info == NULL)
return(-1);
memset(info, 0, sizeof(dom0_getdomaininfo_t));
if (mlock(info, sizeof(dom0_getdomaininfo_t)) < 0)
return(-1);
op.cmd = DOM0_GETDOMAININFOLIST;
op.u.getdomaininfolist.first_domain = (domid_t) domain;
op.u.getdomaininfolist.max_domains = 1;
op.u.getdomaininfolist.buffer = info;
ret = xenHypervisorDoOp(handle, &op);
if (munlock(info, sizeof(dom0_getdomaininfo_t)) < 0)
ret = -1;
if (ret <= 0)
return(-1);
return(0);
}
/*
* xen_internal.h: internal API for direct access to Xen hypervisor level
*
* Copyright (C) 2005 Red Hat, Inc.
*
* See COPYING.LIB for the License of this software
*
* Daniel Veillard <veillard@redhat.com>
*/
#ifndef __VIR_XEN_INTERNAL_H__
#define __VIR_XEN_INTERNAL_H__
#include <stdint.h>
#include <xen/dom0_ops.h>
#ifdef __cplusplus
extern "C" {
#endif
int xenHypervisorOpen (void);
int xenHypervisorClose (int handle);
int xenHypervisorGetDomainInfo (int handle,
int domain,
dom0_getdomaininfo_t *info);
#ifdef __cplusplus
}
#endif
#endif /* __VIR_XEN_INTERNAL_H__ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册