qemu_command.h 9.3 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 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_FSDEV_HOST_PREFIX "fsdev-"

42
VIR_ENUM_DECL(qemuVideo)
43

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

extern qemuBuildCommandLineCallbacks buildCommandLineCallbacks;
55

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

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

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

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

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

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

char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk,
111
                               virQEMUCapsPtr qemuCaps);
112 113

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

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

135 136 137
char *qemuBuildWatchdogDevStr(virDomainDefPtr domainDef,
                              virDomainWatchdogDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
138

139 140 141
char *qemuBuildMemballoonDevStr(virDomainDefPtr domainDef,
                                virDomainMemballoonDefPtr dev,
                                virQEMUCapsPtr qemuCaps);
142

143 144 145
char *qemuBuildUSBInputDevStr(virDomainDefPtr domainDef,
                              virDomainInputDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
146

147 148 149
char *qemuBuildSoundDevStr(virDomainDefPtr domainDef,
                           virDomainSoundDefPtr sound,
                           virQEMUCapsPtr qemuCaps);
150

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

163
char *qemuBuildMemoryDeviceStr(virDomainMemoryDefPtr mem);
164

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

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

183 184 185 186 187 188 189
char *qemuBuildShmemDevStr(virDomainDefPtr def,
                           virDomainShmemDefPtr shmem,
                           virQEMUCapsPtr qemuCaps);
char *qemuBuildShmemBackendStr(virDomainShmemDefPtr shmem,
                               virQEMUCapsPtr qemuCaps);


190 191 192
int qemuOpenPCIConfig(virDomainHostdevDefPtr dev);

/* Legacy, pre device support */
193
char *qemuBuildUSBHostdevUSBDevStr(virDomainHostdevDefPtr dev);
194
/* Current, best practice */
195 196 197 198 199 200 201 202 203 204
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,
205
                                 virDomainHostdevDefPtr dev,
206
                                 virQEMUCapsPtr qemuCaps);
207

208 209 210 211 212 213
char *qemuBuildHubDevStr(virDomainDefPtr def,
                         virDomainHubDefPtr dev,
                         virQEMUCapsPtr qemuCaps);
char *qemuBuildRedirdevDevStr(virDomainDefPtr def,
                              virDomainRedirdevDefPtr dev,
                              virQEMUCapsPtr qemuCaps);
214

215 216
int qemuNetworkPrepareDevices(virDomainDefPtr def);

217 218 219
int qemuGetDriveSourceString(virStorageSourcePtr src,
                             virConnectPtr conn,
                             char **source);
220 221

int qemuCheckDiskConfig(virDomainDiskDefPtr disk);
222 223 224

bool
qemuCheckFips(void);
225 226 227 228 229

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

231
#endif /* __QEMU_COMMAND_H__*/