qemu_command.h 9.5 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 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_domain_address.h"
34
# include "qemu_capabilities.h"
35
# include "logging/log_manager.h"
36 37 38 39 40 41 42

/* 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-"

43
VIR_ENUM_DECL(qemuVideo)
44

45 46 47
typedef struct _qemuBuildCommandLineCallbacks qemuBuildCommandLineCallbacks;
typedef qemuBuildCommandLineCallbacks *qemuBuildCommandLineCallbacksPtr;
struct _qemuBuildCommandLineCallbacks {
48 49 50 51
    char *(*qemuGetSCSIDeviceSgName) (const char *sysfs_prefix,
                                      const char *adapter,
                                      unsigned int bus,
                                      unsigned int target,
52
                                      unsigned long long unit);
53 54 55
};

extern qemuBuildCommandLineCallbacks buildCommandLineCallbacks;
56

57 58 59 60
char *qemuBuildObjectCommandlineFromJSON(const char *type,
                                         const char *alias,
                                         virJSONValuePtr props);

61
virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
62
                                   virQEMUDriverPtr driver,
63
                                   virLogManagerPtr logManager,
64
                                   virDomainDefPtr def,
65
                                   virDomainChrSourceDefPtr monitor_chr,
66
                                   bool monitor_json,
67
                                   virQEMUCapsPtr qemuCaps,
68
                                   const char *migrateURI,
69
                                   virDomainSnapshotObjPtr snapshot,
70
                                   virNetDevVPortProfileOp vmop,
C
Cole Robinson 已提交
71
                                   qemuBuildCommandLineCallbacksPtr callbacks,
72
                                   bool standalone,
73
                                   bool enableFips,
74 75
                                   virBitmapPtr nodeset,
                                   size_t *nnicindexes,
76 77 78
                                   int **nicindexes,
                                   const char *domainLibDir,
                                   const char *domainChannelTargetDir)
79 80
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(11)
    ATTRIBUTE_NONNULL(17) ATTRIBUTE_NONNULL(18);
81

82 83 84 85 86 87
/* Generate '-device' string for chardev device */
int
qemuBuildChrDeviceStr(char **deviceStr,
                      virDomainDefPtr vmdef,
                      virDomainChrDefPtr chr,
                      virQEMUCapsPtr qemuCaps);
88

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

/* Legacy, pre device support */
100 101 102
char *qemuBuildNicStr(virDomainNetDefPtr net,
                      const char *prefix,
                      int vlan);
103 104

/* Current, best practice */
105 106 107 108
char *qemuBuildNicDevStr(virDomainDefPtr def,
                         virDomainNetDefPtr net,
                         int vlan,
                         int bootindex,
109
                         size_t vhostfdSize,
110
                         virQEMUCapsPtr qemuCaps);
111 112

char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk,
113
                               virQEMUCapsPtr qemuCaps);
114 115

/* Both legacy & current support */
116 117
char *qemuBuildDriveStr(virConnectPtr conn,
                        virDomainDiskDefPtr disk,
118
                        bool bootable,
119
                        virQEMUCapsPtr qemuCaps);
120
char *qemuBuildFSStr(virDomainFSDefPtr fs,
121
                     virQEMUCapsPtr qemuCaps);
122 123

/* Current, best practice */
124 125 126 127 128 129 130
char *qemuBuildDriveDevStr(virDomainDefPtr def,
                           virDomainDiskDefPtr disk,
                           int bootindex,
                           virQEMUCapsPtr qemuCaps);
char *qemuBuildFSDevStr(virDomainDefPtr domainDef,
                        virDomainFSDefPtr fs,
                        virQEMUCapsPtr qemuCaps);
131
/* Current, best practice */
132 133 134 135
char *qemuBuildControllerDevStr(virDomainDefPtr domainDef,
                                virDomainControllerDefPtr def,
                                virQEMUCapsPtr qemuCaps,
                                int *nusbcontroller);
136

137 138 139
char *qemuBuildWatchdogDevStr(virDomainDefPtr domainDef,
                              virDomainWatchdogDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
140

141 142 143
char *qemuBuildMemballoonDevStr(virDomainDefPtr domainDef,
                                virDomainMemballoonDefPtr dev,
                                virQEMUCapsPtr qemuCaps);
144

145 146 147
char *qemuBuildUSBInputDevStr(virDomainDefPtr domainDef,
                              virDomainInputDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
148

149 150 151
char *qemuBuildSoundDevStr(virDomainDefPtr domainDef,
                           virDomainSoundDefPtr sound,
                           virQEMUCapsPtr qemuCaps);
152

153 154 155 156 157 158 159 160 161 162 163 164
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);

165
char *qemuBuildMemoryDeviceStr(virDomainMemoryDefPtr mem);
166

167
/* Legacy, pre device support */
168 169
char *qemuBuildPCIHostdevPCIDevStr(virDomainHostdevDefPtr dev,
                                   virQEMUCapsPtr qemuCaps);
170
/* Current, best practice */
171 172
char *qemuBuildPCIHostdevDevStr(virDomainDefPtr def,
                                virDomainHostdevDefPtr dev,
173
                                int bootIndex,
174 175
                                const char *configfd,
                                virQEMUCapsPtr qemuCaps);
176

177 178 179
char *qemuBuildRNGDevStr(virDomainDefPtr def,
                         virDomainRNGDefPtr dev,
                         virQEMUCapsPtr qemuCaps);
180 181 182 183
int qemuBuildRNGBackendProps(virDomainRNGDefPtr rng,
                             virQEMUCapsPtr qemuCaps,
                             const char **type,
                             virJSONValuePtr *props);
184

185 186 187
char *qemuBuildShmemDevStr(virDomainDefPtr def,
                           virDomainShmemDefPtr shmem,
                           virQEMUCapsPtr qemuCaps);
188 189 190 191
char *qemuBuildShmemBackendStr(virLogManagerPtr logManager,
                               virCommandPtr cmd,
                               virDomainDefPtr def,
                               virDomainShmemDefPtr shmem,
192 193 194
                               virQEMUCapsPtr qemuCaps);


195 196 197
int qemuOpenPCIConfig(virDomainHostdevDefPtr dev);

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

213 214 215 216 217 218
char *qemuBuildHubDevStr(virDomainDefPtr def,
                         virDomainHubDefPtr dev,
                         virQEMUCapsPtr qemuCaps);
char *qemuBuildRedirdevDevStr(virDomainDefPtr def,
                              virDomainRedirdevDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
219

220 221
int qemuNetworkPrepareDevices(virDomainDefPtr def);

222 223 224
int qemuGetDriveSourceString(virStorageSourcePtr src,
                             virConnectPtr conn,
                             char **source);
225 226

int qemuCheckDiskConfig(virDomainDiskDefPtr disk);
227 228 229

bool
qemuCheckFips(void);
230 231 232 233 234

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

236
#endif /* __QEMU_COMMAND_H__*/