mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-21 10:52:22 +00:00
virDomainBlockPeek call
* configure.in: Document AC_SYS_LARGEFILE. * docs/hvsupport.html.in: Document HV support for virDomainBlockPeek. * include/libvirt/libvirt.h.in, src/driver.h, src/libvirt.c, src/libvirt_sym.version: Add virDomainBlockPeek infrastructure. * src/qemu_driver.c, src/test.c: Null versions of this call. * src/xen_unified.c, src/xend_internal.c, src/xend_internal.h, src/xm_internal.c, src/xm_internal.h: Xen implementation. * tests/sexpr2xmldata/sexpr2xml-curmem.xml, tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml: XML output has been reordered slightly in the Xen driver, but should be functionally the same.
This commit is contained in:
parent
0bd57cdbe1
commit
8354895e68
15
ChangeLog
15
ChangeLog
@ -1,3 +1,18 @@
|
|||||||
|
Thu Jun 5 14:10:00 BST 2008 Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
|
||||||
|
virDomainBlockPeek call
|
||||||
|
* configure.in: Document AC_SYS_LARGEFILE.
|
||||||
|
* docs/hvsupport.html.in: Document HV support for virDomainBlockPeek.
|
||||||
|
* include/libvirt/libvirt.h.in, src/driver.h, src/libvirt.c,
|
||||||
|
src/libvirt_sym.version: Add virDomainBlockPeek infrastructure.
|
||||||
|
* src/qemu_driver.c, src/test.c: Null versions of this call.
|
||||||
|
* src/xen_unified.c, src/xend_internal.c, src/xend_internal.h,
|
||||||
|
src/xm_internal.c, src/xm_internal.h: Xen implementation.
|
||||||
|
* tests/sexpr2xmldata/sexpr2xml-curmem.xml,
|
||||||
|
tests/sexpr2xmldata/sexpr2xml-no-source-cdrom.xml: XML output
|
||||||
|
has been reordered slightly in the Xen driver, but should be
|
||||||
|
functionally the same.
|
||||||
|
|
||||||
Wed Jun 4 23:02:21 PST 2008 David L. Leskovec <dlesko@linux.vnet.ibm.com>
|
Wed Jun 4 23:02:21 PST 2008 David L. Leskovec <dlesko@linux.vnet.ibm.com>
|
||||||
|
|
||||||
* src/lxc_driver.c: Add sanity of tty pid before kill()
|
* src/lxc_driver.c: Add sanity of tty pid before kill()
|
||||||
|
@ -60,6 +60,10 @@ AM_PROG_CC_C_O
|
|||||||
|
|
||||||
LIBVIRT_COMPILE_WARNINGS([maximum])
|
LIBVIRT_COMPILE_WARNINGS([maximum])
|
||||||
|
|
||||||
|
dnl Support large files / 64 bit seek offsets.
|
||||||
|
dnl Use --disable-largefile if you don't want this.
|
||||||
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
dnl Availability of various common functions (non-fatal if missing).
|
dnl Availability of various common functions (non-fatal if missing).
|
||||||
AC_CHECK_FUNCS([cfmakeraw regexec uname sched_getaffinity])
|
AC_CHECK_FUNCS([cfmakeraw regexec uname sched_getaffinity])
|
||||||
|
|
||||||
@ -982,8 +986,6 @@ AC_SUBST([CYGWIN_EXTRA_LIBADD])
|
|||||||
AC_SUBST([CYGWIN_EXTRA_PYTHON_LIBADD])
|
AC_SUBST([CYGWIN_EXTRA_PYTHON_LIBADD])
|
||||||
AC_SUBST([MINGW_EXTRA_LDFLAGS])
|
AC_SUBST([MINGW_EXTRA_LDFLAGS])
|
||||||
|
|
||||||
AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
# Set LV_LIBTOOL_OBJDIR to "." or $lt_cv_objdir, depending on whether
|
# Set LV_LIBTOOL_OBJDIR to "." or $lt_cv_objdir, depending on whether
|
||||||
# we're building shared libraries. This is the name of the directory
|
# we're building shared libraries. This is the name of the directory
|
||||||
# in which .o files will be created.
|
# in which .o files will be created.
|
||||||
|
@ -137,7 +137,7 @@ in.
|
|||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
This information changes frequently. This page was last checked or
|
This information changes frequently. This page was last checked or
|
||||||
updated on <i>2007-08-20</i>.
|
updated on <i>2008-06-05</i>.
|
||||||
</p>
|
</p>
|
||||||
<h3>Domain functions</h3>
|
<h3>Domain functions</h3>
|
||||||
<p> x = not supported; empty cell means no information </p>
|
<p> x = not supported; empty cell means no information </p>
|
||||||
@ -254,6 +254,14 @@ updated on <i>2007-08-20</i>.
|
|||||||
<td> ≥ 0.2.0 </td>
|
<td> ≥ 0.2.0 </td>
|
||||||
<td> ≥ 0.3.0 </td>
|
<td> ≥ 0.3.0 </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> virConnectOpenAuth </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> virConnectOpenReadOnly </td>
|
<td> virConnectOpenReadOnly </td>
|
||||||
<td> All </td>
|
<td> All </td>
|
||||||
@ -270,6 +278,14 @@ updated on <i>2007-08-20</i>.
|
|||||||
<td> x </td>
|
<td> x </td>
|
||||||
<td> ≥ 0.3.0 </td>
|
<td> ≥ 0.3.0 </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> virDomainBlockPeek </td>
|
||||||
|
<td> 0.4.3 </td>
|
||||||
|
<td> x </td>
|
||||||
|
<td> x </td>
|
||||||
|
<td> x </td>
|
||||||
|
<td> x </td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> virDomainBlockStats </td>
|
<td> virDomainBlockStats </td>
|
||||||
<td> 0.3.2 </td>
|
<td> 0.3.2 </td>
|
||||||
|
@ -9,7 +9,7 @@ in.
|
|||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
This information changes frequently. This page was last checked or
|
This information changes frequently. This page was last checked or
|
||||||
updated on <i>2007-08-20</i>.
|
updated on <i>2008-06-05</i>.
|
||||||
</p>
|
</p>
|
||||||
<h3>Domain functions</h3>
|
<h3>Domain functions</h3>
|
||||||
<p> x = not supported; empty cell means no information </p>
|
<p> x = not supported; empty cell means no information </p>
|
||||||
@ -118,6 +118,14 @@ updated on <i>2007-08-20</i>.
|
|||||||
<td> ≥ 0.2.0 </td>
|
<td> ≥ 0.2.0 </td>
|
||||||
<td> ≥ 0.3.0 </td>
|
<td> ≥ 0.3.0 </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> virConnectOpenAuth </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> virConnectOpenReadOnly </td>
|
<td> virConnectOpenReadOnly </td>
|
||||||
<td> All </td>
|
<td> All </td>
|
||||||
@ -134,6 +142,14 @@ updated on <i>2007-08-20</i>.
|
|||||||
<td> x </td>
|
<td> x </td>
|
||||||
<td> ≥ 0.3.0 </td>
|
<td> ≥ 0.3.0 </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> virDomainBlockPeek </td>
|
||||||
|
<td> 0.4.3 </td>
|
||||||
|
<td> x </td>
|
||||||
|
<td> x </td>
|
||||||
|
<td> x </td>
|
||||||
|
<td> x </td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> virDomainBlockStats </td>
|
<td> virDomainBlockStats </td>
|
||||||
<td> 0.3.2 </td>
|
<td> 0.3.2 </td>
|
||||||
|
@ -66,12 +66,12 @@ typedef virDomain *virDomainPtr;
|
|||||||
* A domain may be in different states at a given point in time
|
* A domain may be in different states at a given point in time
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VIR_DOMAIN_NOSTATE = 0, /* no state */
|
VIR_DOMAIN_NOSTATE = 0, /* no state */
|
||||||
VIR_DOMAIN_RUNNING = 1, /* the domain is running */
|
VIR_DOMAIN_RUNNING = 1, /* the domain is running */
|
||||||
VIR_DOMAIN_BLOCKED = 2, /* the domain is blocked on resource */
|
VIR_DOMAIN_BLOCKED = 2, /* the domain is blocked on resource */
|
||||||
VIR_DOMAIN_PAUSED = 3, /* the domain is paused by user */
|
VIR_DOMAIN_PAUSED = 3, /* the domain is paused by user */
|
||||||
VIR_DOMAIN_SHUTDOWN= 4, /* the domain is being shut down */
|
VIR_DOMAIN_SHUTDOWN= 4, /* the domain is being shut down */
|
||||||
VIR_DOMAIN_SHUTOFF = 5, /* the domain is shut off */
|
VIR_DOMAIN_SHUTOFF = 5, /* the domain is shut off */
|
||||||
VIR_DOMAIN_CRASHED = 6 /* the domain is crashed */
|
VIR_DOMAIN_CRASHED = 6 /* the domain is crashed */
|
||||||
} virDomainState;
|
} virDomainState;
|
||||||
|
|
||||||
@ -85,11 +85,11 @@ typedef enum {
|
|||||||
typedef struct _virDomainInfo virDomainInfo;
|
typedef struct _virDomainInfo virDomainInfo;
|
||||||
|
|
||||||
struct _virDomainInfo {
|
struct _virDomainInfo {
|
||||||
unsigned char state; /* the running state, one of virDomainFlags */
|
unsigned char state; /* the running state, one of virDomainFlags */
|
||||||
unsigned long maxMem; /* the maximum memory in KBytes allowed */
|
unsigned long maxMem; /* the maximum memory in KBytes allowed */
|
||||||
unsigned long memory; /* the memory in KBytes used by the domain */
|
unsigned long memory; /* the memory in KBytes used by the domain */
|
||||||
unsigned short nrVirtCpu; /* the number of virtual CPUs for the domain */
|
unsigned short nrVirtCpu; /* the number of virtual CPUs for the domain */
|
||||||
unsigned long long cpuTime; /* the CPU time used in nanoseconds */
|
unsigned long long cpuTime; /* the CPU time used in nanoseconds */
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -120,13 +120,13 @@ typedef enum {
|
|||||||
typedef struct _virNodeInfo virNodeInfo;
|
typedef struct _virNodeInfo virNodeInfo;
|
||||||
|
|
||||||
struct _virNodeInfo {
|
struct _virNodeInfo {
|
||||||
char model[32]; /* string indicating the CPU model */
|
char model[32]; /* string indicating the CPU model */
|
||||||
unsigned long memory;/* memory size in kilobytes */
|
unsigned long memory;/* memory size in kilobytes */
|
||||||
unsigned int cpus; /* the number of active CPUs */
|
unsigned int cpus; /* the number of active CPUs */
|
||||||
unsigned int mhz; /* expected CPU frequency */
|
unsigned int mhz; /* expected CPU frequency */
|
||||||
unsigned int nodes; /* the number of NUMA cell, 1 for uniform mem access */
|
unsigned int nodes; /* the number of NUMA cell, 1 for uniform mem access */
|
||||||
unsigned int sockets;/* number of CPU socket per node */
|
unsigned int sockets;/* number of CPU socket per node */
|
||||||
unsigned int cores; /* number of core per socket */
|
unsigned int cores; /* number of core per socket */
|
||||||
unsigned int threads;/* number of threads per core */
|
unsigned int threads;/* number of threads per core */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -137,12 +137,12 @@ struct _virNodeInfo {
|
|||||||
* A scheduler parameter field type
|
* A scheduler parameter field type
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VIR_DOMAIN_SCHED_FIELD_INT = 1, /* integer case */
|
VIR_DOMAIN_SCHED_FIELD_INT = 1, /* integer case */
|
||||||
VIR_DOMAIN_SCHED_FIELD_UINT = 2, /* unsigned integer case */
|
VIR_DOMAIN_SCHED_FIELD_UINT = 2, /* unsigned integer case */
|
||||||
VIR_DOMAIN_SCHED_FIELD_LLONG = 3, /* long long case */
|
VIR_DOMAIN_SCHED_FIELD_LLONG = 3, /* long long case */
|
||||||
VIR_DOMAIN_SCHED_FIELD_ULLONG = 4, /* unsigned long long case */
|
VIR_DOMAIN_SCHED_FIELD_ULLONG = 4, /* unsigned long long case */
|
||||||
VIR_DOMAIN_SCHED_FIELD_DOUBLE = 5, /* double case */
|
VIR_DOMAIN_SCHED_FIELD_DOUBLE = 5, /* double case */
|
||||||
VIR_DOMAIN_SCHED_FIELD_BOOLEAN = 6 /* boolean(character) case */
|
VIR_DOMAIN_SCHED_FIELD_BOOLEAN = 6 /* boolean(character) case */
|
||||||
} virSchedParameterType;
|
} virSchedParameterType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -162,15 +162,15 @@ typedef enum {
|
|||||||
typedef struct _virSchedParameter virSchedParameter;
|
typedef struct _virSchedParameter virSchedParameter;
|
||||||
|
|
||||||
struct _virSchedParameter {
|
struct _virSchedParameter {
|
||||||
char field[VIR_DOMAIN_SCHED_FIELD_LENGTH]; /* parameter name */
|
char field[VIR_DOMAIN_SCHED_FIELD_LENGTH]; /* parameter name */
|
||||||
int type; /* parameter type */
|
int type; /* parameter type */
|
||||||
union {
|
union {
|
||||||
int i; /* data for integer case */
|
int i; /* data for integer case */
|
||||||
unsigned int ui; /* data for unsigned integer case */
|
unsigned int ui; /* data for unsigned integer case */
|
||||||
long long int l; /* data for long long integer case */
|
long long int l; /* data for long long integer case */
|
||||||
unsigned long long int ul; /* data for unsigned long long integer case */
|
unsigned long long int ul; /* data for unsigned long long integer case */
|
||||||
double d; /* data for double case */
|
double d; /* data for double case */
|
||||||
char b; /* data for char case */
|
char b; /* data for char case */
|
||||||
} value; /* parameter value */
|
} value; /* parameter value */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -185,14 +185,14 @@ typedef virSchedParameter *virSchedParameterPtr;
|
|||||||
/*
|
/*
|
||||||
* Fetch scheduler parameters, caller allocates 'params' field of size 'nparams'
|
* Fetch scheduler parameters, caller allocates 'params' field of size 'nparams'
|
||||||
*/
|
*/
|
||||||
int virDomainGetSchedulerParameters (virDomainPtr domain,
|
int virDomainGetSchedulerParameters (virDomainPtr domain,
|
||||||
virSchedParameterPtr params,
|
virSchedParameterPtr params,
|
||||||
int *nparams);
|
int *nparams);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Change scheduler parameters
|
* Change scheduler parameters
|
||||||
*/
|
*/
|
||||||
int virDomainSetSchedulerParameters (virDomainPtr domain,
|
int virDomainSetSchedulerParameters (virDomainPtr domain,
|
||||||
virSchedParameterPtr params,
|
virSchedParameterPtr params,
|
||||||
int nparams);
|
int nparams);
|
||||||
|
|
||||||
@ -382,23 +382,23 @@ extern virConnectAuthPtr virConnectAuthPtrDefault;
|
|||||||
|
|
||||||
#define LIBVIR_VERSION_NUMBER 4002
|
#define LIBVIR_VERSION_NUMBER 4002
|
||||||
|
|
||||||
int virGetVersion (unsigned long *libVer,
|
int virGetVersion (unsigned long *libVer,
|
||||||
const char *type,
|
const char *type,
|
||||||
unsigned long *typeVer);
|
unsigned long *typeVer);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Connection and disconnections to the Hypervisor
|
* Connection and disconnections to the Hypervisor
|
||||||
*/
|
*/
|
||||||
int virInitialize (void);
|
int virInitialize (void);
|
||||||
|
|
||||||
virConnectPtr virConnectOpen (const char *name);
|
virConnectPtr virConnectOpen (const char *name);
|
||||||
virConnectPtr virConnectOpenReadOnly (const char *name);
|
virConnectPtr virConnectOpenReadOnly (const char *name);
|
||||||
virConnectPtr virConnectOpenAuth (const char *name,
|
virConnectPtr virConnectOpenAuth (const char *name,
|
||||||
virConnectAuthPtr auth,
|
virConnectAuthPtr auth,
|
||||||
int flags);
|
int flags);
|
||||||
int virConnectClose (virConnectPtr conn);
|
int virConnectClose (virConnectPtr conn);
|
||||||
const char * virConnectGetType (virConnectPtr conn);
|
const char * virConnectGetType (virConnectPtr conn);
|
||||||
int virConnectGetVersion (virConnectPtr conn,
|
int virConnectGetVersion (virConnectPtr conn,
|
||||||
unsigned long *hvVer);
|
unsigned long *hvVer);
|
||||||
char * virConnectGetHostname (virConnectPtr conn);
|
char * virConnectGetHostname (virConnectPtr conn);
|
||||||
char * virConnectGetURI (virConnectPtr conn);
|
char * virConnectGetURI (virConnectPtr conn);
|
||||||
@ -410,100 +410,100 @@ char * virConnectGetURI (virConnectPtr conn);
|
|||||||
|
|
||||||
int virConnectGetMaxVcpus (virConnectPtr conn,
|
int virConnectGetMaxVcpus (virConnectPtr conn,
|
||||||
const char *type);
|
const char *type);
|
||||||
int virNodeGetInfo (virConnectPtr conn,
|
int virNodeGetInfo (virConnectPtr conn,
|
||||||
virNodeInfoPtr info);
|
virNodeInfoPtr info);
|
||||||
char * virConnectGetCapabilities (virConnectPtr conn);
|
char * virConnectGetCapabilities (virConnectPtr conn);
|
||||||
|
|
||||||
unsigned long long virNodeGetFreeMemory (virConnectPtr conn);
|
unsigned long long virNodeGetFreeMemory (virConnectPtr conn);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Gather list of running domains
|
* Gather list of running domains
|
||||||
*/
|
*/
|
||||||
int virConnectListDomains (virConnectPtr conn,
|
int virConnectListDomains (virConnectPtr conn,
|
||||||
int *ids,
|
int *ids,
|
||||||
int maxids);
|
int maxids);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Number of domains
|
* Number of domains
|
||||||
*/
|
*/
|
||||||
int virConnectNumOfDomains (virConnectPtr conn);
|
int virConnectNumOfDomains (virConnectPtr conn);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get connection from domain.
|
* Get connection from domain.
|
||||||
*/
|
*/
|
||||||
virConnectPtr virDomainGetConnect (virDomainPtr domain);
|
virConnectPtr virDomainGetConnect (virDomainPtr domain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain creation and destruction
|
* Domain creation and destruction
|
||||||
*/
|
*/
|
||||||
virDomainPtr virDomainCreateLinux (virConnectPtr conn,
|
virDomainPtr virDomainCreateLinux (virConnectPtr conn,
|
||||||
const char *xmlDesc,
|
const char *xmlDesc,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
virDomainPtr virDomainLookupByName (virConnectPtr conn,
|
virDomainPtr virDomainLookupByName (virConnectPtr conn,
|
||||||
const char *name);
|
const char *name);
|
||||||
virDomainPtr virDomainLookupByID (virConnectPtr conn,
|
virDomainPtr virDomainLookupByID (virConnectPtr conn,
|
||||||
int id);
|
int id);
|
||||||
virDomainPtr virDomainLookupByUUID (virConnectPtr conn,
|
virDomainPtr virDomainLookupByUUID (virConnectPtr conn,
|
||||||
const unsigned char *uuid);
|
const unsigned char *uuid);
|
||||||
virDomainPtr virDomainLookupByUUIDString (virConnectPtr conn,
|
virDomainPtr virDomainLookupByUUIDString (virConnectPtr conn,
|
||||||
const char *uuid);
|
const char *uuid);
|
||||||
|
|
||||||
int virDomainShutdown (virDomainPtr domain);
|
int virDomainShutdown (virDomainPtr domain);
|
||||||
int virDomainReboot (virDomainPtr domain,
|
int virDomainReboot (virDomainPtr domain,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virDomainDestroy (virDomainPtr domain);
|
int virDomainDestroy (virDomainPtr domain);
|
||||||
int virDomainFree (virDomainPtr domain);
|
int virDomainFree (virDomainPtr domain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain suspend/resume
|
* Domain suspend/resume
|
||||||
*/
|
*/
|
||||||
int virDomainSuspend (virDomainPtr domain);
|
int virDomainSuspend (virDomainPtr domain);
|
||||||
int virDomainResume (virDomainPtr domain);
|
int virDomainResume (virDomainPtr domain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain save/restore
|
* Domain save/restore
|
||||||
*/
|
*/
|
||||||
int virDomainSave (virDomainPtr domain,
|
int virDomainSave (virDomainPtr domain,
|
||||||
const char *to);
|
const char *to);
|
||||||
int virDomainRestore (virConnectPtr conn,
|
int virDomainRestore (virConnectPtr conn,
|
||||||
const char *from);
|
const char *from);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain core dump
|
* Domain core dump
|
||||||
*/
|
*/
|
||||||
int virDomainCoreDump (virDomainPtr domain,
|
int virDomainCoreDump (virDomainPtr domain,
|
||||||
const char *to,
|
const char *to,
|
||||||
int flags);
|
int flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain runtime information
|
* Domain runtime information
|
||||||
*/
|
*/
|
||||||
int virDomainGetInfo (virDomainPtr domain,
|
int virDomainGetInfo (virDomainPtr domain,
|
||||||
virDomainInfoPtr info);
|
virDomainInfoPtr info);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return scheduler type in effect 'sedf', 'credit', 'linux'
|
* Return scheduler type in effect 'sedf', 'credit', 'linux'
|
||||||
*/
|
*/
|
||||||
char * virDomainGetSchedulerType(virDomainPtr domain,
|
char * virDomainGetSchedulerType(virDomainPtr domain,
|
||||||
int *nparams);
|
int *nparams);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dynamic control of domains
|
* Dynamic control of domains
|
||||||
*/
|
*/
|
||||||
const char * virDomainGetName (virDomainPtr domain);
|
const char * virDomainGetName (virDomainPtr domain);
|
||||||
unsigned int virDomainGetID (virDomainPtr domain);
|
unsigned int virDomainGetID (virDomainPtr domain);
|
||||||
int virDomainGetUUID (virDomainPtr domain,
|
int virDomainGetUUID (virDomainPtr domain,
|
||||||
unsigned char *uuid);
|
unsigned char *uuid);
|
||||||
int virDomainGetUUIDString (virDomainPtr domain,
|
int virDomainGetUUIDString (virDomainPtr domain,
|
||||||
char *buf);
|
char *buf);
|
||||||
char * virDomainGetOSType (virDomainPtr domain);
|
char * virDomainGetOSType (virDomainPtr domain);
|
||||||
unsigned long virDomainGetMaxMemory (virDomainPtr domain);
|
unsigned long virDomainGetMaxMemory (virDomainPtr domain);
|
||||||
int virDomainSetMaxMemory (virDomainPtr domain,
|
int virDomainSetMaxMemory (virDomainPtr domain,
|
||||||
unsigned long memory);
|
unsigned long memory);
|
||||||
int virDomainSetMemory (virDomainPtr domain,
|
int virDomainSetMemory (virDomainPtr domain,
|
||||||
unsigned long memory);
|
unsigned long memory);
|
||||||
int virDomainGetMaxVcpus (virDomainPtr domain);
|
int virDomainGetMaxVcpus (virDomainPtr domain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XML domain description
|
* XML domain description
|
||||||
@ -519,7 +519,7 @@ typedef enum {
|
|||||||
VIR_DOMAIN_XML_INACTIVE = 2/* dump inactive domain information */
|
VIR_DOMAIN_XML_INACTIVE = 2/* dump inactive domain information */
|
||||||
} virDomainXMLFlags;
|
} virDomainXMLFlags;
|
||||||
|
|
||||||
char * virDomainGetXMLDesc (virDomainPtr domain,
|
char * virDomainGetXMLDesc (virDomainPtr domain,
|
||||||
int flags);
|
int flags);
|
||||||
|
|
||||||
int virDomainBlockStats (virDomainPtr dom,
|
int virDomainBlockStats (virDomainPtr dom,
|
||||||
@ -530,23 +530,28 @@ int virDomainInterfaceStats (virDomainPtr dom,
|
|||||||
const char *path,
|
const char *path,
|
||||||
virDomainInterfaceStatsPtr stats,
|
virDomainInterfaceStatsPtr stats,
|
||||||
size_t size);
|
size_t size);
|
||||||
|
int virDomainBlockPeek (virDomainPtr dom,
|
||||||
|
const char *path,
|
||||||
|
unsigned long long offset,
|
||||||
|
size_t size,
|
||||||
|
void *buffer,
|
||||||
|
unsigned int flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* defined but not running domains
|
* defined but not running domains
|
||||||
*/
|
*/
|
||||||
virDomainPtr virDomainDefineXML (virConnectPtr conn,
|
virDomainPtr virDomainDefineXML (virConnectPtr conn,
|
||||||
const char *xml);
|
const char *xml);
|
||||||
int virDomainUndefine (virDomainPtr domain);
|
int virDomainUndefine (virDomainPtr domain);
|
||||||
int virConnectNumOfDefinedDomains (virConnectPtr conn);
|
int virConnectNumOfDefinedDomains (virConnectPtr conn);
|
||||||
int virConnectListDefinedDomains (virConnectPtr conn,
|
int virConnectListDefinedDomains (virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
int virDomainCreate (virDomainPtr domain);
|
int virDomainCreate (virDomainPtr domain);
|
||||||
|
|
||||||
int virDomainGetAutostart (virDomainPtr domain,
|
int virDomainGetAutostart (virDomainPtr domain,
|
||||||
int *autostart);
|
int *autostart);
|
||||||
int virDomainSetAutostart (virDomainPtr domain,
|
int virDomainSetAutostart (virDomainPtr domain,
|
||||||
int autostart);
|
int autostart);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -554,24 +559,24 @@ int virDomainSetAutostart (virDomainPtr domain,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VIR_VCPU_OFFLINE = 0, /* the virtual CPU is offline */
|
VIR_VCPU_OFFLINE = 0, /* the virtual CPU is offline */
|
||||||
VIR_VCPU_RUNNING = 1, /* the virtual CPU is running */
|
VIR_VCPU_RUNNING = 1, /* the virtual CPU is running */
|
||||||
VIR_VCPU_BLOCKED = 2, /* the virtual CPU is blocked on resource */
|
VIR_VCPU_BLOCKED = 2, /* the virtual CPU is blocked on resource */
|
||||||
} virVcpuState;
|
} virVcpuState;
|
||||||
|
|
||||||
typedef struct _virVcpuInfo virVcpuInfo;
|
typedef struct _virVcpuInfo virVcpuInfo;
|
||||||
struct _virVcpuInfo {
|
struct _virVcpuInfo {
|
||||||
unsigned int number; /* virtual CPU number */
|
unsigned int number; /* virtual CPU number */
|
||||||
int state; /* value from virVcpuState */
|
int state; /* value from virVcpuState */
|
||||||
unsigned long long cpuTime; /* CPU time used, in nanoseconds */
|
unsigned long long cpuTime; /* CPU time used, in nanoseconds */
|
||||||
int cpu; /* real CPU number, or -1 if offline */
|
int cpu; /* real CPU number, or -1 if offline */
|
||||||
};
|
};
|
||||||
typedef virVcpuInfo *virVcpuInfoPtr;
|
typedef virVcpuInfo *virVcpuInfoPtr;
|
||||||
|
|
||||||
int virDomainSetVcpus (virDomainPtr domain,
|
int virDomainSetVcpus (virDomainPtr domain,
|
||||||
unsigned int nvcpus);
|
unsigned int nvcpus);
|
||||||
|
|
||||||
int virDomainPinVcpu (virDomainPtr domain,
|
int virDomainPinVcpu (virDomainPtr domain,
|
||||||
unsigned int vcpu,
|
unsigned int vcpu,
|
||||||
unsigned char *cpumap,
|
unsigned char *cpumap,
|
||||||
int maplen);
|
int maplen);
|
||||||
@ -585,7 +590,7 @@ int virDomainPinVcpu (virDomainPtr domain,
|
|||||||
* USE_CPU macro set the bit (CPU usable) of the related cpu in cpumap.
|
* USE_CPU macro set the bit (CPU usable) of the related cpu in cpumap.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define VIR_USE_CPU(cpumap,cpu) (cpumap[(cpu)/8] |= (1<<((cpu)%8)))
|
#define VIR_USE_CPU(cpumap,cpu) (cpumap[(cpu)/8] |= (1<<((cpu)%8)))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* VIR_UNUSE_CPU:
|
* VIR_UNUSE_CPU:
|
||||||
@ -596,7 +601,7 @@ int virDomainPinVcpu (virDomainPtr domain,
|
|||||||
* USE_CPU macro reset the bit (CPU not usable) of the related cpu in cpumap.
|
* USE_CPU macro reset the bit (CPU not usable) of the related cpu in cpumap.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define VIR_UNUSE_CPU(cpumap,cpu) (cpumap[(cpu)/8] &= ~(1<<((cpu)%8)))
|
#define VIR_UNUSE_CPU(cpumap,cpu) (cpumap[(cpu)/8] &= ~(1<<((cpu)%8)))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* VIR_CPU_MAPLEN:
|
* VIR_CPU_MAPLEN:
|
||||||
@ -610,7 +615,7 @@ int virDomainPinVcpu (virDomainPtr domain,
|
|||||||
#define VIR_CPU_MAPLEN(cpu) (((cpu)+7)/8)
|
#define VIR_CPU_MAPLEN(cpu) (((cpu)+7)/8)
|
||||||
|
|
||||||
|
|
||||||
int virDomainGetVcpus (virDomainPtr domain,
|
int virDomainGetVcpus (virDomainPtr domain,
|
||||||
virVcpuInfoPtr info,
|
virVcpuInfoPtr info,
|
||||||
int maxinfo,
|
int maxinfo,
|
||||||
unsigned char *cpumaps,
|
unsigned char *cpumaps,
|
||||||
@ -637,7 +642,7 @@ int virDomainGetVcpus (virDomainPtr domain,
|
|||||||
* @maplen: the length (in bytes) of one cpumap
|
* @maplen: the length (in bytes) of one cpumap
|
||||||
* @vcpu: the virtual CPU number
|
* @vcpu: the virtual CPU number
|
||||||
* @cpumap: pointer to a cpumap (in 8-bit bytes) (OUT)
|
* @cpumap: pointer to a cpumap (in 8-bit bytes) (OUT)
|
||||||
* This cpumap must be previously allocated by the caller
|
* This cpumap must be previously allocated by the caller
|
||||||
* (ie: malloc(maplen))
|
* (ie: malloc(maplen))
|
||||||
*
|
*
|
||||||
* This macro is to be used in conjunction with virDomainGetVcpus() and
|
* This macro is to be used in conjunction with virDomainGetVcpus() and
|
||||||
@ -659,7 +664,7 @@ int virDomainGetVcpus (virDomainPtr domain,
|
|||||||
* virDomainPinVcpu() APIs. VIR_GET_CPUMAP macro returns a pointer to the
|
* virDomainPinVcpu() APIs. VIR_GET_CPUMAP macro returns a pointer to the
|
||||||
* cpumap of the specified vcpu from cpumaps array.
|
* cpumap of the specified vcpu from cpumaps array.
|
||||||
*/
|
*/
|
||||||
#define VIR_GET_CPUMAP(cpumaps,maplen,vcpu) &(cpumaps[(vcpu)*(maplen)])
|
#define VIR_GET_CPUMAP(cpumaps,maplen,vcpu) &(cpumaps[(vcpu)*(maplen)])
|
||||||
|
|
||||||
int virDomainAttachDevice(virDomainPtr domain, const char *xml);
|
int virDomainAttachDevice(virDomainPtr domain, const char *xml);
|
||||||
int virDomainDetachDevice(virDomainPtr domain, const char *xml);
|
int virDomainDetachDevice(virDomainPtr domain, const char *xml);
|
||||||
@ -668,7 +673,7 @@ int virDomainDetachDevice(virDomainPtr domain, const char *xml);
|
|||||||
* NUMA support
|
* NUMA support
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int virNodeGetCellsFreeMemory(virConnectPtr conn,
|
int virNodeGetCellsFreeMemory(virConnectPtr conn,
|
||||||
unsigned long long *freeMems,
|
unsigned long long *freeMems,
|
||||||
int startCell,
|
int startCell,
|
||||||
int maxCells);
|
int maxCells);
|
||||||
@ -695,77 +700,77 @@ typedef virNetwork *virNetworkPtr;
|
|||||||
/*
|
/*
|
||||||
* Get connection from network.
|
* Get connection from network.
|
||||||
*/
|
*/
|
||||||
virConnectPtr virNetworkGetConnect (virNetworkPtr network);
|
virConnectPtr virNetworkGetConnect (virNetworkPtr network);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List active networks
|
* List active networks
|
||||||
*/
|
*/
|
||||||
int virConnectNumOfNetworks (virConnectPtr conn);
|
int virConnectNumOfNetworks (virConnectPtr conn);
|
||||||
int virConnectListNetworks (virConnectPtr conn,
|
int virConnectListNetworks (virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List inactive networks
|
* List inactive networks
|
||||||
*/
|
*/
|
||||||
int virConnectNumOfDefinedNetworks (virConnectPtr conn);
|
int virConnectNumOfDefinedNetworks (virConnectPtr conn);
|
||||||
int virConnectListDefinedNetworks (virConnectPtr conn,
|
int virConnectListDefinedNetworks (virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lookup network by name or uuid
|
* Lookup network by name or uuid
|
||||||
*/
|
*/
|
||||||
virNetworkPtr virNetworkLookupByName (virConnectPtr conn,
|
virNetworkPtr virNetworkLookupByName (virConnectPtr conn,
|
||||||
const char *name);
|
const char *name);
|
||||||
virNetworkPtr virNetworkLookupByUUID (virConnectPtr conn,
|
virNetworkPtr virNetworkLookupByUUID (virConnectPtr conn,
|
||||||
const unsigned char *uuid);
|
const unsigned char *uuid);
|
||||||
virNetworkPtr virNetworkLookupByUUIDString (virConnectPtr conn,
|
virNetworkPtr virNetworkLookupByUUIDString (virConnectPtr conn,
|
||||||
const char *uuid);
|
const char *uuid);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create active transient network
|
* Create active transient network
|
||||||
*/
|
*/
|
||||||
virNetworkPtr virNetworkCreateXML (virConnectPtr conn,
|
virNetworkPtr virNetworkCreateXML (virConnectPtr conn,
|
||||||
const char *xmlDesc);
|
const char *xmlDesc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define inactive persistent network
|
* Define inactive persistent network
|
||||||
*/
|
*/
|
||||||
virNetworkPtr virNetworkDefineXML (virConnectPtr conn,
|
virNetworkPtr virNetworkDefineXML (virConnectPtr conn,
|
||||||
const char *xmlDesc);
|
const char *xmlDesc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Delete persistent network
|
* Delete persistent network
|
||||||
*/
|
*/
|
||||||
int virNetworkUndefine (virNetworkPtr network);
|
int virNetworkUndefine (virNetworkPtr network);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Activate persistent network
|
* Activate persistent network
|
||||||
*/
|
*/
|
||||||
int virNetworkCreate (virNetworkPtr network);
|
int virNetworkCreate (virNetworkPtr network);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Network destroy/free
|
* Network destroy/free
|
||||||
*/
|
*/
|
||||||
int virNetworkDestroy (virNetworkPtr network);
|
int virNetworkDestroy (virNetworkPtr network);
|
||||||
int virNetworkFree (virNetworkPtr network);
|
int virNetworkFree (virNetworkPtr network);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Network information
|
* Network information
|
||||||
*/
|
*/
|
||||||
const char* virNetworkGetName (virNetworkPtr network);
|
const char* virNetworkGetName (virNetworkPtr network);
|
||||||
int virNetworkGetUUID (virNetworkPtr network,
|
int virNetworkGetUUID (virNetworkPtr network,
|
||||||
unsigned char *uuid);
|
unsigned char *uuid);
|
||||||
int virNetworkGetUUIDString (virNetworkPtr network,
|
int virNetworkGetUUIDString (virNetworkPtr network,
|
||||||
char *buf);
|
char *buf);
|
||||||
char * virNetworkGetXMLDesc (virNetworkPtr network,
|
char * virNetworkGetXMLDesc (virNetworkPtr network,
|
||||||
int flags);
|
int flags);
|
||||||
char * virNetworkGetBridgeName (virNetworkPtr network);
|
char * virNetworkGetBridgeName (virNetworkPtr network);
|
||||||
|
|
||||||
int virNetworkGetAutostart (virNetworkPtr network,
|
int virNetworkGetAutostart (virNetworkPtr network,
|
||||||
int *autostart);
|
int *autostart);
|
||||||
int virNetworkSetAutostart (virNetworkPtr network,
|
int virNetworkSetAutostart (virNetworkPtr network,
|
||||||
int autostart);
|
int autostart);
|
||||||
|
|
||||||
|
|
||||||
@ -855,113 +860,113 @@ typedef virStorageVolInfo *virStorageVolInfoPtr;
|
|||||||
/*
|
/*
|
||||||
* Get connection from pool.
|
* Get connection from pool.
|
||||||
*/
|
*/
|
||||||
virConnectPtr virStoragePoolGetConnect (virStoragePoolPtr pool);
|
virConnectPtr virStoragePoolGetConnect (virStoragePoolPtr pool);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List active storage pools
|
* List active storage pools
|
||||||
*/
|
*/
|
||||||
int virConnectNumOfStoragePools (virConnectPtr conn);
|
int virConnectNumOfStoragePools (virConnectPtr conn);
|
||||||
int virConnectListStoragePools (virConnectPtr conn,
|
int virConnectListStoragePools (virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List inactive storage pools
|
* List inactive storage pools
|
||||||
*/
|
*/
|
||||||
int virConnectNumOfDefinedStoragePools(virConnectPtr conn);
|
int virConnectNumOfDefinedStoragePools(virConnectPtr conn);
|
||||||
int virConnectListDefinedStoragePools(virConnectPtr conn,
|
int virConnectListDefinedStoragePools(virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lookup pool by name or uuid
|
* Lookup pool by name or uuid
|
||||||
*/
|
*/
|
||||||
virStoragePoolPtr virStoragePoolLookupByName (virConnectPtr conn,
|
virStoragePoolPtr virStoragePoolLookupByName (virConnectPtr conn,
|
||||||
const char *name);
|
const char *name);
|
||||||
virStoragePoolPtr virStoragePoolLookupByUUID (virConnectPtr conn,
|
virStoragePoolPtr virStoragePoolLookupByUUID (virConnectPtr conn,
|
||||||
const unsigned char *uuid);
|
const unsigned char *uuid);
|
||||||
virStoragePoolPtr virStoragePoolLookupByUUIDString(virConnectPtr conn,
|
virStoragePoolPtr virStoragePoolLookupByUUIDString(virConnectPtr conn,
|
||||||
const char *uuid);
|
const char *uuid);
|
||||||
virStoragePoolPtr virStoragePoolLookupByVolume (virStorageVolPtr vol);
|
virStoragePoolPtr virStoragePoolLookupByVolume (virStorageVolPtr vol);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Creating/destroying pools
|
* Creating/destroying pools
|
||||||
*/
|
*/
|
||||||
virStoragePoolPtr virStoragePoolCreateXML (virConnectPtr conn,
|
virStoragePoolPtr virStoragePoolCreateXML (virConnectPtr conn,
|
||||||
const char *xmlDesc,
|
const char *xmlDesc,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
virStoragePoolPtr virStoragePoolDefineXML (virConnectPtr conn,
|
virStoragePoolPtr virStoragePoolDefineXML (virConnectPtr conn,
|
||||||
const char *xmlDesc,
|
const char *xmlDesc,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStoragePoolBuild (virStoragePoolPtr pool,
|
int virStoragePoolBuild (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStoragePoolUndefine (virStoragePoolPtr pool);
|
int virStoragePoolUndefine (virStoragePoolPtr pool);
|
||||||
int virStoragePoolCreate (virStoragePoolPtr pool,
|
int virStoragePoolCreate (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStoragePoolDestroy (virStoragePoolPtr pool);
|
int virStoragePoolDestroy (virStoragePoolPtr pool);
|
||||||
int virStoragePoolDelete (virStoragePoolPtr pool,
|
int virStoragePoolDelete (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStoragePoolFree (virStoragePoolPtr pool);
|
int virStoragePoolFree (virStoragePoolPtr pool);
|
||||||
int virStoragePoolRefresh (virStoragePoolPtr pool,
|
int virStoragePoolRefresh (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* StoragePool information
|
* StoragePool information
|
||||||
*/
|
*/
|
||||||
const char* virStoragePoolGetName (virStoragePoolPtr pool);
|
const char* virStoragePoolGetName (virStoragePoolPtr pool);
|
||||||
int virStoragePoolGetUUID (virStoragePoolPtr pool,
|
int virStoragePoolGetUUID (virStoragePoolPtr pool,
|
||||||
unsigned char *uuid);
|
unsigned char *uuid);
|
||||||
int virStoragePoolGetUUIDString (virStoragePoolPtr pool,
|
int virStoragePoolGetUUIDString (virStoragePoolPtr pool,
|
||||||
char *buf);
|
char *buf);
|
||||||
|
|
||||||
int virStoragePoolGetInfo (virStoragePoolPtr vol,
|
int virStoragePoolGetInfo (virStoragePoolPtr vol,
|
||||||
virStoragePoolInfoPtr info);
|
virStoragePoolInfoPtr info);
|
||||||
|
|
||||||
char * virStoragePoolGetXMLDesc (virStoragePoolPtr pool,
|
char * virStoragePoolGetXMLDesc (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
int virStoragePoolGetAutostart (virStoragePoolPtr pool,
|
int virStoragePoolGetAutostart (virStoragePoolPtr pool,
|
||||||
int *autostart);
|
int *autostart);
|
||||||
int virStoragePoolSetAutostart (virStoragePoolPtr pool,
|
int virStoragePoolSetAutostart (virStoragePoolPtr pool,
|
||||||
int autostart);
|
int autostart);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List/lookup storage volumes within a pool
|
* List/lookup storage volumes within a pool
|
||||||
*/
|
*/
|
||||||
int virStoragePoolNumOfVolumes (virStoragePoolPtr pool);
|
int virStoragePoolNumOfVolumes (virStoragePoolPtr pool);
|
||||||
int virStoragePoolListVolumes (virStoragePoolPtr pool,
|
int virStoragePoolListVolumes (virStoragePoolPtr pool,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
|
|
||||||
virConnectPtr virStorageVolGetConnect (virStorageVolPtr vol);
|
virConnectPtr virStorageVolGetConnect (virStorageVolPtr vol);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lookup volumes based on various attributes
|
* Lookup volumes based on various attributes
|
||||||
*/
|
*/
|
||||||
virStorageVolPtr virStorageVolLookupByName (virStoragePoolPtr pool,
|
virStorageVolPtr virStorageVolLookupByName (virStoragePoolPtr pool,
|
||||||
const char *name);
|
const char *name);
|
||||||
virStorageVolPtr virStorageVolLookupByKey (virConnectPtr conn,
|
virStorageVolPtr virStorageVolLookupByKey (virConnectPtr conn,
|
||||||
const char *key);
|
const char *key);
|
||||||
virStorageVolPtr virStorageVolLookupByPath (virConnectPtr conn,
|
virStorageVolPtr virStorageVolLookupByPath (virConnectPtr conn,
|
||||||
const char *path);
|
const char *path);
|
||||||
|
|
||||||
|
|
||||||
const char* virStorageVolGetName (virStorageVolPtr vol);
|
const char* virStorageVolGetName (virStorageVolPtr vol);
|
||||||
const char* virStorageVolGetKey (virStorageVolPtr vol);
|
const char* virStorageVolGetKey (virStorageVolPtr vol);
|
||||||
|
|
||||||
virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr pool,
|
virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr pool,
|
||||||
const char *xmldesc,
|
const char *xmldesc,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStorageVolDelete (virStorageVolPtr vol,
|
int virStorageVolDelete (virStorageVolPtr vol,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStorageVolFree (virStorageVolPtr vol);
|
int virStorageVolFree (virStorageVolPtr vol);
|
||||||
|
|
||||||
int virStorageVolGetInfo (virStorageVolPtr vol,
|
int virStorageVolGetInfo (virStorageVolPtr vol,
|
||||||
virStorageVolInfoPtr info);
|
virStorageVolInfoPtr info);
|
||||||
char * virStorageVolGetXMLDesc (virStorageVolPtr pool,
|
char * virStorageVolGetXMLDesc (virStorageVolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
char * virStorageVolGetPath (virStorageVolPtr vol);
|
char * virStorageVolGetPath (virStorageVolPtr vol);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -66,12 +66,12 @@ typedef virDomain *virDomainPtr;
|
|||||||
* A domain may be in different states at a given point in time
|
* A domain may be in different states at a given point in time
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VIR_DOMAIN_NOSTATE = 0, /* no state */
|
VIR_DOMAIN_NOSTATE = 0, /* no state */
|
||||||
VIR_DOMAIN_RUNNING = 1, /* the domain is running */
|
VIR_DOMAIN_RUNNING = 1, /* the domain is running */
|
||||||
VIR_DOMAIN_BLOCKED = 2, /* the domain is blocked on resource */
|
VIR_DOMAIN_BLOCKED = 2, /* the domain is blocked on resource */
|
||||||
VIR_DOMAIN_PAUSED = 3, /* the domain is paused by user */
|
VIR_DOMAIN_PAUSED = 3, /* the domain is paused by user */
|
||||||
VIR_DOMAIN_SHUTDOWN= 4, /* the domain is being shut down */
|
VIR_DOMAIN_SHUTDOWN= 4, /* the domain is being shut down */
|
||||||
VIR_DOMAIN_SHUTOFF = 5, /* the domain is shut off */
|
VIR_DOMAIN_SHUTOFF = 5, /* the domain is shut off */
|
||||||
VIR_DOMAIN_CRASHED = 6 /* the domain is crashed */
|
VIR_DOMAIN_CRASHED = 6 /* the domain is crashed */
|
||||||
} virDomainState;
|
} virDomainState;
|
||||||
|
|
||||||
@ -85,11 +85,11 @@ typedef enum {
|
|||||||
typedef struct _virDomainInfo virDomainInfo;
|
typedef struct _virDomainInfo virDomainInfo;
|
||||||
|
|
||||||
struct _virDomainInfo {
|
struct _virDomainInfo {
|
||||||
unsigned char state; /* the running state, one of virDomainFlags */
|
unsigned char state; /* the running state, one of virDomainFlags */
|
||||||
unsigned long maxMem; /* the maximum memory in KBytes allowed */
|
unsigned long maxMem; /* the maximum memory in KBytes allowed */
|
||||||
unsigned long memory; /* the memory in KBytes used by the domain */
|
unsigned long memory; /* the memory in KBytes used by the domain */
|
||||||
unsigned short nrVirtCpu; /* the number of virtual CPUs for the domain */
|
unsigned short nrVirtCpu; /* the number of virtual CPUs for the domain */
|
||||||
unsigned long long cpuTime; /* the CPU time used in nanoseconds */
|
unsigned long long cpuTime; /* the CPU time used in nanoseconds */
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -120,13 +120,13 @@ typedef enum {
|
|||||||
typedef struct _virNodeInfo virNodeInfo;
|
typedef struct _virNodeInfo virNodeInfo;
|
||||||
|
|
||||||
struct _virNodeInfo {
|
struct _virNodeInfo {
|
||||||
char model[32]; /* string indicating the CPU model */
|
char model[32]; /* string indicating the CPU model */
|
||||||
unsigned long memory;/* memory size in kilobytes */
|
unsigned long memory;/* memory size in kilobytes */
|
||||||
unsigned int cpus; /* the number of active CPUs */
|
unsigned int cpus; /* the number of active CPUs */
|
||||||
unsigned int mhz; /* expected CPU frequency */
|
unsigned int mhz; /* expected CPU frequency */
|
||||||
unsigned int nodes; /* the number of NUMA cell, 1 for uniform mem access */
|
unsigned int nodes; /* the number of NUMA cell, 1 for uniform mem access */
|
||||||
unsigned int sockets;/* number of CPU socket per node */
|
unsigned int sockets;/* number of CPU socket per node */
|
||||||
unsigned int cores; /* number of core per socket */
|
unsigned int cores; /* number of core per socket */
|
||||||
unsigned int threads;/* number of threads per core */
|
unsigned int threads;/* number of threads per core */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -137,12 +137,12 @@ struct _virNodeInfo {
|
|||||||
* A scheduler parameter field type
|
* A scheduler parameter field type
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VIR_DOMAIN_SCHED_FIELD_INT = 1, /* integer case */
|
VIR_DOMAIN_SCHED_FIELD_INT = 1, /* integer case */
|
||||||
VIR_DOMAIN_SCHED_FIELD_UINT = 2, /* unsigned integer case */
|
VIR_DOMAIN_SCHED_FIELD_UINT = 2, /* unsigned integer case */
|
||||||
VIR_DOMAIN_SCHED_FIELD_LLONG = 3, /* long long case */
|
VIR_DOMAIN_SCHED_FIELD_LLONG = 3, /* long long case */
|
||||||
VIR_DOMAIN_SCHED_FIELD_ULLONG = 4, /* unsigned long long case */
|
VIR_DOMAIN_SCHED_FIELD_ULLONG = 4, /* unsigned long long case */
|
||||||
VIR_DOMAIN_SCHED_FIELD_DOUBLE = 5, /* double case */
|
VIR_DOMAIN_SCHED_FIELD_DOUBLE = 5, /* double case */
|
||||||
VIR_DOMAIN_SCHED_FIELD_BOOLEAN = 6 /* boolean(character) case */
|
VIR_DOMAIN_SCHED_FIELD_BOOLEAN = 6 /* boolean(character) case */
|
||||||
} virSchedParameterType;
|
} virSchedParameterType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -162,15 +162,15 @@ typedef enum {
|
|||||||
typedef struct _virSchedParameter virSchedParameter;
|
typedef struct _virSchedParameter virSchedParameter;
|
||||||
|
|
||||||
struct _virSchedParameter {
|
struct _virSchedParameter {
|
||||||
char field[VIR_DOMAIN_SCHED_FIELD_LENGTH]; /* parameter name */
|
char field[VIR_DOMAIN_SCHED_FIELD_LENGTH]; /* parameter name */
|
||||||
int type; /* parameter type */
|
int type; /* parameter type */
|
||||||
union {
|
union {
|
||||||
int i; /* data for integer case */
|
int i; /* data for integer case */
|
||||||
unsigned int ui; /* data for unsigned integer case */
|
unsigned int ui; /* data for unsigned integer case */
|
||||||
long long int l; /* data for long long integer case */
|
long long int l; /* data for long long integer case */
|
||||||
unsigned long long int ul; /* data for unsigned long long integer case */
|
unsigned long long int ul; /* data for unsigned long long integer case */
|
||||||
double d; /* data for double case */
|
double d; /* data for double case */
|
||||||
char b; /* data for char case */
|
char b; /* data for char case */
|
||||||
} value; /* parameter value */
|
} value; /* parameter value */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -185,14 +185,14 @@ typedef virSchedParameter *virSchedParameterPtr;
|
|||||||
/*
|
/*
|
||||||
* Fetch scheduler parameters, caller allocates 'params' field of size 'nparams'
|
* Fetch scheduler parameters, caller allocates 'params' field of size 'nparams'
|
||||||
*/
|
*/
|
||||||
int virDomainGetSchedulerParameters (virDomainPtr domain,
|
int virDomainGetSchedulerParameters (virDomainPtr domain,
|
||||||
virSchedParameterPtr params,
|
virSchedParameterPtr params,
|
||||||
int *nparams);
|
int *nparams);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Change scheduler parameters
|
* Change scheduler parameters
|
||||||
*/
|
*/
|
||||||
int virDomainSetSchedulerParameters (virDomainPtr domain,
|
int virDomainSetSchedulerParameters (virDomainPtr domain,
|
||||||
virSchedParameterPtr params,
|
virSchedParameterPtr params,
|
||||||
int nparams);
|
int nparams);
|
||||||
|
|
||||||
@ -382,23 +382,23 @@ extern virConnectAuthPtr virConnectAuthPtrDefault;
|
|||||||
|
|
||||||
#define LIBVIR_VERSION_NUMBER @LIBVIRT_VERSION_NUMBER@
|
#define LIBVIR_VERSION_NUMBER @LIBVIRT_VERSION_NUMBER@
|
||||||
|
|
||||||
int virGetVersion (unsigned long *libVer,
|
int virGetVersion (unsigned long *libVer,
|
||||||
const char *type,
|
const char *type,
|
||||||
unsigned long *typeVer);
|
unsigned long *typeVer);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Connection and disconnections to the Hypervisor
|
* Connection and disconnections to the Hypervisor
|
||||||
*/
|
*/
|
||||||
int virInitialize (void);
|
int virInitialize (void);
|
||||||
|
|
||||||
virConnectPtr virConnectOpen (const char *name);
|
virConnectPtr virConnectOpen (const char *name);
|
||||||
virConnectPtr virConnectOpenReadOnly (const char *name);
|
virConnectPtr virConnectOpenReadOnly (const char *name);
|
||||||
virConnectPtr virConnectOpenAuth (const char *name,
|
virConnectPtr virConnectOpenAuth (const char *name,
|
||||||
virConnectAuthPtr auth,
|
virConnectAuthPtr auth,
|
||||||
int flags);
|
int flags);
|
||||||
int virConnectClose (virConnectPtr conn);
|
int virConnectClose (virConnectPtr conn);
|
||||||
const char * virConnectGetType (virConnectPtr conn);
|
const char * virConnectGetType (virConnectPtr conn);
|
||||||
int virConnectGetVersion (virConnectPtr conn,
|
int virConnectGetVersion (virConnectPtr conn,
|
||||||
unsigned long *hvVer);
|
unsigned long *hvVer);
|
||||||
char * virConnectGetHostname (virConnectPtr conn);
|
char * virConnectGetHostname (virConnectPtr conn);
|
||||||
char * virConnectGetURI (virConnectPtr conn);
|
char * virConnectGetURI (virConnectPtr conn);
|
||||||
@ -410,100 +410,100 @@ char * virConnectGetURI (virConnectPtr conn);
|
|||||||
|
|
||||||
int virConnectGetMaxVcpus (virConnectPtr conn,
|
int virConnectGetMaxVcpus (virConnectPtr conn,
|
||||||
const char *type);
|
const char *type);
|
||||||
int virNodeGetInfo (virConnectPtr conn,
|
int virNodeGetInfo (virConnectPtr conn,
|
||||||
virNodeInfoPtr info);
|
virNodeInfoPtr info);
|
||||||
char * virConnectGetCapabilities (virConnectPtr conn);
|
char * virConnectGetCapabilities (virConnectPtr conn);
|
||||||
|
|
||||||
unsigned long long virNodeGetFreeMemory (virConnectPtr conn);
|
unsigned long long virNodeGetFreeMemory (virConnectPtr conn);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Gather list of running domains
|
* Gather list of running domains
|
||||||
*/
|
*/
|
||||||
int virConnectListDomains (virConnectPtr conn,
|
int virConnectListDomains (virConnectPtr conn,
|
||||||
int *ids,
|
int *ids,
|
||||||
int maxids);
|
int maxids);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Number of domains
|
* Number of domains
|
||||||
*/
|
*/
|
||||||
int virConnectNumOfDomains (virConnectPtr conn);
|
int virConnectNumOfDomains (virConnectPtr conn);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get connection from domain.
|
* Get connection from domain.
|
||||||
*/
|
*/
|
||||||
virConnectPtr virDomainGetConnect (virDomainPtr domain);
|
virConnectPtr virDomainGetConnect (virDomainPtr domain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain creation and destruction
|
* Domain creation and destruction
|
||||||
*/
|
*/
|
||||||
virDomainPtr virDomainCreateLinux (virConnectPtr conn,
|
virDomainPtr virDomainCreateLinux (virConnectPtr conn,
|
||||||
const char *xmlDesc,
|
const char *xmlDesc,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
virDomainPtr virDomainLookupByName (virConnectPtr conn,
|
virDomainPtr virDomainLookupByName (virConnectPtr conn,
|
||||||
const char *name);
|
const char *name);
|
||||||
virDomainPtr virDomainLookupByID (virConnectPtr conn,
|
virDomainPtr virDomainLookupByID (virConnectPtr conn,
|
||||||
int id);
|
int id);
|
||||||
virDomainPtr virDomainLookupByUUID (virConnectPtr conn,
|
virDomainPtr virDomainLookupByUUID (virConnectPtr conn,
|
||||||
const unsigned char *uuid);
|
const unsigned char *uuid);
|
||||||
virDomainPtr virDomainLookupByUUIDString (virConnectPtr conn,
|
virDomainPtr virDomainLookupByUUIDString (virConnectPtr conn,
|
||||||
const char *uuid);
|
const char *uuid);
|
||||||
|
|
||||||
int virDomainShutdown (virDomainPtr domain);
|
int virDomainShutdown (virDomainPtr domain);
|
||||||
int virDomainReboot (virDomainPtr domain,
|
int virDomainReboot (virDomainPtr domain,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virDomainDestroy (virDomainPtr domain);
|
int virDomainDestroy (virDomainPtr domain);
|
||||||
int virDomainFree (virDomainPtr domain);
|
int virDomainFree (virDomainPtr domain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain suspend/resume
|
* Domain suspend/resume
|
||||||
*/
|
*/
|
||||||
int virDomainSuspend (virDomainPtr domain);
|
int virDomainSuspend (virDomainPtr domain);
|
||||||
int virDomainResume (virDomainPtr domain);
|
int virDomainResume (virDomainPtr domain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain save/restore
|
* Domain save/restore
|
||||||
*/
|
*/
|
||||||
int virDomainSave (virDomainPtr domain,
|
int virDomainSave (virDomainPtr domain,
|
||||||
const char *to);
|
const char *to);
|
||||||
int virDomainRestore (virConnectPtr conn,
|
int virDomainRestore (virConnectPtr conn,
|
||||||
const char *from);
|
const char *from);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain core dump
|
* Domain core dump
|
||||||
*/
|
*/
|
||||||
int virDomainCoreDump (virDomainPtr domain,
|
int virDomainCoreDump (virDomainPtr domain,
|
||||||
const char *to,
|
const char *to,
|
||||||
int flags);
|
int flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Domain runtime information
|
* Domain runtime information
|
||||||
*/
|
*/
|
||||||
int virDomainGetInfo (virDomainPtr domain,
|
int virDomainGetInfo (virDomainPtr domain,
|
||||||
virDomainInfoPtr info);
|
virDomainInfoPtr info);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return scheduler type in effect 'sedf', 'credit', 'linux'
|
* Return scheduler type in effect 'sedf', 'credit', 'linux'
|
||||||
*/
|
*/
|
||||||
char * virDomainGetSchedulerType(virDomainPtr domain,
|
char * virDomainGetSchedulerType(virDomainPtr domain,
|
||||||
int *nparams);
|
int *nparams);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dynamic control of domains
|
* Dynamic control of domains
|
||||||
*/
|
*/
|
||||||
const char * virDomainGetName (virDomainPtr domain);
|
const char * virDomainGetName (virDomainPtr domain);
|
||||||
unsigned int virDomainGetID (virDomainPtr domain);
|
unsigned int virDomainGetID (virDomainPtr domain);
|
||||||
int virDomainGetUUID (virDomainPtr domain,
|
int virDomainGetUUID (virDomainPtr domain,
|
||||||
unsigned char *uuid);
|
unsigned char *uuid);
|
||||||
int virDomainGetUUIDString (virDomainPtr domain,
|
int virDomainGetUUIDString (virDomainPtr domain,
|
||||||
char *buf);
|
char *buf);
|
||||||
char * virDomainGetOSType (virDomainPtr domain);
|
char * virDomainGetOSType (virDomainPtr domain);
|
||||||
unsigned long virDomainGetMaxMemory (virDomainPtr domain);
|
unsigned long virDomainGetMaxMemory (virDomainPtr domain);
|
||||||
int virDomainSetMaxMemory (virDomainPtr domain,
|
int virDomainSetMaxMemory (virDomainPtr domain,
|
||||||
unsigned long memory);
|
unsigned long memory);
|
||||||
int virDomainSetMemory (virDomainPtr domain,
|
int virDomainSetMemory (virDomainPtr domain,
|
||||||
unsigned long memory);
|
unsigned long memory);
|
||||||
int virDomainGetMaxVcpus (virDomainPtr domain);
|
int virDomainGetMaxVcpus (virDomainPtr domain);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XML domain description
|
* XML domain description
|
||||||
@ -519,7 +519,7 @@ typedef enum {
|
|||||||
VIR_DOMAIN_XML_INACTIVE = 2/* dump inactive domain information */
|
VIR_DOMAIN_XML_INACTIVE = 2/* dump inactive domain information */
|
||||||
} virDomainXMLFlags;
|
} virDomainXMLFlags;
|
||||||
|
|
||||||
char * virDomainGetXMLDesc (virDomainPtr domain,
|
char * virDomainGetXMLDesc (virDomainPtr domain,
|
||||||
int flags);
|
int flags);
|
||||||
|
|
||||||
int virDomainBlockStats (virDomainPtr dom,
|
int virDomainBlockStats (virDomainPtr dom,
|
||||||
@ -530,23 +530,28 @@ int virDomainInterfaceStats (virDomainPtr dom,
|
|||||||
const char *path,
|
const char *path,
|
||||||
virDomainInterfaceStatsPtr stats,
|
virDomainInterfaceStatsPtr stats,
|
||||||
size_t size);
|
size_t size);
|
||||||
|
int virDomainBlockPeek (virDomainPtr dom,
|
||||||
|
const char *path,
|
||||||
|
unsigned long long offset,
|
||||||
|
size_t size,
|
||||||
|
void *buffer,
|
||||||
|
unsigned int flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* defined but not running domains
|
* defined but not running domains
|
||||||
*/
|
*/
|
||||||
virDomainPtr virDomainDefineXML (virConnectPtr conn,
|
virDomainPtr virDomainDefineXML (virConnectPtr conn,
|
||||||
const char *xml);
|
const char *xml);
|
||||||
int virDomainUndefine (virDomainPtr domain);
|
int virDomainUndefine (virDomainPtr domain);
|
||||||
int virConnectNumOfDefinedDomains (virConnectPtr conn);
|
int virConnectNumOfDefinedDomains (virConnectPtr conn);
|
||||||
int virConnectListDefinedDomains (virConnectPtr conn,
|
int virConnectListDefinedDomains (virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
int virDomainCreate (virDomainPtr domain);
|
int virDomainCreate (virDomainPtr domain);
|
||||||
|
|
||||||
int virDomainGetAutostart (virDomainPtr domain,
|
int virDomainGetAutostart (virDomainPtr domain,
|
||||||
int *autostart);
|
int *autostart);
|
||||||
int virDomainSetAutostart (virDomainPtr domain,
|
int virDomainSetAutostart (virDomainPtr domain,
|
||||||
int autostart);
|
int autostart);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -554,24 +559,24 @@ int virDomainSetAutostart (virDomainPtr domain,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VIR_VCPU_OFFLINE = 0, /* the virtual CPU is offline */
|
VIR_VCPU_OFFLINE = 0, /* the virtual CPU is offline */
|
||||||
VIR_VCPU_RUNNING = 1, /* the virtual CPU is running */
|
VIR_VCPU_RUNNING = 1, /* the virtual CPU is running */
|
||||||
VIR_VCPU_BLOCKED = 2, /* the virtual CPU is blocked on resource */
|
VIR_VCPU_BLOCKED = 2, /* the virtual CPU is blocked on resource */
|
||||||
} virVcpuState;
|
} virVcpuState;
|
||||||
|
|
||||||
typedef struct _virVcpuInfo virVcpuInfo;
|
typedef struct _virVcpuInfo virVcpuInfo;
|
||||||
struct _virVcpuInfo {
|
struct _virVcpuInfo {
|
||||||
unsigned int number; /* virtual CPU number */
|
unsigned int number; /* virtual CPU number */
|
||||||
int state; /* value from virVcpuState */
|
int state; /* value from virVcpuState */
|
||||||
unsigned long long cpuTime; /* CPU time used, in nanoseconds */
|
unsigned long long cpuTime; /* CPU time used, in nanoseconds */
|
||||||
int cpu; /* real CPU number, or -1 if offline */
|
int cpu; /* real CPU number, or -1 if offline */
|
||||||
};
|
};
|
||||||
typedef virVcpuInfo *virVcpuInfoPtr;
|
typedef virVcpuInfo *virVcpuInfoPtr;
|
||||||
|
|
||||||
int virDomainSetVcpus (virDomainPtr domain,
|
int virDomainSetVcpus (virDomainPtr domain,
|
||||||
unsigned int nvcpus);
|
unsigned int nvcpus);
|
||||||
|
|
||||||
int virDomainPinVcpu (virDomainPtr domain,
|
int virDomainPinVcpu (virDomainPtr domain,
|
||||||
unsigned int vcpu,
|
unsigned int vcpu,
|
||||||
unsigned char *cpumap,
|
unsigned char *cpumap,
|
||||||
int maplen);
|
int maplen);
|
||||||
@ -585,7 +590,7 @@ int virDomainPinVcpu (virDomainPtr domain,
|
|||||||
* USE_CPU macro set the bit (CPU usable) of the related cpu in cpumap.
|
* USE_CPU macro set the bit (CPU usable) of the related cpu in cpumap.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define VIR_USE_CPU(cpumap,cpu) (cpumap[(cpu)/8] |= (1<<((cpu)%8)))
|
#define VIR_USE_CPU(cpumap,cpu) (cpumap[(cpu)/8] |= (1<<((cpu)%8)))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* VIR_UNUSE_CPU:
|
* VIR_UNUSE_CPU:
|
||||||
@ -596,7 +601,7 @@ int virDomainPinVcpu (virDomainPtr domain,
|
|||||||
* USE_CPU macro reset the bit (CPU not usable) of the related cpu in cpumap.
|
* USE_CPU macro reset the bit (CPU not usable) of the related cpu in cpumap.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define VIR_UNUSE_CPU(cpumap,cpu) (cpumap[(cpu)/8] &= ~(1<<((cpu)%8)))
|
#define VIR_UNUSE_CPU(cpumap,cpu) (cpumap[(cpu)/8] &= ~(1<<((cpu)%8)))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* VIR_CPU_MAPLEN:
|
* VIR_CPU_MAPLEN:
|
||||||
@ -610,7 +615,7 @@ int virDomainPinVcpu (virDomainPtr domain,
|
|||||||
#define VIR_CPU_MAPLEN(cpu) (((cpu)+7)/8)
|
#define VIR_CPU_MAPLEN(cpu) (((cpu)+7)/8)
|
||||||
|
|
||||||
|
|
||||||
int virDomainGetVcpus (virDomainPtr domain,
|
int virDomainGetVcpus (virDomainPtr domain,
|
||||||
virVcpuInfoPtr info,
|
virVcpuInfoPtr info,
|
||||||
int maxinfo,
|
int maxinfo,
|
||||||
unsigned char *cpumaps,
|
unsigned char *cpumaps,
|
||||||
@ -637,7 +642,7 @@ int virDomainGetVcpus (virDomainPtr domain,
|
|||||||
* @maplen: the length (in bytes) of one cpumap
|
* @maplen: the length (in bytes) of one cpumap
|
||||||
* @vcpu: the virtual CPU number
|
* @vcpu: the virtual CPU number
|
||||||
* @cpumap: pointer to a cpumap (in 8-bit bytes) (OUT)
|
* @cpumap: pointer to a cpumap (in 8-bit bytes) (OUT)
|
||||||
* This cpumap must be previously allocated by the caller
|
* This cpumap must be previously allocated by the caller
|
||||||
* (ie: malloc(maplen))
|
* (ie: malloc(maplen))
|
||||||
*
|
*
|
||||||
* This macro is to be used in conjunction with virDomainGetVcpus() and
|
* This macro is to be used in conjunction with virDomainGetVcpus() and
|
||||||
@ -659,7 +664,7 @@ int virDomainGetVcpus (virDomainPtr domain,
|
|||||||
* virDomainPinVcpu() APIs. VIR_GET_CPUMAP macro returns a pointer to the
|
* virDomainPinVcpu() APIs. VIR_GET_CPUMAP macro returns a pointer to the
|
||||||
* cpumap of the specified vcpu from cpumaps array.
|
* cpumap of the specified vcpu from cpumaps array.
|
||||||
*/
|
*/
|
||||||
#define VIR_GET_CPUMAP(cpumaps,maplen,vcpu) &(cpumaps[(vcpu)*(maplen)])
|
#define VIR_GET_CPUMAP(cpumaps,maplen,vcpu) &(cpumaps[(vcpu)*(maplen)])
|
||||||
|
|
||||||
int virDomainAttachDevice(virDomainPtr domain, const char *xml);
|
int virDomainAttachDevice(virDomainPtr domain, const char *xml);
|
||||||
int virDomainDetachDevice(virDomainPtr domain, const char *xml);
|
int virDomainDetachDevice(virDomainPtr domain, const char *xml);
|
||||||
@ -668,7 +673,7 @@ int virDomainDetachDevice(virDomainPtr domain, const char *xml);
|
|||||||
* NUMA support
|
* NUMA support
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int virNodeGetCellsFreeMemory(virConnectPtr conn,
|
int virNodeGetCellsFreeMemory(virConnectPtr conn,
|
||||||
unsigned long long *freeMems,
|
unsigned long long *freeMems,
|
||||||
int startCell,
|
int startCell,
|
||||||
int maxCells);
|
int maxCells);
|
||||||
@ -695,77 +700,77 @@ typedef virNetwork *virNetworkPtr;
|
|||||||
/*
|
/*
|
||||||
* Get connection from network.
|
* Get connection from network.
|
||||||
*/
|
*/
|
||||||
virConnectPtr virNetworkGetConnect (virNetworkPtr network);
|
virConnectPtr virNetworkGetConnect (virNetworkPtr network);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List active networks
|
* List active networks
|
||||||
*/
|
*/
|
||||||
int virConnectNumOfNetworks (virConnectPtr conn);
|
int virConnectNumOfNetworks (virConnectPtr conn);
|
||||||
int virConnectListNetworks (virConnectPtr conn,
|
int virConnectListNetworks (virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List inactive networks
|
* List inactive networks
|
||||||
*/
|
*/
|
||||||
int virConnectNumOfDefinedNetworks (virConnectPtr conn);
|
int virConnectNumOfDefinedNetworks (virConnectPtr conn);
|
||||||
int virConnectListDefinedNetworks (virConnectPtr conn,
|
int virConnectListDefinedNetworks (virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lookup network by name or uuid
|
* Lookup network by name or uuid
|
||||||
*/
|
*/
|
||||||
virNetworkPtr virNetworkLookupByName (virConnectPtr conn,
|
virNetworkPtr virNetworkLookupByName (virConnectPtr conn,
|
||||||
const char *name);
|
const char *name);
|
||||||
virNetworkPtr virNetworkLookupByUUID (virConnectPtr conn,
|
virNetworkPtr virNetworkLookupByUUID (virConnectPtr conn,
|
||||||
const unsigned char *uuid);
|
const unsigned char *uuid);
|
||||||
virNetworkPtr virNetworkLookupByUUIDString (virConnectPtr conn,
|
virNetworkPtr virNetworkLookupByUUIDString (virConnectPtr conn,
|
||||||
const char *uuid);
|
const char *uuid);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create active transient network
|
* Create active transient network
|
||||||
*/
|
*/
|
||||||
virNetworkPtr virNetworkCreateXML (virConnectPtr conn,
|
virNetworkPtr virNetworkCreateXML (virConnectPtr conn,
|
||||||
const char *xmlDesc);
|
const char *xmlDesc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define inactive persistent network
|
* Define inactive persistent network
|
||||||
*/
|
*/
|
||||||
virNetworkPtr virNetworkDefineXML (virConnectPtr conn,
|
virNetworkPtr virNetworkDefineXML (virConnectPtr conn,
|
||||||
const char *xmlDesc);
|
const char *xmlDesc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Delete persistent network
|
* Delete persistent network
|
||||||
*/
|
*/
|
||||||
int virNetworkUndefine (virNetworkPtr network);
|
int virNetworkUndefine (virNetworkPtr network);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Activate persistent network
|
* Activate persistent network
|
||||||
*/
|
*/
|
||||||
int virNetworkCreate (virNetworkPtr network);
|
int virNetworkCreate (virNetworkPtr network);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Network destroy/free
|
* Network destroy/free
|
||||||
*/
|
*/
|
||||||
int virNetworkDestroy (virNetworkPtr network);
|
int virNetworkDestroy (virNetworkPtr network);
|
||||||
int virNetworkFree (virNetworkPtr network);
|
int virNetworkFree (virNetworkPtr network);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Network information
|
* Network information
|
||||||
*/
|
*/
|
||||||
const char* virNetworkGetName (virNetworkPtr network);
|
const char* virNetworkGetName (virNetworkPtr network);
|
||||||
int virNetworkGetUUID (virNetworkPtr network,
|
int virNetworkGetUUID (virNetworkPtr network,
|
||||||
unsigned char *uuid);
|
unsigned char *uuid);
|
||||||
int virNetworkGetUUIDString (virNetworkPtr network,
|
int virNetworkGetUUIDString (virNetworkPtr network,
|
||||||
char *buf);
|
char *buf);
|
||||||
char * virNetworkGetXMLDesc (virNetworkPtr network,
|
char * virNetworkGetXMLDesc (virNetworkPtr network,
|
||||||
int flags);
|
int flags);
|
||||||
char * virNetworkGetBridgeName (virNetworkPtr network);
|
char * virNetworkGetBridgeName (virNetworkPtr network);
|
||||||
|
|
||||||
int virNetworkGetAutostart (virNetworkPtr network,
|
int virNetworkGetAutostart (virNetworkPtr network,
|
||||||
int *autostart);
|
int *autostart);
|
||||||
int virNetworkSetAutostart (virNetworkPtr network,
|
int virNetworkSetAutostart (virNetworkPtr network,
|
||||||
int autostart);
|
int autostart);
|
||||||
|
|
||||||
|
|
||||||
@ -855,113 +860,113 @@ typedef virStorageVolInfo *virStorageVolInfoPtr;
|
|||||||
/*
|
/*
|
||||||
* Get connection from pool.
|
* Get connection from pool.
|
||||||
*/
|
*/
|
||||||
virConnectPtr virStoragePoolGetConnect (virStoragePoolPtr pool);
|
virConnectPtr virStoragePoolGetConnect (virStoragePoolPtr pool);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List active storage pools
|
* List active storage pools
|
||||||
*/
|
*/
|
||||||
int virConnectNumOfStoragePools (virConnectPtr conn);
|
int virConnectNumOfStoragePools (virConnectPtr conn);
|
||||||
int virConnectListStoragePools (virConnectPtr conn,
|
int virConnectListStoragePools (virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List inactive storage pools
|
* List inactive storage pools
|
||||||
*/
|
*/
|
||||||
int virConnectNumOfDefinedStoragePools(virConnectPtr conn);
|
int virConnectNumOfDefinedStoragePools(virConnectPtr conn);
|
||||||
int virConnectListDefinedStoragePools(virConnectPtr conn,
|
int virConnectListDefinedStoragePools(virConnectPtr conn,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lookup pool by name or uuid
|
* Lookup pool by name or uuid
|
||||||
*/
|
*/
|
||||||
virStoragePoolPtr virStoragePoolLookupByName (virConnectPtr conn,
|
virStoragePoolPtr virStoragePoolLookupByName (virConnectPtr conn,
|
||||||
const char *name);
|
const char *name);
|
||||||
virStoragePoolPtr virStoragePoolLookupByUUID (virConnectPtr conn,
|
virStoragePoolPtr virStoragePoolLookupByUUID (virConnectPtr conn,
|
||||||
const unsigned char *uuid);
|
const unsigned char *uuid);
|
||||||
virStoragePoolPtr virStoragePoolLookupByUUIDString(virConnectPtr conn,
|
virStoragePoolPtr virStoragePoolLookupByUUIDString(virConnectPtr conn,
|
||||||
const char *uuid);
|
const char *uuid);
|
||||||
virStoragePoolPtr virStoragePoolLookupByVolume (virStorageVolPtr vol);
|
virStoragePoolPtr virStoragePoolLookupByVolume (virStorageVolPtr vol);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Creating/destroying pools
|
* Creating/destroying pools
|
||||||
*/
|
*/
|
||||||
virStoragePoolPtr virStoragePoolCreateXML (virConnectPtr conn,
|
virStoragePoolPtr virStoragePoolCreateXML (virConnectPtr conn,
|
||||||
const char *xmlDesc,
|
const char *xmlDesc,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
virStoragePoolPtr virStoragePoolDefineXML (virConnectPtr conn,
|
virStoragePoolPtr virStoragePoolDefineXML (virConnectPtr conn,
|
||||||
const char *xmlDesc,
|
const char *xmlDesc,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStoragePoolBuild (virStoragePoolPtr pool,
|
int virStoragePoolBuild (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStoragePoolUndefine (virStoragePoolPtr pool);
|
int virStoragePoolUndefine (virStoragePoolPtr pool);
|
||||||
int virStoragePoolCreate (virStoragePoolPtr pool,
|
int virStoragePoolCreate (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStoragePoolDestroy (virStoragePoolPtr pool);
|
int virStoragePoolDestroy (virStoragePoolPtr pool);
|
||||||
int virStoragePoolDelete (virStoragePoolPtr pool,
|
int virStoragePoolDelete (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStoragePoolFree (virStoragePoolPtr pool);
|
int virStoragePoolFree (virStoragePoolPtr pool);
|
||||||
int virStoragePoolRefresh (virStoragePoolPtr pool,
|
int virStoragePoolRefresh (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* StoragePool information
|
* StoragePool information
|
||||||
*/
|
*/
|
||||||
const char* virStoragePoolGetName (virStoragePoolPtr pool);
|
const char* virStoragePoolGetName (virStoragePoolPtr pool);
|
||||||
int virStoragePoolGetUUID (virStoragePoolPtr pool,
|
int virStoragePoolGetUUID (virStoragePoolPtr pool,
|
||||||
unsigned char *uuid);
|
unsigned char *uuid);
|
||||||
int virStoragePoolGetUUIDString (virStoragePoolPtr pool,
|
int virStoragePoolGetUUIDString (virStoragePoolPtr pool,
|
||||||
char *buf);
|
char *buf);
|
||||||
|
|
||||||
int virStoragePoolGetInfo (virStoragePoolPtr vol,
|
int virStoragePoolGetInfo (virStoragePoolPtr vol,
|
||||||
virStoragePoolInfoPtr info);
|
virStoragePoolInfoPtr info);
|
||||||
|
|
||||||
char * virStoragePoolGetXMLDesc (virStoragePoolPtr pool,
|
char * virStoragePoolGetXMLDesc (virStoragePoolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
int virStoragePoolGetAutostart (virStoragePoolPtr pool,
|
int virStoragePoolGetAutostart (virStoragePoolPtr pool,
|
||||||
int *autostart);
|
int *autostart);
|
||||||
int virStoragePoolSetAutostart (virStoragePoolPtr pool,
|
int virStoragePoolSetAutostart (virStoragePoolPtr pool,
|
||||||
int autostart);
|
int autostart);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* List/lookup storage volumes within a pool
|
* List/lookup storage volumes within a pool
|
||||||
*/
|
*/
|
||||||
int virStoragePoolNumOfVolumes (virStoragePoolPtr pool);
|
int virStoragePoolNumOfVolumes (virStoragePoolPtr pool);
|
||||||
int virStoragePoolListVolumes (virStoragePoolPtr pool,
|
int virStoragePoolListVolumes (virStoragePoolPtr pool,
|
||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
|
|
||||||
virConnectPtr virStorageVolGetConnect (virStorageVolPtr vol);
|
virConnectPtr virStorageVolGetConnect (virStorageVolPtr vol);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lookup volumes based on various attributes
|
* Lookup volumes based on various attributes
|
||||||
*/
|
*/
|
||||||
virStorageVolPtr virStorageVolLookupByName (virStoragePoolPtr pool,
|
virStorageVolPtr virStorageVolLookupByName (virStoragePoolPtr pool,
|
||||||
const char *name);
|
const char *name);
|
||||||
virStorageVolPtr virStorageVolLookupByKey (virConnectPtr conn,
|
virStorageVolPtr virStorageVolLookupByKey (virConnectPtr conn,
|
||||||
const char *key);
|
const char *key);
|
||||||
virStorageVolPtr virStorageVolLookupByPath (virConnectPtr conn,
|
virStorageVolPtr virStorageVolLookupByPath (virConnectPtr conn,
|
||||||
const char *path);
|
const char *path);
|
||||||
|
|
||||||
|
|
||||||
const char* virStorageVolGetName (virStorageVolPtr vol);
|
const char* virStorageVolGetName (virStorageVolPtr vol);
|
||||||
const char* virStorageVolGetKey (virStorageVolPtr vol);
|
const char* virStorageVolGetKey (virStorageVolPtr vol);
|
||||||
|
|
||||||
virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr pool,
|
virStorageVolPtr virStorageVolCreateXML (virStoragePoolPtr pool,
|
||||||
const char *xmldesc,
|
const char *xmldesc,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStorageVolDelete (virStorageVolPtr vol,
|
int virStorageVolDelete (virStorageVolPtr vol,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
int virStorageVolFree (virStorageVolPtr vol);
|
int virStorageVolFree (virStorageVolPtr vol);
|
||||||
|
|
||||||
int virStorageVolGetInfo (virStorageVolPtr vol,
|
int virStorageVolGetInfo (virStorageVolPtr vol,
|
||||||
virStorageVolInfoPtr info);
|
virStorageVolInfoPtr info);
|
||||||
char * virStorageVolGetXMLDesc (virStorageVolPtr pool,
|
char * virStorageVolGetXMLDesc (virStorageVolPtr pool,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
char * virStorageVolGetPath (virStorageVolPtr vol);
|
char * virStorageVolGetPath (virStorageVolPtr vol);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -225,6 +225,13 @@ typedef int
|
|||||||
const char *path,
|
const char *path,
|
||||||
struct _virDomainInterfaceStats *stats);
|
struct _virDomainInterfaceStats *stats);
|
||||||
|
|
||||||
|
typedef int
|
||||||
|
(*virDrvDomainBlockPeek)
|
||||||
|
(virDomainPtr domain,
|
||||||
|
const char *path,
|
||||||
|
unsigned long long offset, size_t size,
|
||||||
|
void *buffer);
|
||||||
|
|
||||||
typedef int
|
typedef int
|
||||||
(*virDrvDomainMigratePrepare)
|
(*virDrvDomainMigratePrepare)
|
||||||
(virConnectPtr dconn,
|
(virConnectPtr dconn,
|
||||||
@ -337,6 +344,7 @@ struct _virDriver {
|
|||||||
virDrvDomainMigrateFinish domainMigrateFinish;
|
virDrvDomainMigrateFinish domainMigrateFinish;
|
||||||
virDrvDomainBlockStats domainBlockStats;
|
virDrvDomainBlockStats domainBlockStats;
|
||||||
virDrvDomainInterfaceStats domainInterfaceStats;
|
virDrvDomainInterfaceStats domainInterfaceStats;
|
||||||
|
virDrvDomainBlockPeek domainBlockPeek;
|
||||||
virDrvNodeGetCellsFreeMemory nodeGetCellsFreeMemory;
|
virDrvNodeGetCellsFreeMemory nodeGetCellsFreeMemory;
|
||||||
virDrvNodeGetFreeMemory getFreeMemory;
|
virDrvNodeGetFreeMemory getFreeMemory;
|
||||||
};
|
};
|
||||||
|
@ -2586,7 +2586,84 @@ virDomainInterfaceStats (virDomainPtr dom, const char *path,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virDomainBlockPeek:
|
||||||
|
* @dom: pointer to the domain object
|
||||||
|
* @path: path to the block device
|
||||||
|
* @offset: offset within block device
|
||||||
|
* @size: size to read
|
||||||
|
* @buffer: return buffer (must be at least size bytes)
|
||||||
|
* @flags: unused, always pass 0
|
||||||
|
*
|
||||||
|
* This function allows you to read the contents of a domain's
|
||||||
|
* disk device.
|
||||||
|
*
|
||||||
|
* Typical uses for this are to determine if the domain has
|
||||||
|
* written a Master Boot Record (indicating that the domain
|
||||||
|
* has completed installation), or to try to work out the state
|
||||||
|
* of the domain's filesystems.
|
||||||
|
*
|
||||||
|
* (Note that in the local case you might try to open the
|
||||||
|
* block device or file directly, but that won't work in the
|
||||||
|
* remote case, nor if you don't have sufficient permission.
|
||||||
|
* Hence the need for this call).
|
||||||
|
*
|
||||||
|
* 'path' must be a device or file corresponding to the domain.
|
||||||
|
* In other words it must be the precise string returned in
|
||||||
|
* a <disk><source dev='...'/></disk> from
|
||||||
|
* virDomainGetXMLDesc.
|
||||||
|
*
|
||||||
|
* 'offset' and 'size' represent an area which must lie entirely
|
||||||
|
* within the device or file. 'size' may be 0 to test if the
|
||||||
|
* call would succeed.
|
||||||
|
*
|
||||||
|
* 'buffer' is the return buffer and must be at least 'size' bytes.
|
||||||
|
*
|
||||||
|
* Returns: 0 in case of success or -1 in case of failure.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virDomainBlockPeek (virDomainPtr dom,
|
||||||
|
const char *path,
|
||||||
|
unsigned long long offset /* really 64 bits */,
|
||||||
|
size_t size,
|
||||||
|
void *buffer,
|
||||||
|
unsigned int flags)
|
||||||
|
{
|
||||||
|
virConnectPtr conn;
|
||||||
|
DEBUG("domain=%p, path=%s, offset=%lld, size=%zi, buffer=%p",
|
||||||
|
dom, path, offset, size, buffer);
|
||||||
|
|
||||||
|
if (!VIR_IS_CONNECTED_DOMAIN (dom)) {
|
||||||
|
virLibDomainError (NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
conn = dom->conn;
|
||||||
|
|
||||||
|
if (!path) {
|
||||||
|
virLibDomainError (dom, VIR_ERR_INVALID_ARG,
|
||||||
|
_("path is NULL"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags != 0) {
|
||||||
|
virLibDomainError (dom, VIR_ERR_INVALID_ARG,
|
||||||
|
_("flags must be zero"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allow size == 0 as an access test. */
|
||||||
|
if (size > 0 && !buffer) {
|
||||||
|
virLibDomainError (dom, VIR_ERR_INVALID_ARG,
|
||||||
|
_("buffer is NULL"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conn->driver->domainBlockPeek)
|
||||||
|
return conn->driver->domainBlockPeek (dom, path, offset, size, buffer);
|
||||||
|
|
||||||
|
virLibDomainError (dom, VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
|
@ -73,6 +73,7 @@
|
|||||||
virDomainSetSchedulerParameters;
|
virDomainSetSchedulerParameters;
|
||||||
virDomainBlockStats;
|
virDomainBlockStats;
|
||||||
virDomainInterfaceStats;
|
virDomainInterfaceStats;
|
||||||
|
virDomainBlockPeek;
|
||||||
virDomainAttachDevice;
|
virDomainAttachDevice;
|
||||||
virDomainDetachDevice;
|
virDomainDetachDevice;
|
||||||
|
|
||||||
|
@ -3521,6 +3521,7 @@ static virDriver qemuDriver = {
|
|||||||
NULL, /* domainMigrateFinish */
|
NULL, /* domainMigrateFinish */
|
||||||
qemudDomainBlockStats, /* domainBlockStats */
|
qemudDomainBlockStats, /* domainBlockStats */
|
||||||
qemudDomainInterfaceStats, /* domainInterfaceStats */
|
qemudDomainInterfaceStats, /* domainInterfaceStats */
|
||||||
|
NULL, /* domainBlockPeek */
|
||||||
#if HAVE_NUMACTL
|
#if HAVE_NUMACTL
|
||||||
qemudNodeGetCellsFreeMemory, /* nodeGetCellsFreeMemory */
|
qemudNodeGetCellsFreeMemory, /* nodeGetCellsFreeMemory */
|
||||||
qemudNodeGetFreeMemory, /* getFreeMemory */
|
qemudNodeGetFreeMemory, /* getFreeMemory */
|
||||||
|
@ -2060,6 +2060,7 @@ static virDriver testDriver = {
|
|||||||
NULL, /* domainMigrateFinish */
|
NULL, /* domainMigrateFinish */
|
||||||
NULL, /* domainBlockStats */
|
NULL, /* domainBlockStats */
|
||||||
NULL, /* domainInterfaceStats */
|
NULL, /* domainInterfaceStats */
|
||||||
|
NULL, /* domainBlockPeek */
|
||||||
testNodeGetCellsFreeMemory, /* nodeGetCellsFreeMemory */
|
testNodeGetCellsFreeMemory, /* nodeGetCellsFreeMemory */
|
||||||
NULL, /* getFreeMemory */
|
NULL, /* getFreeMemory */
|
||||||
};
|
};
|
||||||
|
@ -1234,6 +1234,29 @@ xenUnifiedDomainInterfaceStats (virDomainPtr dom, const char *path,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
xenUnifiedDomainBlockPeek (virDomainPtr dom, const char *path,
|
||||||
|
unsigned long long offset, size_t size,
|
||||||
|
void *buffer)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
GET_PRIVATE (dom->conn);
|
||||||
|
|
||||||
|
if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
|
||||||
|
r = xenDaemonDomainBlockPeek (dom, path, offset, size, buffer);
|
||||||
|
if (r != -2) return r;
|
||||||
|
/* r == -2 means declined, so fall through to XM driver ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (priv->opened[XEN_UNIFIED_XM_OFFSET]) {
|
||||||
|
if (xenXMDomainBlockPeek (dom, path, offset, size, buffer) == 0)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
xenUnifiedError (dom->conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
xenUnifiedNodeGetCellsFreeMemory (virConnectPtr conn, unsigned long long *freeMems,
|
xenUnifiedNodeGetCellsFreeMemory (virConnectPtr conn, unsigned long long *freeMems,
|
||||||
int startCell, int maxCells)
|
int startCell, int maxCells)
|
||||||
@ -1329,6 +1352,7 @@ static virDriver xenUnifiedDriver = {
|
|||||||
.domainMigrateFinish = xenUnifiedDomainMigrateFinish,
|
.domainMigrateFinish = xenUnifiedDomainMigrateFinish,
|
||||||
.domainBlockStats = xenUnifiedDomainBlockStats,
|
.domainBlockStats = xenUnifiedDomainBlockStats,
|
||||||
.domainInterfaceStats = xenUnifiedDomainInterfaceStats,
|
.domainInterfaceStats = xenUnifiedDomainInterfaceStats,
|
||||||
|
.domainBlockPeek = xenUnifiedDomainBlockPeek,
|
||||||
.nodeGetCellsFreeMemory = xenUnifiedNodeGetCellsFreeMemory,
|
.nodeGetCellsFreeMemory = xenUnifiedNodeGetCellsFreeMemory,
|
||||||
.getFreeMemory = xenUnifiedNodeGetFreeMemory,
|
.getFreeMemory = xenUnifiedNodeGetFreeMemory,
|
||||||
};
|
};
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#include <sys/errno.h>
|
#include <sys/errno.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -1705,6 +1707,219 @@ error:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef int
|
||||||
|
(*sexp_blockdevs_cb)
|
||||||
|
(virConnectPtr conn, void *data,
|
||||||
|
int isBlock, int cdrom, int isNoSrcCdrom, int hvm,
|
||||||
|
const char *drvName, const char *drvType,
|
||||||
|
const char *src, const char *dst,
|
||||||
|
const char *mode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xend_parse_sexp_blockdevs:
|
||||||
|
* @conn: connection
|
||||||
|
* @root: root sexpr
|
||||||
|
* @xendConfigVersion: version of xend
|
||||||
|
* @fn: callback function
|
||||||
|
* @data: optional data for callback function
|
||||||
|
*
|
||||||
|
* This parses out block devices from the domain sexpr and calls
|
||||||
|
* fn (conn, data, ...) for each block device found.
|
||||||
|
*
|
||||||
|
* Returns 0 if successful or -1 if failed.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
xend_parse_sexp_blockdevs (virConnectPtr conn, struct sexpr *root,
|
||||||
|
int xendConfigVersion,
|
||||||
|
sexp_blockdevs_cb fn, void *data)
|
||||||
|
{
|
||||||
|
struct sexpr *cur, *node;
|
||||||
|
int hvm;
|
||||||
|
|
||||||
|
hvm = sexpr_lookup(root, "domain/image/hvm") ? 1 : 0;
|
||||||
|
|
||||||
|
for (cur = root; cur->kind == SEXPR_CONS; cur = cur->u.s.cdr) {
|
||||||
|
node = cur->u.s.car;
|
||||||
|
/* Normally disks are in a (device (vbd ...)) block
|
||||||
|
but blktap disks ended up in a differently named
|
||||||
|
(device (tap ....)) block.... */
|
||||||
|
if (sexpr_lookup(node, "device/vbd") ||
|
||||||
|
sexpr_lookup(node, "device/tap")) {
|
||||||
|
char *offset;
|
||||||
|
int ret = -1;
|
||||||
|
int isBlock = 0;
|
||||||
|
int cdrom = 0;
|
||||||
|
int isNoSrcCdrom = 0;
|
||||||
|
char *drvName = NULL;
|
||||||
|
char *drvType = NULL;
|
||||||
|
const char *src = NULL;
|
||||||
|
const char *dst = NULL;
|
||||||
|
const char *mode = NULL;
|
||||||
|
|
||||||
|
/* Again dealing with (vbd...) vs (tap ...) differences */
|
||||||
|
if (sexpr_lookup(node, "device/vbd")) {
|
||||||
|
src = sexpr_node(node, "device/vbd/uname");
|
||||||
|
dst = sexpr_node(node, "device/vbd/dev");
|
||||||
|
mode = sexpr_node(node, "device/vbd/mode");
|
||||||
|
} else {
|
||||||
|
src = sexpr_node(node, "device/tap/uname");
|
||||||
|
dst = sexpr_node(node, "device/tap/dev");
|
||||||
|
mode = sexpr_node(node, "device/tap/mode");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dst == NULL) {
|
||||||
|
virXendError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("domain information incomplete, vbd has no dev"));
|
||||||
|
goto bad_parse;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src == NULL) {
|
||||||
|
/* There is a case without the uname to the CD-ROM device */
|
||||||
|
offset = strchr(dst, ':');
|
||||||
|
if (offset) {
|
||||||
|
if (hvm && STREQ(offset, ":cdrom")) {
|
||||||
|
isNoSrcCdrom = 1;
|
||||||
|
}
|
||||||
|
offset[0] = '\0';
|
||||||
|
}
|
||||||
|
if (!isNoSrcCdrom) {
|
||||||
|
virXendError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("domain information incomplete, vbd has no src"));
|
||||||
|
goto bad_parse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isNoSrcCdrom) {
|
||||||
|
offset = strchr(src, ':');
|
||||||
|
if (!offset) {
|
||||||
|
virXendError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("cannot parse vbd filename, missing driver name"));
|
||||||
|
goto bad_parse;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (VIR_ALLOC_N(drvName, (offset-src)+1) < 0) {
|
||||||
|
virXendError(conn, VIR_ERR_NO_MEMORY,
|
||||||
|
_("allocate new buffer"));
|
||||||
|
goto bad_parse;
|
||||||
|
}
|
||||||
|
strncpy(drvName, src, (offset-src));
|
||||||
|
drvName[offset-src] = '\0';
|
||||||
|
|
||||||
|
src = offset + 1;
|
||||||
|
|
||||||
|
if (STREQ (drvName, "tap")) {
|
||||||
|
offset = strchr(src, ':');
|
||||||
|
if (!offset) {
|
||||||
|
virXendError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("cannot parse vbd filename, missing driver type"));
|
||||||
|
goto bad_parse;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (VIR_ALLOC_N(drvType, (offset-src)+1)< 0) {
|
||||||
|
virXendError(conn, VIR_ERR_NO_MEMORY,
|
||||||
|
_("allocate new buffer"));
|
||||||
|
goto bad_parse;
|
||||||
|
}
|
||||||
|
strncpy(drvType, src, (offset-src));
|
||||||
|
drvType[offset-src] = '\0';
|
||||||
|
src = offset + 1;
|
||||||
|
/* Its possible to use blktap driver for block devs
|
||||||
|
too, but kinda pointless because blkback is better,
|
||||||
|
so we assume common case here. If blktap becomes
|
||||||
|
omnipotent, we can revisit this, perhaps stat()'ing
|
||||||
|
the src file in question */
|
||||||
|
isBlock = 0;
|
||||||
|
} else if (STREQ(drvName, "phy")) {
|
||||||
|
isBlock = 1;
|
||||||
|
} else if (STREQ(drvName, "file")) {
|
||||||
|
isBlock = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (STREQLEN (dst, "ioemu:", 6))
|
||||||
|
dst += 6;
|
||||||
|
|
||||||
|
/* New style disk config from Xen >= 3.0.3 */
|
||||||
|
if (xendConfigVersion > 1) {
|
||||||
|
offset = strrchr(dst, ':');
|
||||||
|
if (offset) {
|
||||||
|
if (STREQ (offset, ":cdrom")) {
|
||||||
|
cdrom = 1;
|
||||||
|
} else if (STREQ (offset, ":disk")) {
|
||||||
|
/* The default anyway */
|
||||||
|
} else {
|
||||||
|
/* Unknown, lets pretend its a disk too */
|
||||||
|
}
|
||||||
|
offset[0] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Call the callback function. */
|
||||||
|
ret = fn (conn, data, isBlock, cdrom, isNoSrcCdrom, hvm,
|
||||||
|
drvName, drvType, src, dst, mode);
|
||||||
|
|
||||||
|
bad_parse:
|
||||||
|
VIR_FREE(drvName);
|
||||||
|
VIR_FREE(drvType);
|
||||||
|
|
||||||
|
if (ret == -1) return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
xend_parse_sexp_desc_blockdev (virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
|
void *data,
|
||||||
|
int isBlock, int cdrom, int isNoSrcCdrom,
|
||||||
|
int hvm,
|
||||||
|
const char *drvName, const char *drvType,
|
||||||
|
const char *src, const char *dst,
|
||||||
|
const char *mode)
|
||||||
|
{
|
||||||
|
virBuffer *buf = (virBuffer *) data;
|
||||||
|
const char *bus = NULL;
|
||||||
|
|
||||||
|
if (!isNoSrcCdrom) {
|
||||||
|
virBufferVSprintf(buf, " <disk type='%s' device='%s'>\n",
|
||||||
|
isBlock ? "block" : "file",
|
||||||
|
cdrom ? "cdrom" : "disk");
|
||||||
|
if (drvType) {
|
||||||
|
virBufferVSprintf(buf, " <driver name='%s' type='%s'/>\n", drvName, drvType);
|
||||||
|
} else {
|
||||||
|
virBufferVSprintf(buf, " <driver name='%s'/>\n", drvName);
|
||||||
|
}
|
||||||
|
if (isBlock) {
|
||||||
|
virBufferVSprintf(buf, " <source dev='%s'/>\n", src);
|
||||||
|
} else {
|
||||||
|
virBufferVSprintf(buf, " <source file='%s'/>\n", src);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* This case is the cdrom device only */
|
||||||
|
virBufferAddLit(buf, " <disk device='cdrom'>\n");
|
||||||
|
}
|
||||||
|
if (STRPREFIX(dst, "xvd") || !hvm) {
|
||||||
|
bus = "xen";
|
||||||
|
} else if (STRPREFIX(dst, "sd")) {
|
||||||
|
bus = "scsi";
|
||||||
|
} else {
|
||||||
|
bus = "ide";
|
||||||
|
}
|
||||||
|
virBufferVSprintf(buf, " <target dev='%s' bus='%s'/>\n",
|
||||||
|
dst, bus);
|
||||||
|
|
||||||
|
/* XXX should we force mode == r, if cdrom==1, or assume
|
||||||
|
xend has already done this ? */
|
||||||
|
if ((mode != NULL) && (STREQ (mode, "r")))
|
||||||
|
virBufferAddLit(buf, " <readonly/>\n");
|
||||||
|
else if ((mode != NULL) && (STREQ (mode, "w!")))
|
||||||
|
virBufferAddLit(buf, " <shareable/>\n");
|
||||||
|
virBufferAddLit(buf, " </disk>\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* xend_parse_sexp_desc:
|
* xend_parse_sexp_desc:
|
||||||
* @conn: the connection associated with the XML
|
* @conn: the connection associated with the XML
|
||||||
@ -1849,164 +2064,15 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root,
|
|||||||
if ((tmp != NULL) && (tmp[0] != 0))
|
if ((tmp != NULL) && (tmp[0] != 0))
|
||||||
virBufferVSprintf(&buf, " <emulator>%s</emulator>\n", tmp);
|
virBufferVSprintf(&buf, " <emulator>%s</emulator>\n", tmp);
|
||||||
|
|
||||||
|
/* append block devices */
|
||||||
|
if (xend_parse_sexp_blockdevs (conn, root, xendConfigVersion,
|
||||||
|
xend_parse_sexp_desc_blockdev, &buf) == -1)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* append network devices and framebuffer */
|
||||||
for (cur = root; cur->kind == SEXPR_CONS; cur = cur->u.s.cdr) {
|
for (cur = root; cur->kind == SEXPR_CONS; cur = cur->u.s.cdr) {
|
||||||
node = cur->u.s.car;
|
node = cur->u.s.car;
|
||||||
/* Normally disks are in a (device (vbd ...)) block
|
if (sexpr_lookup(node, "device/vif")) {
|
||||||
but blktap disks ended up in a differently named
|
|
||||||
(device (tap ....)) block.... */
|
|
||||||
if (sexpr_lookup(node, "device/vbd") ||
|
|
||||||
sexpr_lookup(node, "device/tap")) {
|
|
||||||
char *offset;
|
|
||||||
int isBlock = 0;
|
|
||||||
int cdrom = 0;
|
|
||||||
int isNoSrcCdrom = 0;
|
|
||||||
char *drvName = NULL;
|
|
||||||
char *drvType = NULL;
|
|
||||||
const char *src = NULL;
|
|
||||||
const char *dst = NULL;
|
|
||||||
const char *mode = NULL;
|
|
||||||
const char *bus = NULL;
|
|
||||||
|
|
||||||
/* Again dealing with (vbd...) vs (tap ...) differences */
|
|
||||||
if (sexpr_lookup(node, "device/vbd")) {
|
|
||||||
src = sexpr_node(node, "device/vbd/uname");
|
|
||||||
dst = sexpr_node(node, "device/vbd/dev");
|
|
||||||
mode = sexpr_node(node, "device/vbd/mode");
|
|
||||||
} else {
|
|
||||||
src = sexpr_node(node, "device/tap/uname");
|
|
||||||
dst = sexpr_node(node, "device/tap/dev");
|
|
||||||
mode = sexpr_node(node, "device/tap/mode");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dst == NULL) {
|
|
||||||
virXendError(conn, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("domain information incomplete, vbd has no dev"));
|
|
||||||
goto bad_parse;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (src == NULL) {
|
|
||||||
/* There is a case without the uname to the CD-ROM device */
|
|
||||||
offset = strchr(dst, ':');
|
|
||||||
if (offset) {
|
|
||||||
if (hvm && STREQ( offset , ":cdrom")) {
|
|
||||||
isNoSrcCdrom = 1;
|
|
||||||
}
|
|
||||||
offset[0] = '\0';
|
|
||||||
}
|
|
||||||
if (!isNoSrcCdrom) {
|
|
||||||
virXendError(conn, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("domain information incomplete, vbd has no src"));
|
|
||||||
goto bad_parse;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isNoSrcCdrom) {
|
|
||||||
offset = strchr(src, ':');
|
|
||||||
if (!offset) {
|
|
||||||
virXendError(conn, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("cannot parse vbd filename, missing driver name"));
|
|
||||||
goto bad_parse;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VIR_ALLOC_N(drvName, (offset-src)+1) < 0) {
|
|
||||||
virXendError(conn, VIR_ERR_NO_MEMORY,
|
|
||||||
_("allocate new buffer"));
|
|
||||||
goto bad_parse;
|
|
||||||
}
|
|
||||||
strncpy(drvName, src, (offset-src));
|
|
||||||
drvName[offset-src] = '\0';
|
|
||||||
|
|
||||||
src = offset + 1;
|
|
||||||
|
|
||||||
if (STREQ(drvName, "tap")) {
|
|
||||||
offset = strchr(src, ':');
|
|
||||||
if (!offset) {
|
|
||||||
virXendError(conn, VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("cannot parse vbd filename, missing driver type"));
|
|
||||||
goto bad_parse;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (VIR_ALLOC_N(drvType, (offset-src)+1)< 0) {
|
|
||||||
virXendError(conn, VIR_ERR_NO_MEMORY,
|
|
||||||
_("allocate new buffer"));
|
|
||||||
goto bad_parse;
|
|
||||||
}
|
|
||||||
strncpy(drvType, src, (offset-src));
|
|
||||||
drvType[offset-src] = '\0';
|
|
||||||
src = offset + 1;
|
|
||||||
/* Its possible to use blktap driver for block devs
|
|
||||||
too, but kinda pointless because blkback is better,
|
|
||||||
so we assume common case here. If blktap becomes
|
|
||||||
omnipotent, we can revisit this, perhaps stat()'ing
|
|
||||||
the src file in question */
|
|
||||||
isBlock = 0;
|
|
||||||
} else if (STREQ(drvName, "phy")) {
|
|
||||||
isBlock = 1;
|
|
||||||
} else if (STREQ(drvName, "file")) {
|
|
||||||
isBlock = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (STRPREFIX(dst, "ioemu:"))
|
|
||||||
dst += 6;
|
|
||||||
|
|
||||||
/* New style disk config from Xen >= 3.0.3 */
|
|
||||||
if (xendConfigVersion > 1) {
|
|
||||||
offset = strrchr(dst, ':');
|
|
||||||
if (offset) {
|
|
||||||
if (STREQ(offset, ":cdrom")) {
|
|
||||||
cdrom = 1;
|
|
||||||
} else if (STREQ(offset, ":disk")) {
|
|
||||||
/* The default anyway */
|
|
||||||
} else {
|
|
||||||
/* Unknown, lets pretend its a disk too */
|
|
||||||
}
|
|
||||||
offset[0] = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isNoSrcCdrom) {
|
|
||||||
virBufferVSprintf(&buf, " <disk type='%s' device='%s'>\n",
|
|
||||||
isBlock ? "block" : "file",
|
|
||||||
cdrom ? "cdrom" : "disk");
|
|
||||||
if (drvType) {
|
|
||||||
virBufferVSprintf(&buf, " <driver name='%s' type='%s'/>\n", drvName, drvType);
|
|
||||||
} else {
|
|
||||||
virBufferVSprintf(&buf, " <driver name='%s'/>\n", drvName);
|
|
||||||
}
|
|
||||||
if (isBlock) {
|
|
||||||
virBufferVSprintf(&buf, " <source dev='%s'/>\n", src);
|
|
||||||
} else {
|
|
||||||
virBufferVSprintf(&buf, " <source file='%s'/>\n", src);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* This case is the cdrom device only */
|
|
||||||
virBufferAddLit(&buf, " <disk device='cdrom'>\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (STRPREFIX(dst, "xvd") || !hvm) {
|
|
||||||
bus = "xen";
|
|
||||||
} else if (STRPREFIX(dst, "sd")) {
|
|
||||||
bus = "scsi";
|
|
||||||
} else {
|
|
||||||
bus = "ide";
|
|
||||||
}
|
|
||||||
virBufferVSprintf(&buf, " <target dev='%s' bus='%s'/>\n",
|
|
||||||
dst, bus);
|
|
||||||
|
|
||||||
|
|
||||||
/* XXX should we force mode == r, if cdrom==1, or assume
|
|
||||||
xend has already done this ? */
|
|
||||||
if ((mode != NULL) && (STREQ(mode, "r")))
|
|
||||||
virBufferAddLit(&buf, " <readonly/>\n");
|
|
||||||
else if ((mode != NULL) && (STREQ(mode, "w!")))
|
|
||||||
virBufferAddLit(&buf, " <shareable/>\n");
|
|
||||||
virBufferAddLit(&buf, " </disk>\n");
|
|
||||||
|
|
||||||
bad_parse:
|
|
||||||
VIR_FREE(drvName);
|
|
||||||
VIR_FREE(drvType);
|
|
||||||
} else if (sexpr_lookup(node, "device/vif")) {
|
|
||||||
const char *tmp2, *model;
|
const char *tmp2, *model;
|
||||||
tmp2 = sexpr_node(node, "device/vif/script");
|
tmp2 = sexpr_node(node, "device/vif/script");
|
||||||
tmp = sexpr_node(node, "device/vif/bridge");
|
tmp = sexpr_node(node, "device/vif/bridge");
|
||||||
@ -4433,5 +4499,110 @@ error:
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct check_path_data {
|
||||||
|
const char *path;
|
||||||
|
int ok;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
check_path (virConnectPtr conn ATTRIBUTE_UNUSED, void *vp,
|
||||||
|
int isBlock ATTRIBUTE_UNUSED,
|
||||||
|
int cdrom, int isNoSrcCdrom,
|
||||||
|
int hvm ATTRIBUTE_UNUSED,
|
||||||
|
const char *drvName ATTRIBUTE_UNUSED,
|
||||||
|
const char *drvType ATTRIBUTE_UNUSED,
|
||||||
|
const char *src, const char *dst ATTRIBUTE_UNUSED,
|
||||||
|
const char *mode ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
struct check_path_data *data = (struct check_path_data *) vp;
|
||||||
|
|
||||||
|
if (!isNoSrcCdrom && !cdrom && src && STREQ (src, data->path))
|
||||||
|
data->ok = 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xenDaemonDomainBlockPeek:
|
||||||
|
* @dom: domain object
|
||||||
|
* @path: path to the file or device
|
||||||
|
* @offset: offset
|
||||||
|
* @size: size
|
||||||
|
* @buffer: return buffer
|
||||||
|
*
|
||||||
|
* Returns 0 if successful, -1 if error, -2 if declined.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xenDaemonDomainBlockPeek (virDomainPtr domain, const char *path,
|
||||||
|
unsigned long long offset, size_t size,
|
||||||
|
void *buffer)
|
||||||
|
{
|
||||||
|
xenUnifiedPrivatePtr priv;
|
||||||
|
struct sexpr *root;
|
||||||
|
struct check_path_data data;
|
||||||
|
int fd, ret = -1;
|
||||||
|
struct stat statbuf;
|
||||||
|
|
||||||
|
priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
|
||||||
|
|
||||||
|
if (domain->id < 0 && priv->xendConfigVersion < 3)
|
||||||
|
return -2; /* Decline, allow XM to handle it. */
|
||||||
|
|
||||||
|
/* Security check: The path must correspond to a block device. */
|
||||||
|
if (domain->id > 0)
|
||||||
|
root = sexpr_get (domain->conn, "/xend/domain/%d?detail=1",
|
||||||
|
domain->id);
|
||||||
|
else if (domain->id < 0)
|
||||||
|
root = sexpr_get (domain->conn, "/xend/domain/%s?detail=1",
|
||||||
|
domain->name);
|
||||||
|
else {
|
||||||
|
/* This call always fails for dom0. */
|
||||||
|
virXendError (domain->conn, VIR_ERR_NO_SUPPORT,
|
||||||
|
_("domainBlockPeek is not supported for dom0"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!root) {
|
||||||
|
virXendError (domain->conn, VIR_ERR_XEN_CALL, __FUNCTION__);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
data.path = path;
|
||||||
|
data.ok = 0;
|
||||||
|
|
||||||
|
if (xend_parse_sexp_blockdevs (domain->conn, root,
|
||||||
|
priv->xendConfigVersion,
|
||||||
|
check_path, &data) == -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (!data.ok) {
|
||||||
|
virXendError (domain->conn, VIR_ERR_INVALID_ARG,
|
||||||
|
_("invalid path"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The path is correct, now try to open it and get its size. */
|
||||||
|
fd = open (path, O_RDONLY);
|
||||||
|
if (fd == -1 || fstat (fd, &statbuf) == -1) {
|
||||||
|
virXendError (domain->conn, VIR_ERR_SYSTEM_ERROR, strerror (errno));
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Seek and read. */
|
||||||
|
/* NB. Because we configure with AC_SYS_LARGEFILE, off_t should
|
||||||
|
* be 64 bits on all platforms.
|
||||||
|
*/
|
||||||
|
if (lseek (fd, offset, SEEK_SET) == (off_t) -1 ||
|
||||||
|
saferead (fd, buffer, size) == (ssize_t) -1) {
|
||||||
|
virXendError (domain->conn, VIR_ERR_SYSTEM_ERROR, strerror (errno));
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
done:
|
||||||
|
if (fd >= 0) close (fd);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* ! PROXY */
|
#endif /* ! PROXY */
|
||||||
#endif /* WITH_XEN */
|
#endif /* WITH_XEN */
|
||||||
|
@ -244,6 +244,8 @@ virDomainPtr xenDaemonLookupByName(virConnectPtr conn, const char *domname);
|
|||||||
int xenDaemonDomainMigratePrepare (virConnectPtr dconn, char **cookie, int *cookielen, const char *uri_in, char **uri_out, unsigned long flags, const char *dname, unsigned long resource);
|
int xenDaemonDomainMigratePrepare (virConnectPtr dconn, char **cookie, int *cookielen, const char *uri_in, char **uri_out, unsigned long flags, const char *dname, unsigned long resource);
|
||||||
int xenDaemonDomainMigratePerform (virDomainPtr domain, const char *cookie, int cookielen, const char *uri, unsigned long flags, const char *dname, unsigned long resource);
|
int xenDaemonDomainMigratePerform (virDomainPtr domain, const char *cookie, int cookielen, const char *uri, unsigned long flags, const char *dname, unsigned long resource);
|
||||||
|
|
||||||
|
int xenDaemonDomainBlockPeek (virDomainPtr domain, const char *path, unsigned long long offset, size_t size, void *buffer);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -3241,4 +3241,15 @@ xenXMDomainDetachDevice(virDomainPtr domain, const char *xml) {
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
xenXMDomainBlockPeek (virDomainPtr dom,
|
||||||
|
const char *path ATTRIBUTE_UNUSED,
|
||||||
|
unsigned long long offset ATTRIBUTE_UNUSED,
|
||||||
|
size_t size ATTRIBUTE_UNUSED,
|
||||||
|
void *buffer ATTRIBUTE_UNUSED)
|
||||||
|
{
|
||||||
|
xenXMError (dom->conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* WITH_XEN */
|
#endif /* WITH_XEN */
|
||||||
|
@ -60,6 +60,7 @@ int xenXMDomainUndefine(virDomainPtr domain);
|
|||||||
|
|
||||||
virConfPtr xenXMParseXMLToConfig(virConnectPtr conn, const char *xml);
|
virConfPtr xenXMParseXMLToConfig(virConnectPtr conn, const char *xml);
|
||||||
char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf);
|
char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf);
|
||||||
|
int xenXMDomainBlockPeek (virDomainPtr dom, const char *path, unsigned long long offset, size_t size, void *buffer);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -15,17 +15,17 @@
|
|||||||
<on_reboot>restart</on_reboot>
|
<on_reboot>restart</on_reboot>
|
||||||
<on_crash>restart</on_crash>
|
<on_crash>restart</on_crash>
|
||||||
<devices>
|
<devices>
|
||||||
|
<disk type='file' device='disk'>
|
||||||
|
<driver name='tap' type='aio'/>
|
||||||
|
<source file='/xen/rhel5.img'/>
|
||||||
|
<target dev='xvda' bus='xen'/>
|
||||||
|
</disk>
|
||||||
<interface type='bridge'>
|
<interface type='bridge'>
|
||||||
<source bridge='xenbr0'/>
|
<source bridge='xenbr0'/>
|
||||||
<target dev='vif5.0'/>
|
<target dev='vif5.0'/>
|
||||||
<mac address='00:16:3e:1d:06:15'/>
|
<mac address='00:16:3e:1d:06:15'/>
|
||||||
<script path='vif-bridge'/>
|
<script path='vif-bridge'/>
|
||||||
</interface>
|
</interface>
|
||||||
<disk type='file' device='disk'>
|
|
||||||
<driver name='tap' type='aio'/>
|
|
||||||
<source file='/xen/rhel5.img'/>
|
|
||||||
<target dev='xvda' bus='xen'/>
|
|
||||||
</disk>
|
|
||||||
<input type='mouse' bus='xen'/>
|
<input type='mouse' bus='xen'/>
|
||||||
<graphics type='vnc' port='-1'/>
|
<graphics type='vnc' port='-1'/>
|
||||||
<console type='pty'>
|
<console type='pty'>
|
||||||
|
@ -20,11 +20,6 @@
|
|||||||
<clock offset='utc'/>
|
<clock offset='utc'/>
|
||||||
<devices>
|
<devices>
|
||||||
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
|
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
|
||||||
<interface type='bridge'>
|
|
||||||
<source bridge='xenbr0'/>
|
|
||||||
<target dev='vif6.0'/>
|
|
||||||
<mac address='00:16:3e:0a:7b:39'/>
|
|
||||||
</interface>
|
|
||||||
<disk type='block' device='disk'>
|
<disk type='block' device='disk'>
|
||||||
<driver name='phy'/>
|
<driver name='phy'/>
|
||||||
<source dev='/dev/sda8'/>
|
<source dev='/dev/sda8'/>
|
||||||
@ -34,6 +29,11 @@
|
|||||||
<target dev='hdc' bus='ide'/>
|
<target dev='hdc' bus='ide'/>
|
||||||
<readonly/>
|
<readonly/>
|
||||||
</disk>
|
</disk>
|
||||||
|
<interface type='bridge'>
|
||||||
|
<source bridge='xenbr0'/>
|
||||||
|
<target dev='vif6.0'/>
|
||||||
|
<mac address='00:16:3e:0a:7b:39'/>
|
||||||
|
</interface>
|
||||||
<input type='mouse' bus='ps2'/>
|
<input type='mouse' bus='ps2'/>
|
||||||
<graphics type='vnc' port='-1'/>
|
<graphics type='vnc' port='-1'/>
|
||||||
<serial type='pty'>
|
<serial type='pty'>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user