qemu_command.h 11.5 KB
Newer Older
1 2 3
/*
 * qemu_command.h: QEMU command generation
 *
4
 * Copyright (C) 2006-2013 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 27
 *
 * Author: Daniel P. Berrange <berrange@redhat.com>
 */

#ifndef __QEMU_COMMAND_H__
# define __QEMU_COMMAND_H__

# include "domain_conf.h"
28
# include "vircommand.h"
29 30
# include "capabilities.h"
# include "qemu_conf.h"
31
# include "qemu_domain.h"
32
# include "qemu_capabilities.h"
33 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_VIRTIO_SERIAL_PREFIX "virtio-serial"
# define QEMU_FSDEV_HOST_PREFIX "fsdev-"

41 42 43 44 45 46 47
/* These are only defaults, they can be changed now in qemu.conf and
 * explicitely specified port is checked against these two (makes
 * 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 57 58 59 60 61 62 63
typedef struct _qemuBuildCommandLineCallbacks qemuBuildCommandLineCallbacks;
typedef qemuBuildCommandLineCallbacks *qemuBuildCommandLineCallbacksPtr;
struct _qemuBuildCommandLineCallbacks {
    char * (*qemuGetSCSIDeviceSgName) (const char *adapter,
                                       unsigned int bus,
                                       unsigned int target,
                                       unsigned int unit);
};

extern qemuBuildCommandLineCallbacks buildCommandLineCallbacks;
64

65
virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
66
                                   virQEMUDriverPtr driver,
67
                                   virDomainDefPtr def,
68
                                   virDomainChrSourceDefPtr monitor_chr,
69
                                   bool monitor_json,
70
                                   virQEMUCapsPtr qemuCaps,
71
                                   const char *migrateFrom,
72
                                   int migrateFd,
73
                                   virDomainSnapshotObjPtr current_snapshot,
74 75 76
                                   enum virNetDevVPortProfileOp vmop,
                                   qemuBuildCommandLineCallbacksPtr callbacks)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(11);
77

78 79 80
/* Generate string for arch-specific '-device' parameter */
char *
qemuBuildChrDeviceStr (virDomainChrDefPtr serial,
81
                       virQEMUCapsPtr qemuCaps,
82
                       virArch arch,
83 84
                       char *machine);

85 86
/* With vlan == -1, use netdev syntax, else old hostnet */
char * qemuBuildHostNetStr(virDomainNetDefPtr net,
87
                           virQEMUDriverPtr driver,
88 89 90 91 92 93 94 95 96 97 98 99
                           char type_sep,
                           int vlan,
                           const char *tapfd,
                           const char *vhostfd);

/* Legacy, pre device support */
char * qemuBuildNicStr(virDomainNetDefPtr net,
                       const char *prefix,
                       int vlan);

/* Current, best practice */
char * qemuBuildNicDevStr(virDomainNetDefPtr net,
100
                          int vlan,
101
                          int bootindex,
102
                          virQEMUCapsPtr qemuCaps);
103 104

char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk,
105
                               virQEMUCapsPtr qemuCaps);
106 107

/* Both legacy & current support */
108 109
char *qemuBuildDriveStr(virConnectPtr conn,
                        virDomainDiskDefPtr disk,
110
                        bool bootable,
111
                        virQEMUCapsPtr qemuCaps);
112
char *qemuBuildFSStr(virDomainFSDefPtr fs,
113
                     virQEMUCapsPtr qemuCaps);
114 115

/* Current, best practice */
116 117
char * qemuBuildDriveDevStr(virDomainDefPtr def,
                            virDomainDiskDefPtr disk,
118
                            int bootindex,
119
                            virQEMUCapsPtr qemuCaps);
120
char * qemuBuildFSDevStr(virDomainFSDefPtr fs,
121
                         virQEMUCapsPtr qemuCaps);
122
/* Current, best practice */
123 124
char * qemuBuildControllerDevStr(virDomainDefPtr domainDef,
                                 virDomainControllerDefPtr def,
125
                                 virQEMUCapsPtr qemuCaps,
126
                                 int *nusbcontroller);
127

128
char * qemuBuildWatchdogDevStr(virDomainWatchdogDefPtr dev,
129
                               virQEMUCapsPtr qemuCaps);
130

131
char * qemuBuildMemballoonDevStr(virDomainMemballoonDefPtr dev,
132
                                 virQEMUCapsPtr qemuCaps);
133

134
char * qemuBuildUSBInputDevStr(virDomainInputDefPtr dev,
135
                               virQEMUCapsPtr qemuCaps);
136

137
char * qemuBuildSoundDevStr(virDomainSoundDefPtr sound,
138
                            virQEMUCapsPtr qemuCaps);
139 140 141 142 143

/* Legacy, pre device support */
char * qemuBuildPCIHostdevPCIDevStr(virDomainHostdevDefPtr dev);
/* Current, best practice */
char * qemuBuildPCIHostdevDevStr(virDomainHostdevDefPtr dev,
144
                                 const char *configfd,
145
                                 virQEMUCapsPtr qemuCaps);
146 147 148 149 150 151

int qemuOpenPCIConfig(virDomainHostdevDefPtr dev);

/* Legacy, pre device support */
char * qemuBuildUSBHostdevUsbDevStr(virDomainHostdevDefPtr dev);
/* Current, best practice */
152
char * qemuBuildUSBHostdevDevStr(virDomainHostdevDefPtr dev,
153
                                 virQEMUCapsPtr qemuCaps);
154

155
char * qemuBuildSCSIHostdevDrvStr(virDomainHostdevDefPtr dev,
156 157 158
                                  virQEMUCapsPtr qemuCaps,
                                  qemuBuildCommandLineCallbacksPtr callbacks)
    ATTRIBUTE_NONNULL(3);
159 160 161 162
char * qemuBuildSCSIHostdevDevStr(virDomainDefPtr def,
                                  virDomainHostdevDefPtr dev,
                                  virQEMUCapsPtr qemuCaps);

163
char * qemuBuildHubDevStr(virDomainHubDefPtr dev, virQEMUCapsPtr qemuCaps);
164 165
char * qemuBuildRedirdevDevStr(virDomainDefPtr def,
                               virDomainRedirdevDefPtr dev,
166
                               virQEMUCapsPtr qemuCaps);
167

168 169
int qemuNetworkIfaceConnect(virDomainDefPtr def,
                            virConnectPtr conn,
170
                            virQEMUDriverPtr driver,
171
                            virDomainNetDefPtr net,
172
                            virQEMUCapsPtr qemuCaps)
173
    ATTRIBUTE_NONNULL(2);
174

175
int qemuPhysIfaceConnect(virDomainDefPtr def,
176
                         virQEMUDriverPtr driver,
177
                         virDomainNetDefPtr net,
178
                         virQEMUCapsPtr qemuCaps,
179
                         enum virNetDevVPortProfileOp vmop);
180

181 182
int qemuOpenVhostNet(virDomainDefPtr def,
                     virDomainNetDefPtr net,
183
                     virQEMUCapsPtr qemuCaps,
184 185
                     int *vhostfd);

186 187
int qemuNetworkPrepareDevices(virDomainDefPtr def);

188 189 190 191
/*
 * NB: def->name can be NULL upon return and the caller
 * *must* decide how to fill in a name in this case
 */
192
virDomainDefPtr qemuParseCommandLine(virCapsPtr qemuCaps,
193
                                     virDomainXMLOptionPtr xmlopt,
194
                                     const char **progenv,
195 196 197 198
                                     const char **progargv,
                                     char **pidfile,
                                     virDomainChrSourceDefPtr *monConfig,
                                     bool *monJSON);
199
virDomainDefPtr qemuParseCommandLineString(virCapsPtr qemuCaps,
200
                                           virDomainXMLOptionPtr xmlopt,
201 202 203 204
                                           const char *args,
                                           char **pidfile,
                                           virDomainChrSourceDefPtr *monConfig,
                                           bool *monJSON);
205
virDomainDefPtr qemuParseCommandLinePid(virCapsPtr qemuCaps,
206
                                        virDomainXMLOptionPtr xmlopt,
207
                                        pid_t pid,
208 209 210
                                        char **pidfile,
                                        virDomainChrSourceDefPtr *monConfig,
                                        bool *monJSON);
211

212
int qemuDomainAssignAddresses(virDomainDefPtr def,
213
                              virQEMUCapsPtr qemuCaps,
214 215
                              virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
216
int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
217
                                      virQEMUCapsPtr qemuCaps);
218

219
int qemuDomainAssignPCIAddresses(virDomainDefPtr def,
220
                                 virQEMUCapsPtr qemuCaps,
221
                                 virDomainObjPtr obj);
222
qemuDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
223 224
                                                         unsigned int nbuses,
                                                         bool dryRun);
225
int qemuDomainPCIAddressReserveSlot(qemuDomainPCIAddressSetPtr addrs,
226
                                    virDevicePCIAddressPtr addr);
227
int qemuDomainPCIAddressReserveAddr(qemuDomainPCIAddressSetPtr addrs,
228
                                    virDevicePCIAddressPtr addr);
229 230 231 232 233
int qemuDomainPCIAddressSetNextAddr(qemuDomainPCIAddressSetPtr addrs,
                                    virDomainDeviceInfoPtr dev);
int qemuDomainPCIAddressEnsureAddr(qemuDomainPCIAddressSetPtr addrs,
                                   virDomainDeviceInfoPtr dev);
int qemuDomainPCIAddressReleaseAddr(qemuDomainPCIAddressSetPtr addrs,
234 235 236
                                    virDevicePCIAddressPtr addr);
int qemuDomainPCIAddressReleaseSlot(qemuDomainPCIAddressSetPtr addrs,
                                    virDevicePCIAddressPtr addr);
237 238

void qemuDomainPCIAddressSetFree(qemuDomainPCIAddressSetPtr addrs);
239
int  qemuAssignDevicePCISlots(virDomainDefPtr def,
240
                              virQEMUCapsPtr qemuCaps,
241
                              qemuDomainPCIAddressSetPtr addrs);
242

243 244 245 246 247 248
int qemuDomainCCWAddressReleaseAddr(qemuDomainCCWAddressSetPtr addrs,
                                    virDomainDeviceInfoPtr dev);
int qemuDomainCCWAddressAssign(virDomainDeviceInfoPtr dev, qemuDomainCCWAddressSetPtr addrs,
                               bool autoassign);
void qemuDomainCCWAddressSetFree(qemuDomainCCWAddressSetPtr addrs);

249
int qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps);
250 251
int qemuDomainNetVLAN(virDomainNetDefPtr def);
int qemuAssignDeviceNetAlias(virDomainDefPtr def, virDomainNetDefPtr net, int idx);
252 253
int qemuAssignDeviceDiskAlias(virDomainDefPtr vmdef,
                              virDomainDiskDefPtr def,
254
                              virQEMUCapsPtr qemuCaps);
255
int qemuAssignDeviceHostdevAlias(virDomainDefPtr def, virDomainHostdevDefPtr hostdev, int idx);
256
int qemuAssignDeviceControllerAlias(virDomainControllerDefPtr controller);
257
int qemuAssignDeviceRedirdevAlias(virDomainDefPtr def, virDomainRedirdevDefPtr redirdev, int idx);
258 259 260 261 262 263 264 265

int
qemuParseKeywords(const char *str,
                  char ***retkeywords,
                  char ***retvalues,
                  int allowEmptyValue);

#endif /* __QEMU_COMMAND_H__*/