qemu_command.h 12.9 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 41

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

# define QEMU_DRIVE_HOST_PREFIX "drive-"
# define QEMU_VIRTIO_SERIAL_PREFIX "virtio-serial"
# define QEMU_FSDEV_HOST_PREFIX "fsdev-"

42
/* These are only defaults, they can be changed now in qemu.conf and
N
Nehal J Wani 已提交
43
 * explicitly specified port is checked against these two (makes
44 45 46 47 48
 * 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.
 */
49 50
# define QEMU_REMOTE_PORT_MIN  5900
# define QEMU_REMOTE_PORT_MAX  65535
51

52 53 54
# define QEMU_WEBSOCKET_PORT_MIN  5700
# define QEMU_WEBSOCKET_PORT_MAX  65535

55 56 57
# define QEMU_MIGRATION_PORT_MIN 49152
# define QEMU_MIGRATION_PORT_MAX 49215

58 59
# define QEMU_QXL_VGAMEM_DEFAULT 16 * 1024

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

extern qemuBuildCommandLineCallbacks buildCommandLineCallbacks;
71

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

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

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

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

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

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

char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk,
125
                               virQEMUCapsPtr qemuCaps);
126 127

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

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

149 150 151
char *qemuBuildWatchdogDevStr(virDomainDefPtr domainDef,
                              virDomainWatchdogDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
152

153 154 155
char *qemuBuildMemballoonDevStr(virDomainDefPtr domainDef,
                                virDomainMemballoonDefPtr dev,
                                virQEMUCapsPtr qemuCaps);
156

157 158 159
char *qemuBuildUSBInputDevStr(virDomainDefPtr domainDef,
                              virDomainInputDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
160

161 162 163
char *qemuBuildSoundDevStr(virDomainDefPtr domainDef,
                           virDomainSoundDefPtr sound,
                           virQEMUCapsPtr qemuCaps);
164

165 166 167 168 169 170 171 172 173 174 175 176 177
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);

char *qemuBuildMemoryDeviceStr(virDomainMemoryDefPtr mem,
178
                               virDomainDefPtr def,
179 180
                               virQEMUCapsPtr qemuCaps);

181
/* Legacy, pre device support */
182 183
char *qemuBuildPCIHostdevPCIDevStr(virDomainHostdevDefPtr dev,
                                   virQEMUCapsPtr qemuCaps);
184
/* Current, best practice */
185 186 187 188
char *qemuBuildPCIHostdevDevStr(virDomainDefPtr def,
                                virDomainHostdevDefPtr dev,
                                const char *configfd,
                                virQEMUCapsPtr qemuCaps);
189

190 191 192
char *qemuBuildRNGDevStr(virDomainDefPtr def,
                         virDomainRNGDefPtr dev,
                         virQEMUCapsPtr qemuCaps);
193 194 195 196
int qemuBuildRNGBackendProps(virDomainRNGDefPtr rng,
                             virQEMUCapsPtr qemuCaps,
                             const char **type,
                             virJSONValuePtr *props);
197

198 199 200
int qemuOpenPCIConfig(virDomainHostdevDefPtr dev);

/* Legacy, pre device support */
201
char *qemuBuildUSBHostdevUSBDevStr(virDomainHostdevDefPtr dev);
202
/* Current, best practice */
203 204 205 206 207 208 209 210 211 212
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,
213
                                 virDomainHostdevDefPtr dev,
214
                                 virQEMUCapsPtr qemuCaps);
215

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

230
int qemuPhysIfaceConnect(virDomainDefPtr def,
231
                         virQEMUDriverPtr driver,
232
                         virDomainNetDefPtr net,
233
                         virQEMUCapsPtr qemuCaps,
234
                         virNetDevVPortProfileOp vmop);
235

236 237
int qemuOpenVhostNet(virDomainDefPtr def,
                     virDomainNetDefPtr net,
238
                     virQEMUCapsPtr qemuCaps,
239
                     int *vhostfd,
240
                     size_t *vhostfdSize);
241

242 243
int qemuNetworkPrepareDevices(virDomainDefPtr def);

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

261
int qemuDomainAssignAddresses(virDomainDefPtr def,
262
                              virQEMUCapsPtr qemuCaps,
263 264
                              virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
265
int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
266
                                      virQEMUCapsPtr qemuCaps);
267

268 269 270 271
void qemuDomainReleaseDeviceAddress(virDomainObjPtr vm,
                                    virDomainDeviceInfoPtr info,
                                    const char *devstr);

272

273
int qemuDomainAssignPCIAddresses(virDomainDefPtr def,
274
                                 virQEMUCapsPtr qemuCaps,
275
                                 virDomainObjPtr obj);
276 277 278
virDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
                                                        unsigned int nbuses,
                                                        bool dryRun);
279

J
Ján Tomko 已提交
280 281
int qemuAssignDevicePCISlots(virDomainDefPtr def,
                             virDomainPCIAddressSetPtr addrs);
282

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

int
qemuParseKeywords(const char *str,
                  char ***retkeywords,
                  char ***retvalues,
301
                  int *retnkeywords,
302 303
                  int allowEmptyValue);

304 305 306
int qemuGetDriveSourceString(virStorageSourcePtr src,
                             virConnectPtr conn,
                             char **source);
307 308

int qemuCheckDiskConfig(virDomainDiskDefPtr disk);
309 310 311

bool
qemuCheckFips(void);
312
#endif /* __QEMU_COMMAND_H__*/