domain_conf.h 76.3 KB
Newer Older
1 2 3
/*
 * domain_conf.h: domain XML processing
 *
4
 * Copyright (C) 2006-2013 Red Hat, Inc.
5 6 7 8 9 10 11 12 13 14 15 16 17
 * 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
18
 * License along with this library.  If not, see
O
Osier Yang 已提交
19
 * <http://www.gnu.org/licenses/>.
20 21 22 23 24
 *
 * 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
# include "internal.h"
# include "capabilities.h"
# include "storage_encryption_conf.h"
# include "cpu_conf.h"
35
# include "virutil.h"
36
# include "virthread.h"
37
# include "virhash.h"
38
# include "virsocketaddr.h"
39
# include "nwfilter_params.h"
40
# include "virnetdevmacvlan.h"
41
# include "virsysinfo.h"
42
# include "virnetdevvportprofile.h"
A
Ansis Atteka 已提交
43
# include "virnetdevopenvswitch.h"
44
# include "virnetdevbandwidth.h"
45
# include "virnetdevvlan.h"
46
# include "virobject.h"
47
# include "device_conf.h"
48
# include "virbitmap.h"
49
# include "virstoragefile.h"
G
Gao feng 已提交
50
# include "virnuma.h"
51

52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
/* forward declarations of all device types, required by
 * virDomainDeviceDef
 */
typedef struct _virDomainDiskDef virDomainDiskDef;
typedef virDomainDiskDef *virDomainDiskDefPtr;

typedef struct _virDomainControllerDef virDomainControllerDef;
typedef virDomainControllerDef *virDomainControllerDefPtr;

typedef struct _virDomainLeaseDef virDomainLeaseDef;
typedef virDomainLeaseDef *virDomainLeaseDefPtr;

typedef struct _virDomainFSDef virDomainFSDef;
typedef virDomainFSDef *virDomainFSDefPtr;

typedef struct _virDomainNetDef virDomainNetDef;
typedef virDomainNetDef *virDomainNetDefPtr;

typedef struct _virDomainInputDef virDomainInputDef;
typedef virDomainInputDef *virDomainInputDefPtr;

73 74 75
typedef struct _virDomainSoundCodecDef virDomainSoundCodecDef;
typedef virDomainSoundCodecDef *virDomainSoundCodecDefPtr;

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
typedef struct _virDomainSoundDef virDomainSoundDef;
typedef virDomainSoundDef *virDomainSoundDefPtr;

typedef struct _virDomainVideoDef virDomainVideoDef;
typedef virDomainVideoDef *virDomainVideoDefPtr;

typedef struct _virDomainHostdevDef virDomainHostdevDef;
typedef virDomainHostdevDef *virDomainHostdevDefPtr;

typedef struct _virDomainWatchdogDef virDomainWatchdogDef;
typedef virDomainWatchdogDef *virDomainWatchdogDefPtr;

typedef struct _virDomainGraphicsDef virDomainGraphicsDef;
typedef virDomainGraphicsDef *virDomainGraphicsDefPtr;

typedef struct _virDomainHubDef virDomainHubDef;
typedef virDomainHubDef *virDomainHubDefPtr;

typedef struct _virDomainRedirdevDef virDomainRedirdevDef;
typedef virDomainRedirdevDef *virDomainRedirdevDefPtr;

97 98 99 100 101 102
typedef struct _virDomainRedirFilterUsbDevDef virDomainRedirFilterUsbDevDef;
typedef virDomainRedirFilterUsbDevDef *virDomainRedirFilterUsbDevDefPtr;

typedef struct _virDomainRedirFilterDef virDomainRedirFilterDef;
typedef virDomainRedirFilterDef *virDomainRedirFilterDefPtr;

103 104 105 106 107 108 109 110 111
typedef struct _virDomainSmartcardDef virDomainSmartcardDef;
typedef virDomainSmartcardDef *virDomainSmartcardDefPtr;

typedef struct _virDomainChrDef virDomainChrDef;
typedef virDomainChrDef *virDomainChrDefPtr;

typedef struct _virDomainMemballoonDef virDomainMemballoonDef;
typedef virDomainMemballoonDef *virDomainMemballoonDefPtr;

112 113 114 115 116 117
typedef struct _virDomainSnapshotObj virDomainSnapshotObj;
typedef virDomainSnapshotObj *virDomainSnapshotObjPtr;

typedef struct _virDomainSnapshotObjList virDomainSnapshotObjList;
typedef virDomainSnapshotObjList *virDomainSnapshotObjListPtr;

118 119 120
typedef struct _virDomainRNGDef virDomainRNGDef;
typedef virDomainRNGDef *virDomainRNGDefPtr;

121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
/* Flags for the 'type' field in virDomainDeviceDef */
typedef enum {
    VIR_DOMAIN_DEVICE_NONE = 0,
    VIR_DOMAIN_DEVICE_DISK,
    VIR_DOMAIN_DEVICE_LEASE,
    VIR_DOMAIN_DEVICE_FS,
    VIR_DOMAIN_DEVICE_NET,
    VIR_DOMAIN_DEVICE_INPUT,
    VIR_DOMAIN_DEVICE_SOUND,
    VIR_DOMAIN_DEVICE_VIDEO,
    VIR_DOMAIN_DEVICE_HOSTDEV,
    VIR_DOMAIN_DEVICE_WATCHDOG,
    VIR_DOMAIN_DEVICE_CONTROLLER,
    VIR_DOMAIN_DEVICE_GRAPHICS,
    VIR_DOMAIN_DEVICE_HUB,
    VIR_DOMAIN_DEVICE_REDIRDEV,
    VIR_DOMAIN_DEVICE_SMARTCARD,
    VIR_DOMAIN_DEVICE_CHR,
    VIR_DOMAIN_DEVICE_MEMBALLOON,
140
    VIR_DOMAIN_DEVICE_RNG,
141

142
    VIR_DOMAIN_DEVICE_LAST
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
} virDomainDeviceType;

typedef struct _virDomainDeviceDef virDomainDeviceDef;
typedef virDomainDeviceDef *virDomainDeviceDefPtr;
struct _virDomainDeviceDef {
    int type; /* enum virDomainDeviceType */
    union {
        virDomainDiskDefPtr disk;
        virDomainControllerDefPtr controller;
        virDomainLeaseDefPtr lease;
        virDomainFSDefPtr fs;
        virDomainNetDefPtr net;
        virDomainInputDefPtr input;
        virDomainSoundDefPtr sound;
        virDomainVideoDefPtr video;
        virDomainHostdevDefPtr hostdev;
        virDomainWatchdogDefPtr watchdog;
        virDomainGraphicsDefPtr graphics;
        virDomainHubDefPtr hub;
        virDomainRedirdevDefPtr redirdev;
        virDomainSmartcardDefPtr smartcard;
        virDomainChrDefPtr chr;
        virDomainMemballoonDefPtr memballoon;
166
        virDomainRNGDefPtr rng;
167 168 169
    } data;
};

170 171 172 173 174 175 176 177 178 179 180 181 182
/* 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_TEST,
    VIR_DOMAIN_VIRT_VMWARE,
    VIR_DOMAIN_VIRT_HYPERV,
183
    VIR_DOMAIN_VIRT_VBOX,
184
    VIR_DOMAIN_VIRT_PHYP,
D
Dmitry Guryanov 已提交
185
    VIR_DOMAIN_VIRT_PARALLELS,
186

187
    VIR_DOMAIN_VIRT_LAST
188 189
};

190 191 192
enum virDomainDeviceAddressType {
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE,
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI,
193
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE,
194
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL,
E
Eric Blake 已提交
195
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCID,
196
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB,
197
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO,
198
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390,
199
    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW,
200 201 202 203

    VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST
};

204 205 206 207 208 209 210 211
enum virDomainPciRombarMode {
    VIR_DOMAIN_PCI_ROMBAR_DEFAULT = 0,
    VIR_DOMAIN_PCI_ROMBAR_ON,
    VIR_DOMAIN_PCI_ROMBAR_OFF,

    VIR_DOMAIN_PCI_ROMBAR_LAST
};

212 213 214 215 216
typedef struct _virDomainDeviceDriveAddress virDomainDeviceDriveAddress;
typedef virDomainDeviceDriveAddress *virDomainDeviceDriveAddressPtr;
struct _virDomainDeviceDriveAddress {
    unsigned int controller;
    unsigned int bus;
217
    unsigned int target;
218 219 220
    unsigned int unit;
};

221 222 223 224 225
typedef struct _virDomainDeviceVirtioSerialAddress virDomainDeviceVirtioSerialAddress;
typedef virDomainDeviceVirtioSerialAddress *virDomainDeviceVirtioSerialAddressPtr;
struct _virDomainDeviceVirtioSerialAddress {
    unsigned int controller;
    unsigned int bus;
226
    unsigned int port;
227 228
};

229 230 231 232 233 234 235 236 237 238 239 240 241
# define VIR_DOMAIN_DEVICE_CCW_MAX_CSSID    254
# define VIR_DOMAIN_DEVICE_CCW_MAX_SSID       3
# define VIR_DOMAIN_DEVICE_CCW_MAX_DEVNO  65535

typedef struct _virDomainDeviceCCWAddress virDomainDeviceCCWAddress;
typedef virDomainDeviceCCWAddress *virDomainDeviceCCWAddressPtr;
struct _virDomainDeviceCCWAddress {
    unsigned int cssid;
    unsigned int ssid;
    unsigned int devno;
    bool         assigned;
};

E
Eric Blake 已提交
242 243 244 245 246 247 248
typedef struct _virDomainDeviceCcidAddress virDomainDeviceCcidAddress;
typedef virDomainDeviceCcidAddress *virDomainDeviceCcidAddressPtr;
struct _virDomainDeviceCcidAddress {
    unsigned int controller;
    unsigned int slot;
};

249 250 251 252
typedef struct _virDomainDeviceUSBAddress virDomainDeviceUSBAddress;
typedef virDomainDeviceUSBAddress *virDomainDeviceUSBAddressPtr;
struct _virDomainDeviceUSBAddress {
    unsigned int bus;
253
    char *port;
254 255
};

256 257 258 259 260 261 262
typedef struct _virDomainDeviceSpaprVioAddress virDomainDeviceSpaprVioAddress;
typedef virDomainDeviceSpaprVioAddress *virDomainDeviceSpaprVioAddressPtr;
struct _virDomainDeviceSpaprVioAddress {
    unsigned long long reg;
    bool has_reg;
};

263 264 265 266 267 268 269 270 271 272 273 274 275
enum virDomainControllerMaster {
    VIR_DOMAIN_CONTROLLER_MASTER_NONE,
    VIR_DOMAIN_CONTROLLER_MASTER_USB,

    VIR_DOMAIN_CONTROLLER_MASTER_LAST
};

typedef struct _virDomainDeviceUSBMaster virDomainDeviceUSBMaster;
typedef virDomainDeviceUSBMaster *virDomainDeviceUSBMasterPtr;
struct _virDomainDeviceUSBMaster {
    unsigned int startport;
};

276 277 278
typedef struct _virDomainDeviceInfo virDomainDeviceInfo;
typedef virDomainDeviceInfo *virDomainDeviceInfoPtr;
struct _virDomainDeviceInfo {
279 280 281 282
    /* If adding to this struct, ensure that
     * virDomainDeviceInfoIsSet() is updated
     * to consider the new fields
     */
D
Daniel P. Berrange 已提交
283
    char *alias;
284 285
    int type;
    union {
286
        virDevicePCIAddress pci;
287
        virDomainDeviceDriveAddress drive;
288
        virDomainDeviceVirtioSerialAddress vioserial;
E
Eric Blake 已提交
289
        virDomainDeviceCcidAddress ccid;
290
        virDomainDeviceUSBAddress usb;
291
        virDomainDeviceSpaprVioAddress spaprvio;
292
        virDomainDeviceCCWAddress ccw;
293
    } addr;
294 295 296 297
    int mastertype;
    union {
        virDomainDeviceUSBMaster usb;
    } master;
298 299
    /* rombar and romfile are only used for pci hostdev and network
     * devices. */
300
    int rombar;         /* enum virDomainPciRombarMode */
301
    char *romfile;
302 303
    /* bootIndex is only used for disk, network interface, hostdev
     * and redirdev devices */
304
    int bootIndex;
305 306
};

E
Eric Blake 已提交
307
enum virDomainSeclabelType {
308 309
    VIR_DOMAIN_SECLABEL_DEFAULT,
    VIR_DOMAIN_SECLABEL_NONE,
E
Eric Blake 已提交
310 311 312
    VIR_DOMAIN_SECLABEL_DYNAMIC,
    VIR_DOMAIN_SECLABEL_STATIC,

313
    VIR_DOMAIN_SECLABEL_LAST
E
Eric Blake 已提交
314 315 316 317 318 319 320 321 322 323 324 325
};

/* 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 */
    char *baselabel;    /* base name of label string */
    int type;           /* virDomainSeclabelType */
    bool norelabel;
326
    bool implicit;      /* true if seclabel is auto-added */
E
Eric Blake 已提交
327 328
};

329 330 331 332 333

/* Security configuration for domain */
typedef struct _virSecurityDeviceLabelDef virSecurityDeviceLabelDef;
typedef virSecurityDeviceLabelDef *virSecurityDeviceLabelDefPtr;
struct _virSecurityDeviceLabelDef {
334
    char *model;
335 336 337 338 339
    char *label;        /* image label string */
    bool norelabel;
};


340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364
typedef struct _virDomainHostdevOrigStates virDomainHostdevOrigStates;
typedef virDomainHostdevOrigStates *virDomainHostdevOrigStatesPtr;
struct _virDomainHostdevOrigStates {
    union {
        struct {
            /* Does the device need to unbind from stub when
             * reattaching to host?
             */
            unsigned int unbind_from_stub : 1;

            /* Does it need to use remove_slot when reattaching
             * the device to host?
             */
            unsigned int remove_slot : 1;

            /* Does it need to reprobe driver for the device when
             * reattaching to host?
             */
            unsigned int reprobe :1;
        } pci;

        /* Perhaps 'usb' in future */
    } states;
};

365 366 367 368 369 370 371
struct _virDomainLeaseDef {
    char *lockspace;
    char *key;
    char *path;
    unsigned long long offset;
};

372

373 374 375 376
enum virDomainHostdevMode {
    VIR_DOMAIN_HOSTDEV_MODE_SUBSYS,
    VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES,

377
    VIR_DOMAIN_HOSTDEV_MODE_LAST
378 379 380 381 382 383 384 385 386
};

enum virDomainHostdevSubsysType {
    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB,
    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI,

    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST
};

387 388 389 390

typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys;
typedef virDomainHostdevSubsys *virDomainHostdevSubsysPtr;
struct _virDomainHostdevSubsys {
391
    int type; /* enum virDomainHostdevSubsysType */
392 393
    union {
        struct {
394 395
            bool autoAddress; /* bus/device were filled automatically based
                                 on vedor/product */
396 397 398 399 400 401
            unsigned bus;
            unsigned device;

            unsigned vendor;
            unsigned product;
        } usb;
402
        virDevicePCIAddress pci; /* host address */
403 404 405
    } u;
};

406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428

enum virDomainHostdevCapsType {
    VIR_DOMAIN_HOSTDEV_CAPS_TYPE_STORAGE,
    VIR_DOMAIN_HOSTDEV_CAPS_TYPE_MISC,

    VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST
};

typedef struct _virDomainHostdevCaps virDomainHostdevCaps;
typedef virDomainHostdevCaps *virDomainHostdevCapsPtr;
struct _virDomainHostdevCaps {
    int type; /* enum virDOmainHostdevCapsType */
    union {
        struct {
            char *block;
        } storage;
        struct {
            char *chardev;
        } misc;
    } u;
};


429 430
/* basic device for direct passthrough */
struct _virDomainHostdevDef {
431
    virDomainDeviceDef parent; /* higher level Def containing this */
432
    int mode; /* enum virDomainHostdevMode */
433
    int startupPolicy; /* enum virDomainStartupPolicy */
434
    unsigned int managed : 1;
435
    unsigned int missing : 1;
436
    union {
437
        virDomainHostdevSubsys subsys;
438
        virDomainHostdevCaps caps;
439 440
    } source;
    virDomainHostdevOrigStates origstates;
441
    virDomainDeviceInfoPtr info; /* Guest address */
442 443
};

444 445 446 447
/* Two types of disk backends */
enum virDomainDiskType {
    VIR_DOMAIN_DISK_TYPE_BLOCK,
    VIR_DOMAIN_DISK_TYPE_FILE,
448
    VIR_DOMAIN_DISK_TYPE_DIR,
M
MORITA Kazutaka 已提交
449
    VIR_DOMAIN_DISK_TYPE_NETWORK,
450
    VIR_DOMAIN_DISK_TYPE_VOLUME,
451 452 453 454 455 456 457 458 459

    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,
460
    VIR_DOMAIN_DISK_DEVICE_LUN,
461 462 463 464 465 466 467 468 469 470

    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,
471
    VIR_DOMAIN_DISK_BUS_USB,
472
    VIR_DOMAIN_DISK_BUS_UML,
473
    VIR_DOMAIN_DISK_BUS_SATA,
474 475 476 477

    VIR_DOMAIN_DISK_BUS_LAST
};

478 479 480 481 482
enum  virDomainDiskCache {
    VIR_DOMAIN_DISK_CACHE_DEFAULT,
    VIR_DOMAIN_DISK_CACHE_DISABLE,
    VIR_DOMAIN_DISK_CACHE_WRITETHRU,
    VIR_DOMAIN_DISK_CACHE_WRITEBACK,
483
    VIR_DOMAIN_DISK_CACHE_DIRECTSYNC,
484
    VIR_DOMAIN_DISK_CACHE_UNSAFE,
485 486 487 488

    VIR_DOMAIN_DISK_CACHE_LAST
};

489 490 491
enum  virDomainDiskErrorPolicy {
    VIR_DOMAIN_DISK_ERROR_POLICY_DEFAULT,
    VIR_DOMAIN_DISK_ERROR_POLICY_STOP,
492
    VIR_DOMAIN_DISK_ERROR_POLICY_REPORT,
493
    VIR_DOMAIN_DISK_ERROR_POLICY_IGNORE,
494
    VIR_DOMAIN_DISK_ERROR_POLICY_ENOSPACE,
495 496 497 498

    VIR_DOMAIN_DISK_ERROR_POLICY_LAST
};

M
MORITA Kazutaka 已提交
499 500 501 502
enum virDomainDiskProtocol {
    VIR_DOMAIN_DISK_PROTOCOL_NBD,
    VIR_DOMAIN_DISK_PROTOCOL_RBD,
    VIR_DOMAIN_DISK_PROTOCOL_SHEEPDOG,
503
    VIR_DOMAIN_DISK_PROTOCOL_GLUSTER,
504
    VIR_DOMAIN_DISK_PROTOCOL_ISCSI,
M
MORITA Kazutaka 已提交
505 506 507 508

    VIR_DOMAIN_DISK_PROTOCOL_LAST
};

509 510 511 512 513 514 515 516
enum virDomainDiskProtocolTransport {
    VIR_DOMAIN_DISK_PROTO_TRANS_TCP,
    VIR_DOMAIN_DISK_PROTO_TRANS_UNIX,
    VIR_DOMAIN_DISK_PROTO_TRANS_RDMA,

    VIR_DOMAIN_DISK_PROTO_TRANS_LAST
};

517 518 519 520 521 522 523
enum virDomainDiskTray {
    VIR_DOMAIN_DISK_TRAY_CLOSED,
    VIR_DOMAIN_DISK_TRAY_OPEN,

    VIR_DOMAIN_DISK_TRAY_LAST
};

J
J.B. Joret 已提交
524 525 526 527 528 529 530 531 532
enum  virDomainDiskGeometryTrans {
    VIR_DOMAIN_DISK_TRANS_DEFAULT = 0,
    VIR_DOMAIN_DISK_TRANS_NONE,
    VIR_DOMAIN_DISK_TRANS_AUTO,
    VIR_DOMAIN_DISK_TRANS_LBA,

    VIR_DOMAIN_DISK_TRANS_LAST
};

M
MORITA Kazutaka 已提交
533 534 535 536 537
typedef struct _virDomainDiskHostDef virDomainDiskHostDef;
typedef virDomainDiskHostDef *virDomainDiskHostDefPtr;
struct _virDomainDiskHostDef {
    char *name;
    char *port;
538 539
    int transport; /* enum virDomainDiskProtocolTransport */
    char *socket;  /* path to unix socket */
M
MORITA Kazutaka 已提交
540 541
};

M
Matthias Dahl 已提交
542 543 544 545 546 547 548 549
enum  virDomainDiskIo {
    VIR_DOMAIN_DISK_IO_DEFAULT,
    VIR_DOMAIN_DISK_IO_NATIVE,
    VIR_DOMAIN_DISK_IO_THREADS,

    VIR_DOMAIN_DISK_IO_LAST
};

550 551 552 553 554 555 556 557
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
};

558 559 560 561 562 563 564 565
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
};

O
Osier Yang 已提交
566 567 568 569 570 571 572 573
enum virDomainDiskCopyOnRead {
    VIR_DOMAIN_DISK_COPY_ON_READ_DEFAULT = 0,
    VIR_DOMAIN_DISK_COPY_ON_READ_ON,
    VIR_DOMAIN_DISK_COPY_ON_READ_OFF,

    VIR_DOMAIN_DISK_COPY_ON_READ_LAST
};

574 575 576 577 578 579 580 581 582
enum virDomainStartupPolicy {
    VIR_DOMAIN_STARTUP_POLICY_DEFAULT = 0,
    VIR_DOMAIN_STARTUP_POLICY_MANDATORY,
    VIR_DOMAIN_STARTUP_POLICY_REQUISITE,
    VIR_DOMAIN_STARTUP_POLICY_OPTIONAL,

    VIR_DOMAIN_STARTUP_POLICY_LAST
};

583 584 585 586 587 588 589 590
enum virDomainDiskSecretType {
    VIR_DOMAIN_DISK_SECRET_TYPE_NONE,
    VIR_DOMAIN_DISK_SECRET_TYPE_UUID,
    VIR_DOMAIN_DISK_SECRET_TYPE_USAGE,

    VIR_DOMAIN_DISK_SECRET_TYPE_LAST
};

O
Osier Yang 已提交
591 592 593 594 595 596 597 598
enum virDomainDiskSGIO {
    VIR_DOMAIN_DISK_SGIO_DEFAULT = 0,
    VIR_DOMAIN_DISK_SGIO_FILTERED,
    VIR_DOMAIN_DISK_SGIO_UNFILTERED,

    VIR_DOMAIN_DISK_SGIO_LAST
};

L
Lei Li 已提交
599 600 601 602 603 604 605 606 607 608 609
typedef struct _virDomainBlockIoTuneInfo virDomainBlockIoTuneInfo;
struct _virDomainBlockIoTuneInfo {
    unsigned long long total_bytes_sec;
    unsigned long long read_bytes_sec;
    unsigned long long write_bytes_sec;
    unsigned long long total_iops_sec;
    unsigned long long read_iops_sec;
    unsigned long long write_iops_sec;
};
typedef virDomainBlockIoTuneInfo *virDomainBlockIoTuneInfoPtr;

610 611 612 613 614 615 616
typedef struct _virDomainDiskSourcePoolDef virDomainDiskSourcePoolDef;
struct _virDomainDiskSourcePoolDef {
    char *pool; /* pool name */
    char *volume; /* volume name */
};
typedef virDomainDiskSourcePoolDef *virDomainDiskSourcePoolDefPtr;

617 618 619 620 621 622 623
/* Stores the virtual disk configuration */
struct _virDomainDiskDef {
    int type;
    int device;
    int bus;
    char *src;
    char *dst;
624
    int tray_status;
M
MORITA Kazutaka 已提交
625
    int protocol;
626
    size_t nhosts;
M
MORITA Kazutaka 已提交
627
    virDomainDiskHostDefPtr hosts;
628
    virDomainDiskSourcePoolDefPtr srcpool;
629 630 631 632 633 634 635 636
    struct {
        char *username;
        int secretType; /* enum virDomainDiskSecretType */
        union {
            unsigned char uuid[VIR_UUID_BUFLEN];
            char *usage;
        } secret;
    } auth;
637
    char *driverName;
638
    int format; /* enum virStorageFileFormat */
639
    virStorageFileMetadataPtr backingChain;
L
Lei Li 已提交
640

641
    char *mirror;
642
    int mirrorFormat; /* enum virStorageFileFormat */
643 644
    bool mirroring;

J
J.B. Joret 已提交
645 646 647 648 649 650 651
    struct {
        unsigned int cylinders;
        unsigned int heads;
        unsigned int sectors;
        int trans;
    } geometry;

652 653 654
    struct {
        unsigned int logical_block_size;
        unsigned int physical_block_size;
V
Viktor Mihajlovski 已提交
655
    } blockio;
656

L
Lei Li 已提交
657 658
    virDomainBlockIoTuneInfo blkdeviotune;

659
    char *serial;
O
Osier Yang 已提交
660
    char *wwn;
661 662
    char *vendor;
    char *product;
663
    int cachemode;
664 665
    int error_policy;  /* enum virDomainDiskErrorPolicy */
    int rerror_policy; /* enum virDomainDiskErrorPolicy */
M
Matthias Dahl 已提交
666
    int iomode;
667
    int ioeventfd;
668
    int event_idx;
O
Osier Yang 已提交
669
    int copy_on_read;
E
Eric Blake 已提交
670
    int snapshot; /* enum virDomainSnapshotLocation, snapshot_conf.h */
671
    int startupPolicy; /* enum virDomainStartupPolicy */
672 673
    unsigned int readonly : 1;
    unsigned int shared : 1;
674
    unsigned int transient : 1;
675
    virDomainDeviceInfo info;
676
    virStorageEncryptionPtr encryption;
677 678
    bool rawio_specified;
    int rawio; /* no = 0, yes = 1 */
O
Osier Yang 已提交
679
    int sgio; /* enum virDomainDiskSGIO */
680 681 682

    size_t nseclabels;
    virSecurityDeviceLabelDefPtr *seclabels;
683 684 685
};


686 687 688 689 690
enum virDomainControllerType {
    VIR_DOMAIN_CONTROLLER_TYPE_IDE,
    VIR_DOMAIN_CONTROLLER_TYPE_FDC,
    VIR_DOMAIN_CONTROLLER_TYPE_SCSI,
    VIR_DOMAIN_CONTROLLER_TYPE_SATA,
691
    VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL,
E
Eric Blake 已提交
692
    VIR_DOMAIN_CONTROLLER_TYPE_CCID,
693
    VIR_DOMAIN_CONTROLLER_TYPE_USB,
694 695 696 697

    VIR_DOMAIN_CONTROLLER_TYPE_LAST
};

698

699 700 701 702 703 704
enum virDomainControllerModelSCSI {
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO,
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC,
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC,
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068,
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI,
705
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI,
706
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI,
707
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1078,
708

709
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST
710 711
};

M
Marc-André Lureau 已提交
712 713 714 715 716 717 718 719 720 721
enum virDomainControllerModelUSB {
    VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI,
    VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX4_UHCI,
    VIR_DOMAIN_CONTROLLER_MODEL_USB_EHCI,
    VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1,
    VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI1,
    VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI2,
    VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI3,
    VIR_DOMAIN_CONTROLLER_MODEL_USB_VT82C686B_UHCI,
    VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI,
G
Gerd Hoffmann 已提交
722
    VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI,
723
    VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE,
M
Marc-André Lureau 已提交
724 725 726 727

    VIR_DOMAIN_CONTROLLER_MODEL_USB_LAST
};

728 729 730 731 732 733 734
typedef struct _virDomainVirtioSerialOpts virDomainVirtioSerialOpts;
typedef virDomainVirtioSerialOpts *virDomainVirtioSerialOptsPtr;
struct _virDomainVirtioSerialOpts {
    int ports;   /* -1 == undef */
    int vectors; /* -1 == undef */
};

735 736 737 738
/* Stores the virtual disk controller configuration */
struct _virDomainControllerDef {
    int type;
    int idx;
739
    int model; /* -1 == undef */
740
    unsigned int num_queues;
741 742 743
    union {
        virDomainVirtioSerialOpts vioserial;
    } opts;
744 745 746 747
    virDomainDeviceInfo info;
};


748 749
/* Two types of disk backends */
enum virDomainFSType {
750 751 752 753 754 755
    VIR_DOMAIN_FS_TYPE_MOUNT, /* Mounts (binds) a host dir on a guest dir */
    VIR_DOMAIN_FS_TYPE_BLOCK, /* Mounts a host block dev on a guest dir */
    VIR_DOMAIN_FS_TYPE_FILE,  /* Loopback mounts a host file on a guest dir */
    VIR_DOMAIN_FS_TYPE_TEMPLATE, /* Expands a OS template to a guest dir */
    VIR_DOMAIN_FS_TYPE_RAM,   /* Mount a RAM filesystem on a guest dir */
    VIR_DOMAIN_FS_TYPE_BIND,  /* Binds a guest dir to another guest dir */
756 757 758 759

    VIR_DOMAIN_FS_TYPE_LAST
};

760 761 762 763 764 765 766 767 768
/* Filesystem driver type */
enum virDomainFSDriverType {
    VIR_DOMAIN_FS_DRIVER_TYPE_DEFAULT = 0,
    VIR_DOMAIN_FS_DRIVER_TYPE_PATH,
    VIR_DOMAIN_FS_DRIVER_TYPE_HANDLE,

    VIR_DOMAIN_FS_DRIVER_TYPE_LAST
};

769 770 771 772 773 774 775 776 777
/* 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
};

778 779 780 781 782 783 784 785
/* Filesystem Write policy */
enum virDomainFSWrpolicy {
    VIR_DOMAIN_FS_WRPOLICY_DEFAULT = 0,
    VIR_DOMAIN_FS_WRPOLICY_IMMEDIATE,

    VIR_DOMAIN_FS_WRPOLICY_LAST
};

786 787 788
/* Allow 2 MB ram usage */
# define VIR_DOMAIN_FS_RAM_DEFAULT_USAGE (1024 * 2)

789 790
struct _virDomainFSDef {
    int type;
791
    int fsdriver;
792
    int accessmode;
793
    int wrpolicy; /* enum virDomainFSWrpolicy */
794
    unsigned long long usage;
795 796 797
    char *src;
    char *dst;
    unsigned int readonly : 1;
798
    virDomainDeviceInfo info;
799 800
    unsigned long long space_hard_limit; /* in bytes */
    unsigned long long space_soft_limit; /* in bytes */
801 802 803
};


804
/* network config types */
805 806 807 808 809 810 811 812
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 已提交
813
    VIR_DOMAIN_NET_TYPE_INTERNAL,
814
    VIR_DOMAIN_NET_TYPE_DIRECT,
815
    VIR_DOMAIN_NET_TYPE_HOSTDEV,
816

817
    VIR_DOMAIN_NET_TYPE_LAST
818 819
};

820 821 822 823 824 825
/* 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 */

826
    VIR_DOMAIN_NET_BACKEND_TYPE_LAST
827
};
828

829 830 831 832 833 834
/* 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,

835
    VIR_DOMAIN_NET_VIRTIO_TX_MODE_LAST
836 837
};

838 839 840 841 842 843 844 845 846
/* link interface states */
enum virDomainNetInterfaceLinkState {
        VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DEFAULT = 0, /* Default link state (up) */
        VIR_DOMAIN_NET_INTERFACE_LINK_STATE_UP,          /* Link is up. ("cable" connected) */
        VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DOWN ,       /* Link is down. ("cable" disconnected) */

        VIR_DOMAIN_NET_INTERFACE_LINK_STATE_LAST
};

847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863
/* 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 */
        } direct;
864 865 866
        struct {
            virDomainHostdevDef def;
        } hostdev;
867
    } data;
868
    virNetDevVPortProfilePtr virtPortProfile;
869
    virNetDevBandwidthPtr bandwidth;
870
    virNetDevVlan vlan;
871
    unsigned int class_id; /* class ID for bandwidth 'floor' */
872 873
};

874 875
/* Stores the virtual network interface configuration */
struct _virDomainNetDef {
S
Stefan Berger 已提交
876
    enum virDomainNetType type;
877
    virMacAddr mac;
878
    char *model;
879 880 881
    union {
        struct {
            enum virDomainNetBackendType name; /* which driver backend to use */
882
            enum virDomainNetVirtioTxModeType txmode;
883
            enum virDomainIoEventFd ioeventfd;
884
            enum virDomainVirtioEventIdx event_idx;
885 886
        } virtio;
    } driver;
887 888 889 890 891 892 893 894 895 896 897
    union {
        struct {
            char *dev;
            char *ipaddr;
        } ethernet;
        struct {
            char *address;
            int port;
        } socket; /* any of NET_CLIENT or NET_SERVER or NET_MCAST */
        struct {
            char *name;
898 899 900 901 902 903 904 905 906 907
            char *portgroup;
            /* 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;
908 909 910
        } network;
        struct {
            char *brname;
911
            char *ipaddr;
912
        } bridge;
D
Daniel Veillard 已提交
913 914 915
        struct {
            char *name;
        } internal;
916 917
        struct {
            char *linkdev;
918
            int mode; /* enum virMacvtapMode from util/macvtap.h */
919
        } direct;
920 921 922
        struct {
            virDomainHostdevDef def;
        } hostdev;
923
    } data;
924 925
    /* virtPortProfile is used by network/bridge/direct/hostdev */
    virNetDevVPortProfilePtr virtPortProfile;
926 927 928 929
    struct {
        bool sndbuf_specified;
        unsigned long sndbuf;
    } tune;
930
    char *script;
931
    char *ifname;
932
    virDomainDeviceInfo info;
933 934
    char *filter;
    virNWFilterHashTablePtr filterparams;
935
    virNetDevBandwidthPtr bandwidth;
936
    virNetDevVlan vlan;
937
    int linkstate;
938 939
};

E
Eric Blake 已提交
940 941 942 943
/* 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"

944
enum virDomainChrDeviceType {
945
    VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL = 0,
946 947
    VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL,
    VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE,
948
    VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL,
949

950
    VIR_DOMAIN_CHR_DEVICE_TYPE_LAST
951 952
};

G
Guannan Ren 已提交
953 954 955 956 957 958 959
enum virDomainChrSerialTargetType {
    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA = 0,
    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB,

    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST
};

960
enum virDomainChrChannelTargetType {
961 962
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_NONE = 0,
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD,
963 964
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO,

965
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST
966 967
};

968
enum virDomainChrConsoleTargetType {
969 970
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE  = 0,
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL,
971 972
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN,
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_UML,
C
Cole Robinson 已提交
973
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO,
974 975
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LXC,
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_OPENVZ,
976 977
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLP,
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLPLM,
978

979
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LAST
980 981
};

982
enum virDomainChrType {
983 984 985 986 987 988 989 990 991 992
    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,
993
    VIR_DOMAIN_CHR_TYPE_SPICEVMC,
994

995
    VIR_DOMAIN_CHR_TYPE_LAST
996 997 998 999 1000
};

enum virDomainChrTcpProtocol {
    VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW,
    VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET,
1001 1002
    VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNETS, /* secure telnet */
    VIR_DOMAIN_CHR_TCP_PROTOCOL_TLS,
1003

1004
    VIR_DOMAIN_CHR_TCP_PROTOCOL_LAST
1005 1006
};

E
Eric Blake 已提交
1007 1008 1009
enum virDomainChrSpicevmcName {
    VIR_DOMAIN_CHR_SPICEVMC_VDAGENT,
    VIR_DOMAIN_CHR_SPICEVMC_SMARTCARD,
1010
    VIR_DOMAIN_CHR_SPICEVMC_USBREDIR,
E
Eric Blake 已提交
1011

1012
    VIR_DOMAIN_CHR_SPICEVMC_LAST
E
Eric Blake 已提交
1013 1014
};

1015 1016 1017 1018 1019
/* The host side information for a character device.  */
typedef struct _virDomainChrSourceDef virDomainChrSourceDef;
typedef virDomainChrSourceDef *virDomainChrSourceDefPtr;
struct _virDomainChrSourceDef {
    int type; /* virDomainChrType */
1020
    union {
E
Eric Blake 已提交
1021
        /* no <source> for null, vc, stdio */
1022 1023 1024 1025 1026 1027
        struct {
            char *path;
        } file; /* pty, file, pipe, or device */
        struct {
            char *host;
            char *service;
1028
            bool listen;
1029 1030 1031 1032 1033 1034 1035 1036 1037 1038
            int protocol;
        } tcp;
        struct {
            char *bindHost;
            char *bindService;
            char *connectHost;
            char *connectService;
        } udp;
        struct {
            char *path;
1039
            bool listen;
1040
        } nix;
E
Eric Blake 已提交
1041
        int spicevmc;
1042
    } data;
1043 1044 1045 1046 1047
};

/* A complete character device, both host and domain views.  */
struct _virDomainChrDef {
    int deviceType;
G
Guannan Ren 已提交
1048 1049

    bool targetTypeAttr;
1050 1051 1052 1053 1054 1055 1056 1057
    int targetType;
    union {
        int port; /* parallel, serial, console */
        virSocketAddrPtr addr; /* guestfwd */
        char *name; /* virtio */
    } target;

    virDomainChrSourceDef source;
1058 1059

    virDomainDeviceInfo info;
1060 1061 1062

    size_t nseclabels;
    virSecurityDeviceLabelDefPtr *seclabels;
1063 1064
};

E
Eric Blake 已提交
1065 1066 1067 1068 1069
enum virDomainSmartcardType {
    VIR_DOMAIN_SMARTCARD_TYPE_HOST,
    VIR_DOMAIN_SMARTCARD_TYPE_HOST_CERTIFICATES,
    VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH,

1070
    VIR_DOMAIN_SMARTCARD_TYPE_LAST
E
Eric Blake 已提交
1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089
};

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

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;
};

M
Marc-André Lureau 已提交
1090 1091 1092 1093 1094
struct _virDomainHubDef {
    int type;
    virDomainDeviceInfo info;
};

1095 1096 1097 1098
enum virDomainInputType {
    VIR_DOMAIN_INPUT_TYPE_MOUSE,
    VIR_DOMAIN_INPUT_TYPE_TABLET,

1099
    VIR_DOMAIN_INPUT_TYPE_LAST
1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112
};

enum virDomainInputBus {
    VIR_DOMAIN_INPUT_BUS_PS2,
    VIR_DOMAIN_INPUT_BUS_USB,
    VIR_DOMAIN_INPUT_BUS_XEN,

    VIR_DOMAIN_INPUT_BUS_LAST
};

struct _virDomainInputDef {
    int type;
    int bus;
1113
    virDomainDeviceInfo info;
1114 1115
};

1116 1117 1118 1119 1120 1121 1122
enum virDomainSoundCodecType {
    VIR_DOMAIN_SOUND_CODEC_TYPE_DUPLEX,
    VIR_DOMAIN_SOUND_CODEC_TYPE_MICRO,

    VIR_DOMAIN_SOUND_CODEC_TYPE_LAST
};

1123 1124 1125 1126
enum virDomainSoundModel {
    VIR_DOMAIN_SOUND_MODEL_SB16,
    VIR_DOMAIN_SOUND_MODEL_ES1370,
    VIR_DOMAIN_SOUND_MODEL_PCSPK,
D
Daniel P. Berrange 已提交
1127
    VIR_DOMAIN_SOUND_MODEL_AC97,
1128
    VIR_DOMAIN_SOUND_MODEL_ICH6,
1129 1130 1131 1132

    VIR_DOMAIN_SOUND_MODEL_LAST
};

1133 1134 1135 1136 1137
struct _virDomainSoundCodecDef {
    int type;
    int cad;
};

1138 1139
struct _virDomainSoundDef {
    int model;
1140
    virDomainDeviceInfo info;
1141

1142
    size_t ncodecs;
1143
    virDomainSoundCodecDefPtr *codecs;
1144 1145
};

R
Richard Jones 已提交
1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157
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 已提交
1158
    VIR_DOMAIN_WATCHDOG_ACTION_DUMP,
R
Richard Jones 已提交
1159 1160 1161 1162 1163 1164 1165 1166
    VIR_DOMAIN_WATCHDOG_ACTION_NONE,

    VIR_DOMAIN_WATCHDOG_ACTION_LAST
};

struct _virDomainWatchdogDef {
    int model;
    int action;
1167
    virDomainDeviceInfo info;
R
Richard Jones 已提交
1168 1169
};

1170 1171 1172 1173 1174 1175 1176

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,
1177
    VIR_DOMAIN_VIDEO_TYPE_QXL,
1178 1179 1180 1181 1182

    VIR_DOMAIN_VIDEO_TYPE_LAST
};


1183 1184 1185
typedef struct _virDomainVideoAccelDef virDomainVideoAccelDef;
typedef virDomainVideoAccelDef *virDomainVideoAccelDefPtr;
struct _virDomainVideoAccelDef {
1186 1187
    unsigned int support3d :1;
    unsigned int support2d :1;
1188 1189 1190
};


1191 1192
struct _virDomainVideoDef {
    int type;
1193 1194
    unsigned int ram;  /* kibibytes (multiples of 1024) */
    unsigned int vram; /* kibibytes (multiples of 1024) */
1195
    unsigned int heads;
1196
    bool primary;
1197
    virDomainVideoAccelDefPtr accel;
1198
    virDomainDeviceInfo info;
1199 1200
};

1201 1202 1203 1204
/* 3 possible graphics console modes */
enum virDomainGraphicsType {
    VIR_DOMAIN_GRAPHICS_TYPE_SDL,
    VIR_DOMAIN_GRAPHICS_TYPE_VNC,
1205 1206
    VIR_DOMAIN_GRAPHICS_TYPE_RDP,
    VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP,
1207
    VIR_DOMAIN_GRAPHICS_TYPE_SPICE,
1208

1209
    VIR_DOMAIN_GRAPHICS_TYPE_LAST
1210 1211
};

1212 1213 1214 1215 1216 1217 1218 1219 1220
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
};

1221 1222 1223 1224 1225 1226
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 */
1227
    int connected; /* action if connected */
1228 1229
};

1230 1231 1232 1233 1234 1235 1236
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 已提交
1237
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_SMARTCARD,
1238
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_USBREDIR,
1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249

    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
};
1250

1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288
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
};

P
Peng Zhou 已提交
1289 1290 1291 1292 1293 1294 1295 1296
enum virDomainGraphicsSpiceMouseMode {
    VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_DEFAULT = 0,
    VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_SERVER,
    VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_CLIENT,

    VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_LAST
};

1297 1298 1299 1300 1301 1302 1303 1304 1305
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
};

1306 1307 1308 1309 1310 1311 1312 1313
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
};

1314 1315 1316 1317 1318
enum virDomainGraphicsListenType {
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE = 0,
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS,
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK,

1319
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST
1320 1321
};

M
Marc-André Lureau 已提交
1322 1323 1324
enum virDomainHubType {
    VIR_DOMAIN_HUB_TYPE_USB,

1325
    VIR_DOMAIN_HUB_TYPE_LAST
M
Marc-André Lureau 已提交
1326 1327
};

1328 1329 1330 1331 1332 1333 1334 1335
typedef struct _virDomainGraphicsListenDef virDomainGraphicsListenDef;
typedef virDomainGraphicsListenDef *virDomainGraphicsListenDefPtr;
struct _virDomainGraphicsListenDef {
    int type;   /* enum virDomainGraphicsListenType */
    char *address;
    char *network;
};

1336
struct _virDomainGraphicsDef {
M
Michal Privoznik 已提交
1337 1338 1339 1340 1341
    /* Port value discipline:
     * Value -1 is legacy syntax indicating that it should be auto-allocated.
     * Value 0 means port wasn't specified in XML at all.
     * Positive value is actual port number given in XML.
     */
1342 1343 1344 1345
    int type;
    union {
        struct {
            int port;
1346
            unsigned int autoport :1;
1347
            char *keymap;
1348
            char *socket;
1349
            virDomainGraphicsAuthDef auth;
1350 1351 1352 1353
        } vnc;
        struct {
            char *display;
            char *xauth;
1354
            int fullscreen;
1355
        } sdl;
1356 1357
        struct {
            int port;
1358 1359 1360
            unsigned int autoport :1;
            unsigned int replaceUser :1;
            unsigned int multiUser :1;
1361 1362 1363
        } rdp;
        struct {
            char *display;
1364
            unsigned int fullscreen :1;
1365
        } desktop;
1366 1367 1368
        struct {
            int port;
            int tlsPort;
P
Peng Zhou 已提交
1369
            int mousemode;
1370
            char *keymap;
1371
            virDomainGraphicsAuthDef auth;
1372
            unsigned int autoport :1;
1373
            int channels[VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST];
1374
            int defaultMode; /* enum virDomainGraphicsSpiceChannelMode */
1375 1376 1377 1378
            int image;
            int jpeg;
            int zlib;
            int playback;
1379
            int streaming;
1380
            int copypaste;
1381
        } spice;
1382
    } data;
1383 1384 1385 1386 1387
    /* 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;
1388 1389
};

1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404
enum virDomainRedirdevBus {
    VIR_DOMAIN_REDIRDEV_BUS_USB,

    VIR_DOMAIN_REDIRDEV_BUS_LAST
};

struct _virDomainRedirdevDef {
    int bus; /* enum virDomainRedirdevBus */

    union {
        virDomainChrSourceDef chr;
    } source;

    virDomainDeviceInfo info; /* Guest address */
};
1405

1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418
struct _virDomainRedirFilterUsbDevDef {
    int usbClass;
    int vendor;
    int product;
    int version;
    unsigned int allow :1;
};

struct _virDomainRedirFilterDef {
    size_t nusbdevs;
    virDomainRedirFilterUsbDevDefPtr *usbdevs;
};

1419 1420 1421 1422 1423 1424 1425 1426
enum virDomainMemDump {
    VIR_DOMAIN_MEM_DUMP_DEFAULT = 0,
    VIR_DOMAIN_MEM_DUMP_ON,
    VIR_DOMAIN_MEM_DUMP_OFF,

    VIR_DOMAIN_MEM_DUMP_LAST,
};

1427 1428 1429
enum {
    VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO,
    VIR_DOMAIN_MEMBALLOON_MODEL_XEN,
1430
    VIR_DOMAIN_MEMBALLOON_MODEL_NONE,
1431 1432 1433 1434 1435 1436 1437 1438 1439 1440

    VIR_DOMAIN_MEMBALLOON_MODEL_LAST
};

struct _virDomainMemballoonDef {
    int model;
    virDomainDeviceInfo info;
};


1441
enum virDomainSmbiosMode {
1442
    VIR_DOMAIN_SMBIOS_NONE = 0,
1443 1444 1445 1446 1447 1448 1449
    VIR_DOMAIN_SMBIOS_EMULATE,
    VIR_DOMAIN_SMBIOS_HOST,
    VIR_DOMAIN_SMBIOS_SYSINFO,

    VIR_DOMAIN_SMBIOS_LAST
};

1450

1451
# define VIR_DOMAIN_MAX_BOOT_DEVS 4
1452 1453 1454 1455 1456 1457 1458

enum virDomainBootOrder {
    VIR_DOMAIN_BOOT_FLOPPY,
    VIR_DOMAIN_BOOT_CDROM,
    VIR_DOMAIN_BOOT_DISK,
    VIR_DOMAIN_BOOT_NET,

1459
    VIR_DOMAIN_BOOT_LAST
1460 1461
};

1462 1463 1464 1465
enum virDomainBootMenu {
    VIR_DOMAIN_BOOT_MENU_DEFAULT = 0,
    VIR_DOMAIN_BOOT_MENU_ENABLED,
    VIR_DOMAIN_BOOT_MENU_DISABLED,
1466 1467

    VIR_DOMAIN_BOOT_MENU_LAST
1468 1469
};

1470 1471 1472 1473
enum virDomainFeature {
    VIR_DOMAIN_FEATURE_ACPI,
    VIR_DOMAIN_FEATURE_APIC,
    VIR_DOMAIN_FEATURE_PAE,
J
Jim Fehlig 已提交
1474
    VIR_DOMAIN_FEATURE_HAP,
1475
    VIR_DOMAIN_FEATURE_VIRIDIAN,
1476
    VIR_DOMAIN_FEATURE_PRIVNET,
1477
    VIR_DOMAIN_FEATURE_HYPERV,
1478 1479 1480 1481

    VIR_DOMAIN_FEATURE_LAST
};

1482 1483 1484 1485
enum virDomainFeatureState {
    VIR_DOMAIN_FEATURE_STATE_DEFAULT = 0,
    VIR_DOMAIN_FEATURE_STATE_ON,
    VIR_DOMAIN_FEATURE_STATE_OFF,
1486

1487
    VIR_DOMAIN_FEATURE_STATE_LAST
1488 1489
};

1490 1491 1492 1493 1494 1495
enum virDomainHyperv {
    VIR_DOMAIN_HYPERV_RELAXED = 0,

    VIR_DOMAIN_HYPERV_LAST
};

1496 1497 1498 1499 1500 1501 1502 1503 1504
enum virDomainLifecycleAction {
    VIR_DOMAIN_LIFECYCLE_DESTROY,
    VIR_DOMAIN_LIFECYCLE_RESTART,
    VIR_DOMAIN_LIFECYCLE_RESTART_RENAME,
    VIR_DOMAIN_LIFECYCLE_PRESERVE,

    VIR_DOMAIN_LIFECYCLE_LAST
};

1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515
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
};

1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527
typedef enum {
    VIR_DOMAIN_LOCK_FAILURE_DEFAULT,
    VIR_DOMAIN_LOCK_FAILURE_POWEROFF,
    VIR_DOMAIN_LOCK_FAILURE_RESTART,
    VIR_DOMAIN_LOCK_FAILURE_PAUSE,
    VIR_DOMAIN_LOCK_FAILURE_IGNORE,

    VIR_DOMAIN_LOCK_FAILURE_LAST
} virDomainLockFailureAction;

VIR_ENUM_DECL(virDomainLockFailure)

1528 1529 1530 1531 1532
enum virDomainPMState {
    VIR_DOMAIN_PM_STATE_DEFAULT = 0,
    VIR_DOMAIN_PM_STATE_ENABLED,
    VIR_DOMAIN_PM_STATE_DISABLED,

1533
    VIR_DOMAIN_PM_STATE_LAST
1534 1535
};

M
Michal Privoznik 已提交
1536 1537 1538 1539 1540 1541 1542 1543 1544 1545
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;
1546 1547 1548
    /* reboot-timeout parameters */
    bool rt_set;
    int rt_delay;
M
Michal Privoznik 已提交
1549 1550
};

1551 1552 1553 1554 1555
/* Operating system configuration data & machine / arch */
typedef struct _virDomainOSDef virDomainOSDef;
typedef virDomainOSDef *virDomainOSDefPtr;
struct _virDomainOSDef {
    char *type;
1556
    virArch arch;
1557
    char *machine;
1558
    size_t nBootDevs;
1559
    int bootDevs[VIR_DOMAIN_BOOT_LAST];
1560
    /* enum virDomainBootMenu */
1561
    int bootmenu;
1562
    char *init;
1563
    char **initargv;
1564 1565 1566
    char *kernel;
    char *initrd;
    char *cmdline;
1567
    char *dtb;
1568 1569 1570 1571
    char *root;
    char *loader;
    char *bootloader;
    char *bootloaderArgs;
1572
    int smbios_mode;
1573

M
Michal Privoznik 已提交
1574
    virDomainBIOSDef bios;
1575 1576
};

1577 1578 1579 1580 1581 1582
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,
P
Paolo Bonzini 已提交
1583
    VIR_DOMAIN_TIMER_NAME_KVMCLOCK,
1584

1585
    VIR_DOMAIN_TIMER_NAME_LAST
1586 1587
};

1588 1589 1590 1591
enum virDomainTimerTrackType {
    VIR_DOMAIN_TIMER_TRACK_BOOT = 0,
    VIR_DOMAIN_TIMER_TRACK_GUEST,
    VIR_DOMAIN_TIMER_TRACK_WALL,
1592

1593
    VIR_DOMAIN_TIMER_TRACK_LAST
1594 1595 1596 1597 1598 1599 1600 1601
};

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

1602
    VIR_DOMAIN_TIMER_TICKPOLICY_LAST
1603 1604 1605 1606 1607 1608 1609
};

enum virDomainTimerModeType {
    VIR_DOMAIN_TIMER_MODE_AUTO = 0,
    VIR_DOMAIN_TIMER_MODE_NATIVE,
    VIR_DOMAIN_TIMER_MODE_EMULATE,
    VIR_DOMAIN_TIMER_MODE_PARAVIRT,
1610
    VIR_DOMAIN_TIMER_MODE_SMPSAFE,
1611

1612
    VIR_DOMAIN_TIMER_MODE_LAST
1613 1614
};

O
Osier Yang 已提交
1615
enum virDomainCpuPlacementMode {
1616
    VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC = 0,
O
Osier Yang 已提交
1617 1618
    VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO,

1619
    VIR_DOMAIN_CPU_PLACEMENT_MODE_LAST
O
Osier Yang 已提交
1620 1621
};

1622 1623 1624 1625 1626 1627 1628 1629
typedef struct _virDomainTimerCatchupDef virDomainTimerCatchupDef;
typedef virDomainTimerCatchupDef *virDomainTimerCatchupDefPtr;
struct _virDomainTimerCatchupDef {
    unsigned long threshold;
    unsigned long slew;
    unsigned long limit;
};

1630 1631 1632 1633 1634 1635 1636
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 */

1637 1638 1639 1640
    virDomainTimerCatchupDef catchup;

    /* track is only valid for name='platform|rtc' */
    int track;  /* host|guest */
1641 1642 1643 1644 1645 1646

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

1647 1648 1649
enum virDomainClockOffsetType {
    VIR_DOMAIN_CLOCK_OFFSET_UTC = 0,
    VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME = 1,
1650
    VIR_DOMAIN_CLOCK_OFFSET_VARIABLE = 2,
1651
    VIR_DOMAIN_CLOCK_OFFSET_TIMEZONE = 3,
1652

1653
    VIR_DOMAIN_CLOCK_OFFSET_LAST
1654 1655
};

1656 1657 1658 1659
enum virDomainClockBasis {
    VIR_DOMAIN_CLOCK_BASIS_UTC = 0,
    VIR_DOMAIN_CLOCK_BASIS_LOCALTIME = 1,

1660
    VIR_DOMAIN_CLOCK_BASIS_LAST
1661 1662
};

1663 1664 1665 1666
typedef struct _virDomainClockDef virDomainClockDef;
typedef virDomainClockDef *virDomainClockDefPtr;
struct _virDomainClockDef {
    int offset;
1667

1668
    union {
1669 1670 1671
        /* Bug-compatibility-mode for Xen utc|localtime */
        int utc_reset;
        /* Adjustment in seconds, relative to UTC or LOCALTIME, when
1672
         * offset == VIR_DOMAIN_CLOCK_OFFSET_VARIABLE */
1673 1674 1675 1676
        struct {
            long long adjustment;
            int basis;
        } variable;
1677 1678 1679 1680 1681

        /* Timezone name, when
         * offset == VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME */
        char *timezone;
    } data;
1682

1683
    size_t ntimers;
1684
    virDomainTimerDefPtr *timers;
1685 1686
};

1687
# define VIR_DOMAIN_CPUMASK_LEN 1024
1688

E
Eric Blake 已提交
1689 1690 1691
typedef struct _virDomainVcpuPinDef virDomainVcpuPinDef;
typedef virDomainVcpuPinDef *virDomainVcpuPinDefPtr;
struct _virDomainVcpuPinDef {
1692
    int vcpuid;
H
Hu Tao 已提交
1693
    virBitmapPtr cpumask;
1694 1695
};

H
Hu Tao 已提交
1696 1697
void virDomainVcpuPinDefFree(virDomainVcpuPinDefPtr def);
void virDomainVcpuPinDefArrayFree(virDomainVcpuPinDefPtr *def, int nvcpupin);
1698 1699 1700 1701

virDomainVcpuPinDefPtr *virDomainVcpuPinDefCopy(virDomainVcpuPinDefPtr *src,
                                                int nvcpupin);

E
Eric Blake 已提交
1702
int virDomainVcpuPinIsDuplicate(virDomainVcpuPinDefPtr *def,
1703 1704 1705
                                int nvcpupin,
                                int vcpu);

E
Eric Blake 已提交
1706
virDomainVcpuPinDefPtr virDomainVcpuPinFindByVcpu(virDomainVcpuPinDefPtr *def,
1707 1708 1709
                                                  int nvcpupin,
                                                  int vcpu);

1710 1711 1712 1713 1714 1715 1716
typedef struct _virBlkioDeviceWeight virBlkioDeviceWeight;
typedef virBlkioDeviceWeight *virBlkioDeviceWeightPtr;
struct _virBlkioDeviceWeight {
    char *path;
    unsigned int weight;
};

1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733
enum virDomainRNGModel {
    VIR_DOMAIN_RNG_MODEL_VIRTIO,

    VIR_DOMAIN_RNG_MODEL_LAST
};

enum virDomainRNGBackend {
    VIR_DOMAIN_RNG_BACKEND_RANDOM,
    VIR_DOMAIN_RNG_BACKEND_EGD,
    /* VIR_DOMAIN_RNG_BACKEND_POOL, */

    VIR_DOMAIN_RNG_BACKEND_LAST
};

struct _virDomainRNGDef {
    int model;
    int backend;
1734 1735
    unsigned int rate; /* bytes per period */
    unsigned int period; /* milliseconds */
1736 1737 1738 1739 1740 1741 1742 1743 1744 1745

    union {
        char *file; /* file name for 'random' source */
        virDomainChrSourceDefPtr chardev; /* a char backend for
                                             the EGD source */
    } source;

    virDomainDeviceInfo info;
};

1746 1747 1748 1749
void virBlkioDeviceWeightArrayClear(virBlkioDeviceWeightPtr deviceWeights,
                                    int ndevices);


1750 1751 1752 1753 1754 1755
/*
 * Guest VM main configuration
 *
 * NB: if adding to this struct, virDomainDefCheckABIStability
 * may well need an update
 */
1756 1757 1758 1759 1760 1761 1762
typedef struct _virDomainDef virDomainDef;
typedef virDomainDef *virDomainDefPtr;
struct _virDomainDef {
    int virtType;
    int id;
    unsigned char uuid[VIR_UUID_BUFLEN];
    char *name;
1763
    char *title;
1764
    char *description;
1765

1766 1767
    struct {
        unsigned int weight;
1768 1769 1770

        size_t ndevices;
        virBlkioDeviceWeightPtr devices;
1771 1772
    } blkio;

1773
    struct {
1774 1775 1776
        unsigned long long max_balloon; /* in kibibytes */
        unsigned long long cur_balloon; /* in kibibytes */
        bool hugepage_backed;
1777
        int dump_core; /* enum virDomainMemDump */
1778 1779 1780 1781
        unsigned long long hard_limit; /* in kibibytes */
        unsigned long long soft_limit; /* in kibibytes */
        unsigned long long min_guarantee; /* in kibibytes */
        unsigned long long swap_hard_limit; /* in kibibytes */
1782
    } mem;
E
Eric Blake 已提交
1783 1784
    unsigned short vcpus;
    unsigned short maxvcpus;
O
Osier Yang 已提交
1785
    int placement_mode;
H
Hu Tao 已提交
1786
    virBitmapPtr cpumask;
1787

1788 1789
    struct {
        unsigned long shares;
1790 1791
        unsigned long long period;
        long long quota;
1792 1793
        unsigned long long emulator_period;
        long long emulator_quota;
1794
        int nvcpupin;
E
Eric Blake 已提交
1795
        virDomainVcpuPinDefPtr *vcpupin;
T
Tang Chen 已提交
1796
        virDomainVcpuPinDefPtr emulatorpin;
1797 1798
    } cputune;

G
Gao feng 已提交
1799
    virNumaTuneDef numatune;
1800

1801 1802 1803 1804 1805
    /* These 3 are based on virDomainLifeCycleAction enum flags */
    int onReboot;
    int onPoweroff;
    int onCrash;

1806 1807
    int onLockFailure; /* enum virDomainLockFailureAction */

1808 1809 1810 1811 1812 1813
    struct {
        /* These options are actually type of enum virDomainPMState */
        int s3;
        int s4;
    } pm;

1814 1815 1816
    virDomainOSDef os;
    char *emulator;
    int features;
1817
    /* enum virDomainFeatureState */
1818
    int apic_eoi;
1819 1820
    /* These options are of type virDomainFeatureState */
    int hyperv_features[VIR_DOMAIN_HYPERV_LAST];
1821

1822
    virDomainClockDef clock;
1823

1824
    size_t ngraphics;
1825
    virDomainGraphicsDefPtr *graphics;
1826

1827
    size_t ndisks;
1828 1829
    virDomainDiskDefPtr *disks;

1830
    size_t ncontrollers;
1831 1832
    virDomainControllerDefPtr *controllers;

1833
    size_t nfss;
1834 1835
    virDomainFSDefPtr *fss;

1836
    size_t nnets;
1837 1838
    virDomainNetDefPtr *nets;

1839
    size_t ninputs;
1840 1841
    virDomainInputDefPtr *inputs;

1842
    size_t nsounds;
1843 1844
    virDomainSoundDefPtr *sounds;

1845
    size_t nvideos;
1846 1847
    virDomainVideoDefPtr *videos;

1848
    size_t nhostdevs;
1849 1850
    virDomainHostdevDefPtr *hostdevs;

1851
    size_t nredirdevs;
1852 1853
    virDomainRedirdevDefPtr *redirdevs;

1854
    size_t nsmartcards;
E
Eric Blake 已提交
1855 1856
    virDomainSmartcardDefPtr *smartcards;

1857
    size_t nserials;
1858 1859
    virDomainChrDefPtr *serials;

1860
    size_t nparallels;
1861 1862
    virDomainChrDefPtr *parallels;

1863
    size_t nchannels;
1864 1865
    virDomainChrDefPtr *channels;

1866
    size_t nconsoles;
1867 1868
    virDomainChrDefPtr *consoles;

1869
    size_t nleases;
1870 1871
    virDomainLeaseDefPtr *leases;

1872
    size_t nhubs;
M
Marc-André Lureau 已提交
1873 1874
    virDomainHubDefPtr *hubs;

1875 1876 1877
    size_t nseclabels;
    virSecurityLabelDefPtr *seclabels;

1878
    /* Only 1 */
R
Richard Jones 已提交
1879
    virDomainWatchdogDefPtr watchdog;
1880
    virDomainMemballoonDefPtr memballoon;
1881
    virCPUDefPtr cpu;
1882
    virSysinfoDefPtr sysinfo;
1883
    virDomainRedirFilterDefPtr redirfilter;
1884
    virDomainRNGDefPtr rng;
1885 1886 1887

    void *namespaceData;
    virDomainXMLNamespace ns;
1888 1889 1890

    /* Application-specific custom metadata */
    xmlNodePtr metadata;
1891 1892
};

1893 1894 1895 1896 1897 1898
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 */
1899
    VIR_DOMAIN_TAINT_EXTERNAL_LAUNCH,  /* Externally launched guest domain */
1900
    VIR_DOMAIN_TAINT_HOST_CPU,         /* Host CPU passthrough in use */
1901 1902 1903 1904

    VIR_DOMAIN_TAINT_LAST
};

1905
/* Guest VM runtime state */
J
Jiri Denemark 已提交
1906 1907 1908 1909 1910 1911
typedef struct _virDomainStateReason virDomainStateReason;
struct _virDomainStateReason {
    int state;
    int reason;
};

1912 1913 1914
typedef struct _virDomainObj virDomainObj;
typedef virDomainObj *virDomainObjPtr;
struct _virDomainObj {
1915
    virObjectLockable parent;
1916

1917
    pid_t pid;
J
Jiri Denemark 已提交
1918
    virDomainStateReason state;
1919 1920 1921

    unsigned int autostart : 1;
    unsigned int persistent : 1;
1922
    unsigned int updated : 1;
1923 1924 1925

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

1927
    virDomainSnapshotObjListPtr snapshots;
C
Chris Lalancette 已提交
1928 1929
    virDomainSnapshotObjPtr current_snapshot;

1930 1931
    bool hasManagedSave;

1932 1933
    void *privateData;
    void (*privateDataFreeFunc)(void *);
1934 1935

    int taint;
1936 1937
};

1938 1939
typedef struct _virDomainObjList virDomainObjList;
typedef virDomainObjList *virDomainObjListPtr;
1940

1941 1942 1943

/* This structure holds various callbacks and data needed
 * while parsing and creating domain XMLs */
1944 1945
typedef struct _virDomainXMLOption virDomainXMLOption;
typedef virDomainXMLOption *virDomainXMLOptionPtr;
1946 1947 1948 1949 1950 1951

typedef void *(*virDomainXMLPrivateDataAllocFunc)(void);
typedef void (*virDomainXMLPrivateDataFreeFunc)(void *);
typedef int (*virDomainXMLPrivateDataFormatFunc)(virBufferPtr, void *);
typedef int (*virDomainXMLPrivateDataParseFunc)(xmlXPathContextPtr, void *);

1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962
typedef int (*virDomainDefPostParseCallback)(virDomainDefPtr def,
                                             virCapsPtr caps,
                                             void *opaque);
typedef int (*virDomainDeviceDefPostParseCallback)(virDomainDeviceDefPtr dev,
                                                   virDomainDefPtr def,
                                                   virCapsPtr caps,
                                                   void *opaque);

typedef struct _virDomainDefParserConfig virDomainDefParserConfig;
typedef virDomainDefParserConfig *virDomainDefParserConfigPtr;
struct _virDomainDefParserConfig {
1963
    /* driver domain definition callbacks */
1964 1965 1966
    virDomainDefPostParseCallback domainPostParseCallback;
    virDomainDeviceDefPostParseCallback devicesPostParseCallback;

1967
    /* private data for the callbacks */
1968 1969
    void *priv;
    virFreeCallback privFree;
1970 1971 1972

    /* data */
    bool hasWideScsiBus;
1973
    unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN];
1974 1975
};

1976 1977 1978 1979 1980 1981 1982 1983 1984
typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCallbacks;
typedef virDomainXMLPrivateDataCallbacks *virDomainXMLPrivateDataCallbacksPtr;
struct _virDomainXMLPrivateDataCallbacks {
    virDomainXMLPrivateDataAllocFunc  alloc;
    virDomainXMLPrivateDataFreeFunc   free;
    virDomainXMLPrivateDataFormatFunc format;
    virDomainXMLPrivateDataParseFunc  parse;
};

1985 1986 1987
virDomainXMLOptionPtr virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
                                            virDomainXMLPrivateDataCallbacksPtr priv,
                                            virDomainXMLNamespacePtr xmlns);
1988

1989 1990
void virDomainNetGenerateMAC(virDomainXMLOptionPtr xmlopt, virMacAddrPtr mac);

1991
virDomainXMLNamespacePtr
1992
virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt)
1993 1994
    ATTRIBUTE_NONNULL(1);

1995
static inline bool
D
Daniel P. Berrange 已提交
1996
virDomainObjIsActive(virDomainObjPtr dom)
1997 1998 1999 2000
{
    return dom->def->id != -1;
}

2001
virDomainObjPtr virDomainObjNew(virDomainXMLOptionPtr caps)
2002
    ATTRIBUTE_NONNULL(1);
2003

2004
virDomainObjListPtr virDomainObjListNew(void);
2005

2006 2007 2008 2009 2010 2011
virDomainObjPtr virDomainObjListFindByID(const virDomainObjListPtr doms,
                                         int id);
virDomainObjPtr virDomainObjListFindByUUID(const virDomainObjListPtr doms,
                                           const unsigned char *uuid);
virDomainObjPtr virDomainObjListFindByName(const virDomainObjListPtr doms,
                                           const char *name);
2012

2013 2014
bool virDomainObjTaint(virDomainObjPtr obj,
                       enum virDomainTaintFlags taint);
2015 2016 2017 2018

void virDomainGraphicsDefFree(virDomainGraphicsDefPtr def);
void virDomainInputDefFree(virDomainInputDefPtr def);
void virDomainDiskDefFree(virDomainDiskDefPtr def);
2019
void virDomainLeaseDefFree(virDomainLeaseDefPtr def);
2020
void virDomainDiskHostDefFree(virDomainDiskHostDefPtr def);
2021 2022 2023
int virDomainDiskFindControllerModel(virDomainDefPtr def,
                                     virDomainDiskDefPtr disk,
                                     int controllerType);
2024 2025 2026
virDomainDiskDefPtr virDomainDiskFindByBusAndDst(virDomainDefPtr def,
                                                 int bus,
                                                 char *dst);
2027
void virDomainControllerDefFree(virDomainControllerDefPtr def);
2028
void virDomainFSDefFree(virDomainFSDefPtr def);
2029
void virDomainActualNetDefFree(virDomainActualNetDefPtr def);
2030
void virDomainNetDefFree(virDomainNetDefPtr def);
E
Eric Blake 已提交
2031
void virDomainSmartcardDefFree(virDomainSmartcardDefPtr def);
2032
void virDomainChrDefFree(virDomainChrDefPtr def);
2033
void virDomainChrSourceDefFree(virDomainChrSourceDefPtr def);
2034 2035
int virDomainChrSourceDefCopy(virDomainChrSourceDefPtr src,
                              virDomainChrSourceDefPtr dest);
2036
void virDomainSoundCodecDefFree(virDomainSoundCodecDefPtr def);
2037
void virDomainSoundDefFree(virDomainSoundDefPtr def);
2038
void virDomainMemballoonDefFree(virDomainMemballoonDefPtr def);
R
Richard Jones 已提交
2039
void virDomainWatchdogDefFree(virDomainWatchdogDefPtr def);
2040
void virDomainVideoDefFree(virDomainVideoDefPtr def);
2041 2042
virDomainHostdevDefPtr virDomainHostdevDefAlloc(void);
void virDomainHostdevDefClear(virDomainHostdevDefPtr def);
2043
void virDomainHostdevDefFree(virDomainHostdevDefPtr def);
M
Marc-André Lureau 已提交
2044
void virDomainHubDefFree(virDomainHubDefPtr def);
2045
void virDomainRedirdevDefFree(virDomainRedirdevDefPtr def);
2046
void virDomainRedirFilterDefFree(virDomainRedirFilterDefPtr def);
2047
void virDomainDeviceDefFree(virDomainDeviceDefPtr def);
2048
virDomainDeviceDefPtr virDomainDeviceDefCopy(virDomainDeviceDefPtr src,
2049
                                             const virDomainDefPtr def,
2050 2051
                                             virCapsPtr caps,
                                             virDomainXMLOptionPtr xmlopt);
2052 2053
int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info,
                                  int type);
2054 2055
int virDomainDeviceInfoCopy(virDomainDeviceInfoPtr dst,
                            virDomainDeviceInfoPtr src);
2056
void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info);
2057
void virDomainDefClearPCIAddresses(virDomainDefPtr def);
2058
void virDomainDefClearCCWAddresses(virDomainDefPtr def);
D
Daniel P. Berrange 已提交
2059
void virDomainDefClearDeviceAliases(virDomainDefPtr def);
2060

2061
typedef int (*virDomainDeviceInfoCallback)(virDomainDefPtr def,
2062 2063
                                           virDomainDeviceDefPtr dev,
                                           virDomainDeviceInfoPtr info,
2064 2065 2066 2067 2068 2069
                                           void *opaque);

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

2070 2071
void virDomainDefFree(virDomainDefPtr vm);

M
Michal Novotny 已提交
2072 2073
virDomainChrDefPtr virDomainChrDefNew(void);

2074 2075 2076 2077
enum {
    VIR_DOMAIN_OBJ_LIST_ADD_LIVE = (1 << 0),
    VIR_DOMAIN_OBJ_LIST_ADD_CHECK_LIVE = (1 << 1),
};
2078 2079
virDomainObjPtr virDomainObjListAdd(virDomainObjListPtr doms,
                                    const virDomainDefPtr def,
2080
                                    virDomainXMLOptionPtr xmlopt,
2081 2082
                                    unsigned int flags,
                                    virDomainDefPtr *oldDef);
2083 2084
void virDomainObjAssignDef(virDomainObjPtr domain,
                           const virDomainDefPtr def,
2085 2086
                           bool live,
                           virDomainDefPtr *oldDef);
2087
int virDomainObjSetDefTransient(virCapsPtr caps,
2088
                                virDomainXMLOptionPtr xmlopt,
2089 2090
                                virDomainObjPtr domain,
                                bool live);
2091 2092
virDomainDefPtr
virDomainObjGetPersistentDef(virCapsPtr caps,
2093
                             virDomainXMLOptionPtr xmlopt,
2094
                             virDomainObjPtr domain);
2095 2096 2097

int
virDomainLiveConfigHelperMethod(virCapsPtr caps,
2098
                                virDomainXMLOptionPtr xmlopt,
2099 2100 2101 2102
                                virDomainObjPtr dom,
                                unsigned int *flags,
                                virDomainDefPtr *persistentDef);

2103 2104 2105 2106 2107 2108 2109
virDomainDefPtr virDomainDefCopy(virDomainDefPtr src,
                                 virCapsPtr caps,
                                 virDomainXMLOptionPtr xmlopt,
                                 bool migratable);
virDomainDefPtr virDomainObjCopyPersistentDef(virDomainObjPtr dom,
                                              virCapsPtr caps,
                                              virDomainXMLOptionPtr xmlopt);
2110

2111 2112
void virDomainObjListRemove(virDomainObjListPtr doms,
                            virDomainObjPtr dom);
2113

2114
virDomainDeviceDefPtr virDomainDeviceDefParse(const char *xmlStr,
2115
                                              virDomainDefPtr def,
2116 2117
                                              virCapsPtr caps,
                                              virDomainXMLOptionPtr xmlopt,
L
Laine Stump 已提交
2118
                                              unsigned int flags);
2119 2120
virDomainDefPtr virDomainDefParseString(const char *xmlStr,
                                        virCapsPtr caps,
2121
                                        virDomainXMLOptionPtr xmlopt,
M
Matthias Bolte 已提交
2122
                                        unsigned int expectedVirtTypes,
L
Laine Stump 已提交
2123
                                        unsigned int flags);
2124 2125
virDomainDefPtr virDomainDefParseFile(const char *filename,
                                      virCapsPtr caps,
2126
                                      virDomainXMLOptionPtr xmlopt,
M
Matthias Bolte 已提交
2127
                                      unsigned int expectedVirtTypes,
L
Laine Stump 已提交
2128
                                      unsigned int flags);
2129
virDomainDefPtr virDomainDefParseNode(xmlDocPtr doc,
2130
                                      xmlNodePtr root,
2131 2132
                                      virCapsPtr caps,
                                      virDomainXMLOptionPtr xmlopt,
M
Matthias Bolte 已提交
2133
                                      unsigned int expectedVirtTypes,
L
Laine Stump 已提交
2134
                                      unsigned int flags);
2135

2136 2137 2138
bool virDomainDefCheckABIStability(virDomainDefPtr src,
                                   virDomainDefPtr dst);

2139
int virDomainDefAddImplicitControllers(virDomainDefPtr def);
2140

2141
char *virDomainDefFormat(virDomainDefPtr def,
L
Laine Stump 已提交
2142
                         unsigned int flags);
2143 2144 2145
int virDomainDefFormatInternal(virDomainDefPtr def,
                               unsigned int flags,
                               virBufferPtr buf);
2146

2147 2148 2149
int virDomainDefCompatibleDevice(virDomainDefPtr def,
                                 virDomainDeviceDefPtr dev);

2150
int virDomainVcpuPinAdd(virDomainVcpuPinDefPtr **vcpupin_list,
H
Hu Tao 已提交
2151
                        int *nvcpupin,
2152 2153 2154 2155
                        unsigned char *cpumap,
                        int maplen,
                        int vcpu);

E
Eric Blake 已提交
2156
int virDomainVcpuPinDel(virDomainDefPtr def, int vcpu);
2157

2158 2159 2160 2161 2162 2163
int virDomainEmulatorPinAdd(virDomainDefPtr def,
                              unsigned char *cpumap,
                              int maplen);

int virDomainEmulatorPinDel(virDomainDefPtr def);

2164 2165
void virDomainRNGDefFree(virDomainRNGDefPtr def);

2166 2167 2168
int virDomainDiskIndexByName(virDomainDefPtr def, const char *name,
                             bool allow_ambiguous);
const char *virDomainDiskPathByName(virDomainDefPtr, const char *name);
2169 2170 2171 2172
int virDomainDiskInsert(virDomainDefPtr def,
                        virDomainDiskDefPtr disk);
void virDomainDiskInsertPreAlloced(virDomainDefPtr def,
                                   virDomainDiskDefPtr disk);
2173 2174
int virDomainDiskDefAssignAddress(virDomainXMLOptionPtr xmlopt,
                                  virDomainDiskDefPtr def);
2175

2176 2177 2178 2179
virDomainDiskDefPtr
virDomainDiskRemove(virDomainDefPtr def, size_t i);
virDomainDiskDefPtr
virDomainDiskRemoveByName(virDomainDefPtr def, const char *name);
E
Eric Blake 已提交
2180
bool virDomainHasDiskMirror(virDomainObjPtr vm);
2181

2182 2183
int virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net);
virDomainNetDefPtr virDomainNetFind(virDomainDefPtr def, const char *device);
2184
int virDomainNetInsert(virDomainDefPtr def, virDomainNetDefPtr net);
2185
virDomainNetDefPtr virDomainNetRemove(virDomainDefPtr def, size_t i);
2186

L
Laine Stump 已提交
2187
int virDomainHostdevInsert(virDomainDefPtr def, virDomainHostdevDefPtr hostdev);
2188 2189
virDomainHostdevDefPtr
virDomainHostdevRemove(virDomainDefPtr def, size_t i);
L
Laine Stump 已提交
2190 2191 2192
int virDomainHostdevFind(virDomainDefPtr def, virDomainHostdevDefPtr match,
                         virDomainHostdevDefPtr *found);

2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210
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);

2211
int virDomainNetGetActualType(virDomainNetDefPtr iface);
2212 2213
const char *virDomainNetGetActualBridgeName(virDomainNetDefPtr iface);
const char *virDomainNetGetActualDirectDev(virDomainNetDefPtr iface);
2214
int virDomainNetGetActualDirectMode(virDomainNetDefPtr iface);
2215
virDomainHostdevDefPtr virDomainNetGetActualHostdev(virDomainNetDefPtr iface);
2216
virNetDevVPortProfilePtr
2217
virDomainNetGetActualVirtPortProfile(virDomainNetDefPtr iface);
2218
virNetDevBandwidthPtr
2219
virDomainNetGetActualBandwidth(virDomainNetDefPtr iface);
2220
virNetDevVlanPtr virDomainNetGetActualVlan(virDomainNetDefPtr iface);
2221

2222 2223 2224 2225
int virDomainControllerInsert(virDomainDefPtr def,
                              virDomainControllerDefPtr controller);
void virDomainControllerInsertPreAlloced(virDomainDefPtr def,
                                         virDomainControllerDefPtr controller);
2226 2227
int virDomainControllerFind(virDomainDefPtr def, int type, int idx);
virDomainControllerDefPtr virDomainControllerRemove(virDomainDefPtr def, size_t i);
2228 2229 2230 2231 2232 2233 2234 2235

int virDomainLeaseIndex(virDomainDefPtr def,
                        virDomainLeaseDefPtr lease);
int virDomainLeaseInsert(virDomainDefPtr def,
                         virDomainLeaseDefPtr lease);
int virDomainLeaseInsertPreAlloc(virDomainDefPtr def);
void virDomainLeaseInsertPreAlloced(virDomainDefPtr def,
                                    virDomainLeaseDefPtr lease);
2236 2237 2238 2239 2240
virDomainLeaseDefPtr
virDomainLeaseRemoveAt(virDomainDefPtr def, size_t i);
virDomainLeaseDefPtr
virDomainLeaseRemove(virDomainDefPtr def,
                     virDomainLeaseDefPtr lease);
2241

2242
int virDomainSaveXML(const char *configDir,
2243 2244 2245
                     virDomainDefPtr def,
                     const char *xml);

2246
int virDomainSaveConfig(const char *configDir,
2247
                        virDomainDefPtr def);
2248
int virDomainSaveStatus(virDomainXMLOptionPtr xmlopt,
2249
                        const char *statusDir,
2250
                        virDomainObjPtr obj) ATTRIBUTE_RETURN_CHECK;
2251

2252 2253 2254 2255
typedef void (*virDomainLoadConfigNotify)(virDomainObjPtr dom,
                                          int newDomain,
                                          void *opaque);

2256 2257 2258 2259
int virDomainObjListLoadAllConfigs(virDomainObjListPtr doms,
                                   const char *configDir,
                                   const char *autostartDir,
                                   int liveStatus,
2260 2261
                                   virCapsPtr caps,
                                   virDomainXMLOptionPtr xmlopt,
2262 2263 2264
                                   unsigned int expectedVirtTypes,
                                   virDomainLoadConfigNotify notify,
                                   void *opaque);
2265

2266
int virDomainDeleteConfig(const char *configDir,
2267
                          const char *autostartDir,
2268 2269
                          virDomainObjPtr dom);

2270
char *virDomainConfigFile(const char *dir,
2271 2272
                          const char *name);

2273 2274 2275 2276
int virDiskNameToBusDeviceIndex(virDomainDiskDefPtr disk,
                                int *busIdx,
                                int *devIdx);

2277
virDomainFSDefPtr virDomainGetRootFilesystem(virDomainDefPtr def);
2278
int virDomainFSIndexByName(virDomainDefPtr def, const char *name);
2279 2280
int virDomainVideoDefaultType(virDomainDefPtr def);
int virDomainVideoDefaultRAM(virDomainDefPtr def, int type);
2281

2282 2283 2284 2285 2286 2287 2288 2289 2290
int virDomainObjListNumOfDomains(virDomainObjListPtr doms, int active);

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

2291 2292 2293 2294 2295 2296 2297
typedef int (*virDomainObjListIterator)(virDomainObjPtr dom,
                                        void *opaque);

int virDomainObjListForEach(virDomainObjListPtr doms,
                            virDomainObjListIterator callback,
                            void *opaque);

E
Eric Blake 已提交
2298 2299 2300 2301 2302 2303 2304 2305 2306
typedef int (*virDomainSmartcardDefIterator)(virDomainDefPtr def,
                                             virDomainSmartcardDefPtr dev,
                                             void *opaque);

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

2307 2308 2309 2310 2311 2312 2313 2314 2315
typedef int (*virDomainChrDefIterator)(virDomainDefPtr def,
                                       virDomainChrDefPtr dev,
                                       void *opaque);

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

2316 2317 2318 2319 2320 2321 2322 2323 2324 2325
typedef int (*virDomainDiskDefPathIterator)(virDomainDiskDefPtr disk,
                                            const char *path,
                                            size_t depth,
                                            void *opaque);

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

J
Jiri Denemark 已提交
2326 2327 2328 2329 2330 2331 2332
void
virDomainObjSetState(virDomainObjPtr obj, virDomainState state, int reason)
        ATTRIBUTE_NONNULL(1);
virDomainState
virDomainObjGetState(virDomainObjPtr obj, int *reason)
        ATTRIBUTE_NONNULL(1);

2333 2334 2335 2336 2337 2338
virSecurityLabelDefPtr
virDomainDefGetSecurityLabelDef(virDomainDefPtr def, const char *model);

virSecurityDeviceLabelDefPtr
virDomainDiskDefGetSecurityLabelDef(virDomainDiskDefPtr def, const char *model);

2339 2340 2341
virSecurityDeviceLabelDefPtr
virDomainChrDefGetSecurityLabelDef(virDomainChrDefPtr def, const char *model);

2342
virSecurityLabelDefPtr
2343
virDomainDefGenSecurityLabelDef(const char *model);
2344

2345
virSecurityDeviceLabelDefPtr
2346 2347 2348 2349
virDomainDiskDefGenSecurityLabelDef(const char *model);

void virSecurityLabelDefFree(virSecurityLabelDefPtr def);
void virSecurityDeviceLabelDefFree(virSecurityDeviceLabelDefPtr def);
2350

2351 2352
typedef const char* (*virEventActionToStringFunc)(int type);
typedef int (*virEventActionFromStringFunc)(const char *type);
2353

2354 2355
VIR_ENUM_DECL(virDomainTaint)

2356 2357
VIR_ENUM_DECL(virDomainVirt)
VIR_ENUM_DECL(virDomainBoot)
2358
VIR_ENUM_DECL(virDomainBootMenu)
2359
VIR_ENUM_DECL(virDomainFeature)
2360
VIR_ENUM_DECL(virDomainFeatureState)
2361
VIR_ENUM_DECL(virDomainLifecycle)
2362
VIR_ENUM_DECL(virDomainLifecycleCrash)
2363
VIR_ENUM_DECL(virDomainPMState)
2364
VIR_ENUM_DECL(virDomainDevice)
2365
VIR_ENUM_DECL(virDomainDeviceAddress)
2366 2367
VIR_ENUM_DECL(virDomainDisk)
VIR_ENUM_DECL(virDomainDiskDevice)
J
J.B. Joret 已提交
2368
VIR_ENUM_DECL(virDomainDiskGeometryTrans)
2369
VIR_ENUM_DECL(virDomainDiskBus)
2370
VIR_ENUM_DECL(virDomainDiskCache)
2371
VIR_ENUM_DECL(virDomainDiskErrorPolicy)
M
MORITA Kazutaka 已提交
2372
VIR_ENUM_DECL(virDomainDiskProtocol)
2373
VIR_ENUM_DECL(virDomainDiskProtocolTransport)
M
Matthias Dahl 已提交
2374
VIR_ENUM_DECL(virDomainDiskIo)
2375
VIR_ENUM_DECL(virDomainDiskSecretType)
O
Osier Yang 已提交
2376
VIR_ENUM_DECL(virDomainDiskSGIO)
2377
VIR_ENUM_DECL(virDomainDiskTray)
2378
VIR_ENUM_DECL(virDomainIoEventFd)
2379
VIR_ENUM_DECL(virDomainVirtioEventIdx)
O
Osier Yang 已提交
2380
VIR_ENUM_DECL(virDomainDiskCopyOnRead)
2381
VIR_ENUM_DECL(virDomainController)
2382
VIR_ENUM_DECL(virDomainControllerModelSCSI)
M
Marc-André Lureau 已提交
2383
VIR_ENUM_DECL(virDomainControllerModelUSB)
2384
VIR_ENUM_DECL(virDomainFS)
2385
VIR_ENUM_DECL(virDomainFSDriverType)
2386
VIR_ENUM_DECL(virDomainFSAccessMode)
2387
VIR_ENUM_DECL(virDomainFSWrpolicy)
2388
VIR_ENUM_DECL(virDomainNet)
2389
VIR_ENUM_DECL(virDomainNetBackend)
2390
VIR_ENUM_DECL(virDomainNetVirtioTxMode)
2391
VIR_ENUM_DECL(virDomainNetInterfaceLinkState)
2392
VIR_ENUM_DECL(virDomainChrDevice)
2393
VIR_ENUM_DECL(virDomainChrChannelTarget)
2394
VIR_ENUM_DECL(virDomainChrConsoleTarget)
G
Guannan Ren 已提交
2395
VIR_ENUM_DECL(virDomainChrSerialTarget)
E
Eric Blake 已提交
2396
VIR_ENUM_DECL(virDomainSmartcard)
2397
VIR_ENUM_DECL(virDomainChr)
2398
VIR_ENUM_DECL(virDomainChrTcpProtocol)
E
Eric Blake 已提交
2399
VIR_ENUM_DECL(virDomainChrSpicevmc)
2400
VIR_ENUM_DECL(virDomainSoundCodec)
2401
VIR_ENUM_DECL(virDomainSoundModel)
2402
VIR_ENUM_DECL(virDomainMemDump)
2403
VIR_ENUM_DECL(virDomainMemballoonModel)
2404
VIR_ENUM_DECL(virDomainSmbiosMode)
R
Richard Jones 已提交
2405 2406
VIR_ENUM_DECL(virDomainWatchdogModel)
VIR_ENUM_DECL(virDomainWatchdogAction)
2407
VIR_ENUM_DECL(virDomainVideo)
2408 2409
VIR_ENUM_DECL(virDomainHostdevMode)
VIR_ENUM_DECL(virDomainHostdevSubsys)
2410
VIR_ENUM_DECL(virDomainHostdevCaps)
2411
VIR_ENUM_DECL(virDomainPciRombarMode)
M
Marc-André Lureau 已提交
2412
VIR_ENUM_DECL(virDomainHub)
2413
VIR_ENUM_DECL(virDomainRedirdevBus)
2414 2415 2416
VIR_ENUM_DECL(virDomainInput)
VIR_ENUM_DECL(virDomainInputBus)
VIR_ENUM_DECL(virDomainGraphics)
2417
VIR_ENUM_DECL(virDomainGraphicsListen)
2418
VIR_ENUM_DECL(virDomainGraphicsAuthConnected)
2419 2420
VIR_ENUM_DECL(virDomainGraphicsSpiceChannelName)
VIR_ENUM_DECL(virDomainGraphicsSpiceChannelMode)
2421 2422 2423 2424
VIR_ENUM_DECL(virDomainGraphicsSpiceImageCompression)
VIR_ENUM_DECL(virDomainGraphicsSpiceJpegCompression)
VIR_ENUM_DECL(virDomainGraphicsSpiceZlibCompression)
VIR_ENUM_DECL(virDomainGraphicsSpicePlaybackCompression)
2425
VIR_ENUM_DECL(virDomainGraphicsSpiceStreamingMode)
2426
VIR_ENUM_DECL(virDomainGraphicsSpiceClipboardCopypaste)
P
Peng Zhou 已提交
2427
VIR_ENUM_DECL(virDomainGraphicsSpiceMouseMode)
2428
VIR_ENUM_DECL(virDomainHyperv)
2429 2430
VIR_ENUM_DECL(virDomainRNGModel)
VIR_ENUM_DECL(virDomainRNGBackend)
2431 2432
/* from libvirt.h */
VIR_ENUM_DECL(virDomainState)
J
Jiri Denemark 已提交
2433 2434 2435 2436 2437 2438 2439
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)
2440
VIR_ENUM_DECL(virDomainPMSuspendedReason)
J
Jiri Denemark 已提交
2441 2442 2443 2444

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

2445
VIR_ENUM_DECL(virDomainSeclabel)
2446
VIR_ENUM_DECL(virDomainClockOffset)
2447
VIR_ENUM_DECL(virDomainClockBasis)
2448

2449
VIR_ENUM_DECL(virDomainTimerName)
2450
VIR_ENUM_DECL(virDomainTimerTrack)
2451 2452
VIR_ENUM_DECL(virDomainTimerTickpolicy)
VIR_ENUM_DECL(virDomainTimerMode)
O
Osier Yang 已提交
2453
VIR_ENUM_DECL(virDomainCpuPlacementMode)
2454

2455
VIR_ENUM_DECL(virDomainStartupPolicy)
2456

O
Osier Yang 已提交
2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490
# define VIR_CONNECT_LIST_DOMAINS_FILTERS_ACTIVE   \
                (VIR_CONNECT_LIST_DOMAINS_ACTIVE | \
                 VIR_CONNECT_LIST_DOMAINS_INACTIVE)

# define VIR_CONNECT_LIST_DOMAINS_FILTERS_PERSISTENT   \
                (VIR_CONNECT_LIST_DOMAINS_PERSISTENT | \
                 VIR_CONNECT_LIST_DOMAINS_TRANSIENT)

# define VIR_CONNECT_LIST_DOMAINS_FILTERS_STATE     \
                (VIR_CONNECT_LIST_DOMAINS_RUNNING | \
                 VIR_CONNECT_LIST_DOMAINS_PAUSED  | \
                 VIR_CONNECT_LIST_DOMAINS_SHUTOFF | \
                 VIR_CONNECT_LIST_DOMAINS_OTHER)

# define VIR_CONNECT_LIST_DOMAINS_FILTERS_MANAGEDSAVE   \
                (VIR_CONNECT_LIST_DOMAINS_MANAGEDSAVE | \
                 VIR_CONNECT_LIST_DOMAINS_NO_MANAGEDSAVE)

# define VIR_CONNECT_LIST_DOMAINS_FILTERS_AUTOSTART   \
                (VIR_CONNECT_LIST_DOMAINS_AUTOSTART | \
                 VIR_CONNECT_LIST_DOMAINS_NO_AUTOSTART)

# define VIR_CONNECT_LIST_DOMAINS_FILTERS_SNAPSHOT       \
                (VIR_CONNECT_LIST_DOMAINS_HAS_SNAPSHOT | \
                 VIR_CONNECT_LIST_DOMAINS_NO_SNAPSHOT)

# define VIR_CONNECT_LIST_DOMAINS_FILTERS_ALL                   \
                (VIR_CONNECT_LIST_DOMAINS_FILTERS_ACTIVE      | \
                 VIR_CONNECT_LIST_DOMAINS_FILTERS_PERSISTENT  | \
                 VIR_CONNECT_LIST_DOMAINS_FILTERS_STATE       | \
                 VIR_CONNECT_LIST_DOMAINS_FILTERS_MANAGEDSAVE | \
                 VIR_CONNECT_LIST_DOMAINS_FILTERS_AUTOSTART   | \
                 VIR_CONNECT_LIST_DOMAINS_FILTERS_SNAPSHOT)

2491 2492 2493 2494
int virDomainObjListExport(virDomainObjListPtr doms,
                           virConnectPtr conn,
                           virDomainPtr **domains,
                           unsigned int flags);
O
Osier Yang 已提交
2495

2496 2497 2498
virDomainVcpuPinDefPtr virDomainLookupVcpuPin(virDomainDefPtr def,
                                              int vcpuid);

2499 2500
char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);

2501
#endif /* __DOMAIN_CONF_H */