On Tue, Apr 14, 2026 at 11:49:44 +0200, Roman Bogorodskiy wrote: > Peter Krempa wrote: > > > On Sat, Apr 11, 2026 at 15:35:12 +0200, Roman Bogorodskiy wrote: > > > Implement the domainInterfaceAddresses and domainGetHostname APIs. > > > These APIs could use multiple sources of information, though > > > for bhyve only the 'lease' source is supported. > > > > These would go better if split to 2 patches. > > > > > > > > > > Signed-off-by: Roman Bogorodskiy <[email protected]> > > > --- > > > src/bhyve/bhyve_driver.c | 149 +++++++++++++++++++++++++++++++++++++++ > > > 1 file changed, 149 insertions(+) > > > > > > diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c > > > index a7bd16704e..33a772ccdb 100644 > > > --- a/src/bhyve/bhyve_driver.c > > > +++ b/src/bhyve/bhyve_driver.c > > > > [...] > > > > > +static int > > > +bhyveDomainGetHostnameLease(virDomainObj *vm, > > > + char **hostname) > > > +{ > > > + char macaddr[VIR_MAC_STRING_BUFLEN]; > > > + g_autoptr(virConnect) conn = NULL; > > > + virNetworkDHCPLeasePtr *leases = NULL; > > > + int n_leases; > > > + size_t i, j; > > > + int ret = -1; > > > + > > > + if (virDomainObjBeginJob(vm, VIR_JOB_QUERY) < 0) > > > + return -1; > > > + > > > + if (virDomainObjCheckActive(vm) < 0) > > > + goto endjob; > > > + > > > + if (!(conn = virGetConnectNetwork())) > > > + goto endjob; > > > + > > > + for (i = 0; i < vm->def->nnets; i++) { > > > + g_autoptr(virNetwork) network = NULL; > > > + virDomainNetDef *net = vm->def->nets[i]; > > > + > > > + if (net->type != VIR_DOMAIN_NET_TYPE_NETWORK) > > > + continue; > > > + > > > + virMacAddrFormat(&net->mac, macaddr); > > > + network = virNetworkLookupByName(conn, net->data.network.name); > > > + > > > + if (!network) > > > + goto endjob; > > > + > > > + if ((n_leases = virNetworkGetDHCPLeases(network, macaddr, > > > + &leases, 0)) < 0) > > > + goto endjob; > > > + > > > + for (j = 0; j < n_leases; j++) { > > > + virNetworkDHCPLeasePtr lease = leases[j]; > > > + if (lease->hostname && !*hostname) > > > + *hostname = g_strdup(lease->hostname); > > > + > > > + virNetworkDHCPLeaseFree(lease); > > > + } > > > + > > > + VIR_FREE(leases); > > > + > > > + if (*hostname) > > > + break; > > > + } > > > + > > > + ret = 0; > > > + endjob: > > > + virDomainObjEndJob(vm); > > > + return ret; > > > +} > > > + > > > +static char * > > > +bhyveDomainGetHostname(virDomainPtr domain, > > > + unsigned int flags) > > > +{ > > > + virDomainObj *vm = NULL; > > > + char *hostname = NULL; > > > + > > > + virCheckFlags(VIR_DOMAIN_GET_HOSTNAME_LEASE | > > > + VIR_DOMAIN_GET_HOSTNAME_AGENT, NULL); > > > > IMO you shouldn't allow the _AGENT flag here ... > > > > > > > + > > > + VIR_EXCLUSIVE_FLAGS_RET(VIR_DOMAIN_GET_HOSTNAME_LEASE, > > > + VIR_DOMAIN_GET_HOSTNAME_AGENT, > > > + NULL); > > > + > > > + if (!(flags & VIR_DOMAIN_GET_HOSTNAME_AGENT)) > > > + flags |= VIR_DOMAIN_GET_HOSTNAME_LEASE; > > > + > > > + if (!(vm = bhyveDomObjFromDomain(domain))) > > > + return NULL; > > > + > > > + if (virDomainGetHostnameEnsureACL(domain->conn, vm->def) < 0) > > > + goto cleanup; > > > + > > > + if (flags & VIR_DOMAIN_GET_HOSTNAME_AGENT) { > > > + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", > > > + _("getting hostname from agent is not > > > supported")); > > > + goto cleanup; > > > > ... if you intend to not support it. > > > > At this point it doesn't matter that much (just one extra error message > > for the translators). I'm working on an API to probe supported flags > > though at which point it would matter as this would signal that the > > _AGENT option is supported. > > I intend to support the agent too. > > Actually, I'm currently working on implementing a bunch of APIs using > the Qemu guest agent in my private branch, and I decided to submit these > two changes separately to reduce size of the agent series when it's > ready.
Sure, then add the _AGENT flag to virCheckFlags once you'll be adding that support.
