2
* libvirt.c: Main interfaces for the libvirt library to handle virtualization
3
* domains from a process running in domain 0
5
* Copyright (C) 2005-2006, 2008-2011 Red Hat, Inc.
7
* See COPYING.LIB for the License of this software
9
* Daniel Veillard <veillard@redhat.com>
17
#include <sys/types.h>
25
#include <libxml/parser.h>
26
#include <libxml/xpath.h>
27
#include <libxml/uri.h>
30
#ifdef HAVE_WINSOCK2_H
31
# include <winsock2.h>
34
#include "virterror_internal.h"
36
#include "datatypes.h"
42
#include "configmake.h"
44
#ifndef WITH_DRIVER_MODULES
46
# include "test/test_driver.h"
49
# include "xen/xen_driver.h"
52
# include "remote/remote_driver.h"
55
# include "openvz/openvz_driver.h"
58
# include "vmware/vmware_driver.h"
61
# include "phyp/phyp_driver.h"
64
# include "vbox/vbox_driver.h"
67
# include "esx/esx_driver.h"
70
# include "xenapi/xenapi_driver.h"
74
#define VIR_FROM_THIS VIR_FROM_NONE
78
* - use lock to protect against concurrent accesses ?
79
* - use reference counting to guarantee coherent pointer state ?
82
#define MAX_DRIVERS 20
84
static virDriverPtr virDriverTab[MAX_DRIVERS];
85
static int virDriverTabCount = 0;
86
static virNetworkDriverPtr virNetworkDriverTab[MAX_DRIVERS];
87
static int virNetworkDriverTabCount = 0;
88
static virInterfaceDriverPtr virInterfaceDriverTab[MAX_DRIVERS];
89
static int virInterfaceDriverTabCount = 0;
90
static virStorageDriverPtr virStorageDriverTab[MAX_DRIVERS];
91
static int virStorageDriverTabCount = 0;
92
static virDeviceMonitorPtr virDeviceMonitorTab[MAX_DRIVERS];
93
static int virDeviceMonitorTabCount = 0;
94
static virSecretDriverPtr virSecretDriverTab[MAX_DRIVERS];
95
static int virSecretDriverTabCount = 0;
96
static virNWFilterDriverPtr virNWFilterDriverTab[MAX_DRIVERS];
97
static int virNWFilterDriverTabCount = 0;
99
static virStateDriverPtr virStateDriverTab[MAX_DRIVERS];
100
static int virStateDriverTabCount = 0;
102
static int initialized = 0;
104
#if defined(POLKIT_AUTH)
105
static int virConnectAuthGainPolkit(const char *privilege) {
106
const char *const args[] = {
107
POLKIT_AUTH, "--obtain", privilege, NULL
109
int childpid, status, ret;
111
/* Root has all rights */
115
if ((childpid = fork()) < 0)
119
execvp(args[0], (char **)args);
123
while ((ret = waitpid(childpid, &status, 0) == -1) && errno == EINTR);
128
if (!WIFEXITED(status) ||
129
(WEXITSTATUS(status) != 0 && WEXITSTATUS(status) != 1)) {
137
static int virConnectAuthCallbackDefault(virConnectCredentialPtr cred,
139
void *cbdata ATTRIBUTE_UNUSED) {
142
for (i = 0 ; i < ncred ; i++) {
147
switch (cred[i].type) {
148
case VIR_CRED_EXTERNAL: {
149
if (STRNEQ(cred[i].challenge, "PolicyKit"))
152
#if defined(POLKIT_AUTH)
153
if (virConnectAuthGainPolkit(cred[i].prompt) < 0)
157
* Ignore & carry on. Although we can't auth
158
* directly, the user may have authenticated
159
* themselves already outside context of libvirt
165
case VIR_CRED_USERNAME:
166
case VIR_CRED_AUTHNAME:
167
case VIR_CRED_ECHOPROMPT:
169
if (printf("%s: ", cred[i].prompt) < 0)
171
if (fflush(stdout) != 0)
174
if (!fgets(buf, sizeof(buf), stdin)) {
175
if (feof(stdin)) { /* Treat EOF as "" */
182
if (len != 0 && buf[len-1] == '\n')
186
case VIR_CRED_PASSPHRASE:
187
case VIR_CRED_NOECHOPROMPT:
188
if (printf("%s: ", cred[i].prompt) < 0)
190
if (fflush(stdout) != 0)
193
bufptr = getpass("");
202
if (cred[i].type != VIR_CRED_EXTERNAL) {
203
if (STREQ(bufptr, "") && cred[i].defresult)
204
cred[i].result = strdup(cred[i].defresult);
206
cred[i].result = strdup(bufptr);
209
cred[i].resultlen = strlen(cred[i].result);
216
/* Don't typically want VIR_CRED_USERNAME. It enables you to authenticate
217
* as one user, and act as another. It just results in annoying
218
* prompts for the username twice & is very rarely what you want
220
static int virConnectCredTypeDefault[] = {
225
VIR_CRED_NOECHOPROMPT,
229
static virConnectAuth virConnectAuthDefault = {
230
virConnectCredTypeDefault,
231
sizeof(virConnectCredTypeDefault)/sizeof(int),
232
virConnectAuthCallbackDefault,
237
* virConnectAuthPtrDefault
239
* A default implementation of the authentication callbacks. This
240
* implementation is suitable for command line based tools. It will
241
* prompt for username, passwords, realm and one time keys as needed.
242
* It will print on STDOUT, and read from STDIN. If this is not
243
* suitable for the application's needs an alternative implementation
244
* should be provided.
246
virConnectAuthPtr virConnectAuthPtrDefault = &virConnectAuthDefault;
252
WORD winsock_version, err;
253
WSADATA winsock_data;
255
/* http://msdn2.microsoft.com/en-us/library/ms742213.aspx */
256
winsock_version = MAKEWORD (2, 2);
257
err = WSAStartup (winsock_version, &winsock_data);
258
return err == 0 ? 0 : -1;
262
static int virTLSMutexInit (void **priv)
264
virMutexPtr lock = NULL;
266
if (VIR_ALLOC(lock) < 0)
269
if (virMutexInit(lock) < 0) {
278
static int virTLSMutexDestroy(void **priv)
280
virMutexPtr lock = *priv;
281
virMutexDestroy(lock);
286
static int virTLSMutexLock(void **priv)
288
virMutexPtr lock = *priv;
293
static int virTLSMutexUnlock(void **priv)
295
virMutexPtr lock = *priv;
296
virMutexUnlock(lock);
300
static struct gcry_thread_cbs virTLSThreadImpl = {
301
/* GCRY_THREAD_OPTION_VERSION was added in gcrypt 1.4.2 */
302
#ifdef GCRY_THREAD_OPTION_VERSION
303
(GCRY_THREAD_OPTION_PTHREAD | (GCRY_THREAD_OPTION_VERSION << 8)),
305
GCRY_THREAD_OPTION_PTHREAD,
312
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
315
/* Helper macro to print debugging information about a domain DOM,
316
* followed by a literal string FMT and any other printf arguments.
318
#define VIR_DOMAIN_DEBUG(dom, fmt, ...) \
319
char _uuidstr[VIR_UUID_STRING_BUFLEN]; \
320
const char *_domname = NULL; \
322
if (!VIR_IS_DOMAIN(dom)) { \
323
memset(_uuidstr, 0, sizeof(_uuidstr)); \
325
virUUIDFormat((dom)->uuid, _uuidstr); \
326
_domname = (dom)->name; \
329
DEBUG("dom=%p, (VM: name=%s, uuid=%s), " fmt, \
330
dom, NULLSTR(_domname), _uuidstr, __VA_ARGS__)
332
#define VIR_DOMAIN_DEBUG0(dom) VIR_DOMAIN_DEBUG(dom, "%s", "")
337
* Initialize the library. It's better to call this routine at startup
338
* in multithreaded applications to avoid potential race when initializing
341
* Returns 0 in case of success, -1 in case of error
351
if (virThreadInitialize() < 0 ||
352
virErrorInitialize() < 0 ||
353
virRandomInitialize(time(NULL) ^ getpid()))
356
gcry_control(GCRYCTL_SET_THREAD_CBS, &virTLSThreadImpl);
357
gcry_check_version(NULL);
361
DEBUG0("register drivers");
364
if (winsock_init () == -1) return -1;
367
if (!bindtextdomain(PACKAGE, LOCALEDIR))
371
* Note that the order is important: the first ones have a higher
372
* priority when calling virConnectOpen.
374
#ifdef WITH_DRIVER_MODULES
375
/* We don't care if any of these fail, because the whole point
376
* is to allow users to only install modules they want to use.
377
* If they try to open a connection for a module that
378
* is not loaded they'll get a suitable error at that point
381
virDriverLoadModule("test");
384
virDriverLoadModule("xen");
387
virDriverLoadModule("openvz");
390
virDriverLoadModule("vmware");
393
virDriverLoadModule("vbox");
396
virDriverLoadModule("esx");
399
virDriverLoadModule("xenapi");
402
virDriverLoadModule("remote");
406
if (testRegister() == -1) return -1;
409
if (xenRegister () == -1) return -1;
412
if (openvzRegister() == -1) return -1;
415
if (vmwareRegister() == -1) return -1;
418
if (phypRegister() == -1) return -1;
421
if (vboxRegister() == -1) return -1;
424
if (esxRegister() == -1) return -1;
427
if (xenapiRegister() == -1) return -1;
430
if (remoteRegister () == -1) return -1;
439
DllMain (HINSTANCE instance, DWORD reason, LPVOID ignore);
442
DllMain (HINSTANCE instance ATTRIBUTE_UNUSED,
444
LPVOID ignore ATTRIBUTE_UNUSED)
447
case DLL_PROCESS_ATTACH:
451
case DLL_THREAD_ATTACH:
452
/* Nothing todo in libvirt yet */
455
case DLL_THREAD_DETACH:
456
/* Release per-thread local data */
460
case DLL_PROCESS_DETACH:
461
/* Don't bother releasing per-thread data
462
since (hopefully) windows cleans up
463
everything on process exit */
471
#define virLibConnError(code, ...) \
472
virReportErrorHelper(NULL, VIR_FROM_NONE, code, __FILE__, \
473
__FUNCTION__, __LINE__, __VA_ARGS__)
474
#define virLibDomainError(code, ...) \
475
virReportErrorHelper(NULL, VIR_FROM_DOM, code, __FILE__, \
476
__FUNCTION__, __LINE__, __VA_ARGS__)
477
#define virLibNetworkError(code, ...) \
478
virReportErrorHelper(NULL, VIR_FROM_NETWORK, code, __FILE__, \
479
__FUNCTION__, __LINE__, __VA_ARGS__)
480
#define virLibStoragePoolError(code, ...) \
481
virReportErrorHelper(NULL, VIR_FROM_STORAGE, code, __FILE__, \
482
__FUNCTION__, __LINE__, __VA_ARGS__)
483
#define virLibStorageVolError(code, ...) \
484
virReportErrorHelper(NULL, VIR_FROM_STORAGE, code, __FILE__, \
485
__FUNCTION__, __LINE__, __VA_ARGS__)
486
#define virLibInterfaceError(code, ...) \
487
virReportErrorHelper(NULL, VIR_FROM_INTERFACE, code, __FILE__,\
488
__FUNCTION__, __LINE__, __VA_ARGS__)
489
#define virLibNodeDeviceError(code, ...) \
490
virReportErrorHelper(NULL, VIR_FROM_NODEDEV, code, __FILE__, \
491
__FUNCTION__, __LINE__, __VA_ARGS__)
492
#define virLibSecretError(code, ...) \
493
virReportErrorHelper(NULL, VIR_FROM_SECRET, code, __FILE__, \
494
__FUNCTION__, __LINE__, __VA_ARGS__)
495
#define virLibStreamError(code, ...) \
496
virReportErrorHelper(NULL, VIR_FROM_STREAMS, code, __FILE__, \
497
__FUNCTION__, __LINE__, __VA_ARGS__)
498
#define virLibNWFilterError(code, ...) \
499
virReportErrorHelper(NULL, VIR_FROM_NWFILTER, code, __FILE__, \
500
__FUNCTION__, __LINE__, __VA_ARGS__)
501
#define virLibDomainSnapshotError(code, ...) \
502
virReportErrorHelper(NULL, VIR_FROM_DOMAIN_SNAPSHOT, code, __FILE__, \
503
__FUNCTION__, __LINE__, __VA_ARGS__)
507
* virRegisterNetworkDriver:
508
* @driver: pointer to a network driver block
510
* Register a network virtualization driver
512
* Returns the driver priority or -1 in case of error.
515
virRegisterNetworkDriver(virNetworkDriverPtr driver)
517
if (virInitialize() < 0)
520
if (driver == NULL) {
521
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
525
if (virNetworkDriverTabCount >= MAX_DRIVERS) {
526
virLibConnError(VIR_ERR_INTERNAL_ERROR,
527
_("Too many drivers, cannot register %s"),
532
DEBUG ("registering %s as network driver %d",
533
driver->name, virNetworkDriverTabCount);
535
virNetworkDriverTab[virNetworkDriverTabCount] = driver;
536
return virNetworkDriverTabCount++;
540
* virRegisterInterfaceDriver:
541
* @driver: pointer to an interface driver block
543
* Register an interface virtualization driver
545
* Returns the driver priority or -1 in case of error.
548
virRegisterInterfaceDriver(virInterfaceDriverPtr driver)
550
if (virInitialize() < 0)
553
if (driver == NULL) {
554
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
558
if (virInterfaceDriverTabCount >= MAX_DRIVERS) {
559
virLibConnError(VIR_ERR_INTERNAL_ERROR,
560
_("Too many drivers, cannot register %s"),
565
DEBUG ("registering %s as interface driver %d",
566
driver->name, virInterfaceDriverTabCount);
568
virInterfaceDriverTab[virInterfaceDriverTabCount] = driver;
569
return virInterfaceDriverTabCount++;
573
* virRegisterStorageDriver:
574
* @driver: pointer to a storage driver block
576
* Register a storage virtualization driver
578
* Returns the driver priority or -1 in case of error.
581
virRegisterStorageDriver(virStorageDriverPtr driver)
583
if (virInitialize() < 0)
586
if (driver == NULL) {
587
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
591
if (virStorageDriverTabCount >= MAX_DRIVERS) {
592
virLibConnError(VIR_ERR_INTERNAL_ERROR,
593
_("Too many drivers, cannot register %s"),
598
DEBUG ("registering %s as storage driver %d",
599
driver->name, virStorageDriverTabCount);
601
virStorageDriverTab[virStorageDriverTabCount] = driver;
602
return virStorageDriverTabCount++;
606
* virRegisterDeviceMonitor:
607
* @driver: pointer to a device monitor block
609
* Register a device monitor
611
* Returns the driver priority or -1 in case of error.
614
virRegisterDeviceMonitor(virDeviceMonitorPtr driver)
616
if (virInitialize() < 0)
619
if (driver == NULL) {
620
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
624
if (virDeviceMonitorTabCount >= MAX_DRIVERS) {
625
virLibConnError(VIR_ERR_INTERNAL_ERROR,
626
_("Too many drivers, cannot register %s"),
631
DEBUG ("registering %s as device driver %d",
632
driver->name, virDeviceMonitorTabCount);
634
virDeviceMonitorTab[virDeviceMonitorTabCount] = driver;
635
return virDeviceMonitorTabCount++;
639
* virRegisterSecretDriver:
640
* @driver: pointer to a secret driver block
642
* Register a secret driver
644
* Returns the driver priority or -1 in case of error.
647
virRegisterSecretDriver(virSecretDriverPtr driver)
649
if (virInitialize() < 0)
652
if (driver == NULL) {
653
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
657
if (virSecretDriverTabCount >= MAX_DRIVERS) {
658
virLibConnError(VIR_ERR_INTERNAL_ERROR,
659
_("Too many drivers, cannot register %s"),
664
DEBUG ("registering %s as secret driver %d",
665
driver->name, virSecretDriverTabCount);
667
virSecretDriverTab[virSecretDriverTabCount] = driver;
668
return virSecretDriverTabCount++;
672
* virRegisterNWFilterDriver:
673
* @driver: pointer to a network filter driver block
675
* Register a network filter virtualization driver
677
* Returns the driver priority or -1 in case of error.
680
virRegisterNWFilterDriver(virNWFilterDriverPtr driver)
682
if (virInitialize() < 0)
685
if (driver == NULL) {
686
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
690
if (virNWFilterDriverTabCount >= MAX_DRIVERS) {
691
virLibConnError(VIR_ERR_INTERNAL_ERROR,
692
_("Too many drivers, cannot register %s"),
697
DEBUG ("registering %s as network filter driver %d",
698
driver->name, virNWFilterDriverTabCount);
700
virNWFilterDriverTab[virNWFilterDriverTabCount] = driver;
701
return virNWFilterDriverTabCount++;
707
* @driver: pointer to a driver block
709
* Register a virtualization driver
711
* Returns the driver priority or -1 in case of error.
714
virRegisterDriver(virDriverPtr driver)
716
DEBUG("driver=%p name=%s", driver, driver ? NULLSTR(driver->name) : "(null)");
718
if (virInitialize() < 0)
721
if (driver == NULL) {
722
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
726
if (virDriverTabCount >= MAX_DRIVERS) {
727
virLibConnError(VIR_ERR_INTERNAL_ERROR,
728
_("Too many drivers, cannot register %s"),
733
if (driver->no < 0) {
734
virLibConnError(VIR_ERR_INVALID_ARG,
735
_("Tried to register an internal Xen driver"));
739
DEBUG ("registering %s as driver %d",
740
driver->name, virDriverTabCount);
742
virDriverTab[virDriverTabCount] = driver;
743
return virDriverTabCount++;
748
* virRegisterStateDriver:
749
* @driver: pointer to a driver block
751
* Register a virtualization driver
753
* Returns the driver priority or -1 in case of error.
756
virRegisterStateDriver(virStateDriverPtr driver)
758
if (virInitialize() < 0)
761
if (driver == NULL) {
762
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
766
if (virStateDriverTabCount >= MAX_DRIVERS) {
767
virLibConnError(VIR_ERR_INTERNAL_ERROR,
768
_("Too many drivers, cannot register %s"),
773
virStateDriverTab[virStateDriverTabCount] = driver;
774
return virStateDriverTabCount++;
778
* virStateInitialize:
779
* @privileged: set to 1 if running with root privilege, 0 otherwise
781
* Initialize all virtualization drivers.
783
* Returns 0 if all succeed, -1 upon any failure.
785
int virStateInitialize(int privileged) {
788
if (virInitialize() < 0)
791
for (i = 0 ; i < virStateDriverTabCount ; i++) {
792
if (virStateDriverTab[i]->initialize &&
793
virStateDriverTab[i]->initialize(privileged) < 0) {
794
VIR_ERROR(_("Initialization of %s state driver failed"),
795
virStateDriverTab[i]->name);
805
* Run each virtualization driver's cleanup method.
807
* Returns 0 if all succeed, -1 upon any failure.
809
int virStateCleanup(void) {
812
for (i = 0 ; i < virStateDriverTabCount ; i++) {
813
if (virStateDriverTab[i]->cleanup &&
814
virStateDriverTab[i]->cleanup() < 0)
823
* Run each virtualization driver's reload method.
825
* Returns 0 if all succeed, -1 upon any failure.
827
int virStateReload(void) {
830
for (i = 0 ; i < virStateDriverTabCount ; i++) {
831
if (virStateDriverTab[i]->reload &&
832
virStateDriverTab[i]->reload() < 0)
841
* Run each virtualization driver's "active" method.
843
* Returns 0 if none are active, 1 if at least one is.
845
int virStateActive(void) {
848
for (i = 0 ; i < virStateDriverTabCount ; i++) {
849
if (virStateDriverTab[i]->active &&
850
virStateDriverTab[i]->active())
862
* @libVer: return value for the library version (OUT)
863
* @type: the type of connection/driver looked at
864
* @typeVer: return value for the version of the hypervisor (OUT)
866
* Provides two information back, @libVer is the version of the library
867
* while @typeVer will be the version of the hypervisor type @type against
868
* which the library was compiled. If @type is NULL, "Xen" is assumed, if
869
* @type is unknown or not available, an error code will be returned and
870
* @typeVer will be 0.
872
* Returns -1 in case of failure, 0 otherwise, and values for @libVer and
873
* @typeVer have the format major * 1,000,000 + minor * 1,000 + release.
876
virGetVersion(unsigned long *libVer, const char *type,
877
unsigned long *typeVer)
879
DEBUG("libVir=%p, type=%s, typeVer=%p", libVer, type, typeVer);
882
if (virInitialize() < 0)
887
*libVer = LIBVIR_VERSION_NUMBER;
889
if (typeVer != NULL) {
893
/* FIXME: Add _proper_ type version handling for loadable driver modules... */
894
#ifdef WITH_DRIVER_MODULES
895
*typeVer = LIBVIR_VERSION_NUMBER;
900
if (STRCASEEQ(type, "Xen"))
901
*typeVer = xenUnifiedVersion();
904
if (STRCASEEQ(type, "Test"))
905
*typeVer = LIBVIR_VERSION_NUMBER;
908
if (STRCASEEQ(type, "QEMU"))
909
*typeVer = LIBVIR_VERSION_NUMBER;
912
if (STRCASEEQ(type, "LXC"))
913
*typeVer = LIBVIR_VERSION_NUMBER;
916
if (STRCASEEQ(type, "phyp"))
917
*typeVer = LIBVIR_VERSION_NUMBER;
920
if (STRCASEEQ(type, "OpenVZ"))
921
*typeVer = LIBVIR_VERSION_NUMBER;
924
if (STRCASEEQ(type, "VMware"))
925
*typeVer = LIBVIR_VERSION_NUMBER;
928
if (STRCASEEQ(type, "VBox"))
929
*typeVer = LIBVIR_VERSION_NUMBER;
932
if (STRCASEEQ(type, "UML"))
933
*typeVer = LIBVIR_VERSION_NUMBER;
936
if (STRCASEEQ(type, "ONE"))
937
*typeVer = LIBVIR_VERSION_NUMBER;
940
if (STRCASEEQ(type, "ESX"))
941
*typeVer = LIBVIR_VERSION_NUMBER;
944
if (STRCASEEQ(type, "XenAPI"))
945
*typeVer = LIBVIR_VERSION_NUMBER;
948
if (STRCASEEQ(type, "Remote"))
949
*typeVer = remoteVersion();
952
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
955
#endif /* WITH_DRIVER_MODULES */
960
virDispatchError(NULL);
965
do_open (const char *name,
966
virConnectAuthPtr auth,
974
ret = virGetConnect();
979
* If no URI is passed, then check for an environment string if not
980
* available probe the compiled in drivers to find a default hypervisor
983
if (!name || name[0] == '\0') {
984
char *defname = getenv("LIBVIRT_DEFAULT_URI");
985
if (defname && *defname) {
986
DEBUG("Using LIBVIRT_DEFAULT_URI %s", defname);
994
/* Convert xen -> xen:/// for back compat */
995
if (STRCASEEQ(name, "xen"))
998
/* Convert xen:// -> xen:/// because xmlParseURI cannot parse the
999
* former. This allows URIs such as xen://localhost to work.
1001
if (STREQ (name, "xen://"))
1004
ret->uri = xmlParseURI (name);
1006
virLibConnError(VIR_ERR_INVALID_ARG,
1007
_("could not parse connection URI"));
1011
DEBUG("name \"%s\" to URI components:\n"
1020
NULLSTR(ret->uri->scheme), NULLSTR(ret->uri->opaque),
1021
NULLSTR(ret->uri->authority), NULLSTR(ret->uri->server),
1022
NULLSTR(ret->uri->user), ret->uri->port,
1023
NULLSTR(ret->uri->path));
1025
DEBUG0("no name, allowing driver auto-select");
1028
/* Cleansing flags */
1029
ret->flags = flags & VIR_CONNECT_RO;
1031
for (i = 0; i < virDriverTabCount; i++) {
1032
/* We're going to probe the remote driver next. So we have already
1033
* probed all other client-side-only driver before, but none of them
1035
* If the scheme corresponds to a known but disabled client-side-only
1036
* driver then report a useful error, instead of a cryptic one about
1037
* not being able to connect to libvirtd or not being able to find
1039
if (virDriverTab[i]->no == VIR_DRV_REMOTE &&
1040
ret->uri != NULL && ret->uri->scheme != NULL &&
1043
STRCASEEQ(ret->uri->scheme, "phyp") ||
1046
STRCASEEQ(ret->uri->scheme, "vpx") ||
1047
STRCASEEQ(ret->uri->scheme, "esx") ||
1048
STRCASEEQ(ret->uri->scheme, "gsx") ||
1051
STRCASEEQ(ret->uri->scheme, "xenapi") ||
1054
virReportErrorHelper(NULL, VIR_FROM_NONE, VIR_ERR_INVALID_ARG,
1055
__FILE__, __FUNCTION__, __LINE__,
1056
_("libvirt was built without the '%s' driver"),
1061
DEBUG("trying driver %d (%s) ...",
1062
i, virDriverTab[i]->name);
1063
res = virDriverTab[i]->open (ret, auth, flags);
1064
DEBUG("driver %d %s returned %s",
1065
i, virDriverTab[i]->name,
1066
res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" :
1067
(res == VIR_DRV_OPEN_DECLINED ? "DECLINED" :
1068
(res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status")));
1069
if (res == VIR_DRV_OPEN_ERROR) goto failed;
1070
else if (res == VIR_DRV_OPEN_SUCCESS) {
1071
ret->driver = virDriverTab[i];
1077
/* If we reach here, then all drivers declined the connection. */
1078
virLibConnError(VIR_ERR_NO_CONNECT,
1079
_("No connection for URI %s"),
1084
for (i = 0; i < virNetworkDriverTabCount; i++) {
1085
res = virNetworkDriverTab[i]->open (ret, auth, flags);
1086
DEBUG("network driver %d %s returned %s",
1087
i, virNetworkDriverTab[i]->name,
1088
res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" :
1089
(res == VIR_DRV_OPEN_DECLINED ? "DECLINED" :
1090
(res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status")));
1091
if (res == VIR_DRV_OPEN_ERROR) {
1093
} else if (res == VIR_DRV_OPEN_SUCCESS) {
1094
ret->networkDriver = virNetworkDriverTab[i];
1099
for (i = 0; i < virInterfaceDriverTabCount; i++) {
1100
res = virInterfaceDriverTab[i]->open (ret, auth, flags);
1101
DEBUG("interface driver %d %s returned %s",
1102
i, virInterfaceDriverTab[i]->name,
1103
res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" :
1104
(res == VIR_DRV_OPEN_DECLINED ? "DECLINED" :
1105
(res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status")));
1106
if (res == VIR_DRV_OPEN_ERROR) {
1108
} else if (res == VIR_DRV_OPEN_SUCCESS) {
1109
ret->interfaceDriver = virInterfaceDriverTab[i];
1114
/* Secondary driver for storage. Optional */
1115
for (i = 0; i < virStorageDriverTabCount; i++) {
1116
res = virStorageDriverTab[i]->open (ret, auth, flags);
1117
DEBUG("storage driver %d %s returned %s",
1118
i, virStorageDriverTab[i]->name,
1119
res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" :
1120
(res == VIR_DRV_OPEN_DECLINED ? "DECLINED" :
1121
(res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status")));
1122
if (res == VIR_DRV_OPEN_ERROR) {
1124
} else if (res == VIR_DRV_OPEN_SUCCESS) {
1125
ret->storageDriver = virStorageDriverTab[i];
1130
/* Node driver (optional) */
1131
for (i = 0; i < virDeviceMonitorTabCount; i++) {
1132
res = virDeviceMonitorTab[i]->open (ret, auth, flags);
1133
DEBUG("node driver %d %s returned %s",
1134
i, virDeviceMonitorTab[i]->name,
1135
res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" :
1136
(res == VIR_DRV_OPEN_DECLINED ? "DECLINED" :
1137
(res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status")));
1138
if (res == VIR_DRV_OPEN_ERROR) {
1140
} else if (res == VIR_DRV_OPEN_SUCCESS) {
1141
ret->deviceMonitor = virDeviceMonitorTab[i];
1146
/* Secret manipulation driver. Optional */
1147
for (i = 0; i < virSecretDriverTabCount; i++) {
1148
res = virSecretDriverTab[i]->open (ret, auth, flags);
1149
DEBUG("secret driver %d %s returned %s",
1150
i, virSecretDriverTab[i]->name,
1151
res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" :
1152
(res == VIR_DRV_OPEN_DECLINED ? "DECLINED" :
1153
(res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status")));
1154
if (res == VIR_DRV_OPEN_ERROR) {
1156
} else if (res == VIR_DRV_OPEN_SUCCESS) {
1157
ret->secretDriver = virSecretDriverTab[i];
1162
/* Network filter driver. Optional */
1163
for (i = 0; i < virNWFilterDriverTabCount; i++) {
1164
res = virNWFilterDriverTab[i]->open (ret, auth, flags);
1165
DEBUG("nwfilter driver %d %s returned %s",
1166
i, virNWFilterDriverTab[i]->name,
1167
res == VIR_DRV_OPEN_SUCCESS ? "SUCCESS" :
1168
(res == VIR_DRV_OPEN_DECLINED ? "DECLINED" :
1169
(res == VIR_DRV_OPEN_ERROR ? "ERROR" : "unknown status")));
1170
if (res == VIR_DRV_OPEN_ERROR) {
1172
} else if (res == VIR_DRV_OPEN_SUCCESS) {
1173
ret->nwfilterDriver = virNWFilterDriverTab[i];
1181
virUnrefConnect(ret);
1188
* @name: URI of the hypervisor
1190
* This function should be called first to get a connection to the
1191
* Hypervisor and xen store
1193
* Returns a pointer to the hypervisor connection or NULL in case of error
1195
* If @name is NULL then probing will be done to determine a suitable
1196
* default driver to activate. This involves trying each hypervisor
1197
* in turn until one successfully opens. If the LIBVIRT_DEFAULT_URI
1198
* environment variable is set, then it will be used in preference
1199
* to probing for a driver.
1201
* If connecting to an unprivileged hypervisor driver which requires
1202
* the libvirtd daemon to be active, it will automatically be launched
1203
* if not already running. This can be prevented by setting the
1204
* environment variable LIBVIRT_AUTOSTART=0
1206
* URIs are documented at http://libvirt.org/uri.html
1209
virConnectOpen (const char *name)
1211
virConnectPtr ret = NULL;
1213
if (virInitialize() < 0)
1216
DEBUG("name=%s", name);
1217
ret = do_open (name, NULL, 0);
1223
virDispatchError(NULL);
1228
* virConnectOpenReadOnly:
1229
* @name: URI of the hypervisor
1231
* This function should be called first to get a restricted connection to the
1232
* library functionalities. The set of APIs usable are then restricted
1233
* on the available methods to control the domains.
1235
* See virConnectOpen for notes about environment variables which can
1236
* have an effect on opening drivers
1238
* Returns a pointer to the hypervisor connection or NULL in case of error
1240
* URIs are documented at http://libvirt.org/uri.html
1243
virConnectOpenReadOnly(const char *name)
1245
virConnectPtr ret = NULL;
1247
if (virInitialize() < 0)
1250
DEBUG("name=%s", name);
1251
ret = do_open (name, NULL, VIR_CONNECT_RO);
1257
virDispatchError(NULL);
1262
* virConnectOpenAuth:
1263
* @name: URI of the hypervisor
1264
* @auth: Authenticate callback parameters
1265
* @flags: Open flags
1267
* This function should be called first to get a connection to the
1268
* Hypervisor. If necessary, authentication will be performed fetching
1269
* credentials via the callback
1271
* See virConnectOpen for notes about environment variables which can
1272
* have an effect on opening drivers
1274
* Returns a pointer to the hypervisor connection or NULL in case of error
1276
* URIs are documented at http://libvirt.org/uri.html
1279
virConnectOpenAuth(const char *name,
1280
virConnectAuthPtr auth,
1283
virConnectPtr ret = NULL;
1285
if (virInitialize() < 0)
1288
DEBUG("name=%s, auth=%p, flags=%d", NULLSTR(name), auth, flags);
1289
ret = do_open (name, auth, flags);
1295
virDispatchError(NULL);
1301
* @conn: pointer to the hypervisor connection
1303
* This function closes the connection to the Hypervisor. This should
1304
* not be called if further interaction with the Hypervisor are needed
1305
* especially if there is running domain which need further monitoring by
1308
* Returns 0 in case of success or -1 in case of error.
1311
virConnectClose(virConnectPtr conn)
1314
DEBUG("conn=%p", conn);
1316
virResetLastError();
1318
if (!VIR_IS_CONNECT(conn)) {
1319
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1323
ret = virUnrefConnect(conn);
1329
virDispatchError(NULL);
1335
* @conn: the connection to hold a reference on
1337
* Increment the reference count on the connection. For each
1338
* additional call to this method, there shall be a corresponding
1339
* call to virConnectClose to release the reference count, once
1340
* the caller no longer needs the reference to this object.
1342
* This method is typically useful for applications where multiple
1343
* threads are using a connection, and it is required that the
1344
* connection remain open until all threads have finished using
1345
* it. ie, each new thread using a connection would increment
1346
* the reference count.
1348
* Returns 0 in case of success, -1 in case of failure
1351
virConnectRef(virConnectPtr conn)
1353
if ((!VIR_IS_CONNECT(conn))) {
1354
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
1355
virDispatchError(NULL);
1358
virMutexLock(&conn->lock);
1359
DEBUG("conn=%p refs=%d", conn, conn->refs);
1361
virMutexUnlock(&conn->lock);
1366
* Not for public use. This function is part of the internal
1367
* implementation of driver features in the remote case.
1370
virDrvSupportsFeature (virConnectPtr conn, int feature)
1373
DEBUG("conn=%p, feature=%d", conn, feature);
1375
virResetLastError();
1377
if (!VIR_IS_CONNECT(conn)) {
1378
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1379
virDispatchError(NULL);
1383
if (!conn->driver->supports_feature)
1386
ret = conn->driver->supports_feature(conn, feature);
1389
virDispatchError(conn);
1395
* virConnectGetType:
1396
* @conn: pointer to the hypervisor connection
1398
* Get the name of the Hypervisor software used.
1400
* Returns NULL in case of error, a static zero terminated string otherwise.
1403
* http://www.redhat.com/archives/libvir-list/2007-February/msg00096.html
1406
virConnectGetType(virConnectPtr conn)
1409
DEBUG("conn=%p", conn);
1411
virResetLastError();
1413
if (!VIR_IS_CONNECT(conn)) {
1414
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1415
virDispatchError(NULL);
1419
if (conn->driver->type) {
1420
ret = conn->driver->type (conn);
1421
if (ret) return ret;
1423
return conn->driver->name;
1427
* virConnectGetVersion:
1428
* @conn: pointer to the hypervisor connection
1429
* @hvVer: return value for the version of the running hypervisor (OUT)
1431
* Get the version level of the Hypervisor running. This may work only with
1432
* hypervisor call, i.e. with privileged access to the hypervisor, not
1433
* with a Read-Only connection.
1435
* Returns -1 in case of error, 0 otherwise. if the version can't be
1436
* extracted by lack of capacities returns 0 and @hvVer is 0, otherwise
1437
* @hvVer value is major * 1,000,000 + minor * 1,000 + release
1440
virConnectGetVersion(virConnectPtr conn, unsigned long *hvVer)
1442
DEBUG("conn=%p, hvVer=%p", conn, hvVer);
1444
virResetLastError();
1446
if (!VIR_IS_CONNECT(conn)) {
1447
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1448
virDispatchError(NULL);
1452
if (hvVer == NULL) {
1453
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
1457
if (conn->driver->version) {
1458
int ret = conn->driver->version (conn, hvVer);
1464
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
1467
virDispatchError(conn);
1472
* virConnectGetLibVersion:
1473
* @conn: pointer to the hypervisor connection
1474
* @libVer: returns the libvirt library version used on the connection (OUT)
1476
* Provides @libVer, which is the version of libvirt used by the
1477
* daemon running on the @conn host
1479
* Returns -1 in case of failure, 0 otherwise, and values for @libVer have
1480
* the format major * 1,000,000 + minor * 1,000 + release.
1483
virConnectGetLibVersion(virConnectPtr conn, unsigned long *libVer)
1486
DEBUG("conn=%p, libVir=%p", conn, libVer);
1488
virResetLastError();
1490
if (!VIR_IS_CONNECT(conn)) {
1491
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1492
virDispatchError(NULL);
1496
if (libVer == NULL) {
1497
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
1501
if (conn->driver->libvirtVersion) {
1502
ret = conn->driver->libvirtVersion(conn, libVer);
1508
*libVer = LIBVIR_VERSION_NUMBER;
1512
virDispatchError(conn);
1517
* virConnectGetHostname:
1518
* @conn: pointer to a hypervisor connection
1520
* This returns the system hostname on which the hypervisor is
1521
* running (the result of the gethostname system call). If
1522
* we are connected to a remote system, then this returns the
1523
* hostname of the remote system.
1525
* Returns the hostname which must be freed by the caller, or
1526
* NULL if there was an error.
1529
virConnectGetHostname (virConnectPtr conn)
1531
DEBUG("conn=%p", conn);
1533
virResetLastError();
1535
if (!VIR_IS_CONNECT(conn)) {
1536
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1537
virDispatchError(NULL);
1541
if (conn->driver->getHostname) {
1542
char *ret = conn->driver->getHostname (conn);
1548
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
1551
virDispatchError(conn);
1557
* @conn: pointer to a hypervisor connection
1559
* This returns the URI (name) of the hypervisor connection.
1560
* Normally this is the same as or similar to the string passed
1561
* to the virConnectOpen/virConnectOpenReadOnly call, but
1562
* the driver may make the URI canonical. If name == NULL
1563
* was passed to virConnectOpen, then the driver will return
1564
* a non-NULL URI which can be used to connect to the same
1567
* Returns the URI string which must be freed by the caller, or
1568
* NULL if there was an error.
1571
virConnectGetURI (virConnectPtr conn)
1574
DEBUG("conn=%p", conn);
1576
virResetLastError();
1578
if (!VIR_IS_CONNECT(conn)) {
1579
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1580
virDispatchError(NULL);
1584
name = (char *)xmlSaveUri(conn->uri);
1586
virReportOOMError();
1592
virDispatchError(conn);
1597
* virConnectGetSysinfo:
1598
* @conn: pointer to a hypervisor connection
1599
* @flags: callers should always pass 0
1601
* This returns the XML description of the sysinfo details for the
1602
* host on which the hypervisor is running, in the same format as the
1603
* <sysinfo> element of a domain XML. This information is generally
1604
* available only for hypervisors running with root privileges.
1606
* Returns the XML string which must be freed by the caller, or
1607
* NULL if there was an error.
1610
virConnectGetSysinfo (virConnectPtr conn, unsigned int flags)
1612
DEBUG("conn=%p", conn);
1614
virResetLastError();
1616
if (!VIR_IS_CONNECT(conn)) {
1617
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1618
virDispatchError(NULL);
1622
if (conn->driver->getSysinfo) {
1623
char *ret = conn->driver->getSysinfo (conn, flags);
1629
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
1632
virDispatchError(conn);
1637
* virConnectGetMaxVcpus:
1638
* @conn: pointer to the hypervisor connection
1639
* @type: value of the 'type' attribute in the <domain> element
1641
* Provides the maximum number of virtual CPUs supported for a guest VM of a
1642
* specific type. The 'type' parameter here corresponds to the 'type'
1643
* attribute in the <domain> element of the XML.
1645
* Returns the maximum of virtual CPU or -1 in case of error.
1648
virConnectGetMaxVcpus(virConnectPtr conn,
1651
DEBUG("conn=%p, type=%s", conn, type);
1653
virResetLastError();
1655
if (!VIR_IS_CONNECT(conn)) {
1656
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1657
virDispatchError(NULL);
1661
if (conn->driver->getMaxVcpus) {
1662
int ret = conn->driver->getMaxVcpus (conn, type);
1668
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
1670
virDispatchError(conn);
1675
* virConnectListDomains:
1676
* @conn: pointer to the hypervisor connection
1677
* @ids: array to collect the list of IDs of active domains
1678
* @maxids: size of @ids
1680
* Collect the list of active domains, and store their ID in @maxids
1682
* Returns the number of domain found or -1 in case of error
1685
virConnectListDomains(virConnectPtr conn, int *ids, int maxids)
1687
DEBUG("conn=%p, ids=%p, maxids=%d", conn, ids, maxids);
1689
virResetLastError();
1691
if (!VIR_IS_CONNECT(conn)) {
1692
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1693
virDispatchError(NULL);
1697
if ((ids == NULL) || (maxids < 0)) {
1698
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
1702
if (conn->driver->listDomains) {
1703
int ret = conn->driver->listDomains (conn, ids, maxids);
1709
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
1711
virDispatchError(conn);
1716
* virConnectNumOfDomains:
1717
* @conn: pointer to the hypervisor connection
1719
* Provides the number of active domains.
1721
* Returns the number of domain found or -1 in case of error
1724
virConnectNumOfDomains(virConnectPtr conn)
1726
DEBUG("conn=%p", conn);
1728
virResetLastError();
1730
if (!VIR_IS_CONNECT(conn)) {
1731
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1732
virDispatchError(NULL);
1736
if (conn->driver->numOfDomains) {
1737
int ret = conn->driver->numOfDomains (conn);
1743
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
1745
virDispatchError(conn);
1750
* virDomainGetConnect:
1751
* @dom: pointer to a domain
1753
* Provides the connection pointer associated with a domain. The
1754
* reference counter on the connection is not increased by this
1757
* WARNING: When writing libvirt bindings in other languages, do
1758
* not use this function. Instead, store the connection and
1759
* the domain object together.
1761
* Returns the virConnectPtr or NULL in case of failure.
1764
virDomainGetConnect (virDomainPtr dom)
1766
VIR_DOMAIN_DEBUG0(dom);
1768
virResetLastError();
1770
if (!VIR_IS_CONNECTED_DOMAIN (dom)) {
1771
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
1772
virDispatchError(NULL);
1779
* virDomainCreateXML:
1780
* @conn: pointer to the hypervisor connection
1781
* @xmlDesc: string containing an XML description of the domain
1782
* @flags: bitwise-or of supported virDomainCreateFlags
1784
* Launch a new guest domain, based on an XML description similar
1785
* to the one returned by virDomainGetXMLDesc()
1786
* This function may requires privileged access to the hypervisor.
1787
* The domain is not persistent, so its definition will disappear when it
1788
* is destroyed, or if the host is restarted (see virDomainDefineXML() to
1789
* define persistent domains).
1791
* Returns a new domain object or NULL in case of failure
1794
virDomainCreateXML(virConnectPtr conn, const char *xmlDesc,
1797
DEBUG("conn=%p, xmlDesc=%s, flags=%d", conn, xmlDesc, flags);
1799
virResetLastError();
1801
if (!VIR_IS_CONNECT(conn)) {
1802
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1803
virDispatchError(NULL);
1806
if (xmlDesc == NULL) {
1807
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
1810
if (conn->flags & VIR_CONNECT_RO) {
1811
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
1815
if (conn->driver->domainCreateXML) {
1817
ret = conn->driver->domainCreateXML (conn, xmlDesc, flags);
1823
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
1825
virDispatchError(conn);
1830
* virDomainCreateLinux:
1831
* @conn: pointer to the hypervisor connection
1832
* @xmlDesc: string containing an XML description of the domain
1833
* @flags: callers should always pass 0
1835
* Deprecated after 0.4.6.
1836
* Renamed to virDomainCreateXML() providing identical functionality.
1837
* This existing name will left indefinitely for API compatibility.
1839
* Returns a new domain object or NULL in case of failure
1842
virDomainCreateLinux(virConnectPtr conn, const char *xmlDesc,
1845
return virDomainCreateXML(conn, xmlDesc, flags);
1849
* virDomainLookupByID:
1850
* @conn: pointer to the hypervisor connection
1851
* @id: the domain ID number
1853
* Try to find a domain based on the hypervisor ID number
1854
* Note that this won't work for inactive domains which have an ID of -1,
1855
* in that case a lookup based on the Name or UUId need to be done instead.
1857
* Returns a new domain object or NULL in case of failure. If the
1858
* domain cannot be found, then VIR_ERR_NO_DOMAIN error is raised.
1861
virDomainLookupByID(virConnectPtr conn, int id)
1863
DEBUG("conn=%p, id=%d", conn, id);
1865
virResetLastError();
1867
if (!VIR_IS_CONNECT(conn)) {
1868
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1869
virDispatchError(NULL);
1873
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
1877
if (conn->driver->domainLookupByID) {
1879
ret = conn->driver->domainLookupByID (conn, id);
1885
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
1888
virDispatchError(conn);
1893
* virDomainLookupByUUID:
1894
* @conn: pointer to the hypervisor connection
1895
* @uuid: the raw UUID for the domain
1897
* Try to lookup a domain on the given hypervisor based on its UUID.
1899
* Returns a new domain object or NULL in case of failure. If the
1900
* domain cannot be found, then VIR_ERR_NO_DOMAIN error is raised.
1903
virDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
1905
char uuidstr[VIR_UUID_STRING_BUFLEN];
1906
virUUIDFormat(uuid, uuidstr);
1908
DEBUG("conn=%p, uuid=%s", conn, uuidstr);
1910
virResetLastError();
1912
if (!VIR_IS_CONNECT(conn)) {
1913
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1914
virDispatchError(NULL);
1918
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
1922
if (conn->driver->domainLookupByUUID) {
1924
ret = conn->driver->domainLookupByUUID (conn, uuid);
1930
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
1933
virDispatchError(conn);
1938
* virDomainLookupByUUIDString:
1939
* @conn: pointer to the hypervisor connection
1940
* @uuidstr: the string UUID for the domain
1942
* Try to lookup a domain on the given hypervisor based on its UUID.
1944
* Returns a new domain object or NULL in case of failure. If the
1945
* domain cannot be found, then VIR_ERR_NO_DOMAIN error is raised.
1948
virDomainLookupByUUIDString(virConnectPtr conn, const char *uuidstr)
1950
unsigned char uuid[VIR_UUID_BUFLEN];
1951
DEBUG("conn=%p, uuidstr=%s", conn, uuidstr);
1953
virResetLastError();
1955
if (!VIR_IS_CONNECT(conn)) {
1956
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1957
virDispatchError(NULL);
1960
if (uuidstr == NULL) {
1961
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
1965
if (virUUIDParse(uuidstr, uuid) < 0) {
1966
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
1970
return virDomainLookupByUUID(conn, &uuid[0]);
1973
virDispatchError(conn);
1978
* virDomainLookupByName:
1979
* @conn: pointer to the hypervisor connection
1980
* @name: name for the domain
1982
* Try to lookup a domain on the given hypervisor based on its name.
1984
* Returns a new domain object or NULL in case of failure. If the
1985
* domain cannot be found, then VIR_ERR_NO_DOMAIN error is raised.
1988
virDomainLookupByName(virConnectPtr conn, const char *name)
1990
DEBUG("conn=%p, name=%s", conn, name);
1992
virResetLastError();
1994
if (!VIR_IS_CONNECT(conn)) {
1995
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
1996
virDispatchError(NULL);
2000
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2004
if (conn->driver->domainLookupByName) {
2006
dom = conn->driver->domainLookupByName (conn, name);
2012
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2015
virDispatchError(conn);
2021
* @domain: a domain object
2023
* Destroy the domain object. The running instance is shutdown if not down
2024
* already and all resources used by it are given back to the hypervisor. This
2025
* does not free the associated virDomainPtr object.
2026
* This function may require privileged access
2028
* Returns 0 in case of success and -1 in case of failure.
2031
virDomainDestroy(virDomainPtr domain)
2035
VIR_DOMAIN_DEBUG0(domain);
2037
virResetLastError();
2039
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2040
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2041
virDispatchError(NULL);
2045
conn = domain->conn;
2046
if (conn->flags & VIR_CONNECT_RO) {
2047
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2051
if (conn->driver->domainDestroy) {
2053
ret = conn->driver->domainDestroy (domain);
2059
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2062
virDispatchError(conn);
2068
* @domain: a domain object
2070
* Free the domain object. The running instance is kept alive.
2071
* The data structure is freed and should not be used thereafter.
2073
* Returns 0 in case of success and -1 in case of failure.
2076
virDomainFree(virDomainPtr domain)
2078
VIR_DOMAIN_DEBUG0(domain);
2080
virResetLastError();
2082
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2083
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2084
virDispatchError(NULL);
2087
if (virUnrefDomain(domain) < 0) {
2088
virDispatchError(NULL);
2096
* @domain: the domain to hold a reference on
2098
* Increment the reference count on the domain. For each
2099
* additional call to this method, there shall be a corresponding
2100
* call to virDomainFree to release the reference count, once
2101
* the caller no longer needs the reference to this object.
2103
* This method is typically useful for applications where multiple
2104
* threads are using a connection, and it is required that the
2105
* connection remain open until all threads have finished using
2106
* it. ie, each new thread using a domain would increment
2107
* the reference count.
2109
* Returns 0 in case of success and -1 in case of failure.
2112
virDomainRef(virDomainPtr domain)
2114
if ((!VIR_IS_CONNECTED_DOMAIN(domain))) {
2115
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2116
virDispatchError(NULL);
2119
virMutexLock(&domain->conn->lock);
2120
VIR_DOMAIN_DEBUG(domain, "refs=%d", domain->refs);
2122
virMutexUnlock(&domain->conn->lock);
2129
* @domain: a domain object
2131
* Suspends an active domain, the process is frozen without further access
2132
* to CPU resources and I/O but the memory used by the domain at the
2133
* hypervisor level will stay allocated. Use virDomainResume() to reactivate
2135
* This function may requires privileged access.
2137
* Returns 0 in case of success and -1 in case of failure.
2140
virDomainSuspend(virDomainPtr domain)
2144
VIR_DOMAIN_DEBUG0(domain);
2146
virResetLastError();
2148
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2149
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2150
virDispatchError(NULL);
2153
if (domain->conn->flags & VIR_CONNECT_RO) {
2154
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2158
conn = domain->conn;
2160
if (conn->driver->domainSuspend) {
2162
ret = conn->driver->domainSuspend (domain);
2168
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2171
virDispatchError(domain->conn);
2177
* @domain: a domain object
2179
* Resume a suspended domain, the process is restarted from the state where
2180
* it was frozen by calling virSuspendDomain().
2181
* This function may requires privileged access
2183
* Returns 0 in case of success and -1 in case of failure.
2186
virDomainResume(virDomainPtr domain)
2190
VIR_DOMAIN_DEBUG0(domain);
2192
virResetLastError();
2194
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2195
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2196
virDispatchError(NULL);
2199
if (domain->conn->flags & VIR_CONNECT_RO) {
2200
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2204
conn = domain->conn;
2206
if (conn->driver->domainResume) {
2208
ret = conn->driver->domainResume (domain);
2214
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2217
virDispatchError(domain->conn);
2223
* @domain: a domain object
2224
* @to: path for the output file
2226
* This method will suspend a domain and save its memory contents to
2227
* a file on disk. After the call, if successful, the domain is not
2228
* listed as running anymore (this may be a problem).
2229
* Use virDomainRestore() to restore a domain after saving.
2231
* Returns 0 in case of success and -1 in case of failure.
2234
virDomainSave(virDomainPtr domain, const char *to)
2236
char filepath[4096];
2239
VIR_DOMAIN_DEBUG(domain, "to=%s", to);
2241
virResetLastError();
2243
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2244
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2245
virDispatchError(NULL);
2248
if (domain->conn->flags & VIR_CONNECT_RO) {
2249
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2252
conn = domain->conn;
2254
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2259
* We must absolutize the file path as the save is done out of process
2260
* TODO: check for URI when libxml2 is linked in.
2263
unsigned int len, t;
2266
if (getcwd(filepath, sizeof(filepath) - (t + 3)) == NULL)
2268
len = strlen(filepath);
2269
/* that should be covered by getcwd() semantic, but be 100% sure */
2270
if (len > sizeof(filepath) - (t + 3))
2272
filepath[len] = '/';
2273
strcpy(&filepath[len + 1], to);
2278
if (conn->driver->domainSave) {
2280
ret = conn->driver->domainSave (domain, to);
2286
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2289
virDispatchError(domain->conn);
2295
* @conn: pointer to the hypervisor connection
2296
* @from: path to the
2298
* This method will restore a domain saved to disk by virDomainSave().
2300
* Returns 0 in case of success and -1 in case of failure.
2303
virDomainRestore(virConnectPtr conn, const char *from)
2305
char filepath[4096];
2306
DEBUG("conn=%p, from=%s", conn, from);
2308
virResetLastError();
2310
if (!VIR_IS_CONNECT(conn)) {
2311
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
2312
virDispatchError(NULL);
2315
if (conn->flags & VIR_CONNECT_RO) {
2316
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2320
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2325
* We must absolutize the file path as the restore is done out of process
2326
* TODO: check for URI when libxml2 is linked in.
2328
if (from[0] != '/') {
2329
unsigned int len, t;
2332
if (getcwd(filepath, sizeof(filepath) - (t + 3)) == NULL) {
2333
virLibConnError(VIR_ERR_SYSTEM_ERROR,
2334
_("cannot get working directory"));
2337
len = strlen(filepath);
2338
/* that should be covered by getcwd() semantic, but be 100% sure */
2339
if (len > sizeof(filepath) - (t + 3)) {
2340
virLibConnError(VIR_ERR_INTERNAL_ERROR,
2341
_("path too long"));
2344
filepath[len] = '/';
2345
strcpy(&filepath[len + 1], from);
2346
from = &filepath[0];
2349
if (conn->driver->domainRestore) {
2351
ret = conn->driver->domainRestore (conn, from);
2357
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2360
virDispatchError(conn);
2365
* virDomainCoreDump:
2366
* @domain: a domain object
2367
* @to: path for the core file
2368
* @flags: extra flags, currently unused
2370
* This method will dump the core of a domain on a given file for analysis.
2371
* Note that for remote Xen Daemon the file path will be interpreted in
2374
* Returns 0 in case of success and -1 in case of failure.
2377
virDomainCoreDump(virDomainPtr domain, const char *to, int flags)
2379
char filepath[4096];
2382
VIR_DOMAIN_DEBUG(domain, "to=%s, flags=%d", to, flags);
2384
virResetLastError();
2386
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2387
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2388
virDispatchError(NULL);
2391
if (domain->conn->flags & VIR_CONNECT_RO) {
2392
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2395
conn = domain->conn;
2397
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2402
* We must absolutize the file path as the save is done out of process
2403
* TODO: check for URI when libxml2 is linked in.
2406
unsigned int len, t;
2409
if (getcwd(filepath, sizeof(filepath) - (t + 3)) == NULL) {
2410
virLibDomainError(VIR_ERR_SYSTEM_ERROR,
2411
_("cannot get current directory"));
2414
len = strlen(filepath);
2415
/* that should be covered by getcwd() semantic, but be 100% sure */
2416
if (len > sizeof(filepath) - (t + 3)) {
2417
virLibDomainError(VIR_ERR_INTERNAL_ERROR,
2418
_("path too long"));
2421
filepath[len] = '/';
2422
strcpy(&filepath[len + 1], to);
2427
if (conn->driver->domainCoreDump) {
2429
ret = conn->driver->domainCoreDump (domain, to, flags);
2435
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2438
virDispatchError(domain->conn);
2443
* virDomainShutdown:
2444
* @domain: a domain object
2446
* Shutdown a domain, the domain object is still usable there after but
2447
* the domain OS is being stopped. Note that the guest OS may ignore the
2450
* TODO: should we add an option for reboot, knowing it may not be doable
2451
* in the general case ?
2453
* Returns 0 in case of success and -1 in case of failure.
2456
virDomainShutdown(virDomainPtr domain)
2460
VIR_DOMAIN_DEBUG0(domain);
2462
virResetLastError();
2464
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2465
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2466
virDispatchError(NULL);
2469
if (domain->conn->flags & VIR_CONNECT_RO) {
2470
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2474
conn = domain->conn;
2476
if (conn->driver->domainShutdown) {
2478
ret = conn->driver->domainShutdown (domain);
2484
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2487
virDispatchError(domain->conn);
2493
* @domain: a domain object
2494
* @flags: extra flags for the reboot operation, not used yet
2496
* Reboot a domain, the domain object is still usable there after but
2497
* the domain OS is being stopped for a restart.
2498
* Note that the guest OS may ignore the request.
2500
* Returns 0 in case of success and -1 in case of failure.
2503
virDomainReboot(virDomainPtr domain, unsigned int flags)
2507
VIR_DOMAIN_DEBUG(domain, "flags=%u", flags);
2509
virResetLastError();
2511
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2512
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2513
virDispatchError(NULL);
2516
if (domain->conn->flags & VIR_CONNECT_RO) {
2517
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2521
conn = domain->conn;
2523
if (conn->driver->domainReboot) {
2525
ret = conn->driver->domainReboot (domain, flags);
2531
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2534
virDispatchError(domain->conn);
2540
* @domain: a domain object
2542
* Get the public name for that domain
2544
* Returns a pointer to the name or NULL, the string need not be deallocated
2545
* its lifetime will be the same as the domain object.
2548
virDomainGetName(virDomainPtr domain)
2550
DEBUG("domain=%p", domain);
2552
virResetLastError();
2554
if (!VIR_IS_DOMAIN(domain)) {
2555
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2556
virDispatchError(NULL);
2559
return domain->name;
2564
* @domain: a domain object
2565
* @uuid: pointer to a VIR_UUID_BUFLEN bytes array
2567
* Get the UUID for a domain
2569
* Returns -1 in case of error, 0 in case of success
2572
virDomainGetUUID(virDomainPtr domain, unsigned char *uuid)
2574
VIR_DOMAIN_DEBUG(domain, "uuid=%p", uuid);
2576
virResetLastError();
2578
if (!VIR_IS_DOMAIN(domain)) {
2579
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2580
virDispatchError(NULL);
2584
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2585
virDispatchError(domain->conn);
2589
memcpy(uuid, &domain->uuid[0], VIR_UUID_BUFLEN);
2595
* virDomainGetUUIDString:
2596
* @domain: a domain object
2597
* @buf: pointer to a VIR_UUID_STRING_BUFLEN bytes array
2599
* Get the UUID for a domain as string. For more information about
2602
* Returns -1 in case of error, 0 in case of success
2605
virDomainGetUUIDString(virDomainPtr domain, char *buf)
2607
unsigned char uuid[VIR_UUID_BUFLEN];
2609
VIR_DOMAIN_DEBUG(domain, "buf=%p", buf);
2611
virResetLastError();
2613
if (!VIR_IS_DOMAIN(domain)) {
2614
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2615
virDispatchError(NULL);
2619
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2623
if (virDomainGetUUID(domain, &uuid[0]))
2626
virUUIDFormat(uuid, buf);
2630
virDispatchError(domain->conn);
2636
* @domain: a domain object
2638
* Get the hypervisor ID number for the domain
2640
* Returns the domain ID number or (unsigned int) -1 in case of error
2643
virDomainGetID(virDomainPtr domain)
2645
VIR_DOMAIN_DEBUG0(domain);
2647
virResetLastError();
2649
if (!VIR_IS_DOMAIN(domain)) {
2650
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2651
virDispatchError(NULL);
2652
return (unsigned int)-1;
2658
* virDomainGetOSType:
2659
* @domain: a domain object
2661
* Get the type of domain operation system.
2663
* Returns the new string or NULL in case of error, the string must be
2664
* freed by the caller.
2667
virDomainGetOSType(virDomainPtr domain)
2671
VIR_DOMAIN_DEBUG0(domain);
2673
virResetLastError();
2675
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2676
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2677
virDispatchError(NULL);
2681
conn = domain->conn;
2683
if (conn->driver->domainGetOSType) {
2685
ret = conn->driver->domainGetOSType (domain);
2691
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2694
virDispatchError(domain->conn);
2699
* virDomainGetMaxMemory:
2700
* @domain: a domain object or NULL
2702
* Retrieve the maximum amount of physical memory allocated to a
2703
* domain. If domain is NULL, then this get the amount of memory reserved
2704
* to Domain0 i.e. the domain where the application runs.
2706
* Returns the memory size in kilobytes or 0 in case of error.
2709
virDomainGetMaxMemory(virDomainPtr domain)
2713
VIR_DOMAIN_DEBUG0(domain);
2715
virResetLastError();
2717
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2718
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2719
virDispatchError(NULL);
2723
conn = domain->conn;
2725
if (conn->driver->domainGetMaxMemory) {
2727
ret = conn->driver->domainGetMaxMemory (domain);
2733
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2736
virDispatchError(domain->conn);
2741
* virDomainSetMaxMemory:
2742
* @domain: a domain object or NULL
2743
* @memory: the memory size in kilobytes
2745
* Dynamically change the maximum amount of physical memory allocated to a
2746
* domain. If domain is NULL, then this change the amount of memory reserved
2747
* to Domain0 i.e. the domain where the application runs.
2748
* This function requires privileged access to the hypervisor.
2750
* This command only changes the runtime configuration of the domain,
2751
* so can only be called on an active domain.
2753
* Returns 0 in case of success and -1 in case of failure.
2756
virDomainSetMaxMemory(virDomainPtr domain, unsigned long memory)
2760
VIR_DOMAIN_DEBUG(domain, "memory=%lu", memory);
2762
virResetLastError();
2764
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2765
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2766
virDispatchError(NULL);
2769
if (domain->conn->flags & VIR_CONNECT_RO) {
2770
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2773
if (memory < 4096) {
2774
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2777
conn = domain->conn;
2779
if (conn->driver->domainSetMaxMemory) {
2781
ret = conn->driver->domainSetMaxMemory (domain, memory);
2787
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2790
virDispatchError(domain->conn);
2795
* virDomainSetMemory:
2796
* @domain: a domain object or NULL
2797
* @memory: the memory size in kilobytes
2799
* Dynamically change the target amount of physical memory allocated to a
2800
* domain. If domain is NULL, then this change the amount of memory reserved
2801
* to Domain0 i.e. the domain where the application runs.
2802
* This function may requires privileged access to the hypervisor.
2804
* This command only changes the runtime configuration of the domain,
2805
* so can only be called on an active domain.
2807
* Returns 0 in case of success and -1 in case of failure.
2810
virDomainSetMemory(virDomainPtr domain, unsigned long memory)
2814
VIR_DOMAIN_DEBUG(domain, "memory=%lu", memory);
2816
virResetLastError();
2818
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2819
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2820
virDispatchError(NULL);
2823
if (domain->conn->flags & VIR_CONNECT_RO) {
2824
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2827
if (memory < 4096) {
2828
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2832
conn = domain->conn;
2834
if (conn->driver->domainSetMemory) {
2836
ret = conn->driver->domainSetMemory (domain, memory);
2842
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2845
virDispatchError(domain->conn);
2850
* virDomainSetMemoryParameters:
2851
* @domain: pointer to domain object
2852
* @params: pointer to memory parameter objects
2853
* @nparams: number of memory parameter (this value should be same or
2854
* less than the number of parameters supported)
2855
* @flags: currently unused, for future extension
2857
* Change the memory tunables
2858
* This function requires privileged access to the hypervisor.
2860
* Returns -1 in case of error, 0 in case of success.
2863
virDomainSetMemoryParameters(virDomainPtr domain,
2864
virMemoryParameterPtr params,
2865
int nparams, unsigned int flags)
2869
VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%d, flags=%u",
2870
params, nparams, flags);
2872
virResetLastError();
2874
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2875
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2876
virDispatchError(NULL);
2879
if (domain->conn->flags & VIR_CONNECT_RO) {
2880
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
2883
if ((nparams <= 0) || (params == NULL)) {
2884
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2887
conn = domain->conn;
2889
if (conn->driver->domainSetMemoryParameters) {
2891
ret = conn->driver->domainSetMemoryParameters (domain, params, nparams, flags);
2897
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2900
virDispatchError(domain->conn);
2905
* virDomainGetMemoryParameters:
2906
* @domain: pointer to domain object
2907
* @params: pointer to memory parameter object
2908
* (return value, allocated by the caller)
2909
* @nparams: pointer to number of memory parameters
2910
* @flags: currently unused, for future extension
2912
* Get the memory parameters, the @params array will be filled with the values
2913
* equal to the number of parameters suggested by @nparams
2915
* As the value of @nparams is dynamic, call the API setting @nparams to 0 and
2916
* @params as NULL, the API returns the number of parameters supported by the
2917
* HV by updating @nparams on SUCCESS. The caller should then allocate @params
2918
* array, i.e. (sizeof(@virMemoryParameter) * @nparams) bytes and call the API
2921
* Here is the sample code snippet:
2923
* if ((virDomainGetMemoryParameters(dom, NULL, &nparams, 0) == 0) &&
2925
* params = vshMalloc(ctl, sizeof(virMemoryParameter) * nparams);
2926
* memset(params, 0, sizeof(virMemoryParameter) * nparams);
2927
* if (virDomainGetMemoryParameters(dom, params, &nparams, 0)) {
2928
* vshError(ctl, "%s", _("Unable to get memory parameters"));
2933
* This function requires privileged access to the hypervisor. This function
2934
* expects the caller to allocate the @params.
2936
* Returns -1 in case of error, 0 in case of success.
2939
virDomainGetMemoryParameters(virDomainPtr domain,
2940
virMemoryParameterPtr params,
2941
int *nparams, unsigned int flags)
2945
VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%d, flags=%u",
2946
params, (nparams) ? *nparams : -1, flags);
2948
virResetLastError();
2950
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2951
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2952
virDispatchError(NULL);
2955
if ((nparams == NULL) || (*nparams < 0)) {
2956
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
2959
conn = domain->conn;
2961
if (conn->driver->domainGetMemoryParameters) {
2963
ret = conn->driver->domainGetMemoryParameters (domain, params, nparams, flags);
2968
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
2971
virDispatchError(domain->conn);
2977
* @domain: a domain object
2978
* @info: pointer to a virDomainInfo structure allocated by the user
2980
* Extract information about a domain. Note that if the connection
2981
* used to get the domain is limited only a partial set of the information
2984
* Returns 0 in case of success and -1 in case of failure.
2987
virDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info)
2991
VIR_DOMAIN_DEBUG(domain, "info=%p", info);
2993
virResetLastError();
2995
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
2996
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
2997
virDispatchError(NULL);
3001
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
3005
memset(info, 0, sizeof(virDomainInfo));
3007
conn = domain->conn;
3009
if (conn->driver->domainGetInfo) {
3011
ret = conn->driver->domainGetInfo (domain, info);
3017
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3020
virDispatchError(domain->conn);
3025
* virDomainGetXMLDesc:
3026
* @domain: a domain object
3027
* @flags: an OR'ed set of virDomainXMLFlags
3029
* Provide an XML description of the domain. The description may be reused
3030
* later to relaunch the domain with virDomainCreateXML().
3032
* Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
3033
* the caller must free() the returned value.
3036
virDomainGetXMLDesc(virDomainPtr domain, int flags)
3040
VIR_DOMAIN_DEBUG(domain, "flags=%d", flags);
3042
virResetLastError();
3044
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
3045
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
3046
virDispatchError(NULL);
3050
conn = domain->conn;
3052
if ((conn->flags & VIR_CONNECT_RO) && (flags & VIR_DOMAIN_XML_SECURE)) {
3053
virLibConnError(VIR_ERR_OPERATION_DENIED,
3054
_("virDomainGetXMLDesc with secure flag"));
3058
flags &= VIR_DOMAIN_XML_FLAGS_MASK;
3060
if (conn->driver->domainDumpXML) {
3062
ret = conn->driver->domainDumpXML (domain, flags);
3068
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3071
virDispatchError(domain->conn);
3076
* virConnectDomainXMLFromNative:
3077
* @conn: a connection object
3078
* @nativeFormat: configuration format importing from
3079
* @nativeConfig: the configuration data to import
3080
* @flags: currently unused, pass 0
3082
* Reads native configuration data describing a domain, and
3083
* generates libvirt domain XML. The format of the native
3084
* data is hypervisor dependant.
3086
* Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
3087
* the caller must free() the returned value.
3089
char *virConnectDomainXMLFromNative(virConnectPtr conn,
3090
const char *nativeFormat,
3091
const char *nativeConfig,
3094
DEBUG("conn=%p, format=%s config=%s flags=%u", conn, nativeFormat, nativeConfig, flags);
3096
virResetLastError();
3098
if (!VIR_IS_CONNECT(conn)) {
3099
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
3100
virDispatchError(NULL);
3104
if (nativeFormat == NULL || nativeConfig == NULL) {
3105
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
3109
if (conn->driver->domainXMLFromNative) {
3111
ret = conn->driver->domainXMLFromNative (conn,
3120
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3123
virDispatchError(conn);
3128
* virConnectDomainXMLToNative:
3129
* @conn: a connection object
3130
* @nativeFormat: configuration format exporting to
3131
* @domainXml: the domain configuration to export
3132
* @flags: currently unused, pass 0
3134
* Reads a domain XML configuration document, and generates
3135
* a native configuration file describing the domain.
3136
* The format of the native data is hypervisor dependant.
3138
* Returns a 0 terminated UTF-8 encoded native config datafile, or NULL in case of error.
3139
* the caller must free() the returned value.
3141
char *virConnectDomainXMLToNative(virConnectPtr conn,
3142
const char *nativeFormat,
3143
const char *domainXml,
3146
DEBUG("conn=%p, format=%s xml=%s flags=%u", conn, nativeFormat, domainXml, flags);
3148
virResetLastError();
3150
if (!VIR_IS_CONNECT(conn)) {
3151
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
3152
virDispatchError(NULL);
3156
if (nativeFormat == NULL || domainXml == NULL) {
3157
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
3161
if (conn->driver->domainXMLToNative) {
3163
ret = conn->driver->domainXMLToNative(conn,
3172
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3175
virDispatchError(conn);
3181
virDomainMigrateVersion1 (virDomainPtr domain,
3182
virConnectPtr dconn,
3183
unsigned long flags,
3186
unsigned long bandwidth)
3188
virDomainPtr ddomain = NULL;
3189
char *uri_out = NULL;
3190
char *cookie = NULL;
3191
int cookielen = 0, ret;
3194
ret = virDomainGetInfo (domain, &info);
3195
if (ret == 0 && info.state == VIR_DOMAIN_PAUSED) {
3196
flags |= VIR_MIGRATE_PAUSED;
3199
/* Prepare the migration.
3201
* The destination host may return a cookie, or leave cookie as
3204
* The destination host MUST set uri_out if uri_in is NULL.
3206
* If uri_in is non-NULL, then the destination host may modify
3207
* the URI by setting uri_out. If it does not wish to modify
3208
* the URI, it should leave uri_out as NULL.
3210
if (dconn->driver->domainMigratePrepare
3211
(dconn, &cookie, &cookielen, uri, &uri_out, flags, dname,
3215
if (uri == NULL && uri_out == NULL) {
3216
virLibConnError(VIR_ERR_INTERNAL_ERROR,
3217
_("domainMigratePrepare did not set uri"));
3221
uri = uri_out; /* Did domainMigratePrepare change URI? */
3222
assert (uri != NULL);
3224
/* Perform the migration. The driver isn't supposed to return
3225
* until the migration is complete.
3227
if (domain->conn->driver->domainMigratePerform
3228
(domain, cookie, cookielen, uri, flags, dname, bandwidth) == -1)
3231
/* Get the destination domain and return it or error.
3232
* 'domain' no longer actually exists at this point
3233
* (or so we hope), but we still use the object in memory
3234
* in order to get the name.
3236
dname = dname ? dname : domain->name;
3237
if (dconn->driver->domainMigrateFinish)
3238
ddomain = dconn->driver->domainMigrateFinish
3239
(dconn, dname, cookie, cookielen, uri, flags);
3241
ddomain = virDomainLookupByName (dconn, dname);
3250
virDomainMigrateVersion2 (virDomainPtr domain,
3251
virConnectPtr dconn,
3252
unsigned long flags,
3255
unsigned long bandwidth)
3257
virDomainPtr ddomain = NULL;
3258
char *uri_out = NULL;
3259
char *cookie = NULL;
3260
char *dom_xml = NULL;
3261
int cookielen = 0, ret;
3263
virErrorPtr orig_err = NULL;
3265
/* Prepare the migration.
3267
* The destination host may return a cookie, or leave cookie as
3270
* The destination host MUST set uri_out if uri_in is NULL.
3272
* If uri_in is non-NULL, then the destination host may modify
3273
* the URI by setting uri_out. If it does not wish to modify
3274
* the URI, it should leave uri_out as NULL.
3277
/* In version 2 of the protocol, the prepare step is slightly
3278
* different. We fetch the domain XML of the source domain
3279
* and pass it to Prepare2.
3281
if (!domain->conn->driver->domainDumpXML) {
3282
virLibConnError(VIR_ERR_INTERNAL_ERROR, __FUNCTION__);
3283
virDispatchError(domain->conn);
3286
dom_xml = domain->conn->driver->domainDumpXML (domain,
3287
VIR_DOMAIN_XML_SECURE |
3288
VIR_DOMAIN_XML_UPDATE_CPU);
3292
ret = virDomainGetInfo (domain, &info);
3293
if (ret == 0 && info.state == VIR_DOMAIN_PAUSED) {
3294
flags |= VIR_MIGRATE_PAUSED;
3297
ret = dconn->driver->domainMigratePrepare2
3298
(dconn, &cookie, &cookielen, uri, &uri_out, flags, dname,
3299
bandwidth, dom_xml);
3304
if (uri == NULL && uri_out == NULL) {
3305
virLibConnError(VIR_ERR_INTERNAL_ERROR,
3306
_("domainMigratePrepare2 did not set uri"));
3307
virDispatchError(domain->conn);
3311
uri = uri_out; /* Did domainMigratePrepare2 change URI? */
3312
assert (uri != NULL);
3314
/* Perform the migration. The driver isn't supposed to return
3315
* until the migration is complete.
3317
ret = domain->conn->driver->domainMigratePerform
3318
(domain, cookie, cookielen, uri, flags, dname, bandwidth);
3320
/* Perform failed. Make sure Finish doesn't overwrite the error */
3322
orig_err = virSaveLastError();
3324
/* In version 2 of the migration protocol, we pass the
3325
* status code from the sender to the destination host,
3326
* so it can do any cleanup if the migration failed.
3328
dname = dname ? dname : domain->name;
3329
ddomain = dconn->driver->domainMigrateFinish2
3330
(dconn, dname, cookie, cookielen, uri, flags, ret);
3334
virSetError(orig_err);
3335
virFreeError(orig_err);
3344
* This is sort of a migration v3
3346
* In this version, the client does not talk to the destination
3347
* libvirtd. The source libvirtd will still try to talk to the
3348
* destination libvirtd though, and will do the prepare/perform/finish
3352
virDomainMigratePeer2Peer (virDomainPtr domain,
3353
unsigned long flags,
3356
unsigned long bandwidth)
3358
xmlURIPtr tempuri = NULL;
3360
if (!domain->conn->driver->domainMigratePerform) {
3361
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3362
virDispatchError(domain->conn);
3366
tempuri = xmlParseURI(uri);
3368
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
3369
virDispatchError(domain->conn);
3373
if (!tempuri->server || STRPREFIX(tempuri->server, "localhost")) {
3374
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
3375
virDispatchError(domain->conn);
3376
xmlFreeURI(tempuri);
3379
xmlFreeURI(tempuri);
3381
/* Perform the migration. The driver isn't supposed to return
3382
* until the migration is complete.
3384
return domain->conn->driver->domainMigratePerform(domain,
3395
* This is a variation on v1 & 2 migration
3397
* This is for hypervisors which can directly handshake
3398
* without any libvirtd involvement on destination either
3399
* from client, or source libvirt.
3401
* eg, XenD can talk direct to XenD, so libvirtd on dest
3402
* does not need to be involved at all, or even running
3405
virDomainMigrateDirect (virDomainPtr domain,
3406
unsigned long flags,
3409
unsigned long bandwidth)
3411
if (!domain->conn->driver->domainMigratePerform) {
3412
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3413
virDispatchError(domain->conn);
3417
/* Perform the migration. The driver isn't supposed to return
3418
* until the migration is complete.
3420
return domain->conn->driver->domainMigratePerform(domain,
3432
* @domain: a domain object
3433
* @dconn: destination host (a connection object)
3435
* @dname: (optional) rename domain to this at destination
3436
* @uri: (optional) dest hostname/URI as seen from the source host
3437
* @bandwidth: (optional) specify migration bandwidth limit in Mbps
3439
* Migrate the domain object from its current host to the destination
3440
* host given by dconn (a connection to the destination host).
3442
* Flags may be one of more of the following:
3443
* VIR_MIGRATE_LIVE Do not pause the VM during migration
3444
* VIR_MIGRATE_PEER2PEER Direct connection between source & destination hosts
3445
* VIR_MIGRATE_TUNNELLED Tunnel migration data over the libvirt RPC channel
3446
* VIR_MIGRATE_PERSIST_DEST If the migration is successful, persist the domain
3447
* on the destination host.
3448
* VIR_MIGRATE_UNDEFINE_SOURCE If the migration is successful, undefine the
3449
* domain on the source host.
3450
* VIR_MIGRATE_PAUSED Leave the domain suspended on the remote side.
3452
* VIR_MIGRATE_TUNNELLED requires that VIR_MIGRATE_PEER2PEER be set.
3453
* Applications using the VIR_MIGRATE_PEER2PEER flag will probably
3454
* prefer to invoke virDomainMigrateToURI, avoiding the need to
3455
* open connection to the destination host themselves.
3457
* If a hypervisor supports renaming domains during migration,
3458
* then you may set the dname parameter to the new name (otherwise
3459
* it keeps the same name). If this is not supported by the
3460
* hypervisor, dname must be NULL or else you will get an error.
3462
* If the VIR_MIGRATE_PEER2PEER flag is set, the uri parameter
3463
* must be a valid libvirt connection URI, by which the source
3464
* libvirt driver can connect to the destination libvirt. If
3465
* omitted, the dconn connection object will be queried for its
3468
* If the VIR_MIGRATE_PEER2PEER flag is NOT set, the URI parameter
3469
* takes a hypervisor specific format. The hypervisor capabilities
3470
* XML includes details of the support URI schemes. If omitted
3471
* the dconn will be asked for a default URI.
3473
* In either case it is typically only necessary to specify a
3474
* URI if the destination host has multiple interfaces and a
3475
* specific interface is required to transmit migration data.
3477
* The maximum bandwidth (in Mbps) that will be used to do migration
3478
* can be specified with the bandwidth parameter. If set to 0,
3479
* libvirt will choose a suitable default. Some hypervisors do
3480
* not support this feature and will return an error if bandwidth
3483
* To see which features are supported by the current hypervisor,
3484
* see virConnectGetCapabilities, /capabilities/host/migration_features.
3486
* There are many limitations on migration imposed by the underlying
3487
* technology - for example it may not be possible to migrate between
3488
* different processors even with the same architecture, or between
3489
* different types of hypervisor.
3491
* Returns the new domain object if the migration was successful,
3492
* or NULL in case of error. Note that the new domain object
3493
* exists in the scope of the destination connection (dconn).
3496
virDomainMigrate (virDomainPtr domain,
3497
virConnectPtr dconn,
3498
unsigned long flags,
3501
unsigned long bandwidth)
3503
virDomainPtr ddomain = NULL;
3505
VIR_DOMAIN_DEBUG(domain, "dconn=%p, flags=%lu, dname=%s, uri=%s, bandwidth=%lu",
3506
dconn, flags, NULLSTR(dname), NULLSTR(uri), bandwidth);
3508
virResetLastError();
3510
/* First checkout the source */
3511
if (!VIR_IS_CONNECTED_DOMAIN (domain)) {
3512
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
3513
virDispatchError(NULL);
3516
if (domain->conn->flags & VIR_CONNECT_RO) {
3517
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
3521
/* Now checkout the destination */
3522
if (!VIR_IS_CONNECT(dconn)) {
3523
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
3526
if (dconn->flags & VIR_CONNECT_RO) {
3527
/* NB, deliberately report error against source object, not dest */
3528
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
3532
if (flags & VIR_MIGRATE_PEER2PEER) {
3533
if (VIR_DRV_SUPPORTS_FEATURE (domain->conn->driver, domain->conn,
3534
VIR_DRV_FEATURE_MIGRATION_P2P)) {
3535
char *dstURI = NULL;
3537
dstURI = virConnectGetURI(dconn);
3542
if (virDomainMigratePeer2Peer(domain, flags, dname, uri ? uri : dstURI, bandwidth) < 0) {
3548
ddomain = virDomainLookupByName (dconn, dname ? dname : domain->name);
3550
/* This driver does not support peer to peer migration */
3551
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3555
if (flags & VIR_MIGRATE_TUNNELLED) {
3556
virLibConnError(VIR_ERR_OPERATION_INVALID,
3557
_("cannot perform tunnelled migration without using peer2peer flag"));
3561
/* Check that migration is supported by both drivers. */
3562
if (VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn,
3563
VIR_DRV_FEATURE_MIGRATION_V1) &&
3564
VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn,
3565
VIR_DRV_FEATURE_MIGRATION_V1))
3566
ddomain = virDomainMigrateVersion1(domain, dconn, flags, dname, uri, bandwidth);
3567
else if (VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn,
3568
VIR_DRV_FEATURE_MIGRATION_V2) &&
3569
VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn,
3570
VIR_DRV_FEATURE_MIGRATION_V2))
3571
ddomain = virDomainMigrateVersion2(domain, dconn, flags, dname, uri, bandwidth);
3573
/* This driver does not support any migration method */
3574
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3579
if (ddomain == NULL)
3585
virDispatchError(domain->conn);
3591
* virDomainMigrateToURI:
3592
* @domain: a domain object
3593
* @duri: mandatory URI for the destination host
3595
* @dname: (optional) rename domain to this at destination
3596
* @bandwidth: (optional) specify migration bandwidth limit in Mbps
3598
* Migrate the domain object from its current host to the destination
3599
* host given by duri.
3601
* Flags may be one of more of the following:
3602
* VIR_MIGRATE_LIVE Do not pause the VM during migration
3603
* VIR_MIGRATE_PEER2PEER Direct connection between source & destination hosts
3604
* VIR_MIGRATE_TUNNELLED Tunnel migration data over the libvirt RPC channel
3605
* VIR_MIGRATE_PERSIST_DEST If the migration is successful, persist the domain
3606
* on the destination host.
3607
* VIR_MIGRATE_UNDEFINE_SOURCE If the migration is successful, undefine the
3608
* domain on the source host.
3610
* The operation of this API hinges on the VIR_MIGRATE_PEER2PEER flag.
3611
* If the VIR_MIGRATE_PEER2PEER flag is NOT set, the duri parameter
3612
* takes a hypervisor specific format. The uri_transports element of the
3613
* hypervisor capabilities XML includes details of the supported URI
3614
* schemes. Not all hypervisors will support this mode of migration, so
3615
* if the VIR_MIGRATE_PEER2PEER flag is not set, then it may be necessary
3616
* to use the alternative virDomainMigrate API providing and explicit
3617
* virConnectPtr for the destination host.
3619
* If the VIR_MIGRATE_PEER2PEER flag IS set, the duri parameter
3620
* must be a valid libvirt connection URI, by which the source
3621
* libvirt driver can connect to the destination libvirt.
3623
* VIR_MIGRATE_TUNNELLED requires that VIR_MIGRATE_PEER2PEER be set.
3625
* If a hypervisor supports renaming domains during migration,
3626
* the dname parameter specifies the new name for the domain.
3627
* Setting dname to NULL keeps the domain name the same. If domain
3628
* renaming is not supported by the hypervisor, dname must be NULL or
3629
* else an error will be returned.
3631
* The maximum bandwidth (in Mbps) that will be used to do migration
3632
* can be specified with the bandwidth parameter. If set to 0,
3633
* libvirt will choose a suitable default. Some hypervisors do
3634
* not support this feature and will return an error if bandwidth
3637
* To see which features are supported by the current hypervisor,
3638
* see virConnectGetCapabilities, /capabilities/host/migration_features.
3640
* There are many limitations on migration imposed by the underlying
3641
* technology - for example it may not be possible to migrate between
3642
* different processors even with the same architecture, or between
3643
* different types of hypervisor.
3645
* Returns 0 if the migration succeeded, -1 upon error.
3648
virDomainMigrateToURI (virDomainPtr domain,
3650
unsigned long flags,
3652
unsigned long bandwidth)
3654
VIR_DOMAIN_DEBUG(domain, "duri=%p, flags=%lu, dname=%s, bandwidth=%lu",
3655
NULLSTR(duri), flags, NULLSTR(dname), bandwidth);
3657
virResetLastError();
3659
/* First checkout the source */
3660
if (!VIR_IS_CONNECTED_DOMAIN (domain)) {
3661
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
3662
virDispatchError(NULL);
3665
if (domain->conn->flags & VIR_CONNECT_RO) {
3666
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
3671
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
3675
if (flags & VIR_MIGRATE_PEER2PEER) {
3676
if (VIR_DRV_SUPPORTS_FEATURE (domain->conn->driver, domain->conn,
3677
VIR_DRV_FEATURE_MIGRATION_P2P)) {
3678
if (virDomainMigratePeer2Peer (domain, flags, dname, duri, bandwidth) < 0)
3681
/* No peer to peer migration supported */
3682
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3686
if (VIR_DRV_SUPPORTS_FEATURE (domain->conn->driver, domain->conn,
3687
VIR_DRV_FEATURE_MIGRATION_DIRECT)) {
3688
if (virDomainMigrateDirect (domain, flags, dname, duri, bandwidth) < 0)
3691
/* Cannot do a migration with only the perform step */
3692
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3700
virDispatchError(domain->conn);
3706
* Not for public use. This function is part of the internal
3707
* implementation of migration in the remote case.
3710
virDomainMigratePrepare (virConnectPtr dconn,
3715
unsigned long flags,
3717
unsigned long bandwidth)
3719
VIR_DEBUG("dconn=%p, cookie=%p, cookielen=%p, uri_in=%s, uri_out=%p, "
3720
"flags=%lu, dname=%s, bandwidth=%lu", dconn, cookie, cookielen,
3721
NULLSTR(uri_in), uri_out, flags, NULLSTR(dname), bandwidth);
3723
virResetLastError();
3725
if (!VIR_IS_CONNECT (dconn)) {
3726
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
3727
virDispatchError(NULL);
3731
if (dconn->flags & VIR_CONNECT_RO) {
3732
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
3736
if (dconn->driver->domainMigratePrepare) {
3738
ret = dconn->driver->domainMigratePrepare (dconn, cookie, cookielen,
3740
flags, dname, bandwidth);
3746
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3749
virDispatchError(dconn);
3754
* Not for public use. This function is part of the internal
3755
* implementation of migration in the remote case.
3758
virDomainMigratePerform (virDomainPtr domain,
3762
unsigned long flags,
3764
unsigned long bandwidth)
3768
VIR_DOMAIN_DEBUG(domain, "cookie=%p, cookielen=%d, uri=%s, flags=%lu, "
3769
"dname=%s, bandwidth=%lu", cookie, cookielen, uri, flags,
3770
NULLSTR(dname), bandwidth);
3772
virResetLastError();
3774
if (!VIR_IS_CONNECTED_DOMAIN (domain)) {
3775
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
3776
virDispatchError(NULL);
3779
conn = domain->conn;
3781
if (domain->conn->flags & VIR_CONNECT_RO) {
3782
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
3786
if (conn->driver->domainMigratePerform) {
3788
ret = conn->driver->domainMigratePerform (domain, cookie, cookielen,
3790
flags, dname, bandwidth);
3796
virLibDomainError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3799
virDispatchError(domain->conn);
3804
* Not for public use. This function is part of the internal
3805
* implementation of migration in the remote case.
3808
virDomainMigrateFinish (virConnectPtr dconn,
3813
unsigned long flags)
3815
VIR_DEBUG("dconn=%p, dname=%s, cookie=%p, cookielen=%d, uri=%s, "
3816
"flags=%lu", dconn, NULLSTR(dname), cookie, cookielen,
3819
virResetLastError();
3821
if (!VIR_IS_CONNECT (dconn)) {
3822
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
3823
virDispatchError(NULL);
3827
if (dconn->flags & VIR_CONNECT_RO) {
3828
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
3832
if (dconn->driver->domainMigrateFinish) {
3834
ret = dconn->driver->domainMigrateFinish (dconn, dname,
3842
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3845
virDispatchError(dconn);
3851
* Not for public use. This function is part of the internal
3852
* implementation of migration in the remote case.
3855
virDomainMigratePrepare2 (virConnectPtr dconn,
3860
unsigned long flags,
3862
unsigned long bandwidth,
3863
const char *dom_xml)
3865
VIR_DEBUG("dconn=%p, cookie=%p, cookielen=%p, uri_in=%s, uri_out=%p,"
3866
"flags=%lu, dname=%s, bandwidth=%lu, dom_xml=%s", dconn,
3867
cookie, cookielen, uri_in, uri_out, flags, NULLSTR(dname),
3868
bandwidth, dom_xml);
3870
virResetLastError();
3872
if (!VIR_IS_CONNECT (dconn)) {
3873
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
3874
virDispatchError(NULL);
3878
if (dconn->flags & VIR_CONNECT_RO) {
3879
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
3883
if (dconn->driver->domainMigratePrepare2) {
3885
ret = dconn->driver->domainMigratePrepare2 (dconn, cookie, cookielen,
3887
flags, dname, bandwidth,
3894
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3897
virDispatchError(dconn);
3902
* Not for public use. This function is part of the internal
3903
* implementation of migration in the remote case.
3906
virDomainMigrateFinish2 (virConnectPtr dconn,
3911
unsigned long flags,
3914
VIR_DEBUG("dconn=%p, dname=%s, cookie=%p, cookielen=%d, uri=%s, "
3915
"flags=%lu, retcode=%d", dconn, NULLSTR(dname), cookie,
3916
cookielen, uri, flags, retcode);
3918
virResetLastError();
3920
if (!VIR_IS_CONNECT (dconn)) {
3921
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
3922
virDispatchError(NULL);
3926
if (dconn->flags & VIR_CONNECT_RO) {
3927
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
3931
if (dconn->driver->domainMigrateFinish2) {
3933
ret = dconn->driver->domainMigrateFinish2 (dconn, dname,
3942
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3945
virDispatchError(dconn);
3951
* Not for public use. This function is part of the internal
3952
* implementation of migration in the remote case.
3955
virDomainMigratePrepareTunnel(virConnectPtr conn,
3957
unsigned long flags,
3959
unsigned long bandwidth,
3960
const char *dom_xml)
3963
VIR_DEBUG("conn=%p, stream=%p, flags=%lu, dname=%s, "
3964
"bandwidth=%lu, dom_xml=%s", conn, st, flags,
3965
NULLSTR(dname), bandwidth, dom_xml);
3967
virResetLastError();
3969
if (!VIR_IS_CONNECT(conn)) {
3970
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
3971
virDispatchError(NULL);
3975
if (conn->flags & VIR_CONNECT_RO) {
3976
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
3980
if (conn != st->conn) {
3981
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
3985
if (conn->driver->domainMigratePrepareTunnel) {
3986
int rv = conn->driver->domainMigratePrepareTunnel(conn, st,
3988
bandwidth, dom_xml);
3994
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
3997
virDispatchError(conn);
4004
* @conn: pointer to the hypervisor connection
4005
* @info: pointer to a virNodeInfo structure allocated by the user
4007
* Extract hardware information about the node.
4009
* Returns 0 in case of success and -1 in case of failure.
4012
virNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info)
4014
DEBUG("conn=%p, info=%p", conn, info);
4016
virResetLastError();
4018
if (!VIR_IS_CONNECT(conn)) {
4019
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
4020
virDispatchError(NULL);
4024
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
4028
if (conn->driver->nodeGetInfo) {
4030
ret = conn->driver->nodeGetInfo (conn, info);
4036
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4039
virDispatchError(conn);
4044
* virConnectGetCapabilities:
4045
* @conn: pointer to the hypervisor connection
4047
* Provides capabilities of the hypervisor / driver.
4049
* Returns NULL in case of error, or an XML string
4050
* defining the capabilities.
4051
* The client must free the returned string after use.
4054
virConnectGetCapabilities (virConnectPtr conn)
4056
DEBUG("conn=%p", conn);
4058
virResetLastError();
4060
if (!VIR_IS_CONNECT (conn)) {
4061
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
4062
virDispatchError(NULL);
4066
if (conn->driver->getCapabilities) {
4068
ret = conn->driver->getCapabilities (conn);
4071
DEBUG("conn=%p ret=%s", conn, ret);
4075
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4078
virDispatchError(conn);
4083
* virNodeGetFreeMemory:
4084
* @conn: pointer to the hypervisor connection
4086
* provides the free memory available on the Node
4087
* Note: most libvirt APIs provide memory sizes in kilobytes, but in this
4088
* function the returned value is in bytes. Divide by 1024 as necessary.
4090
* Returns the available free memory in bytes or 0 in case of error
4093
virNodeGetFreeMemory(virConnectPtr conn)
4095
DEBUG("conn=%p", conn);
4097
virResetLastError();
4099
if (!VIR_IS_CONNECT (conn)) {
4100
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
4101
virDispatchError(NULL);
4105
if (conn->driver->getFreeMemory) {
4106
unsigned long long ret;
4107
ret = conn->driver->getFreeMemory (conn);
4113
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4116
virDispatchError(conn);
4121
* virDomainGetSchedulerType:
4122
* @domain: pointer to domain object
4123
* @nparams: number of scheduler parameters(return value)
4125
* Get the scheduler type.
4127
* Returns NULL in case of error. The caller must free the returned string.
4130
virDomainGetSchedulerType(virDomainPtr domain, int *nparams)
4135
VIR_DOMAIN_DEBUG(domain, "nparams=%p", nparams);
4137
virResetLastError();
4139
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
4140
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4141
virDispatchError(NULL);
4144
conn = domain->conn;
4146
if (conn->driver->domainGetSchedulerType){
4147
schedtype = conn->driver->domainGetSchedulerType (domain, nparams);
4153
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4156
virDispatchError(domain->conn);
4162
* virDomainGetSchedulerParameters:
4163
* @domain: pointer to domain object
4164
* @params: pointer to scheduler parameter object
4166
* @nparams: pointer to number of scheduler parameter
4167
* (this value should be same than the returned value
4168
* nparams of virDomainGetSchedulerType)
4170
* Get the scheduler parameters, the @params array will be filled with the
4173
* Returns -1 in case of error, 0 in case of success.
4176
virDomainGetSchedulerParameters(virDomainPtr domain,
4177
virSchedParameterPtr params, int *nparams)
4181
VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%p", params, nparams);
4183
virResetLastError();
4185
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
4186
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4187
virDispatchError(NULL);
4190
conn = domain->conn;
4192
if (conn->driver->domainGetSchedulerParameters) {
4194
ret = conn->driver->domainGetSchedulerParameters (domain, params, nparams);
4200
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4203
virDispatchError(domain->conn);
4208
* virDomainSetSchedulerParameters:
4209
* @domain: pointer to domain object
4210
* @params: pointer to scheduler parameter objects
4211
* @nparams: number of scheduler parameter
4212
* (this value should be same or less than the returned value
4213
* nparams of virDomainGetSchedulerType)
4215
* Change the scheduler parameters
4217
* Returns -1 in case of error, 0 in case of success.
4220
virDomainSetSchedulerParameters(virDomainPtr domain,
4221
virSchedParameterPtr params, int nparams)
4225
VIR_DOMAIN_DEBUG(domain, "params=%p, nparams=%d", params, nparams);
4227
virResetLastError();
4229
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
4230
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4231
virDispatchError(NULL);
4234
if (domain->conn->flags & VIR_CONNECT_RO) {
4235
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
4238
conn = domain->conn;
4240
if (conn->driver->domainSetSchedulerParameters) {
4242
ret = conn->driver->domainSetSchedulerParameters (domain, params, nparams);
4248
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4251
virDispatchError(domain->conn);
4257
* virDomainBlockStats:
4258
* @dom: pointer to the domain object
4259
* @path: path to the block device
4260
* @stats: block device stats (returned)
4261
* @size: size of stats structure
4263
* This function returns block device (disk) stats for block
4264
* devices attached to the domain.
4266
* The path parameter is the name of the block device. Get this
4267
* by calling virDomainGetXMLDesc and finding the <target dev='...'>
4268
* attribute within //domain/devices/disk. (For example, "xvda").
4270
* Domains may have more than one block device. To get stats for
4271
* each you should make multiple calls to this function.
4273
* Individual fields within the stats structure may be returned
4274
* as -1, which indicates that the hypervisor does not support
4275
* that particular statistic.
4277
* Returns: 0 in case of success or -1 in case of failure.
4280
virDomainBlockStats (virDomainPtr dom, const char *path,
4281
virDomainBlockStatsPtr stats, size_t size)
4284
struct _virDomainBlockStats stats2 = { -1, -1, -1, -1, -1 };
4286
VIR_DOMAIN_DEBUG(dom, "path=%s, stats=%p, size=%zi", path, stats, size);
4288
virResetLastError();
4290
if (!VIR_IS_CONNECTED_DOMAIN (dom)) {
4291
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4292
virDispatchError(NULL);
4295
if (!path || !stats || size > sizeof stats2) {
4296
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
4301
if (conn->driver->domainBlockStats) {
4302
if (conn->driver->domainBlockStats (dom, path, &stats2) == -1)
4305
memcpy (stats, &stats2, size);
4309
virLibDomainError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4312
virDispatchError(dom->conn);
4317
* virDomainInterfaceStats:
4318
* @dom: pointer to the domain object
4319
* @path: path to the interface
4320
* @stats: network interface stats (returned)
4321
* @size: size of stats structure
4323
* This function returns network interface stats for interfaces
4324
* attached to the domain.
4326
* The path parameter is the name of the network interface.
4328
* Domains may have more than one network interface. To get stats for
4329
* each you should make multiple calls to this function.
4331
* Individual fields within the stats structure may be returned
4332
* as -1, which indicates that the hypervisor does not support
4333
* that particular statistic.
4335
* Returns: 0 in case of success or -1 in case of failure.
4338
virDomainInterfaceStats (virDomainPtr dom, const char *path,
4339
virDomainInterfaceStatsPtr stats, size_t size)
4342
struct _virDomainInterfaceStats stats2 = { -1, -1, -1, -1,
4345
VIR_DOMAIN_DEBUG(dom, "path=%s, stats=%p, size=%zi",
4348
virResetLastError();
4350
if (!VIR_IS_CONNECTED_DOMAIN (dom)) {
4351
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4352
virDispatchError(NULL);
4355
if (!path || !stats || size > sizeof stats2) {
4356
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
4361
if (conn->driver->domainInterfaceStats) {
4362
if (conn->driver->domainInterfaceStats (dom, path, &stats2) == -1)
4365
memcpy (stats, &stats2, size);
4369
virLibDomainError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4372
virDispatchError(dom->conn);
4377
* virDomainMemoryStats:
4378
* @dom: pointer to the domain object
4379
* @stats: nr_stats-sized array of stat structures (returned)
4380
* @nr_stats: number of memory statistics requested
4381
* @flags: unused, always pass 0
4383
* This function provides memory statistics for the domain.
4385
* Up to 'nr_stats' elements of 'stats' will be populated with memory statistics
4386
* from the domain. Only statistics supported by the domain, the driver, and
4387
* this version of libvirt will be returned.
4389
* Memory Statistics:
4391
* VIR_DOMAIN_MEMORY_STAT_SWAP_IN:
4392
* The total amount of data read from swap space (in kb).
4393
* VIR_DOMAIN_MEMORY_STAT_SWAP_OUT:
4394
* The total amount of memory written out to swap space (in kb).
4395
* VIR_DOMAIN_MEMORY_STAT_MAJOR_FAULT:
4396
* The number of page faults that required disk IO to service.
4397
* VIR_DOMAIN_MEMORY_STAT_MINOR_FAULT:
4398
* The number of page faults serviced without disk IO.
4399
* VIR_DOMAIN_MEMORY_STAT_UNUSED:
4400
* The amount of memory which is not being used for any purpose (in kb).
4401
* VIR_DOMAIN_MEMORY_STAT_AVAILABLE:
4402
* The total amount of memory available to the domain's OS (in kb).
4404
* Returns: The number of stats provided or -1 in case of failure.
4406
int virDomainMemoryStats (virDomainPtr dom, virDomainMemoryStatPtr stats,
4407
unsigned int nr_stats, unsigned int flags)
4410
unsigned long nr_stats_ret = 0;
4412
VIR_DOMAIN_DEBUG(dom, "stats=%p, nr_stats=%u", stats, nr_stats);
4414
virResetLastError();
4416
if (!VIR_IS_CONNECTED_DOMAIN (dom)) {
4417
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4418
virDispatchError(NULL);
4422
virLibDomainError(VIR_ERR_INVALID_ARG,
4423
_("flags must be zero"));
4427
if (!stats || nr_stats == 0)
4430
if (nr_stats > VIR_DOMAIN_MEMORY_STAT_NR)
4431
nr_stats = VIR_DOMAIN_MEMORY_STAT_NR;
4434
if (conn->driver->domainMemoryStats) {
4435
nr_stats_ret = conn->driver->domainMemoryStats (dom, stats, nr_stats);
4436
if (nr_stats_ret == -1)
4438
return nr_stats_ret;
4441
virLibDomainError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4444
virDispatchError(dom->conn);
4449
* virDomainBlockPeek:
4450
* @dom: pointer to the domain object
4451
* @path: path to the block device
4452
* @offset: offset within block device
4453
* @size: size to read
4454
* @buffer: return buffer (must be at least size bytes)
4455
* @flags: unused, always pass 0
4457
* This function allows you to read the contents of a domain's
4460
* Typical uses for this are to determine if the domain has
4461
* written a Master Boot Record (indicating that the domain
4462
* has completed installation), or to try to work out the state
4463
* of the domain's filesystems.
4465
* (Note that in the local case you might try to open the
4466
* block device or file directly, but that won't work in the
4467
* remote case, nor if you don't have sufficient permission.
4468
* Hence the need for this call).
4470
* 'path' must be a device or file corresponding to the domain.
4471
* In other words it must be the precise string returned in
4472
* a <disk><source dev='...'/></disk> from
4473
* virDomainGetXMLDesc.
4475
* 'offset' and 'size' represent an area which must lie entirely
4476
* within the device or file. 'size' may be 0 to test if the
4477
* call would succeed.
4479
* 'buffer' is the return buffer and must be at least 'size' bytes.
4481
* NB. The remote driver imposes a 64K byte limit on 'size'.
4482
* For your program to be able to work reliably over a remote
4483
* connection you should split large requests to <= 65536 bytes.
4485
* Returns: 0 in case of success or -1 in case of failure.
4488
virDomainBlockPeek (virDomainPtr dom,
4490
unsigned long long offset /* really 64 bits */,
4497
VIR_DOMAIN_DEBUG(dom, "path=%s, offset=%lld, size=%zi, buffer=%p",
4498
path, offset, size, buffer);
4500
virResetLastError();
4502
if (!VIR_IS_CONNECTED_DOMAIN (dom)) {
4503
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4504
virDispatchError(NULL);
4509
if (dom->conn->flags & VIR_CONNECT_RO) {
4510
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
4515
virLibDomainError(VIR_ERR_INVALID_ARG,
4521
virLibDomainError(VIR_ERR_INVALID_ARG,
4522
_("flags must be zero"));
4526
/* Allow size == 0 as an access test. */
4527
if (size > 0 && !buffer) {
4528
virLibDomainError(VIR_ERR_INVALID_ARG,
4529
_("buffer is NULL"));
4533
if (conn->driver->domainBlockPeek) {
4535
ret =conn->driver->domainBlockPeek (dom, path, offset, size,
4542
virLibDomainError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4545
virDispatchError(dom->conn);
4550
* virDomainMemoryPeek:
4551
* @dom: pointer to the domain object
4552
* @start: start of memory to peek
4553
* @size: size of memory to peek
4554
* @buffer: return buffer (must be at least size bytes)
4555
* @flags: flags, see below
4557
* This function allows you to read the contents of a domain's
4560
* The memory which is read is controlled by the 'start', 'size'
4561
* and 'flags' parameters.
4563
* If 'flags' is VIR_MEMORY_VIRTUAL then the 'start' and 'size'
4564
* parameters are interpreted as virtual memory addresses for
4565
* whichever task happens to be running on the domain at the
4566
* moment. Although this sounds haphazard it is in fact what
4567
* you want in order to read Linux kernel state, because it
4568
* ensures that pointers in the kernel image can be interpreted
4571
* 'buffer' is the return buffer and must be at least 'size' bytes.
4572
* 'size' may be 0 to test if the call would succeed.
4574
* NB. The remote driver imposes a 64K byte limit on 'size'.
4575
* For your program to be able to work reliably over a remote
4576
* connection you should split large requests to <= 65536 bytes.
4578
* Returns: 0 in case of success or -1 in case of failure.
4581
virDomainMemoryPeek (virDomainPtr dom,
4582
unsigned long long start /* really 64 bits */,
4589
VIR_DOMAIN_DEBUG(dom, "start=%lld, size=%zi, buffer=%p, flags=%d",
4590
start, size, buffer, flags);
4592
virResetLastError();
4594
if (!VIR_IS_CONNECTED_DOMAIN (dom)) {
4595
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4596
virDispatchError(NULL);
4601
if (dom->conn->flags & VIR_CONNECT_RO) {
4602
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
4606
/* Note on access to physical memory: A VIR_MEMORY_PHYSICAL flag is
4607
* a possibility. However it isn't really useful unless the caller
4608
* can also access registers, particularly CR3 on x86 in order to
4609
* get the Page Table Directory. Since registers are different on
4610
* every architecture, that would imply another call to get the
4611
* machine registers.
4613
* The QEMU driver handles VIR_MEMORY_VIRTUAL, mapping it
4614
* to the qemu 'memsave' command which does the virtual to physical
4615
* mapping inside qemu.
4617
* The QEMU driver also handles VIR_MEMORY_PHYSICAL, mapping it
4618
* to the qemu 'pmemsave' command.
4620
* At time of writing there is no Xen driver. However the Xen
4621
* hypervisor only lets you map physical pages from other domains,
4622
* and so the Xen driver would have to do the virtual to physical
4623
* mapping by chasing 2, 3 or 4-level page tables from the PTD.
4624
* There is example code in libxc (xc_translate_foreign_address)
4625
* which does this, although we cannot copy this code directly
4626
* because of incompatible licensing.
4629
if (flags != VIR_MEMORY_VIRTUAL && flags != VIR_MEMORY_PHYSICAL) {
4630
virLibDomainError(VIR_ERR_INVALID_ARG,
4631
_("flags parameter must be VIR_MEMORY_VIRTUAL or VIR_MEMORY_PHYSICAL"));
4635
/* Allow size == 0 as an access test. */
4636
if (size > 0 && !buffer) {
4637
virLibDomainError(VIR_ERR_INVALID_ARG,
4638
_("buffer is NULL but size is non-zero"));
4642
if (conn->driver->domainMemoryPeek) {
4644
ret = conn->driver->domainMemoryPeek (dom, start, size,
4651
virLibDomainError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4654
virDispatchError(dom->conn);
4660
* virDomainGetBlockInfo:
4661
* @domain: a domain object
4662
* @path: path to the block device or file
4663
* @info: pointer to a virDomainBlockInfo structure allocated by the user
4664
* @flags: currently unused, pass zero
4666
* Extract information about a domain's block device.
4668
* Returns 0 in case of success and -1 in case of failure.
4671
virDomainGetBlockInfo(virDomainPtr domain, const char *path, virDomainBlockInfoPtr info, unsigned int flags)
4675
VIR_DOMAIN_DEBUG(domain, "info=%p flags=%u", info, flags);
4677
virResetLastError();
4679
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
4680
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4681
virDispatchError(NULL);
4685
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
4689
memset(info, 0, sizeof(virDomainBlockInfo));
4691
conn = domain->conn;
4693
if (conn->driver->domainGetBlockInfo) {
4695
ret = conn->driver->domainGetBlockInfo (domain, path, info, flags);
4701
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4704
virDispatchError(domain->conn);
4709
/************************************************************************
4711
* Handling of defined but not running domains *
4713
************************************************************************/
4716
* virDomainDefineXML:
4717
* @conn: pointer to the hypervisor connection
4718
* @xml: the XML description for the domain, preferably in UTF-8
4720
* Define a domain, but does not start it.
4721
* This definition is persistent, until explicitly undefined with
4722
* virDomainUndefine(). A previous definition for this domain would be
4723
* overriden if it already exists.
4725
* Returns NULL in case of error, a pointer to the domain otherwise
4728
virDomainDefineXML(virConnectPtr conn, const char *xml) {
4729
DEBUG("conn=%p, xml=%s", conn, xml);
4731
virResetLastError();
4733
if (!VIR_IS_CONNECT(conn)) {
4734
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
4735
virDispatchError(NULL);
4738
if (conn->flags & VIR_CONNECT_RO) {
4739
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
4743
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
4747
if (conn->driver->domainDefineXML) {
4749
ret = conn->driver->domainDefineXML (conn, xml);
4755
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4758
virDispatchError(conn);
4763
* virDomainUndefine:
4764
* @domain: pointer to a defined domain
4766
* Undefine a domain but does not stop it if it is running
4768
* Returns 0 in case of success, -1 in case of error
4771
virDomainUndefine(virDomainPtr domain) {
4774
VIR_DOMAIN_DEBUG0(domain);
4776
virResetLastError();
4778
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
4779
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4780
virDispatchError(NULL);
4783
conn = domain->conn;
4784
if (conn->flags & VIR_CONNECT_RO) {
4785
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
4789
if (conn->driver->domainUndefine) {
4791
ret = conn->driver->domainUndefine (domain);
4797
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4800
virDispatchError(domain->conn);
4805
* virConnectNumOfDefinedDomains:
4806
* @conn: pointer to the hypervisor connection
4808
* Provides the number of defined but inactive domains.
4810
* Returns the number of domain found or -1 in case of error
4813
virConnectNumOfDefinedDomains(virConnectPtr conn)
4815
DEBUG("conn=%p", conn);
4817
virResetLastError();
4819
if (!VIR_IS_CONNECT(conn)) {
4820
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
4821
virDispatchError(NULL);
4825
if (conn->driver->numOfDefinedDomains) {
4827
ret = conn->driver->numOfDefinedDomains (conn);
4833
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4836
virDispatchError(conn);
4841
* virConnectListDefinedDomains:
4842
* @conn: pointer to the hypervisor connection
4843
* @names: pointer to an array to store the names
4844
* @maxnames: size of the array
4846
* list the defined but inactive domains, stores the pointers to the names
4849
* Returns the number of names provided in the array or -1 in case of error
4852
virConnectListDefinedDomains(virConnectPtr conn, char **const names,
4854
DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
4856
virResetLastError();
4858
if (!VIR_IS_CONNECT(conn)) {
4859
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
4860
virDispatchError(NULL);
4864
if ((names == NULL) || (maxnames < 0)) {
4865
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
4869
if (conn->driver->listDefinedDomains) {
4871
ret = conn->driver->listDefinedDomains (conn, names, maxnames);
4877
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4880
virDispatchError(conn);
4886
* @domain: pointer to a defined domain
4888
* Launch a defined domain. If the call succeeds the domain moves from the
4889
* defined to the running domains pools.
4891
* Returns 0 in case of success, -1 in case of error
4894
virDomainCreate(virDomainPtr domain) {
4897
VIR_DOMAIN_DEBUG0(domain);
4899
virResetLastError();
4901
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
4902
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4903
virDispatchError(NULL);
4906
conn = domain->conn;
4907
if (conn->flags & VIR_CONNECT_RO) {
4908
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
4912
if (conn->driver->domainCreate) {
4914
ret = conn->driver->domainCreate (domain);
4920
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4923
virDispatchError(domain->conn);
4928
* virDomainCreateWithFlags:
4929
* @domain: pointer to a defined domain
4930
* @flags: bitwise-or of supported virDomainCreateFlags
4932
* Launch a defined domain. If the call succeeds the domain moves from the
4933
* defined to the running domains pools.
4935
* Returns 0 in case of success, -1 in case of error
4938
virDomainCreateWithFlags(virDomainPtr domain, unsigned int flags) {
4941
VIR_DOMAIN_DEBUG(domain, "flags=%d", flags);
4943
virResetLastError();
4945
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
4946
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4947
virDispatchError(NULL);
4950
conn = domain->conn;
4951
if (conn->flags & VIR_CONNECT_RO) {
4952
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
4956
if (conn->driver->domainCreateWithFlags) {
4958
ret = conn->driver->domainCreateWithFlags (domain, flags);
4964
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
4967
virDispatchError(domain->conn);
4972
* virDomainGetAutostart:
4973
* @domain: a domain object
4974
* @autostart: the value returned
4976
* Provides a boolean value indicating whether the domain
4977
* configured to be automatically started when the host
4980
* Returns -1 in case of error, 0 in case of success
4983
virDomainGetAutostart(virDomainPtr domain,
4988
VIR_DOMAIN_DEBUG(domain, "autostart=%p", autostart);
4990
virResetLastError();
4992
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
4993
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
4994
virDispatchError(NULL);
4998
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5002
conn = domain->conn;
5004
if (conn->driver->domainGetAutostart) {
5006
ret = conn->driver->domainGetAutostart (domain, autostart);
5012
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5015
virDispatchError(domain->conn);
5020
* virDomainSetAutostart:
5021
* @domain: a domain object
5022
* @autostart: whether the domain should be automatically started 0 or 1
5024
* Configure the domain to be automatically started
5025
* when the host machine boots.
5027
* Returns -1 in case of error, 0 in case of success
5030
virDomainSetAutostart(virDomainPtr domain,
5035
VIR_DOMAIN_DEBUG(domain, "autostart=%d", autostart);
5037
virResetLastError();
5039
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5040
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5041
virDispatchError(NULL);
5045
conn = domain->conn;
5047
if (domain->conn->flags & VIR_CONNECT_RO) {
5048
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
5052
if (conn->driver->domainSetAutostart) {
5054
ret = conn->driver->domainSetAutostart (domain, autostart);
5060
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5063
virDispatchError(domain->conn);
5068
* virDomainSetVcpus:
5069
* @domain: pointer to domain object, or NULL for Domain0
5070
* @nvcpus: the new number of virtual CPUs for this domain
5072
* Dynamically change the number of virtual CPUs used by the domain.
5073
* Note that this call may fail if the underlying virtualization hypervisor
5074
* does not support it or if growing the number is arbitrary limited.
5075
* This function requires privileged access to the hypervisor.
5077
* This command only changes the runtime configuration of the domain,
5078
* so can only be called on an active domain. It is hypervisor-dependent
5079
* whether it also affects persistent configuration; for more control,
5080
* use virDomainSetVcpusFlags().
5082
* Returns 0 in case of success, -1 in case of failure.
5086
virDomainSetVcpus(virDomainPtr domain, unsigned int nvcpus)
5090
VIR_DOMAIN_DEBUG(domain, "nvcpus=%u", nvcpus);
5092
virResetLastError();
5094
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5095
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5096
virDispatchError(NULL);
5099
if (domain->conn->flags & VIR_CONNECT_RO) {
5100
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
5105
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5108
conn = domain->conn;
5110
if (conn->driver->domainSetVcpus) {
5112
ret = conn->driver->domainSetVcpus (domain, nvcpus);
5118
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5121
virDispatchError(domain->conn);
5126
* virDomainSetVcpusFlags:
5127
* @domain: pointer to domain object, or NULL for Domain0
5128
* @nvcpus: the new number of virtual CPUs for this domain, must be at least 1
5129
* @flags: an OR'ed set of virDomainVcpuFlags
5131
* Dynamically change the number of virtual CPUs used by the domain.
5132
* Note that this call may fail if the underlying virtualization hypervisor
5133
* does not support it or if growing the number is arbitrary limited.
5134
* This function requires privileged access to the hypervisor.
5136
* @flags must include VIR_DOMAIN_VCPU_LIVE to affect a running
5137
* domain (which may fail if domain is not active), or
5138
* VIR_DOMAIN_VCPU_CONFIG to affect the next boot via the XML
5139
* description of the domain. Both flags may be set.
5141
* If @flags includes VIR_DOMAIN_VCPU_MAXIMUM, then
5142
* VIR_DOMAIN_VCPU_LIVE must be clear, and only the maximum virtual
5143
* CPU limit is altered; generally, this value must be less than or
5144
* equal to virConnectGetMaxVcpus(). Otherwise, this call affects the
5145
* current virtual CPU limit, which must be less than or equal to the
5148
* Returns 0 in case of success, -1 in case of failure.
5152
virDomainSetVcpusFlags(virDomainPtr domain, unsigned int nvcpus,
5157
VIR_DOMAIN_DEBUG(domain, "nvcpus=%u, flags=%u", nvcpus, flags);
5159
virResetLastError();
5161
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5162
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5163
virDispatchError(NULL);
5166
if (domain->conn->flags & VIR_CONNECT_RO) {
5167
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
5171
/* Perform some argument validation common to all implementations. */
5172
if (nvcpus < 1 || (unsigned short) nvcpus != nvcpus ||
5173
(flags & (VIR_DOMAIN_VCPU_LIVE | VIR_DOMAIN_VCPU_CONFIG)) == 0) {
5174
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5177
conn = domain->conn;
5179
if (conn->driver->domainSetVcpusFlags) {
5181
ret = conn->driver->domainSetVcpusFlags (domain, nvcpus, flags);
5187
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5190
virDispatchError(domain->conn);
5195
* virDomainGetVcpusFlags:
5196
* @domain: pointer to domain object, or NULL for Domain0
5197
* @flags: an OR'ed set of virDomainVcpuFlags
5199
* Query the number of virtual CPUs used by the domain. Note that
5200
* this call may fail if the underlying virtualization hypervisor does
5201
* not support it. This function requires privileged access to the
5204
* @flags must include either VIR_DOMAIN_VCPU_ACTIVE to query a
5205
* running domain (which will fail if domain is not active), or
5206
* VIR_DOMAIN_VCPU_PERSISTENT to query the XML description of the
5207
* domain. It is an error to set both flags.
5209
* If @flags includes VIR_DOMAIN_VCPU_MAXIMUM, then the maximum
5210
* virtual CPU limit is queried. Otherwise, this call queries the
5211
* current virtual CPU limit.
5213
* Returns 0 in case of success, -1 in case of failure.
5217
virDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
5221
VIR_DOMAIN_DEBUG(domain, "flags=%u", flags);
5223
virResetLastError();
5225
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5226
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5227
virDispatchError(NULL);
5231
/* Exactly one of these two flags should be set. */
5232
if (!(flags & VIR_DOMAIN_VCPU_LIVE) == !(flags & VIR_DOMAIN_VCPU_CONFIG)) {
5233
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5236
conn = domain->conn;
5238
if (conn->driver->domainGetVcpusFlags) {
5240
ret = conn->driver->domainGetVcpusFlags (domain, flags);
5246
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5249
virDispatchError(domain->conn);
5255
* @domain: pointer to domain object, or NULL for Domain0
5256
* @vcpu: virtual CPU number
5257
* @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN)
5258
* Each bit set to 1 means that corresponding CPU is usable.
5259
* Bytes are stored in little-endian order: CPU0-7, 8-15...
5260
* In each byte, lowest CPU number is least significant bit.
5261
* @maplen: number of bytes in cpumap, from 1 up to size of CPU map in
5262
* underlying virtualization system (Xen...).
5263
* If maplen < size, missing bytes are set to zero.
5264
* If maplen > size, failure code is returned.
5266
* Dynamically change the real CPUs which can be allocated to a virtual CPU.
5267
* This function requires privileged access to the hypervisor.
5269
* This command only changes the runtime configuration of the domain,
5270
* so can only be called on an active domain.
5272
* Returns 0 in case of success, -1 in case of failure.
5275
virDomainPinVcpu(virDomainPtr domain, unsigned int vcpu,
5276
unsigned char *cpumap, int maplen)
5280
VIR_DOMAIN_DEBUG(domain, "vcpu=%u, cpumap=%p, maplen=%d",
5281
vcpu, cpumap, maplen);
5283
virResetLastError();
5285
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5286
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5287
virDispatchError(NULL);
5290
if (domain->conn->flags & VIR_CONNECT_RO) {
5291
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
5295
if ((vcpu > 32000) || (cpumap == NULL) || (maplen < 1)) {
5296
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5300
conn = domain->conn;
5302
if (conn->driver->domainPinVcpu) {
5304
ret = conn->driver->domainPinVcpu (domain, vcpu, cpumap, maplen);
5310
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5313
virDispatchError(domain->conn);
5318
* virDomainGetVcpus:
5319
* @domain: pointer to domain object, or NULL for Domain0
5320
* @info: pointer to an array of virVcpuInfo structures (OUT)
5321
* @maxinfo: number of structures in info array
5322
* @cpumaps: pointer to a bit map of real CPUs for all vcpus of this
5323
* domain (in 8-bit bytes) (OUT)
5324
* If cpumaps is NULL, then no cpumap information is returned by the API.
5325
* It's assumed there is <maxinfo> cpumap in cpumaps array.
5326
* The memory allocated to cpumaps must be (maxinfo * maplen) bytes
5327
* (ie: calloc(maxinfo, maplen)).
5328
* One cpumap inside cpumaps has the format described in
5329
* virDomainPinVcpu() API.
5330
* @maplen: number of bytes in one cpumap, from 1 up to size of CPU map in
5331
* underlying virtualization system (Xen...).
5332
* Must be zero when cpumaps is NULL and positive when it is non-NULL.
5334
* Extract information about virtual CPUs of domain, store it in info array
5335
* and also in cpumaps if this pointer isn't NULL.
5337
* Returns the number of info filled in case of success, -1 in case of failure.
5340
virDomainGetVcpus(virDomainPtr domain, virVcpuInfoPtr info, int maxinfo,
5341
unsigned char *cpumaps, int maplen)
5345
VIR_DOMAIN_DEBUG(domain, "info=%p, maxinfo=%d, cpumaps=%p, maplen=%d",
5346
info, maxinfo, cpumaps, maplen);
5348
virResetLastError();
5350
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5351
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5352
virDispatchError(NULL);
5355
if ((info == NULL) || (maxinfo < 1)) {
5356
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5360
/* Ensure that domainGetVcpus (aka remoteDomainGetVcpus) does not
5361
try to memcpy anything into a NULL pointer. */
5362
if ((cpumaps == NULL && maplen != 0)
5363
|| (cpumaps && maplen <= 0)) {
5364
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5368
conn = domain->conn;
5370
if (conn->driver->domainGetVcpus) {
5372
ret = conn->driver->domainGetVcpus (domain, info, maxinfo,
5379
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5382
virDispatchError(domain->conn);
5387
* virDomainGetMaxVcpus:
5388
* @domain: pointer to domain object
5390
* Provides the maximum number of virtual CPUs supported for
5391
* the guest VM. If the guest is inactive, this is basically
5392
* the same as virConnectGetMaxVcpus(). If the guest is running
5393
* this will reflect the maximum number of virtual CPUs the
5394
* guest was booted with. For more details, see virDomainGetVcpusFlags().
5396
* Returns the maximum of virtual CPU or -1 in case of error.
5399
virDomainGetMaxVcpus(virDomainPtr domain)
5403
VIR_DOMAIN_DEBUG0(domain);
5405
virResetLastError();
5407
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5408
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5409
virDispatchError(NULL);
5413
conn = domain->conn;
5415
if (conn->driver->domainGetMaxVcpus) {
5417
ret = conn->driver->domainGetMaxVcpus (domain);
5423
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5426
virDispatchError(domain->conn);
5431
* virDomainGetSecurityLabel:
5432
* @domain: a domain object
5433
* @seclabel: pointer to a virSecurityLabel structure
5435
* Extract security label of an active domain. The 'label' field
5436
* in the @seclabel argument will be initialized to the empty
5437
* string if the domain is not running under a security model.
5439
* Returns 0 in case of success, -1 in case of failure
5442
virDomainGetSecurityLabel(virDomainPtr domain, virSecurityLabelPtr seclabel)
5446
VIR_DOMAIN_DEBUG(domain, "seclabel=%p", seclabel);
5448
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5449
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5450
virDispatchError(NULL);
5454
if (seclabel == NULL) {
5455
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5459
conn = domain->conn;
5461
if (conn->driver->domainGetSecurityLabel) {
5463
ret = conn->driver->domainGetSecurityLabel(domain, seclabel);
5469
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5472
virDispatchError(domain->conn);
5477
* virNodeGetSecurityModel:
5478
* @conn: a connection object
5479
* @secmodel: pointer to a virSecurityModel structure
5481
* Extract the security model of a hypervisor. The 'model' field
5482
* in the @secmodel argument may be initialized to the empty
5483
* string if the driver has not activated a security model.
5485
* Returns 0 in case of success, -1 in case of failure
5488
virNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr secmodel)
5490
DEBUG("conn=%p secmodel=%p", conn, secmodel);
5492
if (!VIR_IS_CONNECT(conn)) {
5493
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
5494
virDispatchError(NULL);
5498
if (secmodel == NULL) {
5499
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5503
if (conn->driver->nodeGetSecurityModel) {
5505
ret = conn->driver->nodeGetSecurityModel(conn, secmodel);
5511
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5514
virDispatchError(conn);
5519
* virDomainAttachDevice:
5520
* @domain: pointer to domain object
5521
* @xml: pointer to XML description of one device
5523
* Create a virtual device attachment to backend. This function,
5524
* having hotplug semantics, is only allowed on an active domain.
5526
* For compatibility, this method can also be used to change the media
5527
* in an existing CDROM/Floppy device, however, applications are
5528
* recommended to use the virDomainUpdateDeviceFlag method instead.
5530
* Returns 0 in case of success, -1 in case of failure.
5533
virDomainAttachDevice(virDomainPtr domain, const char *xml)
5537
VIR_DOMAIN_DEBUG(domain, "xml=%s", xml);
5539
virResetLastError();
5541
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5542
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5543
virDispatchError(NULL);
5546
if (domain->conn->flags & VIR_CONNECT_RO) {
5547
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
5550
conn = domain->conn;
5552
if (conn->driver->domainAttachDevice) {
5554
ret = conn->driver->domainAttachDevice (domain, xml);
5560
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5563
virDispatchError(domain->conn);
5568
* virDomainAttachDeviceFlags:
5569
* @domain: pointer to domain object
5570
* @xml: pointer to XML description of one device
5571
* @flags: an OR'ed set of virDomainDeviceModifyFlags
5573
* Attach a virtual device to a domain, using the flags parameter
5574
* to control how the device is attached. VIR_DOMAIN_DEVICE_MODIFY_CURRENT
5575
* specifies that the device allocation is made based on current domain
5576
* state. VIR_DOMAIN_DEVICE_MODIFY_LIVE specifies that the device shall be
5577
* allocated to the active domain instance only and is not added to the
5578
* persisted domain configuration. VIR_DOMAIN_DEVICE_MODIFY_CONFIG
5579
* specifies that the device shall be allocated to the persisted domain
5580
* configuration only. Note that the target hypervisor must return an
5581
* error if unable to satisfy flags. E.g. the hypervisor driver will
5582
* return failure if LIVE is specified but it only supports modifying the
5583
* persisted device allocation.
5585
* For compatibility, this method can also be used to change the media
5586
* in an existing CDROM/Floppy device, however, applications are
5587
* recommended to use the virDomainUpdateDeviceFlag method instead.
5589
* Returns 0 in case of success, -1 in case of failure.
5592
virDomainAttachDeviceFlags(virDomainPtr domain,
5593
const char *xml, unsigned int flags)
5597
VIR_DOMAIN_DEBUG(domain, "xml=%s, flags=%d", xml, flags);
5599
virResetLastError();
5601
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5602
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5603
virDispatchError(NULL);
5606
if (domain->conn->flags & VIR_CONNECT_RO) {
5607
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
5610
conn = domain->conn;
5612
if (conn->driver->domainAttachDeviceFlags) {
5614
ret = conn->driver->domainAttachDeviceFlags(domain, xml, flags);
5620
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5623
virDispatchError(domain->conn);
5628
* virDomainDetachDevice:
5629
* @domain: pointer to domain object
5630
* @xml: pointer to XML description of one device
5632
* Destroy a virtual device attachment to backend. This function,
5633
* having hot-unplug semantics, is only allowed on an active domain.
5635
* Returns 0 in case of success, -1 in case of failure.
5638
virDomainDetachDevice(virDomainPtr domain, const char *xml)
5642
VIR_DOMAIN_DEBUG(domain, "xml=%s", xml);
5644
virResetLastError();
5646
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5647
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5648
virDispatchError(NULL);
5651
if (domain->conn->flags & VIR_CONNECT_RO) {
5652
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
5655
conn = domain->conn;
5657
if (conn->driver->domainDetachDevice) {
5659
ret = conn->driver->domainDetachDevice (domain, xml);
5665
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5668
virDispatchError(domain->conn);
5673
* virDomainDetachDeviceFlags:
5674
* @domain: pointer to domain object
5675
* @xml: pointer to XML description of one device
5676
* @flags: an OR'ed set of virDomainDeviceModifyFlags
5678
* Detach a virtual device from a domain, using the flags parameter
5679
* to control how the device is detached. VIR_DOMAIN_DEVICE_MODIFY_CURRENT
5680
* specifies that the device allocation is removed based on current domain
5681
* state. VIR_DOMAIN_DEVICE_MODIFY_LIVE specifies that the device shall be
5682
* deallocated from the active domain instance only and is not from the
5683
* persisted domain configuration. VIR_DOMAIN_DEVICE_MODIFY_CONFIG
5684
* specifies that the device shall be deallocated from the persisted domain
5685
* configuration only. Note that the target hypervisor must return an
5686
* error if unable to satisfy flags. E.g. the hypervisor driver will
5687
* return failure if LIVE is specified but it only supports removing the
5688
* persisted device allocation.
5690
* Returns 0 in case of success, -1 in case of failure.
5693
virDomainDetachDeviceFlags(virDomainPtr domain,
5694
const char *xml, unsigned int flags)
5698
VIR_DOMAIN_DEBUG(domain, "xml=%s, flags=%d", xml, flags);
5700
virResetLastError();
5702
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5703
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5704
virDispatchError(NULL);
5707
if (domain->conn->flags & VIR_CONNECT_RO) {
5708
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
5711
conn = domain->conn;
5713
if (conn->driver->domainDetachDeviceFlags) {
5715
ret = conn->driver->domainDetachDeviceFlags(domain, xml, flags);
5721
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5724
virDispatchError(domain->conn);
5729
* virDomainUpdateDeviceFlags:
5730
* @domain: pointer to domain object
5731
* @xml: pointer to XML description of one device
5732
* @flags: an OR'ed set of virDomainDeviceModifyFlags
5734
* Change a virtual device on a domain, using the flags parameter
5735
* to control how the device is changed. VIR_DOMAIN_DEVICE_MODIFY_CURRENT
5736
* specifies that the device change is made based on current domain
5737
* state. VIR_DOMAIN_DEVICE_MODIFY_LIVE specifies that the device shall be
5738
* changed on the active domain instance only and is not added to the
5739
* persisted domain configuration. VIR_DOMAIN_DEVICE_MODIFY_CONFIG
5740
* specifies that the device shall be changed on the persisted domain
5741
* configuration only. Note that the target hypervisor must return an
5742
* error if unable to satisfy flags. E.g. the hypervisor driver will
5743
* return failure if LIVE is specified but it only supports modifying the
5744
* persisted device allocation.
5746
* This method is used for actions such changing CDROM/Floppy device
5747
* media, altering the graphics configuration such as password,
5748
* reconfiguring the NIC device backend connectivity, etc.
5750
* Returns 0 in case of success, -1 in case of failure.
5753
virDomainUpdateDeviceFlags(virDomainPtr domain,
5754
const char *xml, unsigned int flags)
5758
VIR_DOMAIN_DEBUG(domain, "xml=%s, flags=%d", xml, flags);
5760
virResetLastError();
5762
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
5763
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
5764
virDispatchError(NULL);
5767
if (domain->conn->flags & VIR_CONNECT_RO) {
5768
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
5771
conn = domain->conn;
5773
if (conn->driver->domainUpdateDeviceFlags) {
5775
ret = conn->driver->domainUpdateDeviceFlags(domain, xml, flags);
5781
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5784
virDispatchError(domain->conn);
5789
* virNodeGetCellsFreeMemory:
5790
* @conn: pointer to the hypervisor connection
5791
* @freeMems: pointer to the array of unsigned long long
5792
* @startCell: index of first cell to return freeMems info on.
5793
* @maxCells: Maximum number of cells for which freeMems information can
5796
* This call returns the amount of free memory in one or more NUMA cells.
5797
* The @freeMems array must be allocated by the caller and will be filled
5798
* with the amount of free memory in bytes for each cell requested,
5799
* starting with startCell (in freeMems[0]), up to either
5800
* (startCell + maxCells), or the number of additional cells in the node,
5801
* whichever is smaller.
5803
* Returns the number of entries filled in freeMems, or -1 in case of error.
5807
virNodeGetCellsFreeMemory(virConnectPtr conn, unsigned long long *freeMems,
5808
int startCell, int maxCells)
5810
DEBUG("conn=%p, freeMems=%p, startCell=%d, maxCells=%d",
5811
conn, freeMems, startCell, maxCells);
5813
virResetLastError();
5815
if (!VIR_IS_CONNECT(conn)) {
5816
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
5817
virDispatchError(NULL);
5821
if ((freeMems == NULL) || (maxCells <= 0) || (startCell < 0)) {
5822
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5826
if (conn->driver->nodeGetCellsFreeMemory) {
5828
ret = conn->driver->nodeGetCellsFreeMemory (conn, freeMems, startCell, maxCells);
5834
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5837
virDispatchError(conn);
5842
* virNetworkGetConnect:
5843
* @net: pointer to a network
5845
* Provides the connection pointer associated with a network. The
5846
* reference counter on the connection is not increased by this
5849
* WARNING: When writing libvirt bindings in other languages, do
5850
* not use this function. Instead, store the connection and
5851
* the network object together.
5853
* Returns the virConnectPtr or NULL in case of failure.
5856
virNetworkGetConnect (virNetworkPtr net)
5858
DEBUG("net=%p", net);
5860
virResetLastError();
5862
if (!VIR_IS_CONNECTED_NETWORK (net)) {
5863
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
5864
virDispatchError(NULL);
5871
* virConnectNumOfNetworks:
5872
* @conn: pointer to the hypervisor connection
5874
* Provides the number of active networks.
5876
* Returns the number of network found or -1 in case of error
5879
virConnectNumOfNetworks(virConnectPtr conn)
5881
DEBUG("conn=%p", conn);
5883
virResetLastError();
5885
if (!VIR_IS_CONNECT(conn)) {
5886
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
5887
virDispatchError(NULL);
5891
if (conn->networkDriver && conn->networkDriver->numOfNetworks) {
5893
ret = conn->networkDriver->numOfNetworks (conn);
5899
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5902
virDispatchError(conn);
5907
* virConnectListNetworks:
5908
* @conn: pointer to the hypervisor connection
5909
* @names: array to collect the list of names of active networks
5910
* @maxnames: size of @names
5912
* Collect the list of active networks, and store their names in @names
5914
* Returns the number of networks found or -1 in case of error
5917
virConnectListNetworks(virConnectPtr conn, char **const names, int maxnames)
5919
DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
5921
virResetLastError();
5923
if (!VIR_IS_CONNECT(conn)) {
5924
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
5925
virDispatchError(NULL);
5929
if ((names == NULL) || (maxnames < 0)) {
5930
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
5934
if (conn->networkDriver && conn->networkDriver->listNetworks) {
5936
ret = conn->networkDriver->listNetworks (conn, names, maxnames);
5942
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5945
virDispatchError(conn);
5950
* virConnectNumOfDefinedNetworks:
5951
* @conn: pointer to the hypervisor connection
5953
* Provides the number of inactive networks.
5955
* Returns the number of networks found or -1 in case of error
5958
virConnectNumOfDefinedNetworks(virConnectPtr conn)
5960
DEBUG("conn=%p", conn);
5962
virResetLastError();
5964
if (!VIR_IS_CONNECT(conn)) {
5965
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
5966
virDispatchError(NULL);
5970
if (conn->networkDriver && conn->networkDriver->numOfDefinedNetworks) {
5972
ret = conn->networkDriver->numOfDefinedNetworks (conn);
5978
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
5981
virDispatchError(conn);
5986
* virConnectListDefinedNetworks:
5987
* @conn: pointer to the hypervisor connection
5988
* @names: pointer to an array to store the names
5989
* @maxnames: size of the array
5991
* list the inactive networks, stores the pointers to the names in @names
5993
* Returns the number of names provided in the array or -1 in case of error
5996
virConnectListDefinedNetworks(virConnectPtr conn, char **const names,
5999
DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
6001
virResetLastError();
6003
if (!VIR_IS_CONNECT(conn)) {
6004
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6005
virDispatchError(NULL);
6009
if ((names == NULL) || (maxnames < 0)) {
6010
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6014
if (conn->networkDriver && conn->networkDriver->listDefinedNetworks) {
6016
ret = conn->networkDriver->listDefinedNetworks (conn,
6023
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6026
virDispatchError(conn);
6031
* virNetworkLookupByName:
6032
* @conn: pointer to the hypervisor connection
6033
* @name: name for the network
6035
* Try to lookup a network on the given hypervisor based on its name.
6037
* Returns a new network object or NULL in case of failure. If the
6038
* network cannot be found, then VIR_ERR_NO_NETWORK error is raised.
6041
virNetworkLookupByName(virConnectPtr conn, const char *name)
6043
DEBUG("conn=%p, name=%s", conn, name);
6045
virResetLastError();
6047
if (!VIR_IS_CONNECT(conn)) {
6048
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6049
virDispatchError(NULL);
6053
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6057
if (conn->networkDriver && conn->networkDriver->networkLookupByName) {
6059
ret = conn->networkDriver->networkLookupByName (conn, name);
6065
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6068
virDispatchError(conn);
6073
* virNetworkLookupByUUID:
6074
* @conn: pointer to the hypervisor connection
6075
* @uuid: the raw UUID for the network
6077
* Try to lookup a network on the given hypervisor based on its UUID.
6079
* Returns a new network object or NULL in case of failure. If the
6080
* network cannot be found, then VIR_ERR_NO_NETWORK error is raised.
6083
virNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
6085
char uuidstr[VIR_UUID_STRING_BUFLEN];
6086
virUUIDFormat(uuid, uuidstr);
6088
DEBUG("conn=%p, uuid=%s", conn, uuidstr);
6090
virResetLastError();
6092
if (!VIR_IS_CONNECT(conn)) {
6093
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6094
virDispatchError(NULL);
6098
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6102
if (conn->networkDriver && conn->networkDriver->networkLookupByUUID){
6104
ret = conn->networkDriver->networkLookupByUUID (conn, uuid);
6110
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6113
virDispatchError(conn);
6118
* virNetworkLookupByUUIDString:
6119
* @conn: pointer to the hypervisor connection
6120
* @uuidstr: the string UUID for the network
6122
* Try to lookup a network on the given hypervisor based on its UUID.
6124
* Returns a new network object or NULL in case of failure. If the
6125
* network cannot be found, then VIR_ERR_NO_NETWORK error is raised.
6128
virNetworkLookupByUUIDString(virConnectPtr conn, const char *uuidstr)
6130
unsigned char uuid[VIR_UUID_BUFLEN];
6131
DEBUG("conn=%p, uuidstr=%s", conn, uuidstr);
6133
virResetLastError();
6135
if (!VIR_IS_CONNECT(conn)) {
6136
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6137
virDispatchError(NULL);
6140
if (uuidstr == NULL) {
6141
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6145
if (virUUIDParse(uuidstr, uuid) < 0) {
6146
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6150
return virNetworkLookupByUUID(conn, &uuid[0]);
6153
virDispatchError(conn);
6158
* virNetworkCreateXML:
6159
* @conn: pointer to the hypervisor connection
6160
* @xmlDesc: an XML description of the network
6162
* Create and start a new virtual network, based on an XML description
6163
* similar to the one returned by virNetworkGetXMLDesc()
6165
* Returns a new network object or NULL in case of failure
6168
virNetworkCreateXML(virConnectPtr conn, const char *xmlDesc)
6170
DEBUG("conn=%p, xmlDesc=%s", conn, xmlDesc);
6172
virResetLastError();
6174
if (!VIR_IS_CONNECT(conn)) {
6175
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6176
virDispatchError(NULL);
6179
if (xmlDesc == NULL) {
6180
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6183
if (conn->flags & VIR_CONNECT_RO) {
6184
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
6188
if (conn->networkDriver && conn->networkDriver->networkCreateXML) {
6190
ret = conn->networkDriver->networkCreateXML (conn, xmlDesc);
6196
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6199
virDispatchError(conn);
6204
* virNetworkDefineXML:
6205
* @conn: pointer to the hypervisor connection
6206
* @xml: the XML description for the network, preferably in UTF-8
6208
* Define a network, but does not create it
6210
* Returns NULL in case of error, a pointer to the network otherwise
6213
virNetworkDefineXML(virConnectPtr conn, const char *xml)
6215
DEBUG("conn=%p, xml=%s", conn, xml);
6217
virResetLastError();
6219
if (!VIR_IS_CONNECT(conn)) {
6220
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6221
virDispatchError(NULL);
6224
if (conn->flags & VIR_CONNECT_RO) {
6225
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
6229
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6233
if (conn->networkDriver && conn->networkDriver->networkDefineXML) {
6235
ret = conn->networkDriver->networkDefineXML (conn, xml);
6241
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6244
virDispatchError(conn);
6249
* virNetworkUndefine:
6250
* @network: pointer to a defined network
6252
* Undefine a network but does not stop it if it is running
6254
* Returns 0 in case of success, -1 in case of error
6257
virNetworkUndefine(virNetworkPtr network) {
6259
DEBUG("network=%p", network);
6261
virResetLastError();
6263
if (!VIR_IS_CONNECTED_NETWORK(network)) {
6264
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6265
virDispatchError(NULL);
6268
conn = network->conn;
6269
if (conn->flags & VIR_CONNECT_RO) {
6270
virLibNetworkError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
6274
if (conn->networkDriver && conn->networkDriver->networkUndefine) {
6276
ret = conn->networkDriver->networkUndefine (network);
6282
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6285
virDispatchError(network->conn);
6291
* @network: pointer to a defined network
6293
* Create and start a defined network. If the call succeed the network
6294
* moves from the defined to the running networks pools.
6296
* Returns 0 in case of success, -1 in case of error
6299
virNetworkCreate(virNetworkPtr network)
6302
DEBUG("network=%p", network);
6304
virResetLastError();
6306
if (!VIR_IS_CONNECTED_NETWORK(network)) {
6307
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6308
virDispatchError(NULL);
6311
conn = network->conn;
6312
if (conn->flags & VIR_CONNECT_RO) {
6313
virLibNetworkError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
6317
if (conn->networkDriver && conn->networkDriver->networkCreate) {
6319
ret = conn->networkDriver->networkCreate (network);
6325
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6328
virDispatchError(network->conn);
6333
* virNetworkDestroy:
6334
* @network: a network object
6336
* Destroy the network object. The running instance is shutdown if not down
6337
* already and all resources used by it are given back to the hypervisor. This
6338
* does not free the associated virNetworkPtr object.
6339
* This function may require privileged access
6341
* Returns 0 in case of success and -1 in case of failure.
6344
virNetworkDestroy(virNetworkPtr network)
6347
DEBUG("network=%p", network);
6349
virResetLastError();
6351
if (!VIR_IS_CONNECTED_NETWORK(network)) {
6352
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6353
virDispatchError(NULL);
6357
conn = network->conn;
6358
if (conn->flags & VIR_CONNECT_RO) {
6359
virLibNetworkError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
6363
if (conn->networkDriver && conn->networkDriver->networkDestroy) {
6365
ret = conn->networkDriver->networkDestroy (network);
6371
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6374
virDispatchError(network->conn);
6380
* @network: a network object
6382
* Free the network object. The running instance is kept alive.
6383
* The data structure is freed and should not be used thereafter.
6385
* Returns 0 in case of success and -1 in case of failure.
6388
virNetworkFree(virNetworkPtr network)
6390
DEBUG("network=%p", network);
6392
virResetLastError();
6394
if (!VIR_IS_CONNECTED_NETWORK(network)) {
6395
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6396
virDispatchError(NULL);
6399
if (virUnrefNetwork(network) < 0) {
6400
virDispatchError(NULL);
6408
* @network: the network to hold a reference on
6410
* Increment the reference count on the network. For each
6411
* additional call to this method, there shall be a corresponding
6412
* call to virNetworkFree to release the reference count, once
6413
* the caller no longer needs the reference to this object.
6415
* This method is typically useful for applications where multiple
6416
* threads are using a connection, and it is required that the
6417
* connection remain open until all threads have finished using
6418
* it. ie, each new thread using a network would increment
6419
* the reference count.
6421
* Returns 0 in case of success, -1 in case of failure.
6424
virNetworkRef(virNetworkPtr network)
6426
if ((!VIR_IS_CONNECTED_NETWORK(network))) {
6427
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6428
virDispatchError(NULL);
6431
virMutexLock(&network->conn->lock);
6432
DEBUG("network=%p refs=%d", network, network->refs);
6434
virMutexUnlock(&network->conn->lock);
6439
* virNetworkGetName:
6440
* @network: a network object
6442
* Get the public name for that network
6444
* Returns a pointer to the name or NULL, the string need not be deallocated
6445
* its lifetime will be the same as the network object.
6448
virNetworkGetName(virNetworkPtr network)
6450
DEBUG("network=%p", network);
6452
virResetLastError();
6454
if (!VIR_IS_NETWORK(network)) {
6455
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6456
virDispatchError(NULL);
6459
return network->name;
6463
* virNetworkGetUUID:
6464
* @network: a network object
6465
* @uuid: pointer to a VIR_UUID_BUFLEN bytes array
6467
* Get the UUID for a network
6469
* Returns -1 in case of error, 0 in case of success
6472
virNetworkGetUUID(virNetworkPtr network, unsigned char *uuid)
6474
DEBUG("network=%p, uuid=%p", network, uuid);
6476
virResetLastError();
6478
if (!VIR_IS_NETWORK(network)) {
6479
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6480
virDispatchError(NULL);
6484
virLibNetworkError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6488
memcpy(uuid, &network->uuid[0], VIR_UUID_BUFLEN);
6493
virDispatchError(network->conn);
6498
* virNetworkGetUUIDString:
6499
* @network: a network object
6500
* @buf: pointer to a VIR_UUID_STRING_BUFLEN bytes array
6502
* Get the UUID for a network as string. For more information about
6505
* Returns -1 in case of error, 0 in case of success
6508
virNetworkGetUUIDString(virNetworkPtr network, char *buf)
6510
unsigned char uuid[VIR_UUID_BUFLEN];
6511
DEBUG("network=%p, buf=%p", network, buf);
6513
virResetLastError();
6515
if (!VIR_IS_NETWORK(network)) {
6516
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6517
virDispatchError(NULL);
6521
virLibNetworkError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6525
if (virNetworkGetUUID(network, &uuid[0]))
6528
virUUIDFormat(uuid, buf);
6532
virDispatchError(network->conn);
6537
* virNetworkGetXMLDesc:
6538
* @network: a network object
6539
* @flags: an OR'ed set of extraction flags, not used yet
6541
* Provide an XML description of the network. The description may be reused
6542
* later to relaunch the network with virNetworkCreateXML().
6544
* Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
6545
* the caller must free() the returned value.
6548
virNetworkGetXMLDesc(virNetworkPtr network, int flags)
6551
DEBUG("network=%p, flags=%d", network, flags);
6553
virResetLastError();
6555
if (!VIR_IS_CONNECTED_NETWORK(network)) {
6556
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6557
virDispatchError(NULL);
6561
virLibNetworkError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6565
conn = network->conn;
6567
if (conn->networkDriver && conn->networkDriver->networkDumpXML) {
6569
ret = conn->networkDriver->networkDumpXML (network, flags);
6575
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6578
virDispatchError(network->conn);
6583
* virNetworkGetBridgeName:
6584
* @network: a network object
6586
* Provides a bridge interface name to which a domain may connect
6587
* a network interface in order to join the network.
6589
* Returns a 0 terminated interface name, or NULL in case of error.
6590
* the caller must free() the returned value.
6593
virNetworkGetBridgeName(virNetworkPtr network)
6596
DEBUG("network=%p", network);
6598
virResetLastError();
6600
if (!VIR_IS_CONNECTED_NETWORK(network)) {
6601
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6602
virDispatchError(NULL);
6606
conn = network->conn;
6608
if (conn->networkDriver && conn->networkDriver->networkGetBridgeName) {
6610
ret = conn->networkDriver->networkGetBridgeName (network);
6616
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6619
virDispatchError(network->conn);
6624
* virNetworkGetAutostart:
6625
* @network: a network object
6626
* @autostart: the value returned
6628
* Provides a boolean value indicating whether the network
6629
* configured to be automatically started when the host
6632
* Returns -1 in case of error, 0 in case of success
6635
virNetworkGetAutostart(virNetworkPtr network,
6639
DEBUG("network=%p, autostart=%p", network, autostart);
6641
virResetLastError();
6643
if (!VIR_IS_CONNECTED_NETWORK(network)) {
6644
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6645
virDispatchError(NULL);
6649
virLibNetworkError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6653
conn = network->conn;
6655
if (conn->networkDriver && conn->networkDriver->networkGetAutostart) {
6657
ret = conn->networkDriver->networkGetAutostart (network, autostart);
6663
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6666
virDispatchError(network->conn);
6671
* virNetworkSetAutostart:
6672
* @network: a network object
6673
* @autostart: whether the network should be automatically started 0 or 1
6675
* Configure the network to be automatically started
6676
* when the host machine boots.
6678
* Returns -1 in case of error, 0 in case of success
6681
virNetworkSetAutostart(virNetworkPtr network,
6685
DEBUG("network=%p, autostart=%d", network, autostart);
6687
virResetLastError();
6689
if (!VIR_IS_CONNECTED_NETWORK(network)) {
6690
virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
6691
virDispatchError(NULL);
6695
if (network->conn->flags & VIR_CONNECT_RO) {
6696
virLibNetworkError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
6700
conn = network->conn;
6702
if (conn->networkDriver && conn->networkDriver->networkSetAutostart) {
6704
ret = conn->networkDriver->networkSetAutostart (network, autostart);
6710
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6713
virDispatchError(network->conn);
6718
* virInterfaceGetConnect:
6719
* @iface: pointer to an interface
6721
* Provides the connection pointer associated with an interface. The
6722
* reference counter on the connection is not increased by this
6725
* WARNING: When writing libvirt bindings in other languages, do
6726
* not use this function. Instead, store the connection and
6727
* the interface object together.
6729
* Returns the virConnectPtr or NULL in case of failure.
6732
virInterfaceGetConnect (virInterfacePtr iface)
6734
DEBUG("iface=%p", iface);
6736
virResetLastError();
6738
if (!VIR_IS_CONNECTED_INTERFACE (iface)) {
6739
virLibInterfaceError(VIR_ERR_INVALID_INTERFACE, __FUNCTION__);
6740
virDispatchError(NULL);
6747
* virConnectNumOfInterfaces:
6748
* @conn: pointer to the hypervisor connection
6750
* Provides the number of active interfaces on the physical host.
6752
* Returns the number of active interfaces found or -1 in case of error
6755
virConnectNumOfInterfaces(virConnectPtr conn)
6757
DEBUG("conn=%p", conn);
6759
virResetLastError();
6761
if (!VIR_IS_CONNECT(conn)) {
6762
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6763
virDispatchError(NULL);
6767
if (conn->interfaceDriver && conn->interfaceDriver->numOfInterfaces) {
6769
ret = conn->interfaceDriver->numOfInterfaces (conn);
6775
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6778
virDispatchError(conn);
6783
* virConnectListInterfaces:
6784
* @conn: pointer to the hypervisor connection
6785
* @names: array to collect the list of names of interfaces
6786
* @maxnames: size of @names
6788
* Collect the list of active physical host interfaces,
6789
* and store their names in @names
6791
* Returns the number of interfaces found or -1 in case of error
6794
virConnectListInterfaces(virConnectPtr conn, char **const names, int maxnames)
6796
DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
6798
virResetLastError();
6800
if (!VIR_IS_CONNECT(conn)) {
6801
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6802
virDispatchError(NULL);
6806
if ((names == NULL) || (maxnames < 0)) {
6807
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6811
if (conn->interfaceDriver && conn->interfaceDriver->listInterfaces) {
6813
ret = conn->interfaceDriver->listInterfaces (conn, names, maxnames);
6819
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6822
virDispatchError(conn);
6827
* virConnectNumOfDefinedInterfaces:
6828
* @conn: pointer to the hypervisor connection
6830
* Provides the number of defined (inactive) interfaces on the physical host.
6832
* Returns the number of defined interface found or -1 in case of error
6835
virConnectNumOfDefinedInterfaces(virConnectPtr conn)
6837
DEBUG("conn=%p", conn);
6839
virResetLastError();
6841
if (!VIR_IS_CONNECT(conn)) {
6842
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6843
virDispatchError(NULL);
6847
if (conn->interfaceDriver && conn->interfaceDriver->numOfDefinedInterfaces) {
6849
ret = conn->interfaceDriver->numOfDefinedInterfaces (conn);
6855
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6858
virDispatchError(conn);
6863
* virConnectListDefinedInterfaces:
6864
* @conn: pointer to the hypervisor connection
6865
* @names: array to collect the list of names of interfaces
6866
* @maxnames: size of @names
6868
* Collect the list of defined (inactive) physical host interfaces,
6869
* and store their names in @names.
6871
* Returns the number of interfaces found or -1 in case of error
6874
virConnectListDefinedInterfaces(virConnectPtr conn,
6878
DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
6880
virResetLastError();
6882
if (!VIR_IS_CONNECT(conn)) {
6883
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6884
virDispatchError(NULL);
6888
if ((names == NULL) || (maxnames < 0)) {
6889
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6893
if (conn->interfaceDriver && conn->interfaceDriver->listDefinedInterfaces) {
6895
ret = conn->interfaceDriver->listDefinedInterfaces (conn, names, maxnames);
6901
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6904
virDispatchError(conn);
6909
* virInterfaceLookupByName:
6910
* @conn: pointer to the hypervisor connection
6911
* @name: name for the interface
6913
* Try to lookup an interface on the given hypervisor based on its name.
6915
* Returns a new interface object or NULL in case of failure. If the
6916
* interface cannot be found, then VIR_ERR_NO_INTERFACE error is raised.
6919
virInterfaceLookupByName(virConnectPtr conn, const char *name)
6921
DEBUG("conn=%p, name=%s", conn, name);
6923
virResetLastError();
6925
if (!VIR_IS_CONNECT(conn)) {
6926
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6927
virDispatchError(NULL);
6931
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6935
if (conn->interfaceDriver && conn->interfaceDriver->interfaceLookupByName) {
6936
virInterfacePtr ret;
6937
ret = conn->interfaceDriver->interfaceLookupByName (conn, name);
6943
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6946
virDispatchError(conn);
6951
* virInterfaceLookupByMACString:
6952
* @conn: pointer to the hypervisor connection
6953
* @macstr: the MAC for the interface (null-terminated ASCII format)
6955
* Try to lookup an interface on the given hypervisor based on its MAC.
6957
* Returns a new interface object or NULL in case of failure. If the
6958
* interface cannot be found, then VIR_ERR_NO_INTERFACE error is raised.
6961
virInterfaceLookupByMACString(virConnectPtr conn, const char *macstr)
6963
DEBUG("conn=%p, macstr=%s", conn, macstr);
6965
virResetLastError();
6967
if (!VIR_IS_CONNECT(conn)) {
6968
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
6969
virDispatchError(NULL);
6972
if (macstr == NULL) {
6973
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
6977
if (conn->interfaceDriver && conn->interfaceDriver->interfaceLookupByMACString) {
6978
virInterfacePtr ret;
6979
ret = conn->interfaceDriver->interfaceLookupByMACString (conn, macstr);
6985
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
6988
virDispatchError(conn);
6993
* virInterfaceGetName:
6994
* @iface: an interface object
6996
* Get the public name for that interface
6998
* Returns a pointer to the name or NULL, the string need not be deallocated
6999
* its lifetime will be the same as the interface object.
7002
virInterfaceGetName(virInterfacePtr iface)
7004
DEBUG("iface=%p", iface);
7006
virResetLastError();
7008
if (!VIR_IS_INTERFACE(iface)) {
7009
virLibInterfaceError(VIR_ERR_INVALID_INTERFACE, __FUNCTION__);
7010
virDispatchError(NULL);
7017
* virInterfaceGetMACString:
7018
* @iface: an interface object
7020
* Get the MAC for an interface as string. For more information about
7023
* Returns a pointer to the MAC address (in null-terminated ASCII
7024
* format) or NULL, the string need not be deallocated its lifetime
7025
* will be the same as the interface object.
7028
virInterfaceGetMACString(virInterfacePtr iface)
7030
DEBUG("iface=%p", iface);
7032
virResetLastError();
7034
if (!VIR_IS_INTERFACE(iface)) {
7035
virLibInterfaceError(VIR_ERR_INVALID_INTERFACE, __FUNCTION__);
7036
virDispatchError(NULL);
7043
* virInterfaceGetXMLDesc:
7044
* @iface: an interface object
7045
* @flags: an OR'ed set of extraction flags. Current valid bits:
7047
* VIR_INTERFACE_XML_INACTIVE - return the static configuration,
7048
* suitable for use redefining the
7049
* interface via virInterfaceDefineXML()
7051
* Provide an XML description of the interface. If
7052
* VIR_INTERFACE_XML_INACTIVE is set, the description may be reused
7053
* later to redefine the interface with virInterfaceDefineXML(). If it
7054
* is not set, the ip address and netmask will be the current live
7055
* setting of the interface, not the settings from the config files.
7057
* Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
7058
* the caller must free() the returned value.
7061
virInterfaceGetXMLDesc(virInterfacePtr iface, unsigned int flags)
7064
DEBUG("iface=%p, flags=%d", iface, flags);
7066
virResetLastError();
7068
if (!VIR_IS_CONNECTED_INTERFACE(iface)) {
7069
virLibInterfaceError(VIR_ERR_INVALID_INTERFACE, __FUNCTION__);
7070
virDispatchError(NULL);
7073
if ((flags & ~VIR_INTERFACE_XML_INACTIVE) != 0) {
7074
virLibInterfaceError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7080
if (conn->interfaceDriver && conn->interfaceDriver->interfaceGetXMLDesc) {
7082
ret = conn->interfaceDriver->interfaceGetXMLDesc (iface, flags);
7088
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7091
virDispatchError(iface->conn);
7096
* virInterfaceDefineXML:
7097
* @conn: pointer to the hypervisor connection
7098
* @xml: the XML description for the interface, preferably in UTF-8
7099
* @flags: and OR'ed set of extraction flags, not used yet
7101
* Define an interface (or modify existing interface configuration)
7103
* Returns NULL in case of error, a pointer to the interface otherwise
7106
virInterfaceDefineXML(virConnectPtr conn, const char *xml, unsigned int flags)
7108
DEBUG("conn=%p, xml=%s, flags=%d", conn, xml, flags);
7110
virResetLastError();
7112
if (!VIR_IS_CONNECT(conn)) {
7113
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7114
virDispatchError(NULL);
7117
if (conn->flags & VIR_CONNECT_RO) {
7118
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
7122
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7126
if (conn->interfaceDriver && conn->interfaceDriver->interfaceDefineXML) {
7127
virInterfacePtr ret;
7128
ret = conn->interfaceDriver->interfaceDefineXML (conn, xml, flags);
7134
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7137
virDispatchError(conn);
7142
* virInterfaceUndefine:
7143
* @iface: pointer to a defined interface
7145
* Undefine an interface, ie remove it from the config.
7146
* This does not free the associated virInterfacePtr object.
7148
* Returns 0 in case of success, -1 in case of error
7151
virInterfaceUndefine(virInterfacePtr iface) {
7153
DEBUG("iface=%p", iface);
7155
virResetLastError();
7157
if (!VIR_IS_CONNECTED_INTERFACE(iface)) {
7158
virLibInterfaceError(VIR_ERR_INVALID_INTERFACE, __FUNCTION__);
7159
virDispatchError(NULL);
7163
if (conn->flags & VIR_CONNECT_RO) {
7164
virLibInterfaceError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
7168
if (conn->interfaceDriver && conn->interfaceDriver->interfaceUndefine) {
7170
ret = conn->interfaceDriver->interfaceUndefine (iface);
7176
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7179
virDispatchError(iface->conn);
7184
* virInterfaceCreate:
7185
* @iface: pointer to a defined interface
7186
* @flags: and OR'ed set of extraction flags, not used yet
7188
* Activate an interface (ie call "ifup")
7190
* Returns 0 in case of success, -1 in case of error
7193
virInterfaceCreate(virInterfacePtr iface, unsigned int flags)
7196
DEBUG("iface=%p, flags=%d", iface, flags);
7198
virResetLastError();
7200
if (!VIR_IS_CONNECTED_INTERFACE(iface)) {
7201
virLibInterfaceError(VIR_ERR_INVALID_INTERFACE, __FUNCTION__);
7202
virDispatchError(NULL);
7206
if (conn->flags & VIR_CONNECT_RO) {
7207
virLibInterfaceError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
7211
if (conn->interfaceDriver && conn->interfaceDriver->interfaceCreate) {
7213
ret = conn->interfaceDriver->interfaceCreate (iface, flags);
7219
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7222
virDispatchError(iface->conn);
7227
* virInterfaceDestroy:
7228
* @iface: an interface object
7229
* @flags: and OR'ed set of extraction flags, not used yet
7231
* deactivate an interface (ie call "ifdown")
7232
* This does not remove the interface from the config, and
7233
* does not free the associated virInterfacePtr object.
7235
* Returns 0 in case of success and -1 in case of failure.
7238
virInterfaceDestroy(virInterfacePtr iface, unsigned int flags)
7241
DEBUG("iface=%p, flags=%d", iface, flags);
7243
virResetLastError();
7245
if (!VIR_IS_CONNECTED_INTERFACE(iface)) {
7246
virLibInterfaceError(VIR_ERR_INVALID_INTERFACE, __FUNCTION__);
7247
virDispatchError(NULL);
7252
if (conn->flags & VIR_CONNECT_RO) {
7253
virLibInterfaceError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
7257
if (conn->interfaceDriver && conn->interfaceDriver->interfaceDestroy) {
7259
ret = conn->interfaceDriver->interfaceDestroy (iface, flags);
7265
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7268
virDispatchError(iface->conn);
7274
* @iface: the interface to hold a reference on
7276
* Increment the reference count on the interface. For each
7277
* additional call to this method, there shall be a corresponding
7278
* call to virInterfaceFree to release the reference count, once
7279
* the caller no longer needs the reference to this object.
7281
* This method is typically useful for applications where multiple
7282
* threads are using a connection, and it is required that the
7283
* connection remain open until all threads have finished using
7284
* it. ie, each new thread using an interface would increment
7285
* the reference count.
7287
* Returns 0 in case of success, -1 in case of failure.
7290
virInterfaceRef(virInterfacePtr iface)
7292
if ((!VIR_IS_CONNECTED_INTERFACE(iface))) {
7293
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7294
virDispatchError(NULL);
7297
virMutexLock(&iface->conn->lock);
7298
DEBUG("iface=%p refs=%d", iface, iface->refs);
7300
virMutexUnlock(&iface->conn->lock);
7306
* @iface: an interface object
7308
* Free the interface object. The interface itself is unaltered.
7309
* The data structure is freed and should not be used thereafter.
7311
* Returns 0 in case of success and -1 in case of failure.
7314
virInterfaceFree(virInterfacePtr iface)
7316
DEBUG("iface=%p", iface);
7318
virResetLastError();
7320
if (!VIR_IS_CONNECTED_INTERFACE(iface)) {
7321
virLibInterfaceError(VIR_ERR_INVALID_INTERFACE, __FUNCTION__);
7322
virDispatchError(NULL);
7325
if (virUnrefInterface(iface) < 0) {
7326
virDispatchError(NULL);
7334
* virStoragePoolGetConnect:
7335
* @pool: pointer to a pool
7337
* Provides the connection pointer associated with a storage pool. The
7338
* reference counter on the connection is not increased by this
7341
* WARNING: When writing libvirt bindings in other languages, do
7342
* not use this function. Instead, store the connection and
7343
* the pool object together.
7345
* Returns the virConnectPtr or NULL in case of failure.
7348
virStoragePoolGetConnect (virStoragePoolPtr pool)
7350
DEBUG("pool=%p", pool);
7352
virResetLastError();
7354
if (!VIR_IS_CONNECTED_STORAGE_POOL (pool)) {
7355
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
7356
virDispatchError(NULL);
7363
* virConnectNumOfStoragePools:
7364
* @conn: pointer to hypervisor connection
7366
* Provides the number of active storage pools
7368
* Returns the number of pools found, or -1 on error
7371
virConnectNumOfStoragePools (virConnectPtr conn)
7373
DEBUG("conn=%p", conn);
7375
virResetLastError();
7377
if (!VIR_IS_CONNECT(conn)) {
7378
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7379
virDispatchError(NULL);
7383
if (conn->storageDriver && conn->storageDriver->numOfPools) {
7385
ret = conn->storageDriver->numOfPools (conn);
7391
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7394
virDispatchError(conn);
7399
* virConnectListStoragePools:
7400
* @conn: pointer to hypervisor connection
7401
* @names: array of char * to fill with pool names (allocated by caller)
7402
* @maxnames: size of the names array
7404
* Provides the list of names of active storage pools
7405
* upto maxnames. If there are more than maxnames, the
7406
* remaining names will be silently ignored.
7408
* Returns 0 on success, -1 on error
7411
virConnectListStoragePools (virConnectPtr conn,
7415
DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
7417
virResetLastError();
7419
if (!VIR_IS_CONNECT(conn)) {
7420
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7421
virDispatchError(NULL);
7425
if ((names == NULL) || (maxnames < 0)) {
7426
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7430
if (conn->storageDriver && conn->storageDriver->listPools) {
7432
ret = conn->storageDriver->listPools (conn, names, maxnames);
7438
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7441
virDispatchError(conn);
7447
* virConnectNumOfDefinedStoragePools:
7448
* @conn: pointer to hypervisor connection
7450
* Provides the number of inactive storage pools
7452
* Returns the number of pools found, or -1 on error
7455
virConnectNumOfDefinedStoragePools(virConnectPtr conn)
7457
DEBUG("conn=%p", conn);
7459
virResetLastError();
7461
if (!VIR_IS_CONNECT(conn)) {
7462
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7463
virDispatchError(NULL);
7467
if (conn->storageDriver && conn->storageDriver->numOfDefinedPools) {
7469
ret = conn->storageDriver->numOfDefinedPools (conn);
7475
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7478
virDispatchError(conn);
7484
* virConnectListDefinedStoragePools:
7485
* @conn: pointer to hypervisor connection
7486
* @names: array of char * to fill with pool names (allocated by caller)
7487
* @maxnames: size of the names array
7489
* Provides the list of names of inactive storage pools
7490
* upto maxnames. If there are more than maxnames, the
7491
* remaining names will be silently ignored.
7493
* Returns 0 on success, -1 on error
7496
virConnectListDefinedStoragePools(virConnectPtr conn,
7500
DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
7502
virResetLastError();
7504
if (!VIR_IS_CONNECT(conn)) {
7505
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7506
virDispatchError(NULL);
7510
if ((names == NULL) || (maxnames < 0)) {
7511
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7515
if (conn->storageDriver && conn->storageDriver->listDefinedPools) {
7517
ret = conn->storageDriver->listDefinedPools (conn, names, maxnames);
7523
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7526
virDispatchError(conn);
7532
* virConnectFindStoragePoolSources:
7533
* @conn: pointer to hypervisor connection
7534
* @type: type of storage pool sources to discover
7535
* @srcSpec: XML document specifying discovery source
7536
* @flags: flags for discovery (unused, pass 0)
7538
* Talks to a storage backend and attempts to auto-discover the set of
7539
* available storage pool sources. e.g. For iSCSI this would be a set of
7540
* iSCSI targets. For NFS this would be a list of exported paths. The
7541
* srcSpec (optional for some storage pool types, e.g. local ones) is
7542
* an instance of the storage pool's source element specifying where
7543
* to look for the pools.
7545
* srcSpec is not required for some types (e.g., those querying
7546
* local storage resources only)
7548
* Returns an xml document consisting of a SourceList element
7549
* containing a source document appropriate to the given pool
7550
* type for each discovered source.
7553
virConnectFindStoragePoolSources(virConnectPtr conn,
7555
const char *srcSpec,
7558
DEBUG("conn=%p, type=%s, src=%s, flags=%u", conn, type ? type : "", srcSpec ? srcSpec : "", flags);
7560
virResetLastError();
7562
if (!VIR_IS_CONNECT(conn)) {
7563
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7564
virDispatchError(NULL);
7568
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7572
if (conn->flags & VIR_CONNECT_RO) {
7573
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
7577
if (conn->storageDriver && conn->storageDriver->findPoolSources) {
7579
ret = conn->storageDriver->findPoolSources(conn, type, srcSpec, flags);
7585
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7588
virDispatchError(conn);
7594
* virStoragePoolLookupByName:
7595
* @conn: pointer to hypervisor connection
7596
* @name: name of pool to fetch
7598
* Fetch a storage pool based on its unique name
7600
* Returns a virStoragePoolPtr object, or NULL if no matching pool is found
7603
virStoragePoolLookupByName(virConnectPtr conn,
7606
DEBUG("conn=%p, name=%s", conn, name);
7608
virResetLastError();
7610
if (!VIR_IS_CONNECT(conn)) {
7611
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7612
virDispatchError(NULL);
7616
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7620
if (conn->storageDriver && conn->storageDriver->poolLookupByName) {
7621
virStoragePoolPtr ret;
7622
ret = conn->storageDriver->poolLookupByName (conn, name);
7628
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7631
virDispatchError(conn);
7637
* virStoragePoolLookupByUUID:
7638
* @conn: pointer to hypervisor connection
7639
* @uuid: globally unique id of pool to fetch
7641
* Fetch a storage pool based on its globally unique id
7643
* Returns a virStoragePoolPtr object, or NULL if no matching pool is found
7646
virStoragePoolLookupByUUID(virConnectPtr conn,
7647
const unsigned char *uuid)
7649
DEBUG("conn=%p, uuid=%s", conn, uuid);
7651
virResetLastError();
7653
if (!VIR_IS_CONNECT(conn)) {
7654
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7655
virDispatchError(NULL);
7659
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7663
if (conn->storageDriver && conn->storageDriver->poolLookupByUUID) {
7664
virStoragePoolPtr ret;
7665
ret = conn->storageDriver->poolLookupByUUID (conn, uuid);
7671
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7674
virDispatchError(conn);
7680
* virStoragePoolLookupByUUIDString:
7681
* @conn: pointer to hypervisor connection
7682
* @uuidstr: globally unique id of pool to fetch
7684
* Fetch a storage pool based on its globally unique id
7686
* Returns a virStoragePoolPtr object, or NULL if no matching pool is found
7689
virStoragePoolLookupByUUIDString(virConnectPtr conn,
7690
const char *uuidstr)
7692
unsigned char uuid[VIR_UUID_BUFLEN];
7693
DEBUG("conn=%p, uuidstr=%s", conn, uuidstr);
7695
virResetLastError();
7697
if (!VIR_IS_CONNECT(conn)) {
7698
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7699
virDispatchError(NULL);
7702
if (uuidstr == NULL) {
7703
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7707
if (virUUIDParse(uuidstr, uuid) < 0) {
7708
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7712
return virStoragePoolLookupByUUID(conn, uuid);
7715
virDispatchError(conn);
7721
* virStoragePoolLookupByVolume:
7722
* @vol: pointer to storage volume
7724
* Fetch a storage pool which contains a particular volume
7726
* Returns a virStoragePoolPtr object, or NULL if no matching pool is found
7729
virStoragePoolLookupByVolume(virStorageVolPtr vol)
7731
DEBUG("vol=%p", vol);
7733
virResetLastError();
7735
if (!VIR_IS_CONNECTED_STORAGE_VOL(vol)) {
7736
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7737
virDispatchError(NULL);
7741
if (vol->conn->storageDriver && vol->conn->storageDriver->poolLookupByVolume) {
7742
virStoragePoolPtr ret;
7743
ret = vol->conn->storageDriver->poolLookupByVolume (vol);
7749
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7752
virDispatchError(vol->conn);
7757
* virStoragePoolCreateXML:
7758
* @conn: pointer to hypervisor connection
7759
* @xmlDesc: XML description for new pool
7760
* @flags: future flags, use 0 for now
7762
* Create a new storage based on its XML description. The
7763
* pool is not persistent, so its definition will disappear
7764
* when it is destroyed, or if the host is restarted
7766
* Returns a virStoragePoolPtr object, or NULL if creation failed
7769
virStoragePoolCreateXML(virConnectPtr conn,
7770
const char *xmlDesc,
7773
DEBUG("conn=%p, xmlDesc=%s", conn, xmlDesc);
7775
virResetLastError();
7777
if (!VIR_IS_CONNECT(conn)) {
7778
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7779
virDispatchError(NULL);
7782
if (xmlDesc == NULL) {
7783
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7786
if (conn->flags & VIR_CONNECT_RO) {
7787
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
7791
if (conn->storageDriver && conn->storageDriver->poolCreateXML) {
7792
virStoragePoolPtr ret;
7793
ret = conn->storageDriver->poolCreateXML (conn, xmlDesc, flags);
7799
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7802
virDispatchError(conn);
7807
* virStoragePoolDefineXML:
7808
* @conn: pointer to hypervisor connection
7809
* @xml: XML description for new pool
7810
* @flags: future flags, use 0 for now
7812
* Define a new inactive storage pool based on its XML description. The
7813
* pool is persistent, until explicitly undefined.
7815
* Returns a virStoragePoolPtr object, or NULL if creation failed
7818
virStoragePoolDefineXML(virConnectPtr conn,
7822
DEBUG("conn=%p, xml=%s", conn, xml);
7824
virResetLastError();
7826
if (!VIR_IS_CONNECT(conn)) {
7827
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
7828
virDispatchError(NULL);
7831
if (conn->flags & VIR_CONNECT_RO) {
7832
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
7836
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
7840
if (conn->storageDriver && conn->storageDriver->poolDefineXML) {
7841
virStoragePoolPtr ret;
7842
ret = conn->storageDriver->poolDefineXML (conn, xml, flags);
7848
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7851
virDispatchError(conn);
7856
* virStoragePoolBuild:
7857
* @pool: pointer to storage pool
7858
* @flags: future flags, use 0 for now
7860
* Build the underlying storage pool
7862
* Returns 0 on success, or -1 upon failure
7865
virStoragePoolBuild(virStoragePoolPtr pool,
7869
DEBUG("pool=%p, flags=%u", pool, flags);
7871
virResetLastError();
7873
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
7874
virLibStoragePoolError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
7875
virDispatchError(NULL);
7879
if (conn->flags & VIR_CONNECT_RO) {
7880
virLibStoragePoolError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
7884
if (conn->storageDriver && conn->storageDriver->poolBuild) {
7886
ret = conn->storageDriver->poolBuild (pool, flags);
7892
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7895
virDispatchError(pool->conn);
7901
* virStoragePoolUndefine:
7902
* @pool: pointer to storage pool
7904
* Undefine an inactive storage pool
7906
* Returns 0 on success, -1 on failure
7909
virStoragePoolUndefine(virStoragePoolPtr pool)
7912
DEBUG("pool=%p", pool);
7914
virResetLastError();
7916
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
7917
virLibStoragePoolError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
7918
virDispatchError(NULL);
7922
if (conn->flags & VIR_CONNECT_RO) {
7923
virLibStoragePoolError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
7927
if (conn->storageDriver && conn->storageDriver->poolUndefine) {
7929
ret = conn->storageDriver->poolUndefine (pool);
7935
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7938
virDispatchError(pool->conn);
7944
* virStoragePoolCreate:
7945
* @pool: pointer to storage pool
7946
* @flags: future flags, use 0 for now
7948
* Starts an inactive storage pool
7950
* Returns 0 on success, or -1 if it could not be started
7953
virStoragePoolCreate(virStoragePoolPtr pool,
7957
DEBUG("pool=%p", pool);
7959
virResetLastError();
7961
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
7962
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
7963
virDispatchError(NULL);
7967
if (conn->flags & VIR_CONNECT_RO) {
7968
virLibStoragePoolError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
7972
if (conn->storageDriver && conn->storageDriver->poolCreate) {
7974
ret = conn->storageDriver->poolCreate (pool, flags);
7980
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
7983
virDispatchError(pool->conn);
7989
* virStoragePoolDestroy:
7990
* @pool: pointer to storage pool
7992
* Destroy an active storage pool. This will deactivate the
7993
* pool on the host, but keep any persistent config associated
7994
* with it. If it has a persistent config it can later be
7995
* restarted with virStoragePoolCreate(). This does not free
7996
* the associated virStoragePoolPtr object.
7998
* Returns 0 on success, or -1 if it could not be destroyed
8001
virStoragePoolDestroy(virStoragePoolPtr pool)
8004
DEBUG("pool=%p", pool);
8006
virResetLastError();
8008
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
8009
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8010
virDispatchError(NULL);
8015
if (conn->flags & VIR_CONNECT_RO) {
8016
virLibStoragePoolError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
8020
if (conn->storageDriver && conn->storageDriver->poolDestroy) {
8022
ret = conn->storageDriver->poolDestroy (pool);
8028
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8031
virDispatchError(pool->conn);
8036
* virStoragePoolDelete:
8037
* @pool: pointer to storage pool
8038
* @flags: flags for obliteration process
8040
* Delete the underlying pool resources. This is
8041
* a non-recoverable operation. The virStoragePoolPtr object
8042
* itself is not free'd.
8044
* Returns 0 on success, or -1 if it could not be obliterate
8047
virStoragePoolDelete(virStoragePoolPtr pool,
8051
DEBUG("pool=%p, flags=%u", pool, flags);
8053
virResetLastError();
8055
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
8056
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8057
virDispatchError(NULL);
8062
if (conn->flags & VIR_CONNECT_RO) {
8063
virLibStoragePoolError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
8067
if (conn->storageDriver && conn->storageDriver->poolDelete) {
8069
ret = conn->storageDriver->poolDelete (pool, flags);
8075
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8078
virDispatchError(pool->conn);
8084
* virStoragePoolFree:
8085
* @pool: pointer to storage pool
8087
* Free a storage pool object, releasing all memory associated with
8088
* it. Does not change the state of the pool on the host.
8090
* Returns 0 on success, or -1 if it could not be free'd.
8093
virStoragePoolFree(virStoragePoolPtr pool)
8095
DEBUG("pool=%p", pool);
8097
virResetLastError();
8099
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
8100
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8101
virDispatchError(NULL);
8104
if (virUnrefStoragePool(pool) < 0) {
8105
virDispatchError(NULL);
8114
* virStoragePoolRef:
8115
* @pool: the pool to hold a reference on
8117
* Increment the reference count on the pool. For each
8118
* additional call to this method, there shall be a corresponding
8119
* call to virStoragePoolFree to release the reference count, once
8120
* the caller no longer needs the reference to this object.
8122
* This method is typically useful for applications where multiple
8123
* threads are using a connection, and it is required that the
8124
* connection remain open until all threads have finished using
8125
* it. ie, each new thread using a pool would increment
8126
* the reference count.
8128
* Returns 0 in case of success, -1 in case of failure.
8131
virStoragePoolRef(virStoragePoolPtr pool)
8133
if ((!VIR_IS_CONNECTED_STORAGE_POOL(pool))) {
8134
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
8135
virDispatchError(NULL);
8138
virMutexLock(&pool->conn->lock);
8139
DEBUG("pool=%p refs=%d", pool, pool->refs);
8141
virMutexUnlock(&pool->conn->lock);
8146
* virStoragePoolRefresh:
8147
* @pool: pointer to storage pool
8148
* @flags: flags to control refresh behaviour (currently unused, use 0)
8150
* Request that the pool refresh its list of volumes. This may
8151
* involve communicating with a remote server, and/or initializing
8152
* new devices at the OS layer
8154
* Returns 0 if the volume list was refreshed, -1 on failure
8157
virStoragePoolRefresh(virStoragePoolPtr pool,
8161
DEBUG("pool=%p flags=%u", pool, flags);
8163
virResetLastError();
8165
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
8166
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8167
virDispatchError(NULL);
8172
if (conn->flags & VIR_CONNECT_RO) {
8173
virLibStoragePoolError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
8177
if (conn->storageDriver && conn->storageDriver->poolRefresh) {
8179
ret = conn->storageDriver->poolRefresh (pool, flags);
8185
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8188
virDispatchError(pool->conn);
8194
* virStoragePoolGetName:
8195
* @pool: pointer to storage pool
8197
* Fetch the locally unique name of the storage pool
8199
* Returns the name of the pool, or NULL on error
8202
virStoragePoolGetName(virStoragePoolPtr pool)
8204
DEBUG("pool=%p", pool);
8206
virResetLastError();
8208
if (!VIR_IS_STORAGE_POOL(pool)) {
8209
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8210
virDispatchError(NULL);
8218
* virStoragePoolGetUUID:
8219
* @pool: pointer to storage pool
8220
* @uuid: buffer of VIR_UUID_BUFLEN bytes in size
8222
* Fetch the globally unique ID of the storage pool
8224
* Returns 0 on success, or -1 on error;
8227
virStoragePoolGetUUID(virStoragePoolPtr pool,
8228
unsigned char *uuid)
8230
DEBUG("pool=%p, uuid=%p", pool, uuid);
8232
virResetLastError();
8234
if (!VIR_IS_STORAGE_POOL(pool)) {
8235
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8236
virDispatchError(NULL);
8240
virLibStoragePoolError(VIR_ERR_INVALID_ARG, __FUNCTION__);
8244
memcpy(uuid, &pool->uuid[0], VIR_UUID_BUFLEN);
8249
virDispatchError(pool->conn);
8254
* virStoragePoolGetUUIDString:
8255
* @pool: pointer to storage pool
8256
* @buf: buffer of VIR_UUID_STRING_BUFLEN bytes in size
8258
* Fetch the globally unique ID of the storage pool as a string
8260
* Returns 0 on success, or -1 on error;
8263
virStoragePoolGetUUIDString(virStoragePoolPtr pool,
8266
unsigned char uuid[VIR_UUID_BUFLEN];
8267
DEBUG("pool=%p, buf=%p", pool, buf);
8269
virResetLastError();
8271
if (!VIR_IS_STORAGE_POOL(pool)) {
8272
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8273
virDispatchError(NULL);
8277
virLibStoragePoolError(VIR_ERR_INVALID_ARG, __FUNCTION__);
8281
if (virStoragePoolGetUUID(pool, &uuid[0]))
8284
virUUIDFormat(uuid, buf);
8288
virDispatchError(pool->conn);
8294
* virStoragePoolGetInfo:
8295
* @pool: pointer to storage pool
8296
* @info: pointer at which to store info
8298
* Get volatile information about the storage pool
8299
* such as free space / usage summary
8301
* Returns 0 on success, or -1 on failure.
8304
virStoragePoolGetInfo(virStoragePoolPtr pool,
8305
virStoragePoolInfoPtr info)
8308
DEBUG("pool=%p, info=%p", pool, info);
8310
virResetLastError();
8312
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
8313
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8314
virDispatchError(NULL);
8318
virLibStoragePoolError(VIR_ERR_INVALID_ARG, __FUNCTION__);
8322
memset(info, 0, sizeof(virStoragePoolInfo));
8326
if (conn->storageDriver->poolGetInfo) {
8328
ret = conn->storageDriver->poolGetInfo (pool, info);
8334
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8337
virDispatchError(pool->conn);
8343
* virStoragePoolGetXMLDesc:
8344
* @pool: pointer to storage pool
8345
* @flags: flags for XML format options (set of virDomainXMLFlags)
8347
* Fetch an XML document describing all aspects of the
8348
* storage pool. This is suitable for later feeding back
8349
* into the virStoragePoolCreateXML method.
8351
* Returns a XML document, or NULL on error
8354
virStoragePoolGetXMLDesc(virStoragePoolPtr pool,
8358
DEBUG("pool=%p, flags=%u", pool, flags);
8360
virResetLastError();
8362
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
8363
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8364
virDispatchError(NULL);
8368
virLibStoragePoolError(VIR_ERR_INVALID_ARG, __FUNCTION__);
8374
if (conn->storageDriver && conn->storageDriver->poolGetXMLDesc) {
8376
ret = conn->storageDriver->poolGetXMLDesc (pool, flags);
8382
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8385
virDispatchError(pool->conn);
8391
* virStoragePoolGetAutostart:
8392
* @pool: pointer to storage pool
8393
* @autostart: location in which to store autostart flag
8395
* Fetches the value of the autostart flag, which determines
8396
* whether the pool is automatically started at boot time
8398
* Returns 0 on success, -1 on failure
8401
virStoragePoolGetAutostart(virStoragePoolPtr pool,
8405
DEBUG("pool=%p, autostart=%p", pool, autostart);
8407
virResetLastError();
8409
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
8410
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8411
virDispatchError(NULL);
8415
virLibStoragePoolError(VIR_ERR_INVALID_ARG, __FUNCTION__);
8421
if (conn->storageDriver && conn->storageDriver->poolGetAutostart) {
8423
ret = conn->storageDriver->poolGetAutostart (pool, autostart);
8429
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8432
virDispatchError(pool->conn);
8438
* virStoragePoolSetAutostart:
8439
* @pool: pointer to storage pool
8440
* @autostart: new flag setting
8442
* Sets the autostart flag
8444
* Returns 0 on success, -1 on failure
8447
virStoragePoolSetAutostart(virStoragePoolPtr pool,
8451
DEBUG("pool=%p, autostart=%d", pool, autostart);
8453
virResetLastError();
8455
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
8456
virLibStoragePoolError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8457
virDispatchError(NULL);
8461
if (pool->conn->flags & VIR_CONNECT_RO) {
8462
virLibStoragePoolError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
8468
if (conn->storageDriver && conn->storageDriver->poolSetAutostart) {
8470
ret = conn->storageDriver->poolSetAutostart (pool, autostart);
8476
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8479
virDispatchError(pool->conn);
8485
* virStoragePoolNumOfVolumes:
8486
* @pool: pointer to storage pool
8488
* Fetch the number of storage volumes within a pool
8490
* Returns the number of storage pools, or -1 on failure
8493
virStoragePoolNumOfVolumes(virStoragePoolPtr pool)
8495
DEBUG("pool=%p", pool);
8497
virResetLastError();
8499
if (!VIR_IS_STORAGE_POOL(pool)) {
8500
virLibConnError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8501
virDispatchError(NULL);
8505
if (pool->conn->storageDriver && pool->conn->storageDriver->poolNumOfVolumes) {
8507
ret = pool->conn->storageDriver->poolNumOfVolumes (pool);
8513
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8516
virDispatchError(pool->conn);
8522
* virStoragePoolListVolumes:
8523
* @pool: pointer to storage pool
8524
* @names: array in which to storage volume names
8525
* @maxnames: size of names array
8527
* Fetch list of storage volume names, limiting to
8530
* Returns the number of names fetched, or -1 on error
8533
virStoragePoolListVolumes(virStoragePoolPtr pool,
8537
DEBUG("pool=%p, names=%p, maxnames=%d", pool, names, maxnames);
8539
virResetLastError();
8541
if (!VIR_IS_STORAGE_POOL(pool)) {
8542
virLibConnError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8543
virDispatchError(NULL);
8547
if ((names == NULL) || (maxnames < 0)) {
8548
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
8552
if (pool->conn->storageDriver && pool->conn->storageDriver->poolListVolumes) {
8554
ret = pool->conn->storageDriver->poolListVolumes (pool, names, maxnames);
8560
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8563
virDispatchError(pool->conn);
8569
* virStorageVolGetConnect:
8570
* @vol: pointer to a pool
8572
* Provides the connection pointer associated with a storage volume. The
8573
* reference counter on the connection is not increased by this
8576
* WARNING: When writing libvirt bindings in other languages, do
8577
* not use this function. Instead, store the connection and
8578
* the volume object together.
8580
* Returns the virConnectPtr or NULL in case of failure.
8583
virStorageVolGetConnect (virStorageVolPtr vol)
8585
DEBUG("vol=%p", vol);
8587
virResetLastError();
8589
if (!VIR_IS_STORAGE_VOL (vol)) {
8590
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
8591
virDispatchError(NULL);
8599
* virStorageVolLookupByName:
8600
* @pool: pointer to storage pool
8601
* @name: name of storage volume
8603
* Fetch a pointer to a storage volume based on its name
8606
* Returns a storage volume, or NULL if not found / error
8609
virStorageVolLookupByName(virStoragePoolPtr pool,
8612
DEBUG("pool=%p, name=%s", pool, name);
8614
virResetLastError();
8616
if (!VIR_IS_STORAGE_POOL(pool)) {
8617
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
8618
virDispatchError(NULL);
8622
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
8626
if (pool->conn->storageDriver && pool->conn->storageDriver->volLookupByName) {
8627
virStorageVolPtr ret;
8628
ret = pool->conn->storageDriver->volLookupByName (pool, name);
8634
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8637
virDispatchError(pool->conn);
8644
* virStorageVolLookupByKey:
8645
* @conn: pointer to hypervisor connection
8646
* @key: globally unique key
8648
* Fetch a pointer to a storage volume based on its
8649
* globally unique key
8651
* Returns a storage volume, or NULL if not found / error
8654
virStorageVolLookupByKey(virConnectPtr conn,
8657
DEBUG("conn=%p, key=%s", conn, key);
8659
virResetLastError();
8661
if (!VIR_IS_CONNECT(conn)) {
8662
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
8663
virDispatchError(NULL);
8667
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
8671
if (conn->storageDriver && conn->storageDriver->volLookupByKey) {
8672
virStorageVolPtr ret;
8673
ret = conn->storageDriver->volLookupByKey (conn, key);
8679
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8682
virDispatchError(conn);
8687
* virStorageVolLookupByPath:
8688
* @conn: pointer to hypervisor connection
8689
* @path: locally unique path
8691
* Fetch a pointer to a storage volume based on its
8692
* locally (host) unique path
8694
* Returns a storage volume, or NULL if not found / error
8697
virStorageVolLookupByPath(virConnectPtr conn,
8700
DEBUG("conn=%p, path=%s", conn, path);
8702
virResetLastError();
8704
if (!VIR_IS_CONNECT(conn)) {
8705
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
8706
virDispatchError(NULL);
8710
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
8714
if (conn->storageDriver && conn->storageDriver->volLookupByPath) {
8715
virStorageVolPtr ret;
8716
ret = conn->storageDriver->volLookupByPath (conn, path);
8722
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8725
virDispatchError(conn);
8731
* virStorageVolGetName:
8732
* @vol: pointer to storage volume
8734
* Fetch the storage volume name. This is unique
8735
* within the scope of a pool
8737
* Returns the volume name, or NULL on error
8740
virStorageVolGetName(virStorageVolPtr vol)
8742
DEBUG("vol=%p", vol);
8744
virResetLastError();
8746
if (!VIR_IS_STORAGE_VOL(vol)) {
8747
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
8748
virDispatchError(NULL);
8756
* virStorageVolGetKey:
8757
* @vol: pointer to storage volume
8759
* Fetch the storage volume key. This is globally
8760
* unique, so the same volume will have the same
8761
* key no matter what host it is accessed from
8763
* Returns the volume key, or NULL on error
8766
virStorageVolGetKey(virStorageVolPtr vol)
8768
DEBUG("vol=%p", vol);
8770
virResetLastError();
8772
if (!VIR_IS_STORAGE_VOL(vol)) {
8773
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
8774
virDispatchError(NULL);
8782
* virStorageVolCreateXML:
8783
* @pool: pointer to storage pool
8784
* @xmldesc: description of volume to create
8785
* @flags: flags for creation (unused, pass 0)
8787
* Create a storage volume within a pool based
8788
* on an XML description. Not all pools support
8789
* creation of volumes
8791
* Returns the storage volume, or NULL on error
8794
virStorageVolCreateXML(virStoragePoolPtr pool,
8795
const char *xmldesc,
8798
DEBUG("pool=%p, flags=%u", pool, flags);
8800
virResetLastError();
8802
if (!VIR_IS_STORAGE_POOL(pool)) {
8803
virLibConnError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8804
virDispatchError(NULL);
8808
if (pool->conn->flags & VIR_CONNECT_RO) {
8809
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
8813
if (pool->conn->storageDriver && pool->conn->storageDriver->volCreateXML) {
8814
virStorageVolPtr ret;
8815
ret = pool->conn->storageDriver->volCreateXML (pool, xmldesc, flags);
8821
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8824
virDispatchError(pool->conn);
8830
* virStorageVolCreateXMLFrom:
8831
* @pool: pointer to parent pool for the new volume
8832
* @xmldesc: description of volume to create
8833
* @clonevol: storage volume to use as input
8834
* @flags: flags for creation (unused, pass 0)
8836
* Create a storage volume in the parent pool, using the
8837
* 'clonevol' volume as input. Information for the new
8838
* volume (name, perms) are passed via a typical volume
8841
* Returns the storage volume, or NULL on error
8844
virStorageVolCreateXMLFrom(virStoragePoolPtr pool,
8845
const char *xmldesc,
8846
virStorageVolPtr clonevol,
8849
DEBUG("pool=%p, flags=%u, clonevol=%p", pool, flags, clonevol);
8851
virResetLastError();
8853
if (!VIR_IS_STORAGE_POOL(pool)) {
8854
virLibConnError(VIR_ERR_INVALID_STORAGE_POOL, __FUNCTION__);
8855
virDispatchError(NULL);
8859
if (!VIR_IS_STORAGE_VOL(clonevol)) {
8860
virLibConnError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
8864
if (pool->conn->flags & VIR_CONNECT_RO ||
8865
clonevol->conn->flags & VIR_CONNECT_RO) {
8866
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
8870
if (pool->conn->storageDriver &&
8871
pool->conn->storageDriver->volCreateXMLFrom) {
8872
virStorageVolPtr ret;
8873
ret = pool->conn->storageDriver->volCreateXMLFrom (pool, xmldesc,
8880
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8883
virDispatchError(pool->conn);
8889
* virStorageVolDelete:
8890
* @vol: pointer to storage volume
8891
* @flags: future flags, use 0 for now
8893
* Delete the storage volume from the pool
8895
* Returns 0 on success, or -1 on error
8898
virStorageVolDelete(virStorageVolPtr vol,
8902
DEBUG("vol=%p, flags=%u", vol, flags);
8904
virResetLastError();
8906
if (!VIR_IS_CONNECTED_STORAGE_VOL(vol)) {
8907
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
8908
virDispatchError(NULL);
8913
if (conn->flags & VIR_CONNECT_RO) {
8914
virLibStorageVolError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
8918
if (conn->storageDriver && conn->storageDriver->volDelete) {
8920
ret = conn->storageDriver->volDelete (vol, flags);
8926
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8929
virDispatchError(vol->conn);
8935
* virStorageVolWipe:
8936
* @vol: pointer to storage volume
8937
* @flags: future flags, use 0 for now
8939
* Ensure data previously on a volume is not accessible to future reads
8941
* Returns 0 on success, or -1 on error
8944
virStorageVolWipe(virStorageVolPtr vol,
8948
VIR_DEBUG("vol=%p, flags=%u", vol, flags);
8950
virResetLastError();
8952
if (!VIR_IS_CONNECTED_STORAGE_VOL(vol)) {
8953
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
8954
virDispatchError(NULL);
8959
if (conn->flags & VIR_CONNECT_RO) {
8960
virLibStorageVolError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
8964
if (conn->storageDriver && conn->storageDriver->volWipe) {
8966
ret = conn->storageDriver->volWipe(vol, flags);
8973
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
8976
virDispatchError(vol->conn);
8982
* virStorageVolFree:
8983
* @vol: pointer to storage volume
8985
* Release the storage volume handle. The underlying
8986
* storage volume continues to exist.
8988
* Returns 0 on success, or -1 on error
8991
virStorageVolFree(virStorageVolPtr vol)
8993
DEBUG("vol=%p", vol);
8995
virResetLastError();
8997
if (!VIR_IS_STORAGE_VOL(vol)) {
8998
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
8999
virDispatchError(NULL);
9002
if (virUnrefStorageVol(vol) < 0) {
9003
virDispatchError(NULL);
9012
* @vol: the vol to hold a reference on
9014
* Increment the reference count on the vol. For each
9015
* additional call to this method, there shall be a corresponding
9016
* call to virStorageVolFree to release the reference count, once
9017
* the caller no longer needs the reference to this object.
9019
* This method is typically useful for applications where multiple
9020
* threads are using a connection, and it is required that the
9021
* connection remain open until all threads have finished using
9022
* it. ie, each new thread using a vol would increment
9023
* the reference count.
9025
* Returns 0 in case of success, -1 in case of failure.
9028
virStorageVolRef(virStorageVolPtr vol)
9030
if ((!VIR_IS_CONNECTED_STORAGE_VOL(vol))) {
9031
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9032
virDispatchError(NULL);
9035
virMutexLock(&vol->conn->lock);
9036
DEBUG("vol=%p refs=%d", vol, vol->refs);
9038
virMutexUnlock(&vol->conn->lock);
9043
* virStorageVolGetInfo:
9044
* @vol: pointer to storage volume
9045
* @info: pointer at which to store info
9047
* Fetches volatile information about the storage
9048
* volume such as its current allocation
9050
* Returns 0 on success, or -1 on failure
9053
virStorageVolGetInfo(virStorageVolPtr vol,
9054
virStorageVolInfoPtr info)
9057
DEBUG("vol=%p, info=%p", vol, info);
9059
virResetLastError();
9061
if (!VIR_IS_CONNECTED_STORAGE_VOL(vol)) {
9062
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
9063
virDispatchError(NULL);
9067
virLibStorageVolError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9071
memset(info, 0, sizeof(virStorageVolInfo));
9075
if (conn->storageDriver->volGetInfo){
9077
ret = conn->storageDriver->volGetInfo (vol, info);
9083
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9086
virDispatchError(vol->conn);
9092
* virStorageVolGetXMLDesc:
9093
* @vol: pointer to storage volume
9094
* @flags: flags for XML generation (unused, pass 0)
9096
* Fetch an XML document describing all aspects of
9097
* the storage volume
9099
* Returns the XML document, or NULL on error
9102
virStorageVolGetXMLDesc(virStorageVolPtr vol,
9106
DEBUG("vol=%p, flags=%u", vol, flags);
9108
virResetLastError();
9110
if (!VIR_IS_STORAGE_VOL(vol)) {
9111
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
9112
virDispatchError(NULL);
9116
virLibStorageVolError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9122
if (conn->storageDriver && conn->storageDriver->volGetXMLDesc) {
9124
ret = conn->storageDriver->volGetXMLDesc (vol, flags);
9130
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9133
virDispatchError(vol->conn);
9139
* virStorageVolGetPath:
9140
* @vol: pointer to storage volume
9142
* Fetch the storage volume path. Depending on the pool
9143
* configuration this is either persistent across hosts,
9144
* or dynamically assigned at pool startup. Consult
9145
* pool documentation for information on getting the
9148
* Returns the storage volume path, or NULL on error
9151
virStorageVolGetPath(virStorageVolPtr vol)
9154
DEBUG("vol=%p", vol);
9156
virResetLastError();
9158
if (!VIR_IS_STORAGE_VOL(vol)) {
9159
virLibStorageVolError(VIR_ERR_INVALID_STORAGE_VOL, __FUNCTION__);
9160
virDispatchError(NULL);
9166
if (conn->storageDriver && conn->storageDriver->volGetPath) {
9168
ret = conn->storageDriver->volGetPath (vol);
9174
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9177
virDispatchError(vol->conn);
9183
* virNodeNumOfDevices:
9184
* @conn: pointer to the hypervisor connection
9185
* @cap: capability name
9186
* @flags: flags (unused, pass 0)
9188
* Provides the number of node devices.
9190
* If the optional 'cap' argument is non-NULL, then the count
9191
* will be restricted to devices with the specified capability
9193
* Returns the number of node devices or -1 in case of error
9196
virNodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags)
9198
DEBUG("conn=%p, cap=%s, flags=%d", conn, NULLSTR(cap), flags);
9200
virResetLastError();
9202
if (!VIR_IS_CONNECT(conn)) {
9203
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
9204
virDispatchError(NULL);
9208
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9212
if (conn->deviceMonitor && conn->deviceMonitor->numOfDevices) {
9214
ret = conn->deviceMonitor->numOfDevices (conn, cap, flags);
9220
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9223
virDispatchError(conn);
9229
* virNodeListDevices:
9230
* @conn: pointer to the hypervisor connection
9231
* @cap: capability name
9232
* @names: array to collect the list of node device names
9233
* @maxnames: size of @names
9234
* @flags: flags (unused, pass 0)
9236
* Collect the list of node devices, and store their names in @names
9238
* If the optional 'cap' argument is non-NULL, then the count
9239
* will be restricted to devices with the specified capability
9241
* Returns the number of node devices found or -1 in case of error
9244
virNodeListDevices(virConnectPtr conn,
9246
char **const names, int maxnames,
9249
DEBUG("conn=%p, cap=%s, names=%p, maxnames=%d, flags=%d",
9250
conn, cap, names, maxnames, flags);
9252
virResetLastError();
9254
if (!VIR_IS_CONNECT(conn)) {
9255
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
9256
virDispatchError(NULL);
9259
if ((flags != 0) || (names == NULL) || (maxnames < 0)) {
9260
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9264
if (conn->deviceMonitor && conn->deviceMonitor->listDevices) {
9266
ret = conn->deviceMonitor->listDevices (conn, cap, names, maxnames, flags);
9272
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9275
virDispatchError(conn);
9281
* virNodeDeviceLookupByName:
9282
* @conn: pointer to the hypervisor connection
9283
* @name: unique device name
9285
* Lookup a node device by its name.
9287
* Returns a virNodeDevicePtr if found, NULL otherwise.
9289
virNodeDevicePtr virNodeDeviceLookupByName(virConnectPtr conn, const char *name)
9291
DEBUG("conn=%p, name=%p", conn, name);
9293
virResetLastError();
9295
if (!VIR_IS_CONNECT(conn)) {
9296
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
9297
virDispatchError(NULL);
9302
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9306
if (conn->deviceMonitor && conn->deviceMonitor->deviceLookupByName) {
9307
virNodeDevicePtr ret;
9308
ret = conn->deviceMonitor->deviceLookupByName (conn, name);
9314
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9317
virDispatchError(conn);
9323
* virNodeDeviceGetXMLDesc:
9324
* @dev: pointer to the node device
9325
* @flags: flags for XML generation (unused, pass 0)
9327
* Fetch an XML document describing all aspects of
9330
* Returns the XML document, or NULL on error
9332
char *virNodeDeviceGetXMLDesc(virNodeDevicePtr dev, unsigned int flags)
9334
DEBUG("dev=%p, conn=%p", dev, dev ? dev->conn : NULL);
9336
virResetLastError();
9338
if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
9339
virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
9340
virDispatchError(NULL);
9344
if (dev->conn->deviceMonitor && dev->conn->deviceMonitor->deviceDumpXML) {
9346
ret = dev->conn->deviceMonitor->deviceDumpXML (dev, flags);
9352
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9355
virDispatchError(dev->conn);
9361
* virNodeDeviceGetName:
9364
* Just return the device name
9366
* Returns the device name or NULL in case of error
9368
const char *virNodeDeviceGetName(virNodeDevicePtr dev)
9370
DEBUG("dev=%p, conn=%p", dev, dev ? dev->conn : NULL);
9372
if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
9373
virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
9374
virDispatchError(NULL);
9382
* virNodeDeviceGetParent:
9385
* Accessor for the parent of the device
9387
* Returns the name of the device's parent, or NULL if the
9388
* device has no parent.
9390
const char *virNodeDeviceGetParent(virNodeDevicePtr dev)
9392
DEBUG("dev=%p, conn=%p", dev, dev ? dev->conn : NULL);
9394
virResetLastError();
9396
if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
9397
virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
9398
virDispatchError(NULL);
9403
if (dev->conn->deviceMonitor && dev->conn->deviceMonitor->deviceGetParent) {
9404
dev->parent = dev->conn->deviceMonitor->deviceGetParent (dev);
9406
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9407
virDispatchError(dev->conn);
9415
* virNodeDeviceNumOfCaps:
9418
* Accessor for the number of capabilities supported by the device.
9420
* Returns the number of capabilities supported by the device.
9422
int virNodeDeviceNumOfCaps(virNodeDevicePtr dev)
9424
DEBUG("dev=%p, conn=%p", dev, dev ? dev->conn : NULL);
9426
virResetLastError();
9428
if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
9429
virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
9430
virDispatchError(NULL);
9434
if (dev->conn->deviceMonitor && dev->conn->deviceMonitor->deviceNumOfCaps) {
9436
ret = dev->conn->deviceMonitor->deviceNumOfCaps (dev);
9442
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9445
virDispatchError(dev->conn);
9450
* virNodeDeviceListCaps:
9452
* @names: array to collect the list of capability names
9453
* @maxnames: size of @names
9455
* Lists the names of the capabilities supported by the device.
9457
* Returns the number of capability names listed in @names.
9459
int virNodeDeviceListCaps(virNodeDevicePtr dev,
9463
DEBUG("dev=%p, conn=%p, names=%p, maxnames=%d",
9464
dev, dev ? dev->conn : NULL, names, maxnames);
9466
virResetLastError();
9468
if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
9469
virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
9470
virDispatchError(NULL);
9474
if (dev->conn->deviceMonitor && dev->conn->deviceMonitor->deviceListCaps) {
9476
ret = dev->conn->deviceMonitor->deviceListCaps (dev, names, maxnames);
9482
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9485
virDispatchError(dev->conn);
9491
* virNodeDeviceFree:
9492
* @dev: pointer to the node device
9494
* Drops a reference to the node device, freeing it if
9495
* this was the last reference.
9497
* Returns the 0 for success, -1 for error.
9499
int virNodeDeviceFree(virNodeDevicePtr dev)
9501
DEBUG("dev=%p, conn=%p", dev, dev ? dev->conn : NULL);
9503
virResetLastError();
9505
if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
9506
virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
9507
virDispatchError(NULL);
9510
if (virUnrefNodeDevice(dev) < 0) {
9511
virDispatchError(NULL);
9520
* @dev: the dev to hold a reference on
9522
* Increment the reference count on the dev. For each
9523
* additional call to this method, there shall be a corresponding
9524
* call to virNodeDeviceFree to release the reference count, once
9525
* the caller no longer needs the reference to this object.
9527
* This method is typically useful for applications where multiple
9528
* threads are using a connection, and it is required that the
9529
* connection remain open until all threads have finished using
9530
* it. ie, each new thread using a dev would increment
9531
* the reference count.
9533
* Returns 0 in case of success, -1 in case of failure.
9536
virNodeDeviceRef(virNodeDevicePtr dev)
9538
if ((!VIR_IS_CONNECTED_NODE_DEVICE(dev))) {
9539
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9540
virDispatchError(NULL);
9543
virMutexLock(&dev->conn->lock);
9544
DEBUG("dev=%p refs=%d", dev, dev->refs);
9546
virMutexUnlock(&dev->conn->lock);
9551
* virNodeDeviceDettach:
9552
* @dev: pointer to the node device
9554
* Dettach the node device from the node itself so that it may be
9555
* assigned to a guest domain.
9557
* Depending on the hypervisor, this may involve operations such
9558
* as unbinding any device drivers from the device, binding the
9559
* device to a dummy device driver and resetting the device.
9561
* If the device is currently in use by the node, this method may
9564
* Once the device is not assigned to any guest, it may be re-attached
9565
* to the node using the virNodeDeviceReattach() method.
9567
* Returns 0 in case of success, -1 in case of failure.
9570
virNodeDeviceDettach(virNodeDevicePtr dev)
9572
DEBUG("dev=%p, conn=%p", dev, dev ? dev->conn : NULL);
9574
virResetLastError();
9576
if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
9577
virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
9578
virDispatchError(NULL);
9582
if (dev->conn->driver->nodeDeviceDettach) {
9584
ret = dev->conn->driver->nodeDeviceDettach (dev);
9590
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9593
virDispatchError(dev->conn);
9598
* virNodeDeviceReAttach:
9599
* @dev: pointer to the node device
9601
* Re-attach a previously dettached node device to the node so that it
9602
* may be used by the node again.
9604
* Depending on the hypervisor, this may involve operations such
9605
* as resetting the device, unbinding it from a dummy device driver
9606
* and binding it to its appropriate driver.
9608
* If the device is currently in use by a guest, this method may fail.
9610
* Returns 0 in case of success, -1 in case of failure.
9613
virNodeDeviceReAttach(virNodeDevicePtr dev)
9615
DEBUG("dev=%p, conn=%p", dev, dev ? dev->conn : NULL);
9617
virResetLastError();
9619
if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
9620
virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
9621
virDispatchError(NULL);
9625
if (dev->conn->driver->nodeDeviceReAttach) {
9627
ret = dev->conn->driver->nodeDeviceReAttach (dev);
9633
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9636
virDispatchError(dev->conn);
9641
* virNodeDeviceReset:
9642
* @dev: pointer to the node device
9644
* Reset a previously dettached node device to the node before or
9645
* after assigning it to a guest.
9647
* The exact reset semantics depends on the hypervisor and device
9648
* type but, for example, KVM will attempt to reset PCI devices with
9649
* a Function Level Reset, Secondary Bus Reset or a Power Management
9652
* If the reset will affect other devices which are currently in use,
9653
* this function may fail.
9655
* Returns 0 in case of success, -1 in case of failure.
9658
virNodeDeviceReset(virNodeDevicePtr dev)
9660
DEBUG("dev=%p, conn=%p", dev, dev ? dev->conn : NULL);
9662
virResetLastError();
9664
if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
9665
virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
9666
virDispatchError(NULL);
9670
if (dev->conn->driver->nodeDeviceReset) {
9672
ret = dev->conn->driver->nodeDeviceReset (dev);
9678
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9681
virDispatchError(dev->conn);
9687
* virNodeDeviceCreateXML:
9688
* @conn: pointer to the hypervisor connection
9689
* @xmlDesc: string containing an XML description of the device to be created
9690
* @flags: callers should always pass 0
9692
* Create a new device on the VM host machine, for example, virtual
9693
* HBAs created using vport_create.
9695
* Returns a node device object if successful, NULL in case of failure
9698
virNodeDeviceCreateXML(virConnectPtr conn,
9699
const char *xmlDesc,
9702
VIR_DEBUG("conn=%p, xmlDesc=%s, flags=%d", conn, xmlDesc, flags);
9704
virResetLastError();
9706
if (!VIR_IS_CONNECT(conn)) {
9707
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
9708
virDispatchError(NULL);
9712
if (conn->flags & VIR_CONNECT_RO) {
9713
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
9717
if (xmlDesc == NULL) {
9718
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9722
if (conn->deviceMonitor &&
9723
conn->deviceMonitor->deviceCreateXML) {
9724
virNodeDevicePtr dev = conn->deviceMonitor->deviceCreateXML(conn, xmlDesc, flags);
9730
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9733
virDispatchError(conn);
9739
* virNodeDeviceDestroy:
9740
* @dev: a device object
9742
* Destroy the device object. The virtual device is removed from the host operating system.
9743
* This function may require privileged access
9745
* Returns 0 in case of success and -1 in case of failure.
9748
virNodeDeviceDestroy(virNodeDevicePtr dev)
9750
DEBUG("dev=%p", dev);
9752
virResetLastError();
9754
if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
9755
virLibNodeDeviceError(VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
9756
virDispatchError(NULL);
9760
if (dev->conn->flags & VIR_CONNECT_RO) {
9761
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
9765
if (dev->conn->deviceMonitor &&
9766
dev->conn->deviceMonitor->deviceDestroy) {
9767
int retval = dev->conn->deviceMonitor->deviceDestroy(dev);
9775
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9778
virDispatchError(dev->conn);
9784
* Domain Event Notification
9788
* virConnectDomainEventRegister:
9789
* @conn: pointer to the connection
9790
* @cb: callback to the function handling domain events
9791
* @opaque: opaque data to pass on to the callback
9792
* @freecb: optional function to deallocate opaque when not used anymore
9794
* Adds a callback to receive notifications of domain lifecycle events
9795
* occurring on a connection
9797
* Use of this method is no longer recommended. Instead applications
9798
* should try virConnectDomainEventRegisterAny which has a more flexible
9801
* The virDomainPtr object handle passed into the callback upon delivery
9802
* of an event is only valid for the duration of execution of the callback.
9803
* If the callback wishes to keep the domain object after the callback
9804
* returns, it shall take a reference to it, by calling virDomainRef.
9805
* The reference can be released once the object is no longer required
9806
* by calling virDomainFree.
9808
* Returns 0 on success, -1 on failure
9811
virConnectDomainEventRegister(virConnectPtr conn,
9812
virConnectDomainEventCallback cb,
9814
virFreeCallback freecb)
9816
DEBUG("conn=%p, cb=%p, opaque=%p, freecb=%p", conn, cb, opaque, freecb);
9817
virResetLastError();
9819
if (!VIR_IS_CONNECT(conn)) {
9820
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
9821
virDispatchError(NULL);
9825
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9829
if ((conn->driver) && (conn->driver->domainEventRegister)) {
9831
ret = conn->driver->domainEventRegister (conn, cb, opaque, freecb);
9837
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9839
virDispatchError(conn);
9844
* virConnectDomainEventDeregister:
9845
* @conn: pointer to the connection
9846
* @cb: callback to the function handling domain events
9848
* Removes a callback previously registered with the virConnectDomainEventRegister
9851
* Use of this method is no longer recommended. Instead applications
9852
* should try virConnectDomainEventUnregisterAny which has a more flexible
9855
* Returns 0 on success, -1 on failure
9858
virConnectDomainEventDeregister(virConnectPtr conn,
9859
virConnectDomainEventCallback cb)
9861
DEBUG("conn=%p, cb=%p", conn, cb);
9863
virResetLastError();
9865
if (!VIR_IS_CONNECT(conn)) {
9866
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
9867
virDispatchError(NULL);
9871
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9874
if ((conn->driver) && (conn->driver->domainEventDeregister)) {
9876
ret = conn->driver->domainEventDeregister (conn, cb);
9882
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9884
virDispatchError(conn);
9889
* virSecretGetConnect:
9890
* @secret: A virSecret secret
9892
* Provides the connection pointer associated with a secret. The reference
9893
* counter on the connection is not increased by this call.
9895
* WARNING: When writing libvirt bindings in other languages, do not use this
9896
* function. Instead, store the connection and the secret object together.
9898
* Returns the virConnectPtr or NULL in case of failure.
9901
virSecretGetConnect (virSecretPtr secret)
9903
DEBUG("secret=%p", secret);
9905
virResetLastError();
9907
if (!VIR_IS_CONNECTED_SECRET (secret)) {
9908
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
9909
virDispatchError(NULL);
9912
return secret->conn;
9916
* virConnectNumOfSecrets:
9917
* @conn: virConnect connection
9919
* Fetch number of currently defined secrets.
9921
* Returns the number currently defined secrets.
9924
virConnectNumOfSecrets(virConnectPtr conn)
9926
VIR_DEBUG("conn=%p", conn);
9928
virResetLastError();
9930
if (!VIR_IS_CONNECT(conn)) {
9931
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
9932
virDispatchError(NULL);
9936
if (conn->secretDriver != NULL &&
9937
conn->secretDriver->numOfSecrets != NULL) {
9940
ret = conn->secretDriver->numOfSecrets(conn);
9946
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9949
virDispatchError(conn);
9954
* virConnectListSecrets:
9955
* @conn: virConnect connection
9956
* @uuids: Pointer to an array to store the UUIDs
9957
* @maxuuids: size of the array.
9959
* List UUIDs of defined secrets, store pointers to names in uuids.
9961
* Returns the number of UUIDs provided in the array, or -1 on failure.
9964
virConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids)
9966
VIR_DEBUG("conn=%p, uuids=%p, maxuuids=%d", conn, uuids, maxuuids);
9968
virResetLastError();
9970
if (!VIR_IS_CONNECT(conn)) {
9971
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
9972
virDispatchError(NULL);
9975
if (uuids == NULL || maxuuids < 0) {
9976
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
9980
if (conn->secretDriver != NULL && conn->secretDriver->listSecrets != NULL) {
9983
ret = conn->secretDriver->listSecrets(conn, uuids, maxuuids);
9989
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
9992
virDispatchError(conn);
9997
* virSecretLookupByUUID:
9998
* @conn: pointer to the hypervisor connection
9999
* @uuid: the raw UUID for the secret
10001
* Try to lookup a secret on the given hypervisor based on its UUID.
10002
* Uses the 16 bytes of raw data to describe the UUID
10004
* Returns a new secret object or NULL in case of failure. If the
10005
* secret cannot be found, then VIR_ERR_NO_SECRET error is raised.
10008
virSecretLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
10010
DEBUG("conn=%p, uuid=%s", conn, uuid);
10012
virResetLastError();
10014
if (!VIR_IS_CONNECT(conn)) {
10015
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
10016
virDispatchError(NULL);
10019
if (uuid == NULL) {
10020
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
10024
if (conn->secretDriver &&
10025
conn->secretDriver->lookupByUUID) {
10027
ret = conn->secretDriver->lookupByUUID (conn, uuid);
10033
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
10036
virDispatchError(conn);
10041
* virSecretLookupByUUIDString:
10042
* @conn: pointer to the hypervisor connection
10043
* @uuidstr: the string UUID for the secret
10045
* Try to lookup a secret on the given hypervisor based on its UUID.
10046
* Uses the printable string value to describe the UUID
10048
* Returns a new secret object or NULL in case of failure. If the
10049
* secret cannot be found, then VIR_ERR_NO_SECRET error is raised.
10052
virSecretLookupByUUIDString(virConnectPtr conn, const char *uuidstr)
10054
unsigned char uuid[VIR_UUID_BUFLEN];
10055
DEBUG("conn=%p, uuidstr=%s", conn, uuidstr);
10057
virResetLastError();
10059
if (!VIR_IS_CONNECT(conn)) {
10060
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
10061
virDispatchError(NULL);
10064
if (uuidstr == NULL) {
10065
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
10069
if (virUUIDParse(uuidstr, uuid) < 0) {
10070
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
10074
return virSecretLookupByUUID(conn, &uuid[0]);
10077
virDispatchError(conn);
10083
* virSecretLookupByUsage:
10084
* @conn: pointer to the hypervisor connection
10085
* @usageType: the type of secret usage
10086
* @usageID: identifier of the object using the secret
10088
* Try to lookup a secret on the given hypervisor based on its usage
10089
* The usageID is unique within the set of secrets sharing the
10090
* same usageType value.
10092
* Returns a new secret object or NULL in case of failure. If the
10093
* secret cannot be found, then VIR_ERR_NO_SECRET error is raised.
10096
virSecretLookupByUsage(virConnectPtr conn,
10098
const char *usageID)
10100
DEBUG("conn=%p, usageType=%d usageID=%s", conn, usageType, NULLSTR(usageID));
10102
virResetLastError();
10104
if (!VIR_IS_CONNECT(conn)) {
10105
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
10106
virDispatchError(NULL);
10109
if (usageID == NULL) {
10110
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
10114
if (conn->secretDriver &&
10115
conn->secretDriver->lookupByUsage) {
10117
ret = conn->secretDriver->lookupByUsage (conn, usageType, usageID);
10123
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
10126
virDispatchError(conn);
10132
* virSecretDefineXML:
10133
* @conn: virConnect connection
10134
* @xml: XML describing the secret.
10135
* @flags: flags, use 0 for now
10137
* If XML specifies a UUID, locates the specified secret and replaces all
10138
* attributes of the secret specified by UUID by attributes specified in xml
10139
* (any attributes not specified in xml are discarded).
10141
* Otherwise, creates a new secret with an automatically chosen UUID, and
10142
* initializes its attributes from xml.
10144
* Returns a the secret on success, NULL on failure.
10147
virSecretDefineXML(virConnectPtr conn, const char *xml, unsigned int flags)
10149
VIR_DEBUG("conn=%p, xml=%s, flags=%u", conn, xml, flags);
10151
virResetLastError();
10153
if (!VIR_IS_CONNECT(conn)) {
10154
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
10155
virDispatchError(NULL);
10158
if (conn->flags & VIR_CONNECT_RO) {
10159
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
10163
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
10167
if (conn->secretDriver != NULL && conn->secretDriver->defineXML != NULL) {
10170
ret = conn->secretDriver->defineXML(conn, xml, flags);
10176
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
10179
virDispatchError(conn);
10184
* virSecretGetUUID:
10185
* @secret: A virSecret secret
10186
* @uuid: buffer of VIR_UUID_BUFLEN bytes in size
10188
* Fetches the UUID of the secret.
10190
* Returns 0 on success with the uuid buffer being filled, or
10194
virSecretGetUUID(virSecretPtr secret, unsigned char *uuid)
10196
VIR_DEBUG("secret=%p", secret);
10198
virResetLastError();
10200
if (!VIR_IS_CONNECTED_SECRET(secret)) {
10201
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
10202
virDispatchError(NULL);
10205
if (uuid == NULL) {
10206
virLibSecretError(VIR_ERR_INVALID_ARG, __FUNCTION__);
10207
virDispatchError(secret->conn);
10211
memcpy(uuid, &secret->uuid[0], VIR_UUID_BUFLEN);
10217
* virSecretGetUUIDString:
10218
* @secret: a secret object
10219
* @buf: pointer to a VIR_UUID_STRING_BUFLEN bytes array
10221
* Get the UUID for a secret as string. For more information about
10222
* UUID see RFC4122.
10224
* Returns -1 in case of error, 0 in case of success
10227
virSecretGetUUIDString(virSecretPtr secret, char *buf)
10229
unsigned char uuid[VIR_UUID_BUFLEN];
10230
DEBUG("secret=%p, buf=%p", secret, buf);
10232
virResetLastError();
10234
if (!VIR_IS_SECRET(secret)) {
10235
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
10236
virDispatchError(NULL);
10240
virLibSecretError(VIR_ERR_INVALID_ARG, __FUNCTION__);
10244
if (virSecretGetUUID(secret, &uuid[0]))
10247
virUUIDFormat(uuid, buf);
10251
virDispatchError(secret->conn);
10256
* virSecretGetUsageType:
10257
* @secret: a secret object
10259
* Get the type of object which uses this secret. The returned
10260
* value is one of the constants defined in the virSecretUsageType
10261
* enumeration. More values may be added to this enumeration in
10262
* the future, so callers should expect to see usage types they
10263
* do not explicitly know about.
10265
* Returns a positive integer identifying the type of object,
10266
* or -1 upon error.
10269
virSecretGetUsageType(virSecretPtr secret)
10271
DEBUG("secret=%p", secret);
10273
virResetLastError();
10275
if (!VIR_IS_SECRET(secret)) {
10276
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
10277
virDispatchError(NULL);
10280
return secret->usageType;
10284
* virSecretGetUsageID:
10285
* @secret: a secret object
10287
* Get the unique identifier of the object with which this
10288
* secret is to be used. The format of the identifier is
10289
* dependant on the usage type of the secret. For a secret
10290
* with a usage type of VIR_SECRET_USAGE_TYPE_VOLUME the
10291
* identifier will be a fully qualfied path name. The
10292
* identifiers are intended to be unique within the set of
10293
* all secrets sharing the same usage type. ie, there shall
10294
* only ever be one secret for each volume path.
10296
* Returns a string identifying the object using the secret,
10297
* or NULL upon error
10300
virSecretGetUsageID(virSecretPtr secret)
10302
DEBUG("secret=%p", secret);
10304
virResetLastError();
10306
if (!VIR_IS_SECRET(secret)) {
10307
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
10308
virDispatchError(NULL);
10311
return secret->usageID;
10316
* virSecretGetXMLDesc:
10317
* @secret: A virSecret secret
10318
* @flags: flags, use 0 for now
10320
* Fetches an XML document describing attributes of the secret.
10322
* Returns the XML document on success, NULL on failure. The caller must
10326
virSecretGetXMLDesc(virSecretPtr secret, unsigned int flags)
10328
virConnectPtr conn;
10330
VIR_DEBUG("secret=%p, flags=%u", secret, flags);
10332
virResetLastError();
10334
if (!VIR_IS_CONNECTED_SECRET(secret)) {
10335
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
10336
virDispatchError(NULL);
10340
conn = secret->conn;
10341
if (conn->secretDriver != NULL && conn->secretDriver->getXMLDesc != NULL) {
10344
ret = conn->secretDriver->getXMLDesc(secret, flags);
10350
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
10353
virDispatchError(conn);
10358
* virSecretSetValue:
10359
* @secret: A virSecret secret
10360
* @value: Value of the secret
10361
* @value_size: Size of the value
10362
* @flags: flags, use 0 for now
10364
* Sets the value of a secret.
10366
* Returns 0 on success, -1 on failure.
10369
virSecretSetValue(virSecretPtr secret, const unsigned char *value,
10370
size_t value_size, unsigned int flags)
10372
virConnectPtr conn;
10374
VIR_DEBUG("secret=%p, value=%p, value_size=%zu, flags=%u", secret, value,
10375
value_size, flags);
10377
virResetLastError();
10379
if (!VIR_IS_CONNECTED_SECRET(secret)) {
10380
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
10381
virDispatchError(NULL);
10384
conn = secret->conn;
10385
if (conn->flags & VIR_CONNECT_RO) {
10386
virLibSecretError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
10389
if (value == NULL) {
10390
virLibSecretError(VIR_ERR_INVALID_ARG, __FUNCTION__);
10394
if (conn->secretDriver != NULL && conn->secretDriver->setValue != NULL) {
10397
ret = conn->secretDriver->setValue(secret, value, value_size, flags);
10403
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
10406
virDispatchError(conn);
10411
* virSecretGetValue:
10412
* @secret: A virSecret connection
10413
* @value_size: Place for storing size of the secret value
10414
* @flags: flags, use 0 for now
10416
* Fetches the value of a secret.
10418
* Returns the secret value on success, NULL on failure. The caller must
10419
* free() the secret value.
10422
virSecretGetValue(virSecretPtr secret, size_t *value_size, unsigned int flags)
10424
virConnectPtr conn;
10426
VIR_DEBUG("secret=%p, value_size=%p, flags=%u", secret, value_size, flags);
10428
virResetLastError();
10430
if (!VIR_IS_CONNECTED_SECRET(secret)) {
10431
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
10432
virDispatchError(NULL);
10435
conn = secret->conn;
10436
if (conn->flags & VIR_CONNECT_RO) {
10437
virLibSecretError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
10440
if (value_size == NULL) {
10441
virLibSecretError(VIR_ERR_INVALID_ARG, __FUNCTION__);
10445
flags &= VIR_SECRET_GET_VALUE_FLAGS_MASK;
10447
if (conn->secretDriver != NULL && conn->secretDriver->getValue != NULL) {
10448
unsigned char *ret;
10450
ret = conn->secretDriver->getValue(secret, value_size, flags);
10456
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
10459
virDispatchError(conn);
10464
* virSecretUndefine:
10465
* @secret: A virSecret secret
10467
* Deletes the specified secret. This does not free the associated
10468
* virSecretPtr object.
10470
* Returns 0 on success, -1 on failure.
10473
virSecretUndefine(virSecretPtr secret)
10475
virConnectPtr conn;
10477
VIR_DEBUG("secret=%p", secret);
10479
virResetLastError();
10481
if (!VIR_IS_CONNECTED_SECRET(secret)) {
10482
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
10483
virDispatchError(NULL);
10486
conn = secret->conn;
10487
if (conn->flags & VIR_CONNECT_RO) {
10488
virLibSecretError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
10492
if (conn->secretDriver != NULL && conn->secretDriver->undefine != NULL) {
10495
ret = conn->secretDriver->undefine(secret);
10501
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
10504
virDispatchError(conn);
10510
* @secret: the secret to hold a reference on
10512
* Increment the reference count on the secret. For each additional call to
10513
* this method, there shall be a corresponding call to virSecretFree to release
10514
* the reference count, once the caller no longer needs the reference to this
10517
* This method is typically useful for applications where multiple threads are
10518
* using a connection, and it is required that the connection remain open until
10519
* all threads have finished using it. ie, each new thread using a secret would
10520
* increment the reference count.
10522
* Returns 0 in case of success, -1 in case of failure.
10525
virSecretRef(virSecretPtr secret)
10527
if (!VIR_IS_CONNECTED_SECRET(secret)) {
10528
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
10529
virDispatchError(NULL);
10532
virMutexLock(&secret->conn->lock);
10533
DEBUG("secret=%p refs=%d", secret, secret->refs);
10535
virMutexUnlock(&secret->conn->lock);
10541
* @secret: pointer to a secret
10543
* Release the secret handle. The underlying secret continues to exist.
10545
* Returns 0 on success, or -1 on error
10548
virSecretFree(virSecretPtr secret)
10550
DEBUG("secret=%p", secret);
10552
virResetLastError();
10554
if (!VIR_IS_CONNECTED_SECRET(secret)) {
10555
virLibSecretError(VIR_ERR_INVALID_SECRET, __FUNCTION__);
10556
virDispatchError(NULL);
10559
if (virUnrefSecret(secret) < 0) {
10560
virDispatchError(NULL);
10569
* @conn: pointer to the connection
10570
* @flags: control features of the stream
10572
* Creates a new stream object which can be used to perform
10573
* streamed I/O with other public API function.
10575
* When no longer needed, a stream object must be released
10576
* with virStreamFree. If a data stream has been used,
10577
* then the application must call virStreamFinish or
10578
* virStreamAbort before free'ing to, in order to notify
10579
* the driver of termination.
10581
* If a non-blocking data stream is required passed
10582
* VIR_STREAM_NONBLOCK for flags, otherwise pass 0.
10584
* Returns the new stream, or NULL upon error
10587
virStreamNew(virConnectPtr conn,
10588
unsigned int flags)
10592
DEBUG("conn=%p, flags=%u", conn, flags);
10594
virResetLastError();
10596
if (!VIR_IS_CONNECT(conn)) {
10597
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
10598
virDispatchError(NULL);
10602
st = virGetStream(conn);
10612
* @stream: pointer to the stream
10614
* Increment the reference count on the stream. For each
10615
* additional call to this method, there shall be a corresponding
10616
* call to virStreamFree to release the reference count, once
10617
* the caller no longer needs the reference to this object.
10619
* Returns 0 in case of success, -1 in case of failure
10622
virStreamRef(virStreamPtr stream)
10624
if ((!VIR_IS_CONNECTED_STREAM(stream))) {
10625
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
10626
virDispatchError(NULL);
10629
virMutexLock(&stream->conn->lock);
10630
DEBUG("stream=%p refs=%d", stream, stream->refs);
10632
virMutexUnlock(&stream->conn->lock);
10639
* @stream: pointer to the stream object
10640
* @data: buffer to write to stream
10641
* @nbytes: size of @data buffer
10643
* Write a series of bytes to the stream. This method may
10644
* block the calling application for an arbitrary amount
10645
* of time. Once an application has finished sending data
10646
* it should call virStreamFinish to wait for successful
10647
* confirmation from the driver, or detect any error
10649
* This method may not be used if a stream source has been
10652
* Errors are not guaranteed to be reported synchronously
10653
* with the call, but may instead be delayed until a
10656
* An example using this with a hypothetical file upload
10659
* virStreamPtr st = virStreamNew(conn, 0);
10660
* int fd = open("demo.iso", O_RDONLY)
10662
* virConnectUploadFile(conn, "demo.iso", st);
10666
* int got = read(fd, buf, 1024);
10668
* virStreamAbort(st);
10672
* virStreamFinish(st);
10676
* while (offset < got) {
10677
* int sent = virStreamSend(st, buf+offset, got-offset)
10679
* virStreamAbort(st);
10685
* if (virStreamFinish(st) < 0)
10686
* ... report an error ....
10688
* virStreamFree(st);
10691
* Returns the number of bytes written, which may be less
10694
* Returns -1 upon error, at which time the stream will
10695
* be marked as aborted, and the caller should now release
10696
* the stream with virStreamFree.
10698
* Returns -2 if the outgoing transmit buffers are full &
10699
* the stream is marked as non-blocking.
10701
int virStreamSend(virStreamPtr stream,
10705
DEBUG("stream=%p, data=%p, nbytes=%zi", stream, data, nbytes);
10707
virResetLastError();
10709
if (!VIR_IS_CONNECTED_STREAM(stream)) {
10710
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
10711
virDispatchError(NULL);
10715
if (stream->driver &&
10716
stream->driver->streamSend) {
10718
ret = (stream->driver->streamSend)(stream, data, nbytes);
10726
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
10729
virDispatchError(stream->conn);
10736
* @stream: pointer to the stream object
10737
* @data: buffer to write to stream
10738
* @nbytes: size of @data buffer
10740
* Write a series of bytes to the stream. This method may
10741
* block the calling application for an arbitrary amount
10744
* Errors are not guaranteed to be reported synchronously
10745
* with the call, but may instead be delayed until a
10748
* An example using this with a hypothetical file download
10751
* virStreamPtr st = virStreamNew(conn, 0);
10752
* int fd = open("demo.iso", O_WRONLY, 0600)
10754
* virConnectDownloadFile(conn, "demo.iso", st);
10758
* int got = virStreamRecv(st, buf, 1024);
10762
* virStreamFinish(st);
10766
* while (offset < got) {
10767
* int sent = write(fd, buf+offset, got-offset)
10769
* virStreamAbort(st);
10775
* if (virStreamFinish(st) < 0)
10776
* ... report an error ....
10778
* virStreamFree(st);
10782
* Returns the number of bytes read, which may be less
10785
* Returns 0 when the end of the stream is reached, at
10786
* which time the caller should invoke virStreamFinish()
10787
* to get confirmation of stream completion.
10789
* Returns -1 upon error, at which time the stream will
10790
* be marked as aborted, and the caller should now release
10791
* the stream with virStreamFree.
10793
* Returns -2 if there is no data pending to be read & the
10794
* stream is marked as non-blocking.
10796
int virStreamRecv(virStreamPtr stream,
10800
DEBUG("stream=%p, data=%p, nbytes=%zi", stream, data, nbytes);
10802
virResetLastError();
10804
if (!VIR_IS_CONNECTED_STREAM(stream)) {
10805
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
10806
virDispatchError(NULL);
10810
if (stream->driver &&
10811
stream->driver->streamRecv) {
10813
ret = (stream->driver->streamRecv)(stream, data, nbytes);
10821
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
10824
virDispatchError(stream->conn);
10830
* virStreamSendAll:
10831
* @stream: pointer to the stream object
10832
* @handler: source callback for reading data from application
10833
* @opaque: application defined data
10835
* Send the entire data stream, reading the data from the
10836
* requested data source. This is simply a convenient alternative
10837
* to virStreamSend, for apps that do blocking-I/o.
10839
* An example using this with a hypothetical file upload
10842
* int mysource(virStreamPtr st, char *buf, int nbytes, void *opaque) {
10843
* int *fd = opaque;
10845
* return read(*fd, buf, nbytes);
10848
* virStreamPtr st = virStreamNew(conn, 0);
10849
* int fd = open("demo.iso", O_RDONLY)
10851
* virConnectUploadFile(conn, st);
10852
* if (virStreamSendAll(st, mysource, &fd) < 0) {
10853
* ...report an error ...
10856
* if (virStreamFinish(st) < 0)
10857
* ...report an error...
10858
* virStreamFree(st);
10861
* Returns 0 if all the data was successfully sent. The caller
10862
* should invoke virStreamFinish(st) to flush the stream upon
10863
* success and then virStreamFree
10865
* Returns -1 upon any error, with virStreamAbort() already
10866
* having been called, so the caller need only call
10869
int virStreamSendAll(virStreamPtr stream,
10870
virStreamSourceFunc handler,
10873
char *bytes = NULL;
10874
int want = 1024*64;
10876
DEBUG("stream=%p, handler=%p, opaque=%p", stream, handler, opaque);
10878
virResetLastError();
10880
if (!VIR_IS_CONNECTED_STREAM(stream)) {
10881
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
10882
virDispatchError(NULL);
10886
if (stream->flags & VIR_STREAM_NONBLOCK) {
10887
virLibConnError(VIR_ERR_OPERATION_INVALID,
10888
_("data sources cannot be used for non-blocking streams"));
10892
if (VIR_ALLOC_N(bytes, want) < 0) {
10893
virReportOOMError();
10898
int got, offset = 0;
10899
got = (handler)(stream, bytes, want, opaque);
10901
virStreamAbort(stream);
10906
while (offset < got) {
10908
done = virStreamSend(stream, bytes + offset, got - offset);
10920
virDispatchError(stream->conn);
10927
* virStreamRecvAll:
10928
* @stream: pointer to the stream object
10929
* @handler: sink callback for writing data to application
10930
* @opaque: application defined data
10932
* Receive the entire data stream, sending the data to the
10933
* requested data sink. This is simply a convenient alternative
10934
* to virStreamRecv, for apps that do blocking-I/o.
10936
* An example using this with a hypothetical file download
10939
* int mysink(virStreamPtr st, const char *buf, int nbytes, void *opaque) {
10940
* int *fd = opaque;
10942
* return write(*fd, buf, nbytes);
10945
* virStreamPtr st = virStreamNew(conn, 0);
10946
* int fd = open("demo.iso", O_WRONLY)
10948
* virConnectUploadFile(conn, st);
10949
* if (virStreamRecvAll(st, mysink, &fd) < 0) {
10950
* ...report an error ...
10953
* if (virStreamFinish(st) < 0)
10954
* ...report an error...
10955
* virStreamFree(st);
10958
* Returns 0 if all the data was successfully received. The caller
10959
* should invoke virStreamFinish(st) to flush the stream upon
10960
* success and then virStreamFree
10962
* Returns -1 upon any error, with virStreamAbort() already
10963
* having been called, so the caller need only call
10966
int virStreamRecvAll(virStreamPtr stream,
10967
virStreamSinkFunc handler,
10970
char *bytes = NULL;
10971
int want = 1024*64;
10973
DEBUG("stream=%p, handler=%p, opaque=%p", stream, handler, opaque);
10975
virResetLastError();
10977
if (!VIR_IS_CONNECTED_STREAM(stream)) {
10978
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
10979
virDispatchError(NULL);
10983
if (stream->flags & VIR_STREAM_NONBLOCK) {
10984
virLibConnError(VIR_ERR_OPERATION_INVALID,
10985
_("data sinks cannot be used for non-blocking streams"));
10990
if (VIR_ALLOC_N(bytes, want) < 0) {
10991
virReportOOMError();
10996
int got, offset = 0;
10997
got = virStreamRecv(stream, bytes, want);
11002
while (offset < got) {
11004
done = (handler)(stream, bytes + offset, got - offset, opaque);
11006
virStreamAbort(stream);
11018
virDispatchError(stream->conn);
11025
* virStreamEventAddCallback:
11026
* @stream: pointer to the stream object
11027
* @events: set of events to monitor
11028
* @cb: callback to invoke when an event occurs
11029
* @opaque: application defined data
11030
* @ff: callback to free @opaque data
11032
* Register a callback to be notified when a stream
11033
* becomes writable, or readable. This is most commonly
11034
* used in conjunction with non-blocking data streams
11035
* to integrate into an event loop
11037
* Returns 0 on success, -1 upon error
11039
int virStreamEventAddCallback(virStreamPtr stream,
11041
virStreamEventCallback cb,
11043
virFreeCallback ff)
11045
DEBUG("stream=%p, events=%d, cb=%p, opaque=%p, ff=%p", stream, events, cb, opaque, ff);
11047
virResetLastError();
11049
if (!VIR_IS_CONNECTED_STREAM(stream)) {
11050
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11051
virDispatchError(NULL);
11055
if (stream->driver &&
11056
stream->driver->streamAddCallback) {
11058
ret = (stream->driver->streamAddCallback)(stream, events, cb, opaque, ff);
11064
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11067
virDispatchError(stream->conn);
11073
* virStreamEventUpdateCallback:
11074
* @stream: pointer to the stream object
11075
* @events: set of events to monitor
11077
* Changes the set of events to monitor for a stream. This allows
11078
* for event notification to be changed without having to
11079
* unregister & register the callback completely. This method
11080
* is guarenteed to succeed if a callback is already registered
11082
* Returns 0 on success, -1 if no callback is registered
11084
int virStreamEventUpdateCallback(virStreamPtr stream,
11087
DEBUG("stream=%p, events=%d", stream, events);
11089
virResetLastError();
11091
if (!VIR_IS_CONNECTED_STREAM(stream)) {
11092
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11093
virDispatchError(NULL);
11097
if (stream->driver &&
11098
stream->driver->streamUpdateCallback) {
11100
ret = (stream->driver->streamUpdateCallback)(stream, events);
11106
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11109
virDispatchError(stream->conn);
11114
* virStreamEventRemoveCallback:
11115
* @stream: pointer to the stream object
11117
* Remove an event callback from the stream
11119
* Returns 0 on success, -1 on error
11121
int virStreamEventRemoveCallback(virStreamPtr stream)
11123
DEBUG("stream=%p", stream);
11125
virResetLastError();
11127
if (!VIR_IS_CONNECTED_STREAM(stream)) {
11128
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11129
virDispatchError(NULL);
11133
if (stream->driver &&
11134
stream->driver->streamRemoveCallback) {
11136
ret = (stream->driver->streamRemoveCallback)(stream);
11142
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11145
virDispatchError(stream->conn);
11151
* @stream: pointer to the stream object
11153
* Indicate that there is no further data is to be transmitted
11154
* on the stream. For output streams this should be called once
11155
* all data has been written. For input streams this should be
11156
* called once virStreamRecv returns end-of-file.
11158
* This method is a synchronization point for all asynchronous
11159
* errors, so if this returns a success code the application can
11160
* be sure that all data has been successfully processed.
11162
* Returns 0 on success, -1 upon error
11164
int virStreamFinish(virStreamPtr stream)
11166
DEBUG("stream=%p", stream);
11168
virResetLastError();
11170
if (!VIR_IS_CONNECTED_STREAM(stream)) {
11171
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11172
virDispatchError(NULL);
11176
if (stream->driver &&
11177
stream->driver->streamFinish) {
11179
ret = (stream->driver->streamFinish)(stream);
11185
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11188
virDispatchError(stream->conn);
11194
* @stream: pointer to the stream object
11196
* Request that the in progress data transfer be cancelled
11197
* abnormally before the end of the stream has been reached.
11198
* For output streams this can be used to inform the driver
11199
* that the stream is being terminated early. For input
11200
* streams this can be used to inform the driver that it
11201
* should stop sending data.
11203
* Returns 0 on success, -1 upon error
11205
int virStreamAbort(virStreamPtr stream)
11207
DEBUG("stream=%p", stream);
11209
virResetLastError();
11211
if (!VIR_IS_CONNECTED_STREAM(stream)) {
11212
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11213
virDispatchError(NULL);
11217
if (stream->driver &&
11218
stream->driver->streamAbort) {
11220
ret = (stream->driver->streamAbort)(stream);
11226
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11229
virDispatchError(stream->conn);
11235
* @stream: pointer to the stream object
11237
* Decrement the reference count on a stream, releasing
11238
* the stream object if the reference count has hit zero.
11240
* There must not be an active data transfer in progress
11241
* when releasing the stream. If a stream needs to be
11242
* disposed of prior to end of stream being reached, then
11243
* the virStreamAbort function should be called first.
11245
* Returns 0 upon success, or -1 on error
11247
int virStreamFree(virStreamPtr stream)
11249
DEBUG("stream=%p", stream);
11251
virResetLastError();
11253
if (!VIR_IS_CONNECTED_STREAM(stream)) {
11254
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11255
virDispatchError(NULL);
11259
/* XXX Enforce shutdown before free'ing resources ? */
11261
if (virUnrefStream(stream) < 0) {
11262
virDispatchError(NULL);
11270
* virDomainIsActive:
11271
* @dom: pointer to the domain object
11273
* Determine if the domain is currently running
11275
* Returns 1 if running, 0 if inactive, -1 on error
11277
int virDomainIsActive(virDomainPtr dom)
11279
DEBUG("dom=%p", dom);
11281
virResetLastError();
11283
if (!VIR_IS_CONNECTED_DOMAIN(dom)) {
11284
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11285
virDispatchError(NULL);
11288
if (dom->conn->driver->domainIsActive) {
11290
ret = dom->conn->driver->domainIsActive(dom);
11296
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11298
virDispatchError(dom->conn);
11303
* virDomainIsPersistent:
11304
* @dom: pointer to the domain object
11306
* Determine if the domain has a persistent configuration
11307
* which means it will still exist after shutting down
11309
* Returns 1 if persistent, 0 if transient, -1 on error
11311
int virDomainIsPersistent(virDomainPtr dom)
11313
VIR_DOMAIN_DEBUG0(dom);
11315
virResetLastError();
11317
if (!VIR_IS_CONNECTED_DOMAIN(dom)) {
11318
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11319
virDispatchError(NULL);
11322
if (dom->conn->driver->domainIsPersistent) {
11324
ret = dom->conn->driver->domainIsPersistent(dom);
11330
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11332
virDispatchError(dom->conn);
11337
* virDomainIsUpdated:
11338
* @dom: pointer to the domain object
11340
* Determine if the domain has been updated.
11342
* Returns 1 if updated, 0 if not, -1 on error
11344
int virDomainIsUpdated(virDomainPtr dom)
11346
VIR_DOMAIN_DEBUG0(dom);
11348
virResetLastError();
11350
if (!VIR_IS_CONNECTED_DOMAIN(dom)) {
11351
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11352
virDispatchError(NULL);
11355
if (dom->conn->driver->domainIsUpdated) {
11357
ret = dom->conn->driver->domainIsUpdated(dom);
11363
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11365
virDispatchError(dom->conn);
11370
* virNetworkIsActive:
11371
* @net: pointer to the network object
11373
* Determine if the network is currently running
11375
* Returns 1 if running, 0 if inactive, -1 on error
11377
int virNetworkIsActive(virNetworkPtr net)
11379
DEBUG("net=%p", net);
11381
virResetLastError();
11383
if (!VIR_IS_CONNECTED_NETWORK(net)) {
11384
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11385
virDispatchError(NULL);
11388
if (net->conn->networkDriver->networkIsActive) {
11390
ret = net->conn->networkDriver->networkIsActive(net);
11396
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11398
virDispatchError(net->conn);
11404
* virNetworkIsPersistent:
11405
* @net: pointer to the network object
11407
* Determine if the network has a persistent configuration
11408
* which means it will still exist after shutting down
11410
* Returns 1 if persistent, 0 if transient, -1 on error
11412
int virNetworkIsPersistent(virNetworkPtr net)
11414
DEBUG("net=%p", net);
11416
virResetLastError();
11418
if (!VIR_IS_CONNECTED_NETWORK(net)) {
11419
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11420
virDispatchError(NULL);
11423
if (net->conn->networkDriver->networkIsPersistent) {
11425
ret = net->conn->networkDriver->networkIsPersistent(net);
11431
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11433
virDispatchError(net->conn);
11439
* virStoragePoolIsActive:
11440
* @pool: pointer to the storage pool object
11442
* Determine if the storage pool is currently running
11444
* Returns 1 if running, 0 if inactive, -1 on error
11446
int virStoragePoolIsActive(virStoragePoolPtr pool)
11448
DEBUG("pool=%p", pool);
11450
virResetLastError();
11452
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
11453
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11454
virDispatchError(NULL);
11457
if (pool->conn->storageDriver->poolIsActive) {
11459
ret = pool->conn->storageDriver->poolIsActive(pool);
11465
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11467
virDispatchError(pool->conn);
11473
* virStoragePoolIsPersistent:
11474
* @pool: pointer to the storage pool object
11476
* Determine if the storage pool has a persistent configuration
11477
* which means it will still exist after shutting down
11479
* Returns 1 if persistent, 0 if transient, -1 on error
11481
int virStoragePoolIsPersistent(virStoragePoolPtr pool)
11483
DEBUG("pool=%p", pool);
11485
virResetLastError();
11487
if (!VIR_IS_CONNECTED_STORAGE_POOL(pool)) {
11488
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11489
virDispatchError(NULL);
11492
if (pool->conn->storageDriver->poolIsPersistent) {
11494
ret = pool->conn->storageDriver->poolIsPersistent(pool);
11500
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11502
virDispatchError(pool->conn);
11509
* virConnectNumOfNWFilters:
11510
* @conn: pointer to the hypervisor connection
11512
* Provides the number of nwfilters.
11514
* Returns the number of nwfilters found or -1 in case of error
11517
virConnectNumOfNWFilters(virConnectPtr conn)
11519
DEBUG("conn=%p", conn);
11521
virResetLastError();
11523
if (!VIR_IS_CONNECT(conn)) {
11524
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11525
virDispatchError(NULL);
11529
if (conn->nwfilterDriver && conn->nwfilterDriver->numOfNWFilters) {
11531
ret = conn->nwfilterDriver->numOfNWFilters (conn);
11537
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11540
virDispatchError(conn);
11546
* virConnectListNWFilters:
11547
* @conn: pointer to the hypervisor connection
11548
* @names: array to collect the list of names of network filters
11549
* @maxnames: size of @names
11551
* Collect the list of network filters, and store their names in @names
11553
* Returns the number of network filters found or -1 in case of error
11556
virConnectListNWFilters(virConnectPtr conn, char **const names, int maxnames)
11558
DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
11560
virResetLastError();
11562
if (!VIR_IS_CONNECT(conn)) {
11563
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11564
virDispatchError(NULL);
11568
if ((names == NULL) || (maxnames < 0)) {
11569
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
11573
if (conn->nwfilterDriver && conn->nwfilterDriver->listNWFilters) {
11575
ret = conn->nwfilterDriver->listNWFilters (conn, names, maxnames);
11581
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11584
virDispatchError(conn);
11590
* virNWFilterLookupByName:
11591
* @conn: pointer to the hypervisor connection
11592
* @name: name for the network filter
11594
* Try to lookup a network filter on the given hypervisor based on its name.
11596
* Returns a new nwfilter object or NULL in case of failure. If the
11597
* network filter cannot be found, then VIR_ERR_NO_NWFILTER error is raised.
11600
virNWFilterLookupByName(virConnectPtr conn, const char *name)
11602
DEBUG("conn=%p, name=%s", conn, name);
11604
virResetLastError();
11606
if (!VIR_IS_CONNECT(conn)) {
11607
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11608
virDispatchError(NULL);
11611
if (name == NULL) {
11612
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
11616
if (conn->nwfilterDriver && conn->nwfilterDriver->nwfilterLookupByName) {
11617
virNWFilterPtr ret;
11618
ret = conn->nwfilterDriver->nwfilterLookupByName (conn, name);
11624
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11627
virDispatchError(conn);
11632
* virNWFilterLookupByUUID:
11633
* @conn: pointer to the hypervisor connection
11634
* @uuid: the raw UUID for the network filter
11636
* Try to lookup a network filter on the given hypervisor based on its UUID.
11638
* Returns a new nwfilter object or NULL in case of failure. If the
11639
* nwfdilter cannot be found, then VIR_ERR_NO_NWFILTER error is raised.
11642
virNWFilterLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
11644
DEBUG("conn=%p, uuid=%s", conn, uuid);
11646
virResetLastError();
11648
if (!VIR_IS_CONNECT(conn)) {
11649
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11650
virDispatchError(NULL);
11653
if (uuid == NULL) {
11654
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
11658
if (conn->nwfilterDriver && conn->nwfilterDriver->nwfilterLookupByUUID){
11659
virNWFilterPtr ret;
11660
ret = conn->nwfilterDriver->nwfilterLookupByUUID (conn, uuid);
11666
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11669
virDispatchError(conn);
11674
* virNWFilterLookupByUUIDString:
11675
* @conn: pointer to the hypervisor connection
11676
* @uuidstr: the string UUID for the nwfilter
11678
* Try to lookup an nwfilter on the given hypervisor based on its UUID.
11680
* Returns a new nwfilter object or NULL in case of failure. If the
11681
* nwfilter cannot be found, then VIR_ERR_NO_NWFILTER error is raised.
11684
virNWFilterLookupByUUIDString(virConnectPtr conn, const char *uuidstr)
11686
unsigned char uuid[VIR_UUID_BUFLEN];
11687
DEBUG("conn=%p, uuidstr=%s", conn, uuidstr);
11689
virResetLastError();
11691
if (!VIR_IS_CONNECT(conn)) {
11692
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11693
virDispatchError(NULL);
11696
if (uuidstr == NULL) {
11697
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
11701
if (virUUIDParse(uuidstr, uuid) < 0) {
11702
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
11706
return virNWFilterLookupByUUID(conn, &uuid[0]);
11709
virDispatchError(conn);
11715
* @nwfilter: a nwfilter object
11717
* Free the nwfilter object. The running instance is kept alive.
11718
* The data structure is freed and should not be used thereafter.
11720
* Returns 0 in case of success and -1 in case of failure.
11723
virNWFilterFree(virNWFilterPtr nwfilter)
11725
DEBUG("nwfilter=%p", nwfilter);
11727
virResetLastError();
11729
if (!VIR_IS_CONNECTED_NWFILTER(nwfilter)) {
11730
virLibNWFilterError(VIR_ERR_INVALID_NWFILTER, __FUNCTION__);
11731
virDispatchError(NULL);
11734
if (virUnrefNWFilter(nwfilter) < 0) {
11735
virDispatchError(NULL);
11742
* virNWFilterGetName:
11743
* @nwfilter: a nwfilter object
11745
* Get the public name for the network filter
11747
* Returns a pointer to the name or NULL, the string need not be deallocated
11748
* its lifetime will be the same as the nwfilter object.
11751
virNWFilterGetName(virNWFilterPtr nwfilter)
11753
DEBUG("nwfilter=%p", nwfilter);
11755
virResetLastError();
11757
if (!VIR_IS_NWFILTER(nwfilter)) {
11758
virLibNWFilterError(VIR_ERR_INVALID_NWFILTER, __FUNCTION__);
11759
virDispatchError(NULL);
11762
return nwfilter->name;
11766
* virNWFilterGetUUID:
11767
* @nwfilter: a nwfilter object
11768
* @uuid: pointer to a VIR_UUID_BUFLEN bytes array
11770
* Get the UUID for a network filter
11772
* Returns -1 in case of error, 0 in case of success
11775
virNWFilterGetUUID(virNWFilterPtr nwfilter, unsigned char *uuid)
11777
DEBUG("nwfilter=%p, uuid=%p", nwfilter, uuid);
11779
virResetLastError();
11781
if (!VIR_IS_NWFILTER(nwfilter)) {
11782
virLibNWFilterError(VIR_ERR_INVALID_NWFILTER, __FUNCTION__);
11783
virDispatchError(NULL);
11786
if (uuid == NULL) {
11787
virLibNWFilterError(VIR_ERR_INVALID_ARG, __FUNCTION__);
11791
memcpy(uuid, &nwfilter->uuid[0], VIR_UUID_BUFLEN);
11796
virDispatchError(nwfilter->conn);
11801
* virNWFilterGetUUIDString:
11802
* @nwfilter: a nwfilter object
11803
* @buf: pointer to a VIR_UUID_STRING_BUFLEN bytes array
11805
* Get the UUID for a network filter as string. For more information about
11806
* UUID see RFC4122.
11808
* Returns -1 in case of error, 0 in case of success
11811
virNWFilterGetUUIDString(virNWFilterPtr nwfilter, char *buf)
11813
unsigned char uuid[VIR_UUID_BUFLEN];
11814
DEBUG("nwfilter=%p, buf=%p", nwfilter, buf);
11816
virResetLastError();
11818
if (!VIR_IS_NWFILTER(nwfilter)) {
11819
virLibNWFilterError(VIR_ERR_INVALID_NWFILTER, __FUNCTION__);
11820
virDispatchError(NULL);
11824
virLibNWFilterError(VIR_ERR_INVALID_ARG, __FUNCTION__);
11828
if (virNWFilterGetUUID(nwfilter, &uuid[0]))
11831
virUUIDFormat(uuid, buf);
11835
virDispatchError(nwfilter->conn);
11841
* virNWFilterDefineXML:
11842
* @conn: pointer to the hypervisor connection
11843
* @xmlDesc: an XML description of the nwfilter
11845
* Define a new network filter, based on an XML description
11846
* similar to the one returned by virNWFilterGetXMLDesc()
11848
* Returns a new nwfilter object or NULL in case of failure
11851
virNWFilterDefineXML(virConnectPtr conn, const char *xmlDesc)
11853
DEBUG("conn=%p, xmlDesc=%s", conn, xmlDesc);
11855
virResetLastError();
11857
if (!VIR_IS_CONNECT(conn)) {
11858
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
11859
virDispatchError(NULL);
11862
if (xmlDesc == NULL) {
11863
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
11866
if (conn->flags & VIR_CONNECT_RO) {
11867
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
11871
if (conn->nwfilterDriver && conn->nwfilterDriver->defineXML) {
11872
virNWFilterPtr ret;
11873
ret = conn->nwfilterDriver->defineXML (conn, xmlDesc, 0);
11879
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11882
virDispatchError(conn);
11888
* virNWFilterUndefine:
11889
* @nwfilter: a nwfilter object
11891
* Undefine the nwfilter object. This call will not succeed if
11892
* a running VM is referencing the filter. This does not free the
11893
* associated virNWFilterPtr object.
11895
* Returns 0 in case of success and -1 in case of failure.
11898
virNWFilterUndefine(virNWFilterPtr nwfilter)
11900
virConnectPtr conn;
11901
DEBUG("nwfilter=%p", nwfilter);
11903
virResetLastError();
11905
if (!VIR_IS_CONNECTED_NWFILTER(nwfilter)) {
11906
virLibNWFilterError(VIR_ERR_INVALID_NWFILTER, __FUNCTION__);
11907
virDispatchError(NULL);
11911
conn = nwfilter->conn;
11912
if (conn->flags & VIR_CONNECT_RO) {
11913
virLibNWFilterError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
11917
if (conn->nwfilterDriver && conn->nwfilterDriver->undefine) {
11919
ret = conn->nwfilterDriver->undefine (nwfilter);
11925
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11928
virDispatchError(nwfilter->conn);
11934
* virNWFilterGetXMLDesc:
11935
* @nwfilter: a nwfilter object
11936
* @flags: an OR'ed set of extraction flags, not used yet
11938
* Provide an XML description of the network filter. The description may be
11939
* reused later to redefine the network filter with virNWFilterCreateXML().
11941
* Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
11942
* the caller must free() the returned value.
11945
virNWFilterGetXMLDesc(virNWFilterPtr nwfilter, int flags)
11947
virConnectPtr conn;
11948
DEBUG("nwfilter=%p, flags=%d", nwfilter, flags);
11950
virResetLastError();
11952
if (!VIR_IS_CONNECTED_NWFILTER(nwfilter)) {
11953
virLibNWFilterError(VIR_ERR_INVALID_NWFILTER, __FUNCTION__);
11954
virDispatchError(NULL);
11958
virLibNWFilterError(VIR_ERR_INVALID_ARG, __FUNCTION__);
11962
conn = nwfilter->conn;
11964
if (conn->nwfilterDriver && conn->nwfilterDriver->getXMLDesc) {
11966
ret = conn->nwfilterDriver->getXMLDesc (nwfilter, flags);
11972
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
11975
virDispatchError(nwfilter->conn);
11982
* @nwfilter: the nwfilter to hold a reference on
11984
* Increment the reference count on the nwfilter. For each
11985
* additional call to this method, there shall be a corresponding
11986
* call to virNWFilterFree to release the reference count, once
11987
* the caller no longer needs the reference to this object.
11989
* This method is typically useful for applications where multiple
11990
* threads are using a connection, and it is required that the
11991
* connection remain open until all threads have finished using
11992
* it. ie, each new thread using an nwfilter would increment
11993
* the reference count.
11995
* Returns 0 in case of success, -1 in case of failure.
11998
virNWFilterRef(virNWFilterPtr nwfilter)
12000
if ((!VIR_IS_CONNECTED_NWFILTER(nwfilter))) {
12001
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
12002
virDispatchError(NULL);
12005
virMutexLock(&nwfilter->conn->lock);
12006
DEBUG("nwfilter=%p refs=%d", nwfilter, nwfilter->refs);
12008
virMutexUnlock(&nwfilter->conn->lock);
12014
* virInterfaceIsActive:
12015
* @iface: pointer to the interface object
12017
* Determine if the interface is currently running
12019
* Returns 1 if running, 0 if inactive, -1 on error
12021
int virInterfaceIsActive(virInterfacePtr iface)
12023
DEBUG("iface=%p", iface);
12025
virResetLastError();
12027
if (!VIR_IS_CONNECTED_INTERFACE(iface)) {
12028
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
12029
virDispatchError(NULL);
12032
if (iface->conn->interfaceDriver->interfaceIsActive) {
12034
ret = iface->conn->interfaceDriver->interfaceIsActive(iface);
12040
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12042
virDispatchError(iface->conn);
12048
* virConnectIsEncrypted:
12049
* @conn: pointer to the connection object
12051
* Determine if the connection to the hypervisor is encrypted
12053
* Returns 1 if encrypted, 0 if not encrypted, -1 on error
12055
int virConnectIsEncrypted(virConnectPtr conn)
12057
DEBUG("conn=%p", conn);
12059
virResetLastError();
12061
if (!VIR_IS_CONNECT(conn)) {
12062
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
12063
virDispatchError(NULL);
12066
if (conn->driver->isEncrypted) {
12068
ret = conn->driver->isEncrypted(conn);
12074
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12076
virDispatchError(conn);
12081
* virConnectIsSecure:
12082
* @conn: pointer to the connection object
12084
* Determine if the connection to the hypervisor is secure
12086
* A connection will be classed as secure if it is either
12087
* encrypted, or running over a channel which is not exposed
12088
* to eavesdropping (eg a UNIX domain socket, or pipe)
12090
* Returns 1 if secure, 0 if secure, -1 on error
12092
int virConnectIsSecure(virConnectPtr conn)
12094
DEBUG("conn=%p", conn);
12096
virResetLastError();
12098
if (!VIR_IS_CONNECT(conn)) {
12099
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
12100
virDispatchError(NULL);
12103
if (conn->driver->isSecure) {
12105
ret = conn->driver->isSecure(conn);
12111
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12113
virDispatchError(conn);
12119
* virConnectCompareCPU:
12120
* @conn: virConnect connection
12121
* @xmlDesc: XML describing the CPU to compare with host CPU
12122
* @flags: currently unused, pass 0
12124
* Compares the given CPU description with the host CPU
12126
* Returns comparison result according to enum virCPUCompareResult
12129
virConnectCompareCPU(virConnectPtr conn,
12130
const char *xmlDesc,
12131
unsigned int flags)
12133
VIR_DEBUG("conn=%p, xmlDesc=%s, flags=%u", conn, xmlDesc, flags);
12135
virResetLastError();
12137
if (!VIR_IS_CONNECT(conn)) {
12138
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
12139
virDispatchError(NULL);
12140
return VIR_CPU_COMPARE_ERROR;
12142
if (xmlDesc == NULL) {
12143
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
12147
if (conn->driver->cpuCompare) {
12150
ret = conn->driver->cpuCompare(conn, xmlDesc, flags);
12151
if (ret == VIR_CPU_COMPARE_ERROR)
12156
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12159
virDispatchError(conn);
12160
return VIR_CPU_COMPARE_ERROR;
12165
* virConnectBaselineCPU:
12167
* @conn: virConnect connection
12168
* @xmlCPUs: array of XML descriptions of host CPUs
12169
* @ncpus: number of CPUs in xmlCPUs
12170
* @flags: fine-tuning flags, currently unused, pass 0.
12172
* Computes the most feature-rich CPU which is compatible with all given
12175
* Returns XML description of the computed CPU or NULL on error.
12178
virConnectBaselineCPU(virConnectPtr conn,
12179
const char **xmlCPUs,
12180
unsigned int ncpus,
12181
unsigned int flags)
12185
VIR_DEBUG("conn=%p, xmlCPUs=%p, ncpus=%u, flags=%u",
12186
conn, xmlCPUs, ncpus, flags);
12188
for (i = 0; i < ncpus; i++)
12189
VIR_DEBUG("xmlCPUs[%u]=%s", i, NULLSTR(xmlCPUs[i]));
12192
virResetLastError();
12194
if (!VIR_IS_CONNECT(conn)) {
12195
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
12196
virDispatchError(NULL);
12199
if (xmlCPUs == NULL) {
12200
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
12204
if (conn->driver->cpuBaseline) {
12207
cpu = conn->driver->cpuBaseline(conn, xmlCPUs, ncpus, flags);
12213
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12216
virDispatchError(conn);
12222
* virDomainGetJobInfo:
12223
* @domain: a domain object
12224
* @info: pointer to a virDomainJobInfo structure allocated by the user
12226
* Extract information about progress of a background job on a domain.
12227
* Will return an error if the domain is not active.
12229
* Returns 0 in case of success and -1 in case of failure.
12232
virDomainGetJobInfo(virDomainPtr domain, virDomainJobInfoPtr info)
12234
virConnectPtr conn;
12236
VIR_DOMAIN_DEBUG(domain, "info=%p", info);
12238
virResetLastError();
12240
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
12241
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12242
virDispatchError(NULL);
12245
if (info == NULL) {
12246
virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
12250
memset(info, 0, sizeof(virDomainJobInfo));
12252
conn = domain->conn;
12254
if (conn->driver->domainGetJobInfo) {
12256
ret = conn->driver->domainGetJobInfo (domain, info);
12262
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12265
virDispatchError(domain->conn);
12271
* virDomainAbortJob:
12272
* @domain: a domain object
12274
* Requests that the current background job be aborted at the
12275
* soonest opportunity. This will block until the job has
12276
* either completed, or aborted.
12278
* Returns 0 in case of success and -1 in case of failure.
12281
virDomainAbortJob(virDomainPtr domain)
12283
virConnectPtr conn;
12285
VIR_DOMAIN_DEBUG0(domain);
12287
virResetLastError();
12289
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
12290
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12291
virDispatchError(NULL);
12295
conn = domain->conn;
12296
if (conn->flags & VIR_CONNECT_RO) {
12297
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
12301
if (conn->driver->domainAbortJob) {
12303
ret = conn->driver->domainAbortJob(domain);
12309
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12312
virDispatchError(conn);
12318
* virDomainMigrateSetMaxDowntime:
12319
* @domain: a domain object
12320
* @downtime: maximum tolerable downtime for live migration, in milliseconds
12321
* @flags: fine-tuning flags, currently unused, use 0
12323
* Sets maximum tolerable time for which the domain is allowed to be paused
12324
* at the end of live migration. It's supposed to be called while the domain is
12325
* being live-migrated as a reaction to migration progress.
12327
* Returns 0 in case of success, -1 otherwise.
12330
virDomainMigrateSetMaxDowntime(virDomainPtr domain,
12331
unsigned long long downtime,
12332
unsigned int flags)
12334
virConnectPtr conn;
12336
VIR_DOMAIN_DEBUG(domain, "downtime=%llu, flags=%u", downtime, flags);
12338
virResetLastError();
12340
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
12341
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12342
virDispatchError(NULL);
12346
conn = domain->conn;
12347
if (conn->flags & VIR_CONNECT_RO) {
12348
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
12352
if (conn->driver->domainMigrateSetMaxDowntime) {
12353
if (conn->driver->domainMigrateSetMaxDowntime(domain, downtime, flags) < 0)
12358
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12360
virDispatchError(conn);
12365
* virConnectDomainEventRegisterAny:
12366
* @conn: pointer to the connection
12367
* @dom: pointer to the domain
12368
* @eventID: the event type to receive
12369
* @cb: callback to the function handling domain events
12370
* @opaque: opaque data to pass on to the callback
12371
* @freecb: optional function to deallocate opaque when not used anymore
12373
* Adds a callback to receive notifications of arbitrary domain events
12374
* occurring on a domain.
12376
* If dom is NULL, then events will be monitored for any domain. If dom
12377
* is non-NULL, then only the specific domain will be monitored
12379
* Most types of event have a callback providing a custom set of parameters
12380
* for the event. When registering an event, it is thus neccessary to use
12381
* the VIR_DOMAIN_EVENT_CALLBACK() macro to cast the supplied function pointer
12382
* to match the signature of this method.
12384
* The virDomainPtr object handle passed into the callback upon delivery
12385
* of an event is only valid for the duration of execution of the callback.
12386
* If the callback wishes to keep the domain object after the callback
12387
* returns, it shall take a reference to it, by calling virDomainRef.
12388
* The reference can be released once the object is no longer required
12389
* by calling virDomainFree.
12391
* The return value from this method is a positive integer identifier
12392
* for the callback. To unregister a callback, this callback ID should
12393
* be passed to the virDomainEventUnregisterAny method
12395
* Returns a callback identifier on success, -1 on failure
12398
virConnectDomainEventRegisterAny(virConnectPtr conn,
12401
virConnectDomainEventGenericCallback cb,
12403
virFreeCallback freecb)
12405
VIR_DOMAIN_DEBUG(dom, "conn=%p, eventID=%d, cb=%p, opaque=%p, freecb=%p",
12406
conn, eventID, cb, opaque, freecb);
12408
virResetLastError();
12410
if (!VIR_IS_CONNECT(conn)) {
12411
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
12412
virDispatchError(NULL);
12416
!(VIR_IS_CONNECTED_DOMAIN(dom) && dom->conn == conn)) {
12417
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
12418
virDispatchError(conn);
12421
if (eventID < 0 || eventID >= VIR_DOMAIN_EVENT_ID_LAST || cb == NULL) {
12422
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
12426
if ((conn->driver) && (conn->driver->domainEventRegisterAny)) {
12428
ret = conn->driver->domainEventRegisterAny(conn, dom, eventID, cb, opaque, freecb);
12434
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12436
virDispatchError(conn);
12441
* virConnectDomainEventDeregisterAny:
12442
* @conn: pointer to the connection
12443
* @callbackID: the callback identifier
12445
* Removes an event callback. The callbackID parameter should be the
12446
* vaule obtained from a previous virDomainEventRegisterAny method.
12448
* Returns 0 on success, -1 on failure
12451
virConnectDomainEventDeregisterAny(virConnectPtr conn,
12454
DEBUG("conn=%p, callbackID=%d", conn, callbackID);
12456
virResetLastError();
12458
if (!VIR_IS_CONNECT(conn)) {
12459
virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__);
12460
virDispatchError(NULL);
12463
if (callbackID < 0) {
12464
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
12467
if ((conn->driver) && (conn->driver->domainEventDeregisterAny)) {
12469
ret = conn->driver->domainEventDeregisterAny(conn, callbackID);
12475
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12477
virDispatchError(conn);
12482
* virDomainManagedSave:
12483
* @dom: pointer to the domain
12484
* @flags: optional flags currently unused
12486
* This method will suspend a domain and save its memory contents to
12487
* a file on disk. After the call, if successful, the domain is not
12488
* listed as running anymore.
12489
* The difference from virDomainSave() is that libvirt is keeping track of
12490
* the saved state itself, and will reuse it once the domain is being
12491
* restarted (automatically or via an explicit libvirt call).
12492
* As a result any running domain is sure to not have a managed saved image.
12494
* Returns 0 in case of success or -1 in case of failure
12496
int virDomainManagedSave(virDomainPtr dom, unsigned int flags)
12498
virConnectPtr conn;
12500
VIR_DOMAIN_DEBUG(dom, "flags=%u", flags);
12502
virResetLastError();
12504
if (!VIR_IS_CONNECTED_DOMAIN(dom)) {
12505
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12506
virDispatchError(NULL);
12511
if (conn->flags & VIR_CONNECT_RO) {
12512
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
12516
if (conn->driver->domainManagedSave) {
12519
ret = conn->driver->domainManagedSave(dom, flags);
12525
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12528
virDispatchError(conn);
12533
* virDomainHasManagedSaveImage:
12534
* @dom: pointer to the domain
12535
* @flags: optional flags currently unused
12537
* Check if a domain has a managed save image as created by
12538
* virDomainManagedSave(). Note that any running domain should not have
12539
* such an image, as it should have been removed on restart.
12541
* Returns 0 if no image is present, 1 if an image is present, and
12542
* -1 in case of error
12544
int virDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
12546
virConnectPtr conn;
12548
VIR_DOMAIN_DEBUG(dom, "flags=%u", flags);
12550
virResetLastError();
12552
if (!VIR_IS_CONNECTED_DOMAIN(dom)) {
12553
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12554
virDispatchError(NULL);
12560
if (conn->driver->domainHasManagedSaveImage) {
12563
ret = conn->driver->domainHasManagedSaveImage(dom, flags);
12569
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12572
virDispatchError(conn);
12577
* virDomainManagedSaveRemove:
12578
* @dom: pointer to the domain
12579
* @flags: optional flags currently unused
12581
* Remove any managed save image for this domain.
12583
* Returns 0 in case of success, and -1 in case of error
12585
int virDomainManagedSaveRemove(virDomainPtr dom, unsigned int flags)
12587
virConnectPtr conn;
12589
VIR_DOMAIN_DEBUG(dom, "flags=%u", flags);
12591
virResetLastError();
12593
if (!VIR_IS_CONNECTED_DOMAIN(dom)) {
12594
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12595
virDispatchError(NULL);
12600
if (conn->flags & VIR_CONNECT_RO) {
12601
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
12605
if (conn->driver->domainManagedSaveRemove) {
12608
ret = conn->driver->domainManagedSaveRemove(dom, flags);
12614
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12617
virDispatchError(conn);
12622
* virDomainSnapshotCreateXML:
12623
* @domain: a domain object
12624
* @xmlDesc: string containing an XML description of the domain
12625
* @flags: unused flag parameters; callers should pass 0
12627
* Creates a new snapshot of a domain based on the snapshot xml
12628
* contained in xmlDesc.
12630
* Returns an (opaque) virDomainSnapshotPtr on success, NULL on failure.
12632
virDomainSnapshotPtr
12633
virDomainSnapshotCreateXML(virDomainPtr domain,
12634
const char *xmlDesc,
12635
unsigned int flags)
12637
virConnectPtr conn;
12639
VIR_DOMAIN_DEBUG(domain, "xmlDesc=%s, flags=%u", xmlDesc, flags);
12641
virResetLastError();
12643
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
12644
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12645
virDispatchError(NULL);
12649
conn = domain->conn;
12650
if (conn->flags & VIR_CONNECT_RO) {
12651
virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
12655
if (conn->driver->domainSnapshotCreateXML) {
12656
virDomainSnapshotPtr ret;
12657
ret = conn->driver->domainSnapshotCreateXML(domain, xmlDesc, flags);
12663
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12665
virDispatchError(conn);
12670
* virDomainSnapshotGetXMLDesc:
12671
* @snapshot: a domain snapshot object
12672
* @flags: unused flag parameters; callers should pass 0
12674
* Provide an XML description of the domain snapshot.
12676
* Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
12677
* the caller must free() the returned value.
12680
virDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot,
12681
unsigned int flags)
12683
virConnectPtr conn;
12684
DEBUG("snapshot=%p, flags=%d", snapshot, flags);
12686
virResetLastError();
12688
if (!VIR_IS_DOMAIN_SNAPSHOT(snapshot)) {
12689
virLibDomainSnapshotError(VIR_ERR_INVALID_DOMAIN_SNAPSHOT,
12691
virDispatchError(NULL);
12695
conn = snapshot->domain->conn;
12697
if ((conn->flags & VIR_CONNECT_RO) && (flags & VIR_DOMAIN_XML_SECURE)) {
12698
virLibConnError(VIR_ERR_OPERATION_DENIED,
12699
_("virDomainSnapshotGetXMLDesc with secure flag"));
12703
if (conn->driver->domainSnapshotDumpXML) {
12705
ret = conn->driver->domainSnapshotDumpXML(snapshot, flags);
12711
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12713
virDispatchError(conn);
12718
* virDomainSnapshotNum:
12719
* @domain: a domain object
12720
* @flags: unused flag parameters; callers should pass 0
12722
* Provides the number of domain snapshots for this domain..
12724
* Returns the number of domain snapshost found or -1 in case of error.
12727
virDomainSnapshotNum(virDomainPtr domain, unsigned int flags)
12729
virConnectPtr conn;
12731
VIR_DOMAIN_DEBUG0(domain);
12733
virResetLastError();
12735
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
12736
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12737
virDispatchError(NULL);
12741
conn = domain->conn;
12742
if (conn->driver->domainSnapshotNum) {
12743
int ret = conn->driver->domainSnapshotNum(domain, flags);
12749
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12751
virDispatchError(conn);
12756
* virDomainSnapshotListNames:
12757
* @domain: a domain object
12758
* @names: array to collect the list of names of snapshots
12759
* @nameslen: size of @names
12760
* @flags: unused flag parameters; callers should pass 0
12762
* Collect the list of domain snapshots for the given domain, and store
12763
* their names in @names. Caller is responsible for freeing each member
12766
* Returns the number of domain snapshots found or -1 in case of error.
12769
virDomainSnapshotListNames(virDomainPtr domain, char **names, int nameslen,
12770
unsigned int flags)
12772
virConnectPtr conn;
12774
VIR_DOMAIN_DEBUG(domain, "names=%p, nameslen=%d, flags=%u",
12775
names, nameslen, flags);
12777
virResetLastError();
12779
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
12780
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12781
virDispatchError(NULL);
12785
conn = domain->conn;
12787
if ((names == NULL) || (nameslen < 0)) {
12788
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
12792
if (conn->driver->domainSnapshotListNames) {
12793
int ret = conn->driver->domainSnapshotListNames(domain, names,
12800
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12802
virDispatchError(conn);
12807
* virDomainSnapshotLookupByName:
12808
* @domain: a domain object
12809
* @name: name for the domain snapshot
12810
* @flags: unused flag parameters; callers should pass 0
12812
* Try to lookup a domain snapshot based on its name.
12814
* Returns a domain snapshot object or NULL in case of failure. If the
12815
* domain snapshot cannot be found, then the VIR_ERR_NO_DOMAIN_SNAPSHOT
12818
virDomainSnapshotPtr
12819
virDomainSnapshotLookupByName(virDomainPtr domain,
12821
unsigned int flags)
12823
virConnectPtr conn;
12825
VIR_DOMAIN_DEBUG(domain, "name=%s, flags=%u", name, flags);
12827
virResetLastError();
12829
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
12830
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12831
virDispatchError(NULL);
12835
conn = domain->conn;
12837
if (name == NULL) {
12838
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
12842
if (conn->driver->domainSnapshotLookupByName) {
12843
virDomainSnapshotPtr dom;
12844
dom = conn->driver->domainSnapshotLookupByName(domain, name, flags);
12850
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12852
virDispatchError(conn);
12857
* virDomainHasCurrentSnapshot:
12858
* @domain: pointer to the domain object
12859
* @flags: unused flag parameters; callers should pass 0
12861
* Determine if the domain has a current snapshot.
12863
* Returns 1 if such snapshot exists, 0 if it doesn't, -1 on error.
12866
virDomainHasCurrentSnapshot(virDomainPtr domain, unsigned int flags)
12868
virConnectPtr conn;
12870
VIR_DOMAIN_DEBUG(domain, "flags=%u", flags);
12872
virResetLastError();
12874
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
12875
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12876
virDispatchError(NULL);
12880
conn = domain->conn;
12882
if (conn->driver->domainHasCurrentSnapshot) {
12883
int ret = conn->driver->domainHasCurrentSnapshot(domain, flags);
12889
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12891
virDispatchError(conn);
12896
* virDomainSnapshotCurrent:
12897
* @domain: a domain object
12898
* @flags: unused flag parameters; callers should pass 0
12900
* Get the current snapshot for a domain, if any.
12902
* Returns a domain snapshot object or NULL in case of failure. If the
12903
* current domain snapshot cannot be found, then the VIR_ERR_NO_DOMAIN_SNAPSHOT
12906
virDomainSnapshotPtr
12907
virDomainSnapshotCurrent(virDomainPtr domain,
12908
unsigned int flags)
12910
virConnectPtr conn;
12912
VIR_DOMAIN_DEBUG(domain, "flags=%u", flags);
12914
virResetLastError();
12916
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
12917
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
12918
virDispatchError(NULL);
12922
conn = domain->conn;
12924
if (conn->driver->domainSnapshotCurrent) {
12925
virDomainSnapshotPtr snap;
12926
snap = conn->driver->domainSnapshotCurrent(domain, flags);
12932
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12934
virDispatchError(conn);
12939
* virDomainRevertToSnapshot:
12940
* @snapshot: a domain snapshot object
12941
* @flags: unused flag parameters; callers should pass 0
12943
* Revert the domain to a given snapshot.
12945
* Returns 0 if the creation is successful, -1 on error.
12948
virDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
12949
unsigned int flags)
12951
virConnectPtr conn;
12953
DEBUG("snapshot=%p, flags=%u", snapshot, flags);
12955
virResetLastError();
12957
if (!VIR_IS_DOMAIN_SNAPSHOT(snapshot)) {
12958
virLibDomainSnapshotError(VIR_ERR_INVALID_DOMAIN_SNAPSHOT,
12960
virDispatchError(NULL);
12964
conn = snapshot->domain->conn;
12966
if (conn->driver->domainRevertToSnapshot) {
12967
int ret = conn->driver->domainRevertToSnapshot(snapshot, flags);
12973
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
12975
virDispatchError(conn);
12980
* virDomainSnapshotDelete:
12981
* @snapshot: a domain snapshot object
12982
* @flags: flag parameters
12984
* Delete the snapshot.
12986
* If @flags is 0, then just this snapshot is deleted, and changes from
12987
* this snapshot are automatically merged into children snapshots. If
12988
* flags is VIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN, then this snapshot
12989
* and any children snapshots are deleted.
12991
* Returns 0 if the snapshot was successfully deleted, -1 on error.
12994
virDomainSnapshotDelete(virDomainSnapshotPtr snapshot,
12995
unsigned int flags)
12997
virConnectPtr conn;
12999
DEBUG("snapshot=%p, flags=%u", snapshot, flags);
13001
virResetLastError();
13003
if (!VIR_IS_DOMAIN_SNAPSHOT(snapshot)) {
13004
virLibDomainSnapshotError(VIR_ERR_INVALID_DOMAIN_SNAPSHOT,
13006
virDispatchError(NULL);
13010
conn = snapshot->domain->conn;
13012
if (conn->driver->domainSnapshotDelete) {
13013
int ret = conn->driver->domainSnapshotDelete(snapshot, flags);
13019
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
13021
virDispatchError(conn);
13026
* virDomainSnapshotFree:
13027
* @snapshot: a domain snapshot object
13029
* Free the domain snapshot object. The snapshot itself is not modified.
13030
* The data structure is freed and should not be used thereafter.
13032
* Returns 0 in case of success and -1 in case of failure.
13035
virDomainSnapshotFree(virDomainSnapshotPtr snapshot)
13037
DEBUG("snapshot=%p", snapshot);
13039
virResetLastError();
13041
if (!VIR_IS_DOMAIN_SNAPSHOT(snapshot)) {
13042
virLibDomainSnapshotError(VIR_ERR_INVALID_DOMAIN_SNAPSHOT,
13044
virDispatchError(NULL);
13047
if (virUnrefDomainSnapshot(snapshot) < 0) {
13048
virDispatchError(NULL);
13055
* virDomainOpenConsole:
13056
* @dom: a domain object
13057
* @devname: the console, serial or parallel port device alias, or NULL
13058
* @st: a stream to associate with the console
13059
* @flags: unused, pass 0
13061
* This opens the backend associated with a console, serial or
13062
* parallel port device on a guest, if the backend is supported.
13063
* If the @devname is omitted, then the first console or serial
13064
* device is opened. The console is associated with the passed
13065
* in @st stream, which should have been opened in non-blocking
13066
* mode for bi-directional I/O.
13068
* returns 0 if the console was opened, -1 on error
13070
int virDomainOpenConsole(virDomainPtr dom,
13071
const char *devname,
13073
unsigned int flags)
13075
virConnectPtr conn;
13077
VIR_DOMAIN_DEBUG(dom, "devname=%s, st=%p, flags=%u",
13078
NULLSTR(devname), st, flags);
13080
virResetLastError();
13082
if (!VIR_IS_DOMAIN(dom)) {
13083
virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
13084
virDispatchError(NULL);
13089
if (conn->flags & VIR_CONNECT_RO) {
13090
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
13094
if (conn->driver->domainOpenConsole) {
13096
ret = conn->driver->domainOpenConsole(dom, devname, st, flags);
13102
virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
13105
virDispatchError(conn);