qemu_domain.h 44.4 KB
Newer Older
1 2 3
/*
 * qemu_domain.h: QEMU domain private state
 *
4
 * Copyright (C) 2006-2019 Red Hat, Inc.
5 6 7 8 9 10 11 12 13 14 15 16 17
 * Copyright (C) 2006 Daniel P. Berrange
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with this library.  If not, see
O
Osier Yang 已提交
19
 * <http://www.gnu.org/licenses/>.
20 21
 */

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

#include "virthread.h"
#include "vircgroup.h"
#include "virperf.h"
#include "domain_addr.h"
#include "domain_conf.h"
#include "snapshot_conf.h"
#include "qemu_monitor.h"
#include "qemu_agent.h"
#include "qemu_blockjob.h"
#include "qemu_conf.h"
#include "qemu_capabilities.h"
#include "qemu_migration_params.h"
#include "virmdev.h"
#include "virchrdev.h"
#include "virobject.h"
#include "logging/log_manager.h"
#include "virdomainmomentobjlist.h"
#include "virenum.h"

#define QEMU_DOMAIN_FORMAT_LIVE_FLAGS \
44
    (VIR_DOMAIN_XML_SECURE)
45

46
#if ULONG_MAX == 4294967295
P
Philipp Hahn 已提交
47
/* QEMU has a 64-bit limit, but we are limited by our historical choice of
48
 * representing bandwidth in a long instead of a 64-bit int.  */
49 50 51 52
# define QEMU_DOMAIN_MIG_BANDWIDTH_MAX ULONG_MAX
#else
# define QEMU_DOMAIN_MIG_BANDWIDTH_MAX (INT64_MAX / (1024 * 1024))
#endif
53

54 55
#define JOB_MASK(job)                  (job == 0 ? 0 : 1 << (job - 1))
#define QEMU_JOB_DEFAULT_MASK \
56 57
    (JOB_MASK(QEMU_JOB_QUERY) | \
     JOB_MASK(QEMU_JOB_DESTROY) | \
58
     JOB_MASK(QEMU_JOB_ABORT))
59

60
/* Jobs which have to be tracked in domain state XML. */
61
#define QEMU_DOMAIN_TRACK_JOBS \
62
    (JOB_MASK(QEMU_JOB_DESTROY) | \
63 64
     JOB_MASK(QEMU_JOB_ASYNC))

65 66 67
/* Only 1 job is allowed at any time
 * A job includes *all* monitor commands, even those just querying
 * information, not merely actions */
68
typedef enum {
69
    QEMU_JOB_NONE = 0,  /* Always set to 0 for easy if (jobActive) conditions */
70 71 72 73
    QEMU_JOB_QUERY,         /* Doesn't change any state */
    QEMU_JOB_DESTROY,       /* Destroys the domain (cannot be masked out) */
    QEMU_JOB_SUSPEND,       /* Suspends (stops vCPUs) the domain */
    QEMU_JOB_MODIFY,        /* May change state */
74
    QEMU_JOB_ABORT,         /* Abort current async job */
75
    QEMU_JOB_MIGRATION_OP,  /* Operation influencing outgoing migration */
76

77
    /* The following two items must always be the last items before JOB_LAST */
78 79
    QEMU_JOB_ASYNC,         /* Asynchronous job */
    QEMU_JOB_ASYNC_NESTED,  /* Normal job within an async job */
80 81

    QEMU_JOB_LAST
82
} qemuDomainJob;
83
VIR_ENUM_DECL(qemuDomainJob);
84

85 86 87 88 89 90 91
typedef enum {
    QEMU_AGENT_JOB_NONE = 0,    /* No agent job. */
    QEMU_AGENT_JOB_QUERY,       /* Does not change state of domain */
    QEMU_AGENT_JOB_MODIFY,      /* May change state of domain */

    QEMU_AGENT_JOB_LAST
} qemuDomainAgentJob;
92
VIR_ENUM_DECL(qemuDomainAgentJob);
93

94 95 96 97
/* Async job consists of a series of jobs that may change state. Independent
 * jobs that do not change state (and possibly others if explicitly allowed by
 * current async job) are allowed to be run even if async job is active.
 */
98
typedef enum {
99 100 101 102 103
    QEMU_ASYNC_JOB_NONE = 0,
    QEMU_ASYNC_JOB_MIGRATION_OUT,
    QEMU_ASYNC_JOB_MIGRATION_IN,
    QEMU_ASYNC_JOB_SAVE,
    QEMU_ASYNC_JOB_DUMP,
104
    QEMU_ASYNC_JOB_SNAPSHOT,
105
    QEMU_ASYNC_JOB_START,
106 107

    QEMU_ASYNC_JOB_LAST
108
} qemuDomainAsyncJob;
109
VIR_ENUM_DECL(qemuDomainAsyncJob);
110

111 112 113
typedef enum {
    QEMU_DOMAIN_JOB_STATUS_NONE = 0,
    QEMU_DOMAIN_JOB_STATUS_ACTIVE,
114
    QEMU_DOMAIN_JOB_STATUS_MIGRATING,
115
    QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED,
116
    QEMU_DOMAIN_JOB_STATUS_PAUSED,
117
    QEMU_DOMAIN_JOB_STATUS_POSTCOPY,
118 119 120 121 122
    QEMU_DOMAIN_JOB_STATUS_COMPLETED,
    QEMU_DOMAIN_JOB_STATUS_FAILED,
    QEMU_DOMAIN_JOB_STATUS_CANCELED,
} qemuDomainJobStatus;

123 124 125
typedef enum {
    QEMU_DOMAIN_JOB_STATS_TYPE_NONE = 0,
    QEMU_DOMAIN_JOB_STATS_TYPE_MIGRATION,
126
    QEMU_DOMAIN_JOB_STATS_TYPE_SAVEDUMP,
127
    QEMU_DOMAIN_JOB_STATS_TYPE_MEMDUMP,
128 129
} qemuDomainJobStatsType;

130 131 132 133 134 135 136 137

typedef struct _qemuDomainMirrorStats qemuDomainMirrorStats;
typedef qemuDomainMirrorStats *qemuDomainMirrorStatsPtr;
struct _qemuDomainMirrorStats {
    unsigned long long transferred;
    unsigned long long total;
};

J
Jiri Denemark 已提交
138 139 140
typedef struct _qemuDomainJobInfo qemuDomainJobInfo;
typedef qemuDomainJobInfo *qemuDomainJobInfoPtr;
struct _qemuDomainJobInfo {
141
    qemuDomainJobStatus status;
142
    virDomainJobOperation operation;
J
Jiri Denemark 已提交
143
    unsigned long long started; /* When the async job started */
144
    unsigned long long stopped; /* When the domain's CPUs were stopped */
145 146 147 148
    unsigned long long sent; /* When the source sent status info to the
                                destination (only for migrations). */
    unsigned long long received; /* When the destination host received status
                                    info from the source (migrations only). */
J
Jiri Denemark 已提交
149 150
    /* Computed values */
    unsigned long long timeElapsed;
J
Jiri Denemark 已提交
151
    long long timeDelta; /* delta = received - sent, i.e., the difference
152 153 154 155 156
                            between the source and the destination time plus
                            the time between the end of Perform phase on the
                            source and the beginning of Finish phase on the
                            destination. */
    bool timeDeltaSet;
J
Jiri Denemark 已提交
157
    /* Raw values from QEMU */
158 159 160
    qemuDomainJobStatsType statsType;
    union {
        qemuMonitorMigrationStats mig;
161
        qemuMonitorDumpStats dump;
162
    } stats;
163
    qemuDomainMirrorStats mirrorStats;
J
Jiri Denemark 已提交
164 165
};

166 167 168
typedef struct _qemuDomainJobObj qemuDomainJobObj;
typedef qemuDomainJobObj *qemuDomainJobObjPtr;
struct _qemuDomainJobObj {
169
    virCond cond;                       /* Use to coordinate jobs */
170 171

    /* The following members are for QEMU_JOB_* */
172
    qemuDomainJob active;               /* Currently running job */
173
    unsigned long long owner;           /* Thread id which set current job */
174
    const char *ownerAPI;               /* The API which owns the job */
J
Jiri Denemark 已提交
175
    unsigned long long started;         /* When the current job started */
176

177 178 179 180 181 182 183
    /* The following members are for QEMU_AGENT_JOB_* */
    qemuDomainAgentJob agentActive;     /* Currently running agent job */
    unsigned long long agentOwner;      /* Thread id which set current agent job */
    const char *agentOwnerAPI;          /* The API which owns the agent job */
    unsigned long long agentStarted;    /* When the current agent job started */

    /* The following members are for QEMU_ASYNC_JOB_* */
184
    virCond asyncCond;                  /* Use to coordinate with async jobs */
185
    qemuDomainAsyncJob asyncJob;        /* Currently active async job */
186
    unsigned long long asyncOwner;      /* Thread which set current async job */
187
    const char *asyncOwnerAPI;          /* The API which owns the async job */
J
Jiri Denemark 已提交
188
    unsigned long long asyncStarted;    /* When the current async job started */
J
Jiri Denemark 已提交
189
    int phase;                          /* Job phase (mainly for migrations) */
190
    unsigned long long mask;            /* Jobs allowed during async job */
J
Jiri Denemark 已提交
191
    qemuDomainJobInfoPtr current;       /* async job progress data */
192
    qemuDomainJobInfoPtr completed;     /* statistics data of a recently completed job */
193
    bool abortJob;                      /* abort of the job requested */
194 195
    bool spiceMigration;                /* we asked for spice migration and we
                                         * should wait for it to finish */
196
    bool spiceMigrated;                 /* spice migration completed */
197 198
    char *error;                        /* job event completion error */
    bool dumpCompleted;                 /* dump completed */
199 200

    qemuMigrationParamsPtr migParams;
201
    unsigned long apiFlags; /* flags passed to the API which started the async job */
202 203
};

204
typedef void (*qemuDomainCleanupCallback)(virQEMUDriverPtr driver,
205 206
                                          virDomainObjPtr vm);

207
#define QEMU_DOMAIN_MASTER_KEY_LEN 32  /* 32 bytes for 256 bit random key */
208

209
void qemuDomainSaveStatus(virDomainObjPtr obj);
210
void qemuDomainSaveConfig(virDomainObjPtr obj);
211

212 213 214 215 216 217 218 219 220 221 222 223 224

/* helper data types for async device unplug */
typedef enum {
    QEMU_DOMAIN_UNPLUGGING_DEVICE_STATUS_NONE = 0,
    QEMU_DOMAIN_UNPLUGGING_DEVICE_STATUS_OK,
    QEMU_DOMAIN_UNPLUGGING_DEVICE_STATUS_GUEST_REJECTED,
} qemuDomainUnpluggingDeviceStatus;

typedef struct _qemuDomainUnpluggingDevice qemuDomainUnpluggingDevice;
typedef qemuDomainUnpluggingDevice *qemuDomainUnpluggingDevicePtr;
struct _qemuDomainUnpluggingDevice {
    const char *alias;
    qemuDomainUnpluggingDeviceStatus status;
225
    bool eventSeen; /* True if DEVICE_DELETED event arrived. */
226 227
};

228

229 230 231 232 233 234 235
#define QEMU_PROC_MOUNTS "/proc/mounts"
#define QEMU_DEVPREFIX "/dev/"
#define QEMU_DEV_VFIO "/dev/vfio/vfio"
#define QEMU_DEV_SEV "/dev/sev"
#define QEMU_DEVICE_MAPPER_CONTROL_PATH "/dev/mapper/control"


236 237 238 239
typedef enum {
    QEMU_DOMAIN_NS_MOUNT = 0,
    QEMU_DOMAIN_NS_LAST
} qemuDomainNamespace;
240
VIR_ENUM_DECL(qemuDomainNamespace);
241 242 243 244

bool qemuDomainNamespaceEnabled(virDomainObjPtr vm,
                                qemuDomainNamespace ns);

245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
/* Type of domain secret */
typedef enum {
    VIR_DOMAIN_SECRET_INFO_TYPE_PLAIN = 0,
    VIR_DOMAIN_SECRET_INFO_TYPE_AES,  /* utilize GNUTLS_CIPHER_AES_256_CBC */

    VIR_DOMAIN_SECRET_INFO_TYPE_LAST
} qemuDomainSecretInfoType;

typedef struct _qemuDomainSecretPlain qemuDomainSecretPlain;
typedef struct _qemuDomainSecretPlain *qemuDomainSecretPlainPtr;
struct _qemuDomainSecretPlain {
    char *username;
    uint8_t *secret;
    size_t secretlen;
};

261 262
#define QEMU_DOMAIN_AES_IV_LEN 16   /* 16 bytes for 128 bit random */
                                    /*    initialization vector */
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
typedef struct _qemuDomainSecretAES qemuDomainSecretAES;
typedef struct _qemuDomainSecretAES *qemuDomainSecretAESPtr;
struct _qemuDomainSecretAES {
    char *username;
    char *alias;      /* generated alias for secret */
    char *iv;         /* base64 encoded initialization vector */
    char *ciphertext; /* encoded/encrypted secret */
};

typedef struct _qemuDomainSecretInfo qemuDomainSecretInfo;
typedef qemuDomainSecretInfo *qemuDomainSecretInfoPtr;
struct _qemuDomainSecretInfo {
    qemuDomainSecretInfoType type;
    union {
        qemuDomainSecretPlain plain;
        qemuDomainSecretAES aes;
    } s;
};

282 283 284
typedef struct _qemuDomainObjPrivate qemuDomainObjPrivate;
typedef qemuDomainObjPrivate *qemuDomainObjPrivatePtr;
struct _qemuDomainObjPrivate {
285 286
    virQEMUDriverPtr driver;

287
    qemuDomainJobObj job;
288

289 290
    virBitmapPtr namespaces;

291
    qemuMonitorPtr mon;
292
    virDomainChrSourceDefPtr monConfig;
293 294
    bool monError;
    unsigned long long monStart;
D
Daniel P. Berrange 已提交
295 296 297 298

    qemuAgentPtr agent;
    bool agentError;

299
    bool beingDestroyed;
300
    char *pidfile;
301

302
    virDomainPCIAddressSetPtr pciaddrs;
J
Ján Tomko 已提交
303
    virDomainUSBAddressSetPtr usbaddrs;
304

305
    virQEMUCapsPtr qemuCaps;
306
    char *lockState;
307 308

    bool fakeReboot;
309
    virTristateBool allowReboot;
310 311

    int jobs_queued;
312 313

    unsigned long migMaxBandwidth;
J
Jiri Denemark 已提交
314
    char *origname;
315
    int nbdPort; /* Port used for migration with NBD */
316
    unsigned short migrationPort;
317
    int preMigrationState;
318

319
    virChrdevsPtr devs;
320 321 322 323

    qemuDomainCleanupCallback *cleanupCallbacks;
    size_t ncleanupCallbacks;
    size_t ncleanupCallbacks_max;
324 325

    virCgroupPtr cgroup;
326

327 328
    virPerfPtr perf;

329 330
    qemuDomainUnpluggingDevice unplug;

331
    char **qemuDevices; /* NULL-terminated list of devices aliases known to QEMU */
332 333

    bool hookRun;  /* true if there was a hook run over this domain */
334 335

    /* Bitmaps below hold data from the auto NUMA feature */
336
    virBitmapPtr autoNodeset;
337
    virBitmapPtr autoCpuset;
338 339 340

    bool signalIOError; /* true if the domain condition should be signalled on
                           I/O error */
341 342
    bool signalStop; /* true if the domain condition should be signalled on
                        QMP STOP event */
343
    char *machineName;
344 345
    char *libDir;            /* base path for per-domain files */
    char *channelTargetDir;  /* base path for per-domain channel targets */
J
John Ferlan 已提交
346 347 348 349 350

    /* random masterKey and length for encryption (not to be saved in our */
    /* private XML) - need to restore at process reconnect */
    uint8_t *masterKey;
    size_t masterKeyLen;
351 352 353

    /* note whether memory device alias does not correspond to slot number */
    bool memAliasOrderMismatch;
354

355 356 357
    /* for migrations using TLS with a secret (not to be saved in our */
    /* private XML). */
    qemuDomainSecretInfoPtr migSecinfo;
358

359 360 361
    /* CPU def used to start the domain when it differs from the one actually
     * provided by QEMU. */
    virCPUDefPtr origCPU;
362 363 364

    /* If true virtlogd is used as stdio handler for character devices. */
    bool chardevStdioLogd;
365 366 367

    /* Tracks blockjob state for vm. Valid only while reconnecting to qemu. */
    virTristateBool reconnectBlockjobs;
368 369 370 371

    /* Migration capabilities. Rechecked on reconnect, not to be saved in
     * private XML. */
    virBitmapPtr migrationCaps;
372 373 374

    /* true if qemu-pr-helper process is running for the domain */
    bool prDaemonRunning;
375 376 377

    /* counter for generating node names for qemu disks */
    unsigned long long nodenameindex;
378 379 380 381

    /* qemuProcessStartCPUs stores the reason for starting vCPUs here for the
     * RESUME event handler to use it */
    virDomainRunningReason runningReason;
382

383 384 385 386
    /* qemuProcessStopCPUs stores the reason for pausing vCPUs here for the
     * STOP event handler to use it */
    virDomainPausedReason pausedReason;

387 388
    /* true if libvirt remembers the original owner for files */
    bool rememberOwner;
389 390 391

    /* true if global -mem-prealloc appears on cmd line */
    bool memPrealloc;
392 393 394

    /* running block jobs */
    virHashTablePtr blockjobs;
M
Marc-André Lureau 已提交
395 396

    virHashTablePtr dbusVMStates;
397 398
};

399
#define QEMU_DOMAIN_PRIVATE(vm) \
400
    ((qemuDomainObjPrivatePtr) (vm)->privateData)
401

402
#define QEMU_DOMAIN_DISK_PRIVATE(disk) \
403 404 405 406 407 408 409 410 411 412
    ((qemuDomainDiskPrivatePtr) (disk)->privateData)

typedef struct _qemuDomainDiskPrivate qemuDomainDiskPrivate;
typedef qemuDomainDiskPrivate *qemuDomainDiskPrivatePtr;
struct _qemuDomainDiskPrivate {
    virObject parent;

    /* ideally we want a smarter way to interlock block jobs on single qemu disk
     * in the future, but for now we just disallow any concurrent job on a
     * single disk */
413
    qemuBlockJobDataPtr blockjob;
414 415

    bool migrating; /* the disk is being migrated */
416
    virStorageSourcePtr migrSource; /* disk source object used for NBD migration */
417

418 419 420
    /* information about the device */
    bool tray; /* device has tray */
    bool removable; /* device media can be removed/changed */
421 422

    char *qomName; /* QOM path of the disk (also refers to the block backend) */
423
    char *nodeCopyOnRead; /* nodename of the disk-wide copy-on-read blockdev layer */
424 425
};

426
#define QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src) \
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
    ((qemuDomainStorageSourcePrivatePtr) (src)->privateData)

typedef struct _qemuDomainStorageSourcePrivate qemuDomainStorageSourcePrivate;
typedef qemuDomainStorageSourcePrivate *qemuDomainStorageSourcePrivatePtr;
struct _qemuDomainStorageSourcePrivate {
    virObject parent;

    /* data required for authentication to the storage source */
    qemuDomainSecretInfoPtr secinfo;

    /* data required for decryption of encrypted storage source */
    qemuDomainSecretInfoPtr encinfo;
};

virObjectPtr qemuDomainStorageSourcePrivateNew(void);

443 444 445 446 447
typedef struct _qemuDomainVcpuPrivate qemuDomainVcpuPrivate;
typedef qemuDomainVcpuPrivate *qemuDomainVcpuPrivatePtr;
struct _qemuDomainVcpuPrivate {
    virObject parent;

448
    pid_t tid; /* vcpu thread id */
449
    int enable_id; /* order in which the vcpus were enabled in qemu */
450
    int qemu_id; /* ID reported by qemu as 'CPU' in query-cpus */
451
    char *alias;
452
    virTristateBool halted;
453

454 455 456
    /* copy of the data that qemu returned */
    virJSONValuePtr props;

457 458 459 460 461
    /* information for hotpluggable cpus */
    char *type;
    int socket_id;
    int core_id;
    int thread_id;
462
    int node_id;
463
    int vcpus;
464 465
};

466
#define QEMU_DOMAIN_VCPU_PRIVATE(vcpu) \
467 468 469
    ((qemuDomainVcpuPrivatePtr) (vcpu)->privateData)


470 471
struct qemuDomainDiskInfo {
    bool removable;
472
    bool tray;
473
    bool tray_open;
474
    bool empty;
475
    int io_status;
476
    char *nodename;
477 478
};

479
#define QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev) \
480
    ((qemuDomainChrSourcePrivatePtr) (dev)->privateData)
481

482 483 484
typedef struct _qemuDomainChrSourcePrivate qemuDomainChrSourcePrivate;
typedef qemuDomainChrSourcePrivate *qemuDomainChrSourcePrivatePtr;
struct _qemuDomainChrSourcePrivate {
485 486 487 488 489 490 491 492
    virObject parent;

    /* for char devices using secret
     * NB: *not* to be written to qemu domain object XML */
    qemuDomainSecretInfoPtr secinfo;
};


J
Ján Tomko 已提交
493 494 495 496 497
typedef struct _qemuDomainVsockPrivate qemuDomainVsockPrivate;
typedef qemuDomainVsockPrivate *qemuDomainVsockPrivatePtr;
struct _qemuDomainVsockPrivate {
    virObject parent;

498
    int vhostfd;
J
Ján Tomko 已提交
499 500 501
};


502
#define QEMU_DOMAIN_GRAPHICS_PRIVATE(dev) \
503 504 505 506 507 508 509 510
    ((qemuDomainGraphicsPrivatePtr) (dev)->privateData)

typedef struct _qemuDomainGraphicsPrivate qemuDomainGraphicsPrivate;
typedef qemuDomainGraphicsPrivate *qemuDomainGraphicsPrivatePtr;
struct _qemuDomainGraphicsPrivate {
    virObject parent;

    char *tlsAlias;
511
    qemuDomainSecretInfoPtr secinfo;
512 513 514
};


515 516 517 518 519 520 521 522 523 524 525 526
#define QEMU_DOMAIN_NETWORK_PRIVATE(dev) \
    ((qemuDomainNetworkPrivatePtr) (dev)->privateData)

typedef struct _qemuDomainNetworkPrivate qemuDomainNetworkPrivate;
typedef qemuDomainNetworkPrivate *qemuDomainNetworkPrivatePtr;
struct _qemuDomainNetworkPrivate {
    virObject parent;

    bool tmp_to_be_larger_than_parent;
};


C
Chen Fan 已提交
527 528
typedef enum {
    QEMU_PROCESS_EVENT_WATCHDOG = 0,
529
    QEMU_PROCESS_EVENT_GUESTPANIC,
530
    QEMU_PROCESS_EVENT_DEVICE_DELETED,
531
    QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED,
532
    QEMU_PROCESS_EVENT_SERIAL_CHANGED,
533
    QEMU_PROCESS_EVENT_BLOCK_JOB,
534
    QEMU_PROCESS_EVENT_JOB_STATUS_CHANGE,
535
    QEMU_PROCESS_EVENT_MONITOR_EOF,
536
    QEMU_PROCESS_EVENT_PR_DISCONNECT,
537
    QEMU_PROCESS_EVENT_RDMA_GID_STATUS_CHANGED,
C
Chen Fan 已提交
538 539 540 541 542

    QEMU_PROCESS_EVENT_LAST
} qemuProcessEventType;

struct qemuProcessEvent {
543
    virDomainObjPtr vm;
C
Chen Fan 已提交
544
    qemuProcessEventType eventType;
545
    int action;
546
    int status;
547
    void *data;
548 549
};

550 551
void qemuProcessEventFree(struct qemuProcessEvent *event);

552 553 554
typedef struct _qemuDomainLogContext qemuDomainLogContext;
typedef qemuDomainLogContext *qemuDomainLogContextPtr;

555 556 557 558
typedef struct _qemuDomainSaveCookie qemuDomainSaveCookie;
typedef qemuDomainSaveCookie *qemuDomainSaveCookiePtr;
struct _qemuDomainSaveCookie {
    virObject parent;
559 560

    virCPUDefPtr cpu;
561 562
};

563 564 565 566 567 568 569 570 571 572

typedef struct _qemuDomainXmlNsDef qemuDomainXmlNsDef;
typedef qemuDomainXmlNsDef *qemuDomainXmlNsDefPtr;
struct _qemuDomainXmlNsDef {
    size_t num_args;
    char **args;

    unsigned int num_env;
    char **env_name;
    char **env_value;
573 574 575 576 577 578

    size_t ncapsadd;
    char **capsadd;

    size_t ncapsdel;
    char **capsdel;
579 580 581
};


582 583
qemuDomainSaveCookiePtr qemuDomainSaveCookieNew(virDomainObjPtr vm);

584
const char *qemuDomainAsyncJobPhaseToString(qemuDomainAsyncJob job,
J
Jiri Denemark 已提交
585
                                            int phase);
586
int qemuDomainAsyncJobPhaseFromString(qemuDomainAsyncJob job,
J
Jiri Denemark 已提交
587 588
                                      const char *phase);

589
void qemuDomainEventFlush(int timer, void *opaque);
590

591 592
void qemuDomainEventEmitJobCompleted(virQEMUDriverPtr driver,
                                     virDomainObjPtr vm);
593

594
int qemuDomainObjBeginJob(virQEMUDriverPtr driver,
595
                          virDomainObjPtr obj,
596
                          qemuDomainJob job)
597
    ATTRIBUTE_RETURN_CHECK;
598 599 600 601 602 603 604 605 606
int qemuDomainObjBeginAgentJob(virQEMUDriverPtr driver,
                               virDomainObjPtr obj,
                               qemuDomainAgentJob agentJob)
    ATTRIBUTE_RETURN_CHECK;
int qemuDomainObjBeginJobWithAgent(virQEMUDriverPtr driver,
                                   virDomainObjPtr obj,
                                   qemuDomainJob job,
                                   qemuDomainAgentJob agentJob)
    ATTRIBUTE_RETURN_CHECK;
607
int qemuDomainObjBeginAsyncJob(virQEMUDriverPtr driver,
608
                               virDomainObjPtr obj,
609
                               qemuDomainAsyncJob asyncJob,
610 611
                               virDomainJobOperation operation,
                               unsigned long apiFlags)
612
    ATTRIBUTE_RETURN_CHECK;
613 614 615 616
int qemuDomainObjBeginNestedJob(virQEMUDriverPtr driver,
                                virDomainObjPtr obj,
                                qemuDomainAsyncJob asyncJob)
    ATTRIBUTE_RETURN_CHECK;
617 618 619 620
int qemuDomainObjBeginJobNowait(virQEMUDriverPtr driver,
                                virDomainObjPtr obj,
                                qemuDomainJob job)
    ATTRIBUTE_RETURN_CHECK;
621

622 623
void qemuDomainObjEndJob(virQEMUDriverPtr driver,
                         virDomainObjPtr obj);
624 625 626
void qemuDomainObjEndAgentJob(virDomainObjPtr obj);
void qemuDomainObjEndJobWithAgent(virQEMUDriverPtr driver,
                                  virDomainObjPtr obj);
627 628
void qemuDomainObjEndAsyncJob(virQEMUDriverPtr driver,
                              virDomainObjPtr obj);
629
void qemuDomainObjAbortAsyncJob(virDomainObjPtr obj);
630
void qemuDomainObjSetJobPhase(virQEMUDriverPtr driver,
J
Jiri Denemark 已提交
631 632
                              virDomainObjPtr obj,
                              int phase);
633 634
void qemuDomainObjSetAsyncJobMask(virDomainObjPtr obj,
                                  unsigned long long allowedJobs);
635
void qemuDomainObjRestoreJob(virDomainObjPtr obj,
636
                             qemuDomainJobObjPtr job);
637
void qemuDomainObjDiscardAsyncJob(virQEMUDriverPtr driver,
638
                                  virDomainObjPtr obj);
639
void qemuDomainObjReleaseAsyncJob(virDomainObjPtr obj);
640

641 642
qemuMonitorPtr qemuDomainGetMonitor(virDomainObjPtr vm)
    ATTRIBUTE_NONNULL(1);
643
void qemuDomainObjEnterMonitor(virQEMUDriverPtr driver,
644 645
                               virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
646 647
int qemuDomainObjExitMonitor(virQEMUDriverPtr driver,
                             virDomainObjPtr obj)
648 649
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
    ATTRIBUTE_RETURN_CHECK;
650
int qemuDomainObjEnterMonitorAsync(virQEMUDriverPtr driver,
651
                                   virDomainObjPtr obj,
652
                                   qemuDomainAsyncJob asyncJob)
653
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
D
Daniel P. Berrange 已提交
654 655


656
qemuAgentPtr qemuDomainObjEnterAgent(virDomainObjPtr obj)
657
    ATTRIBUTE_NONNULL(1);
658 659
void qemuDomainObjExitAgent(virDomainObjPtr obj, qemuAgentPtr agent)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
D
Daniel P. Berrange 已提交
660 661


662 663
void qemuDomainObjEnterRemote(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
664 665 666
int qemuDomainObjExitRemote(virDomainObjPtr obj,
                            bool checkActive)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
667

668
virDomainDefPtr qemuDomainDefCopy(virQEMUDriverPtr driver,
669
                                  virQEMUCapsPtr qemuCaps,
670 671 672
                                  virDomainDefPtr src,
                                  unsigned int flags);

673
int qemuDomainDefFormatBuf(virQEMUDriverPtr driver,
674
                           virQEMUCapsPtr qemuCaps,
675 676 677 678
                           virDomainDefPtr vm,
                           unsigned int flags,
                           virBuffer *buf);

679
char *qemuDomainDefFormatXML(virQEMUDriverPtr driver,
680
                             virQEMUCapsPtr qemuCaps,
681
                             virDomainDefPtr vm,
682
                             unsigned int flags);
683

684
char *qemuDomainFormatXML(virQEMUDriverPtr driver,
685
                          virDomainObjPtr vm,
686
                          unsigned int flags);
687

688
char *qemuDomainDefFormatLive(virQEMUDriverPtr driver,
689
                              virQEMUCapsPtr qemuCaps,
690
                              virDomainDefPtr def,
691
                              virCPUDefPtr origCPU,
692 693
                              bool inactive,
                              bool compatible);
694

695
void qemuDomainObjTaint(virQEMUDriverPtr driver,
696
                        virDomainObjPtr obj,
697
                        virDomainTaintFlags taint,
698
                        qemuDomainLogContextPtr logCtxt);
699

700
void qemuDomainObjCheckTaint(virQEMUDriverPtr driver,
701
                             virDomainObjPtr obj,
702
                             qemuDomainLogContextPtr logCtxt);
703
void qemuDomainObjCheckDiskTaint(virQEMUDriverPtr driver,
704
                                 virDomainObjPtr obj,
705
                                 virDomainDiskDefPtr disk,
706
                                 qemuDomainLogContextPtr logCtxt);
707 708 709
void qemuDomainObjCheckHostdevTaint(virQEMUDriverPtr driver,
                                    virDomainObjPtr obj,
                                    virDomainHostdevDefPtr disk,
710
                                    qemuDomainLogContextPtr logCtxt);
711
void qemuDomainObjCheckNetTaint(virQEMUDriverPtr driver,
712
                                virDomainObjPtr obj,
713
                                virDomainNetDefPtr net,
714
                                qemuDomainLogContextPtr logCtxt);
715

716 717 718 719 720 721 722 723 724 725 726 727 728 729 730
typedef enum {
    QEMU_DOMAIN_LOG_CONTEXT_MODE_START,
    QEMU_DOMAIN_LOG_CONTEXT_MODE_ATTACH,
    QEMU_DOMAIN_LOG_CONTEXT_MODE_STOP,
} qemuDomainLogContextMode;

qemuDomainLogContextPtr qemuDomainLogContextNew(virQEMUDriverPtr driver,
                                                virDomainObjPtr vm,
                                                qemuDomainLogContextMode mode);
int qemuDomainLogContextWrite(qemuDomainLogContextPtr ctxt,
                              const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(2, 3);
ssize_t qemuDomainLogContextRead(qemuDomainLogContextPtr ctxt,
                                 char **msg);
int qemuDomainLogContextGetWriteFD(qemuDomainLogContextPtr ctxt);
void qemuDomainLogContextMarkPosition(qemuDomainLogContextPtr ctxt);
731

732 733
virLogManagerPtr qemuDomainLogContextGetManager(qemuDomainLogContextPtr ctxt);

734 735 736 737 738
int qemuDomainLogAppendMessage(virQEMUDriverPtr driver,
                               virDomainObjPtr vm,
                               const char *fmt,
                               ...) ATTRIBUTE_FMT_PRINTF(3, 4);

739
const char *qemuFindQemuImgBinary(virQEMUDriverPtr driver);
740 741

int qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm,
742
                                    virDomainMomentObjPtr snapshot,
743
                                    virCapsPtr caps,
744
                                    virDomainXMLOptionPtr xmlopt,
745
                                    const char *snapshotDir);
746

747
int qemuDomainSnapshotForEachQcow2(virQEMUDriverPtr driver,
748
                                   virDomainObjPtr vm,
749
                                   virDomainMomentObjPtr snap,
750 751 752
                                   const char *op,
                                   bool try_all);

753
int qemuDomainSnapshotDiscard(virQEMUDriverPtr driver,
754
                              virDomainObjPtr vm,
755
                              virDomainMomentObjPtr snap,
756 757 758
                              bool update_current,
                              bool metadata_only);

759 760 761
typedef struct _virQEMUMomentRemove virQEMUMomentRemove;
typedef virQEMUMomentRemove *virQEMUMomentRemovePtr;
struct _virQEMUMomentRemove {
762
    virQEMUDriverPtr driver;
763 764 765
    virDomainObjPtr vm;
    int err;
    bool metadata_only;
766 767 768 769
    virDomainMomentObjPtr current;
    bool found;
    int (*momentDiscard)(virQEMUDriverPtr, virDomainObjPtr,
                         virDomainMomentObjPtr, bool, bool);
770 771
};

772 773 774
int qemuDomainMomentDiscardAll(void *payload,
                               const void *name,
                               void *data);
775

776
int qemuDomainSnapshotDiscardAllMetadata(virQEMUDriverPtr driver,
777 778
                                         virDomainObjPtr vm);

779 780 781 782 783 784 785 786 787 788 789 790 791 792 793
int qemuDomainCheckpointWriteMetadata(virDomainObjPtr vm,
                                      virDomainMomentObjPtr checkpoint,
                                      virCapsPtr caps,
                                      virDomainXMLOptionPtr xmlopt,
                                      const char *checkpointDir);

int qemuDomainCheckpointDiscard(virQEMUDriverPtr driver,
                                virDomainObjPtr vm,
                                virDomainMomentObjPtr chk,
                                bool update_current,
                                bool metadata_only);

int qemuDomainCheckpointDiscardAllMetadata(virQEMUDriverPtr driver,
                                           virDomainObjPtr vm);

794
void qemuDomainRemoveInactive(virQEMUDriverPtr driver,
795 796
                              virDomainObjPtr vm);

797 798 799
void qemuDomainRemoveInactiveJob(virQEMUDriverPtr driver,
                                 virDomainObjPtr vm);

800 801 802
void qemuDomainRemoveInactiveJobLocked(virQEMUDriverPtr driver,
                                       virDomainObjPtr vm);

803
void qemuDomainSetFakeReboot(virQEMUDriverPtr driver,
804 805 806
                             virDomainObjPtr vm,
                             bool value);

807
bool qemuDomainJobAllowed(qemuDomainObjPrivatePtr priv,
808
                          qemuDomainJob job);
M
Michal Privoznik 已提交
809

810 811 812 813 814
int qemuDomainCheckDiskStartupPolicy(virQEMUDriverPtr driver,
                                     virDomainObjPtr vm,
                                     size_t diskIndex,
                                     bool cold_boot);

815
int qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
M
Michal Privoznik 已提交
816
                                virDomainObjPtr vm,
817
                                unsigned int flags);
818

819 820 821 822
int qemuDomainStorageSourceValidateDepth(virStorageSourcePtr src,
                                         int add,
                                         const char *diskdst);

823
int qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
824
                                 virDomainObjPtr vm,
825
                                 virDomainDiskDefPtr disk,
826
                                 virStorageSourcePtr disksrc,
827
                                 bool report_broken);
828

829 830 831
bool qemuDomainDiskChangeSupported(virDomainDiskDefPtr disk,
                                   virDomainDiskDefPtr orig_disk);

832 833 834
const char *qemuDomainDiskNodeFormatLookup(virDomainObjPtr vm,
                                           const char *disk);

835 836
int qemuDomainStorageFileInit(virQEMUDriverPtr driver,
                              virDomainObjPtr vm,
837 838
                              virStorageSourcePtr src,
                              virStorageSourcePtr parent);
839
char *qemuDomainStorageAlias(const char *device, int depth);
840

841 842 843 844 845 846
int qemuDomainDiskGetBackendAlias(virDomainDiskDefPtr disk,
                                  virQEMUCapsPtr qemuCaps,
                                  char **backendAlias)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
    ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;

847 848 849 850 851 852
int qemuDomainStorageSourceChainAccessAllow(virQEMUDriverPtr driver,
                                            virDomainObjPtr vm,
                                            virStorageSourcePtr src);
int qemuDomainStorageSourceChainAccessRevoke(virQEMUDriverPtr driver,
                                             virDomainObjPtr vm,
                                             virStorageSourcePtr src);
853

854 855 856 857 858 859 860 861
void qemuDomainStorageSourceAccessRevoke(virQEMUDriverPtr driver,
                                         virDomainObjPtr vm,
                                         virStorageSourcePtr elem);
int qemuDomainStorageSourceAccessAllow(virQEMUDriverPtr driver,
                                       virDomainObjPtr vm,
                                       virStorageSourcePtr elem,
                                       bool readonly,
                                       bool newSource);
862

863 864 865 866 867
int qemuDomainPrepareStorageSourceBlockdev(virDomainDiskDefPtr disk,
                                           virStorageSourcePtr src,
                                           qemuDomainObjPrivatePtr priv,
                                           virQEMUDriverConfigPtr cfg);

868 869 870 871
int qemuDomainCleanupAdd(virDomainObjPtr vm,
                         qemuDomainCleanupCallback cb);
void qemuDomainCleanupRemove(virDomainObjPtr vm,
                             qemuDomainCleanupCallback cb);
872
void qemuDomainCleanupRun(virQEMUDriverPtr driver,
873 874
                          virDomainObjPtr vm);

875 876
void qemuDomainObjPrivateDataClear(qemuDomainObjPrivatePtr priv);

877
extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks;
878
extern virXMLNamespace virQEMUDriverDomainXMLNamespace;
879
extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig;
880
extern virDomainABIStability virQEMUDriverDomainABIStability;
881
extern virSaveCookieCallbacks virQEMUDriverDomainSaveCookie;
882

883
int qemuDomainUpdateDeviceList(virQEMUDriverPtr driver,
884
                               virDomainObjPtr vm, int asyncJob);
885

886 887 888 889
int qemuDomainUpdateMemoryDeviceInfo(virQEMUDriverPtr driver,
                                     virDomainObjPtr vm,
                                     int asyncJob);

890
bool qemuDomainDefCheckABIStability(virQEMUDriverPtr driver,
891
                                    virQEMUCapsPtr qemuCaps,
892 893
                                    virDomainDefPtr src,
                                    virDomainDefPtr dst);
894

895 896 897 898
bool qemuDomainCheckABIStability(virQEMUDriverPtr driver,
                                 virDomainObjPtr vm,
                                 virDomainDefPtr dst);

899
bool qemuDomainAgentAvailable(virDomainObjPtr vm,
900 901
                              bool reportError);

J
Jiri Denemark 已提交
902 903
int qemuDomainJobInfoUpdateTime(qemuDomainJobInfoPtr jobInfo)
    ATTRIBUTE_NONNULL(1);
904 905
int qemuDomainJobInfoUpdateDowntime(qemuDomainJobInfoPtr jobInfo)
    ATTRIBUTE_NONNULL(1);
J
Jiri Denemark 已提交
906 907 908 909 910 911 912 913 914 915
int qemuDomainJobInfoToInfo(qemuDomainJobInfoPtr jobInfo,
                            virDomainJobInfoPtr info)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
int qemuDomainJobInfoToParams(qemuDomainJobInfoPtr jobInfo,
                              int *type,
                              virTypedParameterPtr *params,
                              int *nparams)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
    ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);

916
bool qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr disk);
917 918
bool qemuDomainHasBlockjob(virDomainObjPtr vm, bool copy_only)
    ATTRIBUTE_NONNULL(1);
919

920
int qemuDomainAlignMemorySizes(virDomainDefPtr def);
921 922
void qemuDomainMemoryDeviceAlignSize(virDomainDefPtr def,
                                     virDomainMemoryDefPtr mem);
923

924
virDomainChrDefPtr qemuFindAgentConfig(virDomainDefPtr def);
925

926 927
/* You should normally avoid these functions and use the variant that
 * doesn't have "Machine" in the name instead. */
928 929
bool qemuDomainMachineIsARMVirt(const char *machine,
                                const virArch arch);
930 931
bool qemuDomainMachineIsPSeries(const char *machine,
                                const virArch arch);
932 933
bool qemuDomainMachineHasBuiltinIDE(const char *machine,
                                    const virArch arch);
A
Andrea Bolognani 已提交
934 935 936 937 938 939 940 941 942 943 944

bool qemuDomainIsQ35(const virDomainDef *def);
bool qemuDomainIsI440FX(const virDomainDef *def);
bool qemuDomainIsS390CCW(const virDomainDef *def);
bool qemuDomainIsARMVirt(const virDomainDef *def);
bool qemuDomainIsRISCVVirt(const virDomainDef *def);
bool qemuDomainIsPSeries(const virDomainDef *def);
bool qemuDomainHasPCIRoot(const virDomainDef *def);
bool qemuDomainHasPCIeRoot(const virDomainDef *def);
bool qemuDomainHasBuiltinIDE(const virDomainDef *def);
bool qemuDomainNeedsFDC(const virDomainDef *def);
945 946
bool qemuDomainSupportsPCI(virDomainDefPtr def,
                           virQEMUCapsPtr qemuCaps);
947

948
void qemuDomainUpdateCurrentMemorySize(virDomainObjPtr vm);
949

950
unsigned long long qemuDomainGetMemLockLimitBytes(virDomainDefPtr def);
951
int qemuDomainAdjustMaxMemLock(virDomainObjPtr vm);
952

953 954 955 956
int qemuDomainDefValidateMemoryHotplug(const virDomainDef *def,
                                       virQEMUCapsPtr qemuCaps,
                                       const virDomainMemoryDef *mem);

957
bool qemuDomainSupportsNewVcpuHotplug(virDomainObjPtr vm);
958
bool qemuDomainHasVcpuPids(virDomainObjPtr vm);
959
pid_t qemuDomainGetVcpuPid(virDomainObjPtr vm, unsigned int vcpuid);
960
int qemuDomainValidateVcpuInfo(virDomainObjPtr vm);
961 962
int qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver,
                              virDomainObjPtr vm,
963 964
                              int asyncJob,
                              bool state);
965 966 967 968
bool qemuDomainGetVcpuHalted(virDomainObjPtr vm, unsigned int vcpu);
int qemuDomainRefreshVcpuHalted(virQEMUDriverPtr driver,
                                virDomainObjPtr vm,
                                int asyncJob);
969

970 971 972
bool qemuDomainSupportsNicdev(virDomainDefPtr def,
                              virDomainNetDefPtr net);

973 974
bool qemuDomainNetSupportsMTU(virDomainNetType type);

975 976 977
int qemuDomainSetPrivatePaths(virQEMUDriverPtr driver,
                              virDomainObjPtr vm);

P
Peter Krempa 已提交
978 979
virDomainDiskDefPtr qemuDomainDiskByName(virDomainDefPtr def, const char *name);

J
John Ferlan 已提交
980 981 982 983
char *qemuDomainGetMasterKeyFilePath(const char *libDir);

int qemuDomainMasterKeyReadFile(qemuDomainObjPrivatePtr priv);

984 985 986 987
int qemuDomainWriteMasterKeyFile(virQEMUDriverPtr driver,
                                 virDomainObjPtr vm);

int qemuDomainMasterKeyCreate(virDomainObjPtr vm);
J
John Ferlan 已提交
988 989 990

void qemuDomainMasterKeyRemove(qemuDomainObjPrivatePtr priv);

991 992
bool qemuDomainSupportsEncryptedSecret(qemuDomainObjPrivatePtr priv);

993 994 995
void qemuDomainSecretInfoFree(qemuDomainSecretInfoPtr *secinfo)
    ATTRIBUTE_NONNULL(1);

996 997
void qemuDomainSecretInfoDestroy(qemuDomainSecretInfoPtr secinfo);

998 999 1000
void qemuDomainSecretDiskDestroy(virDomainDiskDefPtr disk)
    ATTRIBUTE_NONNULL(1);

1001
bool qemuDomainStorageSourceHasAuth(virStorageSourcePtr src)
1002 1003
    ATTRIBUTE_NONNULL(1);

1004 1005 1006
bool qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src)
    ATTRIBUTE_NONNULL(1);

1007
qemuDomainSecretInfoPtr
1008
qemuDomainSecretInfoTLSNew(qemuDomainObjPrivatePtr priv,
1009 1010 1011
                           const char *srcAlias,
                           const char *secretUUID);

1012 1013 1014
void qemuDomainSecretHostdevDestroy(virDomainHostdevDefPtr disk)
    ATTRIBUTE_NONNULL(1);

1015
int qemuDomainSecretHostdevPrepare(qemuDomainObjPrivatePtr priv,
1016
                                   virDomainHostdevDefPtr hostdev)
1017
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
1018

1019 1020 1021
void qemuDomainSecretChardevDestroy(virDomainChrSourceDefPtr dev)
    ATTRIBUTE_NONNULL(1);

1022
int qemuDomainSecretChardevPrepare(virQEMUDriverConfigPtr cfg,
1023 1024 1025 1026
                                   qemuDomainObjPrivatePtr priv,
                                   const char *chrAlias,
                                   virDomainChrSourceDefPtr dev)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
1027
    ATTRIBUTE_NONNULL(4);
1028

1029 1030 1031
void qemuDomainSecretDestroy(virDomainObjPtr vm)
    ATTRIBUTE_NONNULL(1);

1032
int qemuDomainSecretPrepare(virQEMUDriverPtr driver,
1033
                            virDomainObjPtr vm)
1034
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
1035

1036 1037 1038
int qemuDomainDefValidateDiskLunSource(const virStorageSource *src)
    ATTRIBUTE_NONNULL(1);

1039 1040 1041
int qemuDomainDeviceDefValidateDisk(const virDomainDiskDef *disk,
                                    virQEMUCapsPtr qemuCaps);

1042 1043 1044 1045
int qemuDomainPrepareChannel(virDomainChrDefPtr chr,
                             const char *domainChannelTargetDir)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

1046 1047 1048 1049 1050
void qemuDomainPrepareChardevSourceTLS(virDomainChrSourceDefPtr source,
                                       virQEMUDriverConfigPtr cfg)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

void qemuDomainPrepareChardevSource(virDomainDefPtr def,
1051
                                    virQEMUDriverConfigPtr cfg)
1052 1053
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

1054 1055 1056
int qemuDomainPrepareShmemChardev(virDomainShmemDefPtr shmem)
    ATTRIBUTE_NONNULL(1);

1057 1058 1059
bool qemuDomainVcpuHotplugIsInOrder(virDomainDefPtr def)
    ATTRIBUTE_NONNULL(1);

1060 1061 1062
void qemuDomainVcpuPersistOrder(virDomainDefPtr def)
    ATTRIBUTE_NONNULL(1);

1063 1064 1065 1066
int qemuDomainCheckMonitor(virQEMUDriverPtr driver,
                           virDomainObjPtr vm,
                           qemuDomainAsyncJob asyncJob);

1067 1068 1069
bool qemuDomainSupportsVideoVga(virDomainVideoDefPtr video,
                                virQEMUCapsPtr qemuCaps);

1070 1071 1072
int qemuDomainGetHostdevPath(virDomainDefPtr def,
                             virDomainHostdevDefPtr dev,
                             bool teardown,
1073 1074 1075
                             size_t *npaths,
                             char ***path,
                             int **perms);
1076

1077 1078
int qemuDomainBuildNamespace(virQEMUDriverConfigPtr cfg,
                             virSecurityManagerPtr mgr,
1079 1080 1081 1082 1083
                             virDomainObjPtr vm);

int qemuDomainCreateNamespace(virQEMUDriverPtr driver,
                              virDomainObjPtr vm);

1084 1085 1086
void qemuDomainDestroyNamespace(virQEMUDriverPtr driver,
                                virDomainObjPtr vm);

1087 1088
bool qemuDomainNamespaceAvailable(qemuDomainNamespace ns);

1089
int qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
1090
                                 virStorageSourcePtr src);
1091

1092
int qemuDomainNamespaceTeardownDisk(virDomainObjPtr vm,
1093
                                    virStorageSourcePtr src);
1094

1095
int qemuDomainNamespaceSetupHostdev(virDomainObjPtr vm,
1096 1097
                                    virDomainHostdevDefPtr hostdev);

1098
int qemuDomainNamespaceTeardownHostdev(virDomainObjPtr vm,
1099
                                       virDomainHostdevDefPtr hostdev);
1100

1101
int qemuDomainNamespaceSetupMemory(virDomainObjPtr vm,
M
Michal Privoznik 已提交
1102 1103
                                   virDomainMemoryDefPtr memory);

1104
int qemuDomainNamespaceTeardownMemory(virDomainObjPtr vm,
M
Michal Privoznik 已提交
1105 1106
                                      virDomainMemoryDefPtr memory);

1107
int qemuDomainNamespaceSetupChardev(virDomainObjPtr vm,
1108 1109
                                    virDomainChrDefPtr chr);

1110
int qemuDomainNamespaceTeardownChardev(virDomainObjPtr vm,
1111
                                       virDomainChrDefPtr chr);
1112

1113
int qemuDomainNamespaceSetupRNG(virDomainObjPtr vm,
1114
                                virDomainRNGDefPtr rng);
1115

1116
int qemuDomainNamespaceTeardownRNG(virDomainObjPtr vm,
1117
                                   virDomainRNGDefPtr rng);
1118

1119 1120 1121 1122 1123 1124
int qemuDomainNamespaceSetupInput(virDomainObjPtr vm,
                                  virDomainInputDefPtr input);

int qemuDomainNamespaceTeardownInput(virDomainObjPtr vm,
                                     virDomainInputDefPtr input);

1125 1126 1127 1128 1129
virDomainDiskDefPtr qemuDomainDiskLookupByNodename(virDomainDefPtr def,
                                                   const char *nodename,
                                                   virStorageSourcePtr *src,
                                                   unsigned int *idx);

1130 1131 1132 1133
char *qemuDomainDiskBackingStoreGetName(virDomainDiskDefPtr disk,
                                        virStorageSourcePtr src,
                                        unsigned int idx);

1134 1135 1136
virStorageSourcePtr qemuDomainGetStorageSourceByDevstr(const char *devstr,
                                                       virDomainDefPtr def);

1137 1138 1139 1140 1141
int
qemuDomainUpdateCPU(virDomainObjPtr vm,
                    virCPUDefPtr cpu,
                    virCPUDefPtr *origCPU);

1142 1143 1144 1145
int
qemuDomainFixupCPUs(virDomainObjPtr vm,
                    virCPUDefPtr *origCPU);

1146 1147 1148 1149
int
qemuDomainUpdateQEMUCaps(virDomainObjPtr vm,
                         virFileCachePtr qemuCapsCache);

1150 1151 1152
char *
qemuDomainGetMachineName(virDomainObjPtr vm);

1153 1154 1155 1156 1157 1158 1159 1160
void
qemuDomainObjPrivateXMLFormatAllowReboot(virBufferPtr buf,
                                         virTristateBool allowReboot);

int
qemuDomainObjPrivateXMLParseAllowReboot(xmlXPathContextPtr ctxt,
                                        virTristateBool *allowReboot);

1161 1162 1163 1164 1165
bool
qemuDomainCheckCCWS390AddressSupport(const virDomainDef *def,
                                     const virDomainDeviceInfo *info,
                                     virQEMUCapsPtr qemuCaps,
                                     const char *devicename);
1166

1167
int
1168 1169 1170 1171
qemuDomainPrepareDiskSourceData(virDomainDiskDefPtr disk,
                                virStorageSourcePtr src,
                                virQEMUDriverConfigPtr cfg,
                                virQEMUCapsPtr qemuCaps)
1172
    ATTRIBUTE_RETURN_CHECK;
1173

1174 1175 1176 1177 1178 1179

int
qemuDomainValidateStorageSource(virStorageSourcePtr src,
                                virQEMUCapsPtr qemuCaps);


1180
int
1181
qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk,
1182 1183 1184
                            qemuDomainObjPrivatePtr priv,
                            virQEMUDriverConfigPtr cfg);

1185 1186 1187 1188 1189 1190
int
qemuDomainDiskCachemodeFlags(int cachemode,
                             bool *writeback,
                             bool *direct,
                             bool *noflush);

1191
char * qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivatePtr priv);
1192

1193 1194
bool qemuDomainDefHasManagedPR(virDomainObjPtr vm);

1195 1196 1197
unsigned int qemuDomainStorageIdNew(qemuDomainObjPrivatePtr priv);
void qemuDomainStorageIdReset(qemuDomainObjPrivatePtr priv);

1198 1199 1200
virDomainEventResumedDetailType
qemuDomainRunningReasonToResumeEvent(virDomainRunningReason reason);

J
John Ferlan 已提交
1201 1202 1203
bool
qemuDomainIsUsingNoShutdown(qemuDomainObjPrivatePtr priv);

1204 1205 1206
bool
qemuDomainDiskIsMissingLocalOptional(virDomainDiskDefPtr disk);

1207 1208 1209 1210
int
qemuDomainNVRAMPathGenerate(virQEMUDriverConfigPtr cfg,
                            virDomainDefPtr def);

1211 1212
virDomainEventSuspendedDetailType
qemuDomainPausedReasonToSuspendedEvent(virDomainPausedReason reason);