提交 eef413e7 编写于 作者: M Marc-André Lureau 提交者: Michal Privoznik

qemu-extdevice: prepare, start and stop slirp-helper

If a slirp-helper is associated with a network interface,
prepare/start/stop the process via qemu-extdevice.
Signed-off-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
上级 8f2a6bac
......@@ -23,6 +23,7 @@
#include "qemu_extdevice.h"
#include "qemu_domain.h"
#include "qemu_tpm.h"
#include "qemu_slirp.h"
#include "viralloc.h"
#include "virlog.h"
......@@ -87,14 +88,24 @@ qemuExtDevicesInitPaths(virQEMUDriverPtr driver,
*/
int
qemuExtDevicesPrepareHost(virQEMUDriverPtr driver,
virDomainDefPtr def)
virDomainObjPtr vm)
{
int ret = 0;
virDomainDefPtr def = vm->def;
size_t i;
if (def->tpm)
ret = qemuExtTPMPrepareHost(driver, def);
if (def->tpm &&
qemuExtTPMPrepareHost(driver, def) < 0)
return -1;
return ret;
for (i = 0; i < def->nnets; i++) {
virDomainNetDefPtr net = def->nets[i];
qemuSlirpPtr slirp = QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp;
if (slirp && qemuSlirpOpen(slirp, driver, def) < 0)
return -1;
}
return 0;
}
......@@ -115,7 +126,9 @@ qemuExtDevicesStart(virQEMUDriverPtr driver,
virDomainObjPtr vm,
bool incomingMigration)
{
virDomainDefPtr def = vm->def;
int ret = 0;
size_t i;
if (qemuExtDevicesInitPaths(driver, vm->def) < 0)
return -1;
......@@ -123,6 +136,15 @@ qemuExtDevicesStart(virQEMUDriverPtr driver,
if (vm->def->tpm)
ret = qemuExtTPMStart(driver, vm, incomingMigration);
for (i = 0; i < def->nnets; i++) {
virDomainNetDefPtr net = def->nets[i];
qemuSlirpPtr slirp = QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp;
if (slirp &&
qemuSlirpStart(slirp, vm, driver, net, false, incomingMigration) < 0)
return -1;
}
return ret;
}
......@@ -131,11 +153,22 @@ void
qemuExtDevicesStop(virQEMUDriverPtr driver,
virDomainObjPtr vm)
{
virDomainDefPtr def = vm->def;
size_t i;
if (qemuExtDevicesInitPaths(driver, vm->def) < 0)
return;
if (vm->def->tpm)
qemuExtTPMStop(driver, vm);
for (i = 0; i < def->nnets; i++) {
virDomainNetDefPtr net = def->nets[i];
qemuSlirpPtr slirp = QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp;
if (slirp)
qemuSlirpStop(slirp, vm, driver, net, false);
}
}
......
......@@ -31,7 +31,7 @@ int qemuExtDeviceLogCommand(virQEMUDriverPtr driver,
ATTRIBUTE_RETURN_CHECK;
int qemuExtDevicesPrepareHost(virQEMUDriverPtr driver,
virDomainDefPtr def)
virDomainObjPtr vm)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
ATTRIBUTE_RETURN_CHECK;
......
......@@ -6619,7 +6619,7 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver,
goto cleanup;
VIR_DEBUG("Preparing external devices");
if (qemuExtDevicesPrepareHost(driver, vm->def) < 0)
if (qemuExtDevicesPrepareHost(driver, vm) < 0)
goto cleanup;
if (qemuProcessPrepareSEVGuestInput(vm) < 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册