mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-26 18:41:17 +00:00
Tue Aug 21 09:56:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
* qemud/remote.c, qemud/remote_protocol.x, src/driver.h, src/internal.h, src/libvirt.c, src/libvirt_sym.version, src/qemu_driver.c, src/remote_internal.c, src/test.c: Add a private interface so that libvirt.c coordination functions can detect the availability of features in underlying drivers, using the VIR_DRV_SUPPORTS_FEATURE macro.
This commit is contained in:
parent
9201909064
commit
19e21d8672
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
Tue Aug 21 09:56:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
|
||||||
|
* qemud/remote.c, qemud/remote_protocol.x, src/driver.h,
|
||||||
|
src/internal.h, src/libvirt.c, src/libvirt_sym.version,
|
||||||
|
src/qemu_driver.c, src/remote_internal.c, src/test.c:
|
||||||
|
Add a private interface so that libvirt.c coordination
|
||||||
|
functions can detect the availability of features in
|
||||||
|
underlying drivers, using the VIR_DRV_SUPPORTS_FEATURE
|
||||||
|
macro.
|
||||||
|
|
||||||
Tue Aug 21 09:45:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
|
Tue Aug 21 09:45:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
|
||||||
* src/xend_internal.c: Return the interface device name as
|
* src/xend_internal.c: Return the interface device name as
|
||||||
|
@ -5,7 +5,7 @@ This page documents which <a href="html/">libvirt calls</a> work on
|
|||||||
which hypervisors.
|
which hypervisors.
|
||||||
</p><p>
|
</p><p>
|
||||||
This information changes frequently. This page was last checked or
|
This information changes frequently. This page was last checked or
|
||||||
updated on <i>2007-06-29</i>.
|
updated on <i>2007-08-20</i>.
|
||||||
</p><h3>Domain functions</h3><p> x = not supported; empty cell means no information </p><table class="top_table"><tr><th> Function </th>
|
</p><h3>Domain functions</h3><p> x = not supported; empty cell means no information </p><table class="top_table"><tr><th> Function </th>
|
||||||
<th> Since </th>
|
<th> Since </th>
|
||||||
<th> Xen </th>
|
<th> Xen </th>
|
||||||
@ -259,7 +259,7 @@ updated on <i>2007-06-29</i>.
|
|||||||
<td> All </td>
|
<td> All </td>
|
||||||
<td> All </td>
|
<td> All </td>
|
||||||
<td> x </td>
|
<td> x </td>
|
||||||
<td> x </td>
|
<td> ≥ 0.3.2 </td>
|
||||||
<td> ≥ 0.3.0 </td>
|
<td> ≥ 0.3.0 </td>
|
||||||
</tr><tr><td> virDomainResume </td>
|
</tr><tr><td> virDomainResume </td>
|
||||||
<td> All </td>
|
<td> All </td>
|
||||||
@ -271,7 +271,7 @@ updated on <i>2007-06-29</i>.
|
|||||||
<td> All </td>
|
<td> All </td>
|
||||||
<td> All </td>
|
<td> All </td>
|
||||||
<td> x </td>
|
<td> x </td>
|
||||||
<td> x </td>
|
<td> ≥ 0.3.2 </td>
|
||||||
<td> ≥ 0.3.0 </td>
|
<td> ≥ 0.3.0 </td>
|
||||||
</tr><tr><td> virDomainSetAutostart </td>
|
</tr><tr><td> virDomainSetAutostart </td>
|
||||||
<td> 0.2.1 </td>
|
<td> 0.2.1 </td>
|
||||||
|
@ -417,6 +417,18 @@ remoteDispatchClose (struct qemud_client *client, remote_message_header *req,
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
remoteDispatchSupportsFeature (struct qemud_client *client, remote_message_header *req,
|
||||||
|
remote_supports_feature_args *args, remote_supports_feature_ret *ret)
|
||||||
|
{
|
||||||
|
CHECK_CONN(client);
|
||||||
|
|
||||||
|
ret->supported = __virDrvSupportsFeature (client->conn, args->feature);
|
||||||
|
if (ret->supported == -1) return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
remoteDispatchGetType (struct qemud_client *client, remote_message_header *req,
|
remoteDispatchGetType (struct qemud_client *client, remote_message_header *req,
|
||||||
void *args ATTRIBUTE_UNUSED, remote_get_type_ret *ret)
|
void *args ATTRIBUTE_UNUSED, remote_get_type_ret *ret)
|
||||||
|
@ -20,9 +20,9 @@ remote_domain_get_os_type_ret lv_remote_domain_get_os_type_ret;
|
|||||||
remote_domain_get_autostart_args lv_remote_domain_get_autostart_args;
|
remote_domain_get_autostart_args lv_remote_domain_get_autostart_args;
|
||||||
remote_domain_get_autostart_ret lv_remote_domain_get_autostart_ret;
|
remote_domain_get_autostart_ret lv_remote_domain_get_autostart_ret;
|
||||||
remote_domain_set_vcpus_args lv_remote_domain_set_vcpus_args;
|
remote_domain_set_vcpus_args lv_remote_domain_set_vcpus_args;
|
||||||
remote_get_hostname_ret lv_remote_get_hostname_ret;
|
|
||||||
remote_domain_get_scheduler_type_args lv_remote_domain_get_scheduler_type_args;
|
remote_domain_get_scheduler_type_args lv_remote_domain_get_scheduler_type_args;
|
||||||
remote_domain_get_scheduler_type_ret lv_remote_domain_get_scheduler_type_ret;
|
remote_domain_get_scheduler_type_ret lv_remote_domain_get_scheduler_type_ret;
|
||||||
|
remote_get_hostname_ret lv_remote_get_hostname_ret;
|
||||||
remote_network_undefine_args lv_remote_network_undefine_args;
|
remote_network_undefine_args lv_remote_network_undefine_args;
|
||||||
remote_domain_create_args lv_remote_domain_create_args;
|
remote_domain_create_args lv_remote_domain_create_args;
|
||||||
remote_domain_suspend_args lv_remote_domain_suspend_args;
|
remote_domain_suspend_args lv_remote_domain_suspend_args;
|
||||||
@ -67,6 +67,8 @@ remote_domain_get_info_args lv_remote_domain_get_info_args;
|
|||||||
remote_domain_get_info_ret lv_remote_domain_get_info_ret;
|
remote_domain_get_info_ret lv_remote_domain_get_info_ret;
|
||||||
remote_network_create_args lv_remote_network_create_args;
|
remote_network_create_args lv_remote_network_create_args;
|
||||||
remote_num_of_defined_networks_ret lv_remote_num_of_defined_networks_ret;
|
remote_num_of_defined_networks_ret lv_remote_num_of_defined_networks_ret;
|
||||||
|
remote_supports_feature_args lv_remote_supports_feature_args;
|
||||||
|
remote_supports_feature_ret lv_remote_supports_feature_ret;
|
||||||
remote_domain_lookup_by_name_args lv_remote_domain_lookup_by_name_args;
|
remote_domain_lookup_by_name_args lv_remote_domain_lookup_by_name_args;
|
||||||
remote_domain_lookup_by_name_ret lv_remote_domain_lookup_by_name_ret;
|
remote_domain_lookup_by_name_ret lv_remote_domain_lookup_by_name_ret;
|
||||||
remote_network_lookup_by_uuid_args lv_remote_network_lookup_by_uuid_args;
|
remote_network_lookup_by_uuid_args lv_remote_network_lookup_by_uuid_args;
|
||||||
|
@ -431,3 +431,12 @@ case REMOTE_PROC_OPEN:
|
|||||||
args = (char *) &lv_remote_open_args;
|
args = (char *) &lv_remote_open_args;
|
||||||
memset (&lv_remote_open_args, 0, sizeof lv_remote_open_args);
|
memset (&lv_remote_open_args, 0, sizeof lv_remote_open_args);
|
||||||
break;
|
break;
|
||||||
|
case REMOTE_PROC_SUPPORTS_FEATURE:
|
||||||
|
fn = (dispatch_fn) remoteDispatchSupportsFeature;
|
||||||
|
args_filter = (xdrproc_t) xdr_remote_supports_feature_args;
|
||||||
|
args = (char *) &lv_remote_supports_feature_args;
|
||||||
|
memset (&lv_remote_supports_feature_args, 0, sizeof lv_remote_supports_feature_args);
|
||||||
|
ret_filter = (xdrproc_t) xdr_remote_supports_feature_ret;
|
||||||
|
ret = (char *) &lv_remote_supports_feature_ret;
|
||||||
|
memset (&lv_remote_supports_feature_ret, 0, sizeof lv_remote_supports_feature_ret);
|
||||||
|
break;
|
||||||
|
@ -61,3 +61,4 @@ static int remoteDispatchNumOfDefinedNetworks (struct qemud_client *client, remo
|
|||||||
static int remoteDispatchNumOfDomains (struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_domains_ret *ret);
|
static int remoteDispatchNumOfDomains (struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_domains_ret *ret);
|
||||||
static int remoteDispatchNumOfNetworks (struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_networks_ret *ret);
|
static int remoteDispatchNumOfNetworks (struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_networks_ret *ret);
|
||||||
static int remoteDispatchOpen (struct qemud_client *client, remote_message_header *req, remote_open_args *args, void *ret);
|
static int remoteDispatchOpen (struct qemud_client *client, remote_message_header *req, remote_open_args *args, void *ret);
|
||||||
|
static int remoteDispatchSupportsFeature (struct qemud_client *client, remote_message_header *req, remote_supports_feature_args *args, remote_supports_feature_ret *ret);
|
||||||
|
@ -177,6 +177,24 @@ xdr_remote_open_args (XDR *xdrs, remote_open_args *objp)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool_t
|
||||||
|
xdr_remote_supports_feature_args (XDR *xdrs, remote_supports_feature_args *objp)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!xdr_int (xdrs, &objp->feature))
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool_t
|
||||||
|
xdr_remote_supports_feature_ret (XDR *xdrs, remote_supports_feature_ret *objp)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!xdr_int (xdrs, &objp->supported))
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
bool_t
|
bool_t
|
||||||
xdr_remote_get_type_ret (XDR *xdrs, remote_get_type_ret *objp)
|
xdr_remote_get_type_ret (XDR *xdrs, remote_get_type_ret *objp)
|
||||||
{
|
{
|
||||||
|
@ -95,6 +95,16 @@ struct remote_open_args {
|
|||||||
};
|
};
|
||||||
typedef struct remote_open_args remote_open_args;
|
typedef struct remote_open_args remote_open_args;
|
||||||
|
|
||||||
|
struct remote_supports_feature_args {
|
||||||
|
int feature;
|
||||||
|
};
|
||||||
|
typedef struct remote_supports_feature_args remote_supports_feature_args;
|
||||||
|
|
||||||
|
struct remote_supports_feature_ret {
|
||||||
|
int supported;
|
||||||
|
};
|
||||||
|
typedef struct remote_supports_feature_ret remote_supports_feature_ret;
|
||||||
|
|
||||||
struct remote_get_type_ret {
|
struct remote_get_type_ret {
|
||||||
remote_nonnull_string type;
|
remote_nonnull_string type;
|
||||||
};
|
};
|
||||||
@ -632,6 +642,7 @@ enum remote_procedure {
|
|||||||
REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS = 57,
|
REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS = 57,
|
||||||
REMOTE_PROC_DOMAIN_SET_SCHEDULER_PARAMETERS = 58,
|
REMOTE_PROC_DOMAIN_SET_SCHEDULER_PARAMETERS = 58,
|
||||||
REMOTE_PROC_GET_HOSTNAME = 59,
|
REMOTE_PROC_GET_HOSTNAME = 59,
|
||||||
|
REMOTE_PROC_SUPPORTS_FEATURE = 60,
|
||||||
};
|
};
|
||||||
typedef enum remote_procedure remote_procedure;
|
typedef enum remote_procedure remote_procedure;
|
||||||
|
|
||||||
@ -673,6 +684,8 @@ extern bool_t xdr_remote_vcpu_info (XDR *, remote_vcpu_info*);
|
|||||||
extern bool_t xdr_remote_sched_param_value (XDR *, remote_sched_param_value*);
|
extern bool_t xdr_remote_sched_param_value (XDR *, remote_sched_param_value*);
|
||||||
extern bool_t xdr_remote_sched_param (XDR *, remote_sched_param*);
|
extern bool_t xdr_remote_sched_param (XDR *, remote_sched_param*);
|
||||||
extern bool_t xdr_remote_open_args (XDR *, remote_open_args*);
|
extern bool_t xdr_remote_open_args (XDR *, remote_open_args*);
|
||||||
|
extern bool_t xdr_remote_supports_feature_args (XDR *, remote_supports_feature_args*);
|
||||||
|
extern bool_t xdr_remote_supports_feature_ret (XDR *, remote_supports_feature_ret*);
|
||||||
extern bool_t xdr_remote_get_type_ret (XDR *, remote_get_type_ret*);
|
extern bool_t xdr_remote_get_type_ret (XDR *, remote_get_type_ret*);
|
||||||
extern bool_t xdr_remote_get_version_ret (XDR *, remote_get_version_ret*);
|
extern bool_t xdr_remote_get_version_ret (XDR *, remote_get_version_ret*);
|
||||||
extern bool_t xdr_remote_get_hostname_ret (XDR *, remote_get_hostname_ret*);
|
extern bool_t xdr_remote_get_hostname_ret (XDR *, remote_get_hostname_ret*);
|
||||||
@ -774,6 +787,8 @@ extern bool_t xdr_remote_vcpu_info ();
|
|||||||
extern bool_t xdr_remote_sched_param_value ();
|
extern bool_t xdr_remote_sched_param_value ();
|
||||||
extern bool_t xdr_remote_sched_param ();
|
extern bool_t xdr_remote_sched_param ();
|
||||||
extern bool_t xdr_remote_open_args ();
|
extern bool_t xdr_remote_open_args ();
|
||||||
|
extern bool_t xdr_remote_supports_feature_args ();
|
||||||
|
extern bool_t xdr_remote_supports_feature_ret ();
|
||||||
extern bool_t xdr_remote_get_type_ret ();
|
extern bool_t xdr_remote_get_type_ret ();
|
||||||
extern bool_t xdr_remote_get_version_ret ();
|
extern bool_t xdr_remote_get_version_ret ();
|
||||||
extern bool_t xdr_remote_get_hostname_ret ();
|
extern bool_t xdr_remote_get_hostname_ret ();
|
||||||
|
@ -170,6 +170,14 @@ struct remote_open_args {
|
|||||||
int flags;
|
int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct remote_supports_feature_args {
|
||||||
|
int feature;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct remote_supports_feature_ret {
|
||||||
|
int supported;
|
||||||
|
};
|
||||||
|
|
||||||
struct remote_get_type_ret {
|
struct remote_get_type_ret {
|
||||||
remote_nonnull_string type;
|
remote_nonnull_string type;
|
||||||
};
|
};
|
||||||
@ -610,7 +618,8 @@ enum remote_procedure {
|
|||||||
REMOTE_PROC_DOMAIN_GET_SCHEDULER_TYPE = 56,
|
REMOTE_PROC_DOMAIN_GET_SCHEDULER_TYPE = 56,
|
||||||
REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS = 57,
|
REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS = 57,
|
||||||
REMOTE_PROC_DOMAIN_SET_SCHEDULER_PARAMETERS = 58,
|
REMOTE_PROC_DOMAIN_SET_SCHEDULER_PARAMETERS = 58,
|
||||||
REMOTE_PROC_GET_HOSTNAME = 59
|
REMOTE_PROC_GET_HOSTNAME = 59,
|
||||||
|
REMOTE_PROC_SUPPORTS_FEATURE = 60
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Custom RPC structure. */
|
/* Custom RPC structure. */
|
||||||
|
31
src/driver.h
31
src/driver.h
@ -44,12 +44,42 @@ typedef enum {
|
|||||||
VIR_DRV_OPEN_ERROR = -2,
|
VIR_DRV_OPEN_ERROR = -2,
|
||||||
} virDrvOpenStatus;
|
} virDrvOpenStatus;
|
||||||
|
|
||||||
|
/* Feature detection. This is a libvirt-private interface for determining
|
||||||
|
* what features are supported by the driver.
|
||||||
|
*
|
||||||
|
* The remote driver passes features through to the real driver at the
|
||||||
|
* remote end unmodified, except if you query a VIR_DRV_FEATURE_REMOTE*
|
||||||
|
* feature.
|
||||||
|
*/
|
||||||
|
/* Driver supports V1-style virDomainMigrate, ie. domainMigratePrepare/
|
||||||
|
* domainMigratePerform/domainMigrateFinish.
|
||||||
|
*/
|
||||||
|
#define VIR_DRV_FEATURE_MIGRATION_V1 1
|
||||||
|
|
||||||
|
/* Driver is not local. */
|
||||||
|
#define VIR_DRV_FEATURE_REMOTE 2
|
||||||
|
|
||||||
|
/* Internal feature-detection macro. Don't call drv->supports_feature
|
||||||
|
* directly, because it may be NULL, use this macro instead.
|
||||||
|
*
|
||||||
|
* Note that you must check for errors.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* >= 1 Feature is supported.
|
||||||
|
* 0 Feature is not supported.
|
||||||
|
* -1 Error.
|
||||||
|
*/
|
||||||
|
#define VIR_DRV_SUPPORTS_FEATURE(drv,conn,feature) \
|
||||||
|
((drv)->supports_feature ? (drv)->supports_feature((conn),(feature)) : 0)
|
||||||
|
|
||||||
typedef virDrvOpenStatus
|
typedef virDrvOpenStatus
|
||||||
(*virDrvOpen) (virConnectPtr conn,
|
(*virDrvOpen) (virConnectPtr conn,
|
||||||
const char *name,
|
const char *name,
|
||||||
int flags);
|
int flags);
|
||||||
typedef int
|
typedef int
|
||||||
(*virDrvClose) (virConnectPtr conn);
|
(*virDrvClose) (virConnectPtr conn);
|
||||||
|
typedef int
|
||||||
|
(*virDrvSupportsFeature) (virConnectPtr conn, int feature);
|
||||||
typedef const char *
|
typedef const char *
|
||||||
(*virDrvGetType) (virConnectPtr conn);
|
(*virDrvGetType) (virConnectPtr conn);
|
||||||
typedef int
|
typedef int
|
||||||
@ -202,6 +232,7 @@ struct _virDriver {
|
|||||||
unsigned long ver; /* the version of the backend */
|
unsigned long ver; /* the version of the backend */
|
||||||
virDrvOpen open;
|
virDrvOpen open;
|
||||||
virDrvClose close;
|
virDrvClose close;
|
||||||
|
virDrvSupportsFeature supports_feature;
|
||||||
virDrvGetType type;
|
virDrvGetType type;
|
||||||
virDrvGetVersion version;
|
virDrvGetVersion version;
|
||||||
virDrvGetHostname getHostname;
|
virDrvGetHostname getHostname;
|
||||||
|
@ -229,6 +229,8 @@ int __virStateActive(void);
|
|||||||
#define virStateReload() __virStateReload()
|
#define virStateReload() __virStateReload()
|
||||||
#define virStateActive() __virStateActive()
|
#define virStateActive() __virStateActive()
|
||||||
|
|
||||||
|
int __virDrvSupportsFeature (virConnectPtr conn, int feature);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
@ -540,6 +540,20 @@ virConnectClose(virConnectPtr conn)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Not for public use. This function is part of the internal
|
||||||
|
* implementation of driver features in the remote case.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
__virDrvSupportsFeature (virConnectPtr conn, int feature)
|
||||||
|
{
|
||||||
|
DEBUG("conn=%p, feature=%d", conn, feature);
|
||||||
|
|
||||||
|
if (!VIR_IS_CONNECT(conn))
|
||||||
|
return (-1);
|
||||||
|
|
||||||
|
return VIR_DRV_SUPPORTS_FEATURE (conn->driver, conn, feature);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virConnectGetType:
|
* virConnectGetType:
|
||||||
* @conn: pointer to the hypervisor connection
|
* @conn: pointer to the hypervisor connection
|
||||||
|
@ -116,5 +116,7 @@
|
|||||||
__virStateReload;
|
__virStateReload;
|
||||||
__virStateActive;
|
__virStateActive;
|
||||||
|
|
||||||
|
__virDrvSupportsFeature;
|
||||||
|
|
||||||
local: *;
|
local: *;
|
||||||
};
|
};
|
||||||
|
@ -2618,6 +2618,7 @@ static virDriver qemuDriver = {
|
|||||||
LIBVIR_VERSION_NUMBER,
|
LIBVIR_VERSION_NUMBER,
|
||||||
qemudOpen, /* open */
|
qemudOpen, /* open */
|
||||||
qemudClose, /* close */
|
qemudClose, /* close */
|
||||||
|
NULL, /* supports_feature */
|
||||||
qemudGetType, /* type */
|
qemudGetType, /* type */
|
||||||
qemudGetVersion, /* version */
|
qemudGetVersion, /* version */
|
||||||
NULL, /* hostname */
|
NULL, /* hostname */
|
||||||
|
@ -1195,6 +1195,27 @@ remoteClose (virConnectPtr conn)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
remoteSupportsFeature (virConnectPtr conn, int feature)
|
||||||
|
{
|
||||||
|
remote_supports_feature_args args;
|
||||||
|
remote_supports_feature_ret ret;
|
||||||
|
GET_PRIVATE (conn, -1);
|
||||||
|
|
||||||
|
/* VIR_DRV_FEATURE_REMOTE* features are handled directly. */
|
||||||
|
if (feature == VIR_DRV_FEATURE_REMOTE) return 1;
|
||||||
|
|
||||||
|
args.feature = feature;
|
||||||
|
|
||||||
|
memset (&ret, 0, sizeof ret);
|
||||||
|
if (call (conn, priv, 0, REMOTE_PROC_SUPPORTS_FEATURE,
|
||||||
|
(xdrproc_t) xdr_remote_supports_feature_args, (char *) &args,
|
||||||
|
(xdrproc_t) xdr_remote_supports_feature_ret, (char *) &ret) == -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return ret.supported;
|
||||||
|
}
|
||||||
|
|
||||||
/* Unfortunately this function is defined to return a static string.
|
/* Unfortunately this function is defined to return a static string.
|
||||||
* Since the remote end always answers with the same type (for a
|
* Since the remote end always answers with the same type (for a
|
||||||
* single connection anyway) we cache the type in the connection's
|
* single connection anyway) we cache the type in the connection's
|
||||||
@ -2898,6 +2919,7 @@ static virDriver driver = {
|
|||||||
.ver = REMOTE_PROTOCOL_VERSION,
|
.ver = REMOTE_PROTOCOL_VERSION,
|
||||||
.open = remoteOpen,
|
.open = remoteOpen,
|
||||||
.close = remoteClose,
|
.close = remoteClose,
|
||||||
|
.supports_feature = remoteSupportsFeature,
|
||||||
.type = remoteType,
|
.type = remoteType,
|
||||||
.version = remoteVersion,
|
.version = remoteVersion,
|
||||||
.getHostname = remoteGetHostname,
|
.getHostname = remoteGetHostname,
|
||||||
|
@ -1920,6 +1920,7 @@ static virDriver testDriver = {
|
|||||||
LIBVIR_VERSION_NUMBER,
|
LIBVIR_VERSION_NUMBER,
|
||||||
testOpen, /* open */
|
testOpen, /* open */
|
||||||
testClose, /* close */
|
testClose, /* close */
|
||||||
|
NULL, /* supports_feature */
|
||||||
NULL, /* type */
|
NULL, /* type */
|
||||||
testGetVersion, /* version */
|
testGetVersion, /* version */
|
||||||
testGetHostname, /* hostname */
|
testGetHostname, /* hostname */
|
||||||
|
Loading…
Reference in New Issue
Block a user