qemu_domain.h 21.0 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
    bool spiceMigrated;                 /* spice migration completed */
141 142
};

143
typedef void (*qemuDomainCleanupCallback)(virQEMUDriverPtr driver,
144 145
                                          virDomainObjPtr vm);

146 147 148
typedef struct _qemuDomainObjPrivate qemuDomainObjPrivate;
typedef qemuDomainObjPrivate *qemuDomainObjPrivatePtr;
struct _qemuDomainObjPrivate {
149
    struct qemuDomainJobObj job;
150 151

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

    qemuAgentPtr agent;
    bool agentError;
    unsigned long long agentStart;

161
    bool gotShutdown;
162
    bool beingDestroyed;
163
    char *pidfile;
164 165 166 167

    int nvcpupids;
    int *vcpupids;

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

173
    virQEMUCapsPtr qemuCaps;
174
    char *lockState;
175 176

    bool fakeReboot;
177 178

    int jobs_queued;
179 180

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

186
    virChrdevsPtr devs;
187 188 189 190

    qemuDomainCleanupCallback *cleanupCallbacks;
    size_t ncleanupCallbacks;
    size_t ncleanupCallbacks_max;
191 192

    virCgroupPtr cgroup;
193 194 195

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

    bool hookRun;  /* true if there was a hook run over this domain */
199 200

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

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

211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
# 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 */
228 229

    bool migrating; /* the disk is being migrated */
230 231
};

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

    QEMU_PROCESS_EVENT_LAST
} qemuProcessEventType;

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

252 253 254
typedef struct _qemuDomainLogContext qemuDomainLogContext;
typedef qemuDomainLogContext *qemuDomainLogContextPtr;

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

260
void qemuDomainEventFlush(int timer, void *opaque);
261

262
void qemuDomainEventQueue(virQEMUDriverPtr driver,
263
                          virObjectEventPtr event);
264

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

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

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


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


316 317 318 319
void qemuDomainObjEnterRemote(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
void qemuDomainObjExitRemote(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
320

321 322 323 324
virDomainDefPtr qemuDomainDefCopy(virQEMUDriverPtr driver,
                                  virDomainDefPtr src,
                                  unsigned int flags);

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

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

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

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

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

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

364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380
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);
381

382
const char *qemuFindQemuImgBinary(virQEMUDriverPtr driver);
383 384 385

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

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

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

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

411 412 413
int qemuDomainSnapshotDiscardAll(void *payload,
                                 const void *name,
                                 void *data);
414

415
int qemuDomainSnapshotDiscardAllMetadata(virQEMUDriverPtr driver,
416 417
                                         virDomainObjPtr vm);

418
void qemuDomainRemoveInactive(virQEMUDriverPtr driver,
419 420
                              virDomainObjPtr vm);

421
void qemuDomainSetFakeReboot(virQEMUDriverPtr driver,
422 423 424
                             virDomainObjPtr vm,
                             bool value);

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

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

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

438 439 440 441
bool qemuDomainDiskSourceDiffers(virConnectPtr conn,
                                 virDomainDiskDefPtr disk,
                                 virDomainDiskDefPtr origDisk);

442 443 444
bool qemuDomainDiskChangeSupported(virDomainDiskDefPtr disk,
                                   virDomainDiskDefPtr orig_disk);

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

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

457 458
extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks;
extern virDomainXMLNamespace virQEMUDriverDomainXMLNamespace;
459
extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig;
460

461
int qemuDomainUpdateDeviceList(virQEMUDriverPtr driver,
462
                               virDomainObjPtr vm, int asyncJob);
463

464 465 466 467
int qemuDomainUpdateMemoryDeviceInfo(virQEMUDriverPtr driver,
                                     virDomainObjPtr vm,
                                     int asyncJob);

468 469 470
bool qemuDomainDefCheckABIStability(virQEMUDriverPtr driver,
                                    virDomainDefPtr src,
                                    virDomainDefPtr dst);
471

472
bool qemuDomainAgentAvailable(virDomainObjPtr vm,
473 474
                              bool reportError);

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

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

495
int qemuDomainAlignMemorySizes(virDomainDefPtr def);
496 497
void qemuDomainMemoryDeviceAlignSize(virDomainDefPtr def,
                                     virDomainMemoryDefPtr mem);
498

499
virDomainChrDefPtr qemuFindAgentConfig(virDomainDefPtr def);
500

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

507 508 509
int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver,
                                      virDomainObjPtr vm);

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

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

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

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

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

J
John Ferlan 已提交
531
int qemuDomainNetVLAN(virDomainNetDefPtr def);
532

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