qemu_command.h 13.3 KB
Newer Older
1 2 3
/*
 * qemu_command.h: QEMU command generation
 *
4
 * Copyright (C) 2006-2015 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_COMMAND_H__
# define __QEMU_COMMAND_H__

27
# include "domain_addr.h"
28
# include "domain_conf.h"
29
# include "vircommand.h"
30 31
# include "capabilities.h"
# include "qemu_conf.h"
32
# include "qemu_domain.h"
33
# include "qemu_capabilities.h"
34 35 36 37 38 39 40

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

# define QEMU_DRIVE_HOST_PREFIX "drive-"
# define QEMU_FSDEV_HOST_PREFIX "fsdev-"

41
/* These are only defaults, they can be changed now in qemu.conf and
N
Nehal J Wani 已提交
42
 * explicitly specified port is checked against these two (makes
43 44 45 46 47
 * sense to limit the values).
 *
 * This limitation is mentioned in qemu.conf, so bear in mind that the
 * configuration file should reflect any changes made to these values.
 */
48 49
# define QEMU_REMOTE_PORT_MIN  5900
# define QEMU_REMOTE_PORT_MAX  65535
50

51 52 53
# define QEMU_WEBSOCKET_PORT_MIN  5700
# define QEMU_WEBSOCKET_PORT_MAX  65535

54 55 56
# define QEMU_MIGRATION_PORT_MIN 49152
# define QEMU_MIGRATION_PORT_MAX 49215

57 58
# define QEMU_QXL_VGAMEM_DEFAULT 16 * 1024

59 60 61
typedef struct _qemuBuildCommandLineCallbacks qemuBuildCommandLineCallbacks;
typedef qemuBuildCommandLineCallbacks *qemuBuildCommandLineCallbacksPtr;
struct _qemuBuildCommandLineCallbacks {
62 63 64 65
    char *(*qemuGetSCSIDeviceSgName) (const char *sysfs_prefix,
                                      const char *adapter,
                                      unsigned int bus,
                                      unsigned int target,
66
                                      unsigned long long unit);
67 68 69
};

extern qemuBuildCommandLineCallbacks buildCommandLineCallbacks;
70

71 72 73 74
char *qemuBuildObjectCommandlineFromJSON(const char *type,
                                         const char *alias,
                                         virJSONValuePtr props);

75
virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
76
                                   virQEMUDriverPtr driver,
77
                                   virDomainDefPtr def,
78
                                   virDomainChrSourceDefPtr monitor_chr,
79
                                   bool monitor_json,
80
                                   virQEMUCapsPtr qemuCaps,
81
                                   const char *migrateURI,
82
                                   virDomainSnapshotObjPtr current_snapshot,
83
                                   virNetDevVPortProfileOp vmop,
C
Cole Robinson 已提交
84
                                   qemuBuildCommandLineCallbacksPtr callbacks,
85
                                   bool forXMLToArgv,
86
                                   bool enableFips,
87 88 89
                                   virBitmapPtr nodeset,
                                   size_t *nnicindexes,
                                   int **nicindexes)
90
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(10);
91

92 93 94 95 96 97
/* Generate '-device' string for chardev device */
int
qemuBuildChrDeviceStr(char **deviceStr,
                      virDomainDefPtr vmdef,
                      virDomainChrDefPtr chr,
                      virQEMUCapsPtr qemuCaps);
98

99
/* With vlan == -1, use netdev syntax, else old hostnet */
100 101 102 103 104
char *qemuBuildHostNetStr(virDomainNetDefPtr net,
                          virQEMUDriverPtr driver,
                          char type_sep,
                          int vlan,
                          char **tapfd,
105
                          size_t tapfdSize,
106
                          char **vhostfd,
107
                          size_t vhostfdSize);
108 109

/* Legacy, pre device support */
110 111 112
char *qemuBuildNicStr(virDomainNetDefPtr net,
                      const char *prefix,
                      int vlan);
113 114

/* Current, best practice */
115 116 117 118
char *qemuBuildNicDevStr(virDomainDefPtr def,
                         virDomainNetDefPtr net,
                         int vlan,
                         int bootindex,
119
                         size_t vhostfdSize,
120
                         virQEMUCapsPtr qemuCaps);
121 122

char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk,
123
                               virQEMUCapsPtr qemuCaps);
124 125

/* Both legacy & current support */
126 127
char *qemuBuildDriveStr(virConnectPtr conn,
                        virDomainDiskDefPtr disk,
128
                        bool bootable,
129
                        virQEMUCapsPtr qemuCaps);
130
char *qemuBuildFSStr(virDomainFSDefPtr fs,
131
                     virQEMUCapsPtr qemuCaps);
132 133

/* Current, best practice */
134 135 136 137 138 139 140
char *qemuBuildDriveDevStr(virDomainDefPtr def,
                           virDomainDiskDefPtr disk,
                           int bootindex,
                           virQEMUCapsPtr qemuCaps);
char *qemuBuildFSDevStr(virDomainDefPtr domainDef,
                        virDomainFSDefPtr fs,
                        virQEMUCapsPtr qemuCaps);
141
/* Current, best practice */
142 143 144 145
char *qemuBuildControllerDevStr(virDomainDefPtr domainDef,
                                virDomainControllerDefPtr def,
                                virQEMUCapsPtr qemuCaps,
                                int *nusbcontroller);
146

147 148 149
char *qemuBuildWatchdogDevStr(virDomainDefPtr domainDef,
                              virDomainWatchdogDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
150

151 152 153
char *qemuBuildMemballoonDevStr(virDomainDefPtr domainDef,
                                virDomainMemballoonDefPtr dev,
                                virQEMUCapsPtr qemuCaps);
154

155 156 157
char *qemuBuildUSBInputDevStr(virDomainDefPtr domainDef,
                              virDomainInputDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
158

159 160 161
char *qemuBuildSoundDevStr(virDomainDefPtr domainDef,
                           virDomainSoundDefPtr sound,
                           virQEMUCapsPtr qemuCaps);
162

163 164 165 166 167 168 169 170 171 172 173 174
int qemuBuildMemoryBackendStr(unsigned long long size,
                              unsigned long long pagesize,
                              int guestNode,
                              virBitmapPtr userNodeset,
                              virBitmapPtr autoNodeset,
                              virDomainDefPtr def,
                              virQEMUCapsPtr qemuCaps,
                              virQEMUDriverConfigPtr cfg,
                              const char **backendType,
                              virJSONValuePtr *backendProps,
                              bool force);

175
char *qemuBuildMemoryDeviceStr(virDomainMemoryDefPtr mem);
176

177
/* Legacy, pre device support */
178 179
char *qemuBuildPCIHostdevPCIDevStr(virDomainHostdevDefPtr dev,
                                   virQEMUCapsPtr qemuCaps);
180
/* Current, best practice */
181 182 183 184
char *qemuBuildPCIHostdevDevStr(virDomainDefPtr def,
                                virDomainHostdevDefPtr dev,
                                const char *configfd,
                                virQEMUCapsPtr qemuCaps);
185

186 187 188
char *qemuBuildRNGDevStr(virDomainDefPtr def,
                         virDomainRNGDefPtr dev,
                         virQEMUCapsPtr qemuCaps);
189 190 191 192
int qemuBuildRNGBackendProps(virDomainRNGDefPtr rng,
                             virQEMUCapsPtr qemuCaps,
                             const char **type,
                             virJSONValuePtr *props);
193

194 195 196 197 198 199 200
char *qemuBuildShmemDevStr(virDomainDefPtr def,
                           virDomainShmemDefPtr shmem,
                           virQEMUCapsPtr qemuCaps);
char *qemuBuildShmemBackendStr(virDomainShmemDefPtr shmem,
                               virQEMUCapsPtr qemuCaps);


201 202 203
int qemuOpenPCIConfig(virDomainHostdevDefPtr dev);

/* Legacy, pre device support */
204
char *qemuBuildUSBHostdevUSBDevStr(virDomainHostdevDefPtr dev);
205
/* Current, best practice */
206 207 208 209 210 211 212 213 214 215
char *qemuBuildUSBHostdevDevStr(virDomainDefPtr def,
                                virDomainHostdevDefPtr dev,
                                virQEMUCapsPtr qemuCaps);

char *qemuBuildSCSIHostdevDrvStr(virConnectPtr conn,
                                 virDomainHostdevDefPtr dev,
                                 virQEMUCapsPtr qemuCaps,
                                 qemuBuildCommandLineCallbacksPtr callbacks)
    ATTRIBUTE_NONNULL(4);
char *qemuBuildSCSIHostdevDevStr(virDomainDefPtr def,
216
                                 virDomainHostdevDefPtr dev,
217
                                 virQEMUCapsPtr qemuCaps);
218

219 220 221 222 223 224
char *qemuBuildHubDevStr(virDomainDefPtr def,
                         virDomainHubDefPtr dev,
                         virQEMUCapsPtr qemuCaps);
char *qemuBuildRedirdevDevStr(virDomainDefPtr def,
                              virDomainRedirdevDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
225
int qemuNetworkIfaceConnect(virDomainDefPtr def,
226
                            virQEMUDriverPtr driver,
227
                            virDomainNetDefPtr net,
228
                            int *tapfd,
229
                            size_t *tapfdSize)
230
    ATTRIBUTE_NONNULL(2);
231

232
int qemuPhysIfaceConnect(virDomainDefPtr def,
233
                         virQEMUDriverPtr driver,
234
                         virDomainNetDefPtr net,
235 236
                         int *tapfd,
                         size_t tapfdSize,
237
                         virNetDevVPortProfileOp vmop);
238

239 240
int qemuOpenVhostNet(virDomainDefPtr def,
                     virDomainNetDefPtr net,
241
                     virQEMUCapsPtr qemuCaps,
242
                     int *vhostfd,
243
                     size_t *vhostfdSize);
244

245 246
int qemuNetworkPrepareDevices(virDomainDefPtr def);

247 248 249 250
/*
 * NB: def->name can be NULL upon return and the caller
 * *must* decide how to fill in a name in this case
 */
251
virDomainDefPtr qemuParseCommandLineString(virCapsPtr qemuCaps,
252
                                           virDomainXMLOptionPtr xmlopt,
253 254 255 256
                                           const char *args,
                                           char **pidfile,
                                           virDomainChrSourceDefPtr *monConfig,
                                           bool *monJSON);
257
virDomainDefPtr qemuParseCommandLinePid(virCapsPtr qemuCaps,
258
                                        virDomainXMLOptionPtr xmlopt,
259
                                        pid_t pid,
260 261 262
                                        char **pidfile,
                                        virDomainChrSourceDefPtr *monConfig,
                                        bool *monJSON);
263

264
int qemuDomainAssignAddresses(virDomainDefPtr def,
265
                              virQEMUCapsPtr qemuCaps,
266 267
                              virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
268
int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
269
                                      virQEMUCapsPtr qemuCaps);
270

271 272 273 274
void qemuDomainReleaseDeviceAddress(virDomainObjPtr vm,
                                    virDomainDeviceInfoPtr info,
                                    const char *devstr);

275

276
int qemuDomainAssignPCIAddresses(virDomainDefPtr def,
277
                                 virQEMUCapsPtr qemuCaps,
278
                                 virDomainObjPtr obj);
279 280 281
virDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
                                                        unsigned int nbuses,
                                                        bool dryRun);
282

J
Ján Tomko 已提交
283
int qemuAssignDevicePCISlots(virDomainDefPtr def,
284
                             virQEMUCapsPtr qemuCaps,
J
Ján Tomko 已提交
285
                             virDomainPCIAddressSetPtr addrs);
286

287
int qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps);
288 289
int qemuDomainNetVLAN(virDomainNetDefPtr def);
int qemuAssignDeviceNetAlias(virDomainDefPtr def, virDomainNetDefPtr net, int idx);
290 291
int qemuAssignDeviceDiskAlias(virDomainDefPtr vmdef,
                              virDomainDiskDefPtr def,
292
                              virQEMUCapsPtr qemuCaps);
293
int qemuAssignDeviceHostdevAlias(virDomainDefPtr def, virDomainHostdevDefPtr hostdev, int idx);
294 295 296 297
int
qemuAssignDeviceControllerAlias(virDomainDefPtr domainDef,
                                virQEMUCapsPtr qemuCaps,
                                virDomainControllerDefPtr controller);
298
int qemuAssignDeviceRedirdevAlias(virDomainDefPtr def, virDomainRedirdevDefPtr redirdev, int idx);
299 300 301
int qemuAssignDeviceChrAlias(virDomainDefPtr def,
                             virDomainChrDefPtr chr,
                             ssize_t idx);
302
int qemuAssignDeviceRNGAlias(virDomainRNGDefPtr rng, size_t idx);
303 304 305 306 307

int
qemuParseKeywords(const char *str,
                  char ***retkeywords,
                  char ***retvalues,
308
                  int *retnkeywords,
309 310
                  int allowEmptyValue);

311 312 313
int qemuGetDriveSourceString(virStorageSourcePtr src,
                             virConnectPtr conn,
                             char **source);
314 315

int qemuCheckDiskConfig(virDomainDiskDefPtr disk);
316 317 318

bool
qemuCheckFips(void);
319 320 321 322 323

bool qemuCheckCCWS390AddressSupport(virDomainDefPtr def,
                                    virDomainDeviceInfo info,
                                    virQEMUCapsPtr qemuCaps,
                                    const char *devicename);
324

325
#endif /* __QEMU_COMMAND_H__*/