The virNetDevTapInterfaceStats() function already works on FreeBSD, so
it's just a matter of wrapping that for domainInterfaceStats.
Signed-off-by: Roman Bogorodskiy <bogorodskiy(a)gmail.com>
---
src/bhyve/bhyve_driver.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
index db7d440a97..e4698b71bf 100644
--- a/src/bhyve/bhyve_driver.c
+++ b/src/bhyve/bhyve_driver.c
@@ -55,6 +55,7 @@
#include "conf/domain_capabilities.h"
#include "virutil.h"
#include "domain_driver.h"
+#include "virnetdevtap.h"
#include "bhyve_conf.h"
#include "bhyve_device.h"
@@ -1625,6 +1626,38 @@ bhyveConnectGetDomainCapabilities(virConnectPtr conn,
return ret;
}
+static int
+bhyveDomainInterfaceStats(virDomainPtr domain,
+ const char *device,
+ virDomainInterfaceStatsPtr stats)
+{
+ virDomainObj *vm;
+ int ret = -1;
+ virDomainNetDef *net = NULL;
+
+ if (!(vm = bhyveDomObjFromDomain(domain)))
+ goto cleanup;
+
+ if (virDomainInterfaceStatsEnsureACL(domain->conn, vm->def) < 0)
+ goto cleanup;
+
+ if (virDomainObjCheckActive(vm) < 0)
+ goto cleanup;
+
+ if (!(net = virDomainNetFind(vm->def, device)))
+ goto cleanup;
+
+ if (virNetDevTapInterfaceStats(net->ifname, stats,
+ !virDomainNetTypeSharesHostView(net)) < 0)
+ goto cleanup;
+
+ ret = 0;
+
+ cleanup:
+ virDomainObjEndAPI(&vm);
+ return ret;
+}
+
static virHypervisorDriver bhyveHypervisorDriver = {
.name = "bhyve",
.connectURIProbe = bhyveConnectURIProbe,
@@ -1685,6 +1718,7 @@ static virHypervisorDriver bhyveHypervisorDriver = {
.connectIsEncrypted = bhyveConnectIsEncrypted, /* 1.3.5 */
.connectDomainXMLFromNative = bhyveConnectDomainXMLFromNative, /* 2.1.0 */
.connectGetDomainCapabilities = bhyveConnectGetDomainCapabilities, /* 2.1.0 */
+ .domainInterfaceStats = bhyveDomainInterfaceStats, /* 11.5.0 */
};
--
2.49.0