qemu_conf.h 10.4 KB
Newer Older
D
Daniel P. Berrange 已提交
1
/*
2
 * qemu_conf.h: QEMU configuration management
D
Daniel P. Berrange 已提交
3
 *
4
 * Copyright (C) 2006, 2007, 2009, 2010 Red Hat, Inc.
D
Daniel P. Berrange 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 * 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
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
 *
 * Author: Daniel P. Berrange <berrange@redhat.com>
 */

24 25
#ifndef __QEMUD_CONF_H
#define __QEMUD_CONF_H
D
Daniel P. Berrange 已提交
26

27
#include <config.h>
28

29
#include "ebtables.h"
30
#include "internal.h"
31
#include "bridge.h"
32
#include "capabilities.h"
33
#include "network_conf.h"
34
#include "domain_conf.h"
35
#include "domain_event.h"
36
#include "threads.h"
37
#include "security/security_driver.h"
38
#include "cgroup.h"
39
#include "pci.h"
40 41
#include "cpu_conf.h"
#include "driver.h"
42 43

#define qemudDebug(fmt, ...) do {} while(0)
44

45
#define QEMUD_CPUMASK_LEN CPU_SETSIZE
46

47 48
/* Internal flags to keep track of qemu command line capabilities */
enum qemud_cmd_flags {
49 50 51 52 53 54 55 56 57 58 59 60 61
    QEMUD_CMD_FLAG_KQEMU          = (1 << 0), /* Whether KQEMU is compiled in */
    QEMUD_CMD_FLAG_VNC_COLON      = (1 << 1), /* Does the VNC take just port, or address + display */
    QEMUD_CMD_FLAG_NO_REBOOT      = (1 << 2), /* Is the -no-reboot flag available */
    QEMUD_CMD_FLAG_DRIVE          = (1 << 3), /* Is the new -drive arg available */
    QEMUD_CMD_FLAG_DRIVE_BOOT     = (1 << 4), /* Does -drive support boot=on */
    QEMUD_CMD_FLAG_NAME           = (1 << 5), /* Is the -name flag available */
    QEMUD_CMD_FLAG_UUID           = (1 << 6), /* Is the -uuid flag available */
    QEMUD_CMD_FLAG_DOMID          = (1 << 7), /* Xenner only, special -domid flag available */
    QEMUD_CMD_FLAG_VNET_HDR        = (1 << 8),
    QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO = (1 << 9),  /* Original migration code from KVM. Also had tcp, but we can't use that
                                                   * since it had a design bug blocking the entire monitor console */
    QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP  = (1 << 10), /* New migration syntax after merge to QEMU with TCP transport */
    QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC = (1 << 11), /* New migration syntax after merge to QEMU with EXEC transport */
62
    QEMUD_CMD_FLAG_DRIVE_CACHE_V2    = (1 << 12), /* Is the cache= flag wanting new v2 values */
63
    QEMUD_CMD_FLAG_KVM               = (1 << 13), /* Whether KVM is compiled in */
64
    QEMUD_CMD_FLAG_DRIVE_FORMAT      = (1 << 14), /* Is -drive format= avail */
65
    QEMUD_CMD_FLAG_VGA               = (1 << 15), /* Is -vga avail */
66 67 68 69 70

    /* features added in qemu-0.10.0 */
    QEMUD_CMD_FLAG_0_10         = (1 << 16),
    QEMUD_CMD_FLAG_NET_NAME     = QEMUD_CMD_FLAG_0_10, /* -net ...,name=str */
    QEMUD_CMD_FLAG_HOST_NET_ADD = QEMUD_CMD_FLAG_0_10, /* host_net_add monitor command */
71 72

    QEMUD_CMD_FLAG_PCIDEVICE     = (1 << 17), /* PCI device assignment only supported by qemu-kvm */
73
    QEMUD_CMD_FLAG_MEM_PATH      = (1 << 18), /* mmap'ped guest backing supported */
74
    QEMUD_CMD_FLAG_DRIVE_SERIAL  = (1 << 19), /* -driver serial=  available */
75
    QEMUD_CMD_FLAG_XEN_DOMID     = (1 << 20), /* -xen-domid (new style xen integration) */
76
    QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX = (1 << 21), /* Does qemu support unix domain sockets for migration? */
77
    QEMUD_CMD_FLAG_CHARDEV       = (1 << 22), /* Is the new -chardev arg available */
78
    QEMUD_CMD_FLAG_ENABLE_KVM    = (1 << 23), /* Is the -enable-kvm flag available to "enable KVM full virtualization support" */
79
    QEMUD_CMD_FLAG_MONITOR_JSON  = (1 << 24), /* JSON mode for monitor */
80
    QEMUD_CMD_FLAG_BALLOON       = (1 << 25), /* -balloon available */
81
    QEMUD_CMD_FLAG_DEVICE        = (1 << 26), /* Is the new -device arg available */
82
    QEMUD_CMD_FLAG_SDL           = (1 << 27), /* Is the new -sdl arg available */
83
    QEMUD_CMD_FLAG_SMP_TOPOLOGY  = (1 << 28), /* Is sockets=s,cores=c,threads=t available for -smp? */
84 85 86 87
};

/* Main driver state */
struct qemud_driver {
88
    virMutex lock;
89

90 91
    int privileged;

92 93
    uid_t user;
    gid_t group;
94
    int dynamicOwnership;
95

96
    unsigned int qemuVersion;
97
    int nextvmid;
98

99
    virCgroupPtr cgroup;
100 101 102
    int cgroupControllers;
    char **cgroupDeviceACL;

103
    virDomainObjList domains;
104

105
    brControl *brctl;
106 107
    /* These four directories are ones libvirtd uses (so must be root:root
     * to avoid security risk from QEMU processes */
108 109
    char *configDir;
    char *autostartDir;
110
    char *logDir;
111
    char *stateDir;
112 113 114 115
    /* These two directories are ones QEMU processes use (so must match
     * the QEMU user/group */
    char *libDir;
    char *cacheDir;
116 117
    unsigned int vncTLS : 1;
    unsigned int vncTLSx509verify : 1;
118
    unsigned int vncSASL : 1;
D
Daniel P. Berrange 已提交
119
    char *vncTLSx509certdir;
120
    char *vncListen;
121
    char *vncPassword;
122
    char *vncSASLdir;
123 124
    char *hugetlbfs_mount;
    char *hugepage_path;
125

126 127 128
    unsigned int macFilter : 1;
    ebtablesContext *ebtables;

129 130
    unsigned int relaxedACS : 1;

131
    virCapsPtr caps;
132 133 134

    /* An array of callbacks */
    virDomainEventCallbackListPtr domainEventCallbacks;
135 136 137
    virDomainEventQueuePtr domainEventQueue;
    int domainEventTimer;
    int domainEventDispatching;
138 139 140

    char *securityDriverName;
    virSecurityDriverPtr securityDriver;
141 142
    virSecurityDriverPtr securityPrimaryDriver;
    virSecurityDriverPtr securitySecondaryDriver;
143 144

    char *saveImageFormat;
145 146

    pciDeviceList *activePciHostdevs;
147 148
};

149

D
Daniel Veillard 已提交
150 151 152
/* Port numbers used for KVM migration. */
#define QEMUD_MIGRATION_FIRST_PORT 49152
#define QEMUD_MIGRATION_NUM_PORTS 64
153

154 155 156
/* Config type for XML import/export conversions */
#define QEMU_CONFIG_FORMAT_ARGV "qemu-argv"

157
#define qemudReportError(conn, dom, net, code, fmt...)                       \
158
        virReportErrorHelper(conn, VIR_FROM_QEMU, code, __FILE__,          \
159
                               __FUNCTION__, __LINE__, fmt)
160 161


D
Daniel P. Berrange 已提交
162 163
int qemudLoadDriverConfig(struct qemud_driver *driver,
                          const char *filename);
164

165
virCapsPtr  qemudCapsInit               (virCapsPtr old_caps);
166

167 168
int         qemudExtractVersion         (virConnectPtr conn,
                                         struct qemud_driver *driver);
169
int         qemudExtractVersionInfo     (const char *qemu,
170 171
                                         unsigned int *version,
                                         unsigned int *flags);
D
Daniel P. Berrange 已提交
172

173 174 175 176 177 178
int         qemudParseHelpStr           (const char *str,
                                         unsigned int *flags,
                                         unsigned int *version,
                                         unsigned int *is_kvm,
                                         unsigned int *kvm_version);

179
int         qemudBuildCommandLine       (virConnectPtr conn,
180
                                         struct qemud_driver *driver,
181
                                         virDomainDefPtr def,
182
                                         virDomainChrDefPtr monitor_chr,
D
Daniel P. Berrange 已提交
183
                                         int monitor_json,
184
                                         unsigned int qemuCmdFlags,
185 186
                                         const char ***retargv,
                                         const char ***retenv,
187 188 189
                                         int **tapfds,
                                         int *ntapfds,
                                         const char *migrateFrom);
190

191 192 193 194 195 196
/* Legacy, pre device support */
char * qemuBuildHostNetStr(virConnectPtr conn,
                           virDomainNetDefPtr net,
                           char type_sep,
                           int vlan,
                           const char *tapfd);
M
Mark McLoughlin 已提交
197

198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
/* Current, best practice */
char * qemuBuildNetDevStr(virConnectPtr conn,
                          virDomainNetDefPtr net,
                          const char *tapfd);


/* Legacy, pre device support */
char * qemuBuildNicStr(virConnectPtr conn,
                       virDomainNetDefPtr net,
                       const char *prefix,
                       int vlan);

/* Current, best practice */
char * qemuBuildNicDevStr(virDomainNetDefPtr net);

/* Both legacy & current support */
char *qemuBuildDriveStr(virDomainDiskDefPtr disk,
                        int bootable,
                        int qemuCmdFlags);

/* Current, best practice */
char * qemuBuildDriveDevStr(virConnectPtr conn,
                            virDomainDiskDefPtr disk);
/* Current, best practice */
char * qemuBuildControllerDevStr(virDomainControllerDefPtr def);

char * qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev);

char * qemuBuildUSBInputDevStr(virDomainInputDefPtr dev);

char * qemuBuildSoundDevStr(virDomainSoundDefPtr sound);

char * qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev);

char * qemuBuildChrChardevStr(virDomainChrDefPtr dev);
char * qemuBuildChrArgStr(virDomainChrDefPtr dev, const char *prefix);
M
Mark McLoughlin 已提交
234

235 236


237 238 239 240 241
int         qemudNetworkIfaceConnect    (virConnectPtr conn,
                                         struct qemud_driver *driver,
                                         virDomainNetDefPtr net,
                                         int qemuCmdFlags);

M
Mark McLoughlin 已提交
242 243 244
int         qemuAssignNetNames          (virDomainDefPtr def,
                                         virDomainNetDefPtr net);

245 246 247 248
int         qemudProbeMachineTypes      (const char *binary,
                                         virCapsGuestMachinePtr **machines,
                                         int *nmachines);

249 250 251 252 253
int         qemudProbeCPUModels         (const char *qemu,
                                         const char *arch,
                                         unsigned int *count,
                                         const char ***cpus);

254 255 256
int         qemudCanonicalizeMachine    (struct qemud_driver *driver,
                                         virDomainDefPtr def);

257
virDomainDefPtr qemuParseCommandLine(virConnectPtr conn,
258
                                     virCapsPtr caps,
259 260 261
                                     const char **progenv,
                                     const char **progargv);
virDomainDefPtr qemuParseCommandLineString(virConnectPtr conn,
262
                                           virCapsPtr caps,
263 264
                                           const char *args);

265
#endif /* __QEMUD_CONF_H */