#include "qemu_extdevice.h"
#include "qemu_domain.h"
#include "qemu_tpm.h"
+#include "qemu_slirp.h"
#include "viralloc.h"
#include "virlog.h"
*/
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;
}
virDomainObjPtr vm,
bool incomingMigration)
{
+ virDomainDefPtr def = vm->def;
int ret = 0;
+ size_t i;
if (qemuExtDevicesInitPaths(driver, vm->def) < 0)
return -1;
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;
}
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);
+ }
}