You need to sign in or sign up before continuing.
qemu_conf.h 6.9 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-2012 Red Hat, Inc.
D
Daniel P. Berrange 已提交
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/>.
D
Daniel P. Berrange 已提交
20 21 22 23
 *
 * Author: Daniel P. Berrange <berrange@redhat.com>
 */

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

27
# include <config.h>
28

29
# include "virebtables.h"
30 31 32 33 34
# include "internal.h"
# include "capabilities.h"
# include "network_conf.h"
# include "domain_conf.h"
# include "domain_event.h"
35
# include "virthread.h"
36
# include "security/security_manager.h"
37
# include "vircgroup.h"
38
# include "virpci.h"
39
# include "virusb.h"
40 41
# include "cpu_conf.h"
# include "driver.h"
42
# include "virportallocator.h"
43
# include "vircommand.h"
44
# include "virthreadpool.h"
45
# include "locking/lock_manager.h"
46
# include "qemu_capabilities.h"
47

48
# define QEMUD_CPUMASK_LEN CPU_SETSIZE
49

50 51
typedef struct _qemuDriverCloseDef qemuDriverCloseDef;
typedef qemuDriverCloseDef *qemuDriverCloseDefPtr;
52

53 54 55
typedef struct _virQEMUDriver virQEMUDriver;
typedef virQEMUDriver *virQEMUDriverPtr;

56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
typedef struct _virQEMUDriverConfig virQEMUDriverConfig;
typedef virQEMUDriverConfig *virQEMUDriverConfigPtr;

/* Main driver config. The data in these object
 * instances is immutable, so can be accessed
 * without locking. Threads must, however, hold
 * a valid reference on the object to prevent it
 * being released while they use it.
 *
 * eg
 *  qemuDriverLock(driver);
 *  virQEMUDriverConfigPtr cfg = virObjectRef(driver->config);
 *  qemuDriverUnlock(driver);
 *
 *  ...do stuff with 'cfg'..
 *
 *  virObjectUnref(cfg);
 */
struct _virQEMUDriverConfig {
    virObject parent;
H
Hu Tao 已提交
76

77
    bool privileged;
78
    const char *uri;
79

80 81
    uid_t user;
    gid_t group;
82
    int dynamicOwnership;
83

84 85 86
    int cgroupControllers;
    char **cgroupDeviceACL;

87
    /* These five directories are ones libvirtd uses (so must be root:root
88
     * to avoid security risk from QEMU processes */
89
    char *configBaseDir;
90 91
    char *configDir;
    char *autostartDir;
92
    char *logDir;
93
    char *stateDir;
94 95 96 97
    /* These two directories are ones QEMU processes use (so must match
     * the QEMU user/group */
    char *libDir;
    char *cacheDir;
98
    char *saveDir;
C
Chris Lalancette 已提交
99
    char *snapshotDir;
100 101 102 103 104

    bool vncAutoUnixSocket;
    bool vncTLS;
    bool vncTLSx509verify;
    bool vncSASL;
D
Daniel P. Berrange 已提交
105
    char *vncTLSx509certdir;
106
    char *vncListen;
107
    char *vncPassword;
108
    char *vncSASLdir;
109 110

    bool spiceTLS;
111 112 113
    char *spiceTLSx509certdir;
    char *spiceListen;
    char *spicePassword;
114

115 116
    int remotePortMin;
    int remotePortMax;
117

118 119 120 121
    char *hugetlbfsMount;
    char *hugepagePath;

    bool macFilter;
122

123 124 125 126 127
    bool relaxedACS;
    bool vncAllowHostAudio;
    bool clearEmulatorCapabilities;
    bool allowDiskFormatProbing;
    bool setProcessName;
128

129
    int maxProcesses;
130
    int maxFiles;
131

132
    int maxQueuedJobs;
133

134
    char **securityDriverNames;
135 136
    bool securityDefaultConfined;
    bool securityRequireConfined;
137 138

    char *saveImageFormat;
139
    char *dumpImageFormat;
140

H
Hu Tao 已提交
141
    char *autoDumpPath;
142 143
    bool autoDumpBypassCache;
    bool autoStartBypassCache;
H
Hu Tao 已提交
144

145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
    char *lockManagerName;

    int keepAliveInterval;
    unsigned int keepAliveCount;

    int seccompSandbox;
};

/* Main driver state */
struct _virQEMUDriver {
    virMutex lock;

    virQEMUDriverConfigPtr config;

    virThreadPoolPtr workerPool;

    unsigned int qemuVersion;

    int nextvmid;

    virCgroupPtr cgroup;

    size_t nactive;

    virStateInhibitCallback inhibitCallback;
    void *inhibitOpaque;

172
    virDomainObjListPtr domains;
173 174 175 176 177 178 179 180 181 182 183 184 185

    char *qemuImgBinary;

    ebtablesContext *ebtables;

    virCapsPtr caps;

    qemuCapsCachePtr capsCache;

    virDomainEventStatePtr domainEventState;

    virSecurityManagerPtr securityManager;

186
    pciDeviceList *activePciHostdevs;
187
    usbDeviceList *activeUsbHostdevs;
188

189 190
    pciDeviceList *inactivePciHostdevs;

191 192
    virHashTablePtr sharedDisks;

193
    virPortAllocatorPtr remotePorts;
194 195

    virSysinfoDefPtr hostsysinfo;
196 197

    virLockManagerPluginPtr lockManager;
198

199
    virHashTablePtr closeCallbacks;
200 201
};

202 203 204 205 206 207 208 209 210 211 212
typedef struct _qemuDomainCmdlineDef qemuDomainCmdlineDef;
typedef qemuDomainCmdlineDef *qemuDomainCmdlineDefPtr;
struct _qemuDomainCmdlineDef {
    unsigned int num_args;
    char **args;

    unsigned int num_env;
    char **env_name;
    char **env_value;
};

D
Daniel Veillard 已提交
213
/* Port numbers used for KVM migration. */
214 215
# define QEMUD_MIGRATION_FIRST_PORT 49152
# define QEMUD_MIGRATION_NUM_PORTS 64
216 217


218 219
void qemuDriverLock(virQEMUDriverPtr driver);
void qemuDriverUnlock(virQEMUDriverPtr driver);
220 221 222 223 224 225 226

virQEMUDriverConfigPtr virQEMUDriverConfigNew(bool privileged);

int virQEMUDriverConfigLoadFile(virQEMUDriverConfigPtr cfg,
                                const char *filename);

virQEMUDriverConfigPtr virQEMUDriverGetConfig(virQEMUDriverPtr driver);
227

228 229 230 231
struct qemuDomainDiskInfo {
    bool removable;
    bool locked;
    bool tray_open;
232
    int io_status;
233 234
};

235
typedef virDomainObjPtr (*qemuDriverCloseCallback)(virQEMUDriverPtr driver,
236 237
                                                   virDomainObjPtr vm,
                                                   virConnectPtr conn);
238 239 240
int qemuDriverCloseCallbackInit(virQEMUDriverPtr driver);
void qemuDriverCloseCallbackShutdown(virQEMUDriverPtr driver);
int qemuDriverCloseCallbackSet(virQEMUDriverPtr driver,
241 242 243
                               virDomainObjPtr vm,
                               virConnectPtr conn,
                               qemuDriverCloseCallback cb);
244
int qemuDriverCloseCallbackUnset(virQEMUDriverPtr driver,
245 246
                                 virDomainObjPtr vm,
                                 qemuDriverCloseCallback cb);
247
qemuDriverCloseCallback qemuDriverCloseCallbackGet(virQEMUDriverPtr driver,
248 249
                                                   virDomainObjPtr vm,
                                                   virConnectPtr conn);
250
void qemuDriverCloseCallbackRunAll(virQEMUDriverPtr driver,
251 252
                                   virConnectPtr conn);

253 254 255 256 257 258 259 260 261 262
int qemuAddSharedDisk(virHashTablePtr sharedDisks,
                      const char *disk_path)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);

int qemuRemoveSharedDisk(virHashTablePtr sharedDisks,
                         const char *disk_path)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
char * qemuGetSharedDiskKey(const char *disk_path)
    ATTRIBUTE_NONNULL(1);

263 264
int qemuDriverAllocateID(virQEMUDriverPtr driver);

265
#endif /* __QEMUD_CONF_H */