Create a new libvirt-domain.h file to hold the public API definitions for the virDomain type. This header file is not self-contained, so applications will not directly include it. They will contain to #include <libvirt/libvirt.h> --- cfg.mk | 2 +- docs/apibuild.py | 1 + include/libvirt/Makefile.am | 1 + include/libvirt/libvirt-domain.h | 3496 +++++++++++++++++++++++++++++++++++ include/libvirt/libvirt.h.in | 3731 ++------------------------------------ 5 files changed, 3632 insertions(+), 3599 deletions(-) create mode 100644 include/libvirt/libvirt-domain.h diff --git a/cfg.mk b/cfg.mk index c03fdab..501530f 100644 --- a/cfg.mk +++ b/cfg.mk @@ -303,7 +303,7 @@ sc_flags_debug: # than d). The existence of long long, and of documentation about # flags, makes the regex in the third test slightly harder. sc_flags_usage: - @test "$$(cat $(srcdir)/include/libvirt/libvirt.h.in \ + @test "$$(cat $(srcdir)/include/libvirt/libvirt-domain.h \ $(srcdir)/include/libvirt/virterror.h \ $(srcdir)/include/libvirt/libvirt-qemu.h \ $(srcdir)/include/libvirt/libvirt-lxc.h \ diff --git a/docs/apibuild.py b/docs/apibuild.py index e79ac42..bb93335 100755 --- a/docs/apibuild.py +++ b/docs/apibuild.py @@ -22,6 +22,7 @@ debugsym=None # included_files = { "libvirt.h": "header with general libvirt API definitions", + "libvirt-domain.h": "header with general libvirt API definitions", "libvirt-domain-snapshot.h": "header with general libvirt API definitions", "libvirt-event.h": "header with general libvirt API definitions", "libvirt-interface.h": "header with general libvirt API definitions", diff --git a/include/libvirt/Makefile.am b/include/libvirt/Makefile.am index 9b34539..ec5ebac 100644 --- a/include/libvirt/Makefile.am +++ b/include/libvirt/Makefile.am @@ -19,6 +19,7 @@ virincdir = $(includedir)/libvirt virinc_HEADERS = libvirt.h \ + libvirt-domain.h \ libvirt-domain-snapshot.h \ libvirt-event.h \ libvirt-interface.h \ diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h new file mode 100644 index 0000000..b28d37d --- /dev/null +++ b/include/libvirt/libvirt-domain.h @@ -0,0 +1,3496 @@ +/* + * libvirt-domain.h + * Summary: APIs for management of domains + * Description: Provides APIs for the management of domains + * Author: Daniel Veillard <veillard@xxxxxxxxxx> + * + * Copyright (C) 2006-2014 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +#ifndef __VIR_LIBVIRT_DOMAIN_H__ +# define __VIR_LIBVIRT_DOMAIN_H__ + +# ifndef __VIR_LIBVIRT_H_INCLUDES__ +# error "Don't include this file directly, only use libvirt/libvirt.h" +# endif + + +/** + * virDomain: + * + * a virDomain is a private structure representing a domain. + */ +typedef struct _virDomain virDomain; + +/** + * virDomainPtr: + * + * a virDomainPtr is pointer to a virDomain private structure, this is the + * type used to reference a domain in the API. + */ +typedef virDomain *virDomainPtr; + +/** + * virDomainState: + * + * A domain may be in different states at a given point in time + */ +typedef enum { + VIR_DOMAIN_NOSTATE = 0, /* no state */ + VIR_DOMAIN_RUNNING = 1, /* the domain is running */ + VIR_DOMAIN_BLOCKED = 2, /* the domain is blocked on resource */ + VIR_DOMAIN_PAUSED = 3, /* the domain is paused by user */ + VIR_DOMAIN_SHUTDOWN= 4, /* the domain is being shut down */ + VIR_DOMAIN_SHUTOFF = 5, /* the domain is shut off */ + VIR_DOMAIN_CRASHED = 6, /* the domain is crashed */ + VIR_DOMAIN_PMSUSPENDED = 7, /* the domain is suspended by guest + power management */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_LAST + /* + * NB: this enum value will increase over time as new events are + * added to the libvirt API. It reflects the last state supported + * by this version of the libvirt API. + */ +# endif +} virDomainState; + +typedef enum { + VIR_DOMAIN_NOSTATE_UNKNOWN = 0, + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_NOSTATE_LAST +# endif +} virDomainNostateReason; + +typedef enum { + VIR_DOMAIN_RUNNING_UNKNOWN = 0, + VIR_DOMAIN_RUNNING_BOOTED = 1, /* normal startup from boot */ + VIR_DOMAIN_RUNNING_MIGRATED = 2, /* migrated from another host */ + VIR_DOMAIN_RUNNING_RESTORED = 3, /* restored from a state file */ + VIR_DOMAIN_RUNNING_FROM_SNAPSHOT = 4, /* restored from snapshot */ + VIR_DOMAIN_RUNNING_UNPAUSED = 5, /* returned from paused state */ + VIR_DOMAIN_RUNNING_MIGRATION_CANCELED = 6, /* returned from migration */ + VIR_DOMAIN_RUNNING_SAVE_CANCELED = 7, /* returned from failed save process */ + VIR_DOMAIN_RUNNING_WAKEUP = 8, /* returned from pmsuspended due to + wakeup event */ + VIR_DOMAIN_RUNNING_CRASHED = 9, /* resumed from crashed */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_RUNNING_LAST +# endif +} virDomainRunningReason; + +typedef enum { + VIR_DOMAIN_BLOCKED_UNKNOWN = 0, /* the reason is unknown */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_BLOCKED_LAST +# endif +} virDomainBlockedReason; + +typedef enum { + VIR_DOMAIN_PAUSED_UNKNOWN = 0, /* the reason is unknown */ + VIR_DOMAIN_PAUSED_USER = 1, /* paused on user request */ + VIR_DOMAIN_PAUSED_MIGRATION = 2, /* paused for offline migration */ + VIR_DOMAIN_PAUSED_SAVE = 3, /* paused for save */ + VIR_DOMAIN_PAUSED_DUMP = 4, /* paused for offline core dump */ + VIR_DOMAIN_PAUSED_IOERROR = 5, /* paused due to a disk I/O error */ + VIR_DOMAIN_PAUSED_WATCHDOG = 6, /* paused due to a watchdog event */ + VIR_DOMAIN_PAUSED_FROM_SNAPSHOT = 7, /* paused after restoring from snapshot */ + VIR_DOMAIN_PAUSED_SHUTTING_DOWN = 8, /* paused during shutdown process */ + VIR_DOMAIN_PAUSED_SNAPSHOT = 9, /* paused while creating a snapshot */ + VIR_DOMAIN_PAUSED_CRASHED = 10, /* paused due to a guest crash */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_PAUSED_LAST +# endif +} virDomainPausedReason; + +typedef enum { + VIR_DOMAIN_SHUTDOWN_UNKNOWN = 0, /* the reason is unknown */ + VIR_DOMAIN_SHUTDOWN_USER = 1, /* shutting down on user request */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_SHUTDOWN_LAST +# endif +} virDomainShutdownReason; + +typedef enum { + VIR_DOMAIN_SHUTOFF_UNKNOWN = 0, /* the reason is unknown */ + VIR_DOMAIN_SHUTOFF_SHUTDOWN = 1, /* normal shutdown */ + VIR_DOMAIN_SHUTOFF_DESTROYED = 2, /* forced poweroff */ + VIR_DOMAIN_SHUTOFF_CRASHED = 3, /* domain crashed */ + VIR_DOMAIN_SHUTOFF_MIGRATED = 4, /* migrated to another host */ + VIR_DOMAIN_SHUTOFF_SAVED = 5, /* saved to a file */ + VIR_DOMAIN_SHUTOFF_FAILED = 6, /* domain failed to start */ + VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT = 7, /* restored from a snapshot which was + * taken while domain was shutoff */ +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_SHUTOFF_LAST +# endif +} virDomainShutoffReason; + +typedef enum { + VIR_DOMAIN_CRASHED_UNKNOWN = 0, /* crashed for unknown reason */ + VIR_DOMAIN_CRASHED_PANICKED = 1, /* domain panicked */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_CRASHED_LAST +# endif +} virDomainCrashedReason; + +typedef enum { + VIR_DOMAIN_PMSUSPENDED_UNKNOWN = 0, + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_PMSUSPENDED_LAST +# endif +} virDomainPMSuspendedReason; + +typedef enum { + VIR_DOMAIN_PMSUSPENDED_DISK_UNKNOWN = 0, + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_PMSUSPENDED_DISK_LAST +# endif +} virDomainPMSuspendedDiskReason; + +/** + * virDomainControlState: + * + * Current state of a control interface to the domain. + */ +typedef enum { + VIR_DOMAIN_CONTROL_OK = 0, /* operational, ready to accept commands */ + VIR_DOMAIN_CONTROL_JOB = 1, /* background job is running (can be + monitored by virDomainGetJobInfo); only + limited set of commands may be allowed */ + VIR_DOMAIN_CONTROL_OCCUPIED = 2, /* occupied by a running command */ + VIR_DOMAIN_CONTROL_ERROR = 3, /* unusable, domain cannot be fully operated */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_CONTROL_LAST +# endif +} virDomainControlState; + +/** + * virDomainControlInfo: + * + * Structure filled in by virDomainGetControlInfo and providing details about + * current state of control interface to a domain. + */ +typedef struct _virDomainControlInfo virDomainControlInfo; +struct _virDomainControlInfo { + unsigned int state; /* control state, one of virDomainControlState */ + unsigned int details; /* state details, currently 0 */ + unsigned long long stateTime; /* for how long (in msec) control interface + has been in current state (except for OK + and ERROR states) */ +}; + +/** + * virDomainControlInfoPtr: + * + * Pointer to virDomainControlInfo structure. + */ +typedef virDomainControlInfo *virDomainControlInfoPtr; + +/** + * virDomainModificationImpact: + * + * Several modification APIs take flags to determine whether a change + * to the domain affects just the running instance, just the + * persistent definition, or both at the same time. The counterpart + * query APIs also take the same flags to determine whether to query + * the running instance or persistent definition, although both cannot + * be queried at once. + * + * The use of VIR_DOMAIN_AFFECT_CURRENT will resolve to either + * VIR_DOMAIN_AFFECT_LIVE or VIR_DOMAIN_AFFECT_CONFIG according to + * current domain state. VIR_DOMAIN_AFFECT_LIVE requires a running + * domain, and VIR_DOMAIN_AFFECT_CONFIG requires a persistent domain + * (whether or not it is running). + * + * These enums should not conflict with those of virTypedParameterFlags. + */ +typedef enum { + VIR_DOMAIN_AFFECT_CURRENT = 0, /* Affect current domain state. */ + VIR_DOMAIN_AFFECT_LIVE = 1 << 0, /* Affect running domain state. */ + VIR_DOMAIN_AFFECT_CONFIG = 1 << 1, /* Affect persistent domain state. */ + /* 1 << 2 is reserved for virTypedParameterFlags */ +} virDomainModificationImpact; + +/** + * virDomainInfoPtr: + * + * a virDomainInfo is a structure filled by virDomainGetInfo() and extracting + * runtime information for a given active Domain + */ + +typedef struct _virDomainInfo virDomainInfo; + +struct _virDomainInfo { + unsigned char state; /* the running state, one of virDomainState */ + unsigned long maxMem; /* the maximum memory in KBytes allowed */ + unsigned long memory; /* the memory in KBytes used by the domain */ + unsigned short nrVirtCpu; /* the number of virtual CPUs for the domain */ + unsigned long long cpuTime; /* the CPU time used in nanoseconds */ +}; + +/** + * virDomainInfoPtr: + * + * a virDomainInfoPtr is a pointer to a virDomainInfo structure. + */ + +typedef virDomainInfo *virDomainInfoPtr; + +/** + * virDomainCreateFlags: + * + * Flags OR'ed together to provide specific behaviour when creating a + * Domain. + */ +typedef enum { + VIR_DOMAIN_NONE = 0, /* Default behavior */ + VIR_DOMAIN_START_PAUSED = 1 << 0, /* Launch guest in paused state */ + VIR_DOMAIN_START_AUTODESTROY = 1 << 1, /* Automatically kill guest when virConnectPtr is closed */ + VIR_DOMAIN_START_BYPASS_CACHE = 1 << 2, /* Avoid file system cache pollution */ + VIR_DOMAIN_START_FORCE_BOOT = 1 << 3, /* Boot, discarding any managed save */ +} virDomainCreateFlags; + + +/* Management of scheduler parameters */ + +/** + * VIR_DOMAIN_SCHEDULER_CPU_SHARES: + * + * Macro represents proportional weight of the scheduler used on the + * host cpu, when using the posix scheduler, as a ullong. + */ +# define VIR_DOMAIN_SCHEDULER_CPU_SHARES "cpu_shares" + +/** + * VIR_DOMAIN_SCHEDULER_VCPU_PERIOD: + * + * Macro represents the enforcement period for a quota, in microseconds, + * for vcpus only, when using the posix scheduler, as a ullong. + */ +# define VIR_DOMAIN_SCHEDULER_VCPU_PERIOD "vcpu_period" + +/** + * VIR_DOMAIN_SCHEDULER_VCPU_QUOTA: + * + * Macro represents the maximum bandwidth to be used within a period for + * vcpus only, when using the posix scheduler, as an llong. + */ +# define VIR_DOMAIN_SCHEDULER_VCPU_QUOTA "vcpu_quota" + +/** + * VIR_DOMAIN_SCHEDULER_EMULATOR_PERIOD: + * + * Macro represents the enforcement period for a quota in microseconds, + * when using the posix scheduler, for all emulator activity not tied to + * vcpus, as a ullong. + */ +# define VIR_DOMAIN_SCHEDULER_EMULATOR_PERIOD "emulator_period" + +/** + * VIR_DOMAIN_SCHEDULER_EMULATOR_QUOTA: + * + * Macro represents the maximum bandwidth to be used within a period for + * all emulator activity not tied to vcpus, when using the posix scheduler, + * as an llong. + */ +# define VIR_DOMAIN_SCHEDULER_EMULATOR_QUOTA "emulator_quota" + +/** + * VIR_DOMAIN_SCHEDULER_WEIGHT: + * + * Macro represents the relative weight, when using the credit + * scheduler, as a uint. + */ +# define VIR_DOMAIN_SCHEDULER_WEIGHT "weight" + +/** + * VIR_DOMAIN_SCHEDULER_CAP: + * + * Macro represents the maximum scheduler cap, when using the credit + * scheduler, as a uint. + */ +# define VIR_DOMAIN_SCHEDULER_CAP "cap" + +/** + * VIR_DOMAIN_SCHEDULER_RESERVATION: + * + * Macro represents the scheduler reservation value, when using the + * allocation scheduler, as an llong. + */ +# define VIR_DOMAIN_SCHEDULER_RESERVATION "reservation" + +/** + * VIR_DOMAIN_SCHEDULER_LIMIT: + * + * Macro represents the scheduler limit value, when using the + * allocation scheduler, as an llong. + */ +# define VIR_DOMAIN_SCHEDULER_LIMIT "limit" + +/** + * VIR_DOMAIN_SCHEDULER_SHARES: + * + * Macro represents the scheduler shares value, when using the + * allocation scheduler, as an int. + */ +# define VIR_DOMAIN_SCHEDULER_SHARES "shares" + +/* + * Fetch scheduler parameters, caller allocates 'params' field of size 'nparams' + */ +int virDomainGetSchedulerParameters (virDomainPtr domain, + virTypedParameterPtr params, + int *nparams); +int virDomainGetSchedulerParametersFlags (virDomainPtr domain, + virTypedParameterPtr params, + int *nparams, + unsigned int flags); + +/* + * Change scheduler parameters + */ +int virDomainSetSchedulerParameters (virDomainPtr domain, + virTypedParameterPtr params, + int nparams); +int virDomainSetSchedulerParametersFlags (virDomainPtr domain, + virTypedParameterPtr params, + int nparams, + unsigned int flags); + +/** + * virDomainBlockStats: + * + * Block device stats for virDomainBlockStats. + * + * Hypervisors may return a field set to ((long long)-1) which indicates + * that the hypervisor does not support that statistic. + * + * NB. Here 'long long' means 64 bit integer. + */ +typedef struct _virDomainBlockStats virDomainBlockStatsStruct; + +struct _virDomainBlockStats { + long long rd_req; /* number of read requests */ + long long rd_bytes; /* number of read bytes */ + long long wr_req; /* number of write requests */ + long long wr_bytes; /* number of written bytes */ + long long errs; /* In Xen this returns the mysterious 'oo_req'. */ +}; + +/** + * virDomainBlockStatsPtr: + * + * A pointer to a virDomainBlockStats structure + */ +typedef virDomainBlockStatsStruct *virDomainBlockStatsPtr; + + +/** + * VIR_DOMAIN_BLOCK_STATS_FIELD_LENGTH: + * + * Macro providing the field length of parameter names when using + * virDomainBlockStatsFlags(). + */ +# define VIR_DOMAIN_BLOCK_STATS_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH + +/** + * VIR_DOMAIN_BLOCK_STATS_READ_BYTES: + * + * Macro represents the total number of read bytes of the + * block device, as an llong. + */ +# define VIR_DOMAIN_BLOCK_STATS_READ_BYTES "rd_bytes" + +/** + * VIR_DOMAIN_BLOCK_STATS_READ_REQ: + * + * Macro represents the total read requests of the + * block device, as an llong. + */ +# define VIR_DOMAIN_BLOCK_STATS_READ_REQ "rd_operations" + +/** + * VIR_DOMAIN_BLOCK_STATS_READ_TOTAL_TIMES: + * + * Macro represents the total time spend on cache reads in + * nano-seconds of the block device, as an llong. + */ +# define VIR_DOMAIN_BLOCK_STATS_READ_TOTAL_TIMES "rd_total_times" + +/** + * VIR_DOMAIN_BLOCK_STATS_WRITE_BYTES: + * + * Macro represents the total number of write bytes of the + * block device, as an llong. + */ +# define VIR_DOMAIN_BLOCK_STATS_WRITE_BYTES "wr_bytes" + +/** + * VIR_DOMAIN_BLOCK_STATS_WRITE_REQ: + * + * Macro represents the total write requests of the + * block device, as an llong. + */ +# define VIR_DOMAIN_BLOCK_STATS_WRITE_REQ "wr_operations" + +/** + * VIR_DOMAIN_BLOCK_STATS_WRITE_TOTAL_TIMES: + * + * Macro represents the total time spend on cache writes in + * nano-seconds of the block device, as an llong. + */ +# define VIR_DOMAIN_BLOCK_STATS_WRITE_TOTAL_TIMES "wr_total_times" + +/** + * VIR_DOMAIN_BLOCK_STATS_FLUSH_REQ: + * + * Macro represents the total flush requests of the + * block device, as an llong. + */ +# define VIR_DOMAIN_BLOCK_STATS_FLUSH_REQ "flush_operations" + +/** + * VIR_DOMAIN_BLOCK_STATS_FLUSH_TOTAL_TIMES: + * + * Macro represents the total time spend on cache flushing in + * nano-seconds of the block device, as an llong. + */ +# define VIR_DOMAIN_BLOCK_STATS_FLUSH_TOTAL_TIMES "flush_total_times" + +/** + * VIR_DOMAIN_BLOCK_STATS_ERRS: + * + * In Xen this returns the mysterious 'oo_req', as an llong. + */ +# define VIR_DOMAIN_BLOCK_STATS_ERRS "errs" + +/** + * virDomainInterfaceStats: + * + * Network interface stats for virDomainInterfaceStats. + * + * Hypervisors may return a field set to ((long long)-1) which indicates + * that the hypervisor does not support that statistic. + * + * NB. Here 'long long' means 64 bit integer. + */ +typedef struct _virDomainInterfaceStats virDomainInterfaceStatsStruct; + +struct _virDomainInterfaceStats { + long long rx_bytes; + long long rx_packets; + long long rx_errs; + long long rx_drop; + long long tx_bytes; + long long tx_packets; + long long tx_errs; + long long tx_drop; +}; + +/** + * virDomainInterfaceStatsPtr: + * + * A pointer to a virDomainInterfaceStats structure + */ +typedef virDomainInterfaceStatsStruct *virDomainInterfaceStatsPtr; + +/** + * Memory Statistics Tags: + */ +typedef enum { + /* The total amount of data read from swap space (in kB). */ + VIR_DOMAIN_MEMORY_STAT_SWAP_IN = 0, + /* The total amount of memory written out to swap space (in kB). */ + VIR_DOMAIN_MEMORY_STAT_SWAP_OUT = 1, + + /* + * Page faults occur when a process makes a valid access to virtual memory + * that is not available. When servicing the page fault, if disk IO is + * required, it is considered a major fault. If not, it is a minor fault. + * These are expressed as the number of faults that have occurred. + */ + VIR_DOMAIN_MEMORY_STAT_MAJOR_FAULT = 2, + VIR_DOMAIN_MEMORY_STAT_MINOR_FAULT = 3, + + /* + * The amount of memory left completely unused by the system. Memory that + * is available but used for reclaimable caches should NOT be reported as + * free. This value is expressed in kB. + */ + VIR_DOMAIN_MEMORY_STAT_UNUSED = 4, + + /* + * The total amount of usable memory as seen by the domain. This value + * may be less than the amount of memory assigned to the domain if a + * balloon driver is in use or if the guest OS does not initialize all + * assigned pages. This value is expressed in kB. + */ + VIR_DOMAIN_MEMORY_STAT_AVAILABLE = 5, + + /* Current balloon value (in KB). */ + VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON = 6, + + /* Resident Set Size of the process running the domain. This value + * is in kB */ + VIR_DOMAIN_MEMORY_STAT_RSS = 7, + + /* + * The number of statistics supported by this version of the interface. + * To add new statistics, add them to the enum and increase this value. + */ + VIR_DOMAIN_MEMORY_STAT_NR = 8, + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_MEMORY_STAT_LAST = VIR_DOMAIN_MEMORY_STAT_NR +# endif +} virDomainMemoryStatTags; + +typedef struct _virDomainMemoryStat virDomainMemoryStatStruct; + +struct _virDomainMemoryStat { + int tag; + unsigned long long val; +}; + +typedef virDomainMemoryStatStruct *virDomainMemoryStatPtr; + + +/* Domain core dump flags. */ +typedef enum { + VIR_DUMP_CRASH = (1 << 0), /* crash after dump */ + VIR_DUMP_LIVE = (1 << 1), /* live dump */ + VIR_DUMP_BYPASS_CACHE = (1 << 2), /* avoid file system cache pollution */ + VIR_DUMP_RESET = (1 << 3), /* reset domain after dump finishes */ + VIR_DUMP_MEMORY_ONLY = (1 << 4), /* use dump-guest-memory */ +} virDomainCoreDumpFlags; + +/** + * virDomainCoreDumpFormat: + * + * Values for specifying different formats of domain core dumps. + */ +typedef enum { + VIR_DOMAIN_CORE_DUMP_FORMAT_RAW, /* dump guest memory in raw format */ + VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_ZLIB, /* kdump-compressed format, with + * zlib compression */ + VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_LZO, /* kdump-compressed format, with + * lzo compression */ + VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_SNAPPY, /* kdump-compressed format, with + * snappy compression */ +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_CORE_DUMP_FORMAT_LAST + /* + * NB: this enum value will increase over time as new events are + * added to the libvirt API. It reflects the last state supported + * by this version of the libvirt API. + */ +# endif +} virDomainCoreDumpFormat; + +/* Domain migration flags. */ +typedef enum { + VIR_MIGRATE_LIVE = (1 << 0), /* live migration */ + VIR_MIGRATE_PEER2PEER = (1 << 1), /* direct source -> dest host control channel */ + /* Note the less-common spelling that we're stuck with: + VIR_MIGRATE_TUNNELLED should be VIR_MIGRATE_TUNNELED */ + VIR_MIGRATE_TUNNELLED = (1 << 2), /* tunnel migration data over libvirtd connection */ + VIR_MIGRATE_PERSIST_DEST = (1 << 3), /* persist the VM on the destination */ + VIR_MIGRATE_UNDEFINE_SOURCE = (1 << 4), /* undefine the VM on the source */ + VIR_MIGRATE_PAUSED = (1 << 5), /* pause on remote side */ + VIR_MIGRATE_NON_SHARED_DISK = (1 << 6), /* migration with non-shared storage with full disk copy */ + VIR_MIGRATE_NON_SHARED_INC = (1 << 7), /* migration with non-shared storage with incremental copy */ + /* (same base image shared between source and destination) */ + VIR_MIGRATE_CHANGE_PROTECTION = (1 << 8), /* protect for changing domain configuration through the + * whole migration process; this will be used automatically + * when supported */ + VIR_MIGRATE_UNSAFE = (1 << 9), /* force migration even if it is considered unsafe */ + VIR_MIGRATE_OFFLINE = (1 << 10), /* offline migrate */ + VIR_MIGRATE_COMPRESSED = (1 << 11), /* compress data during migration */ + VIR_MIGRATE_ABORT_ON_ERROR = (1 << 12), /* abort migration on I/O errors happened during migration */ + VIR_MIGRATE_AUTO_CONVERGE = (1 << 13), /* force convergence */ + VIR_MIGRATE_RDMA_PIN_ALL = (1 << 14), /* RDMA memory pinning */ +} virDomainMigrateFlags; + + +/** + * VIR_MIGRATE_PARAM_URI: + * + * virDomainMigrate* params field: URI to use for initiating domain migration + * as VIR_TYPED_PARAM_STRING. It takes a hypervisor specific format. The + * uri_transports element of the hypervisor capabilities XML includes details + * of the supported URI schemes. When omitted libvirt will auto-generate + * suitable default URI. It is typically only necessary to specify this URI if + * the destination host has multiple interfaces and a specific interface is + * required to transmit migration data. + * + * This filed may not be used when VIR_MIGRATE_TUNNELLED flag is set. + */ +# define VIR_MIGRATE_PARAM_URI "migrate_uri" + +/** + * VIR_MIGRATE_PARAM_DEST_NAME: + * + * virDomainMigrate* params field: the name to be used for the domain on the + * destination host as VIR_TYPED_PARAM_STRING. Omitting this parameter keeps + * the domain name the same. This field is only allowed to be used with + * hypervisors that support domain renaming during migration. + */ +# define VIR_MIGRATE_PARAM_DEST_NAME "destination_name" + +/** + * VIR_MIGRATE_PARAM_DEST_XML: + * + * virDomainMigrate* params field: the new configuration to be used for the + * domain on the destination host as VIR_TYPED_PARAM_STRING. The configuration + * must include an identical set of virtual devices, to ensure a stable guest + * ABI across migration. Only parameters related to host side configuration + * can be changed in the XML. Hypervisors which support this field will forbid + * migration if the provided XML would cause a change in the guest ABI. This + * field cannot be used to rename the domain during migration (use + * VIR_MIGRATE_PARAM_DEST_NAME field for that purpose). Domain name in the + * destination XML must match the original domain name. + * + * Omitting this parameter keeps the original domain configuration. Using this + * field with hypervisors that do not support changing domain configuration + * during migration will result in a failure. + */ +# define VIR_MIGRATE_PARAM_DEST_XML "destination_xml" + +/** + * VIR_MIGRATE_PARAM_BANDWIDTH: + * + * virDomainMigrate* params field: the maximum bandwidth (in MiB/s) that will + * be used for migration as VIR_TYPED_PARAM_ULLONG. If set to 0 or omitted, + * libvirt will choose a suitable default. Some hypervisors do not support this + * feature and will return an error if this field is used and is not 0. + */ +# define VIR_MIGRATE_PARAM_BANDWIDTH "bandwidth" + +/** + * VIR_MIGRATE_PARAM_GRAPHICS_URI: + * + * virDomainMigrate* params field: URI to use for migrating client's connection + * to domain's graphical console as VIR_TYPED_PARAM_STRING. If specified, the + * client will be asked to automatically reconnect using these parameters + * instead of the automatically computed ones. This can be useful if, e.g., the + * client does not have a direct access to the network virtualization hosts are + * connected to and needs to connect through a proxy. The URI is formed as + * follows: + * + * protocol://hostname[:port]/[?parameters] + * + * where protocol is either "spice" or "vnc" and parameters is a list of + * protocol specific parameters separated by '&'. Currently recognized + * parameters are "tlsPort" and "tlsSubject". For example, + * + * spice://target.host.com:1234/?tlsPort=4567 + */ +# define VIR_MIGRATE_PARAM_GRAPHICS_URI "graphics_uri" + +/** + * VIR_MIGRATE_PARAM_LISTEN_ADDRESS: + * + * virDomainMigrate* params field: The listen address that hypervisor on the + * destination side should bind to for incoming migration. Both IPv4 and IPv6 + * addresses are accepted as well as hostnames (the resolving is done on + * destination). Some hypervisors do not support this feature and will return + * an error if this field is used. + */ +# define VIR_MIGRATE_PARAM_LISTEN_ADDRESS "listen_address" + +/* Domain migration. */ +virDomainPtr virDomainMigrate (virDomainPtr domain, virConnectPtr dconn, + unsigned long flags, const char *dname, + const char *uri, unsigned long bandwidth); +virDomainPtr virDomainMigrate2(virDomainPtr domain, virConnectPtr dconn, + const char *dxml, + unsigned long flags, const char *dname, + const char *uri, unsigned long bandwidth); +virDomainPtr virDomainMigrate3(virDomainPtr domain, + virConnectPtr dconn, + virTypedParameterPtr params, + unsigned int nparams, + unsigned int flags); + +int virDomainMigrateToURI (virDomainPtr domain, const char *duri, + unsigned long flags, const char *dname, + unsigned long bandwidth); + +int virDomainMigrateToURI2(virDomainPtr domain, + const char *dconnuri, + const char *miguri, + const char *dxml, + unsigned long flags, + const char *dname, + unsigned long bandwidth); +int virDomainMigrateToURI3(virDomainPtr domain, + const char *dconnuri, + virTypedParameterPtr params, + unsigned int nparams, + unsigned int flags); + +int virDomainMigrateSetMaxDowntime (virDomainPtr domain, + unsigned long long downtime, + unsigned int flags); + +int virDomainMigrateGetCompressionCache(virDomainPtr domain, + unsigned long long *cacheSize, + unsigned int flags); +int virDomainMigrateSetCompressionCache(virDomainPtr domain, + unsigned long long cacheSize, + unsigned int flags); + +int virDomainMigrateSetMaxSpeed(virDomainPtr domain, + unsigned long bandwidth, + unsigned int flags); + +int virDomainMigrateGetMaxSpeed(virDomainPtr domain, + unsigned long *bandwidth, + unsigned int flags); + +char * virConnectGetDomainCapabilities(virConnectPtr conn, + const char *emulatorbin, + const char *arch, + const char *machine, + const char *virttype, + unsigned int flags); + +/* + * Gather list of running domains + */ +int virConnectListDomains (virConnectPtr conn, + int *ids, + int maxids); + +/* + * Number of domains + */ +int virConnectNumOfDomains (virConnectPtr conn); + + +/* + * Get connection from domain. + */ +virConnectPtr virDomainGetConnect (virDomainPtr domain); + +/* + * Domain creation and destruction + */ + +virDomainPtr virDomainCreateXML (virConnectPtr conn, + const char *xmlDesc, + unsigned int flags); +virDomainPtr virDomainCreateXMLWithFiles(virConnectPtr conn, + const char *xmlDesc, + unsigned int nfiles, + int *files, + unsigned int flags); +virDomainPtr virDomainLookupByName (virConnectPtr conn, + const char *name); +virDomainPtr virDomainLookupByID (virConnectPtr conn, + int id); +virDomainPtr virDomainLookupByUUID (virConnectPtr conn, + const unsigned char *uuid); +virDomainPtr virDomainLookupByUUIDString (virConnectPtr conn, + const char *uuid); + +typedef enum { + VIR_DOMAIN_SHUTDOWN_DEFAULT = 0, /* hypervisor choice */ + VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */ + VIR_DOMAIN_SHUTDOWN_GUEST_AGENT = (1 << 1), /* Use guest agent */ + VIR_DOMAIN_SHUTDOWN_INITCTL = (1 << 2), /* Use initctl */ + VIR_DOMAIN_SHUTDOWN_SIGNAL = (1 << 3), /* Send a signal */ + VIR_DOMAIN_SHUTDOWN_PARAVIRT = (1 << 4), /* Use paravirt guest control */ +} virDomainShutdownFlagValues; + +int virDomainShutdown (virDomainPtr domain); +int virDomainShutdownFlags (virDomainPtr domain, + unsigned int flags); + +typedef enum { + VIR_DOMAIN_REBOOT_DEFAULT = 0, /* hypervisor choice */ + VIR_DOMAIN_REBOOT_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */ + VIR_DOMAIN_REBOOT_GUEST_AGENT = (1 << 1), /* Use guest agent */ + VIR_DOMAIN_REBOOT_INITCTL = (1 << 2), /* Use initctl */ + VIR_DOMAIN_REBOOT_SIGNAL = (1 << 3), /* Send a signal */ + VIR_DOMAIN_REBOOT_PARAVIRT = (1 << 4), /* Use paravirt guest control */ +} virDomainRebootFlagValues; + +int virDomainReboot (virDomainPtr domain, + unsigned int flags); +int virDomainReset (virDomainPtr domain, + unsigned int flags); + +int virDomainDestroy (virDomainPtr domain); + +/** + * virDomainDestroyFlagsValues: + * + * Flags used to provide specific behaviour to the + * virDomainDestroyFlags() function + */ +typedef enum { + VIR_DOMAIN_DESTROY_DEFAULT = 0, /* Default behavior - could lead to data loss!! */ + VIR_DOMAIN_DESTROY_GRACEFUL = 1 << 0, /* only SIGTERM, no SIGKILL */ +} virDomainDestroyFlagsValues; + +int virDomainDestroyFlags (virDomainPtr domain, + unsigned int flags); +int virDomainRef (virDomainPtr domain); +int virDomainFree (virDomainPtr domain); + +/* + * Domain suspend/resume + */ +int virDomainSuspend (virDomainPtr domain); +int virDomainResume (virDomainPtr domain); +int virDomainPMSuspendForDuration (virDomainPtr domain, + unsigned int target, + unsigned long long duration, + unsigned int flags); +int virDomainPMWakeup (virDomainPtr domain, + unsigned int flags); +/* + * Domain save/restore + */ + +/** + * virDomainSaveRestoreFlags: + * Flags for use in virDomainSaveFlags(), virDomainManagedSave(), + * virDomainRestoreFlags(), and virDomainSaveImageDefineXML(). Not all + * flags apply to all these functions. + */ +typedef enum { + VIR_DOMAIN_SAVE_BYPASS_CACHE = 1 << 0, /* Avoid file system cache pollution */ + VIR_DOMAIN_SAVE_RUNNING = 1 << 1, /* Favor running over paused */ + VIR_DOMAIN_SAVE_PAUSED = 1 << 2, /* Favor paused over running */ +} virDomainSaveRestoreFlags; + +int virDomainSave (virDomainPtr domain, + const char *to); +int virDomainSaveFlags (virDomainPtr domain, + const char *to, + const char *dxml, + unsigned int flags); +int virDomainRestore (virConnectPtr conn, + const char *from); +int virDomainRestoreFlags (virConnectPtr conn, + const char *from, + const char *dxml, + unsigned int flags); + +char * virDomainSaveImageGetXMLDesc (virConnectPtr conn, + const char *file, + unsigned int flags); +int virDomainSaveImageDefineXML (virConnectPtr conn, + const char *file, + const char *dxml, + unsigned int flags); + +/* + * Managed domain save + */ +int virDomainManagedSave (virDomainPtr dom, + unsigned int flags); +int virDomainHasManagedSaveImage(virDomainPtr dom, + unsigned int flags); +int virDomainManagedSaveRemove(virDomainPtr dom, + unsigned int flags); + +/* + * Domain core dump + */ +int virDomainCoreDump (virDomainPtr domain, + const char *to, + unsigned int flags); + +/* + * Domain core dump with format specified + */ +int virDomainCoreDumpWithFormat (virDomainPtr domain, + const char *to, + unsigned int dumpformat, + unsigned int flags); + +/* + * Screenshot of current domain console + */ +char * virDomainScreenshot (virDomainPtr domain, + virStreamPtr stream, + unsigned int screen, + unsigned int flags); + +/* + * Domain runtime information, and collecting CPU statistics + */ + +int virDomainGetInfo (virDomainPtr domain, + virDomainInfoPtr info); +int virDomainGetState (virDomainPtr domain, + int *state, + int *reason, + unsigned int flags); + +/** + * VIR_DOMAIN_CPU_STATS_CPUTIME: + * cpu usage (sum of both vcpu and hypervisor usage) in nanoseconds, + * as a ullong + */ +# define VIR_DOMAIN_CPU_STATS_CPUTIME "cpu_time" + +/** + * VIR_DOMAIN_CPU_STATS_USERTIME: + * cpu time charged to user instructions in nanoseconds, as a ullong + */ +# define VIR_DOMAIN_CPU_STATS_USERTIME "user_time" + +/** + * VIR_DOMAIN_CPU_STATS_SYSTEMTIME: + * cpu time charged to system instructions in nanoseconds, as a ullong + */ +# define VIR_DOMAIN_CPU_STATS_SYSTEMTIME "system_time" + +/** + * VIR_DOMAIN_CPU_STATS_VCPUTIME: + * vcpu usage in nanoseconds (cpu_time excluding hypervisor time), + * as a ullong + */ +# define VIR_DOMAIN_CPU_STATS_VCPUTIME "vcpu_time" + +int virDomainGetCPUStats(virDomainPtr domain, + virTypedParameterPtr params, + unsigned int nparams, + int start_cpu, + unsigned int ncpus, + unsigned int flags); + +int virDomainGetControlInfo (virDomainPtr domain, + virDomainControlInfoPtr info, + unsigned int flags); + +/* + * Return scheduler type in effect 'sedf', 'credit', 'linux' + */ +char * virDomainGetSchedulerType(virDomainPtr domain, + int *nparams); + + +/* Manage blkio parameters. */ + +/** + * VIR_DOMAIN_BLKIO_WEIGHT: + * + * Macro for the Blkio tunable weight: it represents the io weight + * the guest can use, as a uint. + */ + +# define VIR_DOMAIN_BLKIO_WEIGHT "weight" + +/** + * VIR_DOMAIN_BLKIO_DEVICE_WEIGHT: + * + * Macro for the blkio tunable weight_device: it represents the + * per-device weight, as a string. The string is parsed as a + * series of /path/to/device,weight elements, separated by ','. + */ + +# define VIR_DOMAIN_BLKIO_DEVICE_WEIGHT "device_weight" + +/** + * VIR_DOMAIN_BLKIO_DEVICE_READ_IOPS: + * + * Macro for the blkio tunable throttle.read_iops_device: it represents + * the number of reading the block device per second, as a string. The + * string is parsed as a series of /path/to/device, read_iops elements, + * separated by ','. + */ + +# define VIR_DOMAIN_BLKIO_DEVICE_READ_IOPS "device_read_iops_sec" + + +/** + * VIR_DOMAIN_BLKIO_DEVICE_WRITE_IOPS: + * + * Macro for the blkio tunable throttle.write_iops_device: it represents + * the number of writing the block device per second, as a string. The + * string is parsed as a series of /path/to/device, write_iops elements, + * separated by ','. + */ +# define VIR_DOMAIN_BLKIO_DEVICE_WRITE_IOPS "device_write_iops_sec" + + +/** + * VIR_DOMAIN_BLKIO_DEVICE_READ_BPS: + * + * Macro for the blkio tunable throttle.read_iops_device: it represents + * the bytes of reading the block device per second, as a string. The + * string is parsed as a series of /path/to/device, read_bps elements, + * separated by ','. + */ +# define VIR_DOMAIN_BLKIO_DEVICE_READ_BPS "device_read_bytes_sec" + + +/** + * VIR_DOMAIN_BLKIO_DEVICE_WRITE_BPS: + * + * Macro for the blkio tunable throttle.read_iops_device: it represents + * the number of reading the block device per second, as a string. The + * string is parsed as a series of /path/to/device, write_bps elements, + * separated by ','. + */ +# define VIR_DOMAIN_BLKIO_DEVICE_WRITE_BPS "device_write_bytes_sec" + + +/* Set Blkio tunables for the domain*/ +int virDomainSetBlkioParameters(virDomainPtr domain, + virTypedParameterPtr params, + int nparams, unsigned int flags); +int virDomainGetBlkioParameters(virDomainPtr domain, + virTypedParameterPtr params, + int *nparams, unsigned int flags); + +/* Manage memory parameters. */ + +/** + * VIR_DOMAIN_MEMORY_PARAM_UNLIMITED: + * + * Macro providing the virMemoryParameter value that indicates "unlimited" + */ + +# define VIR_DOMAIN_MEMORY_PARAM_UNLIMITED 9007199254740991LL /* = INT64_MAX >> 10 */ + +/** + * VIR_DOMAIN_MEMORY_HARD_LIMIT: + * + * Macro for the memory tunable hard_limit: it represents the maximum memory + * the guest can use, as a ullong. + */ + +# define VIR_DOMAIN_MEMORY_HARD_LIMIT "hard_limit" + +/** + * VIR_DOMAIN_MEMORY_SOFT_LIMIT: + * + * Macro for the memory tunable soft_limit: it represents the memory upper + * limit enforced during memory contention, as a ullong. + */ + +# define VIR_DOMAIN_MEMORY_SOFT_LIMIT "soft_limit" + +/** + * VIR_DOMAIN_MEMORY_MIN_GUARANTEE: + * + * Macro for the memory tunable min_guarantee: it represents the minimum + * memory guaranteed to be reserved for the guest, as a ullong. + */ + +# define VIR_DOMAIN_MEMORY_MIN_GUARANTEE "min_guarantee" + +/** + * VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT: + * + * Macro for the swap tunable swap_hard_limit: it represents the maximum swap + * plus memory the guest can use, as a ullong. This limit has to be more than + * VIR_DOMAIN_MEMORY_HARD_LIMIT. + */ + +# define VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT "swap_hard_limit" + +/* Set memory tunables for the domain*/ +int virDomainSetMemoryParameters(virDomainPtr domain, + virTypedParameterPtr params, + int nparams, unsigned int flags); +int virDomainGetMemoryParameters(virDomainPtr domain, + virTypedParameterPtr params, + int *nparams, unsigned int flags); + +/* Memory size modification flags. */ +typedef enum { + /* See virDomainModificationImpact for these flags. */ + VIR_DOMAIN_MEM_CURRENT = VIR_DOMAIN_AFFECT_CURRENT, + VIR_DOMAIN_MEM_LIVE = VIR_DOMAIN_AFFECT_LIVE, + VIR_DOMAIN_MEM_CONFIG = VIR_DOMAIN_AFFECT_CONFIG, + + /* Additionally, these flags may be bitwise-OR'd in. */ + VIR_DOMAIN_MEM_MAXIMUM = (1 << 2), /* affect Max rather than current */ +} virDomainMemoryModFlags; + + +/* Manage numa parameters */ + +/** + * virDomainNumatuneMemMode: + * Representation of the various modes in the <numatune> element of + * a domain. + */ +typedef enum { + VIR_DOMAIN_NUMATUNE_MEM_STRICT = 0, + VIR_DOMAIN_NUMATUNE_MEM_PREFERRED = 1, + VIR_DOMAIN_NUMATUNE_MEM_INTERLEAVE = 2, + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_NUMATUNE_MEM_LAST /* This constant is subject to change */ +# endif +} virDomainNumatuneMemMode; + +/** + * VIR_DOMAIN_NUMA_NODESET: + * + * Macro for typed parameter name that lists the numa nodeset of a + * domain, as a string. + */ +# define VIR_DOMAIN_NUMA_NODESET "numa_nodeset" + +/** + * VIR_DOMAIN_NUMA_MODE: + * + * Macro for typed parameter name that lists the numa mode of a domain, + * as an int containing a virDomainNumatuneMemMode value. + */ +# define VIR_DOMAIN_NUMA_MODE "numa_mode" + +int virDomainSetNumaParameters(virDomainPtr domain, + virTypedParameterPtr params, + int nparams, unsigned int flags); +int virDomainGetNumaParameters(virDomainPtr domain, + virTypedParameterPtr params, + int *nparams, unsigned int flags); + +/* + * Dynamic control of domains + */ +const char * virDomainGetName (virDomainPtr domain); +unsigned int virDomainGetID (virDomainPtr domain); +int virDomainGetUUID (virDomainPtr domain, + unsigned char *uuid); +int virDomainGetUUIDString (virDomainPtr domain, + char *buf); +char * virDomainGetOSType (virDomainPtr domain); +unsigned long virDomainGetMaxMemory (virDomainPtr domain); +int virDomainSetMaxMemory (virDomainPtr domain, + unsigned long memory); +int virDomainSetMemory (virDomainPtr domain, + unsigned long memory); +int virDomainSetMemoryFlags (virDomainPtr domain, + unsigned long memory, + unsigned int flags); +int virDomainSetMemoryStatsPeriod (virDomainPtr domain, + int period, + unsigned int flags); +int virDomainGetMaxVcpus (virDomainPtr domain); +int virDomainGetSecurityLabel (virDomainPtr domain, + virSecurityLabelPtr seclabel); +char * virDomainGetHostname (virDomainPtr domain, + unsigned int flags); +int virDomainGetSecurityLabelList (virDomainPtr domain, + virSecurityLabelPtr* seclabels); + +typedef enum { + VIR_DOMAIN_METADATA_DESCRIPTION = 0, /* Operate on <description> */ + VIR_DOMAIN_METADATA_TITLE = 1, /* Operate on <title> */ + VIR_DOMAIN_METADATA_ELEMENT = 2, /* Operate on <metadata> */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_METADATA_LAST +# endif +} virDomainMetadataType; + +int +virDomainSetMetadata(virDomainPtr domain, + int type, + const char *metadata, + const char *key, + const char *uri, + unsigned int flags); + +char * +virDomainGetMetadata(virDomainPtr domain, + int type, + const char *uri, + unsigned int flags); + +/* + * XML domain description + */ +/** + * virDomainXMLFlags: + * + * Flags available for virDomainGetXMLDesc + */ + +typedef enum { + VIR_DOMAIN_XML_SECURE = (1 << 0), /* dump security sensitive information too */ + VIR_DOMAIN_XML_INACTIVE = (1 << 1), /* dump inactive domain information */ + VIR_DOMAIN_XML_UPDATE_CPU = (1 << 2), /* update guest CPU requirements according to host CPU */ + VIR_DOMAIN_XML_MIGRATABLE = (1 << 3), /* dump XML suitable for migration */ +} virDomainXMLFlags; + +char * virDomainGetXMLDesc (virDomainPtr domain, + unsigned int flags); + + +char * virConnectDomainXMLFromNative(virConnectPtr conn, + const char *nativeFormat, + const char *nativeConfig, + unsigned int flags); +char * virConnectDomainXMLToNative(virConnectPtr conn, + const char *nativeFormat, + const char *domainXml, + unsigned int flags); + +int virDomainBlockStats (virDomainPtr dom, + const char *disk, + virDomainBlockStatsPtr stats, + size_t size); +int virDomainBlockStatsFlags (virDomainPtr dom, + const char *disk, + virTypedParameterPtr params, + int *nparams, + unsigned int flags); +int virDomainInterfaceStats (virDomainPtr dom, + const char *path, + virDomainInterfaceStatsPtr stats, + size_t size); + +/* Management of interface parameters */ + +/** + * VIR_DOMAIN_BANDWIDTH_IN_AVERAGE: + * + * Macro represents the inbound average of NIC bandwidth, as a uint. + */ +# define VIR_DOMAIN_BANDWIDTH_IN_AVERAGE "inbound.average" + +/** + * VIR_DOMAIN_BANDWIDTH_IN_PEAK: + * + * Macro represents the inbound peak of NIC bandwidth, as a uint. + */ +# define VIR_DOMAIN_BANDWIDTH_IN_PEAK "inbound.peak" + +/** + * VIR_DOMAIN_BANDWIDTH_IN_BURST: + * + * Macro represents the inbound burst of NIC bandwidth, as a uint. + */ +# define VIR_DOMAIN_BANDWIDTH_IN_BURST "inbound.burst" + +/** + * VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE: + * + * Macro represents the outbound average of NIC bandwidth, as a uint. + */ +# define VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE "outbound.average" + +/** + * VIR_DOMAIN_BANDWIDTH_OUT_PEAK: + * + * Macro represents the outbound peak of NIC bandwidth, as a uint. + */ +# define VIR_DOMAIN_BANDWIDTH_OUT_PEAK "outbound.peak" + +/** + * VIR_DOMAIN_BANDWIDTH_OUT_BURST: + * + * Macro represents the outbound burst of NIC bandwidth, as a uint. + */ +# define VIR_DOMAIN_BANDWIDTH_OUT_BURST "outbound.burst" + +int virDomainSetInterfaceParameters (virDomainPtr dom, + const char *device, + virTypedParameterPtr params, + int nparams, unsigned int flags); +int virDomainGetInterfaceParameters (virDomainPtr dom, + const char *device, + virTypedParameterPtr params, + int *nparams, unsigned int flags); + +/* Management of domain block devices */ + +int virDomainBlockPeek (virDomainPtr dom, + const char *disk, + unsigned long long offset, + size_t size, + void *buffer, + unsigned int flags); + +/** + * virDomainBlockResizeFlags: + * + * Flags available for virDomainBlockResize(). + */ +typedef enum { + VIR_DOMAIN_BLOCK_RESIZE_BYTES = 1 << 0, /* size in bytes instead of KiB */ +} virDomainBlockResizeFlags; + +int virDomainBlockResize (virDomainPtr dom, + const char *disk, + unsigned long long size, + unsigned int flags); + +/** virDomainBlockInfo: + * + * This struct provides information about the size of a block device + * backing store + * + * Examples: + * + * - Fully allocated raw file in filesystem: + * * capacity, allocation, physical: All the same + * + * - Sparse raw file in filesystem: + * * capacity: logical size of the file + * * allocation, physical: number of blocks allocated to file + * + * - qcow2 file in filesystem + * * capacity: logical size from qcow2 header + * * allocation, physical: logical size of the file / + * highest qcow extent (identical) + * + * - qcow2 file in a block device + * * capacity: logical size from qcow2 header + * * allocation: highest qcow extent written for an active domain + * * physical: size of the block device container + */ +typedef struct _virDomainBlockInfo virDomainBlockInfo; +typedef virDomainBlockInfo *virDomainBlockInfoPtr; +struct _virDomainBlockInfo { + unsigned long long capacity; /* logical size in bytes of the block device backing image */ + unsigned long long allocation; /* highest allocated extent in bytes of the block device backing image */ + unsigned long long physical; /* physical size in bytes of the container of the backing image */ +}; + +int virDomainGetBlockInfo(virDomainPtr dom, + const char *disk, + virDomainBlockInfoPtr info, + unsigned int flags); + +/* Management of domain memory */ + +int virDomainMemoryStats (virDomainPtr dom, + virDomainMemoryStatPtr stats, + unsigned int nr_stats, + unsigned int flags); + +/* Memory peeking flags. */ + +typedef enum { + VIR_MEMORY_VIRTUAL = 1 << 0, /* addresses are virtual addresses */ + VIR_MEMORY_PHYSICAL = 1 << 1, /* addresses are physical addresses */ +} virDomainMemoryFlags; + +int virDomainMemoryPeek (virDomainPtr dom, + unsigned long long start, + size_t size, + void *buffer, + unsigned int flags); + +/* + * defined but not running domains + */ +virDomainPtr virDomainDefineXML (virConnectPtr conn, + const char *xml); +int virDomainUndefine (virDomainPtr domain); + +typedef enum { + VIR_DOMAIN_UNDEFINE_MANAGED_SAVE = (1 << 0), /* Also remove any + managed save */ + VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA = (1 << 1), /* If last use of domain, + then also remove any + snapshot metadata */ + VIR_DOMAIN_UNDEFINE_NVRAM = (1 << 2), /* Also remove any + nvram file */ + + /* Future undefine control flags should come here. */ +} virDomainUndefineFlagsValues; + + +int virDomainUndefineFlags (virDomainPtr domain, + unsigned int flags); +int virConnectNumOfDefinedDomains (virConnectPtr conn); +int virConnectListDefinedDomains (virConnectPtr conn, + char **const names, + int maxnames); +/** + * virConnectListAllDomainsFlags: + * + * Flags used to tune which domains are listed by virConnectListAllDomains(). + * Note that these flags come in groups; if all bits from a group are 0, + * then that group is not used to filter results. + */ +typedef enum { + VIR_CONNECT_LIST_DOMAINS_ACTIVE = 1 << 0, + VIR_CONNECT_LIST_DOMAINS_INACTIVE = 1 << 1, + + VIR_CONNECT_LIST_DOMAINS_PERSISTENT = 1 << 2, + VIR_CONNECT_LIST_DOMAINS_TRANSIENT = 1 << 3, + + VIR_CONNECT_LIST_DOMAINS_RUNNING = 1 << 4, + VIR_CONNECT_LIST_DOMAINS_PAUSED = 1 << 5, + VIR_CONNECT_LIST_DOMAINS_SHUTOFF = 1 << 6, + VIR_CONNECT_LIST_DOMAINS_OTHER = 1 << 7, + + VIR_CONNECT_LIST_DOMAINS_MANAGEDSAVE = 1 << 8, + VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE = 1 << 9, + + VIR_CONNECT_LIST_DOMAINS_AUTOSTART = 1 << 10, + VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART = 1 << 11, + + VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT = 1 << 12, + VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHOT = 1 << 13, +} virConnectListAllDomainsFlags; + +int virConnectListAllDomains (virConnectPtr conn, + virDomainPtr **domains, + unsigned int flags); +int virDomainCreate (virDomainPtr domain); +int virDomainCreateWithFlags (virDomainPtr domain, + unsigned int flags); + +int virDomainCreateWithFiles (virDomainPtr domain, + unsigned int nfiles, + int *files, + unsigned int flags); + +int virDomainGetAutostart (virDomainPtr domain, + int *autostart); +int virDomainSetAutostart (virDomainPtr domain, + int autostart); + +/** + * virVcpuInfo: structure for information about a virtual CPU in a domain. + */ + +typedef enum { + VIR_VCPU_OFFLINE = 0, /* the virtual CPU is offline */ + VIR_VCPU_RUNNING = 1, /* the virtual CPU is running */ + VIR_VCPU_BLOCKED = 2, /* the virtual CPU is blocked on resource */ + +# ifdef VIR_ENUM_SENTINELS + VIR_VCPU_LAST +# endif +} virVcpuState; + +typedef struct _virVcpuInfo virVcpuInfo; +struct _virVcpuInfo { + unsigned int number; /* virtual CPU number */ + int state; /* value from virVcpuState */ + unsigned long long cpuTime; /* CPU time used, in nanoseconds */ + int cpu; /* real CPU number, or -1 if offline */ +}; +typedef virVcpuInfo *virVcpuInfoPtr; + +/* Flags for controlling virtual CPU hot-plugging. */ +typedef enum { + /* See virDomainModificationImpact for these flags. */ + VIR_DOMAIN_VCPU_CURRENT = VIR_DOMAIN_AFFECT_CURRENT, + VIR_DOMAIN_VCPU_LIVE = VIR_DOMAIN_AFFECT_LIVE, + VIR_DOMAIN_VCPU_CONFIG = VIR_DOMAIN_AFFECT_CONFIG, + + /* Additionally, these flags may be bitwise-OR'd in. */ + VIR_DOMAIN_VCPU_MAXIMUM = (1 << 2), /* Max rather than current count */ + VIR_DOMAIN_VCPU_GUEST = (1 << 3), /* Modify state of the cpu in the guest */ +} virDomainVcpuFlags; + +int virDomainSetVcpus (virDomainPtr domain, + unsigned int nvcpus); +int virDomainSetVcpusFlags (virDomainPtr domain, + unsigned int nvcpus, + unsigned int flags); +int virDomainGetVcpusFlags (virDomainPtr domain, + unsigned int flags); + +int virDomainPinVcpu (virDomainPtr domain, + unsigned int vcpu, + unsigned char *cpumap, + int maplen); +int virDomainPinVcpuFlags (virDomainPtr domain, + unsigned int vcpu, + unsigned char *cpumap, + int maplen, + unsigned int flags); + +int virDomainGetVcpuPinInfo (virDomainPtr domain, + int ncpumaps, + unsigned char *cpumaps, + int maplen, + unsigned int flags); + +int virDomainPinEmulator (virDomainPtr domain, + unsigned char *cpumap, + int maplen, + unsigned int flags); + +int virDomainGetEmulatorPinInfo (virDomainPtr domain, + unsigned char *cpumaps, + int maplen, + unsigned int flags); + +/** + * VIR_USE_CPU: + * @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN/OUT) + * @cpu: the physical CPU number + * + * This macro is to be used in conjunction with virDomainPinVcpu() API. + * It sets the bit (CPU usable) of the related cpu in cpumap. + */ + +# define VIR_USE_CPU(cpumap, cpu) ((cpumap)[(cpu) / 8] |= (1 << ((cpu) % 8))) + +/** + * VIR_UNUSE_CPU: + * @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN/OUT) + * @cpu: the physical CPU number + * + * This macro is to be used in conjunction with virDomainPinVcpu() API. + * It resets the bit (CPU not usable) of the related cpu in cpumap. + */ + +# define VIR_UNUSE_CPU(cpumap, cpu) ((cpumap)[(cpu) / 8] &= ~(1 << ((cpu) % 8))) + +/** + * VIR_CPU_USED: + * @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN) + * @cpu: the physical CPU number + * + * This macro can be used in conjunction with virNodeGetCPUMap() API. + * It returns non-zero if the bit of the related CPU is set. + */ + +# define VIR_CPU_USED(cpumap, cpu) ((cpumap)[(cpu) / 8] & (1 << ((cpu) % 8))) + +/** + * VIR_CPU_MAPLEN: + * @cpu: number of physical CPUs + * + * This macro is to be used in conjunction with virDomainPinVcpu() API. + * It returns the length (in bytes) required to store the complete + * CPU map between a single virtual & all physical CPUs of a domain. + */ + +# define VIR_CPU_MAPLEN(cpu) (((cpu) + 7) / 8) + + +int virDomainGetVcpus (virDomainPtr domain, + virVcpuInfoPtr info, + int maxinfo, + unsigned char *cpumaps, + int maplen); + +/** + * VIR_CPU_USABLE: + * @cpumaps: pointer to an array of cpumap (in 8-bit bytes) (IN) + * @maplen: the length (in bytes) of one cpumap + * @vcpu: the virtual CPU number + * @cpu: the physical CPU number + * + * This macro is to be used in conjunction with virDomainGetVcpus() API. + * VIR_CPU_USABLE macro returns a non-zero value (true) if the cpu + * is usable by the vcpu, and 0 otherwise. + */ + +# define VIR_CPU_USABLE(cpumaps, maplen, vcpu, cpu) \ + VIR_CPU_USED(VIR_GET_CPUMAP(cpumaps, maplen, vcpu), cpu) + +/** + * VIR_COPY_CPUMAP: + * @cpumaps: pointer to an array of cpumap (in 8-bit bytes) (IN) + * @maplen: the length (in bytes) of one cpumap + * @vcpu: the virtual CPU number + * @cpumap: pointer to a cpumap (in 8-bit bytes) (OUT) + * This cpumap must be previously allocated by the caller + * (ie: malloc(maplen)) + * + * This macro is to be used in conjunction with virDomainGetVcpus() and + * virDomainPinVcpu() APIs. VIR_COPY_CPUMAP macro extracts the cpumap of + * the specified vcpu from cpumaps array and copies it into cpumap to be used + * later by virDomainPinVcpu() API. + */ +# define VIR_COPY_CPUMAP(cpumaps, maplen, vcpu, cpumap) \ + memcpy(cpumap, VIR_GET_CPUMAP(cpumaps, maplen, vcpu), maplen) + + +/** + * VIR_GET_CPUMAP: + * @cpumaps: pointer to an array of cpumap (in 8-bit bytes) (IN) + * @maplen: the length (in bytes) of one cpumap + * @vcpu: the virtual CPU number + * + * This macro is to be used in conjunction with virDomainGetVcpus() and + * virDomainPinVcpu() APIs. VIR_GET_CPUMAP macro returns a pointer to the + * cpumap of the specified vcpu from cpumaps array. + */ +# define VIR_GET_CPUMAP(cpumaps, maplen, vcpu) (&((cpumaps)[(vcpu) * (maplen)])) + + +typedef enum { + /* See virDomainModificationImpact for these flags. */ + VIR_DOMAIN_DEVICE_MODIFY_CURRENT = VIR_DOMAIN_AFFECT_CURRENT, + VIR_DOMAIN_DEVICE_MODIFY_LIVE = VIR_DOMAIN_AFFECT_LIVE, + VIR_DOMAIN_DEVICE_MODIFY_CONFIG = VIR_DOMAIN_AFFECT_CONFIG, + + /* Additionally, these flags may be bitwise-OR'd in. */ + VIR_DOMAIN_DEVICE_MODIFY_FORCE = (1 << 2), /* Forcibly modify device + (ex. force eject a cdrom) */ +} virDomainDeviceModifyFlags; + +int virDomainAttachDevice(virDomainPtr domain, const char *xml); +int virDomainDetachDevice(virDomainPtr domain, const char *xml); + +int virDomainAttachDeviceFlags(virDomainPtr domain, + const char *xml, unsigned int flags); +int virDomainDetachDeviceFlags(virDomainPtr domain, + const char *xml, unsigned int flags); +int virDomainUpdateDeviceFlags(virDomainPtr domain, + const char *xml, unsigned int flags); + +typedef struct _virDomainStatsRecord virDomainStatsRecord; +typedef virDomainStatsRecord *virDomainStatsRecordPtr; +struct _virDomainStatsRecord { + virDomainPtr dom; + virTypedParameterPtr params; + int nparams; +}; + +typedef enum { + VIR_DOMAIN_STATS_STATE = (1 << 0), /* return domain state */ + VIR_DOMAIN_STATS_CPU_TOTAL = (1 << 1), /* return domain CPU info */ + VIR_DOMAIN_STATS_BALLOON = (1 << 2), /* return domain balloon info */ + VIR_DOMAIN_STATS_VCPU = (1 << 3), /* return domain virtual CPU info */ + VIR_DOMAIN_STATS_INTERFACE = (1 << 4), /* return domain interfaces info */ + VIR_DOMAIN_STATS_BLOCK = (1 << 5), /* return domain block info */ +} virDomainStatsTypes; + +typedef enum { + VIR_CONNECT_GET_ALL_DOMAINS_STATS_ACTIVE = VIR_CONNECT_LIST_DOMAINS_ACTIVE, + VIR_CONNECT_GET_ALL_DOMAINS_STATS_INACTIVE = VIR_CONNECT_LIST_DOMAINS_INACTIVE, + + VIR_CONNECT_GET_ALL_DOMAINS_STATS_PERSISTENT = VIR_CONNECT_LIST_DOMAINS_PERSISTENT, + VIR_CONNECT_GET_ALL_DOMAINS_STATS_TRANSIENT = VIR_CONNECT_LIST_DOMAINS_TRANSIENT, + + VIR_CONNECT_GET_ALL_DOMAINS_STATS_RUNNING = VIR_CONNECT_LIST_DOMAINS_RUNNING, + VIR_CONNECT_GET_ALL_DOMAINS_STATS_PAUSED = VIR_CONNECT_LIST_DOMAINS_PAUSED, + VIR_CONNECT_GET_ALL_DOMAINS_STATS_SHUTOFF = VIR_CONNECT_LIST_DOMAINS_SHUTOFF, + VIR_CONNECT_GET_ALL_DOMAINS_STATS_OTHER = VIR_CONNECT_LIST_DOMAINS_OTHER, + + VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS = 1 << 31, /* enforce requested stats */ +} virConnectGetAllDomainStatsFlags; + +int virConnectGetAllDomainStats(virConnectPtr conn, + unsigned int stats, + virDomainStatsRecordPtr **retStats, + unsigned int flags); + +int virDomainListGetStats(virDomainPtr *doms, + unsigned int stats, + virDomainStatsRecordPtr **retStats, + unsigned int flags); + +void virDomainStatsRecordListFree(virDomainStatsRecordPtr *stats); + +/* + * BlockJob API + */ + +/** + * virDomainBlockJobType: + * + * Describes various possible block jobs. + */ +typedef enum { + VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN = 0, /* Placeholder */ + + VIR_DOMAIN_BLOCK_JOB_TYPE_PULL = 1, + /* Block Pull (virDomainBlockPull, or virDomainBlockRebase without + * flags), job ends on completion */ + + VIR_DOMAIN_BLOCK_JOB_TYPE_COPY = 2, + /* Block Copy (virDomainBlockCopy, or virDomainBlockRebase with + * flags), job exists as long as mirroring is active */ + + VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT = 3, + /* Block Commit (virDomainBlockCommit without flags), job ends on + * completion */ + + VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT = 4, + /* Active Block Commit (virDomainBlockCommit with flags), job + * exists as long as sync is active */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_BLOCK_JOB_TYPE_LAST +# endif +} virDomainBlockJobType; + +/** + * virDomainBlockJobAbortFlags: + * + * VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC: Request only, do not wait for completion + * VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT: Pivot to new file when ending a copy or + * active commit job + */ +typedef enum { + VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC = 1 << 0, + VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT = 1 << 1, +} virDomainBlockJobAbortFlags; + +int virDomainBlockJobAbort(virDomainPtr dom, const char *disk, + unsigned int flags); + +/* Flags for use with virDomainGetBlockJobInfo */ +typedef enum { + VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES = 1 << 0, /* bandwidth in bytes/s + instead of MiB/s */ +} virDomainBlockJobInfoFlags; + +/* An iterator for monitoring block job operations */ +typedef unsigned long long virDomainBlockJobCursor; + +typedef struct _virDomainBlockJobInfo virDomainBlockJobInfo; +struct _virDomainBlockJobInfo { + int type; /* virDomainBlockJobType */ + unsigned long bandwidth; /* either bytes/s or MiB/s, according to flags */ + + /* + * The following fields provide an indication of block job progress. @cur + * indicates the current position and will be between 0 and @end. @end is + * the final cursor position for this operation and represents completion. + * To approximate progress, divide @cur by @end. + */ + virDomainBlockJobCursor cur; + virDomainBlockJobCursor end; +}; +typedef virDomainBlockJobInfo *virDomainBlockJobInfoPtr; + +int virDomainGetBlockJobInfo(virDomainPtr dom, const char *disk, + virDomainBlockJobInfoPtr info, + unsigned int flags); + +/* Flags for use with virDomainBlockJobSetSpeed */ +typedef enum { + VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES = 1 << 0, /* bandwidth in bytes/s + instead of MiB/s */ +} virDomainBlockJobSetSpeedFlags; + +int virDomainBlockJobSetSpeed(virDomainPtr dom, const char *disk, + unsigned long bandwidth, unsigned int flags); + +/* Flags for use with virDomainBlockPull (values chosen to be a subset + * of the flags for virDomainBlockRebase) */ +typedef enum { + VIR_DOMAIN_BLOCK_PULL_BANDWIDTH_BYTES = 1 << 6, /* bandwidth in bytes/s + instead of MiB/s */ +} virDomainBlockPullFlags; + +int virDomainBlockPull(virDomainPtr dom, const char *disk, + unsigned long bandwidth, unsigned int flags); + +/** + * virDomainBlockRebaseFlags: + * + * Flags available for virDomainBlockRebase(). + */ +typedef enum { + VIR_DOMAIN_BLOCK_REBASE_SHALLOW = 1 << 0, /* Limit copy to top of source + backing chain */ + VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT = 1 << 1, /* Reuse existing external + file for a copy */ + VIR_DOMAIN_BLOCK_REBASE_COPY_RAW = 1 << 2, /* Make destination file raw */ + VIR_DOMAIN_BLOCK_REBASE_COPY = 1 << 3, /* Start a copy job */ + VIR_DOMAIN_BLOCK_REBASE_RELATIVE = 1 << 4, /* Keep backing chain + referenced using relative + names */ + VIR_DOMAIN_BLOCK_REBASE_COPY_DEV = 1 << 5, /* Treat destination as block + device instead of file */ + VIR_DOMAIN_BLOCK_REBASE_BANDWIDTH_BYTES = 1 << 6, /* bandwidth in bytes/s + instead of MiB/s */ +} virDomainBlockRebaseFlags; + +int virDomainBlockRebase(virDomainPtr dom, const char *disk, + const char *base, unsigned long bandwidth, + unsigned int flags); + +/** + * virDomainBlockCopyFlags: + * + * Flags available for virDomainBlockCopy(). + */ +typedef enum { + VIR_DOMAIN_BLOCK_COPY_SHALLOW = 1 << 0, /* Limit copy to top of source + backing chain */ + VIR_DOMAIN_BLOCK_COPY_REUSE_EXT = 1 << 1, /* Reuse existing external + file for a copy */ +} virDomainBlockCopyFlags; + +/** + * VIR_DOMAIN_BLOCK_COPY_BANDWIDTH: + * Macro for the virDomainBlockCopy bandwidth tunable: it represents + * the maximum bandwidth in bytes/s, and is used while getting the + * copy operation into the mirrored phase, with a type of ullong. For + * compatibility with virDomainBlockJobSetSpeed(), values larger than + * 2^52 bytes/sec (a 32-bit MiB/s value) may be rejected on input due + * to overflow considerations (but do you really have an interface + * with that much bandwidth?), and values larger than 2^31 bytes/sec + * may cause overflow problems if queried in bytes/sec. Hypervisors + * may further restrict the set of valid values. Specifying 0 is the + * same as omitting this parameter, to request no bandwidth limiting. + * Some hypervisors may lack support for this parameter, while still + * allowing a subsequent change of bandwidth via + * virDomainBlockJobSetSpeed(). The actual speed can be determined + * with virDomainGetBlockJobInfo(). + */ +# define VIR_DOMAIN_BLOCK_COPY_BANDWIDTH "bandwidth" + +/** + * VIR_DOMAIN_BLOCK_COPY_GRANULARITY: + * Macro for the virDomainBlockCopy granularity tunable: it represents + * the granularity in bytes at which the copy operation recognizes + * dirty blocks that need copying, as an unsigned int. Hypervisors may + * restrict this to be a power of two or fall within a certain + * range. Specifying 0 is the same as omitting this parameter, to + * request the hypervisor default. + */ +# define VIR_DOMAIN_BLOCK_COPY_GRANULARITY "granularity" + +/** + * VIR_DOMAIN_BLOCK_COPY_BUF_SIZE: + * Macro for the virDomainBlockCopy buffer size tunable: it represents + * how much data in bytes can be in flight between source and destination, + * as an unsigned long long. Specifying 0 is the same as omitting this + * parameter, to request the hypervisor default. + */ +# define VIR_DOMAIN_BLOCK_COPY_BUF_SIZE "buf-size" + +int virDomainBlockCopy(virDomainPtr dom, const char *disk, + const char *destxml, + virTypedParameterPtr params, + int nparams, + unsigned int flags); + +/** + * virDomainBlockCommitFlags: + * + * Flags available for virDomainBlockCommit(). + */ +typedef enum { + VIR_DOMAIN_BLOCK_COMMIT_SHALLOW = 1 << 0, /* NULL base means next backing + file, not whole chain */ + VIR_DOMAIN_BLOCK_COMMIT_DELETE = 1 << 1, /* Delete any files that are now + invalid after their contents + have been committed */ + VIR_DOMAIN_BLOCK_COMMIT_ACTIVE = 1 << 2, /* Allow a two-phase commit when + top is the active layer */ + VIR_DOMAIN_BLOCK_COMMIT_RELATIVE = 1 << 3, /* keep the backing chain + referenced using relative + names */ + VIR_DOMAIN_BLOCK_COMMIT_BANDWIDTH_BYTES = 1 << 4, /* bandwidth in bytes/s + instead of MiB/s */ +} virDomainBlockCommitFlags; + +int virDomainBlockCommit(virDomainPtr dom, const char *disk, const char *base, + const char *top, unsigned long bandwidth, + unsigned int flags); + + +/* Block I/O throttling support */ + +/** + * VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC: + * + * Macro for the BlockIoTune tunable weight: it represents the total + * bytes per second permitted through a block device, as a ullong. + */ +# define VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC "total_bytes_sec" + +/** + * VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC: + * + * Macro for the BlockIoTune tunable weight: it represents the read + * bytes per second permitted through a block device, as a ullong. + */ +# define VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC "read_bytes_sec" + +/** + * VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC: + * + * Macro for the BlockIoTune tunable weight: it represents the write + * bytes per second permitted through a block device, as a ullong. + */ +# define VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC "write_bytes_sec" + +/** + * VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC: + * + * Macro for the BlockIoTune tunable weight: it represents the total + * I/O operations per second permitted through a block device, as a ullong. + */ +# define VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC "total_iops_sec" + +/** + * VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC: + * + * Macro for the BlockIoTune tunable weight: it represents the read + * I/O operations per second permitted through a block device, as a ullong. + */ +# define VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC "read_iops_sec" + +/** + * VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC: + * Macro for the BlockIoTune tunable weight: it represents the write + * I/O operations per second permitted through a block device, as a ullong. + */ +# define VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC "write_iops_sec" + +int +virDomainSetBlockIoTune(virDomainPtr dom, + const char *disk, + virTypedParameterPtr params, + int nparams, + unsigned int flags); +int +virDomainGetBlockIoTune(virDomainPtr dom, + const char *disk, + virTypedParameterPtr params, + int *nparams, + unsigned int flags); + +/** + * virDomainDiskErrorCode: + * + * Disk I/O error. + */ +typedef enum { + VIR_DOMAIN_DISK_ERROR_NONE = 0, /* no error */ + VIR_DOMAIN_DISK_ERROR_UNSPEC = 1, /* unspecified I/O error */ + VIR_DOMAIN_DISK_ERROR_NO_SPACE = 2, /* no space left on the device */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_DISK_ERROR_LAST +# endif +} virDomainDiskErrorCode; + +/** + * virDomainDiskError: + * + */ +typedef struct _virDomainDiskError virDomainDiskError; +typedef virDomainDiskError *virDomainDiskErrorPtr; + +struct _virDomainDiskError { + char *disk; /* disk target */ + int error; /* virDomainDiskErrorCode */ +}; + +int virDomainGetDiskErrors(virDomainPtr dom, + virDomainDiskErrorPtr errors, + unsigned int maxerrors, + unsigned int flags); + + + +/** + * virKeycodeSet: + * + * Enum to specify which keycode mapping is in use for virDomainSendKey(). + */ +typedef enum { + VIR_KEYCODE_SET_LINUX = 0, + VIR_KEYCODE_SET_XT = 1, + VIR_KEYCODE_SET_ATSET1 = 2, + VIR_KEYCODE_SET_ATSET2 = 3, + VIR_KEYCODE_SET_ATSET3 = 4, + VIR_KEYCODE_SET_OSX = 5, + VIR_KEYCODE_SET_XT_KBD = 6, + VIR_KEYCODE_SET_USB = 7, + VIR_KEYCODE_SET_WIN32 = 8, + VIR_KEYCODE_SET_RFB = 9, + +# ifdef VIR_ENUM_SENTINELS + VIR_KEYCODE_SET_LAST + /* + * NB: this enum value will increase over time as new events are + * added to the libvirt API. It reflects the last keycode set supported + * by this version of the libvirt API. + */ +# endif +} virKeycodeSet; + +/** + * VIR_DOMAIN_SEND_KEY_MAX_KEYS: + * + * Maximum number of keycodes that can be sent in one virDomainSendKey() call. + */ +# define VIR_DOMAIN_SEND_KEY_MAX_KEYS 16 + +int virDomainSendKey(virDomainPtr domain, + unsigned int codeset, + unsigned int holdtime, + unsigned int *keycodes, + int nkeycodes, + unsigned int flags); + +/* + * These just happen to match Linux signal numbers. The numbers + * will be mapped to whatever the SIGNUM is in the guest OS in + * question by the agent delivering the signal. The names are + * based on the POSIX / XSI signal standard though. + * + * Do not rely on all values matching Linux though. It is possible + * this enum might be extended with new signals which have no + * mapping in Linux. + */ +typedef enum { + VIR_DOMAIN_PROCESS_SIGNAL_NOP = 0, /* No constant in POSIX/Linux */ + VIR_DOMAIN_PROCESS_SIGNAL_HUP = 1, /* SIGHUP */ + VIR_DOMAIN_PROCESS_SIGNAL_INT = 2, /* SIGINT */ + VIR_DOMAIN_PROCESS_SIGNAL_QUIT = 3, /* SIGQUIT */ + VIR_DOMAIN_PROCESS_SIGNAL_ILL = 4, /* SIGILL */ + VIR_DOMAIN_PROCESS_SIGNAL_TRAP = 5, /* SIGTRAP */ + VIR_DOMAIN_PROCESS_SIGNAL_ABRT = 6, /* SIGABRT */ + VIR_DOMAIN_PROCESS_SIGNAL_BUS = 7, /* SIGBUS */ + VIR_DOMAIN_PROCESS_SIGNAL_FPE = 8, /* SIGFPE */ + VIR_DOMAIN_PROCESS_SIGNAL_KILL = 9, /* SIGKILL */ + + VIR_DOMAIN_PROCESS_SIGNAL_USR1 = 10, /* SIGUSR1 */ + VIR_DOMAIN_PROCESS_SIGNAL_SEGV = 11, /* SIGSEGV */ + VIR_DOMAIN_PROCESS_SIGNAL_USR2 = 12, /* SIGUSR2 */ + VIR_DOMAIN_PROCESS_SIGNAL_PIPE = 13, /* SIGPIPE */ + VIR_DOMAIN_PROCESS_SIGNAL_ALRM = 14, /* SIGALRM */ + VIR_DOMAIN_PROCESS_SIGNAL_TERM = 15, /* SIGTERM */ + VIR_DOMAIN_PROCESS_SIGNAL_STKFLT = 16, /* Not in POSIX (SIGSTKFLT on Linux )*/ + VIR_DOMAIN_PROCESS_SIGNAL_CHLD = 17, /* SIGCHLD */ + VIR_DOMAIN_PROCESS_SIGNAL_CONT = 18, /* SIGCONT */ + VIR_DOMAIN_PROCESS_SIGNAL_STOP = 19, /* SIGSTOP */ + + VIR_DOMAIN_PROCESS_SIGNAL_TSTP = 20, /* SIGTSTP */ + VIR_DOMAIN_PROCESS_SIGNAL_TTIN = 21, /* SIGTTIN */ + VIR_DOMAIN_PROCESS_SIGNAL_TTOU = 22, /* SIGTTOU */ + VIR_DOMAIN_PROCESS_SIGNAL_URG = 23, /* SIGURG */ + VIR_DOMAIN_PROCESS_SIGNAL_XCPU = 24, /* SIGXCPU */ + VIR_DOMAIN_PROCESS_SIGNAL_XFSZ = 25, /* SIGXFSZ */ + VIR_DOMAIN_PROCESS_SIGNAL_VTALRM = 26, /* SIGVTALRM */ + VIR_DOMAIN_PROCESS_SIGNAL_PROF = 27, /* SIGPROF */ + VIR_DOMAIN_PROCESS_SIGNAL_WINCH = 28, /* Not in POSIX (SIGWINCH on Linux) */ + VIR_DOMAIN_PROCESS_SIGNAL_POLL = 29, /* SIGPOLL (also known as SIGIO on Linux) */ + + VIR_DOMAIN_PROCESS_SIGNAL_PWR = 30, /* Not in POSIX (SIGPWR on Linux) */ + VIR_DOMAIN_PROCESS_SIGNAL_SYS = 31, /* SIGSYS (also known as SIGUNUSED on Linux) */ + VIR_DOMAIN_PROCESS_SIGNAL_RT0 = 32, /* SIGRTMIN */ + VIR_DOMAIN_PROCESS_SIGNAL_RT1 = 33, /* SIGRTMIN + 1 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT2 = 34, /* SIGRTMIN + 2 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT3 = 35, /* SIGRTMIN + 3 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT4 = 36, /* SIGRTMIN + 4 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT5 = 37, /* SIGRTMIN + 5 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT6 = 38, /* SIGRTMIN + 6 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT7 = 39, /* SIGRTMIN + 7 */ + + VIR_DOMAIN_PROCESS_SIGNAL_RT8 = 40, /* SIGRTMIN + 8 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT9 = 41, /* SIGRTMIN + 9 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT10 = 42, /* SIGRTMIN + 10 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT11 = 43, /* SIGRTMIN + 11 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT12 = 44, /* SIGRTMIN + 12 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT13 = 45, /* SIGRTMIN + 13 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT14 = 46, /* SIGRTMIN + 14 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT15 = 47, /* SIGRTMIN + 15 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT16 = 48, /* SIGRTMIN + 16 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT17 = 49, /* SIGRTMIN + 17 */ + + VIR_DOMAIN_PROCESS_SIGNAL_RT18 = 50, /* SIGRTMIN + 18 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT19 = 51, /* SIGRTMIN + 19 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT20 = 52, /* SIGRTMIN + 20 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT21 = 53, /* SIGRTMIN + 21 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT22 = 54, /* SIGRTMIN + 22 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT23 = 55, /* SIGRTMIN + 23 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT24 = 56, /* SIGRTMIN + 24 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT25 = 57, /* SIGRTMIN + 25 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT26 = 58, /* SIGRTMIN + 26 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT27 = 59, /* SIGRTMIN + 27 */ + + VIR_DOMAIN_PROCESS_SIGNAL_RT28 = 60, /* SIGRTMIN + 28 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT29 = 61, /* SIGRTMIN + 29 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT30 = 62, /* SIGRTMIN + 30 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT31 = 63, /* SIGRTMIN + 31 */ + VIR_DOMAIN_PROCESS_SIGNAL_RT32 = 64, /* SIGRTMIN + 32 / SIGRTMAX */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_PROCESS_SIGNAL_LAST +# endif +} virDomainProcessSignal; + +int virDomainSendProcessSignal(virDomainPtr domain, + long long pid_value, + unsigned int signum, + unsigned int flags); + +/* + * Deprecated calls + */ +virDomainPtr virDomainCreateLinux (virConnectPtr conn, + const char *xmlDesc, + unsigned int flags); + + +/* + * Domain Event Notification + */ + +/** + * virDomainEventType: + * + * a virDomainEventType is emitted during domain lifecycle events + */ +typedef enum { + VIR_DOMAIN_EVENT_DEFINED = 0, + VIR_DOMAIN_EVENT_UNDEFINED = 1, + VIR_DOMAIN_EVENT_STARTED = 2, + VIR_DOMAIN_EVENT_SUSPENDED = 3, + VIR_DOMAIN_EVENT_RESUMED = 4, + VIR_DOMAIN_EVENT_STOPPED = 5, + VIR_DOMAIN_EVENT_SHUTDOWN = 6, + VIR_DOMAIN_EVENT_PMSUSPENDED = 7, + VIR_DOMAIN_EVENT_CRASHED = 8, + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_LAST +# endif +} virDomainEventType; + +/** + * virDomainEventDefinedDetailType: + * + * Details on the cause of a 'defined' lifecycle event + */ +typedef enum { + VIR_DOMAIN_EVENT_DEFINED_ADDED = 0, /* Newly created config file */ + VIR_DOMAIN_EVENT_DEFINED_UPDATED = 1, /* Changed config file */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_DEFINED_LAST +# endif +} virDomainEventDefinedDetailType; + +/** + * virDomainEventUndefinedDetailType: + * + * Details on the cause of an 'undefined' lifecycle event + */ +typedef enum { + VIR_DOMAIN_EVENT_UNDEFINED_REMOVED = 0, /* Deleted the config file */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_UNDEFINED_LAST +# endif +} virDomainEventUndefinedDetailType; + +/** + * virDomainEventStartedDetailType: + * + * Details on the cause of a 'started' lifecycle event + */ +typedef enum { + VIR_DOMAIN_EVENT_STARTED_BOOTED = 0, /* Normal startup from boot */ + VIR_DOMAIN_EVENT_STARTED_MIGRATED = 1, /* Incoming migration from another host */ + VIR_DOMAIN_EVENT_STARTED_RESTORED = 2, /* Restored from a state file */ + VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT = 3, /* Restored from snapshot */ + VIR_DOMAIN_EVENT_STARTED_WAKEUP = 4, /* Started due to wakeup event */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_STARTED_LAST +# endif +} virDomainEventStartedDetailType; + +/** + * virDomainEventSuspendedDetailType: + * + * Details on the cause of a 'suspended' lifecycle event + */ +typedef enum { + VIR_DOMAIN_EVENT_SUSPENDED_PAUSED = 0, /* Normal suspend due to admin pause */ + VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED = 1, /* Suspended for offline migration */ + VIR_DOMAIN_EVENT_SUSPENDED_IOERROR = 2, /* Suspended due to a disk I/O error */ + VIR_DOMAIN_EVENT_SUSPENDED_WATCHDOG = 3, /* Suspended due to a watchdog firing */ + VIR_DOMAIN_EVENT_SUSPENDED_RESTORED = 4, /* Restored from paused state file */ + VIR_DOMAIN_EVENT_SUSPENDED_FROM_SNAPSHOT = 5, /* Restored from paused snapshot */ + VIR_DOMAIN_EVENT_SUSPENDED_API_ERROR = 6, /* suspended after failure during libvirt API call */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_SUSPENDED_LAST +# endif +} virDomainEventSuspendedDetailType; + +/** + * virDomainEventResumedDetailType: + * + * Details on the cause of a 'resumed' lifecycle event + */ +typedef enum { + VIR_DOMAIN_EVENT_RESUMED_UNPAUSED = 0, /* Normal resume due to admin unpause */ + VIR_DOMAIN_EVENT_RESUMED_MIGRATED = 1, /* Resumed for completion of migration */ + VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT = 2, /* Resumed from snapshot */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_RESUMED_LAST +# endif +} virDomainEventResumedDetailType; + +/** + * virDomainEventStoppedDetailType: + * + * Details on the cause of a 'stopped' lifecycle event + */ +typedef enum { + VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN = 0, /* Normal shutdown */ + VIR_DOMAIN_EVENT_STOPPED_DESTROYED = 1, /* Forced poweroff from host */ + VIR_DOMAIN_EVENT_STOPPED_CRASHED = 2, /* Guest crashed */ + VIR_DOMAIN_EVENT_STOPPED_MIGRATED = 3, /* Migrated off to another host */ + VIR_DOMAIN_EVENT_STOPPED_SAVED = 4, /* Saved to a state file */ + VIR_DOMAIN_EVENT_STOPPED_FAILED = 5, /* Host emulator/mgmt failed */ + VIR_DOMAIN_EVENT_STOPPED_FROM_SNAPSHOT = 6, /* offline snapshot loaded */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_STOPPED_LAST +# endif +} virDomainEventStoppedDetailType; + + +/** + * virDomainEventShutdownDetailType: + * + * Details on the cause of a 'shutdown' lifecycle event + */ +typedef enum { + VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED = 0, /* Guest finished shutdown sequence */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_SHUTDOWN_LAST +# endif +} virDomainEventShutdownDetailType; + +/** + * virDomainEventPMSuspendedDetailType: + * + * Details on the cause of a 'pmsuspended' lifecycle event + */ +typedef enum { + VIR_DOMAIN_EVENT_PMSUSPENDED_MEMORY = 0, /* Guest was PM suspended to memory */ + VIR_DOMAIN_EVENT_PMSUSPENDED_DISK = 1, /* Guest was PM suspended to disk */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_PMSUSPENDED_LAST +# endif +} virDomainEventPMSuspendedDetailType; + +/** + * virDomainEventCrashedDetailType: + * + * Details on the cause of a 'crashed' lifecycle event + */ +typedef enum { + VIR_DOMAIN_EVENT_CRASHED_PANICKED = 0, /* Guest was panicked */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_CRASHED_LAST +# endif +} virDomainEventCrashedDetailType; + +/** + * virConnectDomainEventCallback: + * @conn: virConnect connection + * @dom: The domain on which the event occurred + * @event: The specific virDomainEventType which occurred + * @detail: event specific detail information + * @opaque: opaque user data + * + * A callback function to be registered, and called when a domain event occurs + * + * Returns 0 (the return value is currently ignored) + */ +typedef int (*virConnectDomainEventCallback)(virConnectPtr conn, + virDomainPtr dom, + int event, + int detail, + void *opaque); + +int virConnectDomainEventRegister(virConnectPtr conn, + virConnectDomainEventCallback cb, + void *opaque, + virFreeCallback freecb); + +int virConnectDomainEventDeregister(virConnectPtr conn, + virConnectDomainEventCallback cb); + + +int virDomainIsActive(virDomainPtr dom); +int virDomainIsPersistent(virDomainPtr dom); +int virDomainIsUpdated(virDomainPtr dom); + +typedef enum { + VIR_DOMAIN_JOB_NONE = 0, /* No job is active */ + VIR_DOMAIN_JOB_BOUNDED = 1, /* Job with a finite completion time */ + VIR_DOMAIN_JOB_UNBOUNDED = 2, /* Job without a finite completion time */ + VIR_DOMAIN_JOB_COMPLETED = 3, /* Job has finished, but isn't cleaned up */ + VIR_DOMAIN_JOB_FAILED = 4, /* Job hit error, but isn't cleaned up */ + VIR_DOMAIN_JOB_CANCELLED = 5, /* Job was aborted, but isn't cleaned up */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_JOB_LAST +# endif +} virDomainJobType; + +typedef struct _virDomainJobInfo virDomainJobInfo; +typedef virDomainJobInfo *virDomainJobInfoPtr; +struct _virDomainJobInfo { + /* One of virDomainJobType */ + int type; + + /* Time is measured in milliseconds */ + unsigned long long timeElapsed; /* Always set */ + unsigned long long timeRemaining; /* Only for VIR_DOMAIN_JOB_BOUNDED */ + + /* Data is measured in bytes unless otherwise specified + * and is measuring the job as a whole. + * + * For VIR_DOMAIN_JOB_UNBOUNDED, dataTotal may be less + * than the final sum of dataProcessed + dataRemaining + * in the event that the hypervisor has to repeat some + * data, such as due to dirtied pages during migration. + * + * For VIR_DOMAIN_JOB_BOUNDED, dataTotal shall always + * equal the sum of dataProcessed + dataRemaining. + */ + unsigned long long dataTotal; + unsigned long long dataProcessed; + unsigned long long dataRemaining; + + /* As above, but only tracking guest memory progress */ + unsigned long long memTotal; + unsigned long long memProcessed; + unsigned long long memRemaining; + + /* As above, but only tracking guest disk file progress */ + unsigned long long fileTotal; + unsigned long long fileProcessed; + unsigned long long fileRemaining; +}; + +/** + * virDomainGetJobStatsFlags: + * + * Flags OR'ed together to provide specific behavior when querying domain + * job statistics. + */ +typedef enum { + VIR_DOMAIN_JOB_STATS_COMPLETED = 1 << 0, /* return stats of a recently + * completed job */ +} virDomainGetJobStatsFlags; + +int virDomainGetJobInfo(virDomainPtr dom, + virDomainJobInfoPtr info); +int virDomainGetJobStats(virDomainPtr domain, + int *type, + virTypedParameterPtr *params, + int *nparams, + unsigned int flags); +int virDomainAbortJob(virDomainPtr dom); + +/** + * VIR_DOMAIN_JOB_TIME_ELAPSED: + * + * virDomainGetJobStats field: time (ms) since the beginning of the + * job, as VIR_TYPED_PARAM_ULLONG. + * + * This field corresponds to timeElapsed field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_TIME_ELAPSED "time_elapsed" + +/** + * VIR_DOMAIN_JOB_TIME_REMAINING: + * + * virDomainGetJobStats field: remaining time (ms) for VIR_DOMAIN_JOB_BOUNDED + * jobs, as VIR_TYPED_PARAM_ULLONG. + * + * This field corresponds to timeRemaining field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_TIME_REMAINING "time_remaining" + +/** + * VIR_DOMAIN_JOB_DOWNTIME: + * + * virDomainGetJobStats field: downtime (ms) that is expected to happen + * during migration, as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_JOB_DOWNTIME "downtime" + +/** + * VIR_DOMAIN_JOB_SETUP_TIME: + * + * virDomainGetJobStats field: total time in milliseconds spent preparing + * the migration in the 'setup' phase before the iterations begin, as + * VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_JOB_SETUP_TIME "setup_time" + +/** + * VIR_DOMAIN_JOB_DATA_TOTAL: + * + * virDomainGetJobStats field: total number of bytes supposed to be + * transferred, as VIR_TYPED_PARAM_ULLONG. For VIR_DOMAIN_JOB_UNBOUNDED + * jobs, this may be less than the sum of VIR_DOMAIN_JOB_DATA_PROCESSED and + * VIR_DOMAIN_JOB_DATA_REMAINING in the event that the hypervisor has to + * repeat some data, e.g., due to dirtied pages during migration. For + * VIR_DOMAIN_JOB_BOUNDED jobs, VIR_DOMAIN_JOB_DATA_TOTAL shall always equal + * VIR_DOMAIN_JOB_DATA_PROCESSED + VIR_DOMAIN_JOB_DATA_REMAINING. + * + * This field corresponds to dataTotal field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_DATA_TOTAL "data_total" + +/** + * VIR_DOMAIN_JOB_DATA_PROCESSED: + * + * virDomainGetJobStats field: number of bytes transferred from the + * beginning of the job, as VIR_TYPED_PARAM_ULLONG. + * + * This field corresponds to dataProcessed field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_DATA_PROCESSED "data_processed" + +/** + * VIR_DOMAIN_JOB_DATA_REMAINING: + * + * virDomainGetJobStats field: number of bytes that still need to be + * transferred, as VIR_TYPED_PARAM_ULLONG. + * + * This field corresponds to dataRemaining field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_DATA_REMAINING "data_remaining" + +/** + * VIR_DOMAIN_JOB_MEMORY_TOTAL: + * + * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_TOTAL but only + * tracking guest memory progress, as VIR_TYPED_PARAM_ULLONG. + * + * This field corresponds to memTotal field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_MEMORY_TOTAL "memory_total" + +/** + * VIR_DOMAIN_JOB_MEMORY_PROCESSED: + * + * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_PROCESSED but only + * tracking guest memory progress, as VIR_TYPED_PARAM_ULLONG. + * + * This field corresponds to memProcessed field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_MEMORY_PROCESSED "memory_processed" + +/** + * VIR_DOMAIN_JOB_MEMORY_REMAINING: + * + * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_REMAINING but only + * tracking guest memory progress, as VIR_TYPED_PARAM_ULLONG. + * + * This field corresponds to memRemaining field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_MEMORY_REMAINING "memory_remaining" + +/** + * VIR_DOMAIN_JOB_MEMORY_CONSTANT: + * + * virDomainGetJobStats field: number of pages filled with a constant + * byte (all bytes in a single page are identical) transferred since the + * beginning of the migration job, as VIR_TYPED_PARAM_ULLONG. + * + * The most common example of such pages are zero pages, i.e., pages filled + * with zero bytes. + */ +# define VIR_DOMAIN_JOB_MEMORY_CONSTANT "memory_constant" + +/** + * VIR_DOMAIN_JOB_MEMORY_NORMAL: + * + * virDomainGetJobStats field: number of pages that were transferred without + * any kind of compression (i.e., pages which were not filled with a constant + * byte and which could not be compressed) transferred since the beginning + * of the migration job, as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_JOB_MEMORY_NORMAL "memory_normal" + +/** + * VIR_DOMAIN_JOB_MEMORY_NORMAL_BYTES: + * + * virDomainGetJobStats field: number of bytes transferred as normal pages, + * as VIR_TYPED_PARAM_ULLONG. + * + * See VIR_DOMAIN_JOB_MEMORY_NORMAL for more details. + */ +# define VIR_DOMAIN_JOB_MEMORY_NORMAL_BYTES "memory_normal_bytes" + +/** + * VIR_DOMAIN_JOB_MEMORY_BPS: + * + * virDomainGetJobStats field: network throughput used while migrating + * memory in Bytes per second, as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_JOB_MEMORY_BPS "memory_bps" + +/** + * VIR_DOMAIN_JOB_DISK_TOTAL: + * + * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_TOTAL but only + * tracking guest disk progress, as VIR_TYPED_PARAM_ULLONG. + * + * This field corresponds to fileTotal field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_DISK_TOTAL "disk_total" + +/** + * VIR_DOMAIN_JOB_DISK_PROCESSED: + * + * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_PROCESSED but only + * tracking guest disk progress, as VIR_TYPED_PARAM_ULLONG. + * + * This field corresponds to fileProcessed field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_DISK_PROCESSED "disk_processed" + +/** + * VIR_DOMAIN_JOB_DISK_REMAINING: + * + * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_REMAINING but only + * tracking guest disk progress, as VIR_TYPED_PARAM_ULLONG. + * + * This field corresponds to fileRemaining field in virDomainJobInfo. + */ +# define VIR_DOMAIN_JOB_DISK_REMAINING "disk_remaining" + +/** + * VIR_DOMAIN_JOB_DISK_BPS: + * + * virDomainGetJobStats field: network throughput used while migrating + * disks in Bytes per second, as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_JOB_DISK_BPS "disk_bps" + +/** + * VIR_DOMAIN_JOB_COMPRESSION_CACHE: + * + * virDomainGetJobStats field: size of the cache (in bytes) used for + * compressing repeatedly transferred memory pages during live migration, + * as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_JOB_COMPRESSION_CACHE "compression_cache" + +/** + * VIR_DOMAIN_JOB_COMPRESSION_BYTES: + * + * virDomainGetJobStats field: number of compressed bytes transferred + * since the beginning of migration, as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_JOB_COMPRESSION_BYTES "compression_bytes" + +/** + * VIR_DOMAIN_JOB_COMPRESSION_PAGES: + * + * virDomainGetJobStats field: number of compressed pages transferred + * since the beginning of migration, as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_JOB_COMPRESSION_PAGES "compression_pages" + +/** + * VIR_DOMAIN_JOB_COMPRESSION_CACHE_MISSES: + * + * virDomainGetJobStats field: number of repeatedly changing pages that + * were not found in compression cache and thus could not be compressed, + * as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_JOB_COMPRESSION_CACHE_MISSES "compression_cache_misses" + +/** + * VIR_DOMAIN_JOB_COMPRESSION_OVERFLOW: + * + * virDomainGetJobStats field: number of repeatedly changing pages that + * were found in compression cache but were sent uncompressed because + * the result of compression was larger than the original page as a whole, + * as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_JOB_COMPRESSION_OVERFLOW "compression_overflow" + + + +/** + * virConnectDomainEventGenericCallback: + * @conn: the connection pointer + * @dom: the domain pointer + * @opaque: application specified data + * + * A generic domain event callback handler, for use with + * virConnectDomainEventRegisterAny(). Specific events usually + * have a customization with extra parameters, often with @opaque being + * passed in a different parameter position; use VIR_DOMAIN_EVENT_CALLBACK() + * when registering an appropriate handler. + */ +typedef void (*virConnectDomainEventGenericCallback)(virConnectPtr conn, + virDomainPtr dom, + void *opaque); + +/** + * virConnectDomainEventRTCChangeCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @utcoffset: the new RTC offset from UTC, measured in seconds + * @opaque: application specified data + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_RTC_CHANGE with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventRTCChangeCallback)(virConnectPtr conn, + virDomainPtr dom, + long long utcoffset, + void *opaque); + +/** + * virDomainEventWatchdogAction: + * + * The action that is to be taken due to the watchdog device firing + */ +typedef enum { + VIR_DOMAIN_EVENT_WATCHDOG_NONE = 0, /* No action, watchdog ignored */ + VIR_DOMAIN_EVENT_WATCHDOG_PAUSE, /* Guest CPUs are paused */ + VIR_DOMAIN_EVENT_WATCHDOG_RESET, /* Guest CPUs are reset */ + VIR_DOMAIN_EVENT_WATCHDOG_POWEROFF, /* Guest is forcibly powered off */ + VIR_DOMAIN_EVENT_WATCHDOG_SHUTDOWN, /* Guest is requested to gracefully shutdown */ + VIR_DOMAIN_EVENT_WATCHDOG_DEBUG, /* No action, a debug message logged */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_WATCHDOG_LAST +# endif +} virDomainEventWatchdogAction; + +/** + * virConnectDomainEventWatchdogCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @action: action that is to be taken due to watchdog firing + * @opaque: application specified data + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_WATCHDOG with virConnectDomainEventRegisterAny() + * + */ +typedef void (*virConnectDomainEventWatchdogCallback)(virConnectPtr conn, + virDomainPtr dom, + int action, + void *opaque); + +/** + * virDomainEventIOErrorAction: + * + * The action that is to be taken due to an IO error occurring + */ +typedef enum { + VIR_DOMAIN_EVENT_IO_ERROR_NONE = 0, /* No action, IO error ignored */ + VIR_DOMAIN_EVENT_IO_ERROR_PAUSE, /* Guest CPUs are paused */ + VIR_DOMAIN_EVENT_IO_ERROR_REPORT, /* IO error reported to guest OS */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_IO_ERROR_LAST +# endif +} virDomainEventIOErrorAction; + + +/** + * virConnectDomainEventIOErrorCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @srcPath: The host file on which the IO error occurred + * @devAlias: The guest device alias associated with the path + * @action: action that is to be taken due to the IO error + * @opaque: application specified data + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_IO_ERROR with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventIOErrorCallback)(virConnectPtr conn, + virDomainPtr dom, + const char *srcPath, + const char *devAlias, + int action, + void *opaque); + +/** + * virConnectDomainEventIOErrorReasonCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @srcPath: The host file on which the IO error occurred + * @devAlias: The guest device alias associated with the path + * @action: action that is to be taken due to the IO error + * @reason: the cause of the IO error + * @opaque: application specified data + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON with virConnectDomainEventRegisterAny() + * + * If the I/O error is known to be caused by an ENOSPC condition in + * the host (where resizing the disk to be larger will allow the guest + * to be resumed as if nothing happened), @reason will be "enospc". + * Otherwise, @reason will be "", although future strings may be added + * if determination of other error types becomes possible. + * + */ +typedef void (*virConnectDomainEventIOErrorReasonCallback)(virConnectPtr conn, + virDomainPtr dom, + const char *srcPath, + const char *devAlias, + int action, + const char *reason, + void *opaque); + +/** + * virDomainEventGraphicsPhase: + * + * The phase of the graphics client connection + */ +typedef enum { + VIR_DOMAIN_EVENT_GRAPHICS_CONNECT = 0, /* Initial socket connection established */ + VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE, /* Authentication & setup completed */ + VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT, /* Final socket disconnection */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_GRAPHICS_LAST +# endif +} virDomainEventGraphicsPhase; + +/** + * virDomainEventGraphicsAddressType: + * + * The type of address for the connection + */ +typedef enum { + VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_IPV4, /* IPv4 address */ + VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_IPV6, /* IPv6 address */ + VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_UNIX, /* UNIX socket path */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_LAST +# endif +} virDomainEventGraphicsAddressType; + + +/** + * virDomainEventGraphicsAddress: + * + * The data structure containing connection address details + * + */ +struct _virDomainEventGraphicsAddress { + int family; /* Address family, virDomainEventGraphicsAddressType */ + char *node; /* Address of node (eg IP address, or UNIX path) */ + char *service; /* Service name/number (eg TCP port, or NULL) */ +}; +typedef struct _virDomainEventGraphicsAddress virDomainEventGraphicsAddress; +typedef virDomainEventGraphicsAddress *virDomainEventGraphicsAddressPtr; + + +/** + * virDomainEventGraphicsSubjectIdentity: + * + * The data structure representing a single identity + * + * The types of identity differ according to the authentication scheme, + * some examples are 'x509dname' and 'saslUsername'. + */ +struct _virDomainEventGraphicsSubjectIdentity { + char *type; /* Type of identity */ + char *name; /* Identity value */ +}; +typedef struct _virDomainEventGraphicsSubjectIdentity virDomainEventGraphicsSubjectIdentity; +typedef virDomainEventGraphicsSubjectIdentity *virDomainEventGraphicsSubjectIdentityPtr; + + +/** + * virDomainEventGraphicsSubject: + * + * The data structure representing an authenticated subject + * + * A subject will have zero or more identities. The types of + * identity differ according to the authentication scheme + */ +struct _virDomainEventGraphicsSubject { + int nidentity; /* Number of identities in array*/ + virDomainEventGraphicsSubjectIdentityPtr identities; /* Array of identities for subject */ +}; +typedef struct _virDomainEventGraphicsSubject virDomainEventGraphicsSubject; +typedef virDomainEventGraphicsSubject *virDomainEventGraphicsSubjectPtr; + + +/** + * virConnectDomainEventGraphicsCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @phase: the phase of the connection + * @local: the local server address + * @remote: the remote client address + * @authScheme: the authentication scheme activated + * @subject: the authenticated subject (user) + * @opaque: application specified data + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_GRAPHICS with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventGraphicsCallback)(virConnectPtr conn, + virDomainPtr dom, + int phase, + const virDomainEventGraphicsAddress *local, + const virDomainEventGraphicsAddress *remote, + const char *authScheme, + const virDomainEventGraphicsSubject *subject, + void *opaque); + +/** + * virConnectDomainEventBlockJobStatus: + * + * Tracks status of a virDomainBlockPull(), virDomainBlockRebase(), + * virDomainBlockCopy(), or virDomainBlockCommit() operation + */ +typedef enum { + VIR_DOMAIN_BLOCK_JOB_COMPLETED = 0, + VIR_DOMAIN_BLOCK_JOB_FAILED = 1, + VIR_DOMAIN_BLOCK_JOB_CANCELED = 2, + VIR_DOMAIN_BLOCK_JOB_READY = 3, + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_BLOCK_JOB_LAST +# endif +} virConnectDomainEventBlockJobStatus; + +/** + * virConnectDomainEventBlockJobCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @disk: name associated with the affected disk (filename or target + * device, depending on how the callback was registered) + * @type: type of block job (virDomainBlockJobType) + * @status: status of the operation (virConnectDomainEventBlockJobStatus) + * @opaque: application specified data + * + * The string returned for @disk can be used in any of the libvirt API + * that operate on a particular disk of the domain, and depends on what + * event type was registered with virConnectDomainEventRegisterAny(). + * If the callback was registered using the older type of + * VIR_DOMAIN_EVENT_ID_BLOCK_JOB, then @disk contains the absolute file + * name of the host resource for the active layer of the disk; however, + * this name is unstable (pivoting via block copy or active block commit + * will change which file is active, giving a different name for the two + * events associated with the same job) and cannot be relied on if the + * active layer is associated with a network resource. If the callback + * was registered using the newer type of VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2, + * then @disk will contain the device target shorthand (the <target + * dev='...'/> sub-element, such as "vda"). + */ +typedef void (*virConnectDomainEventBlockJobCallback)(virConnectPtr conn, + virDomainPtr dom, + const char *disk, + int type, + int status, + void *opaque); + +/** + * virConnectDomainEventDiskChangeReason: + * + * The reason describing why this callback is called + */ +typedef enum { + VIR_DOMAIN_EVENT_DISK_CHANGE_MISSING_ON_START = 0, /* oldSrcPath is set */ + VIR_DOMAIN_EVENT_DISK_DROP_MISSING_ON_START = 1, + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_DISK_CHANGE_LAST +# endif +} virConnectDomainEventDiskChangeReason; + +/** + * virConnectDomainEventDiskChangeCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @oldSrcPath: old source path + * @newSrcPath: new source path + * @devAlias: device alias name + * @reason: reason why this callback was called; any of + * virConnectDomainEventDiskChangeReason + * @opaque: application specified data + * + * This callback occurs when disk gets changed. However, + * not all @reason will cause both @oldSrcPath and @newSrcPath + * to be non-NULL. Please see virConnectDomainEventDiskChangeReason + * for more details. + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_DISK_CHANGE with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventDiskChangeCallback)(virConnectPtr conn, + virDomainPtr dom, + const char *oldSrcPath, + const char *newSrcPath, + const char *devAlias, + int reason, + void *opaque); + +/** + * virConnectDomainEventTrayChangeReason: + * + * The reason describing why the callback was called + */ +typedef enum { + VIR_DOMAIN_EVENT_TRAY_CHANGE_OPEN = 0, + VIR_DOMAIN_EVENT_TRAY_CHANGE_CLOSE, + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_TRAY_CHANGE_LAST +# endif +} virDomainEventTrayChangeReason; + +/** + * virConnectDomainEventTrayChangeCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @devAlias: device alias + * @reason: why the tray status was changed? + * @opaque: application specified data + * + * This callback occurs when the tray of a removable device is moved. + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_TRAY_CHANGE with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventTrayChangeCallback)(virConnectPtr conn, + virDomainPtr dom, + const char *devAlias, + int reason, + void *opaque); + +/** + * virConnectDomainEventPMWakeupCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @reason: reason why the callback was called, unused currently, + * always passes 0 + * @opaque: application specified data + * + * This callback occurs when the guest is woken up. + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_PMWAKEUP with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventPMWakeupCallback)(virConnectPtr conn, + virDomainPtr dom, + int reason, + void *opaque); + +/** + * virConnectDomainEventPMSuspendCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @reason: reason why the callback was called, unused currently, + * always passes 0 + * @opaque: application specified data + * + * This callback occurs when the guest is suspended. + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_PMSUSPEND with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventPMSuspendCallback)(virConnectPtr conn, + virDomainPtr dom, + int reason, + void *opaque); + + +/** + * virConnectDomainEventBalloonChangeCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @actual: the new balloon level measured in kibibytes(blocks of 1024 bytes) + * @opaque: application specified data + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventBalloonChangeCallback)(virConnectPtr conn, + virDomainPtr dom, + unsigned long long actual, + void *opaque); + +/** + * virConnectDomainEventPMSuspendDiskCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @reason: reason why the callback was called, unused currently, + * always passes 0 + * @opaque: application specified data + * + * This callback occurs when the guest is suspended to disk. + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventPMSuspendDiskCallback)(virConnectPtr conn, + virDomainPtr dom, + int reason, + void *opaque); + +/** + * virConnectDomainEventDeviceRemovedCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @devAlias: device alias + * @opaque: application specified data + * + * This callback occurs when a device is removed from the domain. + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventDeviceRemovedCallback)(virConnectPtr conn, + virDomainPtr dom, + const char *devAlias, + void *opaque); + +/** + * VIR_DOMAIN_TUNABLE_CPU_VCPUPIN: + * + * Macro represents formatted pinning for one vcpu specified by id which is + * appended to the parameter name, for example "cputune.vcpupin1", + * as VIR_TYPED_PARAM_STRING. + */ +# define VIR_DOMAIN_TUNABLE_CPU_VCPUPIN "cputune.vcpupin%u" + +/** + * VIR_DOMAIN_TUNABLE_CPU_EMULATORPIN: + * + * Macro represents formatted pinning for emulator process, + * as VIR_TYPED_PARAM_STRING. + */ +# define VIR_DOMAIN_TUNABLE_CPU_EMULATORPIN "cputune.emulatorpin" + +/** + * VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES: + * + * Macro represents proportional weight of the scheduler used on the + * host cpu, when using the posix scheduler, as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES "cputune.cpu_shares" + +/** + * VIR_DOMAIN_TUNABLE_CPU_VCPU_PERIOD: + * + * Macro represents the enforcement period for a quota, in microseconds, + * for vcpus only, when using the posix scheduler, as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_TUNABLE_CPU_VCPU_PERIOD "cputune.vcpu_period" + +/** + * VIR_DOMAIN_TUNABLE_CPU_VCPU_QUOTA: + * + * Macro represents the maximum bandwidth to be used within a period for + * vcpus only, when using the posix scheduler, as VIR_TYPED_PARAM_LLONG. + */ +# define VIR_DOMAIN_TUNABLE_CPU_VCPU_QUOTA "cputune.vcpu_quota" + +/** + * VIR_DOMAIN_TUNABLE_CPU_EMULATOR_PERIOD: + * + * Macro represents the enforcement period for a quota in microseconds, + * when using the posix scheduler, for all emulator activity not tied to + * vcpus, as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_TUNABLE_CPU_EMULATOR_PERIOD "cputune.emulator_period" + +/** + * VIR_DOMAIN_TUNABLE_CPU_EMULATOR_QUOTA: + * + * Macro represents the maximum bandwidth to be used within a period for + * all emulator activity not tied to vcpus, when using the posix scheduler, + * as an VIR_TYPED_PARAM_LLONG. + */ +# define VIR_DOMAIN_TUNABLE_CPU_EMULATOR_QUOTA "cputune.emulator_quota" + +/** + * VIR_DOMAIN_TUNABLE_BLKDEV_DISK: + * + * Macro represents the name of guest disk for which the values are updated, + * as VIR_TYPED_PARAM_STRING. + */ +# define VIR_DOMAIN_TUNABLE_BLKDEV_DISK "blkdeviotune.disk" + +/** + * VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_BYTES_SEC: + * + * Marco represents the total throughput limit in bytes per second, + * as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_BYTES_SEC "blkdeviotune.total_bytes_sec" + +/** + * VIR_DOMAIN_TUNABLE_BLKDEV_READ_BYTES_SEC: + * + * Marco represents the read throughput limit in bytes per second, + * as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_TUNABLE_BLKDEV_READ_BYTES_SEC "blkdeviotune.read_bytes_sec" + +/** + * VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_BYTES_SEC: + * + * Macro represents the write throughput limit in bytes per second, + * as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_BYTES_SEC "blkdeviotune.write_bytes_sec" + +/** + * VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_IOPS_SEC: + * + * Macro represents the total I/O operations per second, + * as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_IOPS_SEC "blkdeviotune.total_iops_sec" + +/** + * VIR_DOMAIN_TUNABLE_BLKDEV_READ_IOPS_SEC: + * + * Macro represents the read I/O operations per second, + * as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_TUNABLE_BLKDEV_READ_IOPS_SEC "blkdeviotune.read_iops_sec" + +/** + * VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_IOPS_SEC: + * + * Macro represents the write I/O operations per second, + * as VIR_TYPED_PARAM_ULLONG. + */ +# define VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_IOPS_SEC "blkdeviotune.write_iops_sec" + +/** + * virConnectDomainEventTunableCallback: + * @conn: connection object + * @dom: domain on which the event occurred + * @params: changed tunable values stored as array of virTypedParameter + * @nparams: size of the array + * @opaque: application specified data + * + * This callback occurs when tunable values are updated. The params must not + * be freed in the callback handler as it's done internally after the callback + * handler is executed. + * + * Currently supported name spaces: + * "cputune.*" + * "blkdeviotune.*" + * + * The callback signature to use when registering for an event of type + * VIR_DOMAIN_EVENT_ID_TUNABLE with virConnectDomainEventRegisterAny() + */ +typedef void (*virConnectDomainEventTunableCallback)(virConnectPtr conn, + virDomainPtr dom, + virTypedParameterPtr params, + int nparams, + void *opaque); + + +/** + * VIR_DOMAIN_EVENT_CALLBACK: + * + * Used to cast the event specific callback into the generic one + * for use for virConnectDomainEventRegisterAny() + */ +# define VIR_DOMAIN_EVENT_CALLBACK(cb) ((virConnectDomainEventGenericCallback)(cb)) + + +/** + * virDomainEventID: + * + * An enumeration of supported eventId parameters for + * virConnectDomainEventRegisterAny(). Each event id determines which + * signature of callback function will be used. + */ +typedef enum { + VIR_DOMAIN_EVENT_ID_LIFECYCLE = 0, /* virConnectDomainEventCallback */ + VIR_DOMAIN_EVENT_ID_REBOOT = 1, /* virConnectDomainEventGenericCallback */ + VIR_DOMAIN_EVENT_ID_RTC_CHANGE = 2, /* virConnectDomainEventRTCChangeCallback */ + VIR_DOMAIN_EVENT_ID_WATCHDOG = 3, /* virConnectDomainEventWatchdogCallback */ + VIR_DOMAIN_EVENT_ID_IO_ERROR = 4, /* virConnectDomainEventIOErrorCallback */ + VIR_DOMAIN_EVENT_ID_GRAPHICS = 5, /* virConnectDomainEventGraphicsCallback */ + VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON = 6, /* virConnectDomainEventIOErrorReasonCallback */ + VIR_DOMAIN_EVENT_ID_CONTROL_ERROR = 7, /* virConnectDomainEventGenericCallback */ + VIR_DOMAIN_EVENT_ID_BLOCK_JOB = 8, /* virConnectDomainEventBlockJobCallback */ + VIR_DOMAIN_EVENT_ID_DISK_CHANGE = 9, /* virConnectDomainEventDiskChangeCallback */ + VIR_DOMAIN_EVENT_ID_TRAY_CHANGE = 10, /* virConnectDomainEventTrayChangeCallback */ + VIR_DOMAIN_EVENT_ID_PMWAKEUP = 11, /* virConnectDomainEventPMWakeupCallback */ + VIR_DOMAIN_EVENT_ID_PMSUSPEND = 12, /* virConnectDomainEventPMSuspendCallback */ + VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE = 13, /* virConnectDomainEventBalloonChangeCallback */ + VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK = 14, /* virConnectDomainEventPMSuspendDiskCallback */ + VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED = 15, /* virConnectDomainEventDeviceRemovedCallback */ + VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2 = 16, /* virConnectDomainEventBlockJobCallback */ + VIR_DOMAIN_EVENT_ID_TUNABLE = 17, /* virConnectDomainEventTunableCallback */ + +# ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_EVENT_ID_LAST + /* + * NB: this enum value will increase over time as new events are + * added to the libvirt API. It reflects the last event ID supported + * by this version of the libvirt API. + */ +# endif +} virDomainEventID; + + +/* Use VIR_DOMAIN_EVENT_CALLBACK() to cast the 'cb' parameter */ +int virConnectDomainEventRegisterAny(virConnectPtr conn, + virDomainPtr dom, /* Optional, to filter */ + int eventID, + virConnectDomainEventGenericCallback cb, + void *opaque, + virFreeCallback freecb); + +int virConnectDomainEventDeregisterAny(virConnectPtr conn, + int callbackID); + + +/** + * virDomainConsoleFlags + * + * Since 0.9.10 + */ +typedef enum { + + VIR_DOMAIN_CONSOLE_FORCE = (1 << 0), /* abort a (possibly) active console + connection to force a new + connection */ + VIR_DOMAIN_CONSOLE_SAFE = (1 << 1), /* check if the console driver supports + safe console operations */ +} virDomainConsoleFlags; + +int virDomainOpenConsole(virDomainPtr dom, + const char *dev_name, + virStreamPtr st, + unsigned int flags); + +/** + * virDomainChannelFlags + * + * Since 1.0.2 + */ +typedef enum { + VIR_DOMAIN_CHANNEL_FORCE = (1 << 0), /* abort a (possibly) active channel + connection to force a new + connection */ +} virDomainChannelFlags; + +int virDomainOpenChannel(virDomainPtr dom, + const char *name, + virStreamPtr st, + unsigned int flags); + +typedef enum { + VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH = (1 << 0), +} virDomainOpenGraphicsFlags; + +int virDomainOpenGraphics(virDomainPtr dom, + unsigned int idx, + int fd, + unsigned int flags); + +int virDomainOpenGraphicsFD(virDomainPtr dom, + unsigned int idx, + unsigned int flags); + +int virDomainInjectNMI(virDomainPtr domain, unsigned int flags); + +int virDomainFSTrim(virDomainPtr dom, + const char *mountPoint, + unsigned long long minimum, + unsigned int flags); + +int virDomainFSFreeze(virDomainPtr dom, + const char **mountpoints, + unsigned int nmountpoints, + unsigned int flags); + +int virDomainFSThaw(virDomainPtr dom, + const char **mountpoints, + unsigned int nmountpoints, + unsigned int flags); + +int virDomainGetTime(virDomainPtr dom, + long long *seconds, + unsigned int *nseconds, + unsigned int flags); + +typedef enum { + VIR_DOMAIN_TIME_SYNC = (1 << 0), /* Re-sync domain time from domain's RTC */ +} virDomainSetTimeFlags; + +int virDomainSetTime(virDomainPtr dom, + long long seconds, + unsigned int nseconds, + unsigned int flags); + +/** + * virSchedParameterType: + * + * A scheduler parameter field type. Provided for backwards + * compatibility; virTypedParameterType is the preferred enum since + * 0.9.2. + */ +typedef enum { + VIR_DOMAIN_SCHED_FIELD_INT = VIR_TYPED_PARAM_INT, + VIR_DOMAIN_SCHED_FIELD_UINT = VIR_TYPED_PARAM_UINT, + VIR_DOMAIN_SCHED_FIELD_LLONG = VIR_TYPED_PARAM_LLONG, + VIR_DOMAIN_SCHED_FIELD_ULLONG = VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_SCHED_FIELD_DOUBLE = VIR_TYPED_PARAM_DOUBLE, + VIR_DOMAIN_SCHED_FIELD_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN, +} virSchedParameterType; + +/** + * VIR_DOMAIN_SCHED_FIELD_LENGTH: + * + * Macro providing the field length of virSchedParameter. Provided + * for backwards compatibility; VIR_TYPED_PARAM_FIELD_LENGTH is the + * preferred value since 0.9.2. + */ +# define VIR_DOMAIN_SCHED_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH + +/** + * virSchedParameter: + * + * a virSchedParameter is the set of scheduler parameters. + * Provided for backwards compatibility; virTypedParameter is the + * preferred alias since 0.9.2. + */ +# define _virSchedParameter _virTypedParameter +typedef struct _virTypedParameter virSchedParameter; + +/** + * virSchedParameterPtr: + * + * a virSchedParameterPtr is a pointer to a virSchedParameter structure. + * Provided for backwards compatibility; virTypedParameterPtr is the + * preferred alias since 0.9.2. + */ +typedef virSchedParameter *virSchedParameterPtr; + +/** + * virBlkioParameterType: + * + * A blkio parameter field type. Provided for backwards + * compatibility; virTypedParameterType is the preferred enum since + * 0.9.2. + */ +typedef enum { + VIR_DOMAIN_BLKIO_PARAM_INT = VIR_TYPED_PARAM_INT, + VIR_DOMAIN_BLKIO_PARAM_UINT = VIR_TYPED_PARAM_UINT, + VIR_DOMAIN_BLKIO_PARAM_LLONG = VIR_TYPED_PARAM_LLONG, + VIR_DOMAIN_BLKIO_PARAM_ULLONG = VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_BLKIO_PARAM_DOUBLE = VIR_TYPED_PARAM_DOUBLE, + VIR_DOMAIN_BLKIO_PARAM_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN, +} virBlkioParameterType; + +/** + * VIR_DOMAIN_BLKIO_FIELD_LENGTH: + * + * Macro providing the field length of virBlkioParameter. Provided + * for backwards compatibility; VIR_TYPED_PARAM_FIELD_LENGTH is the + * preferred value since 0.9.2. + */ +# define VIR_DOMAIN_BLKIO_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH + +/** + * virBlkioParameter: + * + * a virBlkioParameter is the set of blkio parameters. + * Provided for backwards compatibility; virTypedParameter is the + * preferred alias since 0.9.2. + */ +# define _virBlkioParameter _virTypedParameter +typedef struct _virTypedParameter virBlkioParameter; + +/** + * virBlkioParameterPtr: + * + * a virBlkioParameterPtr is a pointer to a virBlkioParameter structure. + * Provided for backwards compatibility; virTypedParameterPtr is the + * preferred alias since 0.9.2. + */ +typedef virBlkioParameter *virBlkioParameterPtr; + +/** + * virMemoryParameterType: + * + * A memory parameter field type. Provided for backwards + * compatibility; virTypedParameterType is the preferred enum since + * 0.9.2. + */ +typedef enum { + VIR_DOMAIN_MEMORY_PARAM_INT = VIR_TYPED_PARAM_INT, + VIR_DOMAIN_MEMORY_PARAM_UINT = VIR_TYPED_PARAM_UINT, + VIR_DOMAIN_MEMORY_PARAM_LLONG = VIR_TYPED_PARAM_LLONG, + VIR_DOMAIN_MEMORY_PARAM_ULLONG = VIR_TYPED_PARAM_ULLONG, + VIR_DOMAIN_MEMORY_PARAM_DOUBLE = VIR_TYPED_PARAM_DOUBLE, + VIR_DOMAIN_MEMORY_PARAM_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN, +} virMemoryParameterType; + +/** + * VIR_DOMAIN_MEMORY_FIELD_LENGTH: + * + * Macro providing the field length of virMemoryParameter. Provided + * for backwards compatibility; VIR_TYPED_PARAM_FIELD_LENGTH is the + * preferred value since 0.9.2. + */ +# define VIR_DOMAIN_MEMORY_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH + +/** + * virMemoryParameter: + * + * a virMemoryParameter is the set of scheduler parameters. + * Provided for backwards compatibility; virTypedParameter is the + * preferred alias since 0.9.2. + */ +# define _virMemoryParameter _virTypedParameter +typedef struct _virTypedParameter virMemoryParameter; + +/** + * virMemoryParameterPtr: + * + * a virMemoryParameterPtr is a pointer to a virMemoryParameter structure. + * Provided for backwards compatibility; virTypedParameterPtr is the + * preferred alias since 0.9.2. + */ +typedef virMemoryParameter *virMemoryParameterPtr; + + +#endif /* __VIR_LIBVIRT_DOMAIN_H__ */ diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index 186b996..37d709a 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -96,253 +96,6 @@ typedef struct _virConnect virConnect; typedef virConnect *virConnectPtr; /** - * virDomain: - * - * a virDomain is a private structure representing a domain. - */ -typedef struct _virDomain virDomain; - -/** - * virDomainPtr: - * - * a virDomainPtr is pointer to a virDomain private structure, this is the - * type used to reference a domain in the API. - */ -typedef virDomain *virDomainPtr; - -/** - * virDomainState: - * - * A domain may be in different states at a given point in time - */ -typedef enum { - VIR_DOMAIN_NOSTATE = 0, /* no state */ - VIR_DOMAIN_RUNNING = 1, /* the domain is running */ - VIR_DOMAIN_BLOCKED = 2, /* the domain is blocked on resource */ - VIR_DOMAIN_PAUSED = 3, /* the domain is paused by user */ - VIR_DOMAIN_SHUTDOWN= 4, /* the domain is being shut down */ - VIR_DOMAIN_SHUTOFF = 5, /* the domain is shut off */ - VIR_DOMAIN_CRASHED = 6, /* the domain is crashed */ - VIR_DOMAIN_PMSUSPENDED = 7, /* the domain is suspended by guest - power management */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_LAST - /* - * NB: this enum value will increase over time as new events are - * added to the libvirt API. It reflects the last state supported - * by this version of the libvirt API. - */ -#endif -} virDomainState; - -typedef enum { - VIR_DOMAIN_NOSTATE_UNKNOWN = 0, - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_NOSTATE_LAST -#endif -} virDomainNostateReason; - -typedef enum { - VIR_DOMAIN_RUNNING_UNKNOWN = 0, - VIR_DOMAIN_RUNNING_BOOTED = 1, /* normal startup from boot */ - VIR_DOMAIN_RUNNING_MIGRATED = 2, /* migrated from another host */ - VIR_DOMAIN_RUNNING_RESTORED = 3, /* restored from a state file */ - VIR_DOMAIN_RUNNING_FROM_SNAPSHOT = 4, /* restored from snapshot */ - VIR_DOMAIN_RUNNING_UNPAUSED = 5, /* returned from paused state */ - VIR_DOMAIN_RUNNING_MIGRATION_CANCELED = 6, /* returned from migration */ - VIR_DOMAIN_RUNNING_SAVE_CANCELED = 7, /* returned from failed save process */ - VIR_DOMAIN_RUNNING_WAKEUP = 8, /* returned from pmsuspended due to - wakeup event */ - VIR_DOMAIN_RUNNING_CRASHED = 9, /* resumed from crashed */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_RUNNING_LAST -#endif -} virDomainRunningReason; - -typedef enum { - VIR_DOMAIN_BLOCKED_UNKNOWN = 0, /* the reason is unknown */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_BLOCKED_LAST -#endif -} virDomainBlockedReason; - -typedef enum { - VIR_DOMAIN_PAUSED_UNKNOWN = 0, /* the reason is unknown */ - VIR_DOMAIN_PAUSED_USER = 1, /* paused on user request */ - VIR_DOMAIN_PAUSED_MIGRATION = 2, /* paused for offline migration */ - VIR_DOMAIN_PAUSED_SAVE = 3, /* paused for save */ - VIR_DOMAIN_PAUSED_DUMP = 4, /* paused for offline core dump */ - VIR_DOMAIN_PAUSED_IOERROR = 5, /* paused due to a disk I/O error */ - VIR_DOMAIN_PAUSED_WATCHDOG = 6, /* paused due to a watchdog event */ - VIR_DOMAIN_PAUSED_FROM_SNAPSHOT = 7, /* paused after restoring from snapshot */ - VIR_DOMAIN_PAUSED_SHUTTING_DOWN = 8, /* paused during shutdown process */ - VIR_DOMAIN_PAUSED_SNAPSHOT = 9, /* paused while creating a snapshot */ - VIR_DOMAIN_PAUSED_CRASHED = 10, /* paused due to a guest crash */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_PAUSED_LAST -#endif -} virDomainPausedReason; - -typedef enum { - VIR_DOMAIN_SHUTDOWN_UNKNOWN = 0, /* the reason is unknown */ - VIR_DOMAIN_SHUTDOWN_USER = 1, /* shutting down on user request */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_SHUTDOWN_LAST -#endif -} virDomainShutdownReason; - -typedef enum { - VIR_DOMAIN_SHUTOFF_UNKNOWN = 0, /* the reason is unknown */ - VIR_DOMAIN_SHUTOFF_SHUTDOWN = 1, /* normal shutdown */ - VIR_DOMAIN_SHUTOFF_DESTROYED = 2, /* forced poweroff */ - VIR_DOMAIN_SHUTOFF_CRASHED = 3, /* domain crashed */ - VIR_DOMAIN_SHUTOFF_MIGRATED = 4, /* migrated to another host */ - VIR_DOMAIN_SHUTOFF_SAVED = 5, /* saved to a file */ - VIR_DOMAIN_SHUTOFF_FAILED = 6, /* domain failed to start */ - VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT = 7, /* restored from a snapshot which was - * taken while domain was shutoff */ -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_SHUTOFF_LAST -#endif -} virDomainShutoffReason; - -typedef enum { - VIR_DOMAIN_CRASHED_UNKNOWN = 0, /* crashed for unknown reason */ - VIR_DOMAIN_CRASHED_PANICKED = 1, /* domain panicked */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_CRASHED_LAST -#endif -} virDomainCrashedReason; - -typedef enum { - VIR_DOMAIN_PMSUSPENDED_UNKNOWN = 0, - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_PMSUSPENDED_LAST -#endif -} virDomainPMSuspendedReason; - -typedef enum { - VIR_DOMAIN_PMSUSPENDED_DISK_UNKNOWN = 0, - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_PMSUSPENDED_DISK_LAST -#endif -} virDomainPMSuspendedDiskReason; - -/** - * virDomainControlState: - * - * Current state of a control interface to the domain. - */ -typedef enum { - VIR_DOMAIN_CONTROL_OK = 0, /* operational, ready to accept commands */ - VIR_DOMAIN_CONTROL_JOB = 1, /* background job is running (can be - monitored by virDomainGetJobInfo); only - limited set of commands may be allowed */ - VIR_DOMAIN_CONTROL_OCCUPIED = 2, /* occupied by a running command */ - VIR_DOMAIN_CONTROL_ERROR = 3, /* unusable, domain cannot be fully operated */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_CONTROL_LAST -#endif -} virDomainControlState; - -/** - * virDomainControlInfo: - * - * Structure filled in by virDomainGetControlInfo and providing details about - * current state of control interface to a domain. - */ -typedef struct _virDomainControlInfo virDomainControlInfo; -struct _virDomainControlInfo { - unsigned int state; /* control state, one of virDomainControlState */ - unsigned int details; /* state details, currently 0 */ - unsigned long long stateTime; /* for how long (in msec) control interface - has been in current state (except for OK - and ERROR states) */ -}; - -/** - * virDomainControlInfoPtr: - * - * Pointer to virDomainControlInfo structure. - */ -typedef virDomainControlInfo *virDomainControlInfoPtr; - -/** - * virDomainModificationImpact: - * - * Several modification APIs take flags to determine whether a change - * to the domain affects just the running instance, just the - * persistent definition, or both at the same time. The counterpart - * query APIs also take the same flags to determine whether to query - * the running instance or persistent definition, although both cannot - * be queried at once. - * - * The use of VIR_DOMAIN_AFFECT_CURRENT will resolve to either - * VIR_DOMAIN_AFFECT_LIVE or VIR_DOMAIN_AFFECT_CONFIG according to - * current domain state. VIR_DOMAIN_AFFECT_LIVE requires a running - * domain, and VIR_DOMAIN_AFFECT_CONFIG requires a persistent domain - * (whether or not it is running). - * - * These enums should not conflict with those of virTypedParameterFlags. - */ -typedef enum { - VIR_DOMAIN_AFFECT_CURRENT = 0, /* Affect current domain state. */ - VIR_DOMAIN_AFFECT_LIVE = 1 << 0, /* Affect running domain state. */ - VIR_DOMAIN_AFFECT_CONFIG = 1 << 1, /* Affect persistent domain state. */ - /* 1 << 2 is reserved for virTypedParameterFlags */ -} virDomainModificationImpact; - -/** - * virDomainInfoPtr: - * - * a virDomainInfo is a structure filled by virDomainGetInfo() and extracting - * runtime information for a given active Domain - */ - -typedef struct _virDomainInfo virDomainInfo; - -struct _virDomainInfo { - unsigned char state; /* the running state, one of virDomainState */ - unsigned long maxMem; /* the maximum memory in KBytes allowed */ - unsigned long memory; /* the memory in KBytes used by the domain */ - unsigned short nrVirtCpu; /* the number of virtual CPUs for the domain */ - unsigned long long cpuTime; /* the CPU time used in nanoseconds */ -}; - -/** - * virDomainInfoPtr: - * - * a virDomainInfoPtr is a pointer to a virDomainInfo structure. - */ - -typedef virDomainInfo *virDomainInfoPtr; - -/** - * virDomainCreateFlags: - * - * Flags OR'ed together to provide specific behaviour when creating a - * Domain. - */ -typedef enum { - VIR_DOMAIN_NONE = 0, /* Default behavior */ - VIR_DOMAIN_START_PAUSED = 1 << 0, /* Launch guest in paused state */ - VIR_DOMAIN_START_AUTODESTROY = 1 << 1, /* Automatically kill guest when virConnectPtr is closed */ - VIR_DOMAIN_START_BYPASS_CACHE = 1 << 2, /* Avoid file system cache pollution */ - VIR_DOMAIN_START_FORCE_BOOT = 1 << 3, /* Boot, discarding any managed save */ -} virDomainCreateFlags; - - -/** * virNodeSuspendTarget: * * Flags to indicate which system-wide sleep state the host must be @@ -867,657 +620,160 @@ int virNodeGetCPUMap(virConnectPtr conn, unsigned int flags); -/* Management of scheduler parameters */ - /** - * VIR_DOMAIN_SCHEDULER_CPU_SHARES: + * VIR_NODEINFO_MAXCPUS: + * @nodeinfo: virNodeInfo instance * - * Macro represents proportional weight of the scheduler used on the - * host cpu, when using the posix scheduler, as a ullong. + * This macro is to calculate the total number of CPUs supported + * but not necessary active in the host. */ -#define VIR_DOMAIN_SCHEDULER_CPU_SHARES "cpu_shares" -/** - * VIR_DOMAIN_SCHEDULER_VCPU_PERIOD: - * - * Macro represents the enforcement period for a quota, in microseconds, - * for vcpus only, when using the posix scheduler, as a ullong. - */ -#define VIR_DOMAIN_SCHEDULER_VCPU_PERIOD "vcpu_period" -/** - * VIR_DOMAIN_SCHEDULER_VCPU_QUOTA: - * - * Macro represents the maximum bandwidth to be used within a period for - * vcpus only, when using the posix scheduler, as an llong. - */ -#define VIR_DOMAIN_SCHEDULER_VCPU_QUOTA "vcpu_quota" +#define VIR_NODEINFO_MAXCPUS(nodeinfo) ((nodeinfo).nodes*(nodeinfo).sockets*(nodeinfo).cores*(nodeinfo).threads) /** - * VIR_DOMAIN_SCHEDULER_EMULATOR_PERIOD: + * virNodeInfoPtr: * - * Macro represents the enforcement period for a quota in microseconds, - * when using the posix scheduler, for all emulator activity not tied to - * vcpus, as a ullong. + * a virNodeInfoPtr is a pointer to a virNodeInfo structure. */ -#define VIR_DOMAIN_SCHEDULER_EMULATOR_PERIOD "emulator_period" -/** - * VIR_DOMAIN_SCHEDULER_EMULATOR_QUOTA: - * - * Macro represents the maximum bandwidth to be used within a period for - * all emulator activity not tied to vcpus, when using the posix scheduler, - * as an llong. - */ -#define VIR_DOMAIN_SCHEDULER_EMULATOR_QUOTA "emulator_quota" +typedef virNodeInfo *virNodeInfoPtr; /** - * VIR_DOMAIN_SCHEDULER_WEIGHT: + * virNodeCPUStatsPtr: * - * Macro represents the relative weight, when using the credit - * scheduler, as a uint. + * a virNodeCPUStatsPtr is a pointer to a virNodeCPUStats structure. */ -#define VIR_DOMAIN_SCHEDULER_WEIGHT "weight" -/** - * VIR_DOMAIN_SCHEDULER_CAP: - * - * Macro represents the maximum scheduler cap, when using the credit - * scheduler, as a uint. - */ -#define VIR_DOMAIN_SCHEDULER_CAP "cap" +typedef virNodeCPUStats *virNodeCPUStatsPtr; /** - * VIR_DOMAIN_SCHEDULER_RESERVATION: + * virNodeMemoryStatsPtr: * - * Macro represents the scheduler reservation value, when using the - * allocation scheduler, as an llong. + * a virNodeMemoryStatsPtr is a pointer to a virNodeMemoryStats structure. */ -#define VIR_DOMAIN_SCHEDULER_RESERVATION "reservation" -/** - * VIR_DOMAIN_SCHEDULER_LIMIT: - * - * Macro represents the scheduler limit value, when using the - * allocation scheduler, as an llong. - */ -#define VIR_DOMAIN_SCHEDULER_LIMIT "limit" +typedef virNodeMemoryStats *virNodeMemoryStatsPtr; /** - * VIR_DOMAIN_SCHEDULER_SHARES: + * virConnectFlags * - * Macro represents the scheduler shares value, when using the - * allocation scheduler, as an int. + * Flags when opening a connection to a hypervisor */ -#define VIR_DOMAIN_SCHEDULER_SHARES "shares" +typedef enum { + VIR_CONNECT_RO = (1 << 0), /* A readonly connection */ + VIR_CONNECT_NO_ALIASES = (1 << 1), /* Don't try to resolve URI aliases */ +} virConnectFlags; -/* - * Fetch scheduler parameters, caller allocates 'params' field of size 'nparams' - */ -int virDomainGetSchedulerParameters (virDomainPtr domain, - virTypedParameterPtr params, - int *nparams); -int virDomainGetSchedulerParametersFlags (virDomainPtr domain, - virTypedParameterPtr params, - int *nparams, - unsigned int flags); -/* - * Change scheduler parameters - */ -int virDomainSetSchedulerParameters (virDomainPtr domain, - virTypedParameterPtr params, - int nparams); -int virDomainSetSchedulerParametersFlags (virDomainPtr domain, - virTypedParameterPtr params, - int nparams, - unsigned int flags); +typedef enum { + VIR_CRED_USERNAME = 1, /* Identity to act as */ + VIR_CRED_AUTHNAME = 2, /* Identify to authorize as */ + VIR_CRED_LANGUAGE = 3, /* RFC 1766 languages, comma separated */ + VIR_CRED_CNONCE = 4, /* client supplies a nonce */ + VIR_CRED_PASSPHRASE = 5, /* Passphrase secret */ + VIR_CRED_ECHOPROMPT = 6, /* Challenge response */ + VIR_CRED_NOECHOPROMPT = 7, /* Challenge response */ + VIR_CRED_REALM = 8, /* Authentication realm */ + VIR_CRED_EXTERNAL = 9, /* Externally managed credential */ -/** - * virDomainBlockStats: - * - * Block device stats for virDomainBlockStats. - * - * Hypervisors may return a field set to ((long long)-1) which indicates - * that the hypervisor does not support that statistic. - * - * NB. Here 'long long' means 64 bit integer. - */ -typedef struct _virDomainBlockStats virDomainBlockStatsStruct; - -struct _virDomainBlockStats { - long long rd_req; /* number of read requests */ - long long rd_bytes; /* number of read bytes */ - long long wr_req; /* number of write requests */ - long long wr_bytes; /* number of written bytes */ - long long errs; /* In Xen this returns the mysterious 'oo_req'. */ +#ifdef VIR_ENUM_SENTINELS + VIR_CRED_LAST /* More may be added - expect the unexpected */ +#endif +} virConnectCredentialType; + +struct _virConnectCredential { + int type; /* One of virConnectCredentialType constants */ + const char *prompt; /* Prompt to show to user */ + const char *challenge; /* Additional challenge to show */ + const char *defresult; /* Optional default result */ + char *result; /* Result to be filled with user response (or defresult) */ + unsigned int resultlen; /* Length of the result */ }; -/** - * virDomainBlockStatsPtr: - * - * A pointer to a virDomainBlockStats structure - */ -typedef virDomainBlockStatsStruct *virDomainBlockStatsPtr; +typedef struct _virConnectCredential virConnectCredential; +typedef virConnectCredential *virConnectCredentialPtr; /** - * VIR_DOMAIN_BLOCK_STATS_FIELD_LENGTH: + * virConnectAuthCallbackPtr: + * @cred: list of virConnectCredential object to fetch from user + * @ncred: size of cred list + * @cbdata: opaque data passed to virConnectOpenAuth * - * Macro providing the field length of parameter names when using - * virDomainBlockStatsFlags(). - */ -#define VIR_DOMAIN_BLOCK_STATS_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH - -/** - * VIR_DOMAIN_BLOCK_STATS_READ_BYTES: + * When authentication requires one or more interactions, this callback + * is invoked. For each interaction supplied, data must be gathered + * from the user and filled in to the 'result' and 'resultlen' fields. + * If an interaction cannot be filled, fill in NULL and 0. * - * Macro represents the total number of read bytes of the - * block device, as an llong. + * Returns 0 if all interactions were filled, or -1 upon error */ -#define VIR_DOMAIN_BLOCK_STATS_READ_BYTES "rd_bytes" +typedef int (*virConnectAuthCallbackPtr)(virConnectCredentialPtr cred, + unsigned int ncred, + void *cbdata); -/** - * VIR_DOMAIN_BLOCK_STATS_READ_REQ: - * - * Macro represents the total read requests of the - * block device, as an llong. - */ -#define VIR_DOMAIN_BLOCK_STATS_READ_REQ "rd_operations" +struct _virConnectAuth { + int *credtype; /* List of supported virConnectCredentialType values */ + unsigned int ncredtype; -/** - * VIR_DOMAIN_BLOCK_STATS_READ_TOTAL_TIMES: - * - * Macro represents the total time spend on cache reads in - * nano-seconds of the block device, as an llong. - */ -#define VIR_DOMAIN_BLOCK_STATS_READ_TOTAL_TIMES "rd_total_times" + virConnectAuthCallbackPtr cb; /* Callback used to collect credentials */ + void *cbdata; +}; -/** - * VIR_DOMAIN_BLOCK_STATS_WRITE_BYTES: - * - * Macro represents the total number of write bytes of the - * block device, as an llong. - */ -#define VIR_DOMAIN_BLOCK_STATS_WRITE_BYTES "wr_bytes" -/** - * VIR_DOMAIN_BLOCK_STATS_WRITE_REQ: - * - * Macro represents the total write requests of the - * block device, as an llong. - */ -#define VIR_DOMAIN_BLOCK_STATS_WRITE_REQ "wr_operations" +typedef struct _virConnectAuth virConnectAuth; +typedef virConnectAuth *virConnectAuthPtr; -/** - * VIR_DOMAIN_BLOCK_STATS_WRITE_TOTAL_TIMES: - * - * Macro represents the total time spend on cache writes in - * nano-seconds of the block device, as an llong. - */ -#define VIR_DOMAIN_BLOCK_STATS_WRITE_TOTAL_TIMES "wr_total_times" +VIR_EXPORT_VAR virConnectAuthPtr virConnectAuthPtrDefault; /** - * VIR_DOMAIN_BLOCK_STATS_FLUSH_REQ: + * VIR_UUID_BUFLEN: * - * Macro represents the total flush requests of the - * block device, as an llong. + * This macro provides the length of the buffer required + * for virDomainGetUUID() */ -#define VIR_DOMAIN_BLOCK_STATS_FLUSH_REQ "flush_operations" -/** - * VIR_DOMAIN_BLOCK_STATS_FLUSH_TOTAL_TIMES: - * - * Macro represents the total time spend on cache flushing in - * nano-seconds of the block device, as an llong. - */ -#define VIR_DOMAIN_BLOCK_STATS_FLUSH_TOTAL_TIMES "flush_total_times" +#define VIR_UUID_BUFLEN (16) /** - * VIR_DOMAIN_BLOCK_STATS_ERRS: + * VIR_UUID_STRING_BUFLEN: * - * In Xen this returns the mysterious 'oo_req', as an llong. + * This macro provides the length of the buffer required + * for virDomainGetUUIDString() */ -#define VIR_DOMAIN_BLOCK_STATS_ERRS "errs" + +#define VIR_UUID_STRING_BUFLEN (36+1) + +/* library versioning */ /** - * virDomainInterfaceStats: - * - * Network interface stats for virDomainInterfaceStats. - * - * Hypervisors may return a field set to ((long long)-1) which indicates - * that the hypervisor does not support that statistic. + * LIBVIR_VERSION_NUMBER: * - * NB. Here 'long long' means 64 bit integer. + * Macro providing the version of the library as + * version * 1,000,000 + minor * 1000 + micro */ -typedef struct _virDomainInterfaceStats virDomainInterfaceStatsStruct; - -struct _virDomainInterfaceStats { - long long rx_bytes; - long long rx_packets; - long long rx_errs; - long long rx_drop; - long long tx_bytes; - long long tx_packets; - long long tx_errs; - long long tx_drop; -}; + +#define LIBVIR_VERSION_NUMBER @LIBVIRT_VERSION_NUMBER@ /** - * virDomainInterfaceStatsPtr: + * LIBVIR_CHECK_VERSION: + * @major: major component of the version number + * @minor: minor component of the version number + * @micro: micro component of the version number * - * A pointer to a virDomainInterfaceStats structure + * Macro for developers to easily check what version of the library + * their code is compiling against. + * e.g. + * #if LIBVIR_CHECK_VERSION(1,1,3) + * // some code that only works in 1.1.3 and newer + * #endif */ -typedef virDomainInterfaceStatsStruct *virDomainInterfaceStatsPtr; +#define LIBVIR_CHECK_VERSION(major, minor, micro) \ + ((major) * 1000000 + (minor) * 1000 + (micro) <= LIBVIR_VERSION_NUMBER) -/** - * Memory Statistics Tags: - */ -typedef enum { - /* The total amount of data read from swap space (in kB). */ - VIR_DOMAIN_MEMORY_STAT_SWAP_IN = 0, - /* The total amount of memory written out to swap space (in kB). */ - VIR_DOMAIN_MEMORY_STAT_SWAP_OUT = 1, - - /* - * Page faults occur when a process makes a valid access to virtual memory - * that is not available. When servicing the page fault, if disk IO is - * required, it is considered a major fault. If not, it is a minor fault. - * These are expressed as the number of faults that have occurred. - */ - VIR_DOMAIN_MEMORY_STAT_MAJOR_FAULT = 2, - VIR_DOMAIN_MEMORY_STAT_MINOR_FAULT = 3, - - /* - * The amount of memory left completely unused by the system. Memory that - * is available but used for reclaimable caches should NOT be reported as - * free. This value is expressed in kB. - */ - VIR_DOMAIN_MEMORY_STAT_UNUSED = 4, - - /* - * The total amount of usable memory as seen by the domain. This value - * may be less than the amount of memory assigned to the domain if a - * balloon driver is in use or if the guest OS does not initialize all - * assigned pages. This value is expressed in kB. - */ - VIR_DOMAIN_MEMORY_STAT_AVAILABLE = 5, - - /* Current balloon value (in KB). */ - VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON = 6, - - /* Resident Set Size of the process running the domain. This value - * is in kB */ - VIR_DOMAIN_MEMORY_STAT_RSS = 7, - - /* - * The number of statistics supported by this version of the interface. - * To add new statistics, add them to the enum and increase this value. - */ - VIR_DOMAIN_MEMORY_STAT_NR = 8, - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_MEMORY_STAT_LAST = VIR_DOMAIN_MEMORY_STAT_NR -#endif -} virDomainMemoryStatTags; - -typedef struct _virDomainMemoryStat virDomainMemoryStatStruct; - -struct _virDomainMemoryStat { - int tag; - unsigned long long val; -}; - -typedef virDomainMemoryStatStruct *virDomainMemoryStatPtr; - - -/* Domain core dump flags. */ -typedef enum { - VIR_DUMP_CRASH = (1 << 0), /* crash after dump */ - VIR_DUMP_LIVE = (1 << 1), /* live dump */ - VIR_DUMP_BYPASS_CACHE = (1 << 2), /* avoid file system cache pollution */ - VIR_DUMP_RESET = (1 << 3), /* reset domain after dump finishes */ - VIR_DUMP_MEMORY_ONLY = (1 << 4), /* use dump-guest-memory */ -} virDomainCoreDumpFlags; - -/** - * virDomainCoreDumpFormat: - * - * Values for specifying different formats of domain core dumps. - */ -typedef enum { - VIR_DOMAIN_CORE_DUMP_FORMAT_RAW, /* dump guest memory in raw format */ - VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_ZLIB, /* kdump-compressed format, with - * zlib compression */ - VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_LZO, /* kdump-compressed format, with - * lzo compression */ - VIR_DOMAIN_CORE_DUMP_FORMAT_KDUMP_SNAPPY, /* kdump-compressed format, with - * snappy compression */ -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_CORE_DUMP_FORMAT_LAST - /* - * NB: this enum value will increase over time as new events are - * added to the libvirt API. It reflects the last state supported - * by this version of the libvirt API. - */ -#endif -} virDomainCoreDumpFormat; - -/* Domain migration flags. */ -typedef enum { - VIR_MIGRATE_LIVE = (1 << 0), /* live migration */ - VIR_MIGRATE_PEER2PEER = (1 << 1), /* direct source -> dest host control channel */ - /* Note the less-common spelling that we're stuck with: - VIR_MIGRATE_TUNNELLED should be VIR_MIGRATE_TUNNELED */ - VIR_MIGRATE_TUNNELLED = (1 << 2), /* tunnel migration data over libvirtd connection */ - VIR_MIGRATE_PERSIST_DEST = (1 << 3), /* persist the VM on the destination */ - VIR_MIGRATE_UNDEFINE_SOURCE = (1 << 4), /* undefine the VM on the source */ - VIR_MIGRATE_PAUSED = (1 << 5), /* pause on remote side */ - VIR_MIGRATE_NON_SHARED_DISK = (1 << 6), /* migration with non-shared storage with full disk copy */ - VIR_MIGRATE_NON_SHARED_INC = (1 << 7), /* migration with non-shared storage with incremental copy */ - /* (same base image shared between source and destination) */ - VIR_MIGRATE_CHANGE_PROTECTION = (1 << 8), /* protect for changing domain configuration through the - * whole migration process; this will be used automatically - * when supported */ - VIR_MIGRATE_UNSAFE = (1 << 9), /* force migration even if it is considered unsafe */ - VIR_MIGRATE_OFFLINE = (1 << 10), /* offline migrate */ - VIR_MIGRATE_COMPRESSED = (1 << 11), /* compress data during migration */ - VIR_MIGRATE_ABORT_ON_ERROR = (1 << 12), /* abort migration on I/O errors happened during migration */ - VIR_MIGRATE_AUTO_CONVERGE = (1 << 13), /* force convergence */ - VIR_MIGRATE_RDMA_PIN_ALL = (1 << 14), /* RDMA memory pinning */ -} virDomainMigrateFlags; - - -/** - * VIR_MIGRATE_PARAM_URI: - * - * virDomainMigrate* params field: URI to use for initiating domain migration - * as VIR_TYPED_PARAM_STRING. It takes a hypervisor specific format. The - * uri_transports element of the hypervisor capabilities XML includes details - * of the supported URI schemes. When omitted libvirt will auto-generate - * suitable default URI. It is typically only necessary to specify this URI if - * the destination host has multiple interfaces and a specific interface is - * required to transmit migration data. - * - * This filed may not be used when VIR_MIGRATE_TUNNELLED flag is set. - */ -#define VIR_MIGRATE_PARAM_URI "migrate_uri" - -/** - * VIR_MIGRATE_PARAM_DEST_NAME: - * - * virDomainMigrate* params field: the name to be used for the domain on the - * destination host as VIR_TYPED_PARAM_STRING. Omitting this parameter keeps - * the domain name the same. This field is only allowed to be used with - * hypervisors that support domain renaming during migration. - */ -#define VIR_MIGRATE_PARAM_DEST_NAME "destination_name" - -/** - * VIR_MIGRATE_PARAM_DEST_XML: - * - * virDomainMigrate* params field: the new configuration to be used for the - * domain on the destination host as VIR_TYPED_PARAM_STRING. The configuration - * must include an identical set of virtual devices, to ensure a stable guest - * ABI across migration. Only parameters related to host side configuration - * can be changed in the XML. Hypervisors which support this field will forbid - * migration if the provided XML would cause a change in the guest ABI. This - * field cannot be used to rename the domain during migration (use - * VIR_MIGRATE_PARAM_DEST_NAME field for that purpose). Domain name in the - * destination XML must match the original domain name. - * - * Omitting this parameter keeps the original domain configuration. Using this - * field with hypervisors that do not support changing domain configuration - * during migration will result in a failure. - */ -#define VIR_MIGRATE_PARAM_DEST_XML "destination_xml" - -/** - * VIR_MIGRATE_PARAM_BANDWIDTH: - * - * virDomainMigrate* params field: the maximum bandwidth (in MiB/s) that will - * be used for migration as VIR_TYPED_PARAM_ULLONG. If set to 0 or omitted, - * libvirt will choose a suitable default. Some hypervisors do not support this - * feature and will return an error if this field is used and is not 0. - */ -#define VIR_MIGRATE_PARAM_BANDWIDTH "bandwidth" - -/** - * VIR_MIGRATE_PARAM_GRAPHICS_URI: - * - * virDomainMigrate* params field: URI to use for migrating client's connection - * to domain's graphical console as VIR_TYPED_PARAM_STRING. If specified, the - * client will be asked to automatically reconnect using these parameters - * instead of the automatically computed ones. This can be useful if, e.g., the - * client does not have a direct access to the network virtualization hosts are - * connected to and needs to connect through a proxy. The URI is formed as - * follows: - * - * protocol://hostname[:port]/[?parameters] - * - * where protocol is either "spice" or "vnc" and parameters is a list of - * protocol specific parameters separated by '&'. Currently recognized - * parameters are "tlsPort" and "tlsSubject". For example, - * - * spice://target.host.com:1234/?tlsPort=4567 - */ -#define VIR_MIGRATE_PARAM_GRAPHICS_URI "graphics_uri" - -/** - * VIR_MIGRATE_PARAM_LISTEN_ADDRESS: - * - * virDomainMigrate* params field: The listen address that hypervisor on the - * destination side should bind to for incoming migration. Both IPv4 and IPv6 - * addresses are accepted as well as hostnames (the resolving is done on - * destination). Some hypervisors do not support this feature and will return - * an error if this field is used. - */ -#define VIR_MIGRATE_PARAM_LISTEN_ADDRESS "listen_address" - -/* Domain migration. */ -virDomainPtr virDomainMigrate (virDomainPtr domain, virConnectPtr dconn, - unsigned long flags, const char *dname, - const char *uri, unsigned long bandwidth); -virDomainPtr virDomainMigrate2(virDomainPtr domain, virConnectPtr dconn, - const char *dxml, - unsigned long flags, const char *dname, - const char *uri, unsigned long bandwidth); -virDomainPtr virDomainMigrate3(virDomainPtr domain, - virConnectPtr dconn, - virTypedParameterPtr params, - unsigned int nparams, - unsigned int flags); - -int virDomainMigrateToURI (virDomainPtr domain, const char *duri, - unsigned long flags, const char *dname, - unsigned long bandwidth); - -int virDomainMigrateToURI2(virDomainPtr domain, - const char *dconnuri, - const char *miguri, - const char *dxml, - unsigned long flags, - const char *dname, - unsigned long bandwidth); -int virDomainMigrateToURI3(virDomainPtr domain, - const char *dconnuri, - virTypedParameterPtr params, - unsigned int nparams, - unsigned int flags); - -int virDomainMigrateSetMaxDowntime (virDomainPtr domain, - unsigned long long downtime, - unsigned int flags); - -int virDomainMigrateGetCompressionCache(virDomainPtr domain, - unsigned long long *cacheSize, - unsigned int flags); -int virDomainMigrateSetCompressionCache(virDomainPtr domain, - unsigned long long cacheSize, - unsigned int flags); - -int virDomainMigrateSetMaxSpeed(virDomainPtr domain, - unsigned long bandwidth, - unsigned int flags); - -int virDomainMigrateGetMaxSpeed(virDomainPtr domain, - unsigned long *bandwidth, - unsigned int flags); - -/** - * VIR_NODEINFO_MAXCPUS: - * @nodeinfo: virNodeInfo instance - * - * This macro is to calculate the total number of CPUs supported - * but not necessary active in the host. - */ - - -#define VIR_NODEINFO_MAXCPUS(nodeinfo) ((nodeinfo).nodes*(nodeinfo).sockets*(nodeinfo).cores*(nodeinfo).threads) - -/** - * virNodeInfoPtr: - * - * a virNodeInfoPtr is a pointer to a virNodeInfo structure. - */ - -typedef virNodeInfo *virNodeInfoPtr; - -/** - * virNodeCPUStatsPtr: - * - * a virNodeCPUStatsPtr is a pointer to a virNodeCPUStats structure. - */ - -typedef virNodeCPUStats *virNodeCPUStatsPtr; - -/** - * virNodeMemoryStatsPtr: - * - * a virNodeMemoryStatsPtr is a pointer to a virNodeMemoryStats structure. - */ - -typedef virNodeMemoryStats *virNodeMemoryStatsPtr; - -/** - * virConnectFlags - * - * Flags when opening a connection to a hypervisor - */ -typedef enum { - VIR_CONNECT_RO = (1 << 0), /* A readonly connection */ - VIR_CONNECT_NO_ALIASES = (1 << 1), /* Don't try to resolve URI aliases */ -} virConnectFlags; - - -typedef enum { - VIR_CRED_USERNAME = 1, /* Identity to act as */ - VIR_CRED_AUTHNAME = 2, /* Identify to authorize as */ - VIR_CRED_LANGUAGE = 3, /* RFC 1766 languages, comma separated */ - VIR_CRED_CNONCE = 4, /* client supplies a nonce */ - VIR_CRED_PASSPHRASE = 5, /* Passphrase secret */ - VIR_CRED_ECHOPROMPT = 6, /* Challenge response */ - VIR_CRED_NOECHOPROMPT = 7, /* Challenge response */ - VIR_CRED_REALM = 8, /* Authentication realm */ - VIR_CRED_EXTERNAL = 9, /* Externally managed credential */ - -#ifdef VIR_ENUM_SENTINELS - VIR_CRED_LAST /* More may be added - expect the unexpected */ -#endif -} virConnectCredentialType; - -struct _virConnectCredential { - int type; /* One of virConnectCredentialType constants */ - const char *prompt; /* Prompt to show to user */ - const char *challenge; /* Additional challenge to show */ - const char *defresult; /* Optional default result */ - char *result; /* Result to be filled with user response (or defresult) */ - unsigned int resultlen; /* Length of the result */ -}; - -typedef struct _virConnectCredential virConnectCredential; -typedef virConnectCredential *virConnectCredentialPtr; - - -/** - * virConnectAuthCallbackPtr: - * @cred: list of virConnectCredential object to fetch from user - * @ncred: size of cred list - * @cbdata: opaque data passed to virConnectOpenAuth - * - * When authentication requires one or more interactions, this callback - * is invoked. For each interaction supplied, data must be gathered - * from the user and filled in to the 'result' and 'resultlen' fields. - * If an interaction cannot be filled, fill in NULL and 0. - * - * Returns 0 if all interactions were filled, or -1 upon error - */ -typedef int (*virConnectAuthCallbackPtr)(virConnectCredentialPtr cred, - unsigned int ncred, - void *cbdata); - -struct _virConnectAuth { - int *credtype; /* List of supported virConnectCredentialType values */ - unsigned int ncredtype; - - virConnectAuthCallbackPtr cb; /* Callback used to collect credentials */ - void *cbdata; -}; - - -typedef struct _virConnectAuth virConnectAuth; -typedef virConnectAuth *virConnectAuthPtr; - -VIR_EXPORT_VAR virConnectAuthPtr virConnectAuthPtrDefault; - -/** - * VIR_UUID_BUFLEN: - * - * This macro provides the length of the buffer required - * for virDomainGetUUID() - */ - -#define VIR_UUID_BUFLEN (16) - -/** - * VIR_UUID_STRING_BUFLEN: - * - * This macro provides the length of the buffer required - * for virDomainGetUUIDString() - */ - -#define VIR_UUID_STRING_BUFLEN (36+1) - -/* library versioning */ - -/** - * LIBVIR_VERSION_NUMBER: - * - * Macro providing the version of the library as - * version * 1,000,000 + minor * 1000 + micro - */ - -#define LIBVIR_VERSION_NUMBER @LIBVIRT_VERSION_NUMBER@ - -/** - * LIBVIR_CHECK_VERSION: - * @major: major component of the version number - * @minor: minor component of the version number - * @micro: micro component of the version number - * - * Macro for developers to easily check what version of the library - * their code is compiling against. - * e.g. - * #if LIBVIR_CHECK_VERSION(1,1,3) - * // some code that only works in 1.1.3 and newer - * #endif - */ -#define LIBVIR_CHECK_VERSION(major, minor, micro) \ - ((major) * 1000000 + (minor) * 1000 + (micro) <= LIBVIR_VERSION_NUMBER) - -int virGetVersion (unsigned long *libVer, - const char *type, - unsigned long *typeVer); +int virGetVersion (unsigned long *libVer, + const char *type, + unsigned long *typeVer); /* * Connection and disconnections to the Hypervisor @@ -1586,13 +842,6 @@ int virNodeGetInfo (virConnectPtr conn, virNodeInfoPtr info); char * virConnectGetCapabilities (virConnectPtr conn); -char * virConnectGetDomainCapabilities(virConnectPtr conn, - const char *emulatorbin, - const char *arch, - const char *machine, - const char *virttype, - unsigned int flags); - int virNodeGetCPUStats (virConnectPtr conn, int cpuNum, virNodeCPUStatsPtr params, @@ -1616,2643 +865,62 @@ int virNodeSuspendForDuration (virConnectPtr conn, unsigned int flags); /* - * Gather list of running domains + * NUMA support */ -int virConnectListDomains (virConnectPtr conn, - int *ids, - int maxids); -/* - * Number of domains - */ -int virConnectNumOfDomains (virConnectPtr conn); +int virNodeGetCellsFreeMemory(virConnectPtr conn, + unsigned long long *freeMems, + int startCell, + int maxCells); -/* - * Get connection from domain. - */ -virConnectPtr virDomainGetConnect (virDomainPtr domain); +int virConnectIsEncrypted(virConnectPtr conn); +int virConnectIsSecure(virConnectPtr conn); +int virConnectIsAlive(virConnectPtr conn); /* - * Domain creation and destruction + * CPU specification API */ -virDomainPtr virDomainCreateXML (virConnectPtr conn, - const char *xmlDesc, - unsigned int flags); -virDomainPtr virDomainCreateXMLWithFiles(virConnectPtr conn, - const char *xmlDesc, - unsigned int nfiles, - int *files, - unsigned int flags); -virDomainPtr virDomainLookupByName (virConnectPtr conn, - const char *name); -virDomainPtr virDomainLookupByID (virConnectPtr conn, - int id); -virDomainPtr virDomainLookupByUUID (virConnectPtr conn, - const unsigned char *uuid); -virDomainPtr virDomainLookupByUUIDString (virConnectPtr conn, - const char *uuid); - typedef enum { - VIR_DOMAIN_SHUTDOWN_DEFAULT = 0, /* hypervisor choice */ - VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */ - VIR_DOMAIN_SHUTDOWN_GUEST_AGENT = (1 << 1), /* Use guest agent */ - VIR_DOMAIN_SHUTDOWN_INITCTL = (1 << 2), /* Use initctl */ - VIR_DOMAIN_SHUTDOWN_SIGNAL = (1 << 3), /* Send a signal */ - VIR_DOMAIN_SHUTDOWN_PARAVIRT = (1 << 4), /* Use paravirt guest control */ -} virDomainShutdownFlagValues; - -int virDomainShutdown (virDomainPtr domain); -int virDomainShutdownFlags (virDomainPtr domain, - unsigned int flags); + VIR_CPU_COMPARE_ERROR = -1, + VIR_CPU_COMPARE_INCOMPATIBLE = 0, + VIR_CPU_COMPARE_IDENTICAL = 1, + VIR_CPU_COMPARE_SUPERSET = 2, + +#ifdef VIR_ENUM_SENTINELS + VIR_CPU_COMPARE_LAST +#endif +} virCPUCompareResult; typedef enum { - VIR_DOMAIN_REBOOT_DEFAULT = 0, /* hypervisor choice */ - VIR_DOMAIN_REBOOT_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */ - VIR_DOMAIN_REBOOT_GUEST_AGENT = (1 << 1), /* Use guest agent */ - VIR_DOMAIN_REBOOT_INITCTL = (1 << 2), /* Use initctl */ - VIR_DOMAIN_REBOOT_SIGNAL = (1 << 3), /* Send a signal */ - VIR_DOMAIN_REBOOT_PARAVIRT = (1 << 4), /* Use paravirt guest control */ -} virDomainRebootFlagValues; - -int virDomainReboot (virDomainPtr domain, - unsigned int flags); -int virDomainReset (virDomainPtr domain, - unsigned int flags); + VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE = (1 << 0), /* treat incompatible + CPUs as failure */ +} virConnectCompareCPUFlags; + +int virConnectCompareCPU(virConnectPtr conn, + const char *xmlDesc, + unsigned int flags); -int virDomainDestroy (virDomainPtr domain); +int virConnectGetCPUModelNames(virConnectPtr conn, + const char *arch, + char ***models, + unsigned int flags); /** - * virDomainDestroyFlagsValues: + * virConnectBaselineCPUFlags * - * Flags used to provide specific behaviour to the - * virDomainDestroyFlags() function + * Flags when getting XML description of a computed CPU */ typedef enum { - VIR_DOMAIN_DESTROY_DEFAULT = 0, /* Default behavior - could lead to data loss!! */ - VIR_DOMAIN_DESTROY_GRACEFUL = 1 << 0, /* only SIGTERM, no SIGKILL */ -} virDomainDestroyFlagsValues; - -int virDomainDestroyFlags (virDomainPtr domain, - unsigned int flags); -int virDomainRef (virDomainPtr domain); -int virDomainFree (virDomainPtr domain); - -/* - * Domain suspend/resume - */ -int virDomainSuspend (virDomainPtr domain); -int virDomainResume (virDomainPtr domain); -int virDomainPMSuspendForDuration (virDomainPtr domain, - unsigned int target, - unsigned long long duration, - unsigned int flags); -int virDomainPMWakeup (virDomainPtr domain, - unsigned int flags); -/* - * Domain save/restore - */ - -/** - * virDomainSaveRestoreFlags: - * Flags for use in virDomainSaveFlags(), virDomainManagedSave(), - * virDomainRestoreFlags(), and virDomainSaveImageDefineXML(). Not all - * flags apply to all these functions. - */ -typedef enum { - VIR_DOMAIN_SAVE_BYPASS_CACHE = 1 << 0, /* Avoid file system cache pollution */ - VIR_DOMAIN_SAVE_RUNNING = 1 << 1, /* Favor running over paused */ - VIR_DOMAIN_SAVE_PAUSED = 1 << 2, /* Favor paused over running */ -} virDomainSaveRestoreFlags; - -int virDomainSave (virDomainPtr domain, - const char *to); -int virDomainSaveFlags (virDomainPtr domain, - const char *to, - const char *dxml, - unsigned int flags); -int virDomainRestore (virConnectPtr conn, - const char *from); -int virDomainRestoreFlags (virConnectPtr conn, - const char *from, - const char *dxml, - unsigned int flags); - -char * virDomainSaveImageGetXMLDesc (virConnectPtr conn, - const char *file, - unsigned int flags); -int virDomainSaveImageDefineXML (virConnectPtr conn, - const char *file, - const char *dxml, - unsigned int flags); - -/* - * Managed domain save - */ -int virDomainManagedSave (virDomainPtr dom, - unsigned int flags); -int virDomainHasManagedSaveImage(virDomainPtr dom, - unsigned int flags); -int virDomainManagedSaveRemove(virDomainPtr dom, - unsigned int flags); - -/* - * Domain core dump - */ -int virDomainCoreDump (virDomainPtr domain, - const char *to, - unsigned int flags); - -/* - * Domain core dump with format specified - */ -int virDomainCoreDumpWithFormat (virDomainPtr domain, - const char *to, - unsigned int dumpformat, - unsigned int flags); - -/* - * Screenshot of current domain console - */ -char * virDomainScreenshot (virDomainPtr domain, - virStreamPtr stream, - unsigned int screen, - unsigned int flags); - -/* - * Domain runtime information, and collecting CPU statistics - */ - -int virDomainGetInfo (virDomainPtr domain, - virDomainInfoPtr info); -int virDomainGetState (virDomainPtr domain, - int *state, - int *reason, - unsigned int flags); - -/** - * VIR_DOMAIN_CPU_STATS_CPUTIME: - * cpu usage (sum of both vcpu and hypervisor usage) in nanoseconds, - * as a ullong - */ -#define VIR_DOMAIN_CPU_STATS_CPUTIME "cpu_time" - -/** - * VIR_DOMAIN_CPU_STATS_USERTIME: - * cpu time charged to user instructions in nanoseconds, as a ullong - */ -#define VIR_DOMAIN_CPU_STATS_USERTIME "user_time" - -/** - * VIR_DOMAIN_CPU_STATS_SYSTEMTIME: - * cpu time charged to system instructions in nanoseconds, as a ullong - */ -#define VIR_DOMAIN_CPU_STATS_SYSTEMTIME "system_time" - -/** - * VIR_DOMAIN_CPU_STATS_VCPUTIME: - * vcpu usage in nanoseconds (cpu_time excluding hypervisor time), - * as a ullong - */ -#define VIR_DOMAIN_CPU_STATS_VCPUTIME "vcpu_time" - -int virDomainGetCPUStats(virDomainPtr domain, - virTypedParameterPtr params, - unsigned int nparams, - int start_cpu, - unsigned int ncpus, - unsigned int flags); - -int virDomainGetControlInfo (virDomainPtr domain, - virDomainControlInfoPtr info, - unsigned int flags); - -/* - * Return scheduler type in effect 'sedf', 'credit', 'linux' - */ -char * virDomainGetSchedulerType(virDomainPtr domain, - int *nparams); - - -/* Manage blkio parameters. */ - -/** - * VIR_DOMAIN_BLKIO_WEIGHT: - * - * Macro for the Blkio tunable weight: it represents the io weight - * the guest can use, as a uint. - */ - -#define VIR_DOMAIN_BLKIO_WEIGHT "weight" - -/** - * VIR_DOMAIN_BLKIO_DEVICE_WEIGHT: - * - * Macro for the blkio tunable weight_device: it represents the - * per-device weight, as a string. The string is parsed as a - * series of /path/to/device,weight elements, separated by ','. - */ - -#define VIR_DOMAIN_BLKIO_DEVICE_WEIGHT "device_weight" - -/** - * VIR_DOMAIN_BLKIO_DEVICE_READ_IOPS: - * - * Macro for the blkio tunable throttle.read_iops_device: it represents - * the number of reading the block device per second, as a string. The - * string is parsed as a series of /path/to/device, read_iops elements, - * separated by ','. - */ - -#define VIR_DOMAIN_BLKIO_DEVICE_READ_IOPS "device_read_iops_sec" - - -/** - * VIR_DOMAIN_BLKIO_DEVICE_WRITE_IOPS: - * - * Macro for the blkio tunable throttle.write_iops_device: it represents - * the number of writing the block device per second, as a string. The - * string is parsed as a series of /path/to/device, write_iops elements, - * separated by ','. - */ -#define VIR_DOMAIN_BLKIO_DEVICE_WRITE_IOPS "device_write_iops_sec" - - -/** - * VIR_DOMAIN_BLKIO_DEVICE_READ_BPS: - * - * Macro for the blkio tunable throttle.read_iops_device: it represents - * the bytes of reading the block device per second, as a string. The - * string is parsed as a series of /path/to/device, read_bps elements, - * separated by ','. - */ -#define VIR_DOMAIN_BLKIO_DEVICE_READ_BPS "device_read_bytes_sec" - - -/** - * VIR_DOMAIN_BLKIO_DEVICE_WRITE_BPS: - * - * Macro for the blkio tunable throttle.read_iops_device: it represents - * the number of reading the block device per second, as a string. The - * string is parsed as a series of /path/to/device, write_bps elements, - * separated by ','. - */ -#define VIR_DOMAIN_BLKIO_DEVICE_WRITE_BPS "device_write_bytes_sec" - - -/* Set Blkio tunables for the domain*/ -int virDomainSetBlkioParameters(virDomainPtr domain, - virTypedParameterPtr params, - int nparams, unsigned int flags); -int virDomainGetBlkioParameters(virDomainPtr domain, - virTypedParameterPtr params, - int *nparams, unsigned int flags); - -/* Manage memory parameters. */ - -/** - * VIR_DOMAIN_MEMORY_PARAM_UNLIMITED: - * - * Macro providing the virMemoryParameter value that indicates "unlimited" - */ - -#define VIR_DOMAIN_MEMORY_PARAM_UNLIMITED 9007199254740991LL /* = INT64_MAX >> 10 */ - -/** - * VIR_DOMAIN_MEMORY_HARD_LIMIT: - * - * Macro for the memory tunable hard_limit: it represents the maximum memory - * the guest can use, as a ullong. - */ - -#define VIR_DOMAIN_MEMORY_HARD_LIMIT "hard_limit" - -/** - * VIR_DOMAIN_MEMORY_SOFT_LIMIT: - * - * Macro for the memory tunable soft_limit: it represents the memory upper - * limit enforced during memory contention, as a ullong. - */ - -#define VIR_DOMAIN_MEMORY_SOFT_LIMIT "soft_limit" - -/** - * VIR_DOMAIN_MEMORY_MIN_GUARANTEE: - * - * Macro for the memory tunable min_guarantee: it represents the minimum - * memory guaranteed to be reserved for the guest, as a ullong. - */ - -#define VIR_DOMAIN_MEMORY_MIN_GUARANTEE "min_guarantee" - -/** - * VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT: - * - * Macro for the swap tunable swap_hard_limit: it represents the maximum swap - * plus memory the guest can use, as a ullong. This limit has to be more than - * VIR_DOMAIN_MEMORY_HARD_LIMIT. - */ - -#define VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT "swap_hard_limit" - -/* Set memory tunables for the domain*/ -int virDomainSetMemoryParameters(virDomainPtr domain, - virTypedParameterPtr params, - int nparams, unsigned int flags); -int virDomainGetMemoryParameters(virDomainPtr domain, - virTypedParameterPtr params, - int *nparams, unsigned int flags); - -/* Memory size modification flags. */ -typedef enum { - /* See virDomainModificationImpact for these flags. */ - VIR_DOMAIN_MEM_CURRENT = VIR_DOMAIN_AFFECT_CURRENT, - VIR_DOMAIN_MEM_LIVE = VIR_DOMAIN_AFFECT_LIVE, - VIR_DOMAIN_MEM_CONFIG = VIR_DOMAIN_AFFECT_CONFIG, - - /* Additionally, these flags may be bitwise-OR'd in. */ - VIR_DOMAIN_MEM_MAXIMUM = (1 << 2), /* affect Max rather than current */ -} virDomainMemoryModFlags; - - -/* Manage numa parameters */ - -/** - * virDomainNumatuneMemMode: - * Representation of the various modes in the <numatune> element of - * a domain. - */ -typedef enum { - VIR_DOMAIN_NUMATUNE_MEM_STRICT = 0, - VIR_DOMAIN_NUMATUNE_MEM_PREFERRED = 1, - VIR_DOMAIN_NUMATUNE_MEM_INTERLEAVE = 2, - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_NUMATUNE_MEM_LAST /* This constant is subject to change */ -#endif -} virDomainNumatuneMemMode; - -/** - * VIR_DOMAIN_NUMA_NODESET: - * - * Macro for typed parameter name that lists the numa nodeset of a - * domain, as a string. - */ -#define VIR_DOMAIN_NUMA_NODESET "numa_nodeset" - -/** - * VIR_DOMAIN_NUMA_MODE: - * - * Macro for typed parameter name that lists the numa mode of a domain, - * as an int containing a virDomainNumatuneMemMode value. - */ -#define VIR_DOMAIN_NUMA_MODE "numa_mode" - -int virDomainSetNumaParameters(virDomainPtr domain, - virTypedParameterPtr params, - int nparams, unsigned int flags); -int virDomainGetNumaParameters(virDomainPtr domain, - virTypedParameterPtr params, - int *nparams, unsigned int flags); - -/* - * Dynamic control of domains - */ -const char * virDomainGetName (virDomainPtr domain); -unsigned int virDomainGetID (virDomainPtr domain); -int virDomainGetUUID (virDomainPtr domain, - unsigned char *uuid); -int virDomainGetUUIDString (virDomainPtr domain, - char *buf); -char * virDomainGetOSType (virDomainPtr domain); -unsigned long virDomainGetMaxMemory (virDomainPtr domain); -int virDomainSetMaxMemory (virDomainPtr domain, - unsigned long memory); -int virDomainSetMemory (virDomainPtr domain, - unsigned long memory); -int virDomainSetMemoryFlags (virDomainPtr domain, - unsigned long memory, - unsigned int flags); -int virDomainSetMemoryStatsPeriod (virDomainPtr domain, - int period, - unsigned int flags); -int virDomainGetMaxVcpus (virDomainPtr domain); -int virDomainGetSecurityLabel (virDomainPtr domain, - virSecurityLabelPtr seclabel); -char * virDomainGetHostname (virDomainPtr domain, - unsigned int flags); -int virDomainGetSecurityLabelList (virDomainPtr domain, - virSecurityLabelPtr* seclabels); - -typedef enum { - VIR_DOMAIN_METADATA_DESCRIPTION = 0, /* Operate on <description> */ - VIR_DOMAIN_METADATA_TITLE = 1, /* Operate on <title> */ - VIR_DOMAIN_METADATA_ELEMENT = 2, /* Operate on <metadata> */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_METADATA_LAST -#endif -} virDomainMetadataType; - -int -virDomainSetMetadata(virDomainPtr domain, - int type, - const char *metadata, - const char *key, - const char *uri, - unsigned int flags); - -char * -virDomainGetMetadata(virDomainPtr domain, - int type, - const char *uri, - unsigned int flags); - -/* - * XML domain description - */ -/** - * virDomainXMLFlags: - * - * Flags available for virDomainGetXMLDesc - */ - -typedef enum { - VIR_DOMAIN_XML_SECURE = (1 << 0), /* dump security sensitive information too */ - VIR_DOMAIN_XML_INACTIVE = (1 << 1), /* dump inactive domain information */ - VIR_DOMAIN_XML_UPDATE_CPU = (1 << 2), /* update guest CPU requirements according to host CPU */ - VIR_DOMAIN_XML_MIGRATABLE = (1 << 3), /* dump XML suitable for migration */ -} virDomainXMLFlags; - -char * virDomainGetXMLDesc (virDomainPtr domain, - unsigned int flags); - - -char * virConnectDomainXMLFromNative(virConnectPtr conn, - const char *nativeFormat, - const char *nativeConfig, - unsigned int flags); -char * virConnectDomainXMLToNative(virConnectPtr conn, - const char *nativeFormat, - const char *domainXml, - unsigned int flags); - -int virDomainBlockStats (virDomainPtr dom, - const char *disk, - virDomainBlockStatsPtr stats, - size_t size); -int virDomainBlockStatsFlags (virDomainPtr dom, - const char *disk, - virTypedParameterPtr params, - int *nparams, - unsigned int flags); -int virDomainInterfaceStats (virDomainPtr dom, - const char *path, - virDomainInterfaceStatsPtr stats, - size_t size); - -/* Management of interface parameters */ - -/** - * VIR_DOMAIN_BANDWIDTH_IN_AVERAGE: - * - * Macro represents the inbound average of NIC bandwidth, as a uint. - */ -#define VIR_DOMAIN_BANDWIDTH_IN_AVERAGE "inbound.average" - -/** - * VIR_DOMAIN_BANDWIDTH_IN_PEAK: - * - * Macro represents the inbound peak of NIC bandwidth, as a uint. - */ -#define VIR_DOMAIN_BANDWIDTH_IN_PEAK "inbound.peak" - -/** - * VIR_DOMAIN_BANDWIDTH_IN_BURST: - * - * Macro represents the inbound burst of NIC bandwidth, as a uint. - */ -#define VIR_DOMAIN_BANDWIDTH_IN_BURST "inbound.burst" - -/** - * VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE: - * - * Macro represents the outbound average of NIC bandwidth, as a uint. - */ -#define VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE "outbound.average" - -/** - * VIR_DOMAIN_BANDWIDTH_OUT_PEAK: - * - * Macro represents the outbound peak of NIC bandwidth, as a uint. - */ -#define VIR_DOMAIN_BANDWIDTH_OUT_PEAK "outbound.peak" - -/** - * VIR_DOMAIN_BANDWIDTH_OUT_BURST: - * - * Macro represents the outbound burst of NIC bandwidth, as a uint. - */ -#define VIR_DOMAIN_BANDWIDTH_OUT_BURST "outbound.burst" - -int virDomainSetInterfaceParameters (virDomainPtr dom, - const char *device, - virTypedParameterPtr params, - int nparams, unsigned int flags); -int virDomainGetInterfaceParameters (virDomainPtr dom, - const char *device, - virTypedParameterPtr params, - int *nparams, unsigned int flags); - -/* Management of domain block devices */ - -int virDomainBlockPeek (virDomainPtr dom, - const char *disk, - unsigned long long offset, - size_t size, - void *buffer, - unsigned int flags); - -/** - * virDomainBlockResizeFlags: - * - * Flags available for virDomainBlockResize(). - */ -typedef enum { - VIR_DOMAIN_BLOCK_RESIZE_BYTES = 1 << 0, /* size in bytes instead of KiB */ -} virDomainBlockResizeFlags; - -int virDomainBlockResize (virDomainPtr dom, - const char *disk, - unsigned long long size, - unsigned int flags); - -/** virDomainBlockInfo: - * - * This struct provides information about the size of a block device - * backing store - * - * Examples: - * - * - Fully allocated raw file in filesystem: - * * capacity, allocation, physical: All the same - * - * - Sparse raw file in filesystem: - * * capacity: logical size of the file - * * allocation, physical: number of blocks allocated to file - * - * - qcow2 file in filesystem - * * capacity: logical size from qcow2 header - * * allocation, physical: logical size of the file / - * highest qcow extent (identical) - * - * - qcow2 file in a block device - * * capacity: logical size from qcow2 header - * * allocation: highest qcow extent written for an active domain - * * physical: size of the block device container - */ -typedef struct _virDomainBlockInfo virDomainBlockInfo; -typedef virDomainBlockInfo *virDomainBlockInfoPtr; -struct _virDomainBlockInfo { - unsigned long long capacity; /* logical size in bytes of the block device backing image */ - unsigned long long allocation; /* highest allocated extent in bytes of the block device backing image */ - unsigned long long physical; /* physical size in bytes of the container of the backing image */ -}; - -int virDomainGetBlockInfo(virDomainPtr dom, - const char *disk, - virDomainBlockInfoPtr info, - unsigned int flags); - -/* Management of domain memory */ - -int virDomainMemoryStats (virDomainPtr dom, - virDomainMemoryStatPtr stats, - unsigned int nr_stats, - unsigned int flags); - -/* Memory peeking flags. */ - -typedef enum { - VIR_MEMORY_VIRTUAL = 1 << 0, /* addresses are virtual addresses */ - VIR_MEMORY_PHYSICAL = 1 << 1, /* addresses are physical addresses */ -} virDomainMemoryFlags; - -int virDomainMemoryPeek (virDomainPtr dom, - unsigned long long start, - size_t size, - void *buffer, - unsigned int flags); - -/* - * defined but not running domains - */ -virDomainPtr virDomainDefineXML (virConnectPtr conn, - const char *xml); -int virDomainUndefine (virDomainPtr domain); - -typedef enum { - VIR_DOMAIN_UNDEFINE_MANAGED_SAVE = (1 << 0), /* Also remove any - managed save */ - VIR_DOMAIN_UNDEFINE_SNAPSHOTS_METADATA = (1 << 1), /* If last use of domain, - then also remove any - snapshot metadata */ - VIR_DOMAIN_UNDEFINE_NVRAM = (1 << 2), /* Also remove any - nvram file */ - - /* Future undefine control flags should come here. */ -} virDomainUndefineFlagsValues; - - -int virDomainUndefineFlags (virDomainPtr domain, - unsigned int flags); -int virConnectNumOfDefinedDomains (virConnectPtr conn); -int virConnectListDefinedDomains (virConnectPtr conn, - char **const names, - int maxnames); -/** - * virConnectListAllDomainsFlags: - * - * Flags used to tune which domains are listed by virConnectListAllDomains(). - * Note that these flags come in groups; if all bits from a group are 0, - * then that group is not used to filter results. - */ -typedef enum { - VIR_CONNECT_LIST_DOMAINS_ACTIVE = 1 << 0, - VIR_CONNECT_LIST_DOMAINS_INACTIVE = 1 << 1, - - VIR_CONNECT_LIST_DOMAINS_PERSISTENT = 1 << 2, - VIR_CONNECT_LIST_DOMAINS_TRANSIENT = 1 << 3, - - VIR_CONNECT_LIST_DOMAINS_RUNNING = 1 << 4, - VIR_CONNECT_LIST_DOMAINS_PAUSED = 1 << 5, - VIR_CONNECT_LIST_DOMAINS_SHUTOFF = 1 << 6, - VIR_CONNECT_LIST_DOMAINS_OTHER = 1 << 7, - - VIR_CONNECT_LIST_DOMAINS_MANAGEDSAVE = 1 << 8, - VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE = 1 << 9, - - VIR_CONNECT_LIST_DOMAINS_AUTOSTART = 1 << 10, - VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART = 1 << 11, - - VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT = 1 << 12, - VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHOT = 1 << 13, -} virConnectListAllDomainsFlags; - -int virConnectListAllDomains (virConnectPtr conn, - virDomainPtr **domains, - unsigned int flags); -int virDomainCreate (virDomainPtr domain); -int virDomainCreateWithFlags (virDomainPtr domain, - unsigned int flags); - -int virDomainCreateWithFiles (virDomainPtr domain, - unsigned int nfiles, - int *files, - unsigned int flags); - -int virDomainGetAutostart (virDomainPtr domain, - int *autostart); -int virDomainSetAutostart (virDomainPtr domain, - int autostart); - -/** - * virVcpuInfo: structure for information about a virtual CPU in a domain. - */ - -typedef enum { - VIR_VCPU_OFFLINE = 0, /* the virtual CPU is offline */ - VIR_VCPU_RUNNING = 1, /* the virtual CPU is running */ - VIR_VCPU_BLOCKED = 2, /* the virtual CPU is blocked on resource */ - -#ifdef VIR_ENUM_SENTINELS - VIR_VCPU_LAST -#endif -} virVcpuState; - -typedef struct _virVcpuInfo virVcpuInfo; -struct _virVcpuInfo { - unsigned int number; /* virtual CPU number */ - int state; /* value from virVcpuState */ - unsigned long long cpuTime; /* CPU time used, in nanoseconds */ - int cpu; /* real CPU number, or -1 if offline */ -}; -typedef virVcpuInfo *virVcpuInfoPtr; - -/* Flags for controlling virtual CPU hot-plugging. */ -typedef enum { - /* See virDomainModificationImpact for these flags. */ - VIR_DOMAIN_VCPU_CURRENT = VIR_DOMAIN_AFFECT_CURRENT, - VIR_DOMAIN_VCPU_LIVE = VIR_DOMAIN_AFFECT_LIVE, - VIR_DOMAIN_VCPU_CONFIG = VIR_DOMAIN_AFFECT_CONFIG, - - /* Additionally, these flags may be bitwise-OR'd in. */ - VIR_DOMAIN_VCPU_MAXIMUM = (1 << 2), /* Max rather than current count */ - VIR_DOMAIN_VCPU_GUEST = (1 << 3), /* Modify state of the cpu in the guest */ -} virDomainVcpuFlags; - -int virDomainSetVcpus (virDomainPtr domain, - unsigned int nvcpus); -int virDomainSetVcpusFlags (virDomainPtr domain, - unsigned int nvcpus, - unsigned int flags); -int virDomainGetVcpusFlags (virDomainPtr domain, - unsigned int flags); - -int virDomainPinVcpu (virDomainPtr domain, - unsigned int vcpu, - unsigned char *cpumap, - int maplen); -int virDomainPinVcpuFlags (virDomainPtr domain, - unsigned int vcpu, - unsigned char *cpumap, - int maplen, - unsigned int flags); - -int virDomainGetVcpuPinInfo (virDomainPtr domain, - int ncpumaps, - unsigned char *cpumaps, - int maplen, - unsigned int flags); - -int virDomainPinEmulator (virDomainPtr domain, - unsigned char *cpumap, - int maplen, - unsigned int flags); - -int virDomainGetEmulatorPinInfo (virDomainPtr domain, - unsigned char *cpumaps, - int maplen, - unsigned int flags); - -/** - * VIR_USE_CPU: - * @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN/OUT) - * @cpu: the physical CPU number - * - * This macro is to be used in conjunction with virDomainPinVcpu() API. - * It sets the bit (CPU usable) of the related cpu in cpumap. - */ - -#define VIR_USE_CPU(cpumap, cpu) ((cpumap)[(cpu) / 8] |= (1 << ((cpu) % 8))) - -/** - * VIR_UNUSE_CPU: - * @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN/OUT) - * @cpu: the physical CPU number - * - * This macro is to be used in conjunction with virDomainPinVcpu() API. - * It resets the bit (CPU not usable) of the related cpu in cpumap. - */ - -#define VIR_UNUSE_CPU(cpumap, cpu) ((cpumap)[(cpu) / 8] &= ~(1 << ((cpu) % 8))) - -/** - * VIR_CPU_USED: - * @cpumap: pointer to a bit map of real CPUs (in 8-bit bytes) (IN) - * @cpu: the physical CPU number - * - * This macro can be used in conjunction with virNodeGetCPUMap() API. - * It returns non-zero if the bit of the related CPU is set. - */ - -#define VIR_CPU_USED(cpumap, cpu) ((cpumap)[(cpu) / 8] & (1 << ((cpu) % 8))) - -/** - * VIR_CPU_MAPLEN: - * @cpu: number of physical CPUs - * - * This macro is to be used in conjunction with virDomainPinVcpu() API. - * It returns the length (in bytes) required to store the complete - * CPU map between a single virtual & all physical CPUs of a domain. - */ - -#define VIR_CPU_MAPLEN(cpu) (((cpu) + 7) / 8) - - -int virDomainGetVcpus (virDomainPtr domain, - virVcpuInfoPtr info, - int maxinfo, - unsigned char *cpumaps, - int maplen); - -/** - * VIR_CPU_USABLE: - * @cpumaps: pointer to an array of cpumap (in 8-bit bytes) (IN) - * @maplen: the length (in bytes) of one cpumap - * @vcpu: the virtual CPU number - * @cpu: the physical CPU number - * - * This macro is to be used in conjunction with virDomainGetVcpus() API. - * VIR_CPU_USABLE macro returns a non-zero value (true) if the cpu - * is usable by the vcpu, and 0 otherwise. - */ - -#define VIR_CPU_USABLE(cpumaps, maplen, vcpu, cpu) \ - VIR_CPU_USED(VIR_GET_CPUMAP(cpumaps, maplen, vcpu), cpu) - -/** - * VIR_COPY_CPUMAP: - * @cpumaps: pointer to an array of cpumap (in 8-bit bytes) (IN) - * @maplen: the length (in bytes) of one cpumap - * @vcpu: the virtual CPU number - * @cpumap: pointer to a cpumap (in 8-bit bytes) (OUT) - * This cpumap must be previously allocated by the caller - * (ie: malloc(maplen)) - * - * This macro is to be used in conjunction with virDomainGetVcpus() and - * virDomainPinVcpu() APIs. VIR_COPY_CPUMAP macro extracts the cpumap of - * the specified vcpu from cpumaps array and copies it into cpumap to be used - * later by virDomainPinVcpu() API. - */ -#define VIR_COPY_CPUMAP(cpumaps, maplen, vcpu, cpumap) \ - memcpy(cpumap, VIR_GET_CPUMAP(cpumaps, maplen, vcpu), maplen) - - -/** - * VIR_GET_CPUMAP: - * @cpumaps: pointer to an array of cpumap (in 8-bit bytes) (IN) - * @maplen: the length (in bytes) of one cpumap - * @vcpu: the virtual CPU number - * - * This macro is to be used in conjunction with virDomainGetVcpus() and - * virDomainPinVcpu() APIs. VIR_GET_CPUMAP macro returns a pointer to the - * cpumap of the specified vcpu from cpumaps array. - */ -#define VIR_GET_CPUMAP(cpumaps, maplen, vcpu) (&((cpumaps)[(vcpu) * (maplen)])) - - -typedef enum { - /* See virDomainModificationImpact for these flags. */ - VIR_DOMAIN_DEVICE_MODIFY_CURRENT = VIR_DOMAIN_AFFECT_CURRENT, - VIR_DOMAIN_DEVICE_MODIFY_LIVE = VIR_DOMAIN_AFFECT_LIVE, - VIR_DOMAIN_DEVICE_MODIFY_CONFIG = VIR_DOMAIN_AFFECT_CONFIG, - - /* Additionally, these flags may be bitwise-OR'd in. */ - VIR_DOMAIN_DEVICE_MODIFY_FORCE = (1 << 2), /* Forcibly modify device - (ex. force eject a cdrom) */ -} virDomainDeviceModifyFlags; - -int virDomainAttachDevice(virDomainPtr domain, const char *xml); -int virDomainDetachDevice(virDomainPtr domain, const char *xml); - -int virDomainAttachDeviceFlags(virDomainPtr domain, - const char *xml, unsigned int flags); -int virDomainDetachDeviceFlags(virDomainPtr domain, - const char *xml, unsigned int flags); -int virDomainUpdateDeviceFlags(virDomainPtr domain, - const char *xml, unsigned int flags); - -typedef struct _virDomainStatsRecord virDomainStatsRecord; -typedef virDomainStatsRecord *virDomainStatsRecordPtr; -struct _virDomainStatsRecord { - virDomainPtr dom; - virTypedParameterPtr params; - int nparams; -}; - -typedef enum { - VIR_DOMAIN_STATS_STATE = (1 << 0), /* return domain state */ - VIR_DOMAIN_STATS_CPU_TOTAL = (1 << 1), /* return domain CPU info */ - VIR_DOMAIN_STATS_BALLOON = (1 << 2), /* return domain balloon info */ - VIR_DOMAIN_STATS_VCPU = (1 << 3), /* return domain virtual CPU info */ - VIR_DOMAIN_STATS_INTERFACE = (1 << 4), /* return domain interfaces info */ - VIR_DOMAIN_STATS_BLOCK = (1 << 5), /* return domain block info */ -} virDomainStatsTypes; - -typedef enum { - VIR_CONNECT_GET_ALL_DOMAINS_STATS_ACTIVE = VIR_CONNECT_LIST_DOMAINS_ACTIVE, - VIR_CONNECT_GET_ALL_DOMAINS_STATS_INACTIVE = VIR_CONNECT_LIST_DOMAINS_INACTIVE, - - VIR_CONNECT_GET_ALL_DOMAINS_STATS_PERSISTENT = VIR_CONNECT_LIST_DOMAINS_PERSISTENT, - VIR_CONNECT_GET_ALL_DOMAINS_STATS_TRANSIENT = VIR_CONNECT_LIST_DOMAINS_TRANSIENT, - - VIR_CONNECT_GET_ALL_DOMAINS_STATS_RUNNING = VIR_CONNECT_LIST_DOMAINS_RUNNING, - VIR_CONNECT_GET_ALL_DOMAINS_STATS_PAUSED = VIR_CONNECT_LIST_DOMAINS_PAUSED, - VIR_CONNECT_GET_ALL_DOMAINS_STATS_SHUTOFF = VIR_CONNECT_LIST_DOMAINS_SHUTOFF, - VIR_CONNECT_GET_ALL_DOMAINS_STATS_OTHER = VIR_CONNECT_LIST_DOMAINS_OTHER, - - VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS = 1 << 31, /* enforce requested stats */ -} virConnectGetAllDomainStatsFlags; - -int virConnectGetAllDomainStats(virConnectPtr conn, - unsigned int stats, - virDomainStatsRecordPtr **retStats, - unsigned int flags); - -int virDomainListGetStats(virDomainPtr *doms, - unsigned int stats, - virDomainStatsRecordPtr **retStats, - unsigned int flags); - -void virDomainStatsRecordListFree(virDomainStatsRecordPtr *stats); - -/* - * BlockJob API - */ - -/** - * virDomainBlockJobType: - * - * Describes various possible block jobs. - */ -typedef enum { - VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN = 0, /* Placeholder */ - - VIR_DOMAIN_BLOCK_JOB_TYPE_PULL = 1, - /* Block Pull (virDomainBlockPull, or virDomainBlockRebase without - * flags), job ends on completion */ - - VIR_DOMAIN_BLOCK_JOB_TYPE_COPY = 2, - /* Block Copy (virDomainBlockCopy, or virDomainBlockRebase with - * flags), job exists as long as mirroring is active */ - - VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT = 3, - /* Block Commit (virDomainBlockCommit without flags), job ends on - * completion */ - - VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT = 4, - /* Active Block Commit (virDomainBlockCommit with flags), job - * exists as long as sync is active */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_BLOCK_JOB_TYPE_LAST -#endif -} virDomainBlockJobType; - -/** - * virDomainBlockJobAbortFlags: - * - * VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC: Request only, do not wait for completion - * VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT: Pivot to new file when ending a copy or - * active commit job - */ -typedef enum { - VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC = 1 << 0, - VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT = 1 << 1, -} virDomainBlockJobAbortFlags; - -int virDomainBlockJobAbort(virDomainPtr dom, const char *disk, - unsigned int flags); - -/* Flags for use with virDomainGetBlockJobInfo */ -typedef enum { - VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES = 1 << 0, /* bandwidth in bytes/s - instead of MiB/s */ -} virDomainBlockJobInfoFlags; - -/* An iterator for monitoring block job operations */ -typedef unsigned long long virDomainBlockJobCursor; - -typedef struct _virDomainBlockJobInfo virDomainBlockJobInfo; -struct _virDomainBlockJobInfo { - int type; /* virDomainBlockJobType */ - unsigned long bandwidth; /* either bytes/s or MiB/s, according to flags */ - - /* - * The following fields provide an indication of block job progress. @cur - * indicates the current position and will be between 0 and @end. @end is - * the final cursor position for this operation and represents completion. - * To approximate progress, divide @cur by @end. - */ - virDomainBlockJobCursor cur; - virDomainBlockJobCursor end; -}; -typedef virDomainBlockJobInfo *virDomainBlockJobInfoPtr; - -int virDomainGetBlockJobInfo(virDomainPtr dom, const char *disk, - virDomainBlockJobInfoPtr info, - unsigned int flags); - -/* Flags for use with virDomainBlockJobSetSpeed */ -typedef enum { - VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES = 1 << 0, /* bandwidth in bytes/s - instead of MiB/s */ -} virDomainBlockJobSetSpeedFlags; - -int virDomainBlockJobSetSpeed(virDomainPtr dom, const char *disk, - unsigned long bandwidth, unsigned int flags); - -/* Flags for use with virDomainBlockPull (values chosen to be a subset - * of the flags for virDomainBlockRebase) */ -typedef enum { - VIR_DOMAIN_BLOCK_PULL_BANDWIDTH_BYTES = 1 << 6, /* bandwidth in bytes/s - instead of MiB/s */ -} virDomainBlockPullFlags; - -int virDomainBlockPull(virDomainPtr dom, const char *disk, - unsigned long bandwidth, unsigned int flags); - -/** - * virDomainBlockRebaseFlags: - * - * Flags available for virDomainBlockRebase(). - */ -typedef enum { - VIR_DOMAIN_BLOCK_REBASE_SHALLOW = 1 << 0, /* Limit copy to top of source - backing chain */ - VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT = 1 << 1, /* Reuse existing external - file for a copy */ - VIR_DOMAIN_BLOCK_REBASE_COPY_RAW = 1 << 2, /* Make destination file raw */ - VIR_DOMAIN_BLOCK_REBASE_COPY = 1 << 3, /* Start a copy job */ - VIR_DOMAIN_BLOCK_REBASE_RELATIVE = 1 << 4, /* Keep backing chain - referenced using relative - names */ - VIR_DOMAIN_BLOCK_REBASE_COPY_DEV = 1 << 5, /* Treat destination as block - device instead of file */ - VIR_DOMAIN_BLOCK_REBASE_BANDWIDTH_BYTES = 1 << 6, /* bandwidth in bytes/s - instead of MiB/s */ -} virDomainBlockRebaseFlags; - -int virDomainBlockRebase(virDomainPtr dom, const char *disk, - const char *base, unsigned long bandwidth, - unsigned int flags); - -/** - * virDomainBlockCopyFlags: - * - * Flags available for virDomainBlockCopy(). - */ -typedef enum { - VIR_DOMAIN_BLOCK_COPY_SHALLOW = 1 << 0, /* Limit copy to top of source - backing chain */ - VIR_DOMAIN_BLOCK_COPY_REUSE_EXT = 1 << 1, /* Reuse existing external - file for a copy */ -} virDomainBlockCopyFlags; - -/** - * VIR_DOMAIN_BLOCK_COPY_BANDWIDTH: - * Macro for the virDomainBlockCopy bandwidth tunable: it represents - * the maximum bandwidth in bytes/s, and is used while getting the - * copy operation into the mirrored phase, with a type of ullong. For - * compatibility with virDomainBlockJobSetSpeed(), values larger than - * 2^52 bytes/sec (a 32-bit MiB/s value) may be rejected on input due - * to overflow considerations (but do you really have an interface - * with that much bandwidth?), and values larger than 2^31 bytes/sec - * may cause overflow problems if queried in bytes/sec. Hypervisors - * may further restrict the set of valid values. Specifying 0 is the - * same as omitting this parameter, to request no bandwidth limiting. - * Some hypervisors may lack support for this parameter, while still - * allowing a subsequent change of bandwidth via - * virDomainBlockJobSetSpeed(). The actual speed can be determined - * with virDomainGetBlockJobInfo(). - */ -#define VIR_DOMAIN_BLOCK_COPY_BANDWIDTH "bandwidth" - -/** - * VIR_DOMAIN_BLOCK_COPY_GRANULARITY: - * Macro for the virDomainBlockCopy granularity tunable: it represents - * the granularity in bytes at which the copy operation recognizes - * dirty blocks that need copying, as an unsigned int. Hypervisors may - * restrict this to be a power of two or fall within a certain - * range. Specifying 0 is the same as omitting this parameter, to - * request the hypervisor default. - */ -#define VIR_DOMAIN_BLOCK_COPY_GRANULARITY "granularity" - -/** - * VIR_DOMAIN_BLOCK_COPY_BUF_SIZE: - * Macro for the virDomainBlockCopy buffer size tunable: it represents - * how much data in bytes can be in flight between source and destination, - * as an unsigned long long. Specifying 0 is the same as omitting this - * parameter, to request the hypervisor default. - */ -#define VIR_DOMAIN_BLOCK_COPY_BUF_SIZE "buf-size" - -int virDomainBlockCopy(virDomainPtr dom, const char *disk, - const char *destxml, - virTypedParameterPtr params, - int nparams, - unsigned int flags); - -/** - * virDomainBlockCommitFlags: - * - * Flags available for virDomainBlockCommit(). - */ -typedef enum { - VIR_DOMAIN_BLOCK_COMMIT_SHALLOW = 1 << 0, /* NULL base means next backing - file, not whole chain */ - VIR_DOMAIN_BLOCK_COMMIT_DELETE = 1 << 1, /* Delete any files that are now - invalid after their contents - have been committed */ - VIR_DOMAIN_BLOCK_COMMIT_ACTIVE = 1 << 2, /* Allow a two-phase commit when - top is the active layer */ - VIR_DOMAIN_BLOCK_COMMIT_RELATIVE = 1 << 3, /* keep the backing chain - referenced using relative - names */ - VIR_DOMAIN_BLOCK_COMMIT_BANDWIDTH_BYTES = 1 << 4, /* bandwidth in bytes/s - instead of MiB/s */ -} virDomainBlockCommitFlags; - -int virDomainBlockCommit(virDomainPtr dom, const char *disk, const char *base, - const char *top, unsigned long bandwidth, - unsigned int flags); - - -/* Block I/O throttling support */ - -/** - * VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC: - * - * Macro for the BlockIoTune tunable weight: it represents the total - * bytes per second permitted through a block device, as a ullong. - */ -#define VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC "total_bytes_sec" - -/** - * VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC: - * - * Macro for the BlockIoTune tunable weight: it represents the read - * bytes per second permitted through a block device, as a ullong. - */ -#define VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC "read_bytes_sec" - -/** - * VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC: - * - * Macro for the BlockIoTune tunable weight: it represents the write - * bytes per second permitted through a block device, as a ullong. - */ -#define VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC "write_bytes_sec" - -/** - * VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC: - * - * Macro for the BlockIoTune tunable weight: it represents the total - * I/O operations per second permitted through a block device, as a ullong. - */ -#define VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC "total_iops_sec" - -/** - * VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC: - * - * Macro for the BlockIoTune tunable weight: it represents the read - * I/O operations per second permitted through a block device, as a ullong. - */ -#define VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC "read_iops_sec" - -/** - * VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC: - * Macro for the BlockIoTune tunable weight: it represents the write - * I/O operations per second permitted through a block device, as a ullong. - */ -#define VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC "write_iops_sec" - -int -virDomainSetBlockIoTune(virDomainPtr dom, - const char *disk, - virTypedParameterPtr params, - int nparams, - unsigned int flags); -int -virDomainGetBlockIoTune(virDomainPtr dom, - const char *disk, - virTypedParameterPtr params, - int *nparams, - unsigned int flags); - -/** - * virDomainDiskErrorCode: - * - * Disk I/O error. - */ -typedef enum { - VIR_DOMAIN_DISK_ERROR_NONE = 0, /* no error */ - VIR_DOMAIN_DISK_ERROR_UNSPEC = 1, /* unspecified I/O error */ - VIR_DOMAIN_DISK_ERROR_NO_SPACE = 2, /* no space left on the device */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_DISK_ERROR_LAST -#endif -} virDomainDiskErrorCode; - -/** - * virDomainDiskError: - * - */ -typedef struct _virDomainDiskError virDomainDiskError; -typedef virDomainDiskError *virDomainDiskErrorPtr; - -struct _virDomainDiskError { - char *disk; /* disk target */ - int error; /* virDomainDiskErrorCode */ -}; - -int virDomainGetDiskErrors(virDomainPtr dom, - virDomainDiskErrorPtr errors, - unsigned int maxerrors, - unsigned int flags); - - -/* - * NUMA support - */ - -int virNodeGetCellsFreeMemory(virConnectPtr conn, - unsigned long long *freeMems, - int startCell, - int maxCells); - - - - -/** - * virKeycodeSet: - * - * Enum to specify which keycode mapping is in use for virDomainSendKey(). - */ -typedef enum { - VIR_KEYCODE_SET_LINUX = 0, - VIR_KEYCODE_SET_XT = 1, - VIR_KEYCODE_SET_ATSET1 = 2, - VIR_KEYCODE_SET_ATSET2 = 3, - VIR_KEYCODE_SET_ATSET3 = 4, - VIR_KEYCODE_SET_OSX = 5, - VIR_KEYCODE_SET_XT_KBD = 6, - VIR_KEYCODE_SET_USB = 7, - VIR_KEYCODE_SET_WIN32 = 8, - VIR_KEYCODE_SET_RFB = 9, - -#ifdef VIR_ENUM_SENTINELS - VIR_KEYCODE_SET_LAST - /* - * NB: this enum value will increase over time as new events are - * added to the libvirt API. It reflects the last keycode set supported - * by this version of the libvirt API. - */ -#endif -} virKeycodeSet; - -/** - * VIR_DOMAIN_SEND_KEY_MAX_KEYS: - * - * Maximum number of keycodes that can be sent in one virDomainSendKey() call. - */ -#define VIR_DOMAIN_SEND_KEY_MAX_KEYS 16 - -int virDomainSendKey(virDomainPtr domain, - unsigned int codeset, - unsigned int holdtime, - unsigned int *keycodes, - int nkeycodes, - unsigned int flags); - -/* - * These just happen to match Linux signal numbers. The numbers - * will be mapped to whatever the SIGNUM is in the guest OS in - * question by the agent delivering the signal. The names are - * based on the POSIX / XSI signal standard though. - * - * Do not rely on all values matching Linux though. It is possible - * this enum might be extended with new signals which have no - * mapping in Linux. - */ -typedef enum { - VIR_DOMAIN_PROCESS_SIGNAL_NOP = 0, /* No constant in POSIX/Linux */ - VIR_DOMAIN_PROCESS_SIGNAL_HUP = 1, /* SIGHUP */ - VIR_DOMAIN_PROCESS_SIGNAL_INT = 2, /* SIGINT */ - VIR_DOMAIN_PROCESS_SIGNAL_QUIT = 3, /* SIGQUIT */ - VIR_DOMAIN_PROCESS_SIGNAL_ILL = 4, /* SIGILL */ - VIR_DOMAIN_PROCESS_SIGNAL_TRAP = 5, /* SIGTRAP */ - VIR_DOMAIN_PROCESS_SIGNAL_ABRT = 6, /* SIGABRT */ - VIR_DOMAIN_PROCESS_SIGNAL_BUS = 7, /* SIGBUS */ - VIR_DOMAIN_PROCESS_SIGNAL_FPE = 8, /* SIGFPE */ - VIR_DOMAIN_PROCESS_SIGNAL_KILL = 9, /* SIGKILL */ - - VIR_DOMAIN_PROCESS_SIGNAL_USR1 = 10, /* SIGUSR1 */ - VIR_DOMAIN_PROCESS_SIGNAL_SEGV = 11, /* SIGSEGV */ - VIR_DOMAIN_PROCESS_SIGNAL_USR2 = 12, /* SIGUSR2 */ - VIR_DOMAIN_PROCESS_SIGNAL_PIPE = 13, /* SIGPIPE */ - VIR_DOMAIN_PROCESS_SIGNAL_ALRM = 14, /* SIGALRM */ - VIR_DOMAIN_PROCESS_SIGNAL_TERM = 15, /* SIGTERM */ - VIR_DOMAIN_PROCESS_SIGNAL_STKFLT = 16, /* Not in POSIX (SIGSTKFLT on Linux )*/ - VIR_DOMAIN_PROCESS_SIGNAL_CHLD = 17, /* SIGCHLD */ - VIR_DOMAIN_PROCESS_SIGNAL_CONT = 18, /* SIGCONT */ - VIR_DOMAIN_PROCESS_SIGNAL_STOP = 19, /* SIGSTOP */ - - VIR_DOMAIN_PROCESS_SIGNAL_TSTP = 20, /* SIGTSTP */ - VIR_DOMAIN_PROCESS_SIGNAL_TTIN = 21, /* SIGTTIN */ - VIR_DOMAIN_PROCESS_SIGNAL_TTOU = 22, /* SIGTTOU */ - VIR_DOMAIN_PROCESS_SIGNAL_URG = 23, /* SIGURG */ - VIR_DOMAIN_PROCESS_SIGNAL_XCPU = 24, /* SIGXCPU */ - VIR_DOMAIN_PROCESS_SIGNAL_XFSZ = 25, /* SIGXFSZ */ - VIR_DOMAIN_PROCESS_SIGNAL_VTALRM = 26, /* SIGVTALRM */ - VIR_DOMAIN_PROCESS_SIGNAL_PROF = 27, /* SIGPROF */ - VIR_DOMAIN_PROCESS_SIGNAL_WINCH = 28, /* Not in POSIX (SIGWINCH on Linux) */ - VIR_DOMAIN_PROCESS_SIGNAL_POLL = 29, /* SIGPOLL (also known as SIGIO on Linux) */ - - VIR_DOMAIN_PROCESS_SIGNAL_PWR = 30, /* Not in POSIX (SIGPWR on Linux) */ - VIR_DOMAIN_PROCESS_SIGNAL_SYS = 31, /* SIGSYS (also known as SIGUNUSED on Linux) */ - VIR_DOMAIN_PROCESS_SIGNAL_RT0 = 32, /* SIGRTMIN */ - VIR_DOMAIN_PROCESS_SIGNAL_RT1 = 33, /* SIGRTMIN + 1 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT2 = 34, /* SIGRTMIN + 2 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT3 = 35, /* SIGRTMIN + 3 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT4 = 36, /* SIGRTMIN + 4 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT5 = 37, /* SIGRTMIN + 5 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT6 = 38, /* SIGRTMIN + 6 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT7 = 39, /* SIGRTMIN + 7 */ - - VIR_DOMAIN_PROCESS_SIGNAL_RT8 = 40, /* SIGRTMIN + 8 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT9 = 41, /* SIGRTMIN + 9 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT10 = 42, /* SIGRTMIN + 10 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT11 = 43, /* SIGRTMIN + 11 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT12 = 44, /* SIGRTMIN + 12 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT13 = 45, /* SIGRTMIN + 13 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT14 = 46, /* SIGRTMIN + 14 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT15 = 47, /* SIGRTMIN + 15 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT16 = 48, /* SIGRTMIN + 16 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT17 = 49, /* SIGRTMIN + 17 */ - - VIR_DOMAIN_PROCESS_SIGNAL_RT18 = 50, /* SIGRTMIN + 18 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT19 = 51, /* SIGRTMIN + 19 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT20 = 52, /* SIGRTMIN + 20 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT21 = 53, /* SIGRTMIN + 21 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT22 = 54, /* SIGRTMIN + 22 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT23 = 55, /* SIGRTMIN + 23 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT24 = 56, /* SIGRTMIN + 24 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT25 = 57, /* SIGRTMIN + 25 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT26 = 58, /* SIGRTMIN + 26 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT27 = 59, /* SIGRTMIN + 27 */ - - VIR_DOMAIN_PROCESS_SIGNAL_RT28 = 60, /* SIGRTMIN + 28 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT29 = 61, /* SIGRTMIN + 29 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT30 = 62, /* SIGRTMIN + 30 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT31 = 63, /* SIGRTMIN + 31 */ - VIR_DOMAIN_PROCESS_SIGNAL_RT32 = 64, /* SIGRTMIN + 32 / SIGRTMAX */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_PROCESS_SIGNAL_LAST -#endif -} virDomainProcessSignal; - -int virDomainSendProcessSignal(virDomainPtr domain, - long long pid_value, - unsigned int signum, - unsigned int flags); - -/* - * Deprecated calls - */ -virDomainPtr virDomainCreateLinux (virConnectPtr conn, - const char *xmlDesc, - unsigned int flags); - - -/* - * Domain Event Notification - */ - -/** - * virDomainEventType: - * - * a virDomainEventType is emitted during domain lifecycle events - */ -typedef enum { - VIR_DOMAIN_EVENT_DEFINED = 0, - VIR_DOMAIN_EVENT_UNDEFINED = 1, - VIR_DOMAIN_EVENT_STARTED = 2, - VIR_DOMAIN_EVENT_SUSPENDED = 3, - VIR_DOMAIN_EVENT_RESUMED = 4, - VIR_DOMAIN_EVENT_STOPPED = 5, - VIR_DOMAIN_EVENT_SHUTDOWN = 6, - VIR_DOMAIN_EVENT_PMSUSPENDED = 7, - VIR_DOMAIN_EVENT_CRASHED = 8, - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_LAST -#endif -} virDomainEventType; - -/** - * virDomainEventDefinedDetailType: - * - * Details on the cause of a 'defined' lifecycle event - */ -typedef enum { - VIR_DOMAIN_EVENT_DEFINED_ADDED = 0, /* Newly created config file */ - VIR_DOMAIN_EVENT_DEFINED_UPDATED = 1, /* Changed config file */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_DEFINED_LAST -#endif -} virDomainEventDefinedDetailType; - -/** - * virDomainEventUndefinedDetailType: - * - * Details on the cause of an 'undefined' lifecycle event - */ -typedef enum { - VIR_DOMAIN_EVENT_UNDEFINED_REMOVED = 0, /* Deleted the config file */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_UNDEFINED_LAST -#endif -} virDomainEventUndefinedDetailType; - -/** - * virDomainEventStartedDetailType: - * - * Details on the cause of a 'started' lifecycle event - */ -typedef enum { - VIR_DOMAIN_EVENT_STARTED_BOOTED = 0, /* Normal startup from boot */ - VIR_DOMAIN_EVENT_STARTED_MIGRATED = 1, /* Incoming migration from another host */ - VIR_DOMAIN_EVENT_STARTED_RESTORED = 2, /* Restored from a state file */ - VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT = 3, /* Restored from snapshot */ - VIR_DOMAIN_EVENT_STARTED_WAKEUP = 4, /* Started due to wakeup event */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_STARTED_LAST -#endif -} virDomainEventStartedDetailType; - -/** - * virDomainEventSuspendedDetailType: - * - * Details on the cause of a 'suspended' lifecycle event - */ -typedef enum { - VIR_DOMAIN_EVENT_SUSPENDED_PAUSED = 0, /* Normal suspend due to admin pause */ - VIR_DOMAIN_EVENT_SUSPENDED_MIGRATED = 1, /* Suspended for offline migration */ - VIR_DOMAIN_EVENT_SUSPENDED_IOERROR = 2, /* Suspended due to a disk I/O error */ - VIR_DOMAIN_EVENT_SUSPENDED_WATCHDOG = 3, /* Suspended due to a watchdog firing */ - VIR_DOMAIN_EVENT_SUSPENDED_RESTORED = 4, /* Restored from paused state file */ - VIR_DOMAIN_EVENT_SUSPENDED_FROM_SNAPSHOT = 5, /* Restored from paused snapshot */ - VIR_DOMAIN_EVENT_SUSPENDED_API_ERROR = 6, /* suspended after failure during libvirt API call */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_SUSPENDED_LAST -#endif -} virDomainEventSuspendedDetailType; - -/** - * virDomainEventResumedDetailType: - * - * Details on the cause of a 'resumed' lifecycle event - */ -typedef enum { - VIR_DOMAIN_EVENT_RESUMED_UNPAUSED = 0, /* Normal resume due to admin unpause */ - VIR_DOMAIN_EVENT_RESUMED_MIGRATED = 1, /* Resumed for completion of migration */ - VIR_DOMAIN_EVENT_RESUMED_FROM_SNAPSHOT = 2, /* Resumed from snapshot */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_RESUMED_LAST -#endif -} virDomainEventResumedDetailType; - -/** - * virDomainEventStoppedDetailType: - * - * Details on the cause of a 'stopped' lifecycle event - */ -typedef enum { - VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN = 0, /* Normal shutdown */ - VIR_DOMAIN_EVENT_STOPPED_DESTROYED = 1, /* Forced poweroff from host */ - VIR_DOMAIN_EVENT_STOPPED_CRASHED = 2, /* Guest crashed */ - VIR_DOMAIN_EVENT_STOPPED_MIGRATED = 3, /* Migrated off to another host */ - VIR_DOMAIN_EVENT_STOPPED_SAVED = 4, /* Saved to a state file */ - VIR_DOMAIN_EVENT_STOPPED_FAILED = 5, /* Host emulator/mgmt failed */ - VIR_DOMAIN_EVENT_STOPPED_FROM_SNAPSHOT = 6, /* offline snapshot loaded */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_STOPPED_LAST -#endif -} virDomainEventStoppedDetailType; - - -/** - * virDomainEventShutdownDetailType: - * - * Details on the cause of a 'shutdown' lifecycle event - */ -typedef enum { - VIR_DOMAIN_EVENT_SHUTDOWN_FINISHED = 0, /* Guest finished shutdown sequence */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_SHUTDOWN_LAST -#endif -} virDomainEventShutdownDetailType; - -/** - * virDomainEventPMSuspendedDetailType: - * - * Details on the cause of a 'pmsuspended' lifecycle event - */ -typedef enum { - VIR_DOMAIN_EVENT_PMSUSPENDED_MEMORY = 0, /* Guest was PM suspended to memory */ - VIR_DOMAIN_EVENT_PMSUSPENDED_DISK = 1, /* Guest was PM suspended to disk */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_PMSUSPENDED_LAST -#endif -} virDomainEventPMSuspendedDetailType; - -/** - * virDomainEventCrashedDetailType: - * - * Details on the cause of a 'crashed' lifecycle event - */ -typedef enum { - VIR_DOMAIN_EVENT_CRASHED_PANICKED = 0, /* Guest was panicked */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_CRASHED_LAST -#endif -} virDomainEventCrashedDetailType; - -/** - * virConnectDomainEventCallback: - * @conn: virConnect connection - * @dom: The domain on which the event occurred - * @event: The specific virDomainEventType which occurred - * @detail: event specific detail information - * @opaque: opaque user data - * - * A callback function to be registered, and called when a domain event occurs - * - * Returns 0 (the return value is currently ignored) - */ -typedef int (*virConnectDomainEventCallback)(virConnectPtr conn, - virDomainPtr dom, - int event, - int detail, - void *opaque); - -int virConnectDomainEventRegister(virConnectPtr conn, - virConnectDomainEventCallback cb, - void *opaque, - virFreeCallback freecb); - -int virConnectDomainEventDeregister(virConnectPtr conn, - virConnectDomainEventCallback cb); - - -int virDomainIsActive(virDomainPtr dom); -int virDomainIsPersistent(virDomainPtr dom); -int virDomainIsUpdated(virDomainPtr dom); - - -int virConnectIsEncrypted(virConnectPtr conn); -int virConnectIsSecure(virConnectPtr conn); -int virConnectIsAlive(virConnectPtr conn); - -/* - * CPU specification API - */ - -typedef enum { - VIR_CPU_COMPARE_ERROR = -1, - VIR_CPU_COMPARE_INCOMPATIBLE = 0, - VIR_CPU_COMPARE_IDENTICAL = 1, - VIR_CPU_COMPARE_SUPERSET = 2, - -#ifdef VIR_ENUM_SENTINELS - VIR_CPU_COMPARE_LAST -#endif -} virCPUCompareResult; - -typedef enum { - VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE = (1 << 0), /* treat incompatible - CPUs as failure */ -} virConnectCompareCPUFlags; - -int virConnectCompareCPU(virConnectPtr conn, - const char *xmlDesc, - unsigned int flags); - -int virConnectGetCPUModelNames(virConnectPtr conn, - const char *arch, - char ***models, - unsigned int flags); - -/** - * virConnectBaselineCPUFlags - * - * Flags when getting XML description of a computed CPU - */ -typedef enum { - VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES = (1 << 0), /* show all features */ -} virConnectBaselineCPUFlags; - -char *virConnectBaselineCPU(virConnectPtr conn, - const char **xmlCPUs, - unsigned int ncpus, - unsigned int flags); - -typedef enum { - VIR_DOMAIN_JOB_NONE = 0, /* No job is active */ - VIR_DOMAIN_JOB_BOUNDED = 1, /* Job with a finite completion time */ - VIR_DOMAIN_JOB_UNBOUNDED = 2, /* Job without a finite completion time */ - VIR_DOMAIN_JOB_COMPLETED = 3, /* Job has finished, but isn't cleaned up */ - VIR_DOMAIN_JOB_FAILED = 4, /* Job hit error, but isn't cleaned up */ - VIR_DOMAIN_JOB_CANCELLED = 5, /* Job was aborted, but isn't cleaned up */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_JOB_LAST -#endif -} virDomainJobType; - -typedef struct _virDomainJobInfo virDomainJobInfo; -typedef virDomainJobInfo *virDomainJobInfoPtr; -struct _virDomainJobInfo { - /* One of virDomainJobType */ - int type; - - /* Time is measured in milliseconds */ - unsigned long long timeElapsed; /* Always set */ - unsigned long long timeRemaining; /* Only for VIR_DOMAIN_JOB_BOUNDED */ - - /* Data is measured in bytes unless otherwise specified - * and is measuring the job as a whole. - * - * For VIR_DOMAIN_JOB_UNBOUNDED, dataTotal may be less - * than the final sum of dataProcessed + dataRemaining - * in the event that the hypervisor has to repeat some - * data, such as due to dirtied pages during migration. - * - * For VIR_DOMAIN_JOB_BOUNDED, dataTotal shall always - * equal the sum of dataProcessed + dataRemaining. - */ - unsigned long long dataTotal; - unsigned long long dataProcessed; - unsigned long long dataRemaining; - - /* As above, but only tracking guest memory progress */ - unsigned long long memTotal; - unsigned long long memProcessed; - unsigned long long memRemaining; - - /* As above, but only tracking guest disk file progress */ - unsigned long long fileTotal; - unsigned long long fileProcessed; - unsigned long long fileRemaining; -}; - -/** - * virDomainGetJobStatsFlags: - * - * Flags OR'ed together to provide specific behavior when querying domain - * job statistics. - */ -typedef enum { - VIR_DOMAIN_JOB_STATS_COMPLETED = 1 << 0, /* return stats of a recently - * completed job */ -} virDomainGetJobStatsFlags; - -int virDomainGetJobInfo(virDomainPtr dom, - virDomainJobInfoPtr info); -int virDomainGetJobStats(virDomainPtr domain, - int *type, - virTypedParameterPtr *params, - int *nparams, - unsigned int flags); -int virDomainAbortJob(virDomainPtr dom); - -/** - * VIR_DOMAIN_JOB_TIME_ELAPSED: - * - * virDomainGetJobStats field: time (ms) since the beginning of the - * job, as VIR_TYPED_PARAM_ULLONG. - * - * This field corresponds to timeElapsed field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_TIME_ELAPSED "time_elapsed" - -/** - * VIR_DOMAIN_JOB_TIME_REMAINING: - * - * virDomainGetJobStats field: remaining time (ms) for VIR_DOMAIN_JOB_BOUNDED - * jobs, as VIR_TYPED_PARAM_ULLONG. - * - * This field corresponds to timeRemaining field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_TIME_REMAINING "time_remaining" - -/** - * VIR_DOMAIN_JOB_DOWNTIME: - * - * virDomainGetJobStats field: downtime (ms) that is expected to happen - * during migration, as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_JOB_DOWNTIME "downtime" - -/** - * VIR_DOMAIN_JOB_SETUP_TIME: - * - * virDomainGetJobStats field: total time in milliseconds spent preparing - * the migration in the 'setup' phase before the iterations begin, as - * VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_JOB_SETUP_TIME "setup_time" - -/** - * VIR_DOMAIN_JOB_DATA_TOTAL: - * - * virDomainGetJobStats field: total number of bytes supposed to be - * transferred, as VIR_TYPED_PARAM_ULLONG. For VIR_DOMAIN_JOB_UNBOUNDED - * jobs, this may be less than the sum of VIR_DOMAIN_JOB_DATA_PROCESSED and - * VIR_DOMAIN_JOB_DATA_REMAINING in the event that the hypervisor has to - * repeat some data, e.g., due to dirtied pages during migration. For - * VIR_DOMAIN_JOB_BOUNDED jobs, VIR_DOMAIN_JOB_DATA_TOTAL shall always equal - * VIR_DOMAIN_JOB_DATA_PROCESSED + VIR_DOMAIN_JOB_DATA_REMAINING. - * - * This field corresponds to dataTotal field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_DATA_TOTAL "data_total" - -/** - * VIR_DOMAIN_JOB_DATA_PROCESSED: - * - * virDomainGetJobStats field: number of bytes transferred from the - * beginning of the job, as VIR_TYPED_PARAM_ULLONG. - * - * This field corresponds to dataProcessed field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_DATA_PROCESSED "data_processed" - -/** - * VIR_DOMAIN_JOB_DATA_REMAINING: - * - * virDomainGetJobStats field: number of bytes that still need to be - * transferred, as VIR_TYPED_PARAM_ULLONG. - * - * This field corresponds to dataRemaining field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_DATA_REMAINING "data_remaining" - -/** - * VIR_DOMAIN_JOB_MEMORY_TOTAL: - * - * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_TOTAL but only - * tracking guest memory progress, as VIR_TYPED_PARAM_ULLONG. - * - * This field corresponds to memTotal field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_MEMORY_TOTAL "memory_total" - -/** - * VIR_DOMAIN_JOB_MEMORY_PROCESSED: - * - * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_PROCESSED but only - * tracking guest memory progress, as VIR_TYPED_PARAM_ULLONG. - * - * This field corresponds to memProcessed field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_MEMORY_PROCESSED "memory_processed" - -/** - * VIR_DOMAIN_JOB_MEMORY_REMAINING: - * - * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_REMAINING but only - * tracking guest memory progress, as VIR_TYPED_PARAM_ULLONG. - * - * This field corresponds to memRemaining field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_MEMORY_REMAINING "memory_remaining" - -/** - * VIR_DOMAIN_JOB_MEMORY_CONSTANT: - * - * virDomainGetJobStats field: number of pages filled with a constant - * byte (all bytes in a single page are identical) transferred since the - * beginning of the migration job, as VIR_TYPED_PARAM_ULLONG. - * - * The most common example of such pages are zero pages, i.e., pages filled - * with zero bytes. - */ -#define VIR_DOMAIN_JOB_MEMORY_CONSTANT "memory_constant" - -/** - * VIR_DOMAIN_JOB_MEMORY_NORMAL: - * - * virDomainGetJobStats field: number of pages that were transferred without - * any kind of compression (i.e., pages which were not filled with a constant - * byte and which could not be compressed) transferred since the beginning - * of the migration job, as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_JOB_MEMORY_NORMAL "memory_normal" - -/** - * VIR_DOMAIN_JOB_MEMORY_NORMAL_BYTES: - * - * virDomainGetJobStats field: number of bytes transferred as normal pages, - * as VIR_TYPED_PARAM_ULLONG. - * - * See VIR_DOMAIN_JOB_MEMORY_NORMAL for more details. - */ -#define VIR_DOMAIN_JOB_MEMORY_NORMAL_BYTES "memory_normal_bytes" - -/** - * VIR_DOMAIN_JOB_MEMORY_BPS: - * - * virDomainGetJobStats field: network throughput used while migrating - * memory in Bytes per second, as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_JOB_MEMORY_BPS "memory_bps" - -/** - * VIR_DOMAIN_JOB_DISK_TOTAL: - * - * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_TOTAL but only - * tracking guest disk progress, as VIR_TYPED_PARAM_ULLONG. - * - * This field corresponds to fileTotal field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_DISK_TOTAL "disk_total" - -/** - * VIR_DOMAIN_JOB_DISK_PROCESSED: - * - * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_PROCESSED but only - * tracking guest disk progress, as VIR_TYPED_PARAM_ULLONG. - * - * This field corresponds to fileProcessed field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_DISK_PROCESSED "disk_processed" - -/** - * VIR_DOMAIN_JOB_DISK_REMAINING: - * - * virDomainGetJobStats field: as VIR_DOMAIN_JOB_DATA_REMAINING but only - * tracking guest disk progress, as VIR_TYPED_PARAM_ULLONG. - * - * This field corresponds to fileRemaining field in virDomainJobInfo. - */ -#define VIR_DOMAIN_JOB_DISK_REMAINING "disk_remaining" - -/** - * VIR_DOMAIN_JOB_DISK_BPS: - * - * virDomainGetJobStats field: network throughput used while migrating - * disks in Bytes per second, as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_JOB_DISK_BPS "disk_bps" - -/** - * VIR_DOMAIN_JOB_COMPRESSION_CACHE: - * - * virDomainGetJobStats field: size of the cache (in bytes) used for - * compressing repeatedly transferred memory pages during live migration, - * as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_JOB_COMPRESSION_CACHE "compression_cache" - -/** - * VIR_DOMAIN_JOB_COMPRESSION_BYTES: - * - * virDomainGetJobStats field: number of compressed bytes transferred - * since the beginning of migration, as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_JOB_COMPRESSION_BYTES "compression_bytes" - -/** - * VIR_DOMAIN_JOB_COMPRESSION_PAGES: - * - * virDomainGetJobStats field: number of compressed pages transferred - * since the beginning of migration, as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_JOB_COMPRESSION_PAGES "compression_pages" - -/** - * VIR_DOMAIN_JOB_COMPRESSION_CACHE_MISSES: - * - * virDomainGetJobStats field: number of repeatedly changing pages that - * were not found in compression cache and thus could not be compressed, - * as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_JOB_COMPRESSION_CACHE_MISSES "compression_cache_misses" - -/** - * VIR_DOMAIN_JOB_COMPRESSION_OVERFLOW: - * - * virDomainGetJobStats field: number of repeatedly changing pages that - * were found in compression cache but were sent uncompressed because - * the result of compression was larger than the original page as a whole, - * as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_JOB_COMPRESSION_OVERFLOW "compression_overflow" - - - -/** - * virConnectDomainEventGenericCallback: - * @conn: the connection pointer - * @dom: the domain pointer - * @opaque: application specified data - * - * A generic domain event callback handler, for use with - * virConnectDomainEventRegisterAny(). Specific events usually - * have a customization with extra parameters, often with @opaque being - * passed in a different parameter position; use VIR_DOMAIN_EVENT_CALLBACK() - * when registering an appropriate handler. - */ -typedef void (*virConnectDomainEventGenericCallback)(virConnectPtr conn, - virDomainPtr dom, - void *opaque); - -/** - * virConnectDomainEventRTCChangeCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @utcoffset: the new RTC offset from UTC, measured in seconds - * @opaque: application specified data - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_RTC_CHANGE with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventRTCChangeCallback)(virConnectPtr conn, - virDomainPtr dom, - long long utcoffset, - void *opaque); - -/** - * virDomainEventWatchdogAction: - * - * The action that is to be taken due to the watchdog device firing - */ -typedef enum { - VIR_DOMAIN_EVENT_WATCHDOG_NONE = 0, /* No action, watchdog ignored */ - VIR_DOMAIN_EVENT_WATCHDOG_PAUSE, /* Guest CPUs are paused */ - VIR_DOMAIN_EVENT_WATCHDOG_RESET, /* Guest CPUs are reset */ - VIR_DOMAIN_EVENT_WATCHDOG_POWEROFF, /* Guest is forcibly powered off */ - VIR_DOMAIN_EVENT_WATCHDOG_SHUTDOWN, /* Guest is requested to gracefully shutdown */ - VIR_DOMAIN_EVENT_WATCHDOG_DEBUG, /* No action, a debug message logged */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_WATCHDOG_LAST -#endif -} virDomainEventWatchdogAction; - -/** - * virConnectDomainEventWatchdogCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @action: action that is to be taken due to watchdog firing - * @opaque: application specified data - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_WATCHDOG with virConnectDomainEventRegisterAny() - * - */ -typedef void (*virConnectDomainEventWatchdogCallback)(virConnectPtr conn, - virDomainPtr dom, - int action, - void *opaque); - -/** - * virDomainEventIOErrorAction: - * - * The action that is to be taken due to an IO error occurring - */ -typedef enum { - VIR_DOMAIN_EVENT_IO_ERROR_NONE = 0, /* No action, IO error ignored */ - VIR_DOMAIN_EVENT_IO_ERROR_PAUSE, /* Guest CPUs are paused */ - VIR_DOMAIN_EVENT_IO_ERROR_REPORT, /* IO error reported to guest OS */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_IO_ERROR_LAST -#endif -} virDomainEventIOErrorAction; - - -/** - * virConnectDomainEventIOErrorCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @srcPath: The host file on which the IO error occurred - * @devAlias: The guest device alias associated with the path - * @action: action that is to be taken due to the IO error - * @opaque: application specified data - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_IO_ERROR with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventIOErrorCallback)(virConnectPtr conn, - virDomainPtr dom, - const char *srcPath, - const char *devAlias, - int action, - void *opaque); - -/** - * virConnectDomainEventIOErrorReasonCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @srcPath: The host file on which the IO error occurred - * @devAlias: The guest device alias associated with the path - * @action: action that is to be taken due to the IO error - * @reason: the cause of the IO error - * @opaque: application specified data - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON with virConnectDomainEventRegisterAny() - * - * If the I/O error is known to be caused by an ENOSPC condition in - * the host (where resizing the disk to be larger will allow the guest - * to be resumed as if nothing happened), @reason will be "enospc". - * Otherwise, @reason will be "", although future strings may be added - * if determination of other error types becomes possible. - * - */ -typedef void (*virConnectDomainEventIOErrorReasonCallback)(virConnectPtr conn, - virDomainPtr dom, - const char *srcPath, - const char *devAlias, - int action, - const char *reason, - void *opaque); - -/** - * virDomainEventGraphicsPhase: - * - * The phase of the graphics client connection - */ -typedef enum { - VIR_DOMAIN_EVENT_GRAPHICS_CONNECT = 0, /* Initial socket connection established */ - VIR_DOMAIN_EVENT_GRAPHICS_INITIALIZE, /* Authentication & setup completed */ - VIR_DOMAIN_EVENT_GRAPHICS_DISCONNECT, /* Final socket disconnection */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_GRAPHICS_LAST -#endif -} virDomainEventGraphicsPhase; - -/** - * virDomainEventGraphicsAddressType: - * - * The type of address for the connection - */ -typedef enum { - VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_IPV4, /* IPv4 address */ - VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_IPV6, /* IPv6 address */ - VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_UNIX, /* UNIX socket path */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_GRAPHICS_ADDRESS_LAST -#endif -} virDomainEventGraphicsAddressType; - - -/** - * virDomainEventGraphicsAddress: - * - * The data structure containing connection address details - * - */ -struct _virDomainEventGraphicsAddress { - int family; /* Address family, virDomainEventGraphicsAddressType */ - char *node; /* Address of node (eg IP address, or UNIX path) */ - char *service; /* Service name/number (eg TCP port, or NULL) */ -}; -typedef struct _virDomainEventGraphicsAddress virDomainEventGraphicsAddress; -typedef virDomainEventGraphicsAddress *virDomainEventGraphicsAddressPtr; - - -/** - * virDomainEventGraphicsSubjectIdentity: - * - * The data structure representing a single identity - * - * The types of identity differ according to the authentication scheme, - * some examples are 'x509dname' and 'saslUsername'. - */ -struct _virDomainEventGraphicsSubjectIdentity { - char *type; /* Type of identity */ - char *name; /* Identity value */ -}; -typedef struct _virDomainEventGraphicsSubjectIdentity virDomainEventGraphicsSubjectIdentity; -typedef virDomainEventGraphicsSubjectIdentity *virDomainEventGraphicsSubjectIdentityPtr; - - -/** - * virDomainEventGraphicsSubject: - * - * The data structure representing an authenticated subject - * - * A subject will have zero or more identities. The types of - * identity differ according to the authentication scheme - */ -struct _virDomainEventGraphicsSubject { - int nidentity; /* Number of identities in array*/ - virDomainEventGraphicsSubjectIdentityPtr identities; /* Array of identities for subject */ -}; -typedef struct _virDomainEventGraphicsSubject virDomainEventGraphicsSubject; -typedef virDomainEventGraphicsSubject *virDomainEventGraphicsSubjectPtr; - - -/** - * virConnectDomainEventGraphicsCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @phase: the phase of the connection - * @local: the local server address - * @remote: the remote client address - * @authScheme: the authentication scheme activated - * @subject: the authenticated subject (user) - * @opaque: application specified data - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_GRAPHICS with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventGraphicsCallback)(virConnectPtr conn, - virDomainPtr dom, - int phase, - const virDomainEventGraphicsAddress *local, - const virDomainEventGraphicsAddress *remote, - const char *authScheme, - const virDomainEventGraphicsSubject *subject, - void *opaque); - -/** - * virConnectDomainEventBlockJobStatus: - * - * Tracks status of a virDomainBlockPull(), virDomainBlockRebase(), - * virDomainBlockCopy(), or virDomainBlockCommit() operation - */ -typedef enum { - VIR_DOMAIN_BLOCK_JOB_COMPLETED = 0, - VIR_DOMAIN_BLOCK_JOB_FAILED = 1, - VIR_DOMAIN_BLOCK_JOB_CANCELED = 2, - VIR_DOMAIN_BLOCK_JOB_READY = 3, - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_BLOCK_JOB_LAST -#endif -} virConnectDomainEventBlockJobStatus; - -/** - * virConnectDomainEventBlockJobCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @disk: name associated with the affected disk (filename or target - * device, depending on how the callback was registered) - * @type: type of block job (virDomainBlockJobType) - * @status: status of the operation (virConnectDomainEventBlockJobStatus) - * @opaque: application specified data - * - * The string returned for @disk can be used in any of the libvirt API - * that operate on a particular disk of the domain, and depends on what - * event type was registered with virConnectDomainEventRegisterAny(). - * If the callback was registered using the older type of - * VIR_DOMAIN_EVENT_ID_BLOCK_JOB, then @disk contains the absolute file - * name of the host resource for the active layer of the disk; however, - * this name is unstable (pivoting via block copy or active block commit - * will change which file is active, giving a different name for the two - * events associated with the same job) and cannot be relied on if the - * active layer is associated with a network resource. If the callback - * was registered using the newer type of VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2, - * then @disk will contain the device target shorthand (the <target - * dev='...'/> sub-element, such as "vda"). - */ -typedef void (*virConnectDomainEventBlockJobCallback)(virConnectPtr conn, - virDomainPtr dom, - const char *disk, - int type, - int status, - void *opaque); - -/** - * virConnectDomainEventDiskChangeReason: - * - * The reason describing why this callback is called - */ -typedef enum { - VIR_DOMAIN_EVENT_DISK_CHANGE_MISSING_ON_START = 0, /* oldSrcPath is set */ - VIR_DOMAIN_EVENT_DISK_DROP_MISSING_ON_START = 1, - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_DISK_CHANGE_LAST -#endif -} virConnectDomainEventDiskChangeReason; - -/** - * virConnectDomainEventDiskChangeCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @oldSrcPath: old source path - * @newSrcPath: new source path - * @devAlias: device alias name - * @reason: reason why this callback was called; any of - * virConnectDomainEventDiskChangeReason - * @opaque: application specified data - * - * This callback occurs when disk gets changed. However, - * not all @reason will cause both @oldSrcPath and @newSrcPath - * to be non-NULL. Please see virConnectDomainEventDiskChangeReason - * for more details. - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_DISK_CHANGE with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventDiskChangeCallback)(virConnectPtr conn, - virDomainPtr dom, - const char *oldSrcPath, - const char *newSrcPath, - const char *devAlias, - int reason, - void *opaque); - -/** - * virConnectDomainEventTrayChangeReason: - * - * The reason describing why the callback was called - */ -typedef enum { - VIR_DOMAIN_EVENT_TRAY_CHANGE_OPEN = 0, - VIR_DOMAIN_EVENT_TRAY_CHANGE_CLOSE, - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_TRAY_CHANGE_LAST -#endif -} virDomainEventTrayChangeReason; - -/** - * virConnectDomainEventTrayChangeCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @devAlias: device alias - * @reason: why the tray status was changed? - * @opaque: application specified data - * - * This callback occurs when the tray of a removable device is moved. - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_TRAY_CHANGE with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventTrayChangeCallback)(virConnectPtr conn, - virDomainPtr dom, - const char *devAlias, - int reason, - void *opaque); - -/** - * virConnectDomainEventPMWakeupCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @reason: reason why the callback was called, unused currently, - * always passes 0 - * @opaque: application specified data - * - * This callback occurs when the guest is woken up. - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_PMWAKEUP with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventPMWakeupCallback)(virConnectPtr conn, - virDomainPtr dom, - int reason, - void *opaque); - -/** - * virConnectDomainEventPMSuspendCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @reason: reason why the callback was called, unused currently, - * always passes 0 - * @opaque: application specified data - * - * This callback occurs when the guest is suspended. - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_PMSUSPEND with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventPMSuspendCallback)(virConnectPtr conn, - virDomainPtr dom, - int reason, - void *opaque); - - -/** - * virConnectDomainEventBalloonChangeCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @actual: the new balloon level measured in kibibytes(blocks of 1024 bytes) - * @opaque: application specified data - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventBalloonChangeCallback)(virConnectPtr conn, - virDomainPtr dom, - unsigned long long actual, - void *opaque); - -/** - * virConnectDomainEventPMSuspendDiskCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @reason: reason why the callback was called, unused currently, - * always passes 0 - * @opaque: application specified data - * - * This callback occurs when the guest is suspended to disk. - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventPMSuspendDiskCallback)(virConnectPtr conn, - virDomainPtr dom, - int reason, - void *opaque); - -/** - * virConnectDomainEventDeviceRemovedCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @devAlias: device alias - * @opaque: application specified data - * - * This callback occurs when a device is removed from the domain. - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventDeviceRemovedCallback)(virConnectPtr conn, - virDomainPtr dom, - const char *devAlias, - void *opaque); - -/** - * VIR_DOMAIN_TUNABLE_CPU_VCPUPIN: - * - * Macro represents formatted pinning for one vcpu specified by id which is - * appended to the parameter name, for example "cputune.vcpupin1", - * as VIR_TYPED_PARAM_STRING. - */ -#define VIR_DOMAIN_TUNABLE_CPU_VCPUPIN "cputune.vcpupin%u" - -/** - * VIR_DOMAIN_TUNABLE_CPU_EMULATORPIN: - * - * Macro represents formatted pinning for emulator process, - * as VIR_TYPED_PARAM_STRING. - */ -#define VIR_DOMAIN_TUNABLE_CPU_EMULATORPIN "cputune.emulatorpin" - -/** - * VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES: - * - * Macro represents proportional weight of the scheduler used on the - * host cpu, when using the posix scheduler, as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES "cputune.cpu_shares" - -/** - * VIR_DOMAIN_TUNABLE_CPU_VCPU_PERIOD: - * - * Macro represents the enforcement period for a quota, in microseconds, - * for vcpus only, when using the posix scheduler, as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_TUNABLE_CPU_VCPU_PERIOD "cputune.vcpu_period" - -/** - * VIR_DOMAIN_TUNABLE_CPU_VCPU_QUOTA: - * - * Macro represents the maximum bandwidth to be used within a period for - * vcpus only, when using the posix scheduler, as VIR_TYPED_PARAM_LLONG. - */ -#define VIR_DOMAIN_TUNABLE_CPU_VCPU_QUOTA "cputune.vcpu_quota" - -/** - * VIR_DOMAIN_TUNABLE_CPU_EMULATOR_PERIOD: - * - * Macro represents the enforcement period for a quota in microseconds, - * when using the posix scheduler, for all emulator activity not tied to - * vcpus, as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_TUNABLE_CPU_EMULATOR_PERIOD "cputune.emulator_period" - -/** - * VIR_DOMAIN_TUNABLE_CPU_EMULATOR_QUOTA: - * - * Macro represents the maximum bandwidth to be used within a period for - * all emulator activity not tied to vcpus, when using the posix scheduler, - * as an VIR_TYPED_PARAM_LLONG. - */ -#define VIR_DOMAIN_TUNABLE_CPU_EMULATOR_QUOTA "cputune.emulator_quota" - -/** - * VIR_DOMAIN_TUNABLE_BLKDEV_DISK: - * - * Macro represents the name of guest disk for which the values are updated, - * as VIR_TYPED_PARAM_STRING. - */ -#define VIR_DOMAIN_TUNABLE_BLKDEV_DISK "blkdeviotune.disk" - -/** - * VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_BYTES_SEC: - * - * Marco represents the total throughput limit in bytes per second, - * as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_BYTES_SEC "blkdeviotune.total_bytes_sec" - -/** - * VIR_DOMAIN_TUNABLE_BLKDEV_READ_BYTES_SEC: - * - * Marco represents the read throughput limit in bytes per second, - * as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_TUNABLE_BLKDEV_READ_BYTES_SEC "blkdeviotune.read_bytes_sec" - -/** - * VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_BYTES_SEC: - * - * Macro represents the write throughput limit in bytes per second, - * as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_BYTES_SEC "blkdeviotune.write_bytes_sec" - -/** - * VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_IOPS_SEC: - * - * Macro represents the total I/O operations per second, - * as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_IOPS_SEC "blkdeviotune.total_iops_sec" - -/** - * VIR_DOMAIN_TUNABLE_BLKDEV_READ_IOPS_SEC: - * - * Macro represents the read I/O operations per second, - * as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_TUNABLE_BLKDEV_READ_IOPS_SEC "blkdeviotune.read_iops_sec" - -/** - * VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_IOPS_SEC: - * - * Macro represents the write I/O operations per second, - * as VIR_TYPED_PARAM_ULLONG. - */ -#define VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_IOPS_SEC "blkdeviotune.write_iops_sec" - -/** - * virConnectDomainEventTunableCallback: - * @conn: connection object - * @dom: domain on which the event occurred - * @params: changed tunable values stored as array of virTypedParameter - * @nparams: size of the array - * @opaque: application specified data - * - * This callback occurs when tunable values are updated. The params must not - * be freed in the callback handler as it's done internally after the callback - * handler is executed. - * - * Currently supported name spaces: - * "cputune.*" - * "blkdeviotune.*" - * - * The callback signature to use when registering for an event of type - * VIR_DOMAIN_EVENT_ID_TUNABLE with virConnectDomainEventRegisterAny() - */ -typedef void (*virConnectDomainEventTunableCallback)(virConnectPtr conn, - virDomainPtr dom, - virTypedParameterPtr params, - int nparams, - void *opaque); - - -/** - * VIR_DOMAIN_EVENT_CALLBACK: - * - * Used to cast the event specific callback into the generic one - * for use for virConnectDomainEventRegisterAny() - */ -#define VIR_DOMAIN_EVENT_CALLBACK(cb) ((virConnectDomainEventGenericCallback)(cb)) - - -/** - * virDomainEventID: - * - * An enumeration of supported eventId parameters for - * virConnectDomainEventRegisterAny(). Each event id determines which - * signature of callback function will be used. - */ -typedef enum { - VIR_DOMAIN_EVENT_ID_LIFECYCLE = 0, /* virConnectDomainEventCallback */ - VIR_DOMAIN_EVENT_ID_REBOOT = 1, /* virConnectDomainEventGenericCallback */ - VIR_DOMAIN_EVENT_ID_RTC_CHANGE = 2, /* virConnectDomainEventRTCChangeCallback */ - VIR_DOMAIN_EVENT_ID_WATCHDOG = 3, /* virConnectDomainEventWatchdogCallback */ - VIR_DOMAIN_EVENT_ID_IO_ERROR = 4, /* virConnectDomainEventIOErrorCallback */ - VIR_DOMAIN_EVENT_ID_GRAPHICS = 5, /* virConnectDomainEventGraphicsCallback */ - VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON = 6, /* virConnectDomainEventIOErrorReasonCallback */ - VIR_DOMAIN_EVENT_ID_CONTROL_ERROR = 7, /* virConnectDomainEventGenericCallback */ - VIR_DOMAIN_EVENT_ID_BLOCK_JOB = 8, /* virConnectDomainEventBlockJobCallback */ - VIR_DOMAIN_EVENT_ID_DISK_CHANGE = 9, /* virConnectDomainEventDiskChangeCallback */ - VIR_DOMAIN_EVENT_ID_TRAY_CHANGE = 10, /* virConnectDomainEventTrayChangeCallback */ - VIR_DOMAIN_EVENT_ID_PMWAKEUP = 11, /* virConnectDomainEventPMWakeupCallback */ - VIR_DOMAIN_EVENT_ID_PMSUSPEND = 12, /* virConnectDomainEventPMSuspendCallback */ - VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE = 13, /* virConnectDomainEventBalloonChangeCallback */ - VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK = 14, /* virConnectDomainEventPMSuspendDiskCallback */ - VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED = 15, /* virConnectDomainEventDeviceRemovedCallback */ - VIR_DOMAIN_EVENT_ID_BLOCK_JOB_2 = 16, /* virConnectDomainEventBlockJobCallback */ - VIR_DOMAIN_EVENT_ID_TUNABLE = 17, /* virConnectDomainEventTunableCallback */ - -#ifdef VIR_ENUM_SENTINELS - VIR_DOMAIN_EVENT_ID_LAST - /* - * NB: this enum value will increase over time as new events are - * added to the libvirt API. It reflects the last event ID supported - * by this version of the libvirt API. - */ -#endif -} virDomainEventID; - - -/* Use VIR_DOMAIN_EVENT_CALLBACK() to cast the 'cb' parameter */ -int virConnectDomainEventRegisterAny(virConnectPtr conn, - virDomainPtr dom, /* Optional, to filter */ - int eventID, - virConnectDomainEventGenericCallback cb, - void *opaque, - virFreeCallback freecb); - -int virConnectDomainEventDeregisterAny(virConnectPtr conn, - int callbackID); - - -/** - * virDomainConsoleFlags - * - * Since 0.9.10 - */ -typedef enum { - - VIR_DOMAIN_CONSOLE_FORCE = (1 << 0), /* abort a (possibly) active console - connection to force a new - connection */ - VIR_DOMAIN_CONSOLE_SAFE = (1 << 1), /* check if the console driver supports - safe console operations */ -} virDomainConsoleFlags; - -int virDomainOpenConsole(virDomainPtr dom, - const char *dev_name, - virStreamPtr st, - unsigned int flags); - -/** - * virDomainChannelFlags - * - * Since 1.0.2 - */ -typedef enum { - VIR_DOMAIN_CHANNEL_FORCE = (1 << 0), /* abort a (possibly) active channel - connection to force a new - connection */ -} virDomainChannelFlags; - -int virDomainOpenChannel(virDomainPtr dom, - const char *name, - virStreamPtr st, - unsigned int flags); - -typedef enum { - VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH = (1 << 0), -} virDomainOpenGraphicsFlags; - -int virDomainOpenGraphics(virDomainPtr dom, - unsigned int idx, - int fd, - unsigned int flags); + VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES = (1 << 0), /* show all features */ +} virConnectBaselineCPUFlags; -int virDomainOpenGraphicsFD(virDomainPtr dom, - unsigned int idx, +char *virConnectBaselineCPU(virConnectPtr conn, + const char **xmlCPUs, + unsigned int ncpus, unsigned int flags); -int virDomainInjectNMI(virDomainPtr domain, unsigned int flags); - -int virDomainFSTrim(virDomainPtr dom, - const char *mountPoint, - unsigned long long minimum, - unsigned int flags); - -int virDomainFSFreeze(virDomainPtr dom, - const char **mountpoints, - unsigned int nmountpoints, - unsigned int flags); - -int virDomainFSThaw(virDomainPtr dom, - const char **mountpoints, - unsigned int nmountpoints, - unsigned int flags); - -int virDomainGetTime(virDomainPtr dom, - long long *seconds, - unsigned int *nseconds, - unsigned int flags); - -typedef enum { - VIR_DOMAIN_TIME_SYNC = (1 << 0), /* Re-sync domain time from domain's RTC */ -} virDomainSetTimeFlags; - -int virDomainSetTime(virDomainPtr dom, - long long seconds, - unsigned int nseconds, - unsigned int flags); int virNodeGetFreePages(virConnectPtr conn, unsigned int npages, @@ -4277,142 +945,9 @@ int virNodeAllocPages(virConnectPtr conn, int startCell, unsigned int cellCount, unsigned int flags); -/** - * virSchedParameterType: - * - * A scheduler parameter field type. Provided for backwards - * compatibility; virTypedParameterType is the preferred enum since - * 0.9.2. - */ -typedef enum { - VIR_DOMAIN_SCHED_FIELD_INT = VIR_TYPED_PARAM_INT, - VIR_DOMAIN_SCHED_FIELD_UINT = VIR_TYPED_PARAM_UINT, - VIR_DOMAIN_SCHED_FIELD_LLONG = VIR_TYPED_PARAM_LLONG, - VIR_DOMAIN_SCHED_FIELD_ULLONG = VIR_TYPED_PARAM_ULLONG, - VIR_DOMAIN_SCHED_FIELD_DOUBLE = VIR_TYPED_PARAM_DOUBLE, - VIR_DOMAIN_SCHED_FIELD_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN, -} virSchedParameterType; - -/** - * VIR_DOMAIN_SCHED_FIELD_LENGTH: - * - * Macro providing the field length of virSchedParameter. Provided - * for backwards compatibility; VIR_TYPED_PARAM_FIELD_LENGTH is the - * preferred value since 0.9.2. - */ -#define VIR_DOMAIN_SCHED_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH - -/** - * virSchedParameter: - * - * a virSchedParameter is the set of scheduler parameters. - * Provided for backwards compatibility; virTypedParameter is the - * preferred alias since 0.9.2. - */ -#define _virSchedParameter _virTypedParameter -typedef struct _virTypedParameter virSchedParameter; - -/** - * virSchedParameterPtr: - * - * a virSchedParameterPtr is a pointer to a virSchedParameter structure. - * Provided for backwards compatibility; virTypedParameterPtr is the - * preferred alias since 0.9.2. - */ -typedef virSchedParameter *virSchedParameterPtr; - -/** - * virBlkioParameterType: - * - * A blkio parameter field type. Provided for backwards - * compatibility; virTypedParameterType is the preferred enum since - * 0.9.2. - */ -typedef enum { - VIR_DOMAIN_BLKIO_PARAM_INT = VIR_TYPED_PARAM_INT, - VIR_DOMAIN_BLKIO_PARAM_UINT = VIR_TYPED_PARAM_UINT, - VIR_DOMAIN_BLKIO_PARAM_LLONG = VIR_TYPED_PARAM_LLONG, - VIR_DOMAIN_BLKIO_PARAM_ULLONG = VIR_TYPED_PARAM_ULLONG, - VIR_DOMAIN_BLKIO_PARAM_DOUBLE = VIR_TYPED_PARAM_DOUBLE, - VIR_DOMAIN_BLKIO_PARAM_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN, -} virBlkioParameterType; - -/** - * VIR_DOMAIN_BLKIO_FIELD_LENGTH: - * - * Macro providing the field length of virBlkioParameter. Provided - * for backwards compatibility; VIR_TYPED_PARAM_FIELD_LENGTH is the - * preferred value since 0.9.2. - */ -#define VIR_DOMAIN_BLKIO_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH - -/** - * virBlkioParameter: - * - * a virBlkioParameter is the set of blkio parameters. - * Provided for backwards compatibility; virTypedParameter is the - * preferred alias since 0.9.2. - */ -#define _virBlkioParameter _virTypedParameter -typedef struct _virTypedParameter virBlkioParameter; - -/** - * virBlkioParameterPtr: - * - * a virBlkioParameterPtr is a pointer to a virBlkioParameter structure. - * Provided for backwards compatibility; virTypedParameterPtr is the - * preferred alias since 0.9.2. - */ -typedef virBlkioParameter *virBlkioParameterPtr; - -/** - * virMemoryParameterType: - * - * A memory parameter field type. Provided for backwards - * compatibility; virTypedParameterType is the preferred enum since - * 0.9.2. - */ -typedef enum { - VIR_DOMAIN_MEMORY_PARAM_INT = VIR_TYPED_PARAM_INT, - VIR_DOMAIN_MEMORY_PARAM_UINT = VIR_TYPED_PARAM_UINT, - VIR_DOMAIN_MEMORY_PARAM_LLONG = VIR_TYPED_PARAM_LLONG, - VIR_DOMAIN_MEMORY_PARAM_ULLONG = VIR_TYPED_PARAM_ULLONG, - VIR_DOMAIN_MEMORY_PARAM_DOUBLE = VIR_TYPED_PARAM_DOUBLE, - VIR_DOMAIN_MEMORY_PARAM_BOOLEAN = VIR_TYPED_PARAM_BOOLEAN, -} virMemoryParameterType; - -/** - * VIR_DOMAIN_MEMORY_FIELD_LENGTH: - * - * Macro providing the field length of virMemoryParameter. Provided - * for backwards compatibility; VIR_TYPED_PARAM_FIELD_LENGTH is the - * preferred value since 0.9.2. - */ -#define VIR_DOMAIN_MEMORY_FIELD_LENGTH VIR_TYPED_PARAM_FIELD_LENGTH - -/** - * virMemoryParameter: - * - * a virMemoryParameter is the set of scheduler parameters. - * Provided for backwards compatibility; virTypedParameter is the - * preferred alias since 0.9.2. - */ -#define _virMemoryParameter _virTypedParameter -typedef struct _virTypedParameter virMemoryParameter; - -/** - * virMemoryParameterPtr: - * - * a virMemoryParameterPtr is a pointer to a virMemoryParameter structure. - * Provided for backwards compatibility; virTypedParameterPtr is the - * preferred alias since 0.9.2. - */ -typedef virMemoryParameter *virMemoryParameterPtr; - -/* Add new interfaces to the appropriate sections earlier in this - * file; the end of the file is reserved for deprecated names. */ #define __VIR_LIBVIRT_H_INCLUDES__ +#include <libvirt/libvirt-domain.h> #include <libvirt/libvirt-domain-snapshot.h> #include <libvirt/libvirt-event.h> #include <libvirt/libvirt-interface.h> -- 2.1.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list