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.

Reply via email to