On 04/09/2018 05:45 PM, Daniel P. Berrangé wrote: > Currently the virDrvConnectOpen method is supposed to handle both > opening an explicit URI and auto-probing a driver if no URI is > given. Introduce a dedicated virDrvConnectURIProbe method to enable the > probing functionality to be split from the driver opening functionality. > > It is still possible for NULL to be passed to the virDrvConnectOpen > method after this change, because the remote driver needs special > handling to enable probing of the URI against a remote libvirtd daemon. > > Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx> > --- > docs/hvsupport.pl | 6 +++--- > src/bhyve/bhyve_driver.c | 18 +++++++++++++----- > src/driver-hypervisor.h | 4 ++++ > src/libvirt.c | 13 +++++++++++++ > src/libxl/libxl_driver.c | 17 ++++++++++++----- > src/lxc/lxc_driver.c | 17 ++++++++++++----- > src/openvz/openvz_driver.c | 24 ++++++++++++++++-------- > src/qemu/qemu_driver.c | 30 +++++++++++++++++++++--------- > src/uml/uml_driver.c | 20 +++++++++++++------- > src/vbox/vbox_common.c | 13 ++++++++++--- > 10 files changed, 117 insertions(+), 45 deletions(-) > > diff --git a/docs/hvsupport.pl b/docs/hvsupport.pl > index fc6eb1f152..a2b980c502 100755 > --- a/docs/hvsupport.pl > +++ b/docs/hvsupport.pl > @@ -184,7 +184,7 @@ foreach my $drivertable (@drivertable) { > my $api; > if (exists $apis{"vir$name"}) { > $api = "vir$name"; > - } elsif ($name =~ /\w+(Open|Close)/) { > + } elsif ($name =~ /\w+(Open|Close|URIProbe)/) { > next; > } else { > die "driver $name does not have a public API"; > @@ -241,12 +241,12 @@ foreach my $src (@srcs) { > > next if $api eq "no" || $api eq "name"; > > - die "Method $meth in $src is missing version" unless defined $vers; > + die "Method $meth in $src is missing version" unless defined $vers || $api eq "connectURIProbe"; > > die "Driver method for $api is NULL in $src" if $meth eq "NULL"; > > if (!exists($groups{$ingrp}->{apis}->{$api})) { > - next if $api =~ /\w(Open|Close)/; > + next if $api =~ /\w(Open|Close|URIProbe)/; > > die "Found unexpected method $api in $ingrp\n"; > } > diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c > index 849d3abcd3..a0bc400480 100644 > --- a/src/bhyve/bhyve_driver.c > +++ b/src/bhyve/bhyve_driver.c > @@ -180,6 +180,17 @@ bhyveDomObjFromDomain(virDomainPtr domain) > return vm; > } > > + > +static int > +bhyveConnectURIProbe(char **uri) > +{ > + if (bhyve_driver == NULL) > + return 0; > + > + return VIR_STRDUP(*uri, "bhyve:///system"); > +} make check fails because it thinks this function (and others) is missing ACL check. > + > + > static virDrvOpenStatus > bhyveConnectOpen(virConnectPtr conn, > virConnectAuthPtr auth ATTRIBUTE_UNUSED, > @@ -189,11 +200,7 @@ bhyveConnectOpen(virConnectPtr conn, > virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); > > if (conn->uri == NULL) { > - if (bhyve_driver == NULL) > - return VIR_DRV_OPEN_DECLINED; > - > - if (!(conn->uri = virURIParse("bhyve:///system"))) > - return VIR_DRV_OPEN_ERROR; > + return VIR_DRV_OPEN_DECLINED; > } else { > if (!conn->uri->scheme || STRNEQ(conn->uri->scheme, "bhyve")) > return VIR_DRV_OPEN_DECLINED; > @@ -1689,6 +1696,7 @@ bhyveConnectGetDomainCapabilities(virConnectPtr conn, > > static virHypervisorDriver bhyveHypervisorDriver = { > .name = "bhyve", > + .connectURIProbe = bhyveConnectURIProbe, s,$, /* 4.3.0 */ Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list