mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-10 14:57:42 +00:00
a56f0168d5
This consists of (1) adding the necessary args to the qemu commandline netdev option, and (2) starting a passt process prior to starting qemu, and making sure that it is terminated when it's no longer needed. Under normal circumstances, passt will terminate itself as soon as qemu closes its socket, but in case of some error where qemu is never started, or fails to startup completely, we need to terminate passt manually. Signed-off-by: Laine Stump <laine@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
247 lines
8.5 KiB
C
247 lines
8.5 KiB
C
/*
|
|
* qemu_command.h: QEMU command generation
|
|
*
|
|
* Copyright (C) 2006-2016 Red Hat, Inc.
|
|
* 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
|
|
* License along with this library. If not, see
|
|
* <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "domain_conf.h"
|
|
#include "vircommand.h"
|
|
#include "virenum.h"
|
|
#include "qemu_block.h"
|
|
#include "qemu_conf.h"
|
|
#include "qemu_domain.h"
|
|
#include "qemu_capabilities.h"
|
|
|
|
/* Config type for XML import/export conversions */
|
|
#define QEMU_CONFIG_FORMAT_ARGV "qemu-argv"
|
|
|
|
#define QEMU_FSDEV_HOST_PREFIX "fsdev-"
|
|
|
|
#define QEMU_BLOCK_IOTUNE_MAX 1000000000000000LL
|
|
|
|
VIR_ENUM_DECL(qemuVideo);
|
|
VIR_ENUM_DECL(qemuSoundCodec);
|
|
|
|
virCommand *qemuBuildCommandLine(virDomainObj *vm,
|
|
const char *migrateURI,
|
|
virDomainMomentObj *snapshot,
|
|
virNetDevVPortProfileOp vmop,
|
|
size_t *nnicindexes,
|
|
int **nicindexes);
|
|
|
|
/* Generate the object properties for pr-manager */
|
|
virJSONValue *qemuBuildPRManagerInfoProps(virStorageSource *src);
|
|
virJSONValue *qemuBuildPRManagedManagerInfoProps(qemuDomainObjPrivate *priv);
|
|
|
|
virJSONValue *qemuBuildDBusVMStateInfoProps(virQEMUDriver *driver,
|
|
virDomainObj *vm);
|
|
|
|
/* Generate the object properties for a secret */
|
|
int qemuBuildSecretInfoProps(qemuDomainSecretInfo *secinfo,
|
|
virJSONValue **propsret);
|
|
|
|
/* Generate the object properties for a tls-creds-x509 */
|
|
int qemuBuildTLSx509BackendProps(const char *tlspath,
|
|
bool isListen,
|
|
bool verifypeer,
|
|
const char *alias,
|
|
const char *secalias,
|
|
virJSONValue **propsret);
|
|
|
|
/* Open a UNIX socket for chardev FD passing */
|
|
int
|
|
qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev) G_NO_INLINE;
|
|
|
|
virJSONValue *
|
|
qemuBuildChrDeviceProps(const virDomainDef *vmdef,
|
|
virDomainChrDef *chr,
|
|
virQEMUCaps *qemuCaps);
|
|
|
|
virJSONValue *
|
|
qemuBuildChannelGuestfwdNetdevProps(virDomainChrDef *chr);
|
|
|
|
virJSONValue *
|
|
qemuBuildHostNetProps(virDomainObj *vm,
|
|
virDomainNetDef *net);
|
|
|
|
int
|
|
qemuBuildInterfaceConnect(virDomainObj *vm,
|
|
virDomainNetDef *net,
|
|
virNetDevVPortProfileOp vmop);
|
|
|
|
/* Current, best practice */
|
|
virJSONValue *
|
|
qemuBuildNicDevProps(virDomainDef *def,
|
|
virDomainNetDef *net,
|
|
virQEMUCaps *qemuCaps);
|
|
|
|
char *qemuDeviceDriveHostAlias(virDomainDiskDef *disk);
|
|
bool qemuDiskBusIsSD(int bus);
|
|
|
|
int
|
|
qemuBuildStorageSourceAttachPrepareCommon(virStorageSource *src,
|
|
qemuBlockStorageSourceAttachData *data);
|
|
|
|
|
|
qemuBlockStorageSourceChainData *
|
|
qemuBuildStorageSourceChainAttachPrepareDrive(virDomainDiskDef *disk);
|
|
|
|
|
|
qemuBlockStorageSourceChainData *
|
|
qemuBuildStorageSourceChainAttachPrepareChardev(virDomainDiskDef *disk);
|
|
|
|
|
|
qemuBlockStorageSourceChainData *
|
|
qemuBuildStorageSourceChainAttachPrepareBlockdev(virStorageSource *top);
|
|
|
|
qemuBlockStorageSourceChainData *
|
|
qemuBuildStorageSourceChainAttachPrepareBlockdevTop(virStorageSource *top,
|
|
virStorageSource *backingStore);
|
|
|
|
virJSONValue *
|
|
qemuBuildDiskDeviceProps(const virDomainDef *def,
|
|
virDomainDiskDef *disk,
|
|
virQEMUCaps *qemuCaps);
|
|
|
|
virJSONValue *
|
|
qemuBuildVHostUserFsDevProps(virDomainFSDef *fs,
|
|
const virDomainDef *def,
|
|
const char *chardev_alias,
|
|
qemuDomainObjPrivate *priv);
|
|
|
|
/* Current, best practice */
|
|
int
|
|
qemuBuildControllerDevProps(const virDomainDef *domainDef,
|
|
virDomainControllerDef *def,
|
|
virQEMUCaps *qemuCaps,
|
|
virJSONValue **devprops);
|
|
|
|
int qemuBuildMemoryBackendProps(virJSONValue **backendProps,
|
|
const char *alias,
|
|
virQEMUDriverConfig *cfg,
|
|
qemuDomainObjPrivate *priv,
|
|
const virDomainDef *def,
|
|
const virDomainMemoryDef *mem,
|
|
bool force,
|
|
bool systemMemory);
|
|
|
|
virJSONValue *
|
|
qemuBuildMemoryDeviceProps(virQEMUDriverConfig *cfg,
|
|
qemuDomainObjPrivate *priv,
|
|
const virDomainDef *def,
|
|
const virDomainMemoryDef *mem);
|
|
|
|
int
|
|
qemuBuildThreadContextProps(virJSONValue **tcProps,
|
|
virJSONValue **memProps,
|
|
qemuDomainObjPrivate *priv);
|
|
|
|
/* Current, best practice */
|
|
virJSONValue *
|
|
qemuBuildPCIHostdevDevProps(const virDomainDef *def,
|
|
virDomainHostdevDef *dev);
|
|
|
|
virJSONValue *
|
|
qemuBuildRNGDevProps(const virDomainDef *def,
|
|
virDomainRNGDef *dev,
|
|
virQEMUCaps *qemuCaps);
|
|
int qemuBuildRNGBackendProps(virDomainRNGDef *rng,
|
|
virJSONValue **props);
|
|
|
|
/* Current, best practice */
|
|
virJSONValue *
|
|
qemuBuildUSBHostdevDevProps(const virDomainDef *def,
|
|
virDomainHostdevDef *dev,
|
|
virQEMUCaps *qemuCaps);
|
|
|
|
virJSONValue *
|
|
qemuBuildSCSIHostdevDevProps(const virDomainDef *def,
|
|
virDomainHostdevDef *dev,
|
|
const char *backendAlias);
|
|
|
|
qemuBlockStorageSourceAttachData *
|
|
qemuBuildHostdevSCSIAttachPrepare(virDomainHostdevDef *hostdev,
|
|
const char **backendAlias,
|
|
virQEMUCaps *qemuCaps);
|
|
qemuBlockStorageSourceAttachData *
|
|
qemuBuildHostdevSCSIDetachPrepare(virDomainHostdevDef *hostdev,
|
|
virQEMUCaps *qemuCaps);
|
|
|
|
virJSONValue *
|
|
qemuBuildSCSIVHostHostdevDevProps(const virDomainDef *def,
|
|
virDomainHostdevDef *dev,
|
|
virQEMUCaps *qemuCaps,
|
|
char *vhostfdName);
|
|
|
|
virJSONValue *
|
|
qemuBuildHostdevMediatedDevProps(const virDomainDef *def,
|
|
virDomainHostdevDef *dev);
|
|
|
|
virJSONValue *
|
|
qemuBuildRedirdevDevProps(const virDomainDef *def,
|
|
virDomainRedirdevDef *dev);
|
|
|
|
virJSONValue *
|
|
qemuBuildZPCIDevProps(virDomainDeviceInfo *dev);
|
|
|
|
int qemuNetworkPrepareDevices(virDomainDef *def);
|
|
|
|
bool
|
|
qemuDiskConfigBlkdeviotuneEnabled(virDomainDiskDef *disk);
|
|
|
|
virJSONValue *qemuBuildHotpluggableCPUProps(const virDomainVcpuDef *vcpu)
|
|
ATTRIBUTE_NONNULL(1);
|
|
|
|
virJSONValue *qemuBuildShmemBackendMemProps(virDomainShmemDef *shmem)
|
|
ATTRIBUTE_NONNULL(1);
|
|
|
|
virJSONValue *
|
|
qemuBuildShmemDevProps(virDomainDef *def,
|
|
virDomainShmemDef *shmem);
|
|
|
|
virJSONValue *
|
|
qemuBuildWatchdogDevProps(const virDomainDef *def,
|
|
virDomainWatchdogDef *dev);
|
|
|
|
virJSONValue *
|
|
qemuBuildInputVirtioDevProps(const virDomainDef *def,
|
|
virDomainInputDef *dev,
|
|
virQEMUCaps *qemuCaps);
|
|
|
|
virJSONValue *
|
|
qemuBuildInputUSBDevProps(const virDomainDef *def,
|
|
virDomainInputDef *dev);
|
|
|
|
virJSONValue *
|
|
qemuBuildVsockDevProps(virDomainDef *def,
|
|
virDomainVsockDef *vsock,
|
|
virQEMUCaps *qemuCaps,
|
|
const char *fdprefix);
|
|
|
|
/* this function is exported so that tests can mock the FDs */
|
|
int
|
|
qemuBuildTPMOpenBackendFDs(const char *tpmdev,
|
|
int *tpmfd,
|
|
int *cancelfd)
|
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) G_NO_INLINE;
|
|
|
|
const char * qemuAudioDriverTypeToString(virDomainAudioType type);
|
|
virDomainAudioType qemuAudioDriverTypeFromString(const char *str);
|