Extend bhyveDomainInterfaceAddresses() to support
the VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT source.

Signed-off-by: Roman Bogorodskiy <[email protected]>
---
 src/bhyve/bhyve_driver.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
index 075b8ea64f..2556384002 100644
--- a/src/bhyve/bhyve_driver.c
+++ b/src/bhyve/bhyve_driver.c
@@ -1957,6 +1957,7 @@ bhyveDomainInterfaceAddresses(virDomainPtr domain,
                               unsigned int flags)
 {
     virDomainObj *vm = NULL;
+    qemuAgent *agent;
     int ret = -1;
 
     virCheckFlags(0, -1);
@@ -1971,6 +1972,22 @@ bhyveDomainInterfaceAddresses(virDomainPtr domain,
         goto cleanup;
 
     switch (source) {
+    case VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT:
+        if (virDomainObjBeginAgentJob(vm, VIR_AGENT_JOB_QUERY) < 0)
+            goto cleanup;
+
+        if (bhyveDomainEnsureAgent(vm, true) < 0)
+            goto endjob;
+
+        agent = bhyveDomainObjEnterAgent(vm);
+        ret = qemuAgentGetInterfaces(agent, ifaces, true);
+        bhyveDomainObjExitAgent(vm, agent);
+
+    endjob:
+        virDomainObjEndAgentJob(vm);
+
+        break;
+
     case VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_ARP:
         ret = virDomainNetARPInterfaces(vm->def, ifaces);
         break;
@@ -1979,12 +1996,6 @@ bhyveDomainInterfaceAddresses(virDomainPtr domain,
         ret = virDomainNetDHCPInterfaces(vm->def, ifaces);
         break;
 
-    case VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT:
-        virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED,
-                       _("Unsupported IP address data source %1$d"),
-                       source);
-        break;
-
     default:
         virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED,
                        _("Unknown IP address data source %1$d"),
-- 
2.52.0

Reply via email to