qemu_command.h 8.8 KB
Newer Older
1 2 3
/*
 * qemu_command.h: QEMU command generation
 *
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
#ifndef LIBVIRT_QEMU_COMMAND_H
# define LIBVIRT_QEMU_COMMAND_H
24

25
# include "domain_addr.h"
26
# include "domain_conf.h"
27
# include "vircommand.h"
28
# include "capabilities.h"
29
# include "qemu_block.h"
30
# include "qemu_conf.h"
31
# include "qemu_domain.h"
32
# include "qemu_domain_address.h"
33
# include "qemu_capabilities.h"
34
# include "logging/log_manager.h"
35 36 37 38 39 40

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

# define QEMU_FSDEV_HOST_PREFIX "fsdev-"

41 42
# define QEMU_BLOCK_IOTUNE_MAX 1000000000000000LL

43
VIR_ENUM_DECL(qemuVideo)
44

45
virCommandPtr qemuBuildCommandLine(virQEMUDriverPtr driver,
46
                                   virLogManagerPtr logManager,
47
                                   virSecurityManagerPtr secManager,
48
                                   virDomainObjPtr vm,
49
                                   const char *migrateURI,
50
                                   virDomainSnapshotObjPtr snapshot,
51
                                   virNetDevVPortProfileOp vmop,
52
                                   bool standalone,
53
                                   bool enableFips,
54
                                   size_t *nnicindexes,
55
                                   int **nicindexes);
56

57
/* Generate the object properties for pr-manager */
58
virJSONValuePtr qemuBuildPRManagerInfoProps(virStorageSourcePtr src);
59
virJSONValuePtr qemuBuildPRManagedManagerInfoProps(qemuDomainObjPrivatePtr priv);
60

61 62 63 64
/* Generate the object properties for a secret */
int qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo,
                             virJSONValuePtr *propsret);

65 66
/* Generate the object properties for a tls-creds-x509 */
int qemuBuildTLSx509BackendProps(const char *tlspath,
67
                                 bool isListen,
68
                                 bool verifypeer,
69
                                 const char *alias,
70
                                 const char *secalias,
71 72 73
                                 virQEMUCapsPtr qemuCaps,
                                 virJSONValuePtr *propsret);

74 75 76 77
/* Open a UNIX socket for chardev FD passing */
int
qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev);

78 79 80
/* Generate '-device' string for chardev device */
int
qemuBuildChrDeviceStr(char **deviceStr,
81
                      const virDomainDef *vmdef,
82 83
                      virDomainChrDefPtr chr,
                      virQEMUCapsPtr qemuCaps);
84

85 86 87
char *qemuBuildHostNetStr(virDomainNetDefPtr net,
                          virQEMUDriverPtr driver,
                          char **tapfd,
88
                          size_t tapfdSize,
89
                          char **vhostfd,
90
                          size_t vhostfdSize);
91 92

/* Current, best practice */
93
char *qemuBuildNicDevStr(virDomainDefPtr def,
94
                         virDomainNetDefPtr net,
95
                         unsigned int bootindex,
96
                         size_t vhostfdSize,
97
                         virQEMUCapsPtr qemuCaps);
98

99
char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk);
100
bool qemuDiskBusNeedsDriveArg(int bus);
101

102 103
qemuBlockStorageSourceAttachDataPtr
qemuBuildStorageSourceAttachPrepareDrive(virDomainDiskDefPtr disk,
104
                                         virQEMUCapsPtr qemuCaps);
105 106
int
qemuBuildStorageSourceAttachPrepareCommon(virStorageSourcePtr src,
107 108
                                          qemuBlockStorageSourceAttachDataPtr data,
                                          virQEMUCapsPtr qemuCaps);
109

110 111 112 113 114
char
*qemuBuildDiskDeviceStr(const virDomainDef *def,
                        virDomainDiskDefPtr disk,
                        unsigned int bootindex,
                        virQEMUCapsPtr qemuCaps);
115

116
/* Current, best practice */
117 118 119 120 121
int qemuBuildControllerDevStr(const virDomainDef *domainDef,
                              virDomainControllerDefPtr def,
                              virQEMUCapsPtr qemuCaps,
                              char **devstr,
                              int *nusbcontroller);
122

123
int qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps,
124
                                const char *alias,
125
                                virQEMUDriverConfigPtr cfg,
126
                                qemuDomainObjPrivatePtr priv,
127 128 129
                                virDomainDefPtr def,
                                virDomainMemoryDefPtr mem,
                                bool force);
130

131 132
char *qemuBuildMemoryDeviceStr(virDomainMemoryDefPtr mem,
                               qemuDomainObjPrivatePtr priv);
133

134
/* Current, best practice */
135
char *qemuBuildPCIHostdevDevStr(const virDomainDef *def,
136
                                virDomainHostdevDefPtr dev,
137
                                unsigned int bootIndex,
138 139
                                const char *configfd,
                                virQEMUCapsPtr qemuCaps);
140

141
char *qemuBuildRNGDevStr(const virDomainDef *def,
142 143
                         virDomainRNGDefPtr dev,
                         virQEMUCapsPtr qemuCaps);
144 145 146
int qemuBuildRNGBackendProps(virDomainRNGDefPtr rng,
                             virQEMUCapsPtr qemuCaps,
                             virJSONValuePtr *props);
147

148 149 150
int qemuOpenPCIConfig(virDomainHostdevDefPtr dev);

/* Current, best practice */
151
char *qemuBuildUSBHostdevDevStr(const virDomainDef *def,
152 153 154
                                virDomainHostdevDefPtr dev,
                                virQEMUCapsPtr qemuCaps);

155 156
char *qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev,
                                 virQEMUCapsPtr qemuCaps);
J
Ján Tomko 已提交
157

158
char *qemuBuildSCSIHostdevDevStr(const virDomainDef *def,
159
                                 virDomainHostdevDefPtr dev);
160 161 162 163 164
char *
qemuBuildSCSIVHostHostdevDevStr(const virDomainDef *def,
                                virDomainHostdevDefPtr dev,
                                virQEMUCapsPtr qemuCaps,
                                char *vhostfdName);
165

166 167 168 169 170
char *
qemuBuildHostdevMediatedDevStr(const virDomainDef *def,
                               virDomainHostdevDefPtr dev,
                               virQEMUCapsPtr qemuCaps);

171
char *qemuBuildRedirdevDevStr(const virDomainDef *def,
172 173
                              virDomainRedirdevDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
174

175 176
char *qemuBuildZPCIDevStr(virDomainDeviceInfoPtr dev);

177 178
int qemuNetworkPrepareDevices(virDomainDefPtr def);

179
int qemuGetDriveSourceString(virStorageSourcePtr src,
180
                             qemuDomainSecretInfoPtr secinfo,
181
                             char **source);
182

183 184 185
bool
qemuDiskConfigBlkdeviotuneEnabled(virDomainDiskDefPtr disk);

186 187
int qemuCheckDiskConfig(virDomainDiskDefPtr disk,
                        virQEMUCapsPtr qemuCaps);
188 189 190

bool
qemuCheckFips(void);
191

192 193 194
virJSONValuePtr qemuBuildHotpluggableCPUProps(const virDomainVcpuDef *vcpu)
    ATTRIBUTE_NONNULL(1);

195 196 197 198 199 200 201 202
virJSONValuePtr qemuBuildShmemBackendMemProps(virDomainShmemDefPtr shmem)
    ATTRIBUTE_NONNULL(1);

char *qemuBuildShmemDevStr(virDomainDefPtr def,
                           virDomainShmemDefPtr shmem,
                           virQEMUCapsPtr qemuCaps)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);

M
Michal Privoznik 已提交
203 204 205
char *qemuBuildWatchdogDevStr(const virDomainDef *def,
                              virDomainWatchdogDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
206

J
Ján Tomko 已提交
207 208 209 210 211 212 213
int qemuBuildInputDevStr(char **devstr,
                         const virDomainDef *def,
                         virDomainInputDefPtr input,
                         virQEMUCapsPtr qemuCaps)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
    ATTRIBUTE_NONNULL(4);

J
Ján Tomko 已提交
214 215 216 217 218 219 220 221
char *
qemuBuildVsockDevStr(virDomainDefPtr def,
                     virDomainVsockDefPtr vsock,
                     virQEMUCapsPtr qemuCaps,
                     const char *fdprefix)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
    ATTRIBUTE_NONNULL(4);

222 223 224 225 226 227 228 229 230
/* this function is exported so that tests can mock the FDs */
int
qemuBuildTPMOpenBackendFDs(const char *tpmdev,
                           const char *cancel_path,
                           int *tpmfd,
                           int *cancelfd)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
    ATTRIBUTE_NONNULL(4);

231
#endif /* LIBVIRT_QEMU_COMMAND_H */