}
}
- if ((vm->def->nnets)) {
- size_t i;
-
- for (i = 0; i < vm->def->nnets; i++) {
- virDomainNetDefPtr net = vm->def->nets[i];
-
- if (STRPREFIX(net->ifname, "vif"))
- VIR_FREE(net->ifname);
- }
- }
-
if (virAsprintf(&file, "%s/%s.xml", cfg->stateDir, vm->def->name) > 0) {
if (unlink(file) < 0 && errno != ENOENT && errno != ENOTDIR)
VIR_DEBUG("Failed to remove domain XML for %s", vm->def->name);
libxl_event_free(ctx, ev);
}
-/*
- * Create interface names for the network devices in parameter def.
- * Names are created with the pattern 'vif<domid>.<devid><suffix>'.
- * devid is extracted from the network devices in the d_config
- * parameter. User-provided interface names are skipped.
- */
-static void
-libxlDomainCreateIfaceNames(virDomainDefPtr def, libxl_domain_config *d_config)
-{
- size_t i;
-
- for (i = 0; i < def->nnets && i < d_config->num_nics; i++) {
- virDomainNetDefPtr net = def->nets[i];
- libxl_device_nic *x_nic = &d_config->nics[i];
- const char *suffix =
- x_nic->nictype != LIBXL_NIC_TYPE_VIF ? "-emu" : "";
-
- if (net->ifname)
- continue;
-
- ignore_value(virAsprintf(&net->ifname, "vif%d.%d%s",
- def->id, x_nic->devid, suffix));
- }
-}
-
/*
* Start a domain through libxenlight.
if (libxl_evenable_domain_death(cfg->ctx, vm->def->id, 0, &priv->deathW))
goto cleanup_dom;
- libxlDomainCreateIfaceNames(vm->def, &d_config);
if ((dom_xml = virDomainDefFormat(vm->def, 0)) == NULL)
goto cleanup_dom;
#include "virhostdev.h"
#include "network/bridge_driver.h"
#include "locking/domain_lock.h"
-#include "virstats.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
return ret;
}
-static int
-libxlDomainInterfaceStats(virDomainPtr dom,
- const char *path,
- virDomainInterfaceStatsPtr stats)
-{
- libxlDriverPrivatePtr driver = dom->conn->privateData;
- virDomainObjPtr vm;
- ssize_t i;
- int ret = -1;
-
- if (!(vm = libxlDomObjFromDomain(dom)))
- goto cleanup;
-
- if (virDomainInterfaceStatsEnsureACL(dom->conn, vm->def) < 0)
- goto cleanup;
-
- if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_QUERY) < 0)
- goto cleanup;
-
- if (!virDomainObjIsActive(vm)) {
- virReportError(VIR_ERR_OPERATION_INVALID,
- "%s", _("domain is not running"));
- goto endjob;
- }
-
- /* Check the path is one of the domain's network interfaces. */
- for (i = 0; i < vm->def->nnets; i++) {
- if (vm->def->nets[i]->ifname &&
- STREQ(vm->def->nets[i]->ifname, path)) {
- ret = 0;
- break;
- }
- }
-
- if (ret == 0)
- ret = virNetInterfaceStats(path, stats);
- else
- virReportError(VIR_ERR_INVALID_ARG,
- _("'%s' is not a known interface"), path);
-
- endjob:
- if (!libxlDomainObjEndJob(driver, vm))
- vm = NULL;
-
- cleanup:
- if (vm)
- virObjectUnlock(vm);
- return ret;
-}
-
static int
libxlDomainGetTotalCPUStats(libxlDriverPrivatePtr driver,
virDomainObjPtr vm,
.nodeGetCellsFreeMemory = libxlNodeGetCellsFreeMemory, /* 1.1.1 */
.domainMemoryStats = libxlDomainMemoryStats, /* 1.3.0 */
.domainGetCPUStats = libxlDomainGetCPUStats, /* 1.3.0 */
- .domainInterfaceStats = libxlDomainInterfaceStats, /* 1.3.0 */
.connectDomainEventRegister = libxlConnectDomainEventRegister, /* 0.9.0 */
.connectDomainEventDeregister = libxlConnectDomainEventDeregister, /* 0.9.0 */
.domainManagedSave = libxlDomainManagedSave, /* 0.9.2 */