domain_conf.h 52.3 KB
Newer Older
1 2 3
/*
 * domain_conf.h: domain XML processing
 *
4
 * Copyright (C) 2006-2011 Red Hat, Inc.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 * Copyright (C) 2006-2008 Daniel P. Berrange
 *
 * 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
 *
 * Author: Daniel P. Berrange <berrange@redhat.com>
 */

#ifndef __DOMAIN_CONF_H
25
# define __DOMAIN_CONF_H
26

27 28 29
# include <libxml/parser.h>
# include <libxml/tree.h>
# include <libxml/xpath.h>
30

31 32 33 34 35 36 37 38
# include "internal.h"
# include "capabilities.h"
# include "storage_encryption_conf.h"
# include "cpu_conf.h"
# include "util.h"
# include "threads.h"
# include "hash.h"
# include "network.h"
39 40
# include "nwfilter_params.h"
# include "nwfilter_conf.h"
41
# include "macvtap.h"
42
# include "sysinfo.h"
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58

/* Different types of hypervisor */
/* NB: Keep in sync with virDomainVirtTypeToString impl */
enum virDomainVirtType {
    VIR_DOMAIN_VIRT_QEMU,
    VIR_DOMAIN_VIRT_KQEMU,
    VIR_DOMAIN_VIRT_KVM,
    VIR_DOMAIN_VIRT_XEN,
    VIR_DOMAIN_VIRT_LXC,
    VIR_DOMAIN_VIRT_UML,
    VIR_DOMAIN_VIRT_OPENVZ,
    VIR_DOMAIN_VIRT_VSERVER,
    VIR_DOMAIN_VIRT_LDOM,
    VIR_DOMAIN_VIRT_TEST,
    VIR_DOMAIN_VIRT_VMWARE,
    VIR_DOMAIN_VIRT_HYPERV,
59
    VIR_DOMAIN_VIRT_VBOX,
D
Daniel Veillard 已提交
60
    VIR_DOMAIN_VIRT_ONE,
61
    VIR_DOMAIN_VIRT_PHYP,
62 63 64 65

    VIR_DOMAIN_VIRT_LAST,
};

66 67 68
enum virDomainDeviceAddressType {
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE,
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI,
69
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE,
70
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL,
E
Eric Blake 已提交
71
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCID,
72 73 74 75 76 77 78 79 80 81 82 83 84

    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST
};

typedef struct _virDomainDevicePCIAddress virDomainDevicePCIAddress;
typedef virDomainDevicePCIAddress *virDomainDevicePCIAddressPtr;
struct _virDomainDevicePCIAddress {
    unsigned int domain;
    unsigned int bus;
    unsigned int slot;
    unsigned int function;
};

85 86 87 88 89 90 91 92
typedef struct _virDomainDeviceDriveAddress virDomainDeviceDriveAddress;
typedef virDomainDeviceDriveAddress *virDomainDeviceDriveAddressPtr;
struct _virDomainDeviceDriveAddress {
    unsigned int controller;
    unsigned int bus;
    unsigned int unit;
};

93 94 95 96 97
typedef struct _virDomainDeviceVirtioSerialAddress virDomainDeviceVirtioSerialAddress;
typedef virDomainDeviceVirtioSerialAddress *virDomainDeviceVirtioSerialAddressPtr;
struct _virDomainDeviceVirtioSerialAddress {
    unsigned int controller;
    unsigned int bus;
98
    unsigned int port;
99 100
};

E
Eric Blake 已提交
101 102 103 104 105 106 107
typedef struct _virDomainDeviceCcidAddress virDomainDeviceCcidAddress;
typedef virDomainDeviceCcidAddress *virDomainDeviceCcidAddressPtr;
struct _virDomainDeviceCcidAddress {
    unsigned int controller;
    unsigned int slot;
};

108 109 110
typedef struct _virDomainDeviceInfo virDomainDeviceInfo;
typedef virDomainDeviceInfo *virDomainDeviceInfoPtr;
struct _virDomainDeviceInfo {
D
Daniel P. Berrange 已提交
111
    char *alias;
112 113 114
    int type;
    union {
        virDomainDevicePCIAddress pci;
115
        virDomainDeviceDriveAddress drive;
116
        virDomainDeviceVirtioSerialAddress vioserial;
E
Eric Blake 已提交
117
        virDomainDeviceCcidAddress ccid;
118 119 120
    } addr;
};

121 122 123 124 125 126 127 128 129
typedef struct _virDomainLeaseDef virDomainLeaseDef;
typedef virDomainLeaseDef *virDomainLeaseDefPtr;
struct _virDomainLeaseDef {
    char *lockspace;
    char *key;
    char *path;
    unsigned long long offset;
};

130

131 132 133 134
/* Two types of disk backends */
enum virDomainDiskType {
    VIR_DOMAIN_DISK_TYPE_BLOCK,
    VIR_DOMAIN_DISK_TYPE_FILE,
135
    VIR_DOMAIN_DISK_TYPE_DIR,
M
MORITA Kazutaka 已提交
136
    VIR_DOMAIN_DISK_TYPE_NETWORK,
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155

    VIR_DOMAIN_DISK_TYPE_LAST
};

/* Three types of disk frontend */
enum virDomainDiskDevice {
    VIR_DOMAIN_DISK_DEVICE_DISK,
    VIR_DOMAIN_DISK_DEVICE_CDROM,
    VIR_DOMAIN_DISK_DEVICE_FLOPPY,

    VIR_DOMAIN_DISK_DEVICE_LAST
};

enum virDomainDiskBus {
    VIR_DOMAIN_DISK_BUS_IDE,
    VIR_DOMAIN_DISK_BUS_FDC,
    VIR_DOMAIN_DISK_BUS_SCSI,
    VIR_DOMAIN_DISK_BUS_VIRTIO,
    VIR_DOMAIN_DISK_BUS_XEN,
156
    VIR_DOMAIN_DISK_BUS_USB,
157
    VIR_DOMAIN_DISK_BUS_UML,
158
    VIR_DOMAIN_DISK_BUS_SATA,
159 160 161 162

    VIR_DOMAIN_DISK_BUS_LAST
};

163 164 165 166 167
enum  virDomainDiskCache {
    VIR_DOMAIN_DISK_CACHE_DEFAULT,
    VIR_DOMAIN_DISK_CACHE_DISABLE,
    VIR_DOMAIN_DISK_CACHE_WRITETHRU,
    VIR_DOMAIN_DISK_CACHE_WRITEBACK,
168
    VIR_DOMAIN_DISK_CACHE_DIRECTSYNC,
169 170 171 172

    VIR_DOMAIN_DISK_CACHE_LAST
};

173 174 175 176
enum  virDomainDiskErrorPolicy {
    VIR_DOMAIN_DISK_ERROR_POLICY_DEFAULT,
    VIR_DOMAIN_DISK_ERROR_POLICY_STOP,
    VIR_DOMAIN_DISK_ERROR_POLICY_IGNORE,
177
    VIR_DOMAIN_DISK_ERROR_POLICY_ENOSPACE,
178 179 180 181

    VIR_DOMAIN_DISK_ERROR_POLICY_LAST
};

M
MORITA Kazutaka 已提交
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
enum virDomainDiskProtocol {
    VIR_DOMAIN_DISK_PROTOCOL_NBD,
    VIR_DOMAIN_DISK_PROTOCOL_RBD,
    VIR_DOMAIN_DISK_PROTOCOL_SHEEPDOG,

    VIR_DOMAIN_DISK_PROTOCOL_LAST
};

typedef struct _virDomainDiskHostDef virDomainDiskHostDef;
typedef virDomainDiskHostDef *virDomainDiskHostDefPtr;
struct _virDomainDiskHostDef {
    char *name;
    char *port;
};

M
Matthias Dahl 已提交
197 198 199 200 201 202 203 204
enum  virDomainDiskIo {
    VIR_DOMAIN_DISK_IO_DEFAULT,
    VIR_DOMAIN_DISK_IO_NATIVE,
    VIR_DOMAIN_DISK_IO_THREADS,

    VIR_DOMAIN_DISK_IO_LAST
};

205 206 207 208 209 210 211 212
enum virDomainIoEventFd {
    VIR_DOMAIN_IO_EVENT_FD_DEFAULT = 0,
    VIR_DOMAIN_IO_EVENT_FD_ON,
    VIR_DOMAIN_IO_EVENT_FD_OFF,

    VIR_DOMAIN_IO_EVENT_FD_LAST
};

213 214 215 216 217 218 219 220
enum virDomainVirtioEventIdx {
    VIR_DOMAIN_VIRTIO_EVENT_IDX_DEFAULT = 0,
    VIR_DOMAIN_VIRTIO_EVENT_IDX_ON,
    VIR_DOMAIN_VIRTIO_EVENT_IDX_OFF,

    VIR_DOMAIN_VIRTIO_EVENT_IDX_LAST
};

221 222 223 224 225 226 227 228 229
/* Stores the virtual disk configuration */
typedef struct _virDomainDiskDef virDomainDiskDef;
typedef virDomainDiskDef *virDomainDiskDefPtr;
struct _virDomainDiskDef {
    int type;
    int device;
    int bus;
    char *src;
    char *dst;
M
MORITA Kazutaka 已提交
230 231 232
    int protocol;
    int nhosts;
    virDomainDiskHostDefPtr hosts;
233 234
    char *driverName;
    char *driverType;
235
    char *serial;
236
    int cachemode;
237
    int error_policy;
238
    int bootIndex;
M
Matthias Dahl 已提交
239
    int iomode;
240
    int ioeventfd;
241
    int event_idx;
242 243
    unsigned int readonly : 1;
    unsigned int shared : 1;
244
    virDomainDeviceInfo info;
245
    virStorageEncryptionPtr encryption;
246 247 248
};


249 250 251 252 253
enum virDomainControllerType {
    VIR_DOMAIN_CONTROLLER_TYPE_IDE,
    VIR_DOMAIN_CONTROLLER_TYPE_FDC,
    VIR_DOMAIN_CONTROLLER_TYPE_SCSI,
    VIR_DOMAIN_CONTROLLER_TYPE_SATA,
254
    VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL,
E
Eric Blake 已提交
255
    VIR_DOMAIN_CONTROLLER_TYPE_CCID,
256 257 258 259

    VIR_DOMAIN_CONTROLLER_TYPE_LAST
};

260 261

enum virDomainControllerModel {
262
    VIR_DOMAIN_CONTROLLER_MODEL_AUTO,
263 264 265
    VIR_DOMAIN_CONTROLLER_MODEL_BUSLOGIC,
    VIR_DOMAIN_CONTROLLER_MODEL_LSILOGIC,
    VIR_DOMAIN_CONTROLLER_MODEL_LSISAS1068,
266
    VIR_DOMAIN_CONTROLLER_MODEL_VMPVSCSI,
267 268 269 270

    VIR_DOMAIN_CONTROLLER_MODEL_LAST
};

271 272 273 274 275 276 277
typedef struct _virDomainVirtioSerialOpts virDomainVirtioSerialOpts;
typedef virDomainVirtioSerialOpts *virDomainVirtioSerialOptsPtr;
struct _virDomainVirtioSerialOpts {
    int ports;   /* -1 == undef */
    int vectors; /* -1 == undef */
};

278 279 280 281 282 283
/* Stores the virtual disk controller configuration */
typedef struct _virDomainControllerDef virDomainControllerDef;
typedef virDomainControllerDef *virDomainControllerDefPtr;
struct _virDomainControllerDef {
    int type;
    int idx;
284
    int model; /* -1 == undef */
285 286 287
    union {
        virDomainVirtioSerialOpts vioserial;
    } opts;
288 289 290 291
    virDomainDeviceInfo info;
};


292 293 294 295 296 297 298 299 300 301
/* Two types of disk backends */
enum virDomainFSType {
    VIR_DOMAIN_FS_TYPE_MOUNT,   /* Better named 'bind' */
    VIR_DOMAIN_FS_TYPE_BLOCK,
    VIR_DOMAIN_FS_TYPE_FILE,
    VIR_DOMAIN_FS_TYPE_TEMPLATE,

    VIR_DOMAIN_FS_TYPE_LAST
};

302 303 304 305 306 307 308 309 310
/* Filesystem mount access mode  */
enum virDomainFSAccessMode {
    VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH,
    VIR_DOMAIN_FS_ACCESSMODE_MAPPED,
    VIR_DOMAIN_FS_ACCESSMODE_SQUASH,

    VIR_DOMAIN_FS_ACCESSMODE_LAST
};

311 312 313 314
typedef struct _virDomainFSDef virDomainFSDef;
typedef virDomainFSDef *virDomainFSDefPtr;
struct _virDomainFSDef {
    int type;
315
    int accessmode;
316 317 318
    char *src;
    char *dst;
    unsigned int readonly : 1;
319
    virDomainDeviceInfo info;
320 321 322
};


323 324 325 326 327 328 329 330 331
/* 5 different types of networking config */
enum virDomainNetType {
    VIR_DOMAIN_NET_TYPE_USER,
    VIR_DOMAIN_NET_TYPE_ETHERNET,
    VIR_DOMAIN_NET_TYPE_SERVER,
    VIR_DOMAIN_NET_TYPE_CLIENT,
    VIR_DOMAIN_NET_TYPE_MCAST,
    VIR_DOMAIN_NET_TYPE_NETWORK,
    VIR_DOMAIN_NET_TYPE_BRIDGE,
D
Daniel Veillard 已提交
332
    VIR_DOMAIN_NET_TYPE_INTERNAL,
333
    VIR_DOMAIN_NET_TYPE_DIRECT,
334 335 336 337

    VIR_DOMAIN_NET_TYPE_LAST,
};

338 339 340 341 342 343 344 345
/* the backend driver used for virtio interfaces */
enum virDomainNetBackendType {
    VIR_DOMAIN_NET_BACKEND_TYPE_DEFAULT, /* prefer kernel, fall back to user */
    VIR_DOMAIN_NET_BACKEND_TYPE_QEMU,    /* userland */
    VIR_DOMAIN_NET_BACKEND_TYPE_VHOST,   /* kernel */

    VIR_DOMAIN_NET_BACKEND_TYPE_LAST,
};
346

347 348 349 350 351 352 353 354 355
/* the TX algorithm used for virtio interfaces */
enum virDomainNetVirtioTxModeType {
    VIR_DOMAIN_NET_VIRTIO_TX_MODE_DEFAULT, /* default for this version of qemu */
    VIR_DOMAIN_NET_VIRTIO_TX_MODE_IOTHREAD,
    VIR_DOMAIN_NET_VIRTIO_TX_MODE_TIMER,

    VIR_DOMAIN_NET_VIRTIO_TX_MODE_LAST,
};

356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374
/* Config that was actually used to bring up interface, after
 * resolving network reference. This is private data, only used within
 * libvirt, but still must maintain backward compatibility, because
 * different versions of libvirt may read the same data file.
 */
typedef struct _virDomainActualNetDef virDomainActualNetDef;
typedef virDomainActualNetDef *virDomainActualNetDefPtr;
struct _virDomainActualNetDef {
    int type; /* enum virDomainNetType */
    union {
        struct {
            char *brname;
        } bridge;
        struct {
            char *linkdev;
            int mode; /* enum virMacvtapMode from util/macvtap.h */
            virVirtualPortProfileParamsPtr virtPortProfile;
        } direct;
    } data;
375
    virBandwidthPtr bandwidth;
376 377
};

378 379 380 381
/* Stores the virtual network interface configuration */
typedef struct _virDomainNetDef virDomainNetDef;
typedef virDomainNetDef *virDomainNetDefPtr;
struct _virDomainNetDef {
S
Stefan Berger 已提交
382
    enum virDomainNetType type;
383
    unsigned char mac[VIR_MAC_BUFLEN];
384
    char *model;
385 386 387
    union {
        struct {
            enum virDomainNetBackendType name; /* which driver backend to use */
388
            enum virDomainNetVirtioTxModeType txmode;
389
            enum virDomainIoEventFd ioeventfd;
390
            enum virDomainVirtioEventIdx event_idx;
391 392
        } virtio;
    } driver;
393 394 395 396 397 398 399 400 401 402 403 404
    union {
        struct {
            char *dev;
            char *script;
            char *ipaddr;
        } ethernet;
        struct {
            char *address;
            int port;
        } socket; /* any of NET_CLIENT or NET_SERVER or NET_MCAST */
        struct {
            char *name;
405 406 407 408 409 410 411 412 413 414 415
            char *portgroup;
            virVirtualPortProfileParamsPtr virtPortProfile;
            /* actual has info about the currently used physical
             * device (if the network is of type
             * bridge/private/vepa/passthrough). This is saved in the
             * domain state, but never written to persistent config,
             * since it needs to be re-allocated whenever the domain
             * is restarted. It is also never shown to the user, and
             * the user cannot specify it in XML documents.
             */
            virDomainActualNetDefPtr actual;
416 417 418
        } network;
        struct {
            char *brname;
419
            char *script;
420
            char *ipaddr;
421
        } bridge;
D
Daniel Veillard 已提交
422 423 424
        struct {
            char *name;
        } internal;
425 426
        struct {
            char *linkdev;
427
            int mode; /* enum virMacvtapMode from util/macvtap.h */
428
            virVirtualPortProfileParamsPtr virtPortProfile;
429
        } direct;
430
    } data;
431 432 433 434
    struct {
        bool sndbuf_specified;
        unsigned long sndbuf;
    } tune;
435
    char *ifname;
436
    int bootIndex;
437
    virDomainDeviceInfo info;
438 439
    char *filter;
    virNWFilterHashTablePtr filterparams;
440
    virBandwidthPtr bandwidth;
441 442
};

E
Eric Blake 已提交
443 444 445 446
/* Used for prefix of ifname of any network name generated dynamically
 * by libvirt, and cannot be used for a persistent network name.  */
# define VIR_NET_GENERATED_PREFIX "vnet"

447
enum virDomainChrDeviceType {
448
    VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL = 0,
449 450
    VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL,
    VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE,
451
    VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL,
452

453 454 455 456 457 458 459 460
    VIR_DOMAIN_CHR_DEVICE_TYPE_LAST,
};

enum virDomainChrChannelTargetType {
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD = 0,
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO,

    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST,
461 462
};

463 464 465 466
enum virDomainChrConsoleTargetType {
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL = 0,
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN,
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_UML,
C
Cole Robinson 已提交
467
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO,
468 469 470 471

    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LAST,
};

472
enum virDomainChrType {
473 474 475 476 477 478 479 480 481 482
    VIR_DOMAIN_CHR_TYPE_NULL,
    VIR_DOMAIN_CHR_TYPE_VC,
    VIR_DOMAIN_CHR_TYPE_PTY,
    VIR_DOMAIN_CHR_TYPE_DEV,
    VIR_DOMAIN_CHR_TYPE_FILE,
    VIR_DOMAIN_CHR_TYPE_PIPE,
    VIR_DOMAIN_CHR_TYPE_STDIO,
    VIR_DOMAIN_CHR_TYPE_UDP,
    VIR_DOMAIN_CHR_TYPE_TCP,
    VIR_DOMAIN_CHR_TYPE_UNIX,
483
    VIR_DOMAIN_CHR_TYPE_SPICEVMC,
484 485 486 487 488 489 490

    VIR_DOMAIN_CHR_TYPE_LAST,
};

enum virDomainChrTcpProtocol {
    VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW,
    VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET,
491 492
    VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNETS, /* secure telnet */
    VIR_DOMAIN_CHR_TCP_PROTOCOL_TLS,
493 494 495 496

    VIR_DOMAIN_CHR_TCP_PROTOCOL_LAST,
};

E
Eric Blake 已提交
497 498 499 500 501 502 503
enum virDomainChrSpicevmcName {
    VIR_DOMAIN_CHR_SPICEVMC_VDAGENT,
    VIR_DOMAIN_CHR_SPICEVMC_SMARTCARD,

    VIR_DOMAIN_CHR_SPICEVMC_LAST,
};

504 505 506 507 508
/* The host side information for a character device.  */
typedef struct _virDomainChrSourceDef virDomainChrSourceDef;
typedef virDomainChrSourceDef *virDomainChrSourceDefPtr;
struct _virDomainChrSourceDef {
    int type; /* virDomainChrType */
509
    union {
E
Eric Blake 已提交
510
        /* no <source> for null, vc, stdio */
511 512 513 514 515 516
        struct {
            char *path;
        } file; /* pty, file, pipe, or device */
        struct {
            char *host;
            char *service;
517
            bool listen;
518 519 520 521 522 523 524 525 526 527
            int protocol;
        } tcp;
        struct {
            char *bindHost;
            char *bindService;
            char *connectHost;
            char *connectService;
        } udp;
        struct {
            char *path;
528
            bool listen;
529
        } nix;
E
Eric Blake 已提交
530
        int spicevmc;
531
    } data;
532 533 534 535 536 537 538 539 540 541 542 543 544 545 546
};

/* A complete character device, both host and domain views.  */
typedef struct _virDomainChrDef virDomainChrDef;
typedef virDomainChrDef *virDomainChrDefPtr;
struct _virDomainChrDef {
    int deviceType;
    int targetType;
    union {
        int port; /* parallel, serial, console */
        virSocketAddrPtr addr; /* guestfwd */
        char *name; /* virtio */
    } target;

    virDomainChrSourceDef source;
547 548

    virDomainDeviceInfo info;
549 550
};

E
Eric Blake 已提交
551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577
enum virDomainSmartcardType {
    VIR_DOMAIN_SMARTCARD_TYPE_HOST,
    VIR_DOMAIN_SMARTCARD_TYPE_HOST_CERTIFICATES,
    VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH,

    VIR_DOMAIN_SMARTCARD_TYPE_LAST,
};

# define VIR_DOMAIN_SMARTCARD_NUM_CERTIFICATES 3
# define VIR_DOMAIN_SMARTCARD_DEFAULT_DATABASE "/etc/pki/nssdb"

typedef struct _virDomainSmartcardDef virDomainSmartcardDef;
typedef virDomainSmartcardDef *virDomainSmartcardDefPtr;
struct _virDomainSmartcardDef {
    int type; /* virDomainSmartcardType */
    union {
        /* no extra data for 'host' */
        struct {
            char *file[VIR_DOMAIN_SMARTCARD_NUM_CERTIFICATES];
            char *database;
        } cert; /* 'host-certificates' */
        virDomainChrSourceDef passthru; /* 'passthrough' */
    } data;

    virDomainDeviceInfo info;
};

578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597
enum virDomainInputType {
    VIR_DOMAIN_INPUT_TYPE_MOUSE,
    VIR_DOMAIN_INPUT_TYPE_TABLET,

    VIR_DOMAIN_INPUT_TYPE_LAST,
};

enum virDomainInputBus {
    VIR_DOMAIN_INPUT_BUS_PS2,
    VIR_DOMAIN_INPUT_BUS_USB,
    VIR_DOMAIN_INPUT_BUS_XEN,

    VIR_DOMAIN_INPUT_BUS_LAST
};

typedef struct _virDomainInputDef virDomainInputDef;
typedef virDomainInputDef *virDomainInputDefPtr;
struct _virDomainInputDef {
    int type;
    int bus;
598
    virDomainDeviceInfo info;
599 600 601 602 603 604
};

enum virDomainSoundModel {
    VIR_DOMAIN_SOUND_MODEL_SB16,
    VIR_DOMAIN_SOUND_MODEL_ES1370,
    VIR_DOMAIN_SOUND_MODEL_PCSPK,
D
Daniel P. Berrange 已提交
605
    VIR_DOMAIN_SOUND_MODEL_AC97,
606
    VIR_DOMAIN_SOUND_MODEL_ICH6,
607 608 609 610 611 612 613 614

    VIR_DOMAIN_SOUND_MODEL_LAST
};

typedef struct _virDomainSoundDef virDomainSoundDef;
typedef virDomainSoundDef *virDomainSoundDefPtr;
struct _virDomainSoundDef {
    int model;
615
    virDomainDeviceInfo info;
616 617
};

R
Richard Jones 已提交
618 619 620 621 622 623 624 625 626 627 628 629
enum virDomainWatchdogModel {
    VIR_DOMAIN_WATCHDOG_MODEL_I6300ESB,
    VIR_DOMAIN_WATCHDOG_MODEL_IB700,

    VIR_DOMAIN_WATCHDOG_MODEL_LAST
};

enum virDomainWatchdogAction {
    VIR_DOMAIN_WATCHDOG_ACTION_RESET,
    VIR_DOMAIN_WATCHDOG_ACTION_SHUTDOWN,
    VIR_DOMAIN_WATCHDOG_ACTION_POWEROFF,
    VIR_DOMAIN_WATCHDOG_ACTION_PAUSE,
H
Hu Tao 已提交
630
    VIR_DOMAIN_WATCHDOG_ACTION_DUMP,
R
Richard Jones 已提交
631 632 633 634 635 636 637 638 639 640
    VIR_DOMAIN_WATCHDOG_ACTION_NONE,

    VIR_DOMAIN_WATCHDOG_ACTION_LAST
};

typedef struct _virDomainWatchdogDef virDomainWatchdogDef;
typedef virDomainWatchdogDef *virDomainWatchdogDefPtr;
struct _virDomainWatchdogDef {
    int model;
    int action;
641
    virDomainDeviceInfo info;
R
Richard Jones 已提交
642 643
};

644 645 646 647 648 649 650

enum virDomainVideoType {
    VIR_DOMAIN_VIDEO_TYPE_VGA,
    VIR_DOMAIN_VIDEO_TYPE_CIRRUS,
    VIR_DOMAIN_VIDEO_TYPE_VMVGA,
    VIR_DOMAIN_VIDEO_TYPE_XEN,
    VIR_DOMAIN_VIDEO_TYPE_VBOX,
651
    VIR_DOMAIN_VIDEO_TYPE_QXL,
652 653 654 655 656

    VIR_DOMAIN_VIDEO_TYPE_LAST
};


657 658 659
typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef;
typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr;
struct _virDomainVideoAccelDef {
660 661
    unsigned int support3d :1;
    unsigned int support2d :1;
662 663 664
};


665 666 667 668 669 670
typedef struct _virDomainVideoDef virDomainVideoDef;
typedef virDomainVideoDef *virDomainVideoDefPtr;
struct _virDomainVideoDef {
    int type;
    unsigned int vram;
    unsigned int heads;
671
    virDomainVideoAccelDefPtr accel;
672
    virDomainDeviceInfo info;
673 674
};

675 676 677 678
/* 3 possible graphics console modes */
enum virDomainGraphicsType {
    VIR_DOMAIN_GRAPHICS_TYPE_SDL,
    VIR_DOMAIN_GRAPHICS_TYPE_VNC,
679 680
    VIR_DOMAIN_GRAPHICS_TYPE_RDP,
    VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP,
681
    VIR_DOMAIN_GRAPHICS_TYPE_SPICE,
682 683 684 685

    VIR_DOMAIN_GRAPHICS_TYPE_LAST,
};

686 687 688 689 690 691 692 693 694
enum virDomainGraphicsAuthConnectedType {
    VIR_DOMAIN_GRAPHICS_AUTH_CONNECTED_DEFAULT = 0,
    VIR_DOMAIN_GRAPHICS_AUTH_CONNECTED_FAIL,
    VIR_DOMAIN_GRAPHICS_AUTH_CONNECTED_DISCONNECT,
    VIR_DOMAIN_GRAPHICS_AUTH_CONNECTED_KEEP,

    VIR_DOMAIN_GRAPHICS_AUTH_CONNECTED_LAST
};

695 696 697 698 699 700
typedef struct _virDomainGraphicsAuthDef virDomainGraphicsAuthDef;
typedef virDomainGraphicsAuthDef *virDomainGraphicsAuthDefPtr;
struct _virDomainGraphicsAuthDef {
    char *passwd;
    unsigned int expires: 1; /* Whether there is an expiry time set */
    time_t validTo;  /* seconds since epoch */
701
    int connected; /* action if connected */
702 703
};

704 705 706 707 708 709 710
enum virDomainGraphicsSpiceChannelName {
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MAIN,
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_DISPLAY,
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_INPUT,
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_CURSOR,
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_PLAYBACK,
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_RECORD,
E
Eric Blake 已提交
711
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_SMARTCARD,
712 713 714 715 716 717 718 719 720 721 722

    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST
};

enum virDomainGraphicsSpiceChannelMode {
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_ANY,
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_SECURE,
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_INSECURE,

    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_MODE_LAST
};
723

724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761
enum virDomainGraphicsSpiceImageCompression {
    VIR_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_DEFAULT = 0,
    VIR_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_AUTO_GLZ,
    VIR_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_AUTO_LZ,
    VIR_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_QUIC,
    VIR_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_GLZ,
    VIR_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_LZ,
    VIR_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_OFF,

    VIR_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_LAST
};

enum virDomainGraphicsSpiceJpegCompression {
    VIR_DOMAIN_GRAPHICS_SPICE_JPEG_COMPRESSION_DEFAULT = 0,
    VIR_DOMAIN_GRAPHICS_SPICE_JPEG_COMPRESSION_AUTO,
    VIR_DOMAIN_GRAPHICS_SPICE_JPEG_COMPRESSION_NEVER,
    VIR_DOMAIN_GRAPHICS_SPICE_JPEG_COMPRESSION_ALWAYS,

    VIR_DOMAIN_GRAPHICS_SPICE_JPEG_COMPRESSION_LAST
};

enum virDomainGraphicsSpiceZlibCompression {
    VIR_DOMAIN_GRAPHICS_SPICE_ZLIB_COMPRESSION_DEFAULT = 0,
    VIR_DOMAIN_GRAPHICS_SPICE_ZLIB_COMPRESSION_AUTO,
    VIR_DOMAIN_GRAPHICS_SPICE_ZLIB_COMPRESSION_NEVER,
    VIR_DOMAIN_GRAPHICS_SPICE_ZLIB_COMPRESSION_ALWAYS,

    VIR_DOMAIN_GRAPHICS_SPICE_ZLIB_COMPRESSION_LAST
};

enum virDomainGraphicsSpicePlaybackCompression {
    VIR_DOMAIN_GRAPHICS_SPICE_PLAYBACK_COMPRESSION_DEFAULT = 0,
    VIR_DOMAIN_GRAPHICS_SPICE_PLAYBACK_COMPRESSION_ON,
    VIR_DOMAIN_GRAPHICS_SPICE_PLAYBACK_COMPRESSION_OFF,

    VIR_DOMAIN_GRAPHICS_SPICE_PLAYBACK_COMPRESSION_LAST
};

762 763 764 765 766 767 768 769 770
enum virDomainGraphicsSpiceStreamingMode {
    VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_DEFAULT = 0,
    VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_FILTER,
    VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_ALL,
    VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_OFF,

    VIR_DOMAIN_GRAPHICS_SPICE_STREAMING_MODE_LAST
};

771 772 773 774 775 776 777 778
enum virDomainGraphicsSpiceClipboardCopypaste {
    VIR_DOMAIN_GRAPHICS_SPICE_CLIPBOARD_COPYPASTE_DEFAULT = 0,
    VIR_DOMAIN_GRAPHICS_SPICE_CLIPBOARD_COPYPASTE_YES,
    VIR_DOMAIN_GRAPHICS_SPICE_CLIPBOARD_COPYPASTE_NO,

    VIR_DOMAIN_GRAPHICS_SPICE_CLIPBOARD_COPYPASTE_LAST
};

779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794
enum virDomainGraphicsListenType {
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE = 0,
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS,
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK,

    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST,
};

typedef struct _virDomainGraphicsListenDef virDomainGraphicsListenDef;
typedef virDomainGraphicsListenDef *virDomainGraphicsListenDefPtr;
struct _virDomainGraphicsListenDef {
    int type;   /* enum virDomainGraphicsListenType */
    char *address;
    char *network;
};

795 796 797 798 799 800 801
typedef struct _virDomainGraphicsDef virDomainGraphicsDef;
typedef virDomainGraphicsDef *virDomainGraphicsDefPtr;
struct _virDomainGraphicsDef {
    int type;
    union {
        struct {
            int port;
802
            unsigned int autoport :1;
803
            char *keymap;
804
            char *socket;
805
            virDomainGraphicsAuthDef auth;
806 807 808 809
        } vnc;
        struct {
            char *display;
            char *xauth;
810
            int fullscreen;
811
        } sdl;
812 813
        struct {
            int port;
814 815 816
            unsigned int autoport :1;
            unsigned int replaceUser :1;
            unsigned int multiUser :1;
817 818 819
        } rdp;
        struct {
            char *display;
820
            unsigned int fullscreen :1;
821
        } desktop;
822 823 824 825
        struct {
            int port;
            int tlsPort;
            char *keymap;
826
            virDomainGraphicsAuthDef auth;
827
            unsigned int autoport :1;
828
            int channels[VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST];
829 830 831 832
            int image;
            int jpeg;
            int zlib;
            int playback;
833
            int streaming;
834
            int copypaste;
835
        } spice;
836
    } data;
837 838 839 840 841
    /* nListens, listens, and *port are only useful if type is vnc,
     * rdp, or spice. They've been extracted from the union only to
     * simplify parsing code.*/
    size_t nListens;
    virDomainGraphicsListenDefPtr listens;
842 843
};

844 845 846
enum virDomainHostdevMode {
    VIR_DOMAIN_HOSTDEV_MODE_SUBSYS,
    VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES,
847

848 849 850 851 852 853 854 855 856 857 858 859 860 861
    VIR_DOMAIN_HOSTDEV_MODE_LAST,
};

enum virDomainHostdevSubsysType {
    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB,
    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI,

    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST
};

typedef struct _virDomainHostdevDef virDomainHostdevDef;
typedef virDomainHostdevDef *virDomainHostdevDefPtr;
struct _virDomainHostdevDef {
    int mode; /* enum virDomainHostdevMode */
862
    unsigned int managed : 1;
863 864 865 866 867 868 869 870 871 872 873
    union {
        struct {
            int type; /* enum virDomainHostdevBusType */
            union {
                struct {
                    unsigned bus;
                    unsigned device;

                    unsigned vendor;
                    unsigned product;
                } usb;
874
                virDomainDevicePCIAddress pci; /* host address */
875
            } u;
876 877 878 879 880
        } subsys;
        struct {
            /* TBD: struct capabilities see:
             * https://www.redhat.com/archives/libvir-list/2008-July/msg00429.html
             */
881
            int dummy;
882 883
        } caps;
    } source;
884
    int bootIndex;
885
    virDomainDeviceInfo info; /* Guest address */
886
};
887

888 889 890 891

enum {
    VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO,
    VIR_DOMAIN_MEMBALLOON_MODEL_XEN,
892
    VIR_DOMAIN_MEMBALLOON_MODEL_NONE,
893 894 895 896 897 898 899 900 901 902 903 904

    VIR_DOMAIN_MEMBALLOON_MODEL_LAST
};

typedef struct _virDomainMemballoonDef virDomainMemballoonDef;
typedef virDomainMemballoonDef *virDomainMemballoonDefPtr;
struct _virDomainMemballoonDef {
    int model;
    virDomainDeviceInfo info;
};


905 906 907 908 909 910 911 912 913
enum virDomainSmbiosMode {
    VIR_DOMAIN_SMBIOS_NONE,
    VIR_DOMAIN_SMBIOS_EMULATE,
    VIR_DOMAIN_SMBIOS_HOST,
    VIR_DOMAIN_SMBIOS_SYSINFO,

    VIR_DOMAIN_SMBIOS_LAST
};

914 915 916
/* Flags for the 'type' field in next struct */
enum virDomainDeviceType {
    VIR_DOMAIN_DEVICE_DISK,
917
    VIR_DOMAIN_DEVICE_LEASE,
918
    VIR_DOMAIN_DEVICE_FS,
919 920 921
    VIR_DOMAIN_DEVICE_NET,
    VIR_DOMAIN_DEVICE_INPUT,
    VIR_DOMAIN_DEVICE_SOUND,
922
    VIR_DOMAIN_DEVICE_VIDEO,
923
    VIR_DOMAIN_DEVICE_HOSTDEV,
R
Richard Jones 已提交
924
    VIR_DOMAIN_DEVICE_WATCHDOG,
925
    VIR_DOMAIN_DEVICE_CONTROLLER,
926
    VIR_DOMAIN_DEVICE_GRAPHICS,
927 928

    VIR_DOMAIN_DEVICE_LAST,
929 930 931 932 933 934 935 936
};

typedef struct _virDomainDeviceDef virDomainDeviceDef;
typedef virDomainDeviceDef *virDomainDeviceDefPtr;
struct _virDomainDeviceDef {
    int type;
    union {
        virDomainDiskDefPtr disk;
937
        virDomainControllerDefPtr controller;
938
        virDomainLeaseDefPtr lease;
939
        virDomainFSDefPtr fs;
940 941 942
        virDomainNetDefPtr net;
        virDomainInputDefPtr input;
        virDomainSoundDefPtr sound;
943
        virDomainVideoDefPtr video;
944
        virDomainHostdevDefPtr hostdev;
R
Richard Jones 已提交
945
        virDomainWatchdogDefPtr watchdog;
946
        virDomainGraphicsDefPtr graphics;
947 948 949 950
    } data;
};


951
# define VIR_DOMAIN_MAX_BOOT_DEVS 4
952 953 954 955 956 957 958 959 960 961

enum virDomainBootOrder {
    VIR_DOMAIN_BOOT_FLOPPY,
    VIR_DOMAIN_BOOT_CDROM,
    VIR_DOMAIN_BOOT_DISK,
    VIR_DOMAIN_BOOT_NET,

    VIR_DOMAIN_BOOT_LAST,
};

962 963 964 965 966 967
enum virDomainBootMenu {
    VIR_DOMAIN_BOOT_MENU_DEFAULT = 0,
    VIR_DOMAIN_BOOT_MENU_ENABLED,
    VIR_DOMAIN_BOOT_MENU_DISABLED,
};

968 969 970 971
enum virDomainFeature {
    VIR_DOMAIN_FEATURE_ACPI,
    VIR_DOMAIN_FEATURE_APIC,
    VIR_DOMAIN_FEATURE_PAE,
J
Jim Fehlig 已提交
972
    VIR_DOMAIN_FEATURE_HAP,
973
    VIR_DOMAIN_FEATURE_VIRIDIAN,
974 975 976 977 978 979 980 981 982 983 984 985 986

    VIR_DOMAIN_FEATURE_LAST
};

enum virDomainLifecycleAction {
    VIR_DOMAIN_LIFECYCLE_DESTROY,
    VIR_DOMAIN_LIFECYCLE_RESTART,
    VIR_DOMAIN_LIFECYCLE_RESTART_RENAME,
    VIR_DOMAIN_LIFECYCLE_PRESERVE,

    VIR_DOMAIN_LIFECYCLE_LAST
};

987 988 989 990 991 992 993 994 995 996 997
enum virDomainLifecycleCrashAction {
    VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY,
    VIR_DOMAIN_LIFECYCLE_CRASH_RESTART,
    VIR_DOMAIN_LIFECYCLE_CRASH_RESTART_RENAME,
    VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE,
    VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY,
    VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_RESTART,

    VIR_DOMAIN_LIFECYCLE_CRASH_LAST
};

M
Michal Privoznik 已提交
998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
enum virDomainBIOSUseserial {
    VIR_DOMAIN_BIOS_USESERIAL_DEFAULT = 0,
    VIR_DOMAIN_BIOS_USESERIAL_YES,
    VIR_DOMAIN_BIOS_USESERIAL_NO
};

typedef struct _virDomainBIOSDef virDomainBIOSDef;
typedef virDomainBIOSDef *virDomainBIOSDefPtr;
struct _virDomainBIOSDef {
    int useserial;
};

1010 1011 1012 1013 1014 1015 1016 1017 1018
/* Operating system configuration data & machine / arch */
typedef struct _virDomainOSDef virDomainOSDef;
typedef virDomainOSDef *virDomainOSDefPtr;
struct _virDomainOSDef {
    char *type;
    char *arch;
    char *machine;
    int nBootDevs;
    int bootDevs[VIR_DOMAIN_BOOT_LAST];
1019
    int bootmenu;
1020
    char *init;
1021 1022 1023 1024 1025 1026 1027
    char *kernel;
    char *initrd;
    char *cmdline;
    char *root;
    char *loader;
    char *bootloader;
    char *bootloaderArgs;
1028
    int smbios_mode;
M
Michal Privoznik 已提交
1029
    virDomainBIOSDef bios;
1030 1031
};

1032 1033 1034 1035 1036 1037 1038
enum virDomainSeclabelType {
    VIR_DOMAIN_SECLABEL_DYNAMIC,
    VIR_DOMAIN_SECLABEL_STATIC,

    VIR_DOMAIN_SECLABEL_LAST,
};

1039 1040 1041 1042 1043 1044 1045
/* Security configuration for domain */
typedef struct _virSecurityLabelDef virSecurityLabelDef;
typedef virSecurityLabelDef *virSecurityLabelDefPtr;
struct _virSecurityLabelDef {
    char *model;        /* name of security model */
    char *label;        /* security label string */
    char *imagelabel;   /* security image label string */
1046
    char *baselabel;    /* base name of label string */
1047
    int type;           /* virDomainSeclabelType */
1048
    bool norelabel;
1049 1050
};

1051 1052 1053 1054 1055 1056 1057 1058 1059 1060
enum virDomainTimerNameType {
    VIR_DOMAIN_TIMER_NAME_PLATFORM = 0,
    VIR_DOMAIN_TIMER_NAME_PIT,
    VIR_DOMAIN_TIMER_NAME_RTC,
    VIR_DOMAIN_TIMER_NAME_HPET,
    VIR_DOMAIN_TIMER_NAME_TSC,

    VIR_DOMAIN_TIMER_NAME_LAST,
};

1061 1062 1063 1064
enum virDomainTimerTrackType {
    VIR_DOMAIN_TIMER_TRACK_BOOT = 0,
    VIR_DOMAIN_TIMER_TRACK_GUEST,
    VIR_DOMAIN_TIMER_TRACK_WALL,
1065

1066
    VIR_DOMAIN_TIMER_TRACK_LAST,
1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082
};

enum virDomainTimerTickpolicyType {
    VIR_DOMAIN_TIMER_TICKPOLICY_DELAY = 0,
    VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP,
    VIR_DOMAIN_TIMER_TICKPOLICY_MERGE,
    VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD,

    VIR_DOMAIN_TIMER_TICKPOLICY_LAST,
};

enum virDomainTimerModeType {
    VIR_DOMAIN_TIMER_MODE_AUTO = 0,
    VIR_DOMAIN_TIMER_MODE_NATIVE,
    VIR_DOMAIN_TIMER_MODE_EMULATE,
    VIR_DOMAIN_TIMER_MODE_PARAVIRT,
1083
    VIR_DOMAIN_TIMER_MODE_SMPSAFE,
1084 1085 1086 1087

    VIR_DOMAIN_TIMER_MODE_LAST,
};

1088 1089 1090 1091 1092 1093 1094 1095
typedef struct _virDomainTimerCatchupDef virDomainTimerCatchupDef;
typedef virDomainTimerCatchupDef *virDomainTimerCatchupDefPtr;
struct _virDomainTimerCatchupDef {
    unsigned long threshold;
    unsigned long slew;
    unsigned long limit;
};

1096 1097 1098 1099 1100 1101 1102
typedef struct _virDomainTimerDef virDomainTimerDef;
typedef virDomainTimerDef *virDomainTimerDefPtr;
struct _virDomainTimerDef {
    int name;
    int present;    /* unspecified = -1, no = 0, yes = 1 */
    int tickpolicy; /* none|catchup|merge|discard */

1103 1104 1105 1106
    virDomainTimerCatchupDef catchup;

    /* track is only valid for name='platform|rtc' */
    int track;  /* host|guest */
1107 1108 1109 1110 1111 1112

    /* frequency & mode are only valid for name='tsc' */
    unsigned long frequency; /* in Hz, unspecified = 0 */
    int mode;       /* auto|native|emulate|paravirt */
};

1113 1114 1115
enum virDomainClockOffsetType {
    VIR_DOMAIN_CLOCK_OFFSET_UTC = 0,
    VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME = 1,
1116
    VIR_DOMAIN_CLOCK_OFFSET_VARIABLE = 2,
1117
    VIR_DOMAIN_CLOCK_OFFSET_TIMEZONE = 3,
1118 1119 1120 1121 1122 1123 1124 1125

    VIR_DOMAIN_CLOCK_OFFSET_LAST,
};

typedef struct _virDomainClockDef virDomainClockDef;
typedef virDomainClockDef *virDomainClockDefPtr;
struct _virDomainClockDef {
    int offset;
1126

1127 1128 1129 1130 1131 1132 1133 1134 1135
    union {
        /* Adjustment in seconds, relative to UTC, when
         * offset == VIR_DOMAIN_CLOCK_OFFSET_VARIABLE */
        long long adjustment;

        /* Timezone name, when
         * offset == VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME */
        char *timezone;
    } data;
1136 1137 1138

    int ntimers;
    virDomainTimerDefPtr *timers;
1139 1140
};

1141
# define VIR_DOMAIN_CPUMASK_LEN 1024
1142

C
Chris Lalancette 已提交
1143

E
Eric Blake 已提交
1144 1145 1146
typedef struct _virDomainVcpuPinDef virDomainVcpuPinDef;
typedef virDomainVcpuPinDef *virDomainVcpuPinDefPtr;
struct _virDomainVcpuPinDef {
1147 1148 1149 1150
    int vcpuid;
    char *cpumask;
};

E
Eric Blake 已提交
1151
int virDomainVcpuPinIsDuplicate(virDomainVcpuPinDefPtr *def,
1152 1153 1154
                                int nvcpupin,
                                int vcpu);

E
Eric Blake 已提交
1155
virDomainVcpuPinDefPtr virDomainVcpuPinFindByVcpu(virDomainVcpuPinDefPtr *def,
1156 1157 1158
                                                  int nvcpupin,
                                                  int vcpu);

1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177
enum virDomainNumatuneMemMode {
    VIR_DOMAIN_NUMATUNE_MEM_STRICT,
    VIR_DOMAIN_NUMATUNE_MEM_PREFERRED,
    VIR_DOMAIN_NUMATUNE_MEM_INTERLEAVE,

    VIR_DOMAIN_NUMATUNE_MEM_LAST
};

typedef struct _virDomainNumatuneDef virDomainNumatuneDef;
typedef virDomainNumatuneDef *virDomainNumatuneDefPtr;
struct _virDomainNumatuneDef {
    struct {
        char *nodemask;
        int mode;
    } memory;

    /* Future NUMA tuning related stuff should go here. */
};

1178 1179 1180 1181 1182 1183
/*
 * Guest VM main configuration
 *
 * NB: if adding to this struct, virDomainDefCheckABIStability
 * may well need an update
 */
1184 1185 1186 1187 1188 1189 1190
typedef struct _virDomainDef virDomainDef;
typedef virDomainDef *virDomainDefPtr;
struct _virDomainDef {
    int virtType;
    int id;
    unsigned char uuid[VIR_UUID_BUFLEN];
    char *name;
1191
    char *description;
1192

1193 1194 1195 1196
    struct {
        unsigned int weight;
    } blkio;

1197 1198 1199 1200 1201 1202 1203 1204 1205
    struct {
        unsigned long max_balloon;
        unsigned long cur_balloon;
        unsigned long hugepage_backed;
        unsigned long hard_limit;
        unsigned long soft_limit;
        unsigned long min_guarantee;
        unsigned long swap_hard_limit;
    } mem;
E
Eric Blake 已提交
1206 1207
    unsigned short vcpus;
    unsigned short maxvcpus;
1208 1209 1210
    int cpumasklen;
    char *cpumask;

1211 1212
    struct {
        unsigned long shares;
1213 1214
        unsigned long long period;
        long long quota;
1215
        int nvcpupin;
E
Eric Blake 已提交
1216
        virDomainVcpuPinDefPtr *vcpupin;
1217 1218
    } cputune;

1219 1220
    virDomainNumatuneDef numatune;

1221 1222 1223 1224 1225 1226 1227 1228 1229
    /* These 3 are based on virDomainLifeCycleAction enum flags */
    int onReboot;
    int onPoweroff;
    int onCrash;

    virDomainOSDef os;
    char *emulator;
    int features;

1230
    virDomainClockDef clock;
1231

1232 1233
    int ngraphics;
    virDomainGraphicsDefPtr *graphics;
1234 1235 1236 1237

    int ndisks;
    virDomainDiskDefPtr *disks;

1238 1239 1240
    int ncontrollers;
    virDomainControllerDefPtr *controllers;

1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252
    int nfss;
    virDomainFSDefPtr *fss;

    int nnets;
    virDomainNetDefPtr *nets;

    int ninputs;
    virDomainInputDefPtr *inputs;

    int nsounds;
    virDomainSoundDefPtr *sounds;

1253 1254 1255
    int nvideos;
    virDomainVideoDefPtr *videos;

1256 1257 1258
    int nhostdevs;
    virDomainHostdevDefPtr *hostdevs;

E
Eric Blake 已提交
1259 1260 1261
    int nsmartcards;
    virDomainSmartcardDefPtr *smartcards;

1262 1263 1264 1265 1266 1267
    int nserials;
    virDomainChrDefPtr *serials;

    int nparallels;
    virDomainChrDefPtr *parallels;

1268 1269 1270
    int nchannels;
    virDomainChrDefPtr *channels;

1271
    size_t nleases;
1272 1273
    virDomainLeaseDefPtr *leases;

1274
    /* Only 1 */
1275
    virDomainChrDefPtr console;
1276
    virSecurityLabelDef seclabel;
R
Richard Jones 已提交
1277
    virDomainWatchdogDefPtr watchdog;
1278
    virDomainMemballoonDefPtr memballoon;
1279
    virCPUDefPtr cpu;
1280
    virSysinfoDefPtr sysinfo;
1281 1282 1283

    void *namespaceData;
    virDomainXMLNamespace ns;
1284 1285
};

1286 1287 1288 1289 1290 1291
enum virDomainTaintFlags {
    VIR_DOMAIN_TAINT_CUSTOM_ARGV,      /* Custom ARGV passthrough from XML */
    VIR_DOMAIN_TAINT_CUSTOM_MONITOR,   /* Custom monitor commands issued */
    VIR_DOMAIN_TAINT_HIGH_PRIVILEGES,  /* Running with undesirably high privileges */
    VIR_DOMAIN_TAINT_SHELL_SCRIPTS,    /* Network configuration using opaque shell scripts */
    VIR_DOMAIN_TAINT_DISK_PROBING,     /* Relying on potentially unsafe disk format probing */
1292
    VIR_DOMAIN_TAINT_EXTERNAL_LAUNCH,  /* Externally launched guest domain */
1293 1294 1295 1296

    VIR_DOMAIN_TAINT_LAST
};

1297 1298 1299 1300
/* Snapshot state */
typedef struct _virDomainSnapshotDef virDomainSnapshotDef;
typedef virDomainSnapshotDef *virDomainSnapshotDefPtr;
struct _virDomainSnapshotDef {
1301
    /* Public XML.  */
1302 1303 1304 1305 1306 1307
    char *name;
    char *description;
    char *parent;
    long long creationTime; /* in seconds */
    int state;

1308 1309
    /* Internal use.  */
    bool current; /* At most one snapshot in the list should have this set */
1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345
};

typedef struct _virDomainSnapshotObj virDomainSnapshotObj;
typedef virDomainSnapshotObj *virDomainSnapshotObjPtr;
struct _virDomainSnapshotObj {
    virDomainSnapshotDefPtr def;
};

typedef struct _virDomainSnapshotObjList virDomainSnapshotObjList;
typedef virDomainSnapshotObjList *virDomainSnapshotObjListPtr;
struct _virDomainSnapshotObjList {
    /* name string -> virDomainSnapshotObj  mapping
     * for O(1), lockless lookup-by-name */
    virHashTable *objs;
};

virDomainSnapshotDefPtr virDomainSnapshotDefParseString(const char *xmlStr,
                                                        int newSnapshot);
void virDomainSnapshotDefFree(virDomainSnapshotDefPtr def);
char *virDomainSnapshotDefFormat(char *domain_uuid,
                                 virDomainSnapshotDefPtr def,
                                 int internal);
virDomainSnapshotObjPtr virDomainSnapshotAssignDef(virDomainSnapshotObjListPtr snapshots,
                                                   const virDomainSnapshotDefPtr def);

int virDomainSnapshotObjListInit(virDomainSnapshotObjListPtr objs);
int virDomainSnapshotObjListGetNames(virDomainSnapshotObjListPtr snapshots,
                                     char **const names, int maxnames);
int virDomainSnapshotObjListNum(virDomainSnapshotObjListPtr snapshots);
virDomainSnapshotObjPtr virDomainSnapshotFindByName(const virDomainSnapshotObjListPtr snapshots,
                                                    const char *name);
void virDomainSnapshotObjListRemove(virDomainSnapshotObjListPtr snapshots,
                                    virDomainSnapshotObjPtr snapshot);
int virDomainSnapshotHasChildren(virDomainSnapshotObjPtr snap,
                                virDomainSnapshotObjListPtr snapshots);

1346
/* Guest VM runtime state */
J
Jiri Denemark 已提交
1347 1348 1349 1350 1351 1352
typedef struct _virDomainStateReason virDomainStateReason;
struct _virDomainStateReason {
    int state;
    int reason;
};

1353 1354 1355
typedef struct _virDomainObj virDomainObj;
typedef virDomainObj *virDomainObjPtr;
struct _virDomainObj {
1356
    virMutex lock;
1357
    int refs;
1358

1359
    int pid;
J
Jiri Denemark 已提交
1360
    virDomainStateReason state;
1361 1362 1363

    unsigned int autostart : 1;
    unsigned int persistent : 1;
1364
    unsigned int updated : 1;
1365 1366 1367

    virDomainDefPtr def; /* The current definition */
    virDomainDefPtr newDef; /* New definition to activate at shutdown */
1368

C
Chris Lalancette 已提交
1369 1370 1371
    virDomainSnapshotObjList snapshots;
    virDomainSnapshotObjPtr current_snapshot;

1372 1373
    void *privateData;
    void (*privateDataFreeFunc)(void *);
1374 1375

    int taint;
1376 1377
};

1378 1379 1380
typedef struct _virDomainObjList virDomainObjList;
typedef virDomainObjList *virDomainObjListPtr;
struct _virDomainObjList {
1381 1382 1383
    /* uuid string -> virDomainObj  mapping
     * for O(1), lockless lookup-by-uuid */
    virHashTable *objs;
1384
};
1385

1386
static inline bool
D
Daniel P. Berrange 已提交
1387
virDomainObjIsActive(virDomainObjPtr dom)
1388 1389 1390 1391
{
    return dom->def->id != -1;
}

1392

1393 1394
int virDomainObjListInit(virDomainObjListPtr objs);
void virDomainObjListDeinit(virDomainObjListPtr objs);
1395

1396
virDomainObjPtr virDomainFindByID(const virDomainObjListPtr doms,
1397
                                  int id);
1398
virDomainObjPtr virDomainFindByUUID(const virDomainObjListPtr doms,
1399
                                    const unsigned char *uuid);
1400
virDomainObjPtr virDomainFindByName(const virDomainObjListPtr doms,
1401 1402
                                    const char *name);

1403 1404
bool virDomainObjTaint(virDomainObjPtr obj,
                       enum virDomainTaintFlags taint);
1405 1406 1407 1408

void virDomainGraphicsDefFree(virDomainGraphicsDefPtr def);
void virDomainInputDefFree(virDomainInputDefPtr def);
void virDomainDiskDefFree(virDomainDiskDefPtr def);
1409
void virDomainDiskHostDefFree(virDomainDiskHostDefPtr def);
1410
void virDomainControllerDefFree(virDomainControllerDefPtr def);
1411
void virDomainFSDefFree(virDomainFSDefPtr def);
1412
void virDomainActualNetDefFree(virDomainActualNetDefPtr def);
1413
void virDomainNetDefFree(virDomainNetDefPtr def);
E
Eric Blake 已提交
1414
void virDomainSmartcardDefFree(virDomainSmartcardDefPtr def);
1415
void virDomainChrDefFree(virDomainChrDefPtr def);
1416
void virDomainChrSourceDefFree(virDomainChrSourceDefPtr def);
1417
void virDomainSoundDefFree(virDomainSoundDefPtr def);
1418
void virDomainMemballoonDefFree(virDomainMemballoonDefPtr def);
R
Richard Jones 已提交
1419
void virDomainWatchdogDefFree(virDomainWatchdogDefPtr def);
1420
void virDomainVideoDefFree(virDomainVideoDefPtr def);
1421
void virDomainHostdevDefFree(virDomainHostdevDefPtr def);
1422
void virDomainDeviceDefFree(virDomainDeviceDefPtr def);
1423 1424 1425
int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info,
                                  int type);
int virDomainDevicePCIAddressIsValid(virDomainDevicePCIAddressPtr addr);
1426
int virDomainDeviceDriveAddressIsValid(virDomainDeviceDriveAddressPtr addr);
1427
int virDomainDeviceVirtioSerialAddressIsValid(virDomainDeviceVirtioSerialAddressPtr addr);
1428
void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info);
1429
void virDomainDefClearPCIAddresses(virDomainDefPtr def);
D
Daniel P. Berrange 已提交
1430
void virDomainDefClearDeviceAliases(virDomainDefPtr def);
1431

1432 1433 1434 1435 1436 1437 1438 1439
typedef int (*virDomainDeviceInfoCallback)(virDomainDefPtr def,
                                           virDomainDeviceInfoPtr dev,
                                           void *opaque);

int virDomainDeviceInfoIterate(virDomainDefPtr def,
                               virDomainDeviceInfoCallback cb,
                               void *opaque);

1440
void virDomainDefFree(virDomainDefPtr vm);
1441 1442
void virDomainObjRef(virDomainObjPtr vm);
/* Returns 1 if the object was freed, 0 if more refs exist */
1443
int virDomainObjUnref(virDomainObjPtr vm) ATTRIBUTE_RETURN_CHECK;
1444

M
Michal Novotny 已提交
1445 1446
virDomainChrDefPtr virDomainChrDefNew(void);

1447 1448
/* live == true means def describes an active domain (being migrated or
 * restored) as opposed to a new persistent configuration of the domain */
1449
virDomainObjPtr virDomainAssignDef(virCapsPtr caps,
1450
                                   virDomainObjListPtr doms,
1451 1452
                                   const virDomainDefPtr def,
                                   bool live);
1453 1454 1455
void virDomainObjAssignDef(virDomainObjPtr domain,
                           const virDomainDefPtr def,
                           bool live);
1456
int virDomainObjSetDefTransient(virCapsPtr caps,
1457 1458
                                virDomainObjPtr domain,
                                bool live);
1459 1460 1461
virDomainDefPtr
virDomainObjGetPersistentDef(virCapsPtr caps,
                             virDomainObjPtr domain);
1462 1463 1464
virDomainDefPtr
virDomainObjCopyPersistentDef(virCapsPtr caps, virDomainObjPtr dom);

1465
void virDomainRemoveInactive(virDomainObjListPtr doms,
1466 1467
                             virDomainObjPtr dom);

1468
virDomainDeviceDefPtr virDomainDeviceDefParse(virCapsPtr caps,
1469
                                              const virDomainDefPtr def,
1470
                                              const char *xmlStr,
L
Laine Stump 已提交
1471
                                              unsigned int flags);
1472
virDomainDefPtr virDomainDefParseString(virCapsPtr caps,
1473
                                        const char *xmlStr,
M
Matthias Bolte 已提交
1474
                                        unsigned int expectedVirtTypes,
L
Laine Stump 已提交
1475
                                        unsigned int flags);
1476
virDomainDefPtr virDomainDefParseFile(virCapsPtr caps,
1477
                                      const char *filename,
M
Matthias Bolte 已提交
1478
                                      unsigned int expectedVirtTypes,
L
Laine Stump 已提交
1479
                                      unsigned int flags);
1480
virDomainDefPtr virDomainDefParseNode(virCapsPtr caps,
1481
                                      xmlDocPtr doc,
1482
                                      xmlNodePtr root,
M
Matthias Bolte 已提交
1483
                                      unsigned int expectedVirtTypes,
L
Laine Stump 已提交
1484
                                      unsigned int flags);
1485

1486 1487 1488
bool virDomainDefCheckABIStability(virDomainDefPtr src,
                                   virDomainDefPtr dst);

1489
int virDomainDefAddImplicitControllers(virDomainDefPtr def);
1490

1491
char *virDomainDefFormat(virDomainDefPtr def,
L
Laine Stump 已提交
1492
                         unsigned int flags);
1493

1494
int virDomainCpuSetParse(const char **str,
1495 1496 1497
                         char sep,
                         char *cpuset,
                         int maxcpu);
1498
char *virDomainCpuSetFormat(char *cpuset,
1499 1500
                            int maxcpu);

E
Eric Blake 已提交
1501
int virDomainVcpuPinAdd(virDomainDefPtr def,
1502 1503 1504 1505
                        unsigned char *cpumap,
                        int maplen,
                        int vcpu);

E
Eric Blake 已提交
1506
int virDomainVcpuPinDel(virDomainDefPtr def, int vcpu);
1507

1508
int virDomainDiskIndexByName(virDomainDefPtr def, const char *name);
1509 1510 1511 1512
int virDomainDiskInsert(virDomainDefPtr def,
                        virDomainDiskDefPtr disk);
void virDomainDiskInsertPreAlloced(virDomainDefPtr def,
                                   virDomainDiskDefPtr disk);
1513
int virDomainDiskDefAssignAddress(virCapsPtr caps, virDomainDiskDefPtr def);
1514

1515
void virDomainDiskRemove(virDomainDefPtr def, size_t i);
1516
int virDomainDiskRemoveByName(virDomainDefPtr def, const char *name);
1517

1518 1519 1520 1521
int virDomainNetIndexByMac(virDomainDefPtr def, const unsigned char *mac);
int virDomainNetInsert(virDomainDefPtr def, virDomainNetDefPtr net);
int virDomainNetRemoveByMac(virDomainDefPtr def, const unsigned char *mac);

1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539
int virDomainGraphicsListenGetType(virDomainGraphicsDefPtr def, size_t ii)
            ATTRIBUTE_NONNULL(1);
int virDomainGraphicsListenSetType(virDomainGraphicsDefPtr def, size_t ii, int val)
            ATTRIBUTE_NONNULL(1);
const char *virDomainGraphicsListenGetAddress(virDomainGraphicsDefPtr def,
                                              size_t ii)
            ATTRIBUTE_NONNULL(1);
int virDomainGraphicsListenSetAddress(virDomainGraphicsDefPtr def,
                                      size_t ii, const char *address,
                                      int len, bool setType)
            ATTRIBUTE_NONNULL(1);
const char *virDomainGraphicsListenGetNetwork(virDomainGraphicsDefPtr def,
                                              size_t ii)
            ATTRIBUTE_NONNULL(1);
int virDomainGraphicsListenSetNetwork(virDomainGraphicsDefPtr def,
                                      size_t ii, const char *network, int len)
            ATTRIBUTE_NONNULL(1);

1540 1541 1542 1543 1544 1545
int virDomainNetGetActualType(virDomainNetDefPtr iface);
char *virDomainNetGetActualBridgeName(virDomainNetDefPtr iface);
char *virDomainNetGetActualDirectDev(virDomainNetDefPtr iface);
int virDomainNetGetActualDirectMode(virDomainNetDefPtr iface);
virVirtualPortProfileParamsPtr
virDomainNetGetActualDirectVirtPortProfile(virDomainNetDefPtr iface);
1546 1547
virBandwidthPtr
virDomainNetGetActualBandwidth(virDomainNetDefPtr iface);
1548

1549 1550 1551 1552 1553
int virDomainControllerInsert(virDomainDefPtr def,
                              virDomainControllerDefPtr controller);
void virDomainControllerInsertPreAlloced(virDomainDefPtr def,
                                         virDomainControllerDefPtr controller);

1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565

int virDomainLeaseIndex(virDomainDefPtr def,
                        virDomainLeaseDefPtr lease);
int virDomainLeaseInsert(virDomainDefPtr def,
                         virDomainLeaseDefPtr lease);
int virDomainLeaseInsertPreAlloc(virDomainDefPtr def);
void virDomainLeaseInsertPreAlloced(virDomainDefPtr def,
                                    virDomainLeaseDefPtr lease);
void virDomainLeaseRemoveAt(virDomainDefPtr def, size_t i);
int virDomainLeaseRemove(virDomainDefPtr def,
                         virDomainLeaseDefPtr lease);

1566
int virDomainSaveXML(const char *configDir,
1567 1568 1569
                     virDomainDefPtr def,
                     const char *xml);

1570
int virDomainSaveConfig(const char *configDir,
1571
                        virDomainDefPtr def);
1572
int virDomainSaveStatus(virCapsPtr caps,
1573
                        const char *statusDir,
1574
                        virDomainObjPtr obj) ATTRIBUTE_RETURN_CHECK;
1575

1576 1577 1578 1579
typedef void (*virDomainLoadConfigNotify)(virDomainObjPtr dom,
                                          int newDomain,
                                          void *opaque);

1580
int virDomainLoadAllConfigs(virCapsPtr caps,
1581
                            virDomainObjListPtr doms,
1582
                            const char *configDir,
1583
                            const char *autostartDir,
1584
                            int liveStatus,
M
Matthias Bolte 已提交
1585
                            unsigned int expectedVirtTypes,
1586 1587
                            virDomainLoadConfigNotify notify,
                            void *opaque);
1588

1589
int virDomainDeleteConfig(const char *configDir,
1590
                          const char *autostartDir,
1591 1592
                          virDomainObjPtr dom);

1593
char *virDomainConfigFile(const char *dir,
1594 1595
                          const char *name);

1596 1597 1598 1599
int virDiskNameToBusDeviceIndex(virDomainDiskDefPtr disk,
                                int *busIdx,
                                int *devIdx);

1600
virDomainFSDefPtr virDomainGetRootFilesystem(virDomainDefPtr def);
1601 1602
int virDomainVideoDefaultType(virDomainDefPtr def);
int virDomainVideoDefaultRAM(virDomainDefPtr def, int type);
1603

1604 1605 1606 1607
int virDomainObjIsDuplicate(virDomainObjListPtr doms,
                            virDomainDefPtr def,
                            unsigned int check_active);

D
Daniel P. Berrange 已提交
1608 1609
void virDomainObjLock(virDomainObjPtr obj);
void virDomainObjUnlock(virDomainObjPtr obj);
1610

1611 1612 1613 1614 1615 1616 1617 1618 1619
int virDomainObjListNumOfDomains(virDomainObjListPtr doms, int active);

int virDomainObjListGetActiveIDs(virDomainObjListPtr doms,
                                 int *ids,
                                 int maxids);
int virDomainObjListGetInactiveNames(virDomainObjListPtr doms,
                                     char **const names,
                                     int maxnames);

E
Eric Blake 已提交
1620 1621 1622 1623 1624 1625 1626 1627 1628
typedef int (*virDomainSmartcardDefIterator)(virDomainDefPtr def,
                                             virDomainSmartcardDefPtr dev,
                                             void *opaque);

int virDomainSmartcardDefForeach(virDomainDefPtr def,
                                 bool abortOnError,
                                 virDomainSmartcardDefIterator iter,
                                 void *opaque);

1629 1630 1631 1632 1633 1634 1635 1636 1637
typedef int (*virDomainChrDefIterator)(virDomainDefPtr def,
                                       virDomainChrDefPtr dev,
                                       void *opaque);

int virDomainChrDefForeach(virDomainDefPtr def,
                           bool abortOnError,
                           virDomainChrDefIterator iter,
                           void *opaque);

1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648
typedef int (*virDomainDiskDefPathIterator)(virDomainDiskDefPtr disk,
                                            const char *path,
                                            size_t depth,
                                            void *opaque);

int virDomainDiskDefForeachPath(virDomainDiskDefPtr disk,
                                bool allowProbing,
                                bool ignoreOpenFailure,
                                virDomainDiskDefPathIterator iter,
                                void *opaque);

J
Jiri Denemark 已提交
1649 1650 1651 1652 1653 1654 1655
void
virDomainObjSetState(virDomainObjPtr obj, virDomainState state, int reason)
        ATTRIBUTE_NONNULL(1);
virDomainState
virDomainObjGetState(virDomainObjPtr obj, int *reason)
        ATTRIBUTE_NONNULL(1);

1656 1657 1658
typedef const char* (*virLifecycleToStringFunc)(int type);
typedef int (*virLifecycleFromStringFunc)(const char *type);

1659 1660
VIR_ENUM_DECL(virDomainTaint)

1661 1662 1663 1664
VIR_ENUM_DECL(virDomainVirt)
VIR_ENUM_DECL(virDomainBoot)
VIR_ENUM_DECL(virDomainFeature)
VIR_ENUM_DECL(virDomainLifecycle)
1665
VIR_ENUM_DECL(virDomainLifecycleCrash)
1666
VIR_ENUM_DECL(virDomainDevice)
1667 1668
VIR_ENUM_DECL(virDomainDeviceAddress)
VIR_ENUM_DECL(virDomainDeviceAddressMode)
1669 1670 1671
VIR_ENUM_DECL(virDomainDisk)
VIR_ENUM_DECL(virDomainDiskDevice)
VIR_ENUM_DECL(virDomainDiskBus)
1672
VIR_ENUM_DECL(virDomainDiskCache)
1673
VIR_ENUM_DECL(virDomainDiskErrorPolicy)
M
MORITA Kazutaka 已提交
1674
VIR_ENUM_DECL(virDomainDiskProtocol)
M
Matthias Dahl 已提交
1675
VIR_ENUM_DECL(virDomainDiskIo)
1676
VIR_ENUM_DECL(virDomainIoEventFd)
1677
VIR_ENUM_DECL(virDomainVirtioEventIdx)
1678
VIR_ENUM_DECL(virDomainController)
1679
VIR_ENUM_DECL(virDomainControllerModel)
1680
VIR_ENUM_DECL(virDomainFS)
1681
VIR_ENUM_DECL(virDomainFSAccessMode)
1682
VIR_ENUM_DECL(virDomainNet)
1683
VIR_ENUM_DECL(virDomainNetBackend)
1684
VIR_ENUM_DECL(virDomainNetVirtioTxMode)
1685
VIR_ENUM_DECL(virDomainChrDevice)
1686
VIR_ENUM_DECL(virDomainChrChannelTarget)
1687
VIR_ENUM_DECL(virDomainChrConsoleTarget)
E
Eric Blake 已提交
1688
VIR_ENUM_DECL(virDomainSmartcard)
1689
VIR_ENUM_DECL(virDomainChr)
1690
VIR_ENUM_DECL(virDomainChrTcpProtocol)
E
Eric Blake 已提交
1691
VIR_ENUM_DECL(virDomainChrSpicevmc)
1692
VIR_ENUM_DECL(virDomainSoundModel)
1693
VIR_ENUM_DECL(virDomainMemballoonModel)
1694
VIR_ENUM_DECL(virDomainSmbiosMode)
R
Richard Jones 已提交
1695 1696
VIR_ENUM_DECL(virDomainWatchdogModel)
VIR_ENUM_DECL(virDomainWatchdogAction)
1697
VIR_ENUM_DECL(virDomainVideo)
1698 1699
VIR_ENUM_DECL(virDomainHostdevMode)
VIR_ENUM_DECL(virDomainHostdevSubsys)
1700 1701 1702
VIR_ENUM_DECL(virDomainInput)
VIR_ENUM_DECL(virDomainInputBus)
VIR_ENUM_DECL(virDomainGraphics)
1703
VIR_ENUM_DECL(virDomainGraphicsListen)
1704
VIR_ENUM_DECL(virDomainGraphicsAuthConnected)
1705 1706
VIR_ENUM_DECL(virDomainGraphicsSpiceChannelName)
VIR_ENUM_DECL(virDomainGraphicsSpiceChannelMode)
1707 1708 1709 1710
VIR_ENUM_DECL(virDomainGraphicsSpiceImageCompression)
VIR_ENUM_DECL(virDomainGraphicsSpiceJpegCompression)
VIR_ENUM_DECL(virDomainGraphicsSpiceZlibCompression)
VIR_ENUM_DECL(virDomainGraphicsSpicePlaybackCompression)
1711
VIR_ENUM_DECL(virDomainGraphicsSpiceStreamingMode)
1712
VIR_ENUM_DECL(virDomainGraphicsSpiceClipboardCopypaste)
1713
VIR_ENUM_DECL(virDomainNumatuneMemMode)
1714 1715
/* from libvirt.h */
VIR_ENUM_DECL(virDomainState)
J
Jiri Denemark 已提交
1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726
VIR_ENUM_DECL(virDomainNostateReason)
VIR_ENUM_DECL(virDomainRunningReason)
VIR_ENUM_DECL(virDomainBlockedReason)
VIR_ENUM_DECL(virDomainPausedReason)
VIR_ENUM_DECL(virDomainShutdownReason)
VIR_ENUM_DECL(virDomainShutoffReason)
VIR_ENUM_DECL(virDomainCrashedReason)

const char *virDomainStateReasonToString(virDomainState state, int reason);
int virDomainStateReasonFromString(virDomainState state, const char *reason);

1727
VIR_ENUM_DECL(virDomainSeclabel)
1728
VIR_ENUM_DECL(virDomainClockOffset)
1729

1730
VIR_ENUM_DECL(virDomainTimerName)
1731
VIR_ENUM_DECL(virDomainTimerTrack)
1732 1733 1734
VIR_ENUM_DECL(virDomainTimerTickpolicy)
VIR_ENUM_DECL(virDomainTimerMode)

1735
#endif /* __DOMAIN_CONF_H */