qemu_command.h 13.4 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 *migrateFrom,
82
                                   int migrateFd,
83
                                   virDomainSnapshotObjPtr current_snapshot,
84
                                   virNetDevVPortProfileOp vmop,
C
Cole Robinson 已提交
85
                                   qemuBuildCommandLineCallbacksPtr callbacks,
86
                                   bool forXMLToArgv,
87
                                   bool enableFips,
88 89 90
                                   virBitmapPtr nodeset,
                                   size_t *nnicindexes,
                                   int **nicindexes)
91
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(11);
92

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

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

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

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

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

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

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

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

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

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

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

164 165 166 167 168 169 170 171 172 173 174 175 176
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,
177
                               virDomainDefPtr def,
178 179
                               virQEMUCapsPtr qemuCaps);

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

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

197 198 199 200 201 202 203
char *qemuBuildShmemDevStr(virDomainDefPtr def,
                           virDomainShmemDefPtr shmem,
                           virQEMUCapsPtr qemuCaps);
char *qemuBuildShmemBackendStr(virDomainShmemDefPtr shmem,
                               virQEMUCapsPtr qemuCaps);


204 205 206
int qemuOpenPCIConfig(virDomainHostdevDefPtr dev);

/* Legacy, pre device support */
207
char *qemuBuildUSBHostdevUSBDevStr(virDomainHostdevDefPtr dev);
208
/* Current, best practice */
209 210 211 212 213 214 215 216 217 218
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,
219
                                 virDomainHostdevDefPtr dev,
220
                                 virQEMUCapsPtr qemuCaps);
221

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

235
int qemuPhysIfaceConnect(virDomainDefPtr def,
236
                         virQEMUDriverPtr driver,
237
                         virDomainNetDefPtr net,
238
                         virNetDevVPortProfileOp vmop);
239

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

246 247
int qemuNetworkPrepareDevices(virDomainDefPtr def);

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

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

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

276

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

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

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

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

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

int qemuCheckDiskConfig(virDomainDiskDefPtr disk);
317 318 319

bool
qemuCheckFips(void);
320 321 322 323 324

bool qemuCheckCCWS390AddressSupport(virDomainDefPtr def,
                                    virDomainDeviceInfo info,
                                    virQEMUCapsPtr qemuCaps,
                                    const char *devicename);
325
#endif /* __QEMU_COMMAND_H__*/