int *nparams,
unsigned int flags);
int virDomainInterfaceStats (virDomainPtr dom,
- const char *path,
+ const char *device,
virDomainInterfaceStatsPtr stats,
size_t size);
typedef int
(*virDrvDomainInterfaceStats)(virDomainPtr domain,
- const char *path,
+ const char *device,
virDomainInterfaceStatsPtr stats);
typedef int
/**
* virDomainInterfaceStats:
* @dom: pointer to the domain object
- * @path: path to the interface
+ * @device: the interface name or MAC address
* @stats: network interface stats (returned)
* @size: size of stats structure
*
* This function returns network interface stats for interfaces
* attached to the domain.
*
- * The path parameter is the name of the network interface.
+ * The @device parameter is the network interface either by name or MAC
+ * address.
*
* Domains may have more than one network interface. To get stats for
* each you should make multiple calls to this function.
* Returns: 0 in case of success or -1 in case of failure.
*/
int
-virDomainInterfaceStats(virDomainPtr dom, const char *path,
+virDomainInterfaceStats(virDomainPtr dom, const char *device,
virDomainInterfaceStatsPtr stats, size_t size)
{
virConnectPtr conn;
virDomainInterfaceStatsStruct stats2 = { -1, -1, -1, -1,
-1, -1, -1, -1 };
- VIR_DOMAIN_DEBUG(dom, "path=%s, stats=%p, size=%zi",
- path, stats, size);
+ VIR_DOMAIN_DEBUG(dom, "device=%s, stats=%p, size=%zi",
+ device, stats, size);
virResetLastError();
virCheckDomainReturn(dom, -1);
- virCheckNonNullArgGoto(path, error);
+ virCheckNonNullArgGoto(device, error);
virCheckNonNullArgGoto(stats, error);
if (size > sizeof(stats2)) {
virReportInvalidArg(size,
conn = dom->conn;
if (conn->driver->domainInterfaceStats) {
- if (conn->driver->domainInterfaceStats(dom, path, &stats2) == -1)
+ if (conn->driver->domainInterfaceStats(dom, device, &stats2) == -1)
goto error;
memcpy(stats, &stats2, size);
static int
libxlDomainInterfaceStats(virDomainPtr dom,
- const char *path,
+ const char *device,
virDomainInterfaceStatsPtr stats)
{
libxlDriverPrivatePtr driver = dom->conn->privateData;
goto endjob;
}
- if (!(net = virDomainNetFindByName(vm->def, path)))
+ if (!(net = virDomainNetFind(vm->def, device)))
goto endjob;
- if (virNetDevTapInterfaceStats(path, stats,
+ if (virNetDevTapInterfaceStats(device, stats,
!virDomainNetTypeSharesHostView(net)) < 0)
goto endjob;
static int
lxcDomainInterfaceStats(virDomainPtr dom,
- const char *path,
+ const char *device,
virDomainInterfaceStatsPtr stats)
{
virDomainObjPtr vm;
goto endjob;
}
- if (!(net = virDomainNetFindByName(vm->def, path)))
+ if (!(net = virDomainNetFind(vm->def, device)))
goto endjob;
- if (virNetDevTapInterfaceStats(path, stats,
+ if (virNetDevTapInterfaceStats(device, stats,
!virDomainNetTypeSharesHostView(net)) < 0)
goto endjob;
static int
openvzDomainInterfaceStats(virDomainPtr dom,
- const char *path,
+ const char *device,
virDomainInterfaceStatsPtr stats)
{
struct openvz_driver *driver = dom->conn->privateData;
goto cleanup;
}
- if (!(net = virDomainNetFindByName(vm->def, path)))
+ if (!(net = virDomainNetFind(vm->def, device)))
goto cleanup;
- if (virNetDevTapInterfaceStats(path, stats,
+ if (virNetDevTapInterfaceStats(device, stats,
!virDomainNetTypeSharesHostView(net)) < 0)
goto cleanup;
static int
qemuDomainInterfaceStats(virDomainPtr dom,
- const char *path,
+ const char *device,
virDomainInterfaceStatsPtr stats)
{
virDomainObjPtr vm;
goto cleanup;
}
- if (!(net = virDomainNetFindByName(vm->def, path)))
+ if (!(net = virDomainNetFind(vm->def, device)))
goto cleanup;
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_VHOSTUSER) {
- if (virNetDevOpenvswitchInterfaceStats(path, stats) < 0)
+ if (virNetDevOpenvswitchInterfaceStats(device, stats) < 0)
goto cleanup;
} else {
- if (virNetDevTapInterfaceStats(path, stats,
+ if (virNetDevTapInterfaceStats(device, stats,
!virDomainNetTypeSharesHostView(net)) < 0)
goto cleanup;
}
struct remote_domain_interface_stats_args {
remote_nonnull_domain dom;
- remote_nonnull_string path;
+ remote_nonnull_string device;
};
struct remote_domain_interface_stats_ret { /* insert@2 */
};
struct remote_domain_interface_stats_args {
remote_nonnull_domain dom;
- remote_nonnull_string path;
+ remote_nonnull_string device;
};
struct remote_domain_interface_stats_ret {
int64_t rx_bytes;
return ret;
}
-static int testDomainInterfaceStats(virDomainPtr domain,
- const char *path,
- virDomainInterfaceStatsPtr stats)
+static int
+testDomainInterfaceStats(virDomainPtr domain,
+ const char *device,
+ virDomainInterfaceStatsPtr stats)
{
virDomainObjPtr privdom;
struct timeval tv;
goto error;
}
- if (!(net = virDomainNetFindByName(privdom->def, path)))
+ if (!(net = virDomainNetFind(privdom->def, device)))
goto error;
if (gettimeofday(&tv, NULL) < 0) {
static int
vzDomainInterfaceStats(virDomainPtr domain,
- const char *path,
+ const char *device,
virDomainInterfaceStatsPtr stats)
{
virDomainObjPtr dom = NULL;
privdom = dom->privateData;
- ret = prlsdkGetNetStats(privdom->stats, privdom->sdkdom, path, stats);
+ ret = prlsdkGetNetStats(privdom->stats, privdom->sdkdom, device, stats);
cleanup:
virDomainObjEndAPI(&dom);
}
int
-prlsdkGetNetStats(PRL_HANDLE sdkstats, PRL_HANDLE sdkdom, const char *path,
+prlsdkGetNetStats(PRL_HANDLE sdkstats, PRL_HANDLE sdkdom, const char *device,
virDomainInterfaceStatsPtr stats)
{
int ret = -1;
char *name = NULL;
PRL_RESULT pret;
PRL_HANDLE net = PRL_INVALID_HANDLE;
+ virMacAddr mac;
+
+ if (virMacAddrParse(device, &mac) == 0)
+ net = prlsdkFindNetByMAC(sdkdom, device);
+ else
+ net = prlsdkFindNetByPath(sdkdom, device);
- net = prlsdkFindNetByPath(sdkdom, path);
if (net == PRL_INVALID_HANDLE)
goto cleanup;
}
static int
-xenUnifiedDomainInterfaceStats(virDomainPtr dom, const char *path,
+xenUnifiedDomainInterfaceStats(virDomainPtr dom, const char *device,
virDomainInterfaceStatsPtr stats)
{
virDomainDefPtr def = NULL;
if (virDomainInterfaceStatsEnsureACL(dom->conn, def) < 0)
goto cleanup;
- if (!(net = virDomainNetFind(def, path)))
+ if (!(net = virDomainNetFind(def, device)))
goto cleanup;
ret = xenHypervisorDomainInterfaceStats(def, net->ifname, stats);
interface stats are only available for interfaces that have a
physical source interface. This does not include, for example, a
'user' interface type since it is a virtual LAN with NAT to the
-outside world.
+outside world. I<interface-device> can be the interface target by
+name or MAC address.
=item B<domif-setlink> I<domain> I<interface-device> I<state> [I<--config>]