libvirt.h 7.7 KB
Newer Older
1
/*
2 3 4
 * libvirt.h:
 * Summary: core interfaces for the libvirt library
 * Description: Provides the interfaces of the libvirt library to handle
5
 *              Xen domains from a process running in domain 0
6
 *
7
 * Copy:  Copyright (C) 2005,2006 Red Hat, Inc.
8 9 10
 *
 * See COPYING.LIB for the License of this software
 *
11
 * Author: Daniel Veillard <veillard@redhat.com>
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
 */

#ifndef __VIR_VIRLIB_H__
#define __VIR_VIRLIB_H__

#ifdef __cplusplus
extern "C" {
#endif

/**
 * virConnect:
 *
 * a virConnect is a private structure representing a connection to
 * the Xen Hypervisor.
 */
typedef struct _virConnect virConnect;

/**
 * virConnectPtr:
 *
 * a virConnectPtr is pointer to a virConnect private structure, this is the
 * type used to reference a connection to the Xen Hypervisor in the API.
 */
typedef virConnect *virConnectPtr;

/**
 * virDomain:
 *
 * a virDomain is a private structure representing a Xen domain.
 */
typedef struct _virDomain virDomain;

/**
 * virDomainPtr:
 *
 * a virDomainPtr is pointer to a virDomain private structure, this is the
 * type used to reference a Xen domain in the API.
 */
typedef virDomain *virDomainPtr;

52 53 54 55 56 57 58 59 60 61 62
/**
 * virDomainState:
 *
 * A domain may be in different states at a given point in time
 */
typedef enum {
     VIR_DOMAIN_NOSTATE	= 0, /* no state */
     VIR_DOMAIN_RUNNING	= 1, /* the domain is running */
     VIR_DOMAIN_BLOCKED	= 2, /* the domain is blocked on resource */
     VIR_DOMAIN_PAUSED	= 3, /* the domain is paused by user */
     VIR_DOMAIN_SHUTDOWN= 4, /* the domain is being shut down */
63
     VIR_DOMAIN_SHUTOFF	= 5, /* the domain is shut off */
64
     VIR_DOMAIN_CRASHED = 6  /* the domain is crashed */
65 66
} virDomainState;

67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
/**
 * virDomainRestart:
 *
 * Flags that determine the action to take on a shutdown or crash of a domain
 */
typedef enum {
     VIR_DOMAIN_DESTROY	= 1, /* destroy the domain */
     VIR_DOMAIN_RESTART	= 2, /* restart the domain */
     VIR_DOMAIN_PRESERVE= 3, /* keep as is, need manual destroy, for debug */
     VIR_DOMAIN_RENAME_RESTART= 4/* restart under an new unique name */
} virDomainRestart;

/**
 * virDeviceMode:
 *
 * Flags that determine permission to expose a device to the guest
 */
typedef enum {
     VIR_DEVICE_DEFAULT	= 0, /* Default mode */
     VIR_DEVICE_RO	= 1, /* Access read-only */
     VIR_DEVICE_RW	= 2, /* Access read-write */
     VIR_DEVICE_RW_FORCE= 3  /* Forced read-write even if already used */
} virDeviceMode;

91 92 93
/**
 * virDomainInfoPtr:
 *
94 95
 * a virDomainInfo is a structure filled by virDomainGetInfo() and extracting
 * runtime informations for a given active Domain
96 97 98 99 100
 */

typedef struct _virDomainInfo virDomainInfo;

struct _virDomainInfo {
101
    unsigned char state;	/* the running state, one of virDomainFlags */
102 103
    unsigned long maxMem;	/* the maximum memory in KBytes allowed */
    unsigned long memory;	/* the memory in KBytes used by the domain */
104
    unsigned short nrVirtCpu;	/* the number of virtual CPUs for the domain */
105
    unsigned long long cpuTime;	/* the CPU time used in nanoseconds */
106 107 108 109 110 111 112 113 114 115
};

/**
 * virDomainInfoPtr:
 *
 * a virDomainInfoPtr is a pointer to a virDomainInfo structure.
 */

typedef virDomainInfo *virDomainInfoPtr;

116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
/**
 * virDomainKernel:
 *
 * a virDomainImage is the set of kernel related informations associated
 * to a domain
 */

typedef struct _virDomainKernel virDomainKernel;

struct _virDomainKernel {
    const char *kernel;		/* filename pointing to the kernel image */
    const char *ramdisk;	/* an optional init ramdisk */
    const char *root;		/* an optional root block device */
    const char *extra;		/* optional kernel command line parameters */
};

/**
 * virDomainKernelPtr:
 *
 * a virDomainKernelPtr is a pointer to a virDomainKernel structure.
 */

typedef virDomainKernel *virDomainKernelPtr;

140
/**
141
 * virDomainCreateFlags:
142 143 144 145 146 147
 *
 * Flags OR'ed together to provide specific behaviour when creating a
 * Domain.
 */
typedef enum {
     VIR_DOMAIN_NONE = 0
148
} virDomainCreateFlags;
149

150 151 152 153 154 155 156 157 158 159 160
/**
 * virNodeInfoPtr:
 *
 * a virNodeInfo is a structure filled by virNodeGetInfo() and providing
 * the informations for the Node. 
 */

typedef struct _virNodeInfo virNodeInfo;

struct _virNodeInfo {
    char model[32];	/* string indicating the CPU model */
161
    unsigned long memory;/* memory size in kilobytes */
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
    unsigned int cpus;	/* the number of active CPUs */
    unsigned int mhz;	/* expected CPU frequency */
    unsigned int nodes;	/* the number of NUMA cell, 1 for uniform mem access */
    unsigned int sockets;/* number of CPU socket per node */
    unsigned int cores;	/* number of core per socket */
    unsigned int threads;/* number of threads per core */
};

/**
 * virNodeInfoPtr:
 *
 * a virNodeInfoPtr is a pointer to a virNodeInfo structure.
 */

typedef virNodeInfo *virNodeInfoPtr;

178 179 180 181 182 183 184 185 186
/* library versionning */

/**
 * LIBVIR_VERSION_NUMBER:
 *
 * Macro providing the version of the library as 
 * version * 1,000,000 + minor * 1000 + micro
 */

187
#define LIBVIR_VERSION_NUMBER 1003
188 189 190 191 192

int			virGetVersion		(unsigned long *libVer,
						 const char *type,
						 unsigned long *typeVer);

193 194 195
/*
 * Connection and disconnections to the Hypervisor
 */
196 197
int			virInitialize		(void);

198 199 200
virConnectPtr		virConnectOpen		(const char *name);
virConnectPtr		virConnectOpenReadOnly	(const char *name);
int			virConnectClose		(virConnectPtr conn);
201
const char *		virConnectGetType	(virConnectPtr conn);
202 203
int			virConnectGetVersion	(virConnectPtr conn,
						 unsigned long *hvVer);
204 205
int			virNodeGetInfo		(virConnectPtr conn,
						 virNodeInfoPtr info);
206 207 208 209 210 211 212 213

/*
 * Gather list of running domains
 */
int			virConnectListDomains	(virConnectPtr conn,
						 int *ids,
						 int maxids);

K
 
Karel Zak 已提交
214 215 216 217 218 219
/*
 * Number of domains
 */
int			virConnectNumOfDomains	(virConnectPtr conn);


220 221 222 223
/*
 * Domain creation and destruction
 */
virDomainPtr		virDomainCreateLinux	(virConnectPtr conn,
224
						 const char *xmlDesc,
225 226 227 228 229
						 unsigned int flags);
virDomainPtr		virDomainLookupByName	(virConnectPtr conn,
						 const char *name);
virDomainPtr		virDomainLookupByID	(virConnectPtr conn,
						 int id);
230 231
virDomainPtr		virDomainLookupByUUID	(virConnectPtr conn,
						 const unsigned char *uuid);
K
Karel Zak 已提交
232 233 234
virDomainPtr		virDomainLookupByUUIDString	(virConnectPtr conn,
							const char *uuid);

235
int			virDomainShutdown	(virDomainPtr domain);
236 237
int			virDomainReboot		(virDomainPtr domain,
						 unsigned int flags);
238
int			virDomainDestroy	(virDomainPtr domain);
239
int			virDomainFree		(virDomainPtr domain);
240 241 242 243 244 245 246

/*
 * Domain suspend/resume
 */
int			virDomainSuspend	(virDomainPtr domain);
int			virDomainResume		(virDomainPtr domain);

247 248 249 250 251
/*
 * Domain save/restore
 */
int			virDomainSave		(virDomainPtr domain,
						 const char *to);
252
int			virDomainRestore	(virConnectPtr conn,
253 254
						 const char *from);

255 256 257 258 259 260
/*
 * Domain runtime informations
 */
int			virDomainGetInfo	(virDomainPtr domain,
						 virDomainInfoPtr info);
						 
261 262 263 264 265
/*
 * Dynamic control of domains
 */
const char *		virDomainGetName	(virDomainPtr domain);
unsigned int		virDomainGetID		(virDomainPtr domain);
266 267
int			virDomainGetUUID	(virDomainPtr domain,
						 unsigned char *uuid);
K
Karel Zak 已提交
268 269
int			virDomainGetUUIDString	(virDomainPtr domain, 
						char *buf);
270
char *			virDomainGetOSType	(virDomainPtr domain);
271 272 273
unsigned long		virDomainGetMaxMemory	(virDomainPtr domain);
int			virDomainSetMaxMemory	(virDomainPtr domain,
						 unsigned long memory);
274 275
int			virDomainSetMemory	(virDomainPtr domain,
						 unsigned long memory);
276 277 278
/*
 * XML domain description
 */
D
Daniel Veillard 已提交
279 280
char *			virDomainGetXMLDesc	(virDomainPtr domain,
						 int flags);
281

282 283 284 285 286 287 288 289 290 291 292
/*
 * defined but not running domains
 */
virDomainPtr		virDomainDefineXML	(virConnectPtr conn,
						 const char *xml);
int			virDomainUndefine	(virDomainPtr domain);
int			virConnectListDefinedDomains(virConnectPtr conn,
						 const char **names,
						 int maxnames);
int			virDomainCreate		(virDomainPtr domain);

293 294 295 296 297
#ifdef __cplusplus
}
#endif

#endif /* __VIR_VIRLIB_H__ */