if (!conn->uri->scheme || STRNEQ(conn->uri->scheme, "bhyve"))
return VIR_DRV_OPEN_DECLINED;
- if (conn->uri->server)
- return VIR_DRV_OPEN_DECLINED;
-
if (STRNEQ_NULLABLE(conn->uri->path, "/system")) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unexpected bhyve URI path '%s', try bhyve:///system"),
static virConnectDriver bhyveConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &bhyveHypervisorDriver,
};
"interfaceOpen" => 1,
"interfaceClose" => 1,
"connectURIProbe" => 1,
+ "localOnly" => 1,
);
# Temp hack - remove it once xen driver is fixed
typedef virConnectDriver *virConnectDriverPtr;
struct _virConnectDriver {
+ /* Wether driver permits a server in the URI */
+ bool localOnly;
virHypervisorDriverPtr hypervisorDriver;
virInterfaceDriverPtr interfaceDriver;
virNetworkDriverPtr networkDriver;
if (STRNEQ_NULLABLE(conn->uri->scheme, "interface"))
return VIR_DRV_OPEN_DECLINED;
- /* Leave for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
if (driver == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("interface state driver is not active"));
static virConnectDriver interfaceConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &interfaceHypervisorDriver,
.interfaceDriver = &interfaceDriver,
};
if (STRNEQ_NULLABLE(conn->uri->scheme, "interface"))
return VIR_DRV_OPEN_DECLINED;
- /* Leave for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
if (driver == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("interface state driver is not active"));
static virConnectDriver udevConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &udevHypervisorDriver,
.interfaceDriver = &udevIfaceDriver,
};
VIR_DEBUG("trying driver %zu (%s) ...",
i, virConnectDriverTab[i]->hypervisorDriver->name);
+ if (virConnectDriverTab[i]->localOnly && ret->uri && ret->uri->server) {
+ VIR_DEBUG("Server present, skipping local only driver");
+ continue;
+ }
+
ret->driver = virConnectDriverTab[i]->hypervisorDriver;
ret->interfaceDriver = virConnectDriverTab[i]->interfaceDriver;
ret->networkDriver = virConnectDriverTab[i]->networkDriver;
if (conn->uri->scheme == NULL || STRNEQ(conn->uri->scheme, "xen"))
return VIR_DRV_OPEN_DECLINED;
- /* If server name is given, its for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
/* Error if xen or libxl scheme specified but driver not started. */
if (libxl_driver == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
};
static virConnectDriver libxlConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &libxlHypervisorDriver,
};
STRNEQ(conn->uri->scheme, "lxc"))
return VIR_DRV_OPEN_DECLINED;
- /* Leave for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
/* If path isn't '/' then they typoed, tell them correct path */
if (conn->uri->path != NULL &&
STRNEQ(conn->uri->path, "/") &&
};
static virConnectDriver lxcConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &lxcHypervisorDriver,
};
if (STRNEQ_NULLABLE(conn->uri->scheme, "network"))
return VIR_DRV_OPEN_DECLINED;
- /* Leave for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
if (network_driver == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("network state driver is not active"));
static virConnectDriver networkConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &networkHypervisorDriver,
.networkDriver = &networkDriver,
};
if (STRNEQ_NULLABLE(conn->uri->scheme, "nodedev"))
return VIR_DRV_OPEN_DECLINED;
- /* Leave for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
if (driver == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("nodedev state driver is not active"));
static virConnectDriver halConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &halHypervisorDriver,
.nodeDeviceDriver = &halNodeDeviceDriver,
};
static virConnectDriver udevConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &udevHypervisorDriver,
.nodeDeviceDriver = &udevNodeDeviceDriver,
};
if (STRNEQ_NULLABLE(conn->uri->scheme, "nwfilter"))
return VIR_DRV_OPEN_DECLINED;
- /* Leave for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
if (driver == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("nwfilter state driver is not active"));
static virConnectDriver nwfilterConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &nwfilterHypervisorDriver,
.nwfilterDriver = &nwfilterDriver,
};
STRNEQ(conn->uri->scheme, "openvz"))
return VIR_DRV_OPEN_DECLINED;
- /* If server name is given, its for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
/* If path isn't /system, then they typoed, so tell them correct path */
if (conn->uri->path == NULL ||
STRNEQ(conn->uri->path, "/system")) {
};
static virConnectDriver openvzConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &openvzHypervisorDriver,
};
goto cleanup;
}
- /* Allow remote driver to deal with URIs with hostname server */
- if (conn->uri->server != NULL) {
- ret = VIR_DRV_OPEN_DECLINED;
- goto cleanup;
- }
-
if (qemu_driver == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("qemu state driver is not active"));
static virConnectDriver qemuConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &qemuHypervisorDriver,
};
if (STRNEQ_NULLABLE(conn->uri->scheme, "secret"))
return VIR_DRV_OPEN_DECLINED;
- /* Leave for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
if (driver == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("secret state driver is not active"));
static virConnectDriver secretConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &secretHypervisorDriver,
.secretDriver = &secretDriver,
};
if (STRNEQ_NULLABLE(conn->uri->scheme, "storage"))
return VIR_DRV_OPEN_DECLINED;
- /* Leave for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
if (driver == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("storage state driver is not active"));
};
static virConnectDriver storageConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &storageHypervisorDriver,
.storageDriver = &storageDriver,
};
if (!conn->uri->scheme || STRNEQ(conn->uri->scheme, "test"))
return VIR_DRV_OPEN_DECLINED;
- /* Remote driver should handle these. */
- if (conn->uri->server)
- return VIR_DRV_OPEN_DECLINED;
-
/* From this point on, the connection is for us. */
if (!conn->uri->path
|| conn->uri->path[0] == '\0'
};
static virConnectDriver testConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &testHypervisorDriver,
.interfaceDriver = &testInterfaceDriver,
.networkDriver = &testNetworkDriver,
STRNEQ(conn->uri->scheme, "uml"))
return VIR_DRV_OPEN_DECLINED;
- /* Allow remote driver to deal with URIs with hostname server */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
-
/* Check path and tell them correct path if they made a mistake */
if (uml_driver->privileged) {
if (STRNEQ(conn->uri->path, "/system") &&
};
static virConnectDriver umlConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = ¨HypervisorDriver,
};
STRNEQ(conn->uri->scheme, "vbox"))
return VIR_DRV_OPEN_DECLINED;
- /* Leave for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
if (conn->uri->path == NULL || STREQ(conn->uri->path, "")) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("no VirtualBox driver path specified (try vbox:///session)"));
if (conn->uri == NULL ||
conn->uri->scheme == NULL ||
- STRNEQ(conn->uri->scheme, "vbox") ||
- conn->uri->server != NULL)
+ STRNEQ(conn->uri->scheme, "vbox"))
return VIR_DRV_OPEN_DECLINED;
if (conn->uri->path == NULL || STREQ(conn->uri->path, "")) {
.connectOpen = dummyConnectOpen, /* 0.6.3 */
};
-static virConnectDriver vboxConnectDriver;
+static virConnectDriver vboxConnectDriver = {
+ .localOnly = true,
+ .hypervisorDriver = NULL,
+};
int vboxRegister(void)
{
STRNEQ(conn->uri->scheme, "vmwarefusion")))
return VIR_DRV_OPEN_DECLINED;
- /* If server name is given, its for remote driver */
- if (conn->uri->server != NULL)
- return VIR_DRV_OPEN_DECLINED;
-
/* If path isn't /session, then they typoed, so tell them correct path */
if (conn->uri->path == NULL || STRNEQ(conn->uri->path, "/session")) {
virReportError(VIR_ERR_INTERNAL_ERROR,
};
static virConnectDriver vmwareConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &vmwareHypervisorDriver,
};
if (STREQ(conn->uri->scheme, "parallels") && STRNEQ(conn->driver->name, "Parallels"))
return VIR_DRV_OPEN_DECLINED;
- /* Remote driver should handle these. */
- if (conn->uri->server)
- return VIR_DRV_OPEN_DECLINED;
-
/* From this point on, the connection is for us. */
if (STRNEQ_NULLABLE(conn->uri->path, "/system")) {
virReportError(VIR_ERR_INTERNAL_ERROR,
};
static virConnectDriver vzConnectDriver = {
+ .localOnly = true,
.hypervisorDriver = &vzHypervisorDriver,
};