domain_conf.h 124.5 KB
Newer Older
1 2 3
/*
 * domain_conf.h: domain XML processing
 *
4
 * Copyright (C) 2006-2019 Red Hat, Inc.
5
 * Copyright (C) 2006-2008 Daniel P. Berrange
6
 * Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
7 8 9 10 11 12 13 14 15 16 17 18
 *
 * 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
19
 * License along with this library.  If not, see
O
Osier Yang 已提交
20
 * <http://www.gnu.org/licenses/>.
21 22
 */

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
#pragma once

#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xpath.h>

#include "internal.h"
#include "virconftypes.h"
#include "capabilities.h"
#include "virstorageencryption.h"
#include "cpu_conf.h"
#include "virthread.h"
#include "virhash.h"
#include "virsocketaddr.h"
#include "networkcommon_conf.h"
#include "nwfilter_params.h"
#include "numa_conf.h"
#include "virnetdevmacvlan.h"
#include "virsysinfo.h"
#include "virnetdev.h"
#include "virnetdevip.h"
#include "virnetdevvportprofile.h"
#include "virnetdevbandwidth.h"
#include "virnetdevvlan.h"
47
#include "virnetworkportdef.h"
48 49 50 51 52 53 54 55 56 57 58 59
#include "virobject.h"
#include "device_conf.h"
#include "virbitmap.h"
#include "virstoragefile.h"
#include "virseclabel.h"
#include "virprocess.h"
#include "virgic.h"
#include "virperf.h"
#include "virtypedparam.h"
#include "virsavecookie.h"
#include "virresctrl.h"
#include "virenum.h"
60

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
/* 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,
L
Li Zhang 已提交
80
    VIR_DOMAIN_DEVICE_NVRAM,
81
    VIR_DOMAIN_DEVICE_RNG,
82
    VIR_DOMAIN_DEVICE_SHMEM,
83
    VIR_DOMAIN_DEVICE_TPM,
84
    VIR_DOMAIN_DEVICE_PANIC,
85
    VIR_DOMAIN_DEVICE_MEMORY,
J
Ján Tomko 已提交
86
    VIR_DOMAIN_DEVICE_IOMMU,
J
Ján Tomko 已提交
87
    VIR_DOMAIN_DEVICE_VSOCK,
88

89
    VIR_DOMAIN_DEVICE_LAST
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
} virDomainDeviceType;

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;
L
Li Zhang 已提交
111
        virDomainNVRAMDefPtr nvram;
112
        virDomainRNGDefPtr rng;
113
        virDomainShmemDefPtr shmem;
114
        virDomainTPMDefPtr tpm;
115
        virDomainPanicDefPtr panic;
116
        virDomainMemoryDefPtr memory;
J
Ján Tomko 已提交
117
        virDomainIOMMUDefPtr iommu;
J
Ján Tomko 已提交
118
        virDomainVsockDefPtr vsock;
119 120 121
    } data;
};

122
/* Different types of hypervisor */
123
typedef enum {
124
    VIR_DOMAIN_VIRT_NONE = 0,
125 126 127 128 129 130 131 132 133 134
    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,
135
    VIR_DOMAIN_VIRT_VBOX,
136
    VIR_DOMAIN_VIRT_PHYP,
D
Dmitry Guryanov 已提交
137
    VIR_DOMAIN_VIRT_PARALLELS,
R
Roman Bogorodskiy 已提交
138
    VIR_DOMAIN_VIRT_BHYVE,
139
    VIR_DOMAIN_VIRT_VZ,
140

141
    VIR_DOMAIN_VIRT_LAST
142
} virDomainVirtType;
143

144 145 146 147 148 149
typedef enum {
    VIR_DOMAIN_OSTYPE_HVM,
    VIR_DOMAIN_OSTYPE_XEN,
    VIR_DOMAIN_OSTYPE_LINUX,
    VIR_DOMAIN_OSTYPE_EXE,
    VIR_DOMAIN_OSTYPE_UML,
150
    VIR_DOMAIN_OSTYPE_XENPVH,
151 152 153

    VIR_DOMAIN_OSTYPE_LAST
} virDomainOSType;
154
VIR_ENUM_DECL(virDomainOS);
155 156


157 158 159 160 161 162
struct _virDomainHostdevOrigStates {
    union {
        struct {
            /* Does the device need to unbind from stub when
             * reattaching to host?
             */
163
            bool unbind_from_stub;
164 165 166 167

            /* Does it need to use remove_slot when reattaching
             * the device to host?
             */
168
            bool remove_slot;
169 170 171 172

            /* Does it need to reprobe driver for the device when
             * reattaching to host?
             */
173
            bool reprobe;
174 175 176 177 178 179
        } pci;

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

180 181 182 183 184 185 186
struct _virDomainLeaseDef {
    char *lockspace;
    char *key;
    char *path;
    unsigned long long offset;
};

187

188
typedef enum {
189 190 191
    VIR_DOMAIN_HOSTDEV_MODE_SUBSYS,
    VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES,

192
    VIR_DOMAIN_HOSTDEV_MODE_LAST
193
} virDomainHostdevMode;
194

195
typedef enum {
196 197
    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB,
    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI,
H
Han Cheng 已提交
198
    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI,
199
    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST,
200
    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV,
201 202

    VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST
203
} virDomainHostdevSubsysType;
204

205 206
/* the backend driver used for PCI hostdev devices */
typedef enum {
N
Nitesh Konkar 已提交
207
    VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT, /* detect automatically, prefer VFIO */
208 209
    VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM,    /* force legacy kvm style */
    VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO,   /* force vfio */
210
    VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN,    /* force legacy xen style, use pciback */
211 212

    VIR_DOMAIN_HOSTDEV_PCI_BACKEND_TYPE_LAST
213
} virDomainHostdevSubsysPCIBackendType;
214

215
VIR_ENUM_DECL(virDomainHostdevSubsysPCIBackend);
216

217 218 219 220 221 222 223
typedef enum {
    VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_NONE,
    VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI,

    VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_LAST,
} virDomainHostdevSCSIProtocolType;

224
VIR_ENUM_DECL(virDomainHostdevSubsysSCSIProtocol);
225

226 227 228 229 230 231 232 233 234 235
struct _virDomainHostdevSubsysUSB {
    bool autoAddress; /* bus/device were filled automatically based
                         on vendor/product */
    unsigned bus;
    unsigned device;

    unsigned vendor;
    unsigned product;
};

236
struct _virDomainHostdevSubsysPCI {
237
    virPCIDeviceAddress addr; /* host address */
238 239 240
    int backend; /* enum virDomainHostdevSubsysPCIBackendType */
};

241
struct _virDomainHostdevSubsysSCSIHost {
242 243 244
    char *adapter;
    unsigned bus;
    unsigned target;
245
    unsigned long long unit;
246 247
};

248
struct _virDomainHostdevSubsysSCSIiSCSI {
249
    virStorageSourcePtr src;
250 251
};

252
struct _virDomainHostdevSubsysSCSI {
253
    int protocol; /* enum virDomainHostdevSCSIProtocolType */
254
    int sgio; /* enum virDomainDeviceSGIO */
255
    int rawio; /* enum virTristateBool */
256 257
    union {
        virDomainHostdevSubsysSCSIHost host;
258
        virDomainHostdevSubsysSCSIiSCSI iscsi;
259
    } u;
260 261
};

262 263
struct _virDomainHostdevSubsysMediatedDev {
    int model;                          /* enum virMediatedDeviceModelType */
264
    int display; /* virTristateSwitch */
265
    char uuidstr[VIR_UUID_STRING_BUFLEN];   /* mediated device's uuid string */
266
    int ramfb; /* virTristateSwitch */
267 268
};

269 270 271 272 273 274 275
typedef enum {
    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_NONE,
    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_VHOST,

    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_HOST_PROTOCOL_TYPE_LAST,
} virDomainHostdevSubsysSCSIHostProtocolType;

276
VIR_ENUM_DECL(virDomainHostdevSubsysSCSIHostProtocol);
277

278 279 280 281 282 283 284 285 286 287 288
typedef enum {
    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_DEFAULT,
    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO,
    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_TRANSITIONAL,
    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_VIRTIO_NON_TRANSITIONAL,

    VIR_DOMAIN_HOSTDEV_SUBSYS_SCSI_VHOST_MODEL_TYPE_LAST,
} virDomainHostdevSubsysSCSIVHostModelType;

VIR_ENUM_DECL(virDomainHostdevSubsysSCSIVHostModel);

289 290 291
struct _virDomainHostdevSubsysSCSIVHost {
    int protocol; /* enum virDomainHostdevSubsysSCSIHostProtocolType */
    char *wwpn;
292
    int model; /* enum virDomainHostdevSubsysSCSIVHostModelType */
293 294
};

295
struct _virDomainHostdevSubsys {
296
    int type; /* enum virDomainHostdevSubsysType */
297
    union {
298
        virDomainHostdevSubsysUSB usb;
299
        virDomainHostdevSubsysPCI pci;
300
        virDomainHostdevSubsysSCSI scsi;
301
        virDomainHostdevSubsysSCSIVHost scsi_host;
302
        virDomainHostdevSubsysMediatedDev mdev;
303 304 305
    } u;
};

306

307
typedef enum {
308 309
    VIR_DOMAIN_HOSTDEV_CAPS_TYPE_STORAGE,
    VIR_DOMAIN_HOSTDEV_CAPS_TYPE_MISC,
310
    VIR_DOMAIN_HOSTDEV_CAPS_TYPE_NET,
311 312

    VIR_DOMAIN_HOSTDEV_CAPS_TYPE_LAST
313
} virDomainHostdevCapsType;
314 315 316 317 318 319 320 321 322 323

struct _virDomainHostdevCaps {
    int type; /* enum virDOmainHostdevCapsType */
    union {
        struct {
            char *block;
        } storage;
        struct {
            char *chardev;
        } misc;
324
        struct {
325 326
            char *ifname;
            virNetDevIPInfo ip;
327
        } net;
328 329 330 331
    } u;
};


332 333
/* basic device for direct passthrough */
struct _virDomainHostdevDef {
334 335 336 337 338 339 340
    /* If 'parentnet' is non-NULL it means this host dev was
     * not originally present in the XML. It was copied from
     * a network interface for convenience when handling
     * hostdevs internally. This hostdev should never be
     * visible to the user except as part of the interface
     */
    virDomainNetDefPtr parentnet;
341

342
    int mode; /* enum virDomainHostdevMode */
343
    int startupPolicy; /* enum virDomainStartupPolicy */
344
    bool managed;
345
    bool missing;
O
Osier Yang 已提交
346
    bool readonly;
347
    bool shareable;
348
    union {
349
        virDomainHostdevSubsys subsys;
350
        virDomainHostdevCaps caps;
351 352
    } source;
    virDomainHostdevOrigStates origstates;
353
    virDomainDeviceInfoPtr info; /* Guest address */
354 355
};

356

E
Eric Blake 已提交
357 358
/* Types of disk frontend (guest view).  For backends (host view), see
 * virStorageType in util/virstoragefile.h */
359
typedef enum {
360 361 362
    VIR_DOMAIN_DISK_DEVICE_DISK,
    VIR_DOMAIN_DISK_DEVICE_CDROM,
    VIR_DOMAIN_DISK_DEVICE_FLOPPY,
363
    VIR_DOMAIN_DISK_DEVICE_LUN,
364 365

    VIR_DOMAIN_DISK_DEVICE_LAST
366
} virDomainDiskDevice;
367

368
typedef enum {
369 370 371 372 373
    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,
374
    VIR_DOMAIN_DISK_BUS_USB,
375
    VIR_DOMAIN_DISK_BUS_UML,
376
    VIR_DOMAIN_DISK_BUS_SATA,
377
    VIR_DOMAIN_DISK_BUS_SD,
378 379

    VIR_DOMAIN_DISK_BUS_LAST
380
} virDomainDiskBus;
381

382
typedef enum {
383 384 385 386
    VIR_DOMAIN_DISK_CACHE_DEFAULT,
    VIR_DOMAIN_DISK_CACHE_DISABLE,
    VIR_DOMAIN_DISK_CACHE_WRITETHRU,
    VIR_DOMAIN_DISK_CACHE_WRITEBACK,
387
    VIR_DOMAIN_DISK_CACHE_DIRECTSYNC,
388
    VIR_DOMAIN_DISK_CACHE_UNSAFE,
389 390

    VIR_DOMAIN_DISK_CACHE_LAST
391
} virDomainDiskCache;
392

393
typedef enum {
394 395
    VIR_DOMAIN_DISK_ERROR_POLICY_DEFAULT,
    VIR_DOMAIN_DISK_ERROR_POLICY_STOP,
396
    VIR_DOMAIN_DISK_ERROR_POLICY_REPORT,
397
    VIR_DOMAIN_DISK_ERROR_POLICY_IGNORE,
398
    VIR_DOMAIN_DISK_ERROR_POLICY_ENOSPACE,
399 400

    VIR_DOMAIN_DISK_ERROR_POLICY_LAST
401
} virDomainDiskErrorPolicy;
402

M
MORITA Kazutaka 已提交
403

404
typedef enum {
405
    VIR_DOMAIN_DISK_TRAY_CLOSED = 0,
406 407 408
    VIR_DOMAIN_DISK_TRAY_OPEN,

    VIR_DOMAIN_DISK_TRAY_LAST
409
} virDomainDiskTray;
410

411
typedef enum {
J
J.B. Joret 已提交
412 413 414 415 416 417
    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
418
} virDomainDiskGeometryTrans;
J
J.B. Joret 已提交
419

420
typedef enum {
421
    VIR_DOMAIN_DISK_IO_DEFAULT = 0,
M
Matthias Dahl 已提交
422 423
    VIR_DOMAIN_DISK_IO_NATIVE,
    VIR_DOMAIN_DISK_IO_THREADS,
H
Han Han 已提交
424
    VIR_DOMAIN_DISK_IO_URING,
M
Matthias Dahl 已提交
425 426

    VIR_DOMAIN_DISK_IO_LAST
427
} virDomainDiskIo;
M
Matthias Dahl 已提交
428

429
typedef enum {
430 431 432 433 434 435
    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
436
} virDomainStartupPolicy;
437

438

439
typedef enum {
440 441 442
    VIR_DOMAIN_DEVICE_SGIO_DEFAULT = 0,
    VIR_DOMAIN_DEVICE_SGIO_FILTERED,
    VIR_DOMAIN_DEVICE_SGIO_UNFILTERED,
O
Osier Yang 已提交
443

444
    VIR_DOMAIN_DEVICE_SGIO_LAST
445
} virDomainDeviceSGIO;
O
Osier Yang 已提交
446

447
typedef enum {
O
Osier Yang 已提交
448
    VIR_DOMAIN_DISK_DISCARD_DEFAULT = 0,
O
Osier Yang 已提交
449 450
    VIR_DOMAIN_DISK_DISCARD_UNMAP,
    VIR_DOMAIN_DISK_DISCARD_IGNORE,
O
Osier Yang 已提交
451 452

    VIR_DOMAIN_DISK_DISCARD_LAST
453
} virDomainDiskDiscard;
O
Osier Yang 已提交
454

455 456 457 458 459 460 461 462 463
typedef enum {
    VIR_DOMAIN_DISK_DETECT_ZEROES_DEFAULT = 0,
    VIR_DOMAIN_DISK_DETECT_ZEROES_OFF,
    VIR_DOMAIN_DISK_DETECT_ZEROES_ON,
    VIR_DOMAIN_DISK_DETECT_ZEROES_UNMAP,

    VIR_DOMAIN_DISK_DETECT_ZEROES_LAST
} virDomainDiskDetectZeroes;

464 465 466 467 468 469 470 471 472
typedef enum {
    VIR_DOMAIN_DISK_MODEL_DEFAULT = 0,
    VIR_DOMAIN_DISK_MODEL_VIRTIO,
    VIR_DOMAIN_DISK_MODEL_VIRTIO_TRANSITIONAL,
    VIR_DOMAIN_DISK_MODEL_VIRTIO_NON_TRANSITIONAL,

    VIR_DOMAIN_DISK_MODEL_LAST
} virDomainDiskModel;

L
Lei Li 已提交
473 474 475 476 477 478 479
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;
480 481 482 483 484 485 486
    unsigned long long total_bytes_sec_max;
    unsigned long long read_bytes_sec_max;
    unsigned long long write_bytes_sec_max;
    unsigned long long total_iops_sec_max;
    unsigned long long read_iops_sec_max;
    unsigned long long write_iops_sec_max;
    unsigned long long size_iops_sec;
487
    char *group_name;
488 489 490 491 492 493
    unsigned long long total_bytes_sec_max_length;
    unsigned long long read_bytes_sec_max_length;
    unsigned long long write_bytes_sec_max_length;
    unsigned long long total_iops_sec_max_length;
    unsigned long long read_iops_sec_max_length;
    unsigned long long write_iops_sec_max_length;
494 495
    /* Don't forget to update virDomainBlockIoTuneInfoCopy and
     * virDomainBlockIoTuneInfoEqual. */
L
Lei Li 已提交
496 497
};

498

499 500 501 502 503 504 505 506 507
typedef enum {
    VIR_DOMAIN_DISK_MIRROR_STATE_NONE = 0, /* No job, or job still not synced */
    VIR_DOMAIN_DISK_MIRROR_STATE_READY, /* Job in second phase */
    VIR_DOMAIN_DISK_MIRROR_STATE_ABORT, /* Job aborted, waiting for event */
    VIR_DOMAIN_DISK_MIRROR_STATE_PIVOT, /* Job pivoted, waiting for event */

    VIR_DOMAIN_DISK_MIRROR_STATE_LAST
} virDomainDiskMirrorState;

508 509 510 511
typedef enum {
    VIR_DOMAIN_MEMORY_SOURCE_NONE = 0,  /* No memory source defined */
    VIR_DOMAIN_MEMORY_SOURCE_FILE,      /* Memory source is set as file */
    VIR_DOMAIN_MEMORY_SOURCE_ANONYMOUS, /* Memory source is set as anonymous */
M
Marc-André Lureau 已提交
512
    VIR_DOMAIN_MEMORY_SOURCE_MEMFD,     /* Memory source is set as memfd */
513 514 515 516 517 518 519 520 521 522 523 524

    VIR_DOMAIN_MEMORY_SOURCE_LAST,
} virDomainMemorySource;

typedef enum {
    VIR_DOMAIN_MEMORY_ALLOCATION_NONE = 0,  /* No memory allocation defined */
    VIR_DOMAIN_MEMORY_ALLOCATION_IMMEDIATE, /* Memory allocation is set as immediate */
    VIR_DOMAIN_MEMORY_ALLOCATION_ONDEMAND,  /* Memory allocation is set as ondemand */

    VIR_DOMAIN_MEMORY_ALLOCATION_LAST,
} virDomainMemoryAllocation;

525

526 527
/* Stores the virtual disk configuration */
struct _virDomainDiskDef {
528
    virStorageSourcePtr src; /* non-NULL.  XXX Allow NULL for empty cdrom? */
529

530 531
    virObjectPtr privateData;

532 533 534 535
    int device; /* enum virDomainDiskDevice */
    int bus; /* enum virDomainDiskBus */
    char *dst;
    int tray_status; /* enum virDomainDiskTray */
J
Ján Tomko 已提交
536
    int removable; /* enum virTristateSwitch */
L
Lei Li 已提交
537

538
    virStorageSourcePtr mirror;
539
    int mirrorState; /* enum virDomainDiskMirrorState */
E
Eric Blake 已提交
540
    int mirrorJob; /* virDomainBlockJobType */
541

J
J.B. Joret 已提交
542 543 544 545
    struct {
        unsigned int cylinders;
        unsigned int heads;
        unsigned int sectors;
546
        int trans; /* enum virDomainDiskGeometryTrans */
J
J.B. Joret 已提交
547 548
    } geometry;

549 550 551
    struct {
        unsigned int logical_block_size;
        unsigned int physical_block_size;
V
Viktor Mihajlovski 已提交
552
    } blockio;
553

L
Lei Li 已提交
554 555
    virDomainBlockIoTuneInfo blkdeviotune;

556 557
    char *driverName;

558
    char *serial;
O
Osier Yang 已提交
559
    char *wwn;
560 561
    char *vendor;
    char *product;
562
    int cachemode; /* enum virDomainDiskCache */
563 564
    int error_policy;  /* enum virDomainDiskErrorPolicy */
    int rerror_policy; /* enum virDomainDiskErrorPolicy */
565
    int iomode; /* enum virDomainDiskIo */
J
Ján Tomko 已提交
566 567 568
    int ioeventfd; /* enum virTristateSwitch */
    int event_idx; /* enum virTristateSwitch */
    int copy_on_read; /* enum virTristateSwitch */
569
    int snapshot; /* virDomainSnapshotLocation, snapshot_conf.h */
570
    int startupPolicy; /* enum virDomainStartupPolicy */
571
    bool transient;
572
    virDomainDeviceInfo info;
573
    int rawio; /* enum virTristateBool */
574
    int sgio; /* enum virDomainDeviceSGIO */
O
Osier Yang 已提交
575
    int discard; /* enum virDomainDiskDiscard */
576
    unsigned int iothread; /* unused = 0, > 0 specific thread # */
577
    int detect_zeroes; /* enum virDomainDiskDetectZeroes */
578
    char *domain_name; /* backend domain name */
L
Lin Ma 已提交
579
    unsigned int queues;
580
    int model; /* enum virDomainDiskModel */
J
Ján Tomko 已提交
581
    virDomainVirtioOptionsPtr virtio;
582 583 584

    bool diskElementAuth;
    bool diskElementEnc;
585 586 587
};


588
typedef enum {
589 590 591 592
    VIR_DOMAIN_CONTROLLER_TYPE_IDE,
    VIR_DOMAIN_CONTROLLER_TYPE_FDC,
    VIR_DOMAIN_CONTROLLER_TYPE_SCSI,
    VIR_DOMAIN_CONTROLLER_TYPE_SATA,
593
    VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL,
E
Eric Blake 已提交
594
    VIR_DOMAIN_CONTROLLER_TYPE_CCID,
595
    VIR_DOMAIN_CONTROLLER_TYPE_USB,
J
Ján Tomko 已提交
596
    VIR_DOMAIN_CONTROLLER_TYPE_PCI,
597
    VIR_DOMAIN_CONTROLLER_TYPE_XENBUS,
598 599

    VIR_DOMAIN_CONTROLLER_TYPE_LAST
600
} virDomainControllerType;
601

602

603
typedef enum {
604
    VIR_DOMAIN_CONTROLLER_MODEL_PCI_DEFAULT = -1,
J
Ján Tomko 已提交
605
    VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT,
L
Laine Stump 已提交
606
    VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT,
J
Ján Tomko 已提交
607
    VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE,
608
    VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE,
609
    VIR_DOMAIN_CONTROLLER_MODEL_PCIE_TO_PCI_BRIDGE,
610
    VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT_PORT,
611
    VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_UPSTREAM_PORT,
612
    VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_DOWNSTREAM_PORT,
613
    VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS,
614
    VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS,
J
Ján Tomko 已提交
615 616

    VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST
617
} virDomainControllerModelPCI;
J
Ján Tomko 已提交
618

619
typedef enum {
620
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_NONE = 0,
621 622
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_PCI_BRIDGE,
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_I82801B11_BRIDGE,
623
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_IOH3420,
624
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_X3130_UPSTREAM,
625
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_XIO3130_DOWNSTREAM,
626
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_PXB,
627
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_PXB_PCIE,
628
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_PCIE_ROOT_PORT,
629
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_SPAPR_PCI_HOST_BRIDGE,
630
    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_PCIE_PCI_BRIDGE,
631 632 633 634

    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_LAST
} virDomainControllerPCIModelName;

635
typedef enum {
636
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT = -1,
637 638 639 640 641
    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,
642
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI,
643
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI,
644
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1078,
645 646
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL,
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL,
647

648
    VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST
649
} virDomainControllerModelSCSI;
650

651
typedef enum {
652
    VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT = -1,
M
Marc-André Lureau 已提交
653 654 655 656 657 658 659 660 661
    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 已提交
662
    VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI,
663 664
    VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB1,
    VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB2,
665
    VIR_DOMAIN_CONTROLLER_MODEL_USB_QEMU_XHCI,
666
    VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE,
M
Marc-André Lureau 已提交
667 668

    VIR_DOMAIN_CONTROLLER_MODEL_USB_LAST
669
} virDomainControllerModelUSB;
M
Marc-André Lureau 已提交
670

671
typedef enum {
672
    VIR_DOMAIN_CONTROLLER_MODEL_IDE_DEFAULT = -1,
673 674 675 676 677 678 679
    VIR_DOMAIN_CONTROLLER_MODEL_IDE_PIIX3,
    VIR_DOMAIN_CONTROLLER_MODEL_IDE_PIIX4,
    VIR_DOMAIN_CONTROLLER_MODEL_IDE_ICH6,

    VIR_DOMAIN_CONTROLLER_MODEL_IDE_LAST
} virDomainControllerModelIDE;

680 681 682 683 684 685 686 687 688
typedef enum {
    VIR_DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_DEFAULT = -1,
    VIR_DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO,
    VIR_DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO_TRANSITIONAL,
    VIR_DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_VIRTIO_NON_TRANSITIONAL,

    VIR_DOMAIN_CONTROLLER_MODEL_VIRTIO_SERIAL_LAST
} virDomainControllerModelVirtioSerial;

689
#define IS_USB2_CONTROLLER(ctrl) \
690 691 692 693 694 695
    (((ctrl)->type == VIR_DOMAIN_CONTROLLER_TYPE_USB) && \
     ((ctrl)->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_EHCI1 || \
      (ctrl)->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI1 || \
      (ctrl)->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI2 || \
      (ctrl)->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_ICH9_UHCI3))

696 697 698 699 700
struct _virDomainVirtioSerialOpts {
    int ports;   /* -1 == undef */
    int vectors; /* -1 == undef */
};

701
struct _virDomainPCIControllerOpts {
702 703
    bool pcihole64;
    unsigned long pcihole64size;
704 705 706 707 708 709 710

    /* the exact controller name is in the "model" subelement, e.g.:
     * <controller type='pci' model='pcie-root-port'>
     *   <model name='ioh3420''/>
     *   ...
     */
    int modelName; /* the exact name of the device in hypervisor */
711 712 713 714 715 716 717 718

    /* the following items are attributes of the "target" subelement
     * of controller type='pci'. They are bits of configuration that
     * are specified on the qemu commandline and are visible to the
     * guest OS, so they must be preserved to ensure ABI
     * compatibility.
     */
    int chassisNr; /* used by pci-bridge, -1 == unspecified */
719 720 721 722
    /* chassis & port used by
     * pcie-root-port/pcie-switch-downstream-port, -1 = unspecified */
    int chassis;
    int port;
723
    int busNr; /* used by pci-expander-bus, -1 == unspecified */
724
    int targetIndex; /* used by spapr-pci-host-bridge, -1 == unspecified */
725 726 727 728
    /* numaNode is a *subelement* of target (to match existing
     * item in memory target config) -1 == unspecified
     */
    int numaNode;
729
    virTristateSwitch hotplug; /* 'off' to prevent hotplug/unplug, default 'on' */
730
};
731

732 733 734 735
struct _virDomainUSBControllerOpts {
    int ports;   /* -1 == undef */
};

736 737
struct _virDomainXenbusControllerOpts {
    int maxGrantFrames;   /* -1 == undef */
738
    int maxEventChannels; /* -1 == undef */
739 740
};

741 742 743
/* Stores the virtual disk controller configuration */
struct _virDomainControllerDef {
    int type;
744
    int idx;
745
    int model; /* -1 == undef */
746
    unsigned int queues;
747 748
    unsigned int cmd_per_lun;
    unsigned int max_sectors;
749
    int ioeventfd; /* enum virTristateSwitch */
750
    unsigned int iothread; /* unused = 0, > 0 specific thread # */
751 752
    union {
        virDomainVirtioSerialOpts vioserial;
753
        virDomainPCIControllerOpts pciopts;
754
        virDomainUSBControllerOpts usbopts;
755
        virDomainXenbusControllerOpts xenbusopts;
756
    } opts;
757
    virDomainDeviceInfo info;
758
    virDomainVirtioOptionsPtr virtio;
759 760 761
};


G
Giuseppe Scrivano 已提交
762
/* Types of disk backends */
763
typedef enum {
764 765 766 767 768 769
    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 */
770
    VIR_DOMAIN_FS_TYPE_VOLUME, /* Mounts storage pool volume to a guest */
771 772

    VIR_DOMAIN_FS_TYPE_LAST
773
} virDomainFSType;
774

775
/* Filesystem driver type */
776
typedef enum {
777 778 779
    VIR_DOMAIN_FS_DRIVER_TYPE_DEFAULT = 0,
    VIR_DOMAIN_FS_DRIVER_TYPE_PATH,
    VIR_DOMAIN_FS_DRIVER_TYPE_HANDLE,
780
    VIR_DOMAIN_FS_DRIVER_TYPE_LOOP,
781
    VIR_DOMAIN_FS_DRIVER_TYPE_NBD,
D
Dmitry Guryanov 已提交
782
    VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP,
783
    VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS,
784 785

    VIR_DOMAIN_FS_DRIVER_TYPE_LAST
786
} virDomainFSDriverType;
787

788
/* Filesystem mount access mode  */
789
typedef enum {
790 791 792 793 794
    VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH,
    VIR_DOMAIN_FS_ACCESSMODE_MAPPED,
    VIR_DOMAIN_FS_ACCESSMODE_SQUASH,

    VIR_DOMAIN_FS_ACCESSMODE_LAST
795
} virDomainFSAccessMode;
796

797
/* Filesystem Write policy */
798
typedef enum {
799 800 801 802
    VIR_DOMAIN_FS_WRPOLICY_DEFAULT = 0,
    VIR_DOMAIN_FS_WRPOLICY_IMMEDIATE,

    VIR_DOMAIN_FS_WRPOLICY_LAST
803
} virDomainFSWrpolicy;
804

805 806 807 808 809 810 811 812 813 814 815 816
/* How to handle exports containing multiple devices. */
typedef enum {
    VIR_DOMAIN_FS_MULTIDEVS_DEFAULT = 0, /* Use QEMU's default setting */
    VIR_DOMAIN_FS_MULTIDEVS_REMAP, /* Remap inodes from host to guest */
    VIR_DOMAIN_FS_MULTIDEVS_FORBID, /* Prohibit more than one device */
    VIR_DOMAIN_FS_MULTIDEVS_WARN, /* Just log a warning if multiple devices */

    VIR_DOMAIN_FS_MULTIDEVS_LAST
} virDomainFSMultidevs;

VIR_ENUM_DECL(virDomainFSMultidevs);

817 818 819 820 821 822 823 824 825
typedef enum {
    VIR_DOMAIN_FS_MODEL_DEFAULT = 0,
    VIR_DOMAIN_FS_MODEL_VIRTIO,
    VIR_DOMAIN_FS_MODEL_VIRTIO_TRANSITIONAL,
    VIR_DOMAIN_FS_MODEL_VIRTIO_NON_TRANSITIONAL,

    VIR_DOMAIN_FS_MODEL_LAST
} virDomainFSModel;

826 827 828 829 830 831 832 833
typedef enum {
    VIR_DOMAIN_FS_CACHE_MODE_DEFAULT = 0,
    VIR_DOMAIN_FS_CACHE_MODE_NONE,
    VIR_DOMAIN_FS_CACHE_MODE_ALWAYS,

    VIR_DOMAIN_FS_CACHE_MODE_LAST
} virDomainFSCacheMode;

834 835
struct _virDomainFSDef {
    int type;
836 837
    int fsdriver; /* enum virDomainFSDriverType */
    int accessmode; /* enum virDomainFSAccessMode */
838
    int wrpolicy; /* enum virDomainFSWrpolicy */
839
    int format; /* virStorageFileFormat */
840
    int model; /* virDomainFSModel */
841
    int multidevs; /* virDomainFSMultidevs */
842
    unsigned long long usage; /* in bytes */
843
    virStorageSourcePtr src;
844
    char *dst;
845
    bool readonly;
846
    virDomainDeviceInfo info;
847 848
    unsigned long long space_hard_limit; /* in bytes */
    unsigned long long space_soft_limit; /* in bytes */
849
    bool symlinksResolved;
850 851 852 853 854 855
    char *binary;
    unsigned long long queue_size;
    virTristateSwitch xattr;
    virDomainFSCacheMode cache;
    virTristateSwitch posix_lock;
    virTristateSwitch flock;
856
    virDomainVirtioOptionsPtr virtio;
857
    virObjectPtr privateData;
858 859 860
};


861
/* network config types */
862
typedef enum {
863 864
    VIR_DOMAIN_NET_TYPE_USER,
    VIR_DOMAIN_NET_TYPE_ETHERNET,
M
Michele Paolino 已提交
865
    VIR_DOMAIN_NET_TYPE_VHOSTUSER,
866 867 868 869 870
    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 已提交
871
    VIR_DOMAIN_NET_TYPE_INTERNAL,
872
    VIR_DOMAIN_NET_TYPE_DIRECT,
873
    VIR_DOMAIN_NET_TYPE_HOSTDEV,
874
    VIR_DOMAIN_NET_TYPE_UDP,
875

876
    VIR_DOMAIN_NET_TYPE_LAST
877
} virDomainNetType;
878

879 880 881 882
/* network model types */
typedef enum {
    VIR_DOMAIN_NET_MODEL_UNKNOWN,
    VIR_DOMAIN_NET_MODEL_NETFRONT,
C
Cole Robinson 已提交
883 884 885
    VIR_DOMAIN_NET_MODEL_RTL8139,
    VIR_DOMAIN_NET_MODEL_VIRTIO,
    VIR_DOMAIN_NET_MODEL_E1000,
886 887 888 889 890 891 892
    VIR_DOMAIN_NET_MODEL_E1000E,
    VIR_DOMAIN_NET_MODEL_VIRTIO_TRANSITIONAL,
    VIR_DOMAIN_NET_MODEL_VIRTIO_NON_TRANSITIONAL,
    VIR_DOMAIN_NET_MODEL_USB_NET,
    VIR_DOMAIN_NET_MODEL_SPAPR_VLAN,
    VIR_DOMAIN_NET_MODEL_LAN9118,
    VIR_DOMAIN_NET_MODEL_SMC91C111,
C
Cole Robinson 已提交
893 894 895 896
    VIR_DOMAIN_NET_MODEL_VLANCE,
    VIR_DOMAIN_NET_MODEL_VMXNET,
    VIR_DOMAIN_NET_MODEL_VMXNET2,
    VIR_DOMAIN_NET_MODEL_VMXNET3,
C
Cole Robinson 已提交
897 898 899 900 901
    VIR_DOMAIN_NET_MODEL_AM79C970A,
    VIR_DOMAIN_NET_MODEL_AM79C973,
    VIR_DOMAIN_NET_MODEL_82540EM,
    VIR_DOMAIN_NET_MODEL_82545EM,
    VIR_DOMAIN_NET_MODEL_82543GC,
902 903 904 905

    VIR_DOMAIN_NET_MODEL_LAST
} virDomainNetModelType;

906
/* the backend driver used for virtio interfaces */
907
typedef enum {
908 909 910 911
    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 */

912
    VIR_DOMAIN_NET_BACKEND_TYPE_LAST
913
} virDomainNetBackendType;
914

915
/* the TX algorithm used for virtio interfaces */
916
typedef enum {
917 918 919 920
    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,

921
    VIR_DOMAIN_NET_VIRTIO_TX_MODE_LAST
922
} virDomainNetVirtioTxModeType;
923

924 925 926 927 928 929 930 931 932
/* the type of teaming device */
typedef enum {
    VIR_DOMAIN_NET_TEAMING_TYPE_NONE,
    VIR_DOMAIN_NET_TEAMING_TYPE_PERSISTENT,
    VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT,

    VIR_DOMAIN_NET_TEAMING_TYPE_LAST
} virDomainNetTeamingType;

933
/* link interface states */
934
typedef enum {
935 936 937 938 939
        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
940
} virDomainNetInterfaceLinkState;
941

942 943 944 945 946 947 948 949 950 951
/* 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.
 */
struct _virDomainActualNetDef {
    int type; /* enum virDomainNetType */
    union {
        struct {
            char *brname;
952
            int macTableManager; /* enum virNetworkBridgeMACTableManagerType */
953 954 955 956 957
        } bridge;
        struct {
            char *linkdev;
            int mode; /* enum virMacvtapMode from util/macvtap.h */
        } direct;
958 959 960
        struct {
            virDomainHostdevDef def;
        } hostdev;
961
    } data;
962
    virNetDevVPortProfilePtr virtPortProfile;
963
    virNetDevBandwidthPtr bandwidth;
964
    virNetDevVlan vlan;
965
    int trustGuestRxFilters; /* enum virTristateBool */
966
    virTristateBool isolatedPort;
967
    unsigned int class_id; /* class ID for bandwidth 'floor' */
968 969
};

970 971
/* Stores the virtual network interface configuration */
struct _virDomainNetDef {
972
    virDomainNetType type;
973
    virMacAddr mac;
974
    bool mac_generated; /* true if mac was *just now* auto-generated by libvirt */
975
    int model; /* virDomainNetModelType */
976
    char *modelstr;
977 978
    union {
        struct {
979 980
            virDomainNetBackendType name; /* which driver backend to use */
            virDomainNetVirtioTxModeType txmode;
J
Ján Tomko 已提交
981 982
            virTristateSwitch ioeventfd;
            virTristateSwitch event_idx;
983
            unsigned int queues; /* Multiqueue virtio-net */
984
            unsigned int rx_queue_size;
985
            unsigned int tx_queue_size;
986 987 988 989 990 991 992
            struct {
                virTristateSwitch csum;
                virTristateSwitch gso;
                virTristateSwitch tso4;
                virTristateSwitch tso6;
                virTristateSwitch ecn;
                virTristateSwitch ufo;
993
                virTristateSwitch mrg_rxbuf;
994 995 996 997 998 999 1000 1001
            } host;
            struct {
                virTristateSwitch csum;
                virTristateSwitch tso4;
                virTristateSwitch tso6;
                virTristateSwitch ecn;
                virTristateSwitch ufo;
            } guest;
1002 1003
        } virtio;
    } driver;
1004 1005 1006 1007
    struct {
        char *tap;
        char *vhost;
    } backend;
1008 1009 1010 1011
    struct {
        virDomainNetTeamingType type;
        char *persistent; /* alias name of persistent device */
    } teaming;
1012
    union {
M
Michele Paolino 已提交
1013
        virDomainChrSourceDefPtr vhostuser;
1014 1015 1016
        struct {
            char *address;
            int port;
1017 1018
            char *localaddr;
            int localport;
1019 1020 1021
        } socket; /* any of NET_CLIENT or NET_SERVER or NET_MCAST */
        struct {
            char *name;
1022
            char *portgroup;
1023
            unsigned char portid[VIR_UUID_BUFLEN];
1024 1025 1026 1027 1028 1029 1030
            /* 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.
1031 1032 1033
             *
             * This information is populated from the virNetworkPort
             * object associated with the portid UUID above.
1034 1035
             */
            virDomainActualNetDefPtr actual;
1036 1037 1038 1039
        } network;
        struct {
            char *brname;
        } bridge;
D
Daniel Veillard 已提交
1040 1041 1042
        struct {
            char *name;
        } internal;
1043 1044
        struct {
            char *linkdev;
1045
            int mode; /* enum virMacvtapMode from util/macvtap.h */
1046
        } direct;
1047 1048 1049
        struct {
            virDomainHostdevDef def;
        } hostdev;
1050
    } data;
1051 1052
    /* virtPortProfile is used by network/bridge/direct/hostdev */
    virNetDevVPortProfilePtr virtPortProfile;
1053 1054 1055 1056
    struct {
        bool sndbuf_specified;
        unsigned long sndbuf;
    } tune;
1057
    char *script;
1058
    char *downscript;
1059
    char *domain_name; /* backend domain name */
1060
    char *ifname; /* interface name on the host (<target dev='x'/>) */
1061
    int managed_tap; /* enum virTristateBool - ABSENT == YES */
1062
    virNetDevIPInfo hostIP;
1063
    char *ifname_guest_actual;
1064 1065
    char *ifname_guest;
    virNetDevIPInfo guestIP;
1066
    virDomainDeviceInfo info;
1067
    char *filter;
1068
    virHashTablePtr filterparams;
1069
    virNetDevBandwidthPtr bandwidth;
1070
    virNetDevVlan vlan;
1071
    int trustGuestRxFilters; /* enum virTristateBool */
1072
    virTristateBool isolatedPort;
1073
    int linkstate;
1074
    unsigned int mtu;
1075
    virNetDevCoalescePtr coalesce;
1076
    virDomainVirtioOptionsPtr virtio;
1077
    virObjectPtr privateData;
1078 1079
};

1080 1081 1082 1083 1084 1085 1086 1087
typedef enum {
    VIR_DOMAIN_CHR_DEVICE_STATE_DEFAULT = 0,
    VIR_DOMAIN_CHR_DEVICE_STATE_CONNECTED,
    VIR_DOMAIN_CHR_DEVICE_STATE_DISCONNECTED,

    VIR_DOMAIN_CHR_DEVICE_STATE_LAST
} virDomainChrDeviceState;

1088
VIR_ENUM_DECL(virDomainChrDeviceState);
1089

1090
typedef enum {
1091
    VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL = 0,
1092 1093
    VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL,
    VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE,
1094
    VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL,
1095

1096
    VIR_DOMAIN_CHR_DEVICE_TYPE_LAST
1097
} virDomainChrDeviceType;
1098

1099
typedef enum {
1100 1101
    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_NONE = 0,
    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA,
G
Guannan Ren 已提交
1102
    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB,
M
Michal Privoznik 已提交
1103
    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_PCI,
1104
    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SPAPR_VIO,
1105
    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SYSTEM,
1106
    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_SCLP,
G
Guannan Ren 已提交
1107 1108

    VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_LAST
1109
} virDomainChrSerialTargetType;
G
Guannan Ren 已提交
1110

1111
typedef enum {
1112 1113
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_NONE = 0,
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD,
1114
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO,
J
Joao Martins 已提交
1115
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN,
1116

1117
    VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_LAST
1118
} virDomainChrChannelTargetType;
1119

1120
typedef enum {
1121 1122
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE  = 0,
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL,
1123 1124
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN,
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_UML,
C
Cole Robinson 已提交
1125
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO,
1126 1127
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LXC,
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_OPENVZ,
1128 1129
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLP,
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLPLM,
1130

1131
    VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_LAST
1132
} virDomainChrConsoleTargetType;
1133

1134 1135 1136 1137 1138
typedef enum {
    VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_NONE = 0,
    VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_ISA_SERIAL,
    VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_USB_SERIAL,
    VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PCI_SERIAL,
1139
    VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SPAPR_VTY,
1140
    VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_PL011,
1141 1142
    VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SCLPCONSOLE,
    VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_SCLPLMCONSOLE,
1143
    VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_16550A,
1144 1145 1146 1147 1148 1149

    VIR_DOMAIN_CHR_SERIAL_TARGET_MODEL_LAST
} virDomainChrSerialTargetModel;

VIR_ENUM_DECL(virDomainChrSerialTargetModel);

1150
typedef enum {
1151 1152 1153 1154 1155 1156 1157 1158 1159 1160
    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,
1161
    VIR_DOMAIN_CHR_TYPE_SPICEVMC,
1162
    VIR_DOMAIN_CHR_TYPE_SPICEPORT,
1163
    VIR_DOMAIN_CHR_TYPE_NMDM,
1164

1165
    VIR_DOMAIN_CHR_TYPE_LAST
1166
} virDomainChrType;
1167

1168
typedef enum {
1169
    VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW = 0,
1170
    VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET,
1171 1172
    VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNETS, /* secure telnet */
    VIR_DOMAIN_CHR_TCP_PROTOCOL_TLS,
1173

1174
    VIR_DOMAIN_CHR_TCP_PROTOCOL_LAST
1175
} virDomainChrTcpProtocol;
1176

1177
typedef enum {
E
Eric Blake 已提交
1178 1179
    VIR_DOMAIN_CHR_SPICEVMC_VDAGENT,
    VIR_DOMAIN_CHR_SPICEVMC_SMARTCARD,
1180
    VIR_DOMAIN_CHR_SPICEVMC_USBREDIR,
E
Eric Blake 已提交
1181

1182
    VIR_DOMAIN_CHR_SPICEVMC_LAST
1183
} virDomainChrSpicevmcName;
E
Eric Blake 已提交
1184

1185 1186 1187 1188 1189 1190 1191

struct _virDomainChrSourceReconnectDef {
    virTristateBool enabled;
    unsigned int timeout;
};


1192 1193
/* The host side information for a character device.  */
struct _virDomainChrSourceDef {
1194
    virObject parent;
1195
    int type; /* virDomainChrType */
1196
    virObjectPtr privateData;
1197
    union {
E
Eric Blake 已提交
1198
        /* no <source> for null, vc, stdio */
1199 1200
        struct {
            char *path;
1201
            int append; /* enum virTristateSwitch */
1202
        } file; /* pty, file, pipe, or device */
1203 1204 1205 1206
        struct {
            char *master;
            char *slave;
        } nmdm;
1207 1208 1209
        struct {
            char *host;
            char *service;
1210
            bool listen;
1211
            int protocol;
1212
            bool tlscreds;
1213
            int haveTLS; /* enum virTristateBool */
1214
            bool tlsFromConfig;
1215
            virDomainChrSourceReconnectDef reconnect;
1216 1217 1218 1219 1220 1221 1222 1223 1224
        } tcp;
        struct {
            char *bindHost;
            char *bindService;
            char *connectHost;
            char *connectService;
        } udp;
        struct {
            char *path;
1225
            bool listen;
1226
            virDomainChrSourceReconnectDef reconnect;
1227
        } nix;
E
Eric Blake 已提交
1228
        int spicevmc;
1229 1230 1231
        struct {
            char *channel;
        } spiceport;
1232
    } data;
1233 1234
    char *logfile;
    int logappend;
1235 1236 1237

    size_t nseclabels;
    virSecurityDeviceLabelDefPtr *seclabels;
1238 1239 1240 1241
};

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

1244 1245 1246
    int targetType; /* enum virDomainChrConsoleTargetType ||
                       enum virDomainChrChannelTargetType ||
                       enum virDomainChrSerialTargetType according to deviceType */
1247
    int targetModel; /* enum virDomainChrSerialTargetModel */
1248

1249 1250 1251 1252 1253 1254
    union {
        int port; /* parallel, serial, console */
        virSocketAddrPtr addr; /* guestfwd */
        char *name; /* virtio */
    } target;

1255 1256
    virDomainChrDeviceState state;

1257
    virDomainChrSourceDefPtr source;
1258 1259

    virDomainDeviceInfo info;
1260 1261
};

1262
typedef enum {
E
Eric Blake 已提交
1263 1264 1265 1266
    VIR_DOMAIN_SMARTCARD_TYPE_HOST,
    VIR_DOMAIN_SMARTCARD_TYPE_HOST_CERTIFICATES,
    VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH,

1267
    VIR_DOMAIN_SMARTCARD_TYPE_LAST
1268
} virDomainSmartcardType;
E
Eric Blake 已提交
1269

1270 1271
#define VIR_DOMAIN_SMARTCARD_NUM_CERTIFICATES 3
#define VIR_DOMAIN_SMARTCARD_DEFAULT_DATABASE "/etc/pki/nssdb"
E
Eric Blake 已提交
1272 1273 1274 1275 1276 1277 1278 1279 1280

struct _virDomainSmartcardDef {
    int type; /* virDomainSmartcardType */
    union {
        /* no extra data for 'host' */
        struct {
            char *file[VIR_DOMAIN_SMARTCARD_NUM_CERTIFICATES];
            char *database;
        } cert; /* 'host-certificates' */
1281
        virDomainChrSourceDefPtr passthru; /* 'passthrough' */
E
Eric Blake 已提交
1282 1283 1284 1285 1286
    } data;

    virDomainDeviceInfo info;
};

M
Marc-André Lureau 已提交
1287 1288 1289 1290 1291
struct _virDomainHubDef {
    int type;
    virDomainDeviceInfo info;
};

1292
typedef enum {
1293
    VIR_DOMAIN_TPM_MODEL_DEFAULT,
1294
    VIR_DOMAIN_TPM_MODEL_TIS,
1295
    VIR_DOMAIN_TPM_MODEL_CRB,
1296
    VIR_DOMAIN_TPM_MODEL_SPAPR,
1297 1298

    VIR_DOMAIN_TPM_MODEL_LAST
1299
} virDomainTPMModel;
1300

1301
typedef enum {
1302
    VIR_DOMAIN_TPM_TYPE_PASSTHROUGH,
1303
    VIR_DOMAIN_TPM_TYPE_EMULATOR,
1304 1305

    VIR_DOMAIN_TPM_TYPE_LAST
1306
} virDomainTPMBackendType;
1307

1308 1309 1310 1311 1312 1313 1314 1315
typedef enum {
    VIR_DOMAIN_TPM_VERSION_DEFAULT,
    VIR_DOMAIN_TPM_VERSION_1_2,
    VIR_DOMAIN_TPM_VERSION_2_0,

    VIR_DOMAIN_TPM_VERSION_LAST
} virDomainTPMVersion;

1316
#define VIR_DOMAIN_TPM_DEFAULT_DEVICE "/dev/tpm0"
1317 1318

struct _virDomainTPMDef {
1319
    int type; /* virDomainTPMBackendType */
1320
    virDomainDeviceInfo info;
1321 1322
    int model; /* virDomainTPMModel */
    int version; /* virDomainTPMVersion */
1323 1324 1325 1326
    union {
        struct {
            virDomainChrSourceDef source;
        } passthrough;
1327 1328 1329 1330
        struct {
            virDomainChrSourceDef source;
            char *storagepath;
            char *logfile;
1331 1332
            unsigned char secretuuid[VIR_UUID_BUFLEN];
            bool hassecretuuid;
1333
        } emulator;
1334 1335 1336
    } data;
};

1337
typedef enum {
1338 1339
    VIR_DOMAIN_INPUT_TYPE_MOUSE,
    VIR_DOMAIN_INPUT_TYPE_TABLET,
L
Li Zhang 已提交
1340
    VIR_DOMAIN_INPUT_TYPE_KBD,
1341
    VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH,
1342

1343
    VIR_DOMAIN_INPUT_TYPE_LAST
1344
} virDomainInputType;
1345

1346
typedef enum {
1347 1348 1349
    VIR_DOMAIN_INPUT_BUS_PS2,
    VIR_DOMAIN_INPUT_BUS_USB,
    VIR_DOMAIN_INPUT_BUS_XEN,
1350
    VIR_DOMAIN_INPUT_BUS_PARALLELS, /* pseudo device for VNC in containers */
1351
    VIR_DOMAIN_INPUT_BUS_VIRTIO,
1352 1353

    VIR_DOMAIN_INPUT_BUS_LAST
1354
} virDomainInputBus;
1355

1356 1357 1358 1359 1360 1361 1362 1363 1364
typedef enum {
    VIR_DOMAIN_INPUT_MODEL_DEFAULT = 0,
    VIR_DOMAIN_INPUT_MODEL_VIRTIO,
    VIR_DOMAIN_INPUT_MODEL_VIRTIO_TRANSITIONAL,
    VIR_DOMAIN_INPUT_MODEL_VIRTIO_NON_TRANSITIONAL,

    VIR_DOMAIN_INPUT_MODEL_LAST
} virDomainInputModel;

1365 1366 1367
struct _virDomainInputDef {
    int type;
    int bus;
1368
    int model; /* virDomainInputModel */
1369 1370 1371
    struct {
        char *evdev;
    } source;
1372
    virDomainDeviceInfo info;
1373
    virDomainVirtioOptionsPtr virtio;
1374 1375
};

1376
typedef enum {
1377 1378
    VIR_DOMAIN_SOUND_CODEC_TYPE_DUPLEX,
    VIR_DOMAIN_SOUND_CODEC_TYPE_MICRO,
F
Filip Alac 已提交
1379
    VIR_DOMAIN_SOUND_CODEC_TYPE_OUTPUT,
1380 1381

    VIR_DOMAIN_SOUND_CODEC_TYPE_LAST
1382
} virDomainSoundCodecType;
1383

1384
typedef enum {
1385 1386 1387
    VIR_DOMAIN_SOUND_MODEL_SB16,
    VIR_DOMAIN_SOUND_MODEL_ES1370,
    VIR_DOMAIN_SOUND_MODEL_PCSPK,
D
Daniel P. Berrange 已提交
1388
    VIR_DOMAIN_SOUND_MODEL_AC97,
1389
    VIR_DOMAIN_SOUND_MODEL_ICH6,
1390
    VIR_DOMAIN_SOUND_MODEL_ICH9,
1391
    VIR_DOMAIN_SOUND_MODEL_USB,
1392 1393

    VIR_DOMAIN_SOUND_MODEL_LAST
1394
} virDomainSoundModel;
1395

1396 1397 1398 1399 1400
struct _virDomainSoundCodecDef {
    int type;
    int cad;
};

1401 1402
struct _virDomainSoundDef {
    int model;
1403
    virDomainDeviceInfo info;
1404

1405
    size_t ncodecs;
1406
    virDomainSoundCodecDefPtr *codecs;
1407 1408
};

1409
typedef enum {
R
Richard Jones 已提交
1410 1411
    VIR_DOMAIN_WATCHDOG_MODEL_I6300ESB,
    VIR_DOMAIN_WATCHDOG_MODEL_IB700,
1412
    VIR_DOMAIN_WATCHDOG_MODEL_DIAG288,
R
Richard Jones 已提交
1413 1414

    VIR_DOMAIN_WATCHDOG_MODEL_LAST
1415
} virDomainWatchdogModel;
R
Richard Jones 已提交
1416

1417
typedef enum {
R
Richard Jones 已提交
1418 1419 1420 1421
    VIR_DOMAIN_WATCHDOG_ACTION_RESET,
    VIR_DOMAIN_WATCHDOG_ACTION_SHUTDOWN,
    VIR_DOMAIN_WATCHDOG_ACTION_POWEROFF,
    VIR_DOMAIN_WATCHDOG_ACTION_PAUSE,
H
Hu Tao 已提交
1422
    VIR_DOMAIN_WATCHDOG_ACTION_DUMP,
R
Richard Jones 已提交
1423
    VIR_DOMAIN_WATCHDOG_ACTION_NONE,
1424
    VIR_DOMAIN_WATCHDOG_ACTION_INJECTNMI,
R
Richard Jones 已提交
1425 1426

    VIR_DOMAIN_WATCHDOG_ACTION_LAST
1427
} virDomainWatchdogAction;
R
Richard Jones 已提交
1428 1429 1430 1431

struct _virDomainWatchdogDef {
    int model;
    int action;
1432
    virDomainDeviceInfo info;
R
Richard Jones 已提交
1433 1434
};

1435

1436 1437
/* the backend driver used for virtio interfaces */
typedef enum {
1438
    VIR_DOMAIN_VIDEO_BACKEND_TYPE_DEFAULT = 0,
1439 1440 1441 1442 1443 1444 1445
    VIR_DOMAIN_VIDEO_BACKEND_TYPE_QEMU,
    VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER,

    VIR_DOMAIN_VIDEO_BACKEND_TYPE_LAST
} virDomainVideoBackendType;


1446
typedef enum {
1447
    VIR_DOMAIN_VIDEO_TYPE_DEFAULT,
1448 1449 1450 1451 1452
    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,
1453
    VIR_DOMAIN_VIDEO_TYPE_QXL,
1454
    VIR_DOMAIN_VIDEO_TYPE_PARALLELS, /* pseudo device for VNC in containers */
M
Marc-André Lureau 已提交
1455
    VIR_DOMAIN_VIDEO_TYPE_VIRTIO,
F
Fabian Freyer 已提交
1456
    VIR_DOMAIN_VIDEO_TYPE_GOP,
1457
    VIR_DOMAIN_VIDEO_TYPE_NONE,
1458
    VIR_DOMAIN_VIDEO_TYPE_BOCHS,
1459
    VIR_DOMAIN_VIDEO_TYPE_RAMFB,
1460 1461

    VIR_DOMAIN_VIDEO_TYPE_LAST
1462
} virDomainVideoType;
1463 1464


1465 1466 1467 1468 1469 1470 1471 1472
typedef enum {
    VIR_DOMAIN_VIDEO_VGACONF_IO = 0,
    VIR_DOMAIN_VIDEO_VGACONF_ON,
    VIR_DOMAIN_VIDEO_VGACONF_OFF,

    VIR_DOMAIN_VIDEO_VGACONF_LAST
} virDomainVideoVGAConf;

1473
VIR_ENUM_DECL(virDomainVideoVGAConf);
1474

1475
struct _virDomainVideoAccelDef {
1476 1477
    int accel2d; /* enum virTristateBool */
    int accel3d; /* enum virTristateBool */
1478
    char *rendernode;
1479 1480
};

1481 1482 1483 1484
struct _virDomainVideoResolutionDef {
    unsigned int x;
    unsigned int y;
};
1485

1486 1487
struct _virDomainVideoDriverDef {
   virDomainVideoVGAConf vgaconf;
1488
    char *vhost_user_binary;
1489 1490
};

1491
struct _virDomainVideoDef {
1492 1493
    virObjectPtr privateData;

1494
    int type;   /* enum virDomainVideoType */
1495 1496
    unsigned int ram;  /* kibibytes (multiples of 1024) */
    unsigned int vram; /* kibibytes (multiples of 1024) */
1497
    unsigned int vram64; /* kibibytes (multiples of 1024) */
1498
    unsigned int vgamem; /* kibibytes (multiples of 1024) */
1499
    unsigned int heads;
1500
    bool primary;
1501
    virDomainVideoAccelDefPtr accel;
1502
    virDomainVideoResolutionDefPtr res;
1503
    virDomainVideoDriverDefPtr driver;
1504
    virDomainDeviceInfo info;
J
Ján Tomko 已提交
1505
    virDomainVirtioOptionsPtr virtio;
1506
    virDomainVideoBackendType backend;
1507 1508
};

1509
/* graphics console modes */
1510
typedef enum {
1511 1512
    VIR_DOMAIN_GRAPHICS_TYPE_SDL,
    VIR_DOMAIN_GRAPHICS_TYPE_VNC,
1513 1514
    VIR_DOMAIN_GRAPHICS_TYPE_RDP,
    VIR_DOMAIN_GRAPHICS_TYPE_DESKTOP,
1515
    VIR_DOMAIN_GRAPHICS_TYPE_SPICE,
1516
    VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS,
1517

1518
    VIR_DOMAIN_GRAPHICS_TYPE_LAST
1519
} virDomainGraphicsType;
1520

1521
typedef enum {
1522 1523 1524 1525 1526 1527
    VIR_DOMAIN_GRAPHICS_VNC_SHARE_DEFAULT = 0,
    VIR_DOMAIN_GRAPHICS_VNC_SHARE_ALLOW_EXCLUSIVE,
    VIR_DOMAIN_GRAPHICS_VNC_SHARE_FORCE_SHARED,
    VIR_DOMAIN_GRAPHICS_VNC_SHARE_IGNORE,

    VIR_DOMAIN_GRAPHICS_VNC_SHARE_LAST
1528
} virDomainGraphicsVNCSharePolicy;
1529

1530
typedef enum {
1531 1532 1533 1534 1535 1536
    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
1537
} virDomainGraphicsAuthConnectedType;
1538

1539 1540
struct _virDomainGraphicsAuthDef {
    char *passwd;
1541
    bool expires; /* Whether there is an expiry time set */
1542
    time_t validTo;  /* seconds since epoch */
1543
    int connected; /* action if connected */
1544 1545
};

1546
typedef enum {
1547 1548 1549 1550 1551 1552
    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 已提交
1553
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_SMARTCARD,
1554
    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_USBREDIR,
1555 1556

    VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST
1557
} virDomainGraphicsSpiceChannelName;
1558

1559
typedef enum {
1560 1561 1562 1563 1564
    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
1565
} virDomainGraphicsSpiceChannelMode;
1566

1567
typedef enum {
1568 1569 1570 1571 1572 1573 1574 1575 1576
    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
1577
} virDomainGraphicsSpiceImageCompression;
1578

1579
typedef enum {
1580 1581 1582 1583 1584 1585
    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
1586
} virDomainGraphicsSpiceJpegCompression;
1587

1588
typedef enum {
1589 1590 1591 1592 1593 1594
    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
1595
} virDomainGraphicsSpiceZlibCompression;
1596

1597
typedef enum {
P
Peng Zhou 已提交
1598 1599 1600 1601 1602
    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
1603
} virDomainGraphicsSpiceMouseMode;
P
Peng Zhou 已提交
1604

1605
typedef enum {
1606 1607 1608 1609 1610 1611
    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
1612
} virDomainGraphicsSpiceStreamingMode;
1613

1614
typedef enum {
1615 1616 1617
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE = 0,
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS,
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK,
1618
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET,
1619

1620
    VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST
1621
} virDomainGraphicsListenType;
1622

1623
typedef enum {
M
Marc-André Lureau 已提交
1624 1625
    VIR_DOMAIN_HUB_TYPE_USB,

1626
    VIR_DOMAIN_HUB_TYPE_LAST
1627
} virDomainHubType;
M
Marc-André Lureau 已提交
1628

1629
struct _virDomainGraphicsListenDef {
1630
    virDomainGraphicsListenType type;
1631 1632
    char *address;
    char *network;
1633
    char *socket;
1634
    bool fromConfig;    /* true if the @address is config file originated */
1635
    bool autoGenerated;
1636 1637
};

1638
struct _virDomainGraphicsDef {
1639 1640
    virObjectPtr privateData;

M
Michal Privoznik 已提交
1641 1642 1643 1644 1645
    /* 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.
     */
1646
    virDomainGraphicsType type;
1647 1648 1649
    union {
        struct {
            int port;
1650
            bool portReserved;
M
Martin Kletzander 已提交
1651
            int websocket;
1652
            bool websocketGenerated;
1653
            bool autoport;
1654
            char *keymap;
1655
            virDomainGraphicsAuthDef auth;
1656
            int sharePolicy;
1657 1658 1659 1660
        } vnc;
        struct {
            char *display;
            char *xauth;
1661
            bool fullscreen;
1662
            virTristateBool gl;
1663
        } sdl;
1664 1665
        struct {
            int port;
1666 1667 1668
            bool autoport;
            bool replaceUser;
            bool multiUser;
1669 1670 1671
        } rdp;
        struct {
            char *display;
1672
            bool fullscreen;
1673
        } desktop;
1674 1675 1676
        struct {
            int port;
            int tlsPort;
1677 1678
            bool portReserved;
            bool tlsPortReserved;
1679
            virDomainGraphicsSpiceMouseMode mousemode;
1680
            char *keymap;
1681
            virDomainGraphicsAuthDef auth;
1682
            bool autoport;
1683
            int channels[VIR_DOMAIN_GRAPHICS_SPICE_CHANNEL_LAST];
1684
            virDomainGraphicsSpiceChannelMode defaultMode;
1685 1686 1687 1688
            int image;
            int jpeg;
            int zlib;
            int playback;
1689
            int streaming;
1690 1691 1692
            virTristateBool copypaste;
            virTristateBool filetransfer;
            virTristateBool gl;
1693
            char *rendernode;
1694
        } spice;
1695 1696 1697
        struct {
            char *rendernode;
        } egl_headless;
1698
    } data;
1699 1700 1701 1702 1703
    /* 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;
1704 1705
};

1706
typedef enum {
1707 1708 1709
    VIR_DOMAIN_REDIRDEV_BUS_USB,

    VIR_DOMAIN_REDIRDEV_BUS_LAST
1710
} virDomainRedirdevBus;
1711 1712 1713 1714

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

1715
    virDomainChrSourceDefPtr source;
1716 1717 1718

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

1720
struct _virDomainRedirFilterUSBDevDef {
1721 1722 1723 1724
    int usbClass;
    int vendor;
    int product;
    int version;
1725
    bool allow;
1726 1727 1728 1729
};

struct _virDomainRedirFilterDef {
    size_t nusbdevs;
1730
    virDomainRedirFilterUSBDevDefPtr *usbdevs;
1731 1732
};

1733
typedef enum {
1734 1735
    VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO,
    VIR_DOMAIN_MEMBALLOON_MODEL_XEN,
1736
    VIR_DOMAIN_MEMBALLOON_MODEL_NONE,
1737 1738
    VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO_TRANSITIONAL,
    VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO_NON_TRANSITIONAL,
1739 1740

    VIR_DOMAIN_MEMBALLOON_MODEL_LAST
1741
} virDomainMemballoonModel;
1742 1743 1744 1745

struct _virDomainMemballoonDef {
    int model;
    virDomainDeviceInfo info;
1746
    int period; /* seconds between collections */
1747
    int autodeflate; /* enum virTristateSwitch */
1748
    virDomainVirtioOptionsPtr virtio;
1749 1750
};

L
Li Zhang 已提交
1751 1752 1753
struct _virDomainNVRAMDef {
    virDomainDeviceInfo info;
};
1754

1755 1756
typedef enum {
    VIR_DOMAIN_SHMEM_MODEL_IVSHMEM,
1757 1758
    VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_PLAIN,
    VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL,
1759 1760 1761 1762

    VIR_DOMAIN_SHMEM_MODEL_LAST
} virDomainShmemModel;

1763 1764 1765
struct _virDomainShmemDef {
    char *name;
    unsigned long long size;
1766
    int model; /* enum virDomainShmemModel */
1767 1768
    struct {
        bool enabled;
1769
        virDomainChrSourceDef chr;
1770 1771 1772 1773 1774 1775 1776 1777 1778
    } server;
    struct {
        bool enabled;
        unsigned vectors;
        virTristateSwitch ioeventfd;
    } msi;
    virDomainDeviceInfo info;
};

1779
typedef enum {
1780
    VIR_DOMAIN_SMBIOS_NONE = 0,
1781 1782 1783 1784 1785
    VIR_DOMAIN_SMBIOS_EMULATE,
    VIR_DOMAIN_SMBIOS_HOST,
    VIR_DOMAIN_SMBIOS_SYSINFO,

    VIR_DOMAIN_SMBIOS_LAST
1786
} virDomainSmbiosMode;
1787

1788

1789
#define VIR_DOMAIN_MAX_BOOT_DEVS 4
1790

1791
typedef enum {
1792 1793 1794 1795 1796
    VIR_DOMAIN_BOOT_FLOPPY,
    VIR_DOMAIN_BOOT_CDROM,
    VIR_DOMAIN_BOOT_DISK,
    VIR_DOMAIN_BOOT_NET,

1797
    VIR_DOMAIN_BOOT_LAST
1798
} virDomainBootOrder;
1799

1800
typedef enum {
1801 1802 1803
    VIR_DOMAIN_FEATURE_ACPI,
    VIR_DOMAIN_FEATURE_APIC,
    VIR_DOMAIN_FEATURE_PAE,
J
Jim Fehlig 已提交
1804
    VIR_DOMAIN_FEATURE_HAP,
1805
    VIR_DOMAIN_FEATURE_VIRIDIAN,
1806
    VIR_DOMAIN_FEATURE_PRIVNET,
1807
    VIR_DOMAIN_FEATURE_HYPERV,
1808
    VIR_DOMAIN_FEATURE_KVM,
1809
    VIR_DOMAIN_FEATURE_PVSPINLOCK,
1810
    VIR_DOMAIN_FEATURE_CAPABILITIES,
1811
    VIR_DOMAIN_FEATURE_PMU,
1812
    VIR_DOMAIN_FEATURE_VMPORT,
M
Michal Privoznik 已提交
1813
    VIR_DOMAIN_FEATURE_GIC,
M
Michal Privoznik 已提交
1814
    VIR_DOMAIN_FEATURE_SMM,
1815
    VIR_DOMAIN_FEATURE_IOAPIC,
1816
    VIR_DOMAIN_FEATURE_HPT,
M
Marc-André Lureau 已提交
1817
    VIR_DOMAIN_FEATURE_VMCOREINFO,
1818
    VIR_DOMAIN_FEATURE_HTM,
1819
    VIR_DOMAIN_FEATURE_NESTED_HV,
1820
    VIR_DOMAIN_FEATURE_MSRS,
1821
    VIR_DOMAIN_FEATURE_CCF_ASSIST,
1822
    VIR_DOMAIN_FEATURE_XEN,
1823
    VIR_DOMAIN_FEATURE_CFPC,
1824
    VIR_DOMAIN_FEATURE_SBBC,
1825
    VIR_DOMAIN_FEATURE_IBS,
1826 1827

    VIR_DOMAIN_FEATURE_LAST
1828
} virDomainFeature;
1829

1830
#define VIR_DOMAIN_HYPERV_VENDOR_ID_MAX 12
1831

1832
typedef enum {
1833
    VIR_DOMAIN_HYPERV_RELAXED = 0,
1834 1835
    VIR_DOMAIN_HYPERV_VAPIC,
    VIR_DOMAIN_HYPERV_SPINLOCKS,
1836 1837 1838 1839 1840 1841
    VIR_DOMAIN_HYPERV_VPINDEX,
    VIR_DOMAIN_HYPERV_RUNTIME,
    VIR_DOMAIN_HYPERV_SYNIC,
    VIR_DOMAIN_HYPERV_STIMER,
    VIR_DOMAIN_HYPERV_RESET,
    VIR_DOMAIN_HYPERV_VENDOR_ID,
1842
    VIR_DOMAIN_HYPERV_FREQUENCIES,
1843
    VIR_DOMAIN_HYPERV_REENLIGHTENMENT,
1844
    VIR_DOMAIN_HYPERV_TLBFLUSH,
1845
    VIR_DOMAIN_HYPERV_IPI,
1846
    VIR_DOMAIN_HYPERV_EVMCS,
1847 1848

    VIR_DOMAIN_HYPERV_LAST
1849
} virDomainHyperv;
1850

1851 1852
typedef enum {
    VIR_DOMAIN_KVM_HIDDEN = 0,
1853
    VIR_DOMAIN_KVM_DEDICATED,
1854 1855 1856 1857

    VIR_DOMAIN_KVM_LAST
} virDomainKVM;

1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870
typedef enum {
    VIR_DOMAIN_MSRS_UNKNOWN = 0,

    VIR_DOMAIN_MSRS_LAST
} virDomainMsrs;

typedef enum {
    VIR_DOMAIN_MSRS_UNKNOWN_IGNORE = 0,
    VIR_DOMAIN_MSRS_UNKNOWN_FAULT,

    VIR_DOMAIN_MSRS_UNKNOWN_LAST
} virDomainMsrsUnknown;

1871 1872
typedef enum {
    VIR_DOMAIN_XEN_E820_HOST = 0,
1873
    VIR_DOMAIN_XEN_PASSTHROUGH,
1874 1875 1876 1877

    VIR_DOMAIN_XEN_LAST
} virDomainXen;

1878 1879 1880 1881 1882 1883 1884 1885
typedef enum {
    VIR_DOMAIN_XEN_PASSTHROUGH_MODE_DEFAULT = 0,
    VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SYNC_PT,
    VIR_DOMAIN_XEN_PASSTHROUGH_MODE_SHARE_PT,

    VIR_DOMAIN_XEN_PASSTHROUGH_MODE_LAST
} virDomainXenPassthroughMode;

1886 1887 1888 1889 1890 1891 1892 1893 1894 1895
typedef enum {
    VIR_DOMAIN_CAPABILITIES_POLICY_DEFAULT = 0,
    VIR_DOMAIN_CAPABILITIES_POLICY_ALLOW,
    VIR_DOMAIN_CAPABILITIES_POLICY_DENY,

    VIR_DOMAIN_CAPABILITIES_POLICY_LAST
} virDomainCapabilitiesPolicy;

/* The capabilities are ordered alphabetically to help check for new ones */
typedef enum {
1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934
    VIR_DOMAIN_PROCES_CAPS_FEATURE_AUDIT_CONTROL = 0,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_AUDIT_WRITE,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_BLOCK_SUSPEND,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_CHOWN,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_DAC_OVERRIDE,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_DAC_READ_SEARCH,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_FOWNER,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_FSETID,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_IPC_LOCK,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_IPC_OWNER,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_KILL,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_LEASE,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_LINUX_IMMUTABLE,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_MAC_ADMIN,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_MAC_OVERRIDE,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_MKNOD,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_NET_ADMIN,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_NET_BIND_SERVICE,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_NET_BROADCAST,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_NET_RAW,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SETGID,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SETFCAP,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SETPCAP,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SETUID,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_ADMIN,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_BOOT,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_CHROOT,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_MODULE,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_NICE,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_PACCT,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_PTRACE,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_RAWIO,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_RESOURCE,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_TIME,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYS_TTY_CONFIG,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_SYSLOG,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_WAKE_ALARM,
    VIR_DOMAIN_PROCES_CAPS_FEATURE_LAST
} virDomainProcessCapsFeature;
1935

1936 1937 1938 1939 1940 1941 1942 1943 1944 1945
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;

1946
VIR_ENUM_DECL(virDomainLockFailure);
1947

M
Michal Privoznik 已提交
1948
struct _virDomainBIOSDef {
J
Ján Tomko 已提交
1949
    int useserial; /* enum virTristateBool */
1950 1951 1952
    /* reboot-timeout parameters */
    bool rt_set;
    int rt_delay;
M
Michal Privoznik 已提交
1953 1954
};

1955
typedef enum {
1956 1957
    VIR_DOMAIN_LOADER_TYPE_NONE = 0,
    VIR_DOMAIN_LOADER_TYPE_ROM,
1958 1959 1960 1961 1962
    VIR_DOMAIN_LOADER_TYPE_PFLASH,

    VIR_DOMAIN_LOADER_TYPE_LAST
} virDomainLoader;

1963
VIR_ENUM_DECL(virDomainLoader);
1964 1965 1966 1967 1968

struct _virDomainLoaderDef {
    char *path;
    int readonly;   /* enum virTristateBool */
    virDomainLoader type;
1969
    int secure;     /* enum virTristateBool */
1970
    char *nvram;    /* path to non-volatile RAM */
1971
    char *templt;   /* user override of path to master nvram */
1972 1973 1974 1975
};

void virDomainLoaderDefFree(virDomainLoaderDefPtr loader);

1976
typedef enum {
1977 1978
    VIR_DOMAIN_IOAPIC_NONE = 0,
    VIR_DOMAIN_IOAPIC_QEMU,
1979 1980 1981 1982 1983 1984 1985
    VIR_DOMAIN_IOAPIC_KVM,

    VIR_DOMAIN_IOAPIC_LAST
} virDomainIOAPIC;

VIR_ENUM_DECL(virDomainIOAPIC);

1986
typedef enum {
1987 1988
    VIR_DOMAIN_HPT_RESIZING_NONE = 0,
    VIR_DOMAIN_HPT_RESIZING_ENABLED,
1989 1990 1991 1992 1993 1994 1995 1996
    VIR_DOMAIN_HPT_RESIZING_DISABLED,
    VIR_DOMAIN_HPT_RESIZING_REQUIRED,

    VIR_DOMAIN_HPT_RESIZING_LAST
} virDomainHPTResizing;

VIR_ENUM_DECL(virDomainHPTResizing);

1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007
typedef enum {
    VIR_DOMAIN_CFPC_NONE = 0,
    VIR_DOMAIN_CFPC_BROKEN,
    VIR_DOMAIN_CFPC_WORKAROUND,
    VIR_DOMAIN_CFPC_FIXED,

    VIR_DOMAIN_CFPC_LAST
} virDomainCFPC;

VIR_ENUM_DECL(virDomainCFPC);

2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
typedef enum {
    VIR_DOMAIN_SBBC_NONE = 0,
    VIR_DOMAIN_SBBC_BROKEN,
    VIR_DOMAIN_SBBC_WORKAROUND,
    VIR_DOMAIN_SBBC_FIXED,

    VIR_DOMAIN_SBBC_LAST
} virDomainSBBC;

VIR_ENUM_DECL(virDomainSBBC);

2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031
typedef enum {
    VIR_DOMAIN_IBS_NONE = 0,
    VIR_DOMAIN_IBS_BROKEN,
    VIR_DOMAIN_IBS_WORKAROUND,
    VIR_DOMAIN_IBS_FIXEDIBS,
    VIR_DOMAIN_IBS_FIXEDCCD,
    VIR_DOMAIN_IBS_FIXEDNA,

    VIR_DOMAIN_IBS_LAST
} virDomainIBS;

VIR_ENUM_DECL(virDomainIBS);

2032
/* Operating system configuration data & machine / arch */
2033 2034 2035 2036 2037
struct _virDomainOSEnv {
    char *name;
    char *value;
};

2038 2039
typedef enum {
    VIR_DOMAIN_OS_DEF_FIRMWARE_NONE = 0,
2040 2041
    VIR_DOMAIN_OS_DEF_FIRMWARE_BIOS = VIR_DOMAIN_LOADER_TYPE_ROM,
    VIR_DOMAIN_OS_DEF_FIRMWARE_EFI = VIR_DOMAIN_LOADER_TYPE_PFLASH,
2042 2043 2044 2045

    VIR_DOMAIN_OS_DEF_FIRMWARE_LAST
} virDomainOsDefFirmware;

2046 2047
G_STATIC_ASSERT((int)VIR_DOMAIN_OS_DEF_FIRMWARE_LAST == (int)VIR_DOMAIN_LOADER_TYPE_LAST);

2048 2049
VIR_ENUM_DECL(virDomainOsDefFirmware);

2050
struct _virDomainOSDef {
2051
    int type;
2052
    virDomainOsDefFirmware firmware;
2053
    virArch arch;
2054
    char *machine;
2055
    size_t nBootDevs;
2056
    int bootDevs[VIR_DOMAIN_BOOT_LAST];
J
Ján Tomko 已提交
2057
    int bootmenu; /* enum virTristateBool */
2058 2059
    unsigned int bm_timeout;
    bool bm_timeout_set;
2060
    char *init;
2061
    char **initargv;
2062
    virDomainOSEnvPtr *initenv;
2063
    char *initdir;
2064 2065
    char *inituser;
    char *initgroup;
2066 2067 2068
    char *kernel;
    char *initrd;
    char *cmdline;
2069
    char *dtb;
2070
    char *root;
J
Ján Tomko 已提交
2071
    char *slic_table;
2072
    virDomainLoaderDefPtr loader;
2073 2074
    char *bootloader;
    char *bootloaderArgs;
2075
    int smbios_mode;
2076

M
Michal Privoznik 已提交
2077
    virDomainBIOSDef bios;
2078 2079
};

2080
typedef enum {
2081 2082 2083 2084 2085
    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 已提交
2086
    VIR_DOMAIN_TIMER_NAME_KVMCLOCK,
2087
    VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK,
2088
    VIR_DOMAIN_TIMER_NAME_ARMVTIMER,
2089

2090
    VIR_DOMAIN_TIMER_NAME_LAST
2091
} virDomainTimerNameType;
2092

2093
typedef enum {
2094 2095 2096
    VIR_DOMAIN_TIMER_TRACK_BOOT = 0,
    VIR_DOMAIN_TIMER_TRACK_GUEST,
    VIR_DOMAIN_TIMER_TRACK_WALL,
2097

2098
    VIR_DOMAIN_TIMER_TRACK_LAST
2099
} virDomainTimerTrackType;
2100

2101
typedef enum {
2102 2103 2104 2105 2106
    VIR_DOMAIN_TIMER_TICKPOLICY_DELAY = 0,
    VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP,
    VIR_DOMAIN_TIMER_TICKPOLICY_MERGE,
    VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD,

2107
    VIR_DOMAIN_TIMER_TICKPOLICY_LAST
2108
} virDomainTimerTickpolicyType;
2109

2110
typedef enum {
2111 2112 2113 2114
    VIR_DOMAIN_TIMER_MODE_AUTO = 0,
    VIR_DOMAIN_TIMER_MODE_NATIVE,
    VIR_DOMAIN_TIMER_MODE_EMULATE,
    VIR_DOMAIN_TIMER_MODE_PARAVIRT,
2115
    VIR_DOMAIN_TIMER_MODE_SMPSAFE,
2116

2117
    VIR_DOMAIN_TIMER_MODE_LAST
2118
} virDomainTimerModeType;
2119

2120
typedef enum {
2121
    VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC = 0,
O
Osier Yang 已提交
2122 2123
    VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO,

2124
    VIR_DOMAIN_CPU_PLACEMENT_MODE_LAST
2125
} virDomainCpuPlacementMode;
O
Osier Yang 已提交
2126

2127
struct _virDomainThreadSchedParam {
2128
    virProcessSchedPolicy policy;
2129 2130 2131
    int priority;
};

2132 2133 2134 2135 2136 2137
struct _virDomainTimerCatchupDef {
    unsigned long threshold;
    unsigned long slew;
    unsigned long limit;
};

2138 2139 2140 2141 2142
struct _virDomainTimerDef {
    int name;
    int present;    /* unspecified = -1, no = 0, yes = 1 */
    int tickpolicy; /* none|catchup|merge|discard */

2143 2144 2145
    virDomainTimerCatchupDef catchup;

    /* track is only valid for name='platform|rtc' */
L
Leonid Bloch 已提交
2146
    int track;  /* boot|guest|wall */
2147 2148 2149 2150 2151 2152

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

2153
typedef enum {
2154 2155
    VIR_DOMAIN_CLOCK_OFFSET_UTC = 0,
    VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME = 1,
2156
    VIR_DOMAIN_CLOCK_OFFSET_VARIABLE = 2,
2157
    VIR_DOMAIN_CLOCK_OFFSET_TIMEZONE = 3,
2158

2159
    VIR_DOMAIN_CLOCK_OFFSET_LAST
2160
} virDomainClockOffsetType;
2161

2162
typedef enum {
2163 2164 2165
    VIR_DOMAIN_CLOCK_BASIS_UTC = 0,
    VIR_DOMAIN_CLOCK_BASIS_LOCALTIME = 1,

2166
    VIR_DOMAIN_CLOCK_BASIS_LAST
2167
} virDomainClockBasis;
2168

2169 2170
struct _virDomainClockDef {
    int offset;
2171

2172
    union {
2173 2174 2175
        /* Bug-compatibility-mode for Xen utc|localtime */
        int utc_reset;
        /* Adjustment in seconds, relative to UTC or LOCALTIME, when
2176
         * offset == VIR_DOMAIN_CLOCK_OFFSET_VARIABLE */
2177 2178 2179
        struct {
            long long adjustment;
            int basis;
2180 2181 2182 2183 2184 2185 2186

            /* domain start-time adjustment. This is a
             * private/internal read-only value that only exists when
             * a domain is running, and only if the clock
             * offset='variable'
             */
            long long adjustment0;
2187
        } variable;
2188 2189 2190 2191 2192

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

2194
    size_t ntimers;
2195
    virDomainTimerDefPtr *timers;
2196 2197
};

2198

2199
struct _virBlkioDevice {
2200 2201
    char *path;
    unsigned int weight;
2202 2203 2204 2205
    unsigned int riops;
    unsigned int wiops;
    unsigned long long rbps;
    unsigned long long wbps;
2206 2207
};

2208
typedef enum {
2209
    VIR_DOMAIN_RNG_MODEL_VIRTIO,
2210 2211
    VIR_DOMAIN_RNG_MODEL_VIRTIO_TRANSITIONAL,
    VIR_DOMAIN_RNG_MODEL_VIRTIO_NON_TRANSITIONAL,
2212 2213

    VIR_DOMAIN_RNG_MODEL_LAST
2214
} virDomainRNGModel;
2215

2216
typedef enum {
2217 2218
    VIR_DOMAIN_RNG_BACKEND_RANDOM,
    VIR_DOMAIN_RNG_BACKEND_EGD,
H
Han Han 已提交
2219
    VIR_DOMAIN_RNG_BACKEND_BUILTIN,
2220 2221

    VIR_DOMAIN_RNG_BACKEND_LAST
2222
} virDomainRNGBackend;
2223 2224 2225 2226

struct _virDomainRNGDef {
    int model;
    int backend;
2227 2228
    unsigned int rate; /* bytes per period */
    unsigned int period; /* milliseconds */
2229 2230 2231 2232 2233 2234 2235 2236

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

    virDomainDeviceInfo info;
2237
    virDomainVirtioOptionsPtr virtio;
2238 2239
};

2240 2241 2242
typedef enum {
    VIR_DOMAIN_MEMORY_MODEL_NONE,
    VIR_DOMAIN_MEMORY_MODEL_DIMM, /* dimm hotpluggable memory device */
M
Michal Privoznik 已提交
2243
    VIR_DOMAIN_MEMORY_MODEL_NVDIMM, /* nvdimm memory device */
2244 2245 2246 2247 2248

    VIR_DOMAIN_MEMORY_MODEL_LAST
} virDomainMemoryModel;

struct _virDomainMemoryDef {
2249
    virDomainMemoryAccess access;
2250
    virTristateBool discard;
2251

2252 2253 2254
    /* source */
    virBitmapPtr sourceNodes;
    unsigned long long pagesize; /* kibibytes */
M
Michal Privoznik 已提交
2255
    char *nvdimmPath;
2256
    unsigned long long alignsize; /* kibibytes; valid only for NVDIMM */
2257
    bool nvdimmPmem; /* valid only for NVDIMM */
2258 2259 2260

    /* target */
    int model; /* virDomainMemoryModel */
2261
    int targetNode;
2262
    unsigned long long size; /* kibibytes */
2263
    unsigned long long labelsize; /* kibibytes; valid only for NVDIMM */
2264
    bool readonly; /* valid only for NVDIMM */
2265

2266 2267 2268
    /* required for QEMU NVDIMM ppc64 support */
    unsigned char uuid[VIR_UUID_BUFLEN];

2269 2270 2271 2272 2273
    virDomainDeviceInfo info;
};

void virDomainMemoryDefFree(virDomainMemoryDefPtr def);

2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288
struct _virDomainIdMapEntry {
    unsigned int start;
    unsigned int target;
    unsigned int count;
};

struct _virDomainIdMapDef {
    size_t nuidmap;
    virDomainIdMapEntryPtr uidmap;

    size_t ngidmap;
    virDomainIdMapEntryPtr gidmap;
};


2289 2290 2291 2292 2293
typedef enum {
    VIR_DOMAIN_PANIC_MODEL_DEFAULT,
    VIR_DOMAIN_PANIC_MODEL_ISA,
    VIR_DOMAIN_PANIC_MODEL_PSERIES,
    VIR_DOMAIN_PANIC_MODEL_HYPERV,
2294
    VIR_DOMAIN_PANIC_MODEL_S390,
2295 2296 2297 2298

    VIR_DOMAIN_PANIC_MODEL_LAST
} virDomainPanicModel;

H
Hu Tao 已提交
2299
struct _virDomainPanicDef {
2300
    int model; /* virDomainPanicModel */
H
Hu Tao 已提交
2301 2302 2303 2304
    virDomainDeviceInfo info;
};


2305
void virBlkioDeviceArrayClear(virBlkioDevicePtr deviceWeights,
2306
                              int ndevices);
2307

2308 2309 2310
struct _virDomainResourceDef {
    char *partition;
};
2311

2312
struct _virDomainHugePage {
2313 2314 2315 2316
    virBitmapPtr nodemask;      /* guest's NUMA node mask */
    unsigned long long size;    /* hugepage size in KiB */
};

2317
#define VIR_DOMAIN_CPUMASK_LEN 1024
2318

2319 2320 2321
struct _virDomainIOThreadIDDef {
    bool autofill;
    unsigned int iothread_id;
2322
    int thread_id;
2323
    virBitmapPtr cpumask;
2324 2325

    virDomainThreadSchedParam sched;
2326 2327 2328 2329
};

void virDomainIOThreadIDDefFree(virDomainIOThreadIDDefPtr def);

2330

2331
struct _virDomainCputune {
2332
    unsigned long long shares;
2333 2334 2335
    bool sharesSpecified;
    unsigned long long period;
    long long quota;
2336
    unsigned long long global_period;
2337
    long long global_quota;
2338 2339
    unsigned long long emulator_period;
    long long emulator_quota;
2340 2341
    unsigned long long iothread_period;
    long long iothread_quota;
2342
    virBitmapPtr emulatorpin;
2343
    virDomainThreadSchedParamPtr emulatorsched;
2344 2345
};

2346

2347 2348 2349 2350 2351 2352
struct _virDomainResctrlMonDef {
    virBitmapPtr vcpus;
    virResctrlMonitorType tag;
    virResctrlMonitorPtr instance;
};

B
Bing Niu 已提交
2353
struct _virDomainResctrlDef {
2354 2355
    virBitmapPtr vcpus;
    virResctrlAllocPtr alloc;
2356 2357 2358

    virDomainResctrlMonDefPtr *monitors;
    size_t nmonitors;
2359 2360 2361
};


2362
struct _virDomainVcpuDef {
2363
    bool online;
2364 2365 2366
    virTristateBool hotpluggable;
    unsigned int order;

2367
    virBitmapPtr cpumask;
2368 2369

    virDomainThreadSchedParam sched;
2370 2371

    virObjectPtr privateData;
2372 2373
};

2374 2375 2376 2377 2378 2379 2380 2381
struct _virDomainBlkiotune {
    unsigned int weight;

    size_t ndevices;
    virBlkioDevicePtr devices;
};

struct _virDomainMemtune {
2382 2383 2384
    /* total memory size including memory modules in kibibytes, this field
     * should be accessed only via accessors */
    unsigned long long total_memory;
2385 2386
    unsigned long long cur_balloon; /* in kibibytes, capped at ulong thanks
                                       to virDomainGetInfo */
2387 2388 2389 2390

    virDomainHugePagePtr hugepages;
    size_t nhugepages;

2391 2392 2393 2394
    /* maximum supported memory for a guest, for hotplugging */
    unsigned long long max_memory; /* in kibibytes */
    unsigned int memory_slots; /* maximum count of RAM memory slots */

2395 2396 2397
    bool nosharepages;
    bool locked;
    int dump_core; /* enum virTristateSwitch */
2398 2399 2400 2401
    unsigned long long hard_limit; /* in kibibytes, limit at off_t bytes */
    unsigned long long soft_limit; /* in kibibytes, limit at off_t bytes */
    unsigned long long min_guarantee; /* in kibibytes, limit at off_t bytes */
    unsigned long long swap_hard_limit; /* in kibibytes, limit at off_t bytes */
2402 2403 2404 2405

    int source; /* enum virDomainMemorySource */
    int access; /* enum virDomainMemoryAccess */
    int allocation; /* enum virDomainMemoryAllocation */
2406 2407

    virTristateBool discard;
2408 2409 2410 2411 2412 2413 2414 2415
};

struct _virDomainPowerManagement {
    /* These options are of type enum virTristateBool */
    int s3;
    int s4;
};

Q
Qiaowei Ren 已提交
2416 2417 2418 2419 2420
struct _virDomainPerfDef {
    /* These options are of type enum virTristateBool */
    int events[VIR_PERF_EVENT_LAST];
};

2421 2422 2423 2424 2425
struct _virDomainKeyWrapDef {
    int aes; /* enum virTristateSwitch */
    int dea; /* enum virTristateSwitch */
};

2426 2427 2428 2429 2430 2431 2432 2433
typedef enum {
    VIR_DOMAIN_LAUNCH_SECURITY_NONE,
    VIR_DOMAIN_LAUNCH_SECURITY_SEV,

    VIR_DOMAIN_LAUNCH_SECURITY_LAST,
} virDomainLaunchSecurity;


2434
struct _virDomainSEVDef {
2435 2436 2437 2438 2439 2440 2441 2442 2443
    int sectype; /* enum virDomainLaunchSecurity */
    char *dh_cert;
    char *session;
    unsigned int policy;
    unsigned int cbitpos;
    unsigned int reduced_phys_bits;
};


J
Ján Tomko 已提交
2444 2445
typedef enum {
    VIR_DOMAIN_IOMMU_MODEL_INTEL,
2446
    VIR_DOMAIN_IOMMU_MODEL_SMMUV3,
J
Ján Tomko 已提交
2447 2448 2449 2450 2451 2452

    VIR_DOMAIN_IOMMU_MODEL_LAST
} virDomainIOMMUModel;

struct _virDomainIOMMUDef {
    virDomainIOMMUModel model;
2453
    virTristateSwitch intremap;
2454
    virTristateSwitch caching_mode;
2455
    virTristateSwitch eim;
J
Ján Tomko 已提交
2456
    virTristateSwitch iotlb;
J
Ján Tomko 已提交
2457
};
2458

J
Ján Tomko 已提交
2459 2460 2461
typedef enum {
    VIR_DOMAIN_VSOCK_MODEL_DEFAULT,
    VIR_DOMAIN_VSOCK_MODEL_VIRTIO,
2462 2463
    VIR_DOMAIN_VSOCK_MODEL_VIRTIO_TRANSITIONAL,
    VIR_DOMAIN_VSOCK_MODEL_VIRTIO_NON_TRANSITIONAL,
J
Ján Tomko 已提交
2464 2465 2466 2467

    VIR_DOMAIN_VSOCK_MODEL_LAST
} virDomainVsockModel;

J
Ján Tomko 已提交
2468
struct _virDomainVsockDef {
2469
    virObjectPtr privateData;
J
Ján Tomko 已提交
2470 2471 2472 2473 2474 2475

    virDomainVsockModel model;
    unsigned int guest_cid;
    virTristateBool auto_cid;

    virDomainDeviceInfo info;
J
Ján Tomko 已提交
2476 2477
};

2478 2479 2480
struct _virDomainVirtioOptions {
    virTristateSwitch iommu;
    virTristateSwitch ats;
2481
    virTristateSwitch packed;
2482 2483
};

2484 2485 2486 2487 2488 2489
/*
 * Guest VM main configuration
 *
 * NB: if adding to this struct, virDomainDefCheckABIStability
 * may well need an update
 */
2490
struct _virDomainDef {
2491
    int virtType; /* enum virDomainVirtType */
2492 2493
    int id;
    unsigned char uuid[VIR_UUID_BUFLEN];
2494 2495 2496 2497 2498

    unsigned char genid[VIR_UUID_BUFLEN];
    bool genidRequested;
    bool genidGenerated;

2499
    char *name;
2500
    char *title;
2501
    char *description;
2502

2503 2504
    virDomainBlkiotune blkio;
    virDomainMemtune mem;
2505

2506
    virDomainVcpuDefPtr *vcpus;
2507
    size_t maxvcpus;
2508 2509
    /* set if the vcpu definition was specified individually */
    bool individualvcpus;
O
Osier Yang 已提交
2510
    int placement_mode;
H
Hu Tao 已提交
2511
    virBitmapPtr cpumask;
2512

2513 2514
    size_t niothreadids;
    virDomainIOThreadIDDefPtr *iothreadids;
2515

2516
    virDomainCputune cputune;
2517

B
Bing Niu 已提交
2518 2519
    virDomainResctrlDefPtr *resctrls;
    size_t nresctrls;
2520

2521
    virDomainNumaPtr numa;
2522
    virDomainResourceDefPtr resource;
2523
    virDomainIdMapDef idmap;
2524

2525 2526 2527 2528 2529
    /* These 3 are based on virDomainLifeCycleAction enum flags */
    int onReboot;
    int onPoweroff;
    int onCrash;

2530 2531
    int onLockFailure; /* enum virDomainLockFailureAction */

2532
    virDomainPowerManagement pm;
2533

2534
    virDomainPerfDef perf;
Q
Qiaowei Ren 已提交
2535

2536 2537
    virDomainOSDef os;
    char *emulator;
2538 2539 2540
    /* Most {caps_,hyperv_,kvm_,}feature options utilize a virTristateSwitch
     * to handle support. A few assign specific data values to the option.
     * See virDomainDefFeaturesCheckABIStability() for details. */
2541
    int features[VIR_DOMAIN_FEATURE_LAST];
2542
    int caps_features[VIR_DOMAIN_PROCES_CAPS_FEATURE_LAST];
2543
    int hyperv_features[VIR_DOMAIN_HYPERV_LAST];
2544
    int kvm_features[VIR_DOMAIN_KVM_LAST];
2545
    int msrs_features[VIR_DOMAIN_MSRS_LAST];
2546
    int xen_features[VIR_DOMAIN_XEN_LAST];
2547
    int xen_passthrough_mode;
2548
    unsigned int hyperv_spinlocks;
2549
    int hyperv_stimer_direct;
2550
    virGICVersion gic_version;
2551
    virDomainHPTResizing hpt_resizing;
2552
    unsigned long long hpt_maxpagesize; /* Stored in KiB */
2553
    char *hyperv_vendor_id;
2554
    int apic_eoi;
2555

2556 2557 2558
    bool tseg_specified;
    unsigned long long tseg_size;

2559
    virDomainClockDef clock;
2560

2561
    size_t ngraphics;
2562
    virDomainGraphicsDefPtr *graphics;
2563

2564
    size_t ndisks;
2565 2566
    virDomainDiskDefPtr *disks;

2567
    size_t ncontrollers;
2568 2569
    virDomainControllerDefPtr *controllers;

2570
    size_t nfss;
2571 2572
    virDomainFSDefPtr *fss;

2573
    size_t nnets;
2574 2575
    virDomainNetDefPtr *nets;

2576
    size_t ninputs;
2577 2578
    virDomainInputDefPtr *inputs;

2579
    size_t nsounds;
2580 2581
    virDomainSoundDefPtr *sounds;

2582
    size_t nvideos;
2583 2584
    virDomainVideoDefPtr *videos;

2585
    size_t nhostdevs;
2586 2587
    virDomainHostdevDefPtr *hostdevs;

2588
    size_t nredirdevs;
2589 2590
    virDomainRedirdevDefPtr *redirdevs;

2591
    size_t nsmartcards;
E
Eric Blake 已提交
2592 2593
    virDomainSmartcardDefPtr *smartcards;

2594
    size_t nserials;
2595 2596
    virDomainChrDefPtr *serials;

2597
    size_t nparallels;
2598 2599
    virDomainChrDefPtr *parallels;

2600
    size_t nchannels;
2601 2602
    virDomainChrDefPtr *channels;

2603
    size_t nconsoles;
2604 2605
    virDomainChrDefPtr *consoles;

2606
    size_t nleases;
2607 2608
    virDomainLeaseDefPtr *leases;

2609
    size_t nhubs;
M
Marc-André Lureau 已提交
2610 2611
    virDomainHubDefPtr *hubs;

2612 2613 2614
    size_t nseclabels;
    virSecurityLabelDefPtr *seclabels;

2615 2616 2617
    size_t nrngs;
    virDomainRNGDefPtr *rngs;

2618 2619 2620
    size_t nshmems;
    virDomainShmemDefPtr *shmems;

2621 2622 2623
    size_t nmems;
    virDomainMemoryDefPtr *mems;

D
Dmitry Andreev 已提交
2624 2625 2626
    size_t npanics;
    virDomainPanicDefPtr *panics;

2627 2628 2629
    size_t nsysinfo;
    virSysinfoDefPtr *sysinfo;

2630
    /* Only 1 */
R
Richard Jones 已提交
2631
    virDomainWatchdogDefPtr watchdog;
2632
    virDomainMemballoonDefPtr memballoon;
L
Li Zhang 已提交
2633
    virDomainNVRAMDefPtr nvram;
2634
    virDomainTPMDefPtr tpm;
2635
    virCPUDefPtr cpu;
2636
    virDomainRedirFilterDefPtr redirfilter;
J
Ján Tomko 已提交
2637
    virDomainIOMMUDefPtr iommu;
J
Ján Tomko 已提交
2638
    virDomainVsockDefPtr vsock;
2639 2640

    void *namespaceData;
2641
    virXMLNamespace ns;
2642

2643 2644
    virDomainKeyWrapDefPtr keywrap;

2645
    /* SEV-specific domain */
2646
    virDomainSEVDefPtr sev;
2647

2648 2649
    /* Application-specific custom metadata */
    xmlNodePtr metadata;
2650 2651 2652 2653 2654 2655

    /* internal fields */
    bool postParseFailed; /* set to true if one of the custom post parse
                             callbacks failed for a non-critical reason
                             (was not able to fill in some data) and thus
                             should be re-run before starting */
2656 2657
};

2658

2659
unsigned long long virDomainDefGetMemoryInitial(const virDomainDef *def);
2660
void virDomainDefSetMemoryTotal(virDomainDefPtr def, unsigned long long size);
2661
unsigned long long virDomainDefGetMemoryTotal(const virDomainDef *def);
2662
bool virDomainDefHasMemoryHotplug(const virDomainDef *def);
2663

2664 2665 2666 2667 2668 2669 2670
typedef enum {
    VIR_DOMAIN_KEY_WRAP_CIPHER_NAME_AES,
    VIR_DOMAIN_KEY_WRAP_CIPHER_NAME_DEA,

    VIR_DOMAIN_KEY_WRAP_CIPHER_NAME_LAST
} virDomainKeyWrapCipherName;

2671
typedef enum {
2672 2673 2674 2675 2676
    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 */
2677
    VIR_DOMAIN_TAINT_EXTERNAL_LAUNCH,  /* Externally launched guest domain */
2678
    VIR_DOMAIN_TAINT_HOST_CPU,         /* Host CPU passthrough in use */
2679
    VIR_DOMAIN_TAINT_HOOK,             /* Domain (possibly) changed via hook script */
2680
    VIR_DOMAIN_TAINT_CDROM_PASSTHROUGH,/* CDROM passthrough */
Y
Yuri Chornoivan 已提交
2681
    VIR_DOMAIN_TAINT_CUSTOM_DTB,       /* Custom device tree blob was specified */
2682
    VIR_DOMAIN_TAINT_CUSTOM_GA_COMMAND, /* Custom guest agent command */
2683
    VIR_DOMAIN_TAINT_CUSTOM_HYPERVISOR_FEATURE, /* custom hypervisor feature control */
2684 2685

    VIR_DOMAIN_TAINT_LAST
2686
} virDomainTaintFlags;
2687

2688
/* Guest VM runtime state */
J
Jiri Denemark 已提交
2689 2690 2691 2692 2693 2694
typedef struct _virDomainStateReason virDomainStateReason;
struct _virDomainStateReason {
    int state;
    int reason;
};

2695
struct _virDomainObj {
2696
    virObjectLockable parent;
2697
    virCond cond;
2698

2699
    pid_t pid;
J
Jiri Denemark 已提交
2700
    virDomainStateReason state;
2701 2702 2703

    unsigned int autostart : 1;
    unsigned int persistent : 1;
2704
    unsigned int updated : 1;
2705
    unsigned int removing : 1;
2706 2707 2708

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

2710
    virDomainSnapshotObjListPtr snapshots;
C
Chris Lalancette 已提交
2711

2712 2713
    bool hasManagedSave;

2714 2715
    virDomainCheckpointObjListPtr checkpoints;

2716 2717
    void *privateData;
    void (*privateDataFreeFunc)(void *);
2718 2719

    int taint;
2720 2721 2722

    unsigned long long original_memlock; /* Original RLIMIT_MEMLOCK, zero if no
                                          * restore will be required later */
2723 2724
};

2725 2726 2727
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainObj, virObjectUnref);


2728 2729
typedef bool (*virDomainObjListACLFilter)(virConnectPtr conn,
                                          virDomainDefPtr def);
2730

2731

2732 2733
/* NB: Any new flag to this list be considered to be set in
 * virt-aa-helper code if the flag prevents parsing. */
2734 2735
typedef enum {
    VIR_DOMAIN_DEF_FEATURE_WIDE_SCSI = (1 << 0),
2736
    VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG = (1 << 1),
2737
    VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN = (1 << 2),
2738
    VIR_DOMAIN_DEF_FEATURE_NAME_SLASH = (1 << 3),
2739
    VIR_DOMAIN_DEF_FEATURE_INDIVIDUAL_VCPUS = (1 << 4),
2740
    VIR_DOMAIN_DEF_FEATURE_USER_ALIAS = (1 << 5),
2741
    VIR_DOMAIN_DEF_FEATURE_NO_BOOT_ORDER = (1 << 6),
2742
    VIR_DOMAIN_DEF_FEATURE_FW_AUTOSELECT = (1 << 7),
2743
    VIR_DOMAIN_DEF_FEATURE_NET_MODEL_STRING = (1 << 8),
2744 2745 2746
} virDomainDefFeatures;


2747 2748 2749 2750 2751 2752 2753
/* Called after everything else has been parsed, for adjusting basics.
 * This has similar semantics to virDomainDefPostParseCallback, but no
 * parseOpaque is used. This callback is run prior to
 * virDomainDefPostParseCallback. */
typedef int (*virDomainDefPostParseBasicCallback)(virDomainDefPtr def,
                                                  void *opaque);

2754
/* Called once after everything else has been parsed, for adjusting
2755 2756 2757
 * overall domain defaults.
 * @parseOpaque is opaque data passed by virDomainDefParse* caller,
 * @opaque is opaque data set by driver (usually pointer to driver
2758 2759 2760 2761
 * private data). Non-fatal failures should be reported by returning 1. In
 * cases when that is allowed, such failure is translated to a success return
 * value and the failure is noted in def->postParseFailed. Drivers should then
 * re-run the post parse callback when attempting to use such definition. */
2762
typedef int (*virDomainDefPostParseCallback)(virDomainDefPtr def,
2763
                                             unsigned int parseFlags,
2764 2765
                                             void *opaque,
                                             void *parseOpaque);
2766
/* Called once per device, for adjusting per-device settings while
2767 2768 2769 2770
 * leaving the overall domain otherwise unchanged.
 * @parseOpaque is opaque data passed by virDomainDefParse* caller,
 * @opaque is opaque data set by driver (usually pointer to driver
 * private data). */
2771
typedef int (*virDomainDeviceDefPostParseCallback)(virDomainDeviceDefPtr dev,
2772
                                                   const virDomainDef *def,
2773
                                                   unsigned int parseFlags,
2774 2775
                                                   void *opaque,
                                                   void *parseOpaque);
2776
/* Drive callback for assigning device addresses, called at the end
2777 2778 2779 2780
 * of parsing, after all defaults and implicit devices have been added.
 * @parseOpaque is opaque data passed by virDomainDefParse* caller,
 * @opaque is opaque data set by driver (usually pointer to driver
 * private data). */
2781 2782
typedef int (*virDomainDefAssignAddressesCallback)(virDomainDef *def,
                                                   unsigned int parseFlags,
2783 2784
                                                   void *opaque,
                                                   void *parseOpaque);
2785

2786 2787 2788 2789 2790 2791
typedef int (*virDomainDefPostParseDataAlloc)(const virDomainDef *def,
                                              unsigned int parseFlags,
                                              void *opaque,
                                              void **parseOpaque);
typedef void (*virDomainDefPostParseDataFree)(void *parseOpaque);

2792 2793 2794 2795 2796
/* Called in appropriate places where the domain conf parser can return failure
 * for configurations that were previously accepted. This shall not modify the
 * config. */
typedef int (*virDomainDefValidateCallback)(const virDomainDef *def,
                                            void *opaque);
2797

2798 2799 2800 2801 2802 2803
/* Called once per device, for adjusting per-device settings while
 * leaving the overall domain otherwise unchanged.  */
typedef int (*virDomainDeviceDefValidateCallback)(const virDomainDeviceDef *dev,
                                                  const virDomainDef *def,
                                                  void *opaque);

2804
struct _virDomainDefParserConfig {
2805
    /* driver domain definition callbacks */
2806
    virDomainDefPostParseBasicCallback domainPostParseBasicCallback;
2807
    virDomainDefPostParseDataAlloc domainPostParseDataAlloc;
2808 2809
    virDomainDefPostParseCallback domainPostParseCallback;
    virDomainDeviceDefPostParseCallback devicesPostParseCallback;
2810
    virDomainDefAssignAddressesCallback assignAddressesCallback;
2811
    virDomainDefPostParseDataFree domainPostParseDataFree;
2812

2813 2814
    /* validation callbacks */
    virDomainDefValidateCallback domainValidateCallback;
2815
    virDomainDeviceDefValidateCallback deviceValidateCallback;
2816

2817
    /* private data for the callbacks */
2818 2819
    void *priv;
    virFreeCallback privFree;
2820 2821

    /* data */
2822
    unsigned int features; /* virDomainDefFeatures */
2823
    unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN];
2824
    virArch defArch;
2825
    const char *netPrefix;
2826
    const char *defSecModel;
2827 2828
};

2829
typedef void *(*virDomainXMLPrivateDataAllocFunc)(void *);
2830 2831 2832 2833 2834 2835 2836 2837
typedef void (*virDomainXMLPrivateDataFreeFunc)(void *);
typedef virObjectPtr (*virDomainXMLPrivateDataNewFunc)(void);
typedef int (*virDomainXMLPrivateDataFormatFunc)(virBufferPtr,
                                                 virDomainObjPtr);
typedef int (*virDomainXMLPrivateDataParseFunc)(xmlXPathContextPtr,
                                                virDomainObjPtr,
                                                virDomainDefParserConfigPtr);

2838 2839
typedef void *(*virDomainXMLPrivateDataGetParseOpaqueFunc)(virDomainObjPtr vm);

2840 2841 2842 2843 2844
typedef int (*virDomainXMLPrivateDataDiskParseFunc)(xmlXPathContextPtr ctxt,
                                                    virDomainDiskDefPtr disk);
typedef int (*virDomainXMLPrivateDataDiskFormatFunc)(virDomainDiskDefPtr disk,
                                                     virBufferPtr buf);

2845 2846 2847 2848 2849 2850
typedef int (*virDomainXMLPrivateDataStorageSourceParseFunc)(xmlXPathContextPtr ctxt,
                                                             virStorageSourcePtr src);
typedef int (*virDomainXMLPrivateDataStorageSourceFormatFunc)(virStorageSourcePtr src,
                                                              virBufferPtr buf);


2851 2852 2853
struct _virDomainXMLPrivateDataCallbacks {
    virDomainXMLPrivateDataAllocFunc  alloc;
    virDomainXMLPrivateDataFreeFunc   free;
2854 2855
    /* note that private data for devices are not copied when using
     * virDomainDefCopy and similar functions */
2856
    virDomainXMLPrivateDataNewFunc    diskNew;
2857 2858
    virDomainXMLPrivateDataDiskParseFunc diskParse;
    virDomainXMLPrivateDataDiskFormatFunc diskFormat;
2859
    virDomainXMLPrivateDataNewFunc    vcpuNew;
2860
    virDomainXMLPrivateDataNewFunc    chrSourceNew;
2861
    virDomainXMLPrivateDataNewFunc    vsockNew;
2862
    virDomainXMLPrivateDataNewFunc    graphicsNew;
2863
    virDomainXMLPrivateDataNewFunc    networkNew;
2864
    virDomainXMLPrivateDataNewFunc    videoNew;
2865
    virDomainXMLPrivateDataNewFunc    fsNew;
2866 2867
    virDomainXMLPrivateDataFormatFunc format;
    virDomainXMLPrivateDataParseFunc  parse;
2868 2869 2870
    /* following function shall return a pointer which will be used as the
     * 'parseOpaque' argument for virDomainDefPostParse */
    virDomainXMLPrivateDataGetParseOpaqueFunc getParseOpaque;
2871 2872
    virDomainXMLPrivateDataStorageSourceParseFunc storageParse;
    virDomainXMLPrivateDataStorageSourceFormatFunc storageFormat;
2873 2874
};

2875 2876 2877 2878 2879 2880 2881
typedef bool (*virDomainABIStabilityDomain)(const virDomainDef *src,
                                            const virDomainDef *dst);

struct _virDomainABIStability {
    virDomainABIStabilityDomain domain;
};

2882 2883
virDomainXMLOptionPtr virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
                                            virDomainXMLPrivateDataCallbacksPtr priv,
2884
                                            virXMLNamespacePtr xmlns,
2885 2886 2887 2888 2889
                                            virDomainABIStabilityPtr abi,
                                            virSaveCookieCallbacksPtr saveCookie);

virSaveCookieCallbacksPtr
virDomainXMLOptionGetSaveCookie(virDomainXMLOptionPtr xmlopt);
2890

2891 2892 2893 2894 2895 2896 2897
typedef int (*virDomainMomentPostParseCallback)(virDomainMomentDefPtr def);

void virDomainXMLOptionSetMomentPostParse(virDomainXMLOptionPtr xmlopt,
                                          virDomainMomentPostParseCallback cb);
int virDomainXMLOptionRunMomentPostParse(virDomainXMLOptionPtr xmlopt,
                                         virDomainMomentDefPtr def);

2898 2899
void virDomainNetGenerateMAC(virDomainXMLOptionPtr xmlopt, virMacAddrPtr mac);

2900
virXMLNamespacePtr
2901
virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt)
2902 2903
    ATTRIBUTE_NONNULL(1);

2904 2905 2906 2907
bool
virDomainSCSIDriveAddressIsUsed(const virDomainDef *def,
                                const virDomainDeviceDriveAddress *addr);

2908 2909 2910 2911
int virDomainDefPostParse(virDomainDefPtr def,
                          unsigned int parseFlags,
                          virDomainXMLOptionPtr xmlopt,
                          void *parseOpaque);
2912
bool virDomainDefHasUSB(const virDomainDef *def);
2913

2914 2915 2916 2917
int virDomainDeviceValidateAliasForHotplug(virDomainObjPtr vm,
                                           virDomainDeviceDefPtr dev,
                                           unsigned int flags);

2918 2919
bool virDomainDeviceAliasIsUserAlias(const char *aliasStr);

2920
int virDomainDefValidate(virDomainDefPtr def,
2921 2922 2923
                         unsigned int parseFlags,
                         virDomainXMLOptionPtr xmlopt);

2924 2925 2926
int
virDomainActualNetDefValidate(const virDomainNetDef *net);

2927
static inline bool
D
Daniel P. Berrange 已提交
2928
virDomainObjIsActive(virDomainObjPtr dom)
2929 2930 2931 2932
{
    return dom->def->id != -1;
}

2933 2934
int virDomainObjCheckActive(virDomainObjPtr dom);

2935 2936 2937 2938 2939 2940 2941 2942 2943
int virDomainDefSetVcpusMax(virDomainDefPtr def,
                            unsigned int vcpus,
                            virDomainXMLOptionPtr xmlopt);
bool virDomainDefHasVcpusOffline(const virDomainDef *def);
unsigned int virDomainDefGetVcpusMax(const virDomainDef *def);
int virDomainDefSetVcpus(virDomainDefPtr def, unsigned int vcpus);
unsigned int virDomainDefGetVcpus(const virDomainDef *def);
virBitmapPtr virDomainDefGetOnlineVcpumap(const virDomainDef *def);
virDomainVcpuDefPtr virDomainDefGetVcpu(virDomainDefPtr def, unsigned int vcpu)
2944
    G_GNUC_WARN_UNUSED_RESULT;
2945
void virDomainDefVcpuOrderClear(virDomainDefPtr def);
P
Peter Krempa 已提交
2946 2947
int  virDomainDefGetVcpusTopology(const virDomainDef *def,
                                  unsigned int *maxvcpus);
2948

2949
virDomainObjPtr virDomainObjNew(virDomainXMLOptionPtr caps)
2950
    ATTRIBUTE_NONNULL(1);
2951

M
Michal Privoznik 已提交
2952 2953
void virDomainObjEndAPI(virDomainObjPtr *vm);

2954
bool virDomainObjTaint(virDomainObjPtr obj,
2955
                       virDomainTaintFlags taint);
2956

2957 2958 2959 2960
void virDomainObjBroadcast(virDomainObjPtr vm);
int virDomainObjWait(virDomainObjPtr vm);
int virDomainObjWaitUntil(virDomainObjPtr vm,
                          unsigned long long whenms);
2961

H
Hu Tao 已提交
2962
void virDomainPanicDefFree(virDomainPanicDefPtr panic);
2963
void virDomainResourceDefFree(virDomainResourceDefPtr resource);
2964
void virDomainGraphicsDefFree(virDomainGraphicsDefPtr def);
J
Ján Tomko 已提交
2965
const char *virDomainInputDefGetPath(virDomainInputDefPtr input);
2966
void virDomainInputDefFree(virDomainInputDefPtr def);
2967
virDomainDiskDefPtr virDomainDiskDefNew(virDomainXMLOptionPtr xmlopt);
2968
void virDomainDiskDefFree(virDomainDiskDefPtr def);
2969
void virDomainLeaseDefFree(virDomainLeaseDefPtr def);
2970 2971
int virDomainDiskGetType(virDomainDiskDefPtr def);
void virDomainDiskSetType(virDomainDiskDefPtr def, int type);
2972
const char *virDomainDiskGetSource(virDomainDiskDef const *def);
2973
int virDomainDiskSetSource(virDomainDiskDefPtr def, const char *src)
2974
    G_GNUC_WARN_UNUSED_RESULT;
2975
void virDomainDiskEmptySource(virDomainDiskDefPtr def);
2976
const char *virDomainDiskGetDriver(const virDomainDiskDef *def);
2977
int virDomainDiskSetDriver(virDomainDiskDefPtr def, const char *name)
2978
    G_GNUC_WARN_UNUSED_RESULT;
2979 2980
int virDomainDiskGetFormat(virDomainDiskDefPtr def);
void virDomainDiskSetFormat(virDomainDiskDefPtr def, int format);
2981 2982
virDomainControllerDefPtr
virDomainDeviceFindSCSIController(const virDomainDef *def,
2983 2984 2985 2986
                                  const virDomainDeviceDriveAddress *addr);
virDomainDiskDefPtr virDomainDiskFindByBusAndDst(virDomainDefPtr def,
                                                 int bus,
                                                 char *dst);
2987 2988

virDomainControllerDefPtr virDomainControllerDefNew(virDomainControllerType type);
2989
void virDomainControllerDefFree(virDomainControllerDefPtr def);
2990
bool virDomainControllerIsPSeriesPHB(const virDomainControllerDef *cont);
2991

2992
virDomainFSDefPtr virDomainFSDefNew(virDomainXMLOptionPtr xmlopt);
2993
void virDomainFSDefFree(virDomainFSDefPtr def);
2994
void virDomainActualNetDefFree(virDomainActualNetDefPtr def);
J
Ján Tomko 已提交
2995 2996
virDomainVsockDefPtr virDomainVsockDefNew(virDomainXMLOptionPtr xmlopt);
void virDomainVsockDefFree(virDomainVsockDefPtr vsock);
2997
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainVsockDef, virDomainVsockDefFree);
2998
void virDomainNetDefClear(virDomainNetDefPtr def);
2999
void virDomainNetDefFree(virDomainNetDefPtr def);
E
Eric Blake 已提交
3000
void virDomainSmartcardDefFree(virDomainSmartcardDefPtr def);
3001
void virDomainChrDefFree(virDomainChrDefPtr def);
3002 3003
int virDomainChrSourceDefCopy(virDomainChrSourceDefPtr dest,
                              virDomainChrSourceDefPtr src);
3004
void virDomainSoundCodecDefFree(virDomainSoundCodecDefPtr def);
J
Jidong Xia 已提交
3005 3006
ssize_t virDomainSoundDefFind(const virDomainDef *def,
                              const virDomainSoundDef *sound);
3007
void virDomainSoundDefFree(virDomainSoundDefPtr def);
J
Jidong Xia 已提交
3008
virDomainSoundDefPtr virDomainSoundDefRemove(virDomainDefPtr def, size_t idx);
3009
void virDomainMemballoonDefFree(virDomainMemballoonDefPtr def);
L
Li Zhang 已提交
3010
void virDomainNVRAMDefFree(virDomainNVRAMDefPtr def);
R
Richard Jones 已提交
3011
void virDomainWatchdogDefFree(virDomainWatchdogDefPtr def);
3012
virDomainVideoDefPtr virDomainVideoDefNew(virDomainXMLOptionPtr xmlopt);
3013
void virDomainVideoDefFree(virDomainVideoDefPtr def);
3014
void virDomainVideoDefClear(virDomainVideoDefPtr def);
J
John Ferlan 已提交
3015
virDomainHostdevDefPtr virDomainHostdevDefNew(void);
3016
void virDomainHostdevDefClear(virDomainHostdevDefPtr def);
3017
void virDomainHostdevDefFree(virDomainHostdevDefPtr def);
M
Marc-André Lureau 已提交
3018
void virDomainHubDefFree(virDomainHubDefPtr def);
3019
void virDomainRedirdevDefFree(virDomainRedirdevDefPtr def);
3020
void virDomainRedirFilterDefFree(virDomainRedirFilterDefPtr def);
3021
void virDomainShmemDefFree(virDomainShmemDefPtr def);
3022
void virDomainDeviceDefFree(virDomainDeviceDefPtr def);
3023
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainDeviceDef, virDomainDeviceDefFree);
3024
virDomainDeviceDefPtr virDomainDeviceDefCopy(virDomainDeviceDefPtr src,
3025
                                             const virDomainDef *def,
3026 3027
                                             virDomainXMLOptionPtr xmlopt,
                                             void *parseOpaque);
3028
virDomainDeviceInfoPtr virDomainDeviceGetInfo(virDomainDeviceDefPtr device);
C
Cole Robinson 已提交
3029 3030
void virDomainDeviceSetData(virDomainDeviceDefPtr device,
                            void *devicedata);
3031
void virDomainTPMDefFree(virDomainTPMDefPtr def);
3032

3033
typedef int (*virDomainDeviceInfoCallback)(virDomainDefPtr def,
3034 3035
                                           virDomainDeviceDefPtr dev,
                                           virDomainDeviceInfoPtr info,
3036 3037 3038 3039 3040 3041
                                           void *opaque);

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

3042 3043
bool virDomainDefHasDeviceAddress(virDomainDefPtr def,
                                  virDomainDeviceInfoPtr info)
3044
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
3045

3046
void virDomainDefFree(virDomainDefPtr vm);
3047
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainDef, virDomainDefFree);
3048

3049 3050 3051
virDomainChrSourceDefPtr
virDomainChrSourceDefNew(virDomainXMLOptionPtr xmlopt);

3052
virDomainChrDefPtr virDomainChrDefNew(virDomainXMLOptionPtr xmlopt);
M
Michal Novotny 已提交
3053

3054 3055
virDomainGraphicsDefPtr
virDomainGraphicsDefNew(virDomainXMLOptionPtr xmlopt);
3056 3057 3058 3059

virDomainNetDefPtr
virDomainNetDefNew(virDomainXMLOptionPtr xmlopt);

3060
virDomainDefPtr virDomainDefNew(void);
3061

3062
void virDomainObjAssignDef(virDomainObjPtr domain,
3063
                           virDomainDefPtr def,
3064 3065
                           bool live,
                           virDomainDefPtr *oldDef);
3066
int virDomainObjSetDefTransient(virDomainXMLOptionPtr xmlopt,
3067 3068
                                virDomainObjPtr domain,
                                void *parseOpaque);
3069
void virDomainObjRemoveTransientDef(virDomainObjPtr domain);
3070
virDomainDefPtr
3071
virDomainObjGetPersistentDef(virDomainXMLOptionPtr xmlopt,
3072 3073
                             virDomainObjPtr domain,
                             void *parseOpaque);
3074 3075 3076 3077 3078 3079 3080 3081

int virDomainObjUpdateModificationImpact(virDomainObjPtr vm,
                                         unsigned int *flags);

int virDomainObjGetDefs(virDomainObjPtr vm,
                        unsigned int flags,
                        virDomainDefPtr *liveDef,
                        virDomainDefPtr *persDef);
3082 3083 3084
virDomainDefPtr virDomainObjGetOneDefState(virDomainObjPtr vm,
                                           unsigned int flags,
                                           bool *state);
3085
virDomainDefPtr virDomainObjGetOneDef(virDomainObjPtr vm, unsigned int flags);
3086

3087 3088
virDomainDefPtr virDomainDefCopy(virDomainDefPtr src,
                                 virDomainXMLOptionPtr xmlopt,
3089
                                 void *parseOpaque,
3090 3091
                                 bool migratable);
virDomainDefPtr virDomainObjCopyPersistentDef(virDomainObjPtr dom,
3092 3093
                                              virDomainXMLOptionPtr xmlopt,
                                              void *parseOpaque);
3094

3095 3096 3097
typedef enum {
    /* parse internal domain status information */
    VIR_DOMAIN_DEF_PARSE_STATUS          = 1 << 0,
3098 3099 3100 3101
    /* Parse only parts of the XML that would be present in an inactive libvirt
     * XML. Note that the flag does not imply that ABI incompatible
     * transformations can be used, since it's used to strip runtime info when
     * restoring save images/migration. */
3102 3103 3104 3105 3106
    VIR_DOMAIN_DEF_PARSE_INACTIVE        = 1 << 1,
    /* parse <actual> element */
    VIR_DOMAIN_DEF_PARSE_ACTUAL_NET      = 1 << 2,
    /* parse original states of host PCI device */
    VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES = 1 << 3,
3107
    /* internal flag passed to device info sub-parser to allow using <rom> */
3108
    VIR_DOMAIN_DEF_PARSE_ALLOW_ROM       = 1 << 4,
3109
    /* internal flag passed to device info sub-parser to allow specifying boot order */
3110 3111
    VIR_DOMAIN_DEF_PARSE_ALLOW_BOOT      = 1 << 5,
    /* parse only source half of <disk> */
3112
    VIR_DOMAIN_DEF_PARSE_DISK_SOURCE     = 1 << 6,
3113
    /* perform RNG schema validation on the passed XML document */
3114
    VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA = 1 << 7,
3115
    /* allow updates in post parse callback that would break ABI otherwise */
3116
    VIR_DOMAIN_DEF_PARSE_ABI_UPDATE = 1 << 8,
3117
    /* skip definition validation checks meant to be executed on define time only */
3118
    VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE = 1 << 9,
3119
    /* skip parsing of security labels */
3120
    VIR_DOMAIN_DEF_PARSE_SKIP_SECLABEL        = 1 << 10,
3121 3122 3123
    /* Allows updates in post parse callback for incoming persistent migration
     * that would break ABI otherwise.  This should be used only if it's safe
     * to do such change. */
3124
    VIR_DOMAIN_DEF_PARSE_ABI_UPDATE_MIGRATION = 1 << 11,
3125 3126 3127 3128
    /* Allows to ignore certain failures in the post parse callbacks, which
     * may happen due to missing packages and can be fixed by re-running the
     * post parse callbacks before starting. Failure of the post parse callback
     * is recorded as def->postParseFail */
3129
    VIR_DOMAIN_DEF_PARSE_ALLOW_POST_PARSE_FAIL = 1 << 12,
3130 3131 3132 3133 3134
} virDomainDefParseFlags;

typedef enum {
    VIR_DOMAIN_DEF_FORMAT_SECURE          = 1 << 0,
    VIR_DOMAIN_DEF_FORMAT_INACTIVE        = 1 << 1,
3135
    VIR_DOMAIN_DEF_FORMAT_MIGRATABLE      = 1 << 2,
3136
    /* format internal domain status information */
3137
    VIR_DOMAIN_DEF_FORMAT_STATUS          = 1 << 3,
3138
    /* format <actual> element */
3139
    VIR_DOMAIN_DEF_FORMAT_ACTUAL_NET      = 1 << 4,
3140
    /* format original states of host PCI device */
3141 3142 3143 3144
    VIR_DOMAIN_DEF_FORMAT_PCI_ORIG_STATES = 1 << 5,
    VIR_DOMAIN_DEF_FORMAT_ALLOW_ROM       = 1 << 6,
    VIR_DOMAIN_DEF_FORMAT_ALLOW_BOOT      = 1 << 7,
    VIR_DOMAIN_DEF_FORMAT_CLOCK_ADJUST    = 1 << 8,
3145 3146
} virDomainDefFormatFlags;

3147 3148 3149 3150 3151 3152 3153 3154 3155
/* Use these flags to skip specific domain ABI consistency checks done
 * in virDomainDefCheckABIStabilityFlags.
 */
typedef enum {
    /* Set when domain lock must be released and there exists the possibility
     * that some external action could alter the value, such as cur_balloon. */
    VIR_DOMAIN_DEF_ABI_CHECK_SKIP_VOLATILE = 1 << 0,
} virDomainDefABICheckFlags;

3156
virDomainDeviceDefPtr virDomainDeviceDefParse(const char *xmlStr,
3157
                                              const virDomainDef *def,
3158
                                              virDomainXMLOptionPtr xmlopt,
3159
                                              void *parseOpaque,
L
Laine Stump 已提交
3160
                                              unsigned int flags);
3161 3162 3163
virDomainDiskDefPtr virDomainDiskDefParse(const char *xmlStr,
                                          virDomainXMLOptionPtr xmlopt,
                                          unsigned int flags);
3164
virDomainDefPtr virDomainDefParseString(const char *xmlStr,
3165
                                        virDomainXMLOptionPtr xmlopt,
3166
                                        void *parseOpaque,
L
Laine Stump 已提交
3167
                                        unsigned int flags);
3168
virDomainDefPtr virDomainDefParseFile(const char *filename,
3169
                                      virDomainXMLOptionPtr xmlopt,
3170
                                      void *parseOpaque,
L
Laine Stump 已提交
3171
                                      unsigned int flags);
3172
virDomainDefPtr virDomainDefParseNode(xmlDocPtr doc,
3173
                                      xmlNodePtr root,
3174
                                      virDomainXMLOptionPtr xmlopt,
3175
                                      void *parseOpaque,
L
Laine Stump 已提交
3176
                                      unsigned int flags);
3177 3178 3179 3180
virDomainObjPtr virDomainObjParseNode(xmlDocPtr xml,
                                      xmlNodePtr root,
                                      virDomainXMLOptionPtr xmlopt,
                                      unsigned int flags);
3181 3182 3183
virDomainObjPtr virDomainObjParseFile(const char *filename,
                                      virDomainXMLOptionPtr xmlopt,
                                      unsigned int flags);
3184

3185
bool virDomainDefCheckABIStability(virDomainDefPtr src,
3186 3187
                                   virDomainDefPtr dst,
                                   virDomainXMLOptionPtr xmlopt);
3188

3189 3190
bool virDomainDefCheckABIStabilityFlags(virDomainDefPtr src,
                                        virDomainDefPtr dst,
3191
                                        virDomainXMLOptionPtr xmlopt,
3192 3193
                                        unsigned int flags);

3194 3195
int virDomainDefAddImplicitDevices(virDomainDefPtr def,
                                   virDomainXMLOptionPtr xmlopt);
3196

3197
virDomainIOThreadIDDefPtr virDomainIOThreadIDFind(const virDomainDef *def,
3198 3199 3200 3201 3202
                                                  unsigned int iothread_id);
virDomainIOThreadIDDefPtr virDomainIOThreadIDAdd(virDomainDefPtr def,
                                                 unsigned int iothread_id);
void virDomainIOThreadIDDel(virDomainDefPtr def, unsigned int iothread_id);

3203 3204 3205 3206 3207 3208
/* When extending this list, remember that libvirt 1.2.12-5.0.0 had a
 * bug that silently ignored unknown flags.  A new flag to add
 * information is okay as long as clients still work when an older
 * server omits the requested output, but a new flag to suppress
 * information could result in a security hole when older libvirt
 * supplies the sensitive information in spite of the flag. */
3209
#define VIR_DOMAIN_XML_COMMON_FLAGS \
3210 3211
    (VIR_DOMAIN_XML_SECURE | VIR_DOMAIN_XML_INACTIVE | \
     VIR_DOMAIN_XML_MIGRATABLE)
3212 3213
unsigned int virDomainDefFormatConvertXMLFlags(unsigned int flags);

3214
char *virDomainDefFormat(virDomainDefPtr def,
3215 3216
                         virDomainXMLOptionPtr xmlopt,
                         unsigned int flags)
J
John Ferlan 已提交
3217
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
3218 3219 3220
char *virDomainObjFormat(virDomainObjPtr obj,
                         virDomainXMLOptionPtr xmlopt,
                         unsigned int flags)
J
John Ferlan 已提交
3221
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
3222
int virDomainDefFormatInternal(virDomainDefPtr def,
3223
                               virDomainXMLOptionPtr xmlopt,
3224
                               virBufferPtr buf,
3225 3226
                               unsigned int flags)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
J
John Ferlan 已提交
3227
    ATTRIBUTE_NONNULL(3);
3228
int virDomainDefFormatInternalSetRootName(virDomainDefPtr def,
3229
                                          virDomainXMLOptionPtr xmlopt,
3230
                                          virBufferPtr buf,
3231 3232 3233
                                          const char *rootname,
                                          unsigned int flags)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
J
John Ferlan 已提交
3234
    ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
3235

3236 3237
int virDomainDiskSourceFormat(virBufferPtr buf,
                              virStorageSourcePtr src,
3238
                              const char *element,
3239
                              int policy,
3240
                              bool attrIndex,
3241
                              unsigned int flags,
3242 3243
                              bool skipAuth,
                              bool skipEnc,
3244
                              virDomainXMLOptionPtr xmlopt);
3245

3246 3247 3248 3249 3250 3251
int
virDomainDiskBackingStoreFormat(virBufferPtr buf,
                                virStorageSourcePtr src,
                                virDomainXMLOptionPtr xmlopt,
                                unsigned int flags);

3252 3253
int virDomainNetDefFormat(virBufferPtr buf,
                          virDomainNetDefPtr def,
3254
                          virDomainXMLOptionPtr xmlopt,
3255 3256
                          unsigned int flags);

3257 3258 3259 3260 3261 3262
typedef enum {
    VIR_DOMAIN_DEVICE_ACTION_ATTACH,
    VIR_DOMAIN_DEVICE_ACTION_DETACH,
    VIR_DOMAIN_DEVICE_ACTION_UPDATE,
} virDomainDeviceAction;

3263
int virDomainDefCompatibleDevice(virDomainDefPtr def,
3264
                                 virDomainDeviceDefPtr dev,
3265
                                 virDomainDeviceDefPtr oldDev,
3266 3267
                                 virDomainDeviceAction action,
                                 bool live);
3268

3269 3270
void virDomainRNGDefFree(virDomainRNGDefPtr def);

3271
int virDomainDiskIndexByAddress(virDomainDefPtr def,
3272
                                virPCIDeviceAddressPtr pci_controller,
3273 3274
                                unsigned int bus, unsigned int target,
                                unsigned int unit);
3275
virDomainDiskDefPtr virDomainDiskByAddress(virDomainDefPtr def,
3276
                                           virPCIDeviceAddressPtr pci_controller,
3277 3278 3279
                                           unsigned int bus,
                                           unsigned int target,
                                           unsigned int unit);
3280 3281
int virDomainDiskIndexByName(virDomainDefPtr def, const char *name,
                             bool allow_ambiguous);
3282 3283 3284
virDomainDiskDefPtr virDomainDiskByName(virDomainDefPtr def,
                                        const char *name,
                                        bool allow_ambiguous);
3285 3286 3287 3288
virDomainDiskDefPtr
virDomainDiskByTarget(virDomainDefPtr def,
                      const char *dst);

3289
int virDomainDiskInsert(virDomainDefPtr def,
3290
                        virDomainDiskDefPtr disk)
3291
    G_GNUC_WARN_UNUSED_RESULT;
3292 3293
void virDomainDiskInsertPreAlloced(virDomainDefPtr def,
                                   virDomainDiskDefPtr disk);
3294 3295
int virDomainStorageNetworkParseHost(xmlNodePtr hostnode,
                                     virStorageNetHostDefPtr host);
3296
int virDomainDiskDefAssignAddress(virDomainXMLOptionPtr xmlopt,
3297 3298
                                  virDomainDiskDefPtr def,
                                  const virDomainDef *vmdef);
3299

3300 3301 3302 3303
virDomainDiskDefPtr
virDomainDiskRemove(virDomainDefPtr def, size_t i);
virDomainDiskDefPtr
virDomainDiskRemoveByName(virDomainDefPtr def, const char *name);
3304

3305 3306
int virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net);
virDomainNetDefPtr virDomainNetFind(virDomainDefPtr def, const char *device);
3307
virDomainNetDefPtr virDomainNetFindByName(virDomainDefPtr def, const char *ifname);
3308
bool virDomainHasNet(virDomainDefPtr def, virDomainNetDefPtr net);
3309
int virDomainNetInsert(virDomainDefPtr def, virDomainNetDefPtr net);
3310
int virDomainNetUpdate(virDomainDefPtr def, size_t netidx, virDomainNetDefPtr newnet);
3311 3312
int virDomainNetDHCPInterfaces(virDomainDefPtr def, virDomainInterfacePtr **ifaces);
int virDomainNetARPInterfaces(virDomainDefPtr def, virDomainInterfacePtr **ifaces);
3313
virDomainNetDefPtr virDomainNetRemove(virDomainDefPtr def, size_t i);
3314
void virDomainNetRemoveHostdev(virDomainDefPtr def, virDomainNetDefPtr net);
3315

L
Laine Stump 已提交
3316
int virDomainHostdevInsert(virDomainDefPtr def, virDomainHostdevDefPtr hostdev);
3317 3318
virDomainHostdevDefPtr
virDomainHostdevRemove(virDomainDefPtr def, size_t i);
L
Laine Stump 已提交
3319 3320 3321
int virDomainHostdevFind(virDomainDefPtr def, virDomainHostdevDefPtr match,
                         virDomainHostdevDefPtr *found);

3322 3323
virDomainGraphicsListenDefPtr
virDomainGraphicsGetListen(virDomainGraphicsDefPtr def, size_t i);
3324 3325
int virDomainGraphicsListenAppendAddress(virDomainGraphicsDefPtr def,
                                         const char *address)
3326
            ATTRIBUTE_NONNULL(1);
3327 3328 3329
int virDomainGraphicsListenAppendSocket(virDomainGraphicsDefPtr def,
                                        const char *socket)
            ATTRIBUTE_NONNULL(1);
3330

3331
virDomainNetType virDomainNetGetActualType(const virDomainNetDef *iface);
3332 3333 3334 3335
const char *virDomainNetGetActualBridgeName(const virDomainNetDef *iface);
int virDomainNetGetActualBridgeMACTableManager(const virDomainNetDef *iface);
const char *virDomainNetGetActualDirectDev(const virDomainNetDef *iface);
int virDomainNetGetActualDirectMode(const virDomainNetDef *iface);
3336
virDomainHostdevDefPtr virDomainNetGetActualHostdev(virDomainNetDefPtr iface);
3337
const virNetDevVPortProfile *
3338
virDomainNetGetActualVirtPortProfile(const virDomainNetDef *iface);
3339 3340
const virNetDevBandwidth *
virDomainNetGetActualBandwidth(const virDomainNetDef *iface);
3341
const virNetDevVlan *virDomainNetGetActualVlan(const virDomainNetDef *iface);
3342
bool virDomainNetGetActualTrustGuestRxFilters(const virDomainNetDef *iface);
3343 3344
virTristateBool
virDomainNetGetActualPortOptionsIsolated(const virDomainNetDef *iface);
3345 3346 3347
const char *virDomainNetGetModelString(const virDomainNetDef *net);
int virDomainNetSetModelString(virDomainNetDefPtr et,
                               const char *model);
3348
bool virDomainNetIsVirtioModel(const virDomainNetDef *net);
3349
int virDomainNetAppendIPAddress(virDomainNetDefPtr def,
3350 3351 3352
                                const char *address,
                                int family,
                                unsigned int prefix);
3353

3354
int virDomainControllerInsert(virDomainDefPtr def,
3355
                              virDomainControllerDefPtr controller)
3356
    G_GNUC_WARN_UNUSED_RESULT;
3357 3358
void virDomainControllerInsertPreAlloced(virDomainDefPtr def,
                                         virDomainControllerDefPtr controller);
3359
int virDomainControllerFind(const virDomainDef *def, int type, int idx);
3360
int virDomainControllerFindByType(virDomainDefPtr def, int type);
3361
int virDomainControllerFindByPCIAddress(virDomainDefPtr def,
3362
                                        virPCIDeviceAddressPtr addr);
3363
int virDomainControllerFindUnusedIndex(virDomainDef const *def, int type);
3364
virDomainControllerDefPtr virDomainControllerRemove(virDomainDefPtr def, size_t i);
3365
const char *virDomainControllerAliasFind(const virDomainDef *def,
3366 3367
                                         int type, int idx)
    ATTRIBUTE_NONNULL(1);
3368 3369 3370 3371 3372

int virDomainLeaseIndex(virDomainDefPtr def,
                        virDomainLeaseDefPtr lease);
int virDomainLeaseInsert(virDomainDefPtr def,
                         virDomainLeaseDefPtr lease);
3373
int virDomainLeaseInsertPreAlloc(virDomainDefPtr def)
3374
    G_GNUC_WARN_UNUSED_RESULT;
3375 3376
void virDomainLeaseInsertPreAlloced(virDomainDefPtr def,
                                    virDomainLeaseDefPtr lease);
3377 3378 3379 3380 3381
virDomainLeaseDefPtr
virDomainLeaseRemoveAt(virDomainDefPtr def, size_t i);
virDomainLeaseDefPtr
virDomainLeaseRemove(virDomainDefPtr def,
                     virDomainLeaseDefPtr lease);
3382

3383
void
3384
virDomainChrGetDomainPtrs(const virDomainDef *vmdef,
3385
                          virDomainChrDeviceType type,
3386 3387 3388
                          const virDomainChrDef ***arrPtr,
                          size_t *cntPtr)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
3389 3390 3391
virDomainChrDefPtr
virDomainChrFind(virDomainDefPtr def,
                 virDomainChrDefPtr target);
3392 3393 3394
bool
virDomainChrEquals(virDomainChrDefPtr src,
                   virDomainChrDefPtr tgt);
3395
int
3396 3397 3398 3399 3400
virDomainChrPreAlloc(virDomainDefPtr vmdef,
                     virDomainChrDefPtr chr);
void
virDomainChrInsertPreAlloced(virDomainDefPtr vmdef,
                             virDomainChrDefPtr chr);
3401 3402 3403 3404
virDomainChrDefPtr
virDomainChrRemove(virDomainDefPtr vmdef,
                   virDomainChrDefPtr chr);

3405 3406 3407
ssize_t virDomainRNGFind(virDomainDefPtr def, virDomainRNGDefPtr rng);
virDomainRNGDefPtr virDomainRNGRemove(virDomainDefPtr def, size_t idx);

3408 3409 3410 3411
ssize_t virDomainRedirdevDefFind(virDomainDefPtr def,
                                 virDomainRedirdevDefPtr redirdev);
virDomainRedirdevDefPtr virDomainRedirdevDefRemove(virDomainDefPtr def, size_t idx);

3412 3413 3414 3415 3416
int virDomainDefSave(virDomainDefPtr def,
                     virDomainXMLOptionPtr xmlopt,
                     const char *configDir)
    G_GNUC_WARN_UNUSED_RESULT
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
J
John Ferlan 已提交
3417
    ATTRIBUTE_NONNULL(3);
3418 3419 3420 3421 3422 3423

int virDomainObjSave(virDomainObjPtr obj,
                     virDomainXMLOptionPtr xmlopt,
                     const char *statusDir)
    G_GNUC_WARN_UNUSED_RESULT
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
J
John Ferlan 已提交
3424
    ATTRIBUTE_NONNULL(3);
3425

3426 3427 3428 3429
typedef void (*virDomainLoadConfigNotify)(virDomainObjPtr dom,
                                          int newDomain,
                                          void *opaque);

3430
int virDomainDeleteConfig(const char *configDir,
3431
                          const char *autostartDir,
3432 3433
                          virDomainObjPtr dom);

3434
char *virDomainConfigFile(const char *dir,
3435 3436
                          const char *name);

3437 3438 3439 3440
int virDiskNameToBusDeviceIndex(virDomainDiskDefPtr disk,
                                int *busIdx,
                                int *devIdx);

3441
virDomainFSDefPtr virDomainGetFilesystemForTarget(virDomainDefPtr def,
3442
                                                  const char *target);
3443
int virDomainFSInsert(virDomainDefPtr def, virDomainFSDefPtr fs);
3444
int virDomainFSIndexByName(virDomainDefPtr def, const char *name);
3445 3446
virDomainFSDefPtr virDomainFSRemove(virDomainDefPtr def, size_t i);

3447 3448
unsigned int virDomainVideoDefaultRAM(const virDomainDef *def,
                                      const virDomainVideoType type);
3449

E
Eric Blake 已提交
3450 3451 3452 3453 3454 3455 3456 3457 3458
typedef int (*virDomainSmartcardDefIterator)(virDomainDefPtr def,
                                             virDomainSmartcardDefPtr dev,
                                             void *opaque);

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

3459 3460 3461 3462 3463 3464 3465 3466 3467
typedef int (*virDomainChrDefIterator)(virDomainDefPtr def,
                                       virDomainChrDefPtr dev,
                                       void *opaque);

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

3468 3469 3470 3471 3472 3473 3474
typedef int (*virDomainUSBDeviceDefIterator)(virDomainDeviceInfoPtr info,
                                             void *opaque);
int virDomainUSBDeviceDefForeach(virDomainDefPtr def,
                                 virDomainUSBDeviceDefIterator iter,
                                 void *opaque,
                                 bool skipHubs);

J
Jiri Denemark 已提交
3475 3476 3477 3478 3479 3480 3481
void
virDomainObjSetState(virDomainObjPtr obj, virDomainState state, int reason)
        ATTRIBUTE_NONNULL(1);
virDomainState
virDomainObjGetState(virDomainObjPtr obj, int *reason)
        ATTRIBUTE_NONNULL(1);

3482 3483 3484
virSecurityLabelDefPtr
virDomainDefGetSecurityLabelDef(virDomainDefPtr def, const char *model);

3485
virSecurityDeviceLabelDefPtr
3486 3487
virDomainChrSourceDefGetSecurityLabelDef(virDomainChrSourceDefPtr def,
                                         const char *model);
3488

3489 3490
typedef const char* (*virEventActionToStringFunc)(int type);
typedef int (*virEventActionFromStringFunc)(const char *type);
3491

3492
int virDomainMemoryInsert(virDomainDefPtr def, virDomainMemoryDefPtr mem)
3493
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
3494 3495 3496
virDomainMemoryDefPtr virDomainMemoryRemove(virDomainDefPtr def, int idx)
    ATTRIBUTE_NONNULL(1);
int virDomainMemoryFindByDef(virDomainDefPtr def, virDomainMemoryDefPtr mem)
3497
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
3498 3499
int virDomainMemoryFindInactiveByDef(virDomainDefPtr def,
                                     virDomainMemoryDefPtr mem)
3500
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
3501

3502
int virDomainShmemDefInsert(virDomainDefPtr def, virDomainShmemDefPtr shmem)
3503
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
3504
bool virDomainShmemDefEquals(virDomainShmemDefPtr src, virDomainShmemDefPtr dst)
3505
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
3506
ssize_t virDomainShmemDefFind(virDomainDefPtr def, virDomainShmemDefPtr shmem)
3507
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
3508 3509
virDomainShmemDefPtr virDomainShmemDefRemove(virDomainDefPtr def, size_t idx)
    ATTRIBUTE_NONNULL(1);
3510 3511
ssize_t virDomainInputDefFind(const virDomainDef *def,
                              const virDomainInputDef *input)
3512
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
3513 3514
bool virDomainVsockDefEquals(const virDomainVsockDef *a,
                             const virDomainVsockDef *b)
3515
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
3516

3517 3518 3519 3520 3521
VIR_ENUM_DECL(virDomainTaint);
VIR_ENUM_DECL(virDomainVirt);
VIR_ENUM_DECL(virDomainBoot);
VIR_ENUM_DECL(virDomainFeature);
VIR_ENUM_DECL(virDomainCapabilitiesPolicy);
3522
VIR_ENUM_DECL(virDomainProcessCapsFeature);
3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535
VIR_ENUM_DECL(virDomainLifecycle);
VIR_ENUM_DECL(virDomainLifecycleAction);
VIR_ENUM_DECL(virDomainDevice);
VIR_ENUM_DECL(virDomainDiskDevice);
VIR_ENUM_DECL(virDomainDiskGeometryTrans);
VIR_ENUM_DECL(virDomainDiskBus);
VIR_ENUM_DECL(virDomainDiskCache);
VIR_ENUM_DECL(virDomainDiskErrorPolicy);
VIR_ENUM_DECL(virDomainDiskIo);
VIR_ENUM_DECL(virDomainDeviceSGIO);
VIR_ENUM_DECL(virDomainDiskTray);
VIR_ENUM_DECL(virDomainDiskDiscard);
VIR_ENUM_DECL(virDomainDiskDetectZeroes);
3536
VIR_ENUM_DECL(virDomainDiskModel);
3537 3538 3539 3540 3541 3542 3543
VIR_ENUM_DECL(virDomainDiskMirrorState);
VIR_ENUM_DECL(virDomainController);
VIR_ENUM_DECL(virDomainControllerModelPCI);
VIR_ENUM_DECL(virDomainControllerPCIModelName);
VIR_ENUM_DECL(virDomainControllerModelSCSI);
VIR_ENUM_DECL(virDomainControllerModelUSB);
VIR_ENUM_DECL(virDomainControllerModelIDE);
3544
VIR_ENUM_DECL(virDomainControllerModelVirtioSerial);
3545 3546 3547 3548
VIR_ENUM_DECL(virDomainFS);
VIR_ENUM_DECL(virDomainFSDriver);
VIR_ENUM_DECL(virDomainFSAccessMode);
VIR_ENUM_DECL(virDomainFSWrpolicy);
3549
VIR_ENUM_DECL(virDomainFSModel);
3550
VIR_ENUM_DECL(virDomainFSCacheMode);
3551 3552 3553
VIR_ENUM_DECL(virDomainNet);
VIR_ENUM_DECL(virDomainNetBackend);
VIR_ENUM_DECL(virDomainNetVirtioTxMode);
3554
VIR_ENUM_DECL(virDomainNetTeaming);
3555
VIR_ENUM_DECL(virDomainNetInterfaceLinkState);
3556
VIR_ENUM_DECL(virDomainNetModel);
3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573
VIR_ENUM_DECL(virDomainChrDevice);
VIR_ENUM_DECL(virDomainChrChannelTarget);
VIR_ENUM_DECL(virDomainChrConsoleTarget);
VIR_ENUM_DECL(virDomainChrSerialTarget);
VIR_ENUM_DECL(virDomainSmartcard);
VIR_ENUM_DECL(virDomainChr);
VIR_ENUM_DECL(virDomainChrTcpProtocol);
VIR_ENUM_DECL(virDomainChrSpicevmc);
VIR_ENUM_DECL(virDomainSoundCodec);
VIR_ENUM_DECL(virDomainSoundModel);
VIR_ENUM_DECL(virDomainKeyWrapCipherName);
VIR_ENUM_DECL(virDomainMemballoonModel);
VIR_ENUM_DECL(virDomainSmbiosMode);
VIR_ENUM_DECL(virDomainWatchdogModel);
VIR_ENUM_DECL(virDomainWatchdogAction);
VIR_ENUM_DECL(virDomainPanicModel);
VIR_ENUM_DECL(virDomainVideo);
3574
VIR_ENUM_DECL(virDomainVideoBackend);
3575 3576 3577 3578 3579 3580 3581
VIR_ENUM_DECL(virDomainHostdevMode);
VIR_ENUM_DECL(virDomainHostdevSubsys);
VIR_ENUM_DECL(virDomainHostdevCaps);
VIR_ENUM_DECL(virDomainHub);
VIR_ENUM_DECL(virDomainRedirdevBus);
VIR_ENUM_DECL(virDomainInput);
VIR_ENUM_DECL(virDomainInputBus);
3582
VIR_ENUM_DECL(virDomainInputModel);
3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595
VIR_ENUM_DECL(virDomainGraphics);
VIR_ENUM_DECL(virDomainGraphicsListen);
VIR_ENUM_DECL(virDomainGraphicsAuthConnected);
VIR_ENUM_DECL(virDomainGraphicsSpiceChannelName);
VIR_ENUM_DECL(virDomainGraphicsSpiceChannelMode);
VIR_ENUM_DECL(virDomainGraphicsSpiceImageCompression);
VIR_ENUM_DECL(virDomainGraphicsSpiceJpegCompression);
VIR_ENUM_DECL(virDomainGraphicsSpiceZlibCompression);
VIR_ENUM_DECL(virDomainGraphicsSpiceStreamingMode);
VIR_ENUM_DECL(virDomainGraphicsSpiceMouseMode);
VIR_ENUM_DECL(virDomainGraphicsVNCSharePolicy);
VIR_ENUM_DECL(virDomainHyperv);
VIR_ENUM_DECL(virDomainKVM);
3596
VIR_ENUM_DECL(virDomainXen);
3597
VIR_ENUM_DECL(virDomainXenPassthroughMode);
3598
VIR_ENUM_DECL(virDomainMsrsUnknown);
3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611
VIR_ENUM_DECL(virDomainRNGModel);
VIR_ENUM_DECL(virDomainRNGBackend);
VIR_ENUM_DECL(virDomainTPMModel);
VIR_ENUM_DECL(virDomainTPMBackend);
VIR_ENUM_DECL(virDomainTPMVersion);
VIR_ENUM_DECL(virDomainMemoryModel);
VIR_ENUM_DECL(virDomainMemoryBackingModel);
VIR_ENUM_DECL(virDomainMemorySource);
VIR_ENUM_DECL(virDomainMemoryAllocation);
VIR_ENUM_DECL(virDomainIOMMUModel);
VIR_ENUM_DECL(virDomainVsockModel);
VIR_ENUM_DECL(virDomainShmemModel);
VIR_ENUM_DECL(virDomainLaunchSecurity);
3612
/* from libvirt.h */
3613 3614 3615 3616 3617 3618 3619 3620 3621
VIR_ENUM_DECL(virDomainState);
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);
VIR_ENUM_DECL(virDomainPMSuspendedReason);
J
Jiri Denemark 已提交
3622 3623 3624 3625

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

3626 3627 3628
VIR_ENUM_DECL(virDomainSeclabel);
VIR_ENUM_DECL(virDomainClockOffset);
VIR_ENUM_DECL(virDomainClockBasis);
3629

3630 3631 3632 3633 3634
VIR_ENUM_DECL(virDomainTimerName);
VIR_ENUM_DECL(virDomainTimerTrack);
VIR_ENUM_DECL(virDomainTimerTickpolicy);
VIR_ENUM_DECL(virDomainTimerMode);
VIR_ENUM_DECL(virDomainCpuPlacementMode);
3635

3636
VIR_ENUM_DECL(virDomainStartupPolicy);
3637

3638 3639
virDomainControllerDefPtr
virDomainDefAddController(virDomainDefPtr def, int type, int idx, int model);
3640 3641
int
virDomainDefAddUSBController(virDomainDefPtr def, int idx, int model);
3642 3643 3644 3645 3646
int
virDomainDefMaybeAddController(virDomainDefPtr def,
                               int type,
                               int idx,
                               int model);
3647 3648 3649 3650
int
virDomainDefMaybeAddInput(virDomainDefPtr def,
                          int type,
                          int bus);
3651

3652 3653
char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);

3654 3655
int virDomainDefFindDevice(virDomainDefPtr def,
                           const char *devAlias,
3656 3657
                           virDomainDeviceDefPtr dev,
                           bool reportError);
3658

3659 3660
const char *virDomainChrSourceDefGetPath(virDomainChrSourceDefPtr chr);

3661 3662
void virDomainChrSourceDefClear(virDomainChrSourceDefPtr def);

3663 3664 3665 3666 3667
char *virDomainObjGetMetadata(virDomainObjPtr vm,
                              int type,
                              const char *uri,
                              unsigned int flags);

3668 3669 3670 3671 3672 3673
int virDomainObjSetMetadata(virDomainObjPtr vm,
                            int type,
                            const char *metadata,
                            const char *key,
                            const char *uri,
                            virDomainXMLOptionPtr xmlopt,
3674
                            const char *stateDir,
3675 3676 3677
                            const char *configDir,
                            unsigned int flags);

3678 3679 3680 3681 3682 3683 3684 3685
int
virDomainParseMemory(const char *xpath,
                     const char *units_xpath,
                     xmlXPathContextPtr ctxt,
                     unsigned long long *mem,
                     bool required,
                     bool capped);

3686 3687 3688
bool virDomainDefNeedsPlacementAdvice(virDomainDefPtr def)
    ATTRIBUTE_NONNULL(1);

3689 3690
int virDomainDiskDefCheckDuplicateInfo(const virDomainDiskDef *a,
                                       const virDomainDiskDef *b)
3691
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
3692

3693 3694 3695 3696
virStorageSourcePtr
virDomainStorageSourceParseBase(const char *type,
                                const char *format,
                                const char *index)
3697
    G_GNUC_WARN_UNUSED_RESULT;
3698

3699 3700 3701
int virDomainStorageSourceParse(xmlNodePtr node,
                                xmlXPathContextPtr ctxt,
                                virStorageSourcePtr src,
3702 3703
                                unsigned int flags,
                                virDomainXMLOptionPtr xmlopt)
3704 3705
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);

3706 3707 3708 3709 3710
int
virDomainDiskBackingStoreParse(xmlXPathContextPtr ctxt,
                               virStorageSourcePtr src,
                               unsigned int flags,
                               virDomainXMLOptionPtr xmlopt)
3711
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
3712

3713 3714 3715 3716 3717 3718
int virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def,
                                     int maplen,
                                     int ncpumaps,
                                     unsigned char *cpumaps,
                                     int hostcpus,
                                     virBitmapPtr autoCpuset)
3719
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4) G_GNUC_WARN_UNUSED_RESULT;
3720

3721 3722
bool virDomainDefHasMemballoon(const virDomainDef *def) ATTRIBUTE_NONNULL(1);

3723
char *virDomainDefGetShortName(const virDomainDef *def) ATTRIBUTE_NONNULL(1);
M
Martin Kletzander 已提交
3724

3725 3726 3727 3728 3729
int
virDomainGetBlkioParametersAssignFromDef(virDomainDefPtr def,
                                         virTypedParameterPtr params,
                                         int *nparams,
                                         int maxparams);
3730

3731 3732 3733
int virDomainDiskSetBlockIOTune(virDomainDiskDefPtr disk,
                                virDomainBlockIoTuneInfo *info);

3734 3735
bool
virDomainNetTypeSharesHostView(const virDomainNetDef *net);
3736

3737 3738 3739 3740
bool
virDomainDefLifecycleActionAllowed(virDomainLifecycle type,
                                   virDomainLifecycleAction action);

3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752
virNetworkPortDefPtr
virDomainNetDefToNetworkPort(virDomainDefPtr dom,
                             virDomainNetDefPtr iface);

int
virDomainNetDefActualFromNetworkPort(virDomainNetDefPtr iface,
                                     virNetworkPortDefPtr port);

virNetworkPortDefPtr
virDomainNetDefActualToNetworkPort(virDomainDefPtr dom,
                                   virDomainNetDefPtr iface);

3753
int
3754 3755
virDomainNetAllocateActualDevice(virConnectPtr conn,
                                 virDomainDefPtr dom,
3756 3757 3758 3759
                                 virDomainNetDefPtr iface)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

void
3760 3761
virDomainNetNotifyActualDevice(virConnectPtr conn,
                               virDomainDefPtr dom,
3762 3763 3764 3765
                               virDomainNetDefPtr iface)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

int
3766 3767
virDomainNetReleaseActualDevice(virConnectPtr conn,
                                virDomainDefPtr dom,
3768 3769 3770
                                virDomainNetDefPtr iface)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

3771 3772 3773 3774
int
virDomainNetBandwidthUpdate(virDomainNetDefPtr iface,
                            virNetDevBandwidthPtr newBandwidth)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
3775

3776 3777 3778 3779
int
virDomainNetResolveActualType(virDomainNetDefPtr iface)
    ATTRIBUTE_NONNULL(1);

3780

3781
int virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def);
3782

3783 3784 3785
int
virDomainDiskGetDetectZeroesMode(virDomainDiskDiscard discard,
                                 virDomainDiskDetectZeroes detect_zeroes);
3786

3787 3788 3789
bool
virDomainDefHasManagedPR(const virDomainDef *def);

3790 3791 3792
bool
virDomainDefHasNVMeDisk(const virDomainDef *def);

3793 3794 3795
bool
virDomainDefHasVFIOHostdev(const virDomainDef *def);

3796 3797 3798
bool
virDomainDefHasMdevHostdev(const virDomainDef *def);

3799 3800 3801 3802 3803 3804
bool
virDomainDefHasOldStyleUEFI(const virDomainDef *def);

bool
virDomainDefHasOldStyleROUEFI(const virDomainDef *def);

3805 3806 3807
bool
virDomainGraphicsDefHasOpenGL(const virDomainDef *def);

3808 3809 3810 3811 3812 3813 3814 3815
bool
virDomainGraphicsSupportsRenderNode(const virDomainGraphicsDef *graphics);

const char *
virDomainGraphicsGetRenderNode(const virDomainGraphicsDef *graphics);

bool
virDomainGraphicsNeedsAutoRenderNode(const virDomainGraphicsDef *graphics);
3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827

bool
virDomainBlockIoTuneInfoHasBasic(const virDomainBlockIoTuneInfo *iotune);

bool
virDomainBlockIoTuneInfoHasMax(const virDomainBlockIoTuneInfo *iotune);

bool
virDomainBlockIoTuneInfoHasMaxLength(const virDomainBlockIoTuneInfo *iotune);

bool
virDomainBlockIoTuneInfoHasAny(const virDomainBlockIoTuneInfo *iotune);
3828 3829 3830 3831

void
virDomainBlockIoTuneInfoCopy(const virDomainBlockIoTuneInfo *src,
                             virDomainBlockIoTuneInfoPtr dst);
3832 3833 3834 3835

bool
virDomainBlockIoTuneInfoEqual(const virDomainBlockIoTuneInfo *a,
                              const virDomainBlockIoTuneInfo *b);
J
Ján Tomko 已提交
3836 3837 3838 3839 3840 3841 3842 3843 3844 3845

bool
virHostdevIsSCSIDevice(const virDomainHostdevDef *hostdev)
    ATTRIBUTE_NONNULL(1);
bool
virHostdevIsMdevDevice(const virDomainHostdevDef *hostdev)
    ATTRIBUTE_NONNULL(1);
bool
virHostdevIsVFIODevice(const virDomainHostdevDef *hostdev)
    ATTRIBUTE_NONNULL(1);