return -1;
}
+ for (i = 0; i < def->nnets; i++) {
+ virDomainNetDefPtr net = def->nets[i];
+ qemuSlirpPtr slirp = QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp;
+
+ if (slirp && qemuSlirpSetupCgroup(slirp, cgroup) < 0)
+ return -1;
+ }
+
if (def->tpm &&
qemuExtTPMSetupCgroup(driver, def, cgroup) < 0)
return -1;
}
+int
+qemuSlirpSetupCgroup(qemuSlirpPtr slirp,
+ virCgroupPtr cgroup)
+{
+ return virCgroupAddProcess(cgroup, slirp->pid);
+}
+
+
int
qemuSlirpStart(qemuSlirpPtr slirp,
virDomainObjPtr vm,
virDomainNetDefPtr net,
bool incoming)
{
+ qemuDomainObjPrivatePtr priv = vm->privateData;
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
g_autoptr(virCommand) cmd = NULL;
g_autofree char *pidfile = NULL;
}
slirp->pid = pid;
+
+ if (priv->cgroup && qemuSlirpSetupCgroup(slirp, priv->cgroup) < 0)
+ goto error;
+
return 0;
error:
unlink(pidfile);
if (killDBusDaemon)
qemuDBusStop(driver, vm);
+ slirp->pid = 0;
return -1;
}
int qemuSlirpGetFD(qemuSlirpPtr slirp);
+int qemuSlirpSetupCgroup(qemuSlirpPtr slirp,
+ virCgroupPtr cgroup);
+
G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuSlirp, qemuSlirpFree);