qemu_domain.h 21.2 KB
Newer Older
1 2 3
/*
 * qemu_domain.h: QEMU domain private state
 *
4
 * Copyright (C) 2006-2016 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
 *
 * Author: Daniel P. Berrange <berrange@redhat.com>
 */

#ifndef __QEMU_DOMAIN_H__
# define __QEMU_DOMAIN_H__

27
# include "virthread.h"
28
# include "vircgroup.h"
29
# include "domain_addr.h"
30
# include "domain_conf.h"
31
# include "snapshot_conf.h"
32
# include "qemu_monitor.h"
D
Daniel P. Berrange 已提交
33
# include "qemu_agent.h"
34
# include "qemu_conf.h"
35
# include "qemu_capabilities.h"
36
# include "virchrdev.h"
37
# include "virobject.h"
38

39 40 41 42
# define QEMU_DOMAIN_FORMAT_LIVE_FLAGS      \
    (VIR_DOMAIN_XML_SECURE |                \
     VIR_DOMAIN_XML_UPDATE_CPU)

43 44 45
# if ULONG_MAX == 4294967295
/* Qemu has a 64-bit limit, but we are limited by our historical choice of
 * representing bandwidth in a long instead of a 64-bit int.  */
46
#  define QEMU_DOMAIN_MIG_BANDWIDTH_MAX ULONG_MAX
47
# else
48
#  define QEMU_DOMAIN_MIG_BANDWIDTH_MAX (INT64_MAX / (1024 * 1024))
49
# endif
50

51
# define JOB_MASK(job)                  (1 << (job - 1))
52
# define QEMU_JOB_DEFAULT_MASK          \
53 54 55
    (JOB_MASK(QEMU_JOB_QUERY) |         \
     JOB_MASK(QEMU_JOB_DESTROY) |       \
     JOB_MASK(QEMU_JOB_ABORT))
56

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

62 63 64
/* Only 1 job is allowed at any time
 * A job includes *all* monitor commands, even those just querying
 * information, not merely actions */
65
typedef enum {
66
    QEMU_JOB_NONE = 0,  /* Always set to 0 for easy if (jobActive) conditions */
67 68 69 70
    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 */
71
    QEMU_JOB_ABORT,         /* Abort current async job */
72
    QEMU_JOB_MIGRATION_OP,  /* Operation influencing outgoing migration */
73

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

    QEMU_JOB_LAST
79
} qemuDomainJob;
80
VIR_ENUM_DECL(qemuDomainJob)
81 82 83 84 85

/* 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.
 */
86
typedef enum {
87 88 89 90 91
    QEMU_ASYNC_JOB_NONE = 0,
    QEMU_ASYNC_JOB_MIGRATION_OUT,
    QEMU_ASYNC_JOB_MIGRATION_IN,
    QEMU_ASYNC_JOB_SAVE,
    QEMU_ASYNC_JOB_DUMP,
92
    QEMU_ASYNC_JOB_SNAPSHOT,
93
    QEMU_ASYNC_JOB_START,
94 95

    QEMU_ASYNC_JOB_LAST
96
} qemuDomainAsyncJob;
97
VIR_ENUM_DECL(qemuDomainAsyncJob)
98

J
Jiri Denemark 已提交
99 100 101 102 103
typedef struct _qemuDomainJobInfo qemuDomainJobInfo;
typedef qemuDomainJobInfo *qemuDomainJobInfoPtr;
struct _qemuDomainJobInfo {
    virDomainJobType type;
    unsigned long long started; /* When the async job started */
104
    unsigned long long stopped; /* When the domain's CPUs were stopped */
105 106 107 108
    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 已提交
109 110 111
    /* Computed values */
    unsigned long long timeElapsed;
    unsigned long long timeRemaining;
J
Jiri Denemark 已提交
112
    long long timeDelta; /* delta = received - sent, i.e., the difference
113 114 115 116 117
                            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 已提交
118
    /* Raw values from QEMU */
119
    qemuMonitorMigrationStats stats;
J
Jiri Denemark 已提交
120 121
};

122
struct qemuDomainJobObj {
123
    virCond cond;                       /* Use to coordinate jobs */
124
    qemuDomainJob active;               /* Currently running job */
125
    unsigned long long owner;           /* Thread id which set current job */
126
    const char *ownerAPI;               /* The API which owns the job */
J
Jiri Denemark 已提交
127
    unsigned long long started;         /* When the current job started */
128

129
    virCond asyncCond;                  /* Use to coordinate with async jobs */
130
    qemuDomainAsyncJob asyncJob;        /* Currently active async job */
131
    unsigned long long asyncOwner;      /* Thread which set current async job */
132
    const char *asyncOwnerAPI;          /* The API which owns the async job */
J
Jiri Denemark 已提交
133
    unsigned long long asyncStarted;    /* When the current async job started */
J
Jiri Denemark 已提交
134
    int phase;                          /* Job phase (mainly for migrations) */
135
    unsigned long long mask;            /* Jobs allowed during async job */
136
    bool dump_memory_only;              /* use dump-guest-memory to do dump */
J
Jiri Denemark 已提交
137
    qemuDomainJobInfoPtr current;       /* async job progress data */
138
    qemuDomainJobInfoPtr completed;     /* statistics data of a recently completed job */
139
    bool abortJob;                      /* abort of the job requested */
140 141
    bool spiceMigration;                /* we asked for spice migration and we
                                         * should wait for it to finish */
142
    bool spiceMigrated;                 /* spice migration completed */
143 144
};

145
typedef void (*qemuDomainCleanupCallback)(virQEMUDriverPtr driver,
146 147
                                          virDomainObjPtr vm);

148 149 150
typedef struct _qemuDomainObjPrivate qemuDomainObjPrivate;
typedef qemuDomainObjPrivate *qemuDomainObjPrivatePtr;
struct _qemuDomainObjPrivate {
151
    struct qemuDomainJobObj job;
152 153

    qemuMonitorPtr mon;
154
    virDomainChrSourceDefPtr monConfig;
E
Eric Blake 已提交
155
    bool monJSON;
156 157
    bool monError;
    unsigned long long monStart;
D
Daniel P. Berrange 已提交
158 159 160 161 162

    qemuAgentPtr agent;
    bool agentError;
    unsigned long long agentStart;

163
    bool gotShutdown;
164
    bool beingDestroyed;
165
    char *pidfile;
166 167 168 169

    int nvcpupids;
    int *vcpupids;

170
    virDomainPCIAddressSetPtr pciaddrs;
J
Ján Tomko 已提交
171
    virDomainCCWAddressSetPtr ccwaddrs;
172
    virDomainVirtioSerialAddrSetPtr vioserialaddrs;
173
    int persistentAddrs;
174

175
    virQEMUCapsPtr qemuCaps;
176
    char *lockState;
177 178

    bool fakeReboot;
179 180

    int jobs_queued;
181 182

    unsigned long migMaxBandwidth;
J
Jiri Denemark 已提交
183
    char *origname;
184
    int nbdPort; /* Port used for migration with NBD */
185
    unsigned short migrationPort;
186
    int preMigrationState;
187

188
    virChrdevsPtr devs;
189 190 191 192

    qemuDomainCleanupCallback *cleanupCallbacks;
    size_t ncleanupCallbacks;
    size_t ncleanupCallbacks_max;
193 194

    virCgroupPtr cgroup;
195 196 197

    virCond unplugFinished; /* signals that unpluggingDevice was unplugged */
    const char *unpluggingDevice; /* alias of the device that is being unplugged */
198
    char **qemuDevices; /* NULL-terminated list of devices aliases known to QEMU */
199 200

    bool hookRun;  /* true if there was a hook run over this domain */
201 202

    /* Bitmaps below hold data from the auto NUMA feature */
203
    virBitmapPtr autoNodeset;
204
    virBitmapPtr autoCpuset;
205 206 207

    bool signalIOError; /* true if the domain condition should be signalled on
                           I/O error */
208
    char *machineName;
209 210
    char *libDir;            /* base path for per-domain files */
    char *channelTargetDir;  /* base path for per-domain channel targets */
211 212
};

213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
# define QEMU_DOMAIN_DISK_PRIVATE(disk)	\
    ((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 */
    bool blockjob;

    /* for some synchronous block jobs, we need to notify the owner */
    int blockJobType;   /* type of the block job from the event */
    int blockJobStatus; /* status of the finished block job */
    bool blockJobSync; /* the block job needs synchronized termination */
230 231

    bool migrating; /* the disk is being migrated */
232 233
};

C
Chen Fan 已提交
234 235
typedef enum {
    QEMU_PROCESS_EVENT_WATCHDOG = 0,
236
    QEMU_PROCESS_EVENT_GUESTPANIC,
237
    QEMU_PROCESS_EVENT_DEVICE_DELETED,
238
    QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED,
239
    QEMU_PROCESS_EVENT_SERIAL_CHANGED,
240
    QEMU_PROCESS_EVENT_BLOCK_JOB,
241
    QEMU_PROCESS_EVENT_MONITOR_EOF,
C
Chen Fan 已提交
242 243 244 245 246

    QEMU_PROCESS_EVENT_LAST
} qemuProcessEventType;

struct qemuProcessEvent {
247
    virDomainObjPtr vm;
C
Chen Fan 已提交
248
    qemuProcessEventType eventType;
249
    int action;
250
    int status;
251
    void *data;
252 253
};

254 255 256
typedef struct _qemuDomainLogContext qemuDomainLogContext;
typedef qemuDomainLogContext *qemuDomainLogContextPtr;

257
const char *qemuDomainAsyncJobPhaseToString(qemuDomainAsyncJob job,
J
Jiri Denemark 已提交
258
                                            int phase);
259
int qemuDomainAsyncJobPhaseFromString(qemuDomainAsyncJob job,
J
Jiri Denemark 已提交
260 261
                                      const char *phase);

262
void qemuDomainEventFlush(int timer, void *opaque);
263

264
void qemuDomainEventQueue(virQEMUDriverPtr driver,
265
                          virObjectEventPtr event);
266

267
int qemuDomainObjBeginJob(virQEMUDriverPtr driver,
268
                          virDomainObjPtr obj,
269
                          qemuDomainJob job)
270
    ATTRIBUTE_RETURN_CHECK;
271
int qemuDomainObjBeginAsyncJob(virQEMUDriverPtr driver,
272
                               virDomainObjPtr obj,
273
                               qemuDomainAsyncJob asyncJob)
274
    ATTRIBUTE_RETURN_CHECK;
275 276 277 278
int qemuDomainObjBeginNestedJob(virQEMUDriverPtr driver,
                                virDomainObjPtr obj,
                                qemuDomainAsyncJob asyncJob)
    ATTRIBUTE_RETURN_CHECK;
279

280 281 282 283
void qemuDomainObjEndJob(virQEMUDriverPtr driver,
                         virDomainObjPtr obj);
void qemuDomainObjEndAsyncJob(virQEMUDriverPtr driver,
                              virDomainObjPtr obj);
284
void qemuDomainObjAbortAsyncJob(virDomainObjPtr obj);
285
void qemuDomainObjSetJobPhase(virQEMUDriverPtr driver,
J
Jiri Denemark 已提交
286 287
                              virDomainObjPtr obj,
                              int phase);
288 289
void qemuDomainObjSetAsyncJobMask(virDomainObjPtr obj,
                                  unsigned long long allowedJobs);
290 291
void qemuDomainObjRestoreJob(virDomainObjPtr obj,
                             struct qemuDomainJobObj *job);
292
void qemuDomainObjDiscardAsyncJob(virQEMUDriverPtr driver,
293
                                  virDomainObjPtr obj);
294
void qemuDomainObjReleaseAsyncJob(virDomainObjPtr obj);
295

296 297
qemuMonitorPtr qemuDomainGetMonitor(virDomainObjPtr vm)
    ATTRIBUTE_NONNULL(1);
298
void qemuDomainObjEnterMonitor(virQEMUDriverPtr driver,
299 300
                               virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
301 302
int qemuDomainObjExitMonitor(virQEMUDriverPtr driver,
                             virDomainObjPtr obj)
303 304
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
    ATTRIBUTE_RETURN_CHECK;
305
int qemuDomainObjEnterMonitorAsync(virQEMUDriverPtr driver,
306
                                   virDomainObjPtr obj,
307
                                   qemuDomainAsyncJob asyncJob)
308
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
D
Daniel P. Berrange 已提交
309 310


311
qemuAgentPtr qemuDomainGetAgent(virDomainObjPtr vm);
312 313 314 315
void qemuDomainObjEnterAgent(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
void qemuDomainObjExitAgent(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
D
Daniel P. Berrange 已提交
316 317


318 319 320 321
void qemuDomainObjEnterRemote(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
void qemuDomainObjExitRemote(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
322

323 324 325 326
virDomainDefPtr qemuDomainDefCopy(virQEMUDriverPtr driver,
                                  virDomainDefPtr src,
                                  unsigned int flags);

327
int qemuDomainDefFormatBuf(virQEMUDriverPtr driver,
328 329 330 331
                           virDomainDefPtr vm,
                           unsigned int flags,
                           virBuffer *buf);

332
char *qemuDomainDefFormatXML(virQEMUDriverPtr driver,
333
                             virDomainDefPtr vm,
334
                             unsigned int flags);
335

336
char *qemuDomainFormatXML(virQEMUDriverPtr driver,
337
                          virDomainObjPtr vm,
338
                          unsigned int flags);
339

340
char *qemuDomainDefFormatLive(virQEMUDriverPtr driver,
341
                              virDomainDefPtr def,
342 343
                              bool inactive,
                              bool compatible);
344

345
void qemuDomainObjTaint(virQEMUDriverPtr driver,
346
                        virDomainObjPtr obj,
347
                        virDomainTaintFlags taint,
348
                        qemuDomainLogContextPtr logCtxt);
349

350
void qemuDomainObjCheckTaint(virQEMUDriverPtr driver,
351
                             virDomainObjPtr obj,
352
                             qemuDomainLogContextPtr logCtxt);
353
void qemuDomainObjCheckDiskTaint(virQEMUDriverPtr driver,
354
                                 virDomainObjPtr obj,
355
                                 virDomainDiskDefPtr disk,
356
                                 qemuDomainLogContextPtr logCtxt);
357 358 359
void qemuDomainObjCheckHostdevTaint(virQEMUDriverPtr driver,
                                    virDomainObjPtr obj,
                                    virDomainHostdevDefPtr disk,
360
                                    qemuDomainLogContextPtr logCtxt);
361
void qemuDomainObjCheckNetTaint(virQEMUDriverPtr driver,
362
                                virDomainObjPtr obj,
363
                                virDomainNetDefPtr net,
364
                                qemuDomainLogContextPtr logCtxt);
365

366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382
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);
void qemuDomainLogContextRef(qemuDomainLogContextPtr ctxt);
void qemuDomainLogContextFree(qemuDomainLogContextPtr ctxt);
383

384
const char *qemuFindQemuImgBinary(virQEMUDriverPtr driver);
385 386 387

int qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm,
                                    virDomainSnapshotObjPtr snapshot,
388
                                    virCapsPtr caps,
389 390
                                    char *snapshotDir);

391
int qemuDomainSnapshotForEachQcow2(virQEMUDriverPtr driver,
392 393 394 395 396
                                   virDomainObjPtr vm,
                                   virDomainSnapshotObjPtr snap,
                                   const char *op,
                                   bool try_all);

397
int qemuDomainSnapshotDiscard(virQEMUDriverPtr driver,
398 399 400 401 402
                              virDomainObjPtr vm,
                              virDomainSnapshotObjPtr snap,
                              bool update_current,
                              bool metadata_only);

403 404 405
typedef struct _virQEMUSnapRemove virQEMUSnapRemove;
typedef virQEMUSnapRemove *virQEMUSnapRemovePtr;
struct _virQEMUSnapRemove {
406
    virQEMUDriverPtr driver;
407 408 409 410 411 412
    virDomainObjPtr vm;
    int err;
    bool metadata_only;
    bool current;
};

413 414 415
int qemuDomainSnapshotDiscardAll(void *payload,
                                 const void *name,
                                 void *data);
416

417
int qemuDomainSnapshotDiscardAllMetadata(virQEMUDriverPtr driver,
418 419
                                         virDomainObjPtr vm);

420
void qemuDomainRemoveInactive(virQEMUDriverPtr driver,
421 422
                              virDomainObjPtr vm);

423
void qemuDomainSetFakeReboot(virQEMUDriverPtr driver,
424 425 426
                             virDomainObjPtr vm,
                             bool value);

427
bool qemuDomainJobAllowed(qemuDomainObjPrivatePtr priv,
428
                          qemuDomainJob job);
M
Michal Privoznik 已提交
429

430
int qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
M
Michal Privoznik 已提交
431 432
                                virDomainObjPtr vm,
                                bool start_with_state);
433

434
int qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
435
                                 virDomainObjPtr vm,
436
                                 virDomainDiskDefPtr disk,
437 438
                                 bool force_probe,
                                 bool report_broken);
439

440 441 442 443
bool qemuDomainDiskSourceDiffers(virConnectPtr conn,
                                 virDomainDiskDefPtr disk,
                                 virDomainDiskDefPtr origDisk);

444 445 446
bool qemuDomainDiskChangeSupported(virDomainDiskDefPtr disk,
                                   virDomainDiskDefPtr orig_disk);

447 448 449
int qemuDomainStorageFileInit(virQEMUDriverPtr driver,
                              virDomainObjPtr vm,
                              virStorageSourcePtr src);
450
char *qemuDomainStorageAlias(const char *device, int depth);
451

452 453 454 455
int qemuDomainCleanupAdd(virDomainObjPtr vm,
                         qemuDomainCleanupCallback cb);
void qemuDomainCleanupRemove(virDomainObjPtr vm,
                             qemuDomainCleanupCallback cb);
456
void qemuDomainCleanupRun(virQEMUDriverPtr driver,
457 458
                          virDomainObjPtr vm);

459 460
extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks;
extern virDomainXMLNamespace virQEMUDriverDomainXMLNamespace;
461
extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig;
462

463
int qemuDomainUpdateDeviceList(virQEMUDriverPtr driver,
464
                               virDomainObjPtr vm, int asyncJob);
465

466 467 468 469
int qemuDomainUpdateMemoryDeviceInfo(virQEMUDriverPtr driver,
                                     virDomainObjPtr vm,
                                     int asyncJob);

470 471 472
bool qemuDomainDefCheckABIStability(virQEMUDriverPtr driver,
                                    virDomainDefPtr src,
                                    virDomainDefPtr dst);
473

474
bool qemuDomainAgentAvailable(virDomainObjPtr vm,
475 476
                              bool reportError);

J
Jiri Denemark 已提交
477 478
int qemuDomainJobInfoUpdateTime(qemuDomainJobInfoPtr jobInfo)
    ATTRIBUTE_NONNULL(1);
479 480
int qemuDomainJobInfoUpdateDowntime(qemuDomainJobInfoPtr jobInfo)
    ATTRIBUTE_NONNULL(1);
J
Jiri Denemark 已提交
481 482 483 484 485 486 487 488 489 490
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);

491 492
int qemuDomainSupportsBlockJobs(virDomainObjPtr vm, bool *modern)
    ATTRIBUTE_NONNULL(1);
493
bool qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr disk);
494 495
bool qemuDomainHasBlockjob(virDomainObjPtr vm, bool copy_only)
    ATTRIBUTE_NONNULL(1);
496

497
int qemuDomainAlignMemorySizes(virDomainDefPtr def);
498 499
void qemuDomainMemoryDeviceAlignSize(virDomainDefPtr def,
                                     virDomainMemoryDefPtr mem);
500

501
virDomainChrDefPtr qemuFindAgentConfig(virDomainDefPtr def);
502

503 504
bool qemuDomainMachineIsQ35(const virDomainDef *def);
bool qemuDomainMachineIsI440FX(const virDomainDef *def);
505
bool qemuDomainMachineNeedsFDC(const virDomainDef *def);
506
bool qemuDomainMachineIsS390CCW(const virDomainDef *def);
507
bool qemuDomainMachineHasBuiltinIDE(const virDomainDef *def);
508

509 510 511
int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver,
                                      virDomainObjPtr vm);

512 513
unsigned long long qemuDomainGetMemLockLimitBytes(virDomainDefPtr def);
bool qemuDomainRequiresMemLock(virDomainDefPtr def);
514
int qemuDomainAdjustMaxMemLock(virDomainObjPtr vm);
515

516 517 518 519
int qemuDomainDefValidateMemoryHotplug(const virDomainDef *def,
                                       virQEMUCapsPtr qemuCaps,
                                       const virDomainMemoryDef *mem);

520
bool qemuDomainHasVcpuPids(virDomainObjPtr vm);
521
pid_t qemuDomainGetVcpuPid(virDomainObjPtr vm, unsigned int vcpu);
522 523
int qemuDomainDetectVcpuPids(virQEMUDriverPtr driver, virDomainObjPtr vm,
                             int asyncJob);
524

525 526 527 528 529 530 531 532
bool qemuDomainSupportsNicdev(virDomainDefPtr def,
                              virQEMUCapsPtr qemuCaps,
                              virDomainNetDefPtr net);

bool qemuDomainSupportsNetdev(virDomainDefPtr def,
                              virQEMUCapsPtr qemuCaps,
                              virDomainNetDefPtr net);

J
John Ferlan 已提交
533
int qemuDomainNetVLAN(virDomainNetDefPtr def);
534

535 536 537 538 539 540
int qemuDomainSetPrivatePaths(char **domainLibDir,
                              char **domainChannelTargetDir,
                              const char *confLibDir,
                              const char *confChannelDir,
                              const char *domainName,
                              int domainId);
541
#endif /* __QEMU_DOMAIN_H__ */