Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
8325fcf1
L
libvirt
项目概览
openeuler
/
libvirt
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
libvirt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8325fcf1
编写于
16年前
作者:
D
Daniel P. Berrange
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remote protocol support for node devices (David Lively)
上级
620d4be7
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
935 addition
and
1 deletion
+935
-1
ChangeLog
ChangeLog
+11
-0
qemud/remote.c
qemud/remote.c
+215
-0
qemud/remote_dispatch_localvars.h
qemud/remote_dispatch_localvars.h
+14
-0
qemud/remote_dispatch_proc_switch.h
qemud/remote_dispatch_proc_switch.h
+63
-0
qemud/remote_dispatch_prototypes.h
qemud/remote_dispatch_prototypes.h
+7
-0
qemud/remote_protocol.c
qemud/remote_protocol.c
+158
-0
qemud/remote_protocol.h
qemud/remote_protocol.h
+129
-0
qemud/remote_protocol.x
qemud/remote_protocol.x
+85
-1
src/remote_internal.c
src/remote_internal.c
+253
-0
未找到文件。
ChangeLog
浏览文件 @
8325fcf1
Fri Nov 21 12:30:14 BST 2008 Daniel P. Berrange <berrange@redhat.com>
Remote protocol support for node devices (David Lively)
* src/remote_internal.c: driver impl for node device APIs
* qemud/remote_protocol.x: Define wire protocol for node device
APIs
* qemud/remote_dispatch*, qemud/remote_protocol.{c,h}: Update
for new APIs
* qemud/remote.c: server dispatch functions for node device
APIs
Fri Nov 21 12:23:14 BST 2008 Daniel P. Berrange <berrange@redhat.com>
Primary internal driver for node devices with HAL (default)
...
...
This diff is collapsed.
Click to expand it.
qemud/remote.c
浏览文件 @
8325fcf1
...
...
@@ -67,6 +67,7 @@ static void make_nonnull_domain (remote_nonnull_domain *dom_dst, virDomainPtr do
static
void
make_nonnull_network
(
remote_nonnull_network
*
net_dst
,
virNetworkPtr
net_src
);
static
void
make_nonnull_storage_pool
(
remote_nonnull_storage_pool
*
pool_dst
,
virStoragePoolPtr
pool_src
);
static
void
make_nonnull_storage_vol
(
remote_nonnull_storage_vol
*
vol_dst
,
virStorageVolPtr
vol_src
);
static
void
make_nonnull_node_device
(
remote_nonnull_node_device
*
dev_dst
,
virNodeDevicePtr
dev_src
);
#include "remote_dispatch_prototypes.h"
...
...
@@ -3723,6 +3724,213 @@ remoteDispatchStorageVolLookupByPath (struct qemud_server *server ATTRIBUTE_UNUS
}
/***************************************************************
* NODE INFO APIS
**************************************************************/
static
int
remoteDispatchNodeNumOfDevices
(
struct
qemud_server
*
server
ATTRIBUTE_UNUSED
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_num_of_devices_args
*
args
,
remote_node_num_of_devices_ret
*
ret
)
{
CHECK_CONN
(
client
);
ret
->
num
=
virNodeNumOfDevices
(
client
->
conn
,
args
->
cap
?
*
args
->
cap
:
NULL
,
args
->
flags
);
if
(
ret
->
num
==
-
1
)
return
-
1
;
return
0
;
}
static
int
remoteDispatchNodeListDevices
(
struct
qemud_server
*
server
ATTRIBUTE_UNUSED
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_list_devices_args
*
args
,
remote_node_list_devices_ret
*
ret
)
{
CHECK_CONN
(
client
);
if
(
args
->
maxnames
>
REMOTE_NODE_DEVICE_NAME_LIST_MAX
)
{
remoteDispatchError
(
client
,
req
,
"%s"
,
_
(
"maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX"
));
return
-
2
;
}
/* Allocate return buffer. */
if
(
VIR_ALLOC_N
(
ret
->
names
.
names_val
,
args
->
maxnames
)
<
0
)
{
remoteDispatchSendError
(
client
,
req
,
VIR_ERR_NO_MEMORY
,
NULL
);
return
-
2
;
}
ret
->
names
.
names_len
=
virNodeListDevices
(
client
->
conn
,
args
->
cap
?
*
args
->
cap
:
NULL
,
ret
->
names
.
names_val
,
args
->
maxnames
,
args
->
flags
);
if
(
ret
->
names
.
names_len
==
-
1
)
{
VIR_FREE
(
ret
->
names
.
names_val
);
return
-
1
;
}
return
0
;
}
static
int
remoteDispatchNodeDeviceLookupByName
(
struct
qemud_server
*
server
ATTRIBUTE_UNUSED
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_device_lookup_by_name_args
*
args
,
remote_node_device_lookup_by_name_ret
*
ret
)
{
virNodeDevicePtr
dev
;
CHECK_CONN
(
client
);
dev
=
virNodeDeviceLookupByName
(
client
->
conn
,
args
->
name
);
if
(
dev
==
NULL
)
return
-
1
;
make_nonnull_node_device
(
&
ret
->
dev
,
dev
);
virNodeDeviceFree
(
dev
);
return
0
;
}
static
int
remoteDispatchNodeDeviceDumpXml
(
struct
qemud_server
*
server
ATTRIBUTE_UNUSED
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_device_dump_xml_args
*
args
,
remote_node_device_dump_xml_ret
*
ret
)
{
virNodeDevicePtr
dev
;
CHECK_CONN
(
client
);
dev
=
virNodeDeviceLookupByName
(
client
->
conn
,
args
->
name
);
if
(
dev
==
NULL
)
{
remoteDispatchError
(
client
,
req
,
"%s"
,
_
(
"node_device not found"
));
return
-
2
;
}
/* remoteDispatchClientRequest will free this. */
ret
->
xml
=
virNodeDeviceGetXMLDesc
(
dev
,
args
->
flags
);
if
(
!
ret
->
xml
)
{
virNodeDeviceFree
(
dev
);
return
-
1
;
}
virNodeDeviceFree
(
dev
);
return
0
;
}
static
int
remoteDispatchNodeDeviceGetParent
(
struct
qemud_server
*
server
ATTRIBUTE_UNUSED
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_device_get_parent_args
*
args
,
remote_node_device_get_parent_ret
*
ret
)
{
virNodeDevicePtr
dev
;
const
char
*
parent
;
CHECK_CONN
(
client
);
dev
=
virNodeDeviceLookupByName
(
client
->
conn
,
args
->
name
);
if
(
dev
==
NULL
)
{
remoteDispatchError
(
client
,
req
,
"%s"
,
_
(
"node_device not found"
));
return
-
2
;
}
parent
=
virNodeDeviceGetParent
(
dev
);
if
(
parent
==
NULL
)
{
ret
->
parent
=
NULL
;
}
else
{
/* remoteDispatchClientRequest will free this. */
char
**
parent_p
;
if
(
VIR_ALLOC
(
parent_p
)
<
0
)
{
remoteDispatchSendError
(
client
,
req
,
VIR_ERR_NO_MEMORY
,
NULL
);
return
-
2
;
}
*
parent_p
=
strdup
(
parent
);
if
(
*
parent_p
==
NULL
)
{
remoteDispatchSendError
(
client
,
req
,
VIR_ERR_NO_MEMORY
,
NULL
);
return
-
2
;
}
ret
->
parent
=
parent_p
;
}
virNodeDeviceFree
(
dev
);
return
0
;
}
static
int
remoteDispatchNodeDeviceNumOfCaps
(
struct
qemud_server
*
server
ATTRIBUTE_UNUSED
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_device_num_of_caps_args
*
args
,
remote_node_device_num_of_caps_ret
*
ret
)
{
virNodeDevicePtr
dev
;
CHECK_CONN
(
client
);
dev
=
virNodeDeviceLookupByName
(
client
->
conn
,
args
->
name
);
if
(
dev
==
NULL
)
{
remoteDispatchError
(
client
,
req
,
"%s"
,
_
(
"node_device not found"
));
return
-
2
;
}
ret
->
num
=
virNodeDeviceNumOfCaps
(
dev
);
virNodeDeviceFree
(
dev
);
return
0
;
}
static
int
remoteDispatchNodeDeviceListCaps
(
struct
qemud_server
*
server
ATTRIBUTE_UNUSED
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_device_list_caps_args
*
args
,
remote_node_device_list_caps_ret
*
ret
)
{
virNodeDevicePtr
dev
;
CHECK_CONN
(
client
);
dev
=
virNodeDeviceLookupByName
(
client
->
conn
,
args
->
name
);
if
(
dev
==
NULL
)
{
remoteDispatchError
(
client
,
req
,
"%s"
,
_
(
"node_device not found"
));
return
-
2
;
}
if
(
args
->
maxnames
>
REMOTE_NODE_DEVICE_NAME_LIST_MAX
)
{
remoteDispatchError
(
client
,
req
,
"%s"
,
_
(
"maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX"
));
return
-
2
;
}
/* Allocate return buffer. */
if
(
VIR_ALLOC_N
(
ret
->
names
.
names_val
,
args
->
maxnames
)
<
0
)
{
remoteDispatchSendError
(
client
,
req
,
VIR_ERR_NO_MEMORY
,
NULL
);
return
-
2
;
}
ret
->
names
.
names_len
=
virNodeDeviceListCaps
(
dev
,
ret
->
names
.
names_val
,
args
->
maxnames
);
if
(
ret
->
names
.
names_len
==
-
1
)
{
VIR_FREE
(
ret
->
names
.
names_val
);
return
-
1
;
}
return
0
;
}
/**************************
* Async Events
**************************/
...
...
@@ -3848,6 +4056,7 @@ remoteDispatchDomainEventSend (struct qemud_client *client,
client
->
bufferLength
=
len
;
client
->
bufferOffset
=
0
;
}
/*----- Helpers. -----*/
/* get_nonnull_domain and get_nonnull_network turn an on-wire
...
...
@@ -3918,3 +4127,9 @@ make_nonnull_storage_vol (remote_nonnull_storage_vol *vol_dst, virStorageVolPtr
vol_dst
->
name
=
strdup
(
vol_src
->
name
);
vol_dst
->
key
=
strdup
(
vol_src
->
key
);
}
static
void
make_nonnull_node_device
(
remote_nonnull_node_device
*
dev_dst
,
virNodeDevicePtr
dev_src
)
{
dev_dst
->
name
=
strdup
(
dev_src
->
name
);
}
This diff is collapsed.
Click to expand it.
qemud/remote_dispatch_localvars.h
浏览文件 @
8325fcf1
...
...
@@ -7,6 +7,8 @@ remote_domain_lookup_by_uuid_ret lv_remote_domain_lookup_by_uuid_ret;
remote_storage_pool_list_volumes_args
lv_remote_storage_pool_list_volumes_args
;
remote_storage_pool_list_volumes_ret
lv_remote_storage_pool_list_volumes_ret
;
remote_domain_events_deregister_ret
lv_remote_domain_events_deregister_ret
;
remote_node_device_get_parent_args
lv_remote_node_device_get_parent_args
;
remote_node_device_get_parent_ret
lv_remote_node_device_get_parent_ret
;
remote_domain_shutdown_args
lv_remote_domain_shutdown_args
;
remote_list_defined_domains_args
lv_remote_list_defined_domains_args
;
remote_list_defined_domains_ret
lv_remote_list_defined_domains_ret
;
...
...
@@ -34,6 +36,8 @@ remote_list_defined_networks_args lv_remote_list_defined_networks_args;
remote_list_defined_networks_ret
lv_remote_list_defined_networks_ret
;
remote_network_create_xml_args
lv_remote_network_create_xml_args
;
remote_network_create_xml_ret
lv_remote_network_create_xml_ret
;
remote_node_device_list_caps_args
lv_remote_node_device_list_caps_args
;
remote_node_device_list_caps_ret
lv_remote_node_device_list_caps_ret
;
remote_open_args
lv_remote_open_args
;
remote_storage_pool_refresh_args
lv_remote_storage_pool_refresh_args
;
remote_storage_vol_lookup_by_path_args
lv_remote_storage_vol_lookup_by_path_args
;
...
...
@@ -67,6 +71,8 @@ remote_storage_pool_lookup_by_volume_args lv_remote_storage_pool_lookup_by_volum
remote_storage_pool_lookup_by_volume_ret
lv_remote_storage_pool_lookup_by_volume_ret
;
remote_domain_get_max_vcpus_args
lv_remote_domain_get_max_vcpus_args
;
remote_domain_get_max_vcpus_ret
lv_remote_domain_get_max_vcpus_ret
;
remote_node_device_num_of_caps_args
lv_remote_node_device_num_of_caps_args
;
remote_node_device_num_of_caps_ret
lv_remote_node_device_num_of_caps_ret
;
remote_domain_get_info_args
lv_remote_domain_get_info_args
;
remote_domain_get_info_ret
lv_remote_domain_get_info_ret
;
remote_storage_pool_num_of_volumes_args
lv_remote_storage_pool_num_of_volumes_args
;
...
...
@@ -82,6 +88,8 @@ remote_network_get_bridge_name_ret lv_remote_network_get_bridge_name_ret;
remote_domain_destroy_args
lv_remote_domain_destroy_args
;
remote_find_storage_pool_sources_args
lv_remote_find_storage_pool_sources_args
;
remote_find_storage_pool_sources_ret
lv_remote_find_storage_pool_sources_ret
;
remote_node_num_of_devices_args
lv_remote_node_num_of_devices_args
;
remote_node_num_of_devices_ret
lv_remote_node_num_of_devices_ret
;
remote_auth_sasl_step_args
lv_remote_auth_sasl_step_args
;
remote_auth_sasl_step_ret
lv_remote_auth_sasl_step_ret
;
remote_domain_migrate_finish_args
lv_remote_domain_migrate_finish_args
;
...
...
@@ -91,11 +99,17 @@ remote_domain_get_vcpus_ret lv_remote_domain_get_vcpus_ret;
remote_domain_get_scheduler_parameters_args
lv_remote_domain_get_scheduler_parameters_args
;
remote_domain_get_scheduler_parameters_ret
lv_remote_domain_get_scheduler_parameters_ret
;
remote_node_get_info_ret
lv_remote_node_get_info_ret
;
remote_node_device_dump_xml_args
lv_remote_node_device_dump_xml_args
;
remote_node_device_dump_xml_ret
lv_remote_node_device_dump_xml_ret
;
remote_node_device_lookup_by_name_args
lv_remote_node_device_lookup_by_name_args
;
remote_node_device_lookup_by_name_ret
lv_remote_node_device_lookup_by_name_ret
;
remote_network_lookup_by_name_args
lv_remote_network_lookup_by_name_args
;
remote_network_lookup_by_name_ret
lv_remote_network_lookup_by_name_ret
;
remote_domain_memory_peek_args
lv_remote_domain_memory_peek_args
;
remote_domain_memory_peek_ret
lv_remote_domain_memory_peek_ret
;
remote_num_of_defined_domains_ret
lv_remote_num_of_defined_domains_ret
;
remote_node_list_devices_args
lv_remote_node_list_devices_args
;
remote_node_list_devices_ret
lv_remote_node_list_devices_ret
;
remote_domain_block_stats_args
lv_remote_domain_block_stats_args
;
remote_domain_block_stats_ret
lv_remote_domain_block_stats_ret
;
remote_domain_detach_device_args
lv_remote_domain_detach_device_args
;
...
...
This diff is collapsed.
Click to expand it.
qemud/remote_dispatch_proc_switch.h
浏览文件 @
8325fcf1
...
...
@@ -560,6 +560,51 @@ case REMOTE_PROC_NETWORK_UNDEFINE:
args
=
(
char
*
)
&
lv_remote_network_undefine_args
;
memset
(
&
lv_remote_network_undefine_args
,
0
,
sizeof
lv_remote_network_undefine_args
);
break
;
case
REMOTE_PROC_NODE_DEVICE_DUMP_XML
:
fn
=
(
dispatch_fn
)
remoteDispatchNodeDeviceDumpXml
;
args_filter
=
(
xdrproc_t
)
xdr_remote_node_device_dump_xml_args
;
args
=
(
char
*
)
&
lv_remote_node_device_dump_xml_args
;
memset
(
&
lv_remote_node_device_dump_xml_args
,
0
,
sizeof
lv_remote_node_device_dump_xml_args
);
ret_filter
=
(
xdrproc_t
)
xdr_remote_node_device_dump_xml_ret
;
ret
=
(
char
*
)
&
lv_remote_node_device_dump_xml_ret
;
memset
(
&
lv_remote_node_device_dump_xml_ret
,
0
,
sizeof
lv_remote_node_device_dump_xml_ret
);
break
;
case
REMOTE_PROC_NODE_DEVICE_GET_PARENT
:
fn
=
(
dispatch_fn
)
remoteDispatchNodeDeviceGetParent
;
args_filter
=
(
xdrproc_t
)
xdr_remote_node_device_get_parent_args
;
args
=
(
char
*
)
&
lv_remote_node_device_get_parent_args
;
memset
(
&
lv_remote_node_device_get_parent_args
,
0
,
sizeof
lv_remote_node_device_get_parent_args
);
ret_filter
=
(
xdrproc_t
)
xdr_remote_node_device_get_parent_ret
;
ret
=
(
char
*
)
&
lv_remote_node_device_get_parent_ret
;
memset
(
&
lv_remote_node_device_get_parent_ret
,
0
,
sizeof
lv_remote_node_device_get_parent_ret
);
break
;
case
REMOTE_PROC_NODE_DEVICE_LIST_CAPS
:
fn
=
(
dispatch_fn
)
remoteDispatchNodeDeviceListCaps
;
args_filter
=
(
xdrproc_t
)
xdr_remote_node_device_list_caps_args
;
args
=
(
char
*
)
&
lv_remote_node_device_list_caps_args
;
memset
(
&
lv_remote_node_device_list_caps_args
,
0
,
sizeof
lv_remote_node_device_list_caps_args
);
ret_filter
=
(
xdrproc_t
)
xdr_remote_node_device_list_caps_ret
;
ret
=
(
char
*
)
&
lv_remote_node_device_list_caps_ret
;
memset
(
&
lv_remote_node_device_list_caps_ret
,
0
,
sizeof
lv_remote_node_device_list_caps_ret
);
break
;
case
REMOTE_PROC_NODE_DEVICE_LOOKUP_BY_NAME
:
fn
=
(
dispatch_fn
)
remoteDispatchNodeDeviceLookupByName
;
args_filter
=
(
xdrproc_t
)
xdr_remote_node_device_lookup_by_name_args
;
args
=
(
char
*
)
&
lv_remote_node_device_lookup_by_name_args
;
memset
(
&
lv_remote_node_device_lookup_by_name_args
,
0
,
sizeof
lv_remote_node_device_lookup_by_name_args
);
ret_filter
=
(
xdrproc_t
)
xdr_remote_node_device_lookup_by_name_ret
;
ret
=
(
char
*
)
&
lv_remote_node_device_lookup_by_name_ret
;
memset
(
&
lv_remote_node_device_lookup_by_name_ret
,
0
,
sizeof
lv_remote_node_device_lookup_by_name_ret
);
break
;
case
REMOTE_PROC_NODE_DEVICE_NUM_OF_CAPS
:
fn
=
(
dispatch_fn
)
remoteDispatchNodeDeviceNumOfCaps
;
args_filter
=
(
xdrproc_t
)
xdr_remote_node_device_num_of_caps_args
;
args
=
(
char
*
)
&
lv_remote_node_device_num_of_caps_args
;
memset
(
&
lv_remote_node_device_num_of_caps_args
,
0
,
sizeof
lv_remote_node_device_num_of_caps_args
);
ret_filter
=
(
xdrproc_t
)
xdr_remote_node_device_num_of_caps_ret
;
ret
=
(
char
*
)
&
lv_remote_node_device_num_of_caps_ret
;
memset
(
&
lv_remote_node_device_num_of_caps_ret
,
0
,
sizeof
lv_remote_node_device_num_of_caps_ret
);
break
;
case
REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY
:
fn
=
(
dispatch_fn
)
remoteDispatchNodeGetCellsFreeMemory
;
args_filter
=
(
xdrproc_t
)
xdr_remote_node_get_cells_free_memory_args
;
...
...
@@ -581,6 +626,24 @@ case REMOTE_PROC_NODE_GET_INFO:
ret
=
(
char
*
)
&
lv_remote_node_get_info_ret
;
memset
(
&
lv_remote_node_get_info_ret
,
0
,
sizeof
lv_remote_node_get_info_ret
);
break
;
case
REMOTE_PROC_NODE_LIST_DEVICES
:
fn
=
(
dispatch_fn
)
remoteDispatchNodeListDevices
;
args_filter
=
(
xdrproc_t
)
xdr_remote_node_list_devices_args
;
args
=
(
char
*
)
&
lv_remote_node_list_devices_args
;
memset
(
&
lv_remote_node_list_devices_args
,
0
,
sizeof
lv_remote_node_list_devices_args
);
ret_filter
=
(
xdrproc_t
)
xdr_remote_node_list_devices_ret
;
ret
=
(
char
*
)
&
lv_remote_node_list_devices_ret
;
memset
(
&
lv_remote_node_list_devices_ret
,
0
,
sizeof
lv_remote_node_list_devices_ret
);
break
;
case
REMOTE_PROC_NODE_NUM_OF_DEVICES
:
fn
=
(
dispatch_fn
)
remoteDispatchNodeNumOfDevices
;
args_filter
=
(
xdrproc_t
)
xdr_remote_node_num_of_devices_args
;
args
=
(
char
*
)
&
lv_remote_node_num_of_devices_args
;
memset
(
&
lv_remote_node_num_of_devices_args
,
0
,
sizeof
lv_remote_node_num_of_devices_args
);
ret_filter
=
(
xdrproc_t
)
xdr_remote_node_num_of_devices_ret
;
ret
=
(
char
*
)
&
lv_remote_node_num_of_devices_ret
;
memset
(
&
lv_remote_node_num_of_devices_ret
,
0
,
sizeof
lv_remote_node_num_of_devices_ret
);
break
;
case
REMOTE_PROC_NUM_OF_DEFINED_DOMAINS
:
fn
=
(
dispatch_fn
)
remoteDispatchNumOfDefinedDomains
;
ret_filter
=
(
xdrproc_t
)
xdr_remote_num_of_defined_domains_ret
;
...
...
This diff is collapsed.
Click to expand it.
qemud/remote_dispatch_prototypes.h
浏览文件 @
8325fcf1
...
...
@@ -76,9 +76,16 @@ static int remoteDispatchNetworkLookupByName (struct qemud_server *server, struc
static
int
remoteDispatchNetworkLookupByUuid
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_network_lookup_by_uuid_args
*
args
,
remote_network_lookup_by_uuid_ret
*
ret
);
static
int
remoteDispatchNetworkSetAutostart
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_network_set_autostart_args
*
args
,
void
*
ret
);
static
int
remoteDispatchNetworkUndefine
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_network_undefine_args
*
args
,
void
*
ret
);
static
int
remoteDispatchNodeDeviceDumpXml
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_device_dump_xml_args
*
args
,
remote_node_device_dump_xml_ret
*
ret
);
static
int
remoteDispatchNodeDeviceGetParent
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_device_get_parent_args
*
args
,
remote_node_device_get_parent_ret
*
ret
);
static
int
remoteDispatchNodeDeviceListCaps
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_device_list_caps_args
*
args
,
remote_node_device_list_caps_ret
*
ret
);
static
int
remoteDispatchNodeDeviceLookupByName
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_device_lookup_by_name_args
*
args
,
remote_node_device_lookup_by_name_ret
*
ret
);
static
int
remoteDispatchNodeDeviceNumOfCaps
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_device_num_of_caps_args
*
args
,
remote_node_device_num_of_caps_ret
*
ret
);
static
int
remoteDispatchNodeGetCellsFreeMemory
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_get_cells_free_memory_args
*
args
,
remote_node_get_cells_free_memory_ret
*
ret
);
static
int
remoteDispatchNodeGetFreeMemory
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
void
*
args
,
remote_node_get_free_memory_ret
*
ret
);
static
int
remoteDispatchNodeGetInfo
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
void
*
args
,
remote_node_get_info_ret
*
ret
);
static
int
remoteDispatchNodeListDevices
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_list_devices_args
*
args
,
remote_node_list_devices_ret
*
ret
);
static
int
remoteDispatchNodeNumOfDevices
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
remote_node_num_of_devices_args
*
args
,
remote_node_num_of_devices_ret
*
ret
);
static
int
remoteDispatchNumOfDefinedDomains
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
void
*
args
,
remote_num_of_defined_domains_ret
*
ret
);
static
int
remoteDispatchNumOfDefinedNetworks
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
void
*
args
,
remote_num_of_defined_networks_ret
*
ret
);
static
int
remoteDispatchNumOfDefinedStoragePools
(
struct
qemud_server
*
server
,
struct
qemud_client
*
client
,
remote_message_header
*
req
,
void
*
args
,
remote_num_of_defined_storage_pools_ret
*
ret
);
...
...
This diff is collapsed.
Click to expand it.
qemud/remote_protocol.c
浏览文件 @
8325fcf1
...
...
@@ -83,6 +83,15 @@ xdr_remote_nonnull_storage_vol (XDR *xdrs, remote_nonnull_storage_vol *objp)
return
TRUE
;
}
bool_t
xdr_remote_nonnull_node_device
(
XDR
*
xdrs
,
remote_nonnull_node_device
*
objp
)
{
if
(
!
xdr_remote_nonnull_string
(
xdrs
,
&
objp
->
name
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_domain
(
XDR
*
xdrs
,
remote_domain
*
objp
)
{
...
...
@@ -119,6 +128,15 @@ xdr_remote_storage_vol (XDR *xdrs, remote_storage_vol *objp)
return
TRUE
;
}
bool_t
xdr_remote_node_device
(
XDR
*
xdrs
,
remote_node_device
*
objp
)
{
if
(
!
xdr_pointer
(
xdrs
,
(
char
**
)
objp
,
sizeof
(
remote_nonnull_node_device
),
(
xdrproc_t
)
xdr_remote_nonnull_node_device
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_error
(
XDR
*
xdrs
,
remote_error
*
objp
)
{
...
...
@@ -2007,6 +2025,146 @@ xdr_remote_storage_vol_get_path_ret (XDR *xdrs, remote_storage_vol_get_path_ret
return
TRUE
;
}
bool_t
xdr_remote_node_num_of_devices_args
(
XDR
*
xdrs
,
remote_node_num_of_devices_args
*
objp
)
{
if
(
!
xdr_remote_string
(
xdrs
,
&
objp
->
cap
))
return
FALSE
;
if
(
!
xdr_u_int
(
xdrs
,
&
objp
->
flags
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_num_of_devices_ret
(
XDR
*
xdrs
,
remote_node_num_of_devices_ret
*
objp
)
{
if
(
!
xdr_int
(
xdrs
,
&
objp
->
num
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_list_devices_args
(
XDR
*
xdrs
,
remote_node_list_devices_args
*
objp
)
{
if
(
!
xdr_remote_string
(
xdrs
,
&
objp
->
cap
))
return
FALSE
;
if
(
!
xdr_int
(
xdrs
,
&
objp
->
maxnames
))
return
FALSE
;
if
(
!
xdr_u_int
(
xdrs
,
&
objp
->
flags
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_list_devices_ret
(
XDR
*
xdrs
,
remote_node_list_devices_ret
*
objp
)
{
char
**
objp_cpp0
=
(
char
**
)
(
void
*
)
&
objp
->
names
.
names_val
;
if
(
!
xdr_array
(
xdrs
,
objp_cpp0
,
(
u_int
*
)
&
objp
->
names
.
names_len
,
REMOTE_NODE_DEVICE_NAME_LIST_MAX
,
sizeof
(
remote_nonnull_string
),
(
xdrproc_t
)
xdr_remote_nonnull_string
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_device_lookup_by_name_args
(
XDR
*
xdrs
,
remote_node_device_lookup_by_name_args
*
objp
)
{
if
(
!
xdr_remote_nonnull_string
(
xdrs
,
&
objp
->
name
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_device_lookup_by_name_ret
(
XDR
*
xdrs
,
remote_node_device_lookup_by_name_ret
*
objp
)
{
if
(
!
xdr_remote_nonnull_node_device
(
xdrs
,
&
objp
->
dev
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_device_dump_xml_args
(
XDR
*
xdrs
,
remote_node_device_dump_xml_args
*
objp
)
{
if
(
!
xdr_remote_nonnull_string
(
xdrs
,
&
objp
->
name
))
return
FALSE
;
if
(
!
xdr_u_int
(
xdrs
,
&
objp
->
flags
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_device_dump_xml_ret
(
XDR
*
xdrs
,
remote_node_device_dump_xml_ret
*
objp
)
{
if
(
!
xdr_remote_nonnull_string
(
xdrs
,
&
objp
->
xml
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_device_get_parent_args
(
XDR
*
xdrs
,
remote_node_device_get_parent_args
*
objp
)
{
if
(
!
xdr_remote_nonnull_string
(
xdrs
,
&
objp
->
name
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_device_get_parent_ret
(
XDR
*
xdrs
,
remote_node_device_get_parent_ret
*
objp
)
{
if
(
!
xdr_remote_string
(
xdrs
,
&
objp
->
parent
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_device_num_of_caps_args
(
XDR
*
xdrs
,
remote_node_device_num_of_caps_args
*
objp
)
{
if
(
!
xdr_remote_nonnull_string
(
xdrs
,
&
objp
->
name
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_device_num_of_caps_ret
(
XDR
*
xdrs
,
remote_node_device_num_of_caps_ret
*
objp
)
{
if
(
!
xdr_int
(
xdrs
,
&
objp
->
num
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_device_list_caps_args
(
XDR
*
xdrs
,
remote_node_device_list_caps_args
*
objp
)
{
if
(
!
xdr_remote_nonnull_string
(
xdrs
,
&
objp
->
name
))
return
FALSE
;
if
(
!
xdr_int
(
xdrs
,
&
objp
->
maxnames
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_node_device_list_caps_ret
(
XDR
*
xdrs
,
remote_node_device_list_caps_ret
*
objp
)
{
char
**
objp_cpp0
=
(
char
**
)
(
void
*
)
&
objp
->
names
.
names_val
;
if
(
!
xdr_array
(
xdrs
,
objp_cpp0
,
(
u_int
*
)
&
objp
->
names
.
names_len
,
REMOTE_NODE_DEVICE_CAPS_LIST_MAX
,
sizeof
(
remote_nonnull_string
),
(
xdrproc_t
)
xdr_remote_nonnull_string
))
return
FALSE
;
return
TRUE
;
}
bool_t
xdr_remote_domain_events_register_ret
(
XDR
*
xdrs
,
remote_domain_events_register_ret
*
objp
)
{
...
...
This diff is collapsed.
Click to expand it.
qemud/remote_protocol.h
浏览文件 @
8325fcf1
...
...
@@ -31,6 +31,8 @@ typedef remote_nonnull_string *remote_string;
#define REMOTE_NETWORK_NAME_LIST_MAX 256
#define REMOTE_STORAGE_POOL_NAME_LIST_MAX 256
#define REMOTE_STORAGE_VOL_NAME_LIST_MAX 1024
#define REMOTE_NODE_DEVICE_NAME_LIST_MAX 16384
#define REMOTE_NODE_DEVICE_CAPS_LIST_MAX 16384
#define REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX 16
#define REMOTE_NODE_MAX_CELLS 1024
#define REMOTE_AUTH_SASL_DATA_MAX 65536
...
...
@@ -66,6 +68,11 @@ struct remote_nonnull_storage_vol {
};
typedef
struct
remote_nonnull_storage_vol
remote_nonnull_storage_vol
;
struct
remote_nonnull_node_device
{
remote_nonnull_string
name
;
};
typedef
struct
remote_nonnull_node_device
remote_nonnull_node_device
;
typedef
remote_nonnull_domain
*
remote_domain
;
typedef
remote_nonnull_network
*
remote_network
;
...
...
@@ -74,6 +81,8 @@ typedef remote_nonnull_storage_pool *remote_storage_pool;
typedef
remote_nonnull_storage_vol
*
remote_storage_vol
;
typedef
remote_nonnull_node_device
*
remote_node_device
;
struct
remote_error
{
int
code
;
int
domain
;
...
...
@@ -1122,6 +1131,87 @@ struct remote_storage_vol_get_path_ret {
};
typedef
struct
remote_storage_vol_get_path_ret
remote_storage_vol_get_path_ret
;
struct
remote_node_num_of_devices_args
{
remote_string
cap
;
u_int
flags
;
};
typedef
struct
remote_node_num_of_devices_args
remote_node_num_of_devices_args
;
struct
remote_node_num_of_devices_ret
{
int
num
;
};
typedef
struct
remote_node_num_of_devices_ret
remote_node_num_of_devices_ret
;
struct
remote_node_list_devices_args
{
remote_string
cap
;
int
maxnames
;
u_int
flags
;
};
typedef
struct
remote_node_list_devices_args
remote_node_list_devices_args
;
struct
remote_node_list_devices_ret
{
struct
{
u_int
names_len
;
remote_nonnull_string
*
names_val
;
}
names
;
};
typedef
struct
remote_node_list_devices_ret
remote_node_list_devices_ret
;
struct
remote_node_device_lookup_by_name_args
{
remote_nonnull_string
name
;
};
typedef
struct
remote_node_device_lookup_by_name_args
remote_node_device_lookup_by_name_args
;
struct
remote_node_device_lookup_by_name_ret
{
remote_nonnull_node_device
dev
;
};
typedef
struct
remote_node_device_lookup_by_name_ret
remote_node_device_lookup_by_name_ret
;
struct
remote_node_device_dump_xml_args
{
remote_nonnull_string
name
;
u_int
flags
;
};
typedef
struct
remote_node_device_dump_xml_args
remote_node_device_dump_xml_args
;
struct
remote_node_device_dump_xml_ret
{
remote_nonnull_string
xml
;
};
typedef
struct
remote_node_device_dump_xml_ret
remote_node_device_dump_xml_ret
;
struct
remote_node_device_get_parent_args
{
remote_nonnull_string
name
;
};
typedef
struct
remote_node_device_get_parent_args
remote_node_device_get_parent_args
;
struct
remote_node_device_get_parent_ret
{
remote_string
parent
;
};
typedef
struct
remote_node_device_get_parent_ret
remote_node_device_get_parent_ret
;
struct
remote_node_device_num_of_caps_args
{
remote_nonnull_string
name
;
};
typedef
struct
remote_node_device_num_of_caps_args
remote_node_device_num_of_caps_args
;
struct
remote_node_device_num_of_caps_ret
{
int
num
;
};
typedef
struct
remote_node_device_num_of_caps_ret
remote_node_device_num_of_caps_ret
;
struct
remote_node_device_list_caps_args
{
remote_nonnull_string
name
;
int
maxnames
;
};
typedef
struct
remote_node_device_list_caps_args
remote_node_device_list_caps_args
;
struct
remote_node_device_list_caps_ret
{
struct
{
u_int
names_len
;
remote_nonnull_string
*
names_val
;
}
names
;
};
typedef
struct
remote_node_device_list_caps_ret
remote_node_device_list_caps_ret
;
struct
remote_domain_events_register_ret
{
int
cb_registered
;
};
...
...
@@ -1252,6 +1342,13 @@ enum remote_procedure {
REMOTE_PROC_DOMAIN_MIGRATE_PREPARE2
=
108
,
REMOTE_PROC_DOMAIN_MIGRATE_FINISH2
=
109
,
REMOTE_PROC_GET_URI
=
110
,
REMOTE_PROC_NODE_NUM_OF_DEVICES
=
111
,
REMOTE_PROC_NODE_LIST_DEVICES
=
112
,
REMOTE_PROC_NODE_DEVICE_LOOKUP_BY_NAME
=
113
,
REMOTE_PROC_NODE_DEVICE_DUMP_XML
=
114
,
REMOTE_PROC_NODE_DEVICE_GET_PARENT
=
115
,
REMOTE_PROC_NODE_DEVICE_NUM_OF_CAPS
=
116
,
REMOTE_PROC_NODE_DEVICE_LIST_CAPS
=
117
,
};
typedef
enum
remote_procedure
remote_procedure
;
...
...
@@ -1289,10 +1386,12 @@ extern bool_t xdr_remote_nonnull_domain (XDR *, remote_nonnull_domain*);
extern
bool_t
xdr_remote_nonnull_network
(
XDR
*
,
remote_nonnull_network
*
);
extern
bool_t
xdr_remote_nonnull_storage_pool
(
XDR
*
,
remote_nonnull_storage_pool
*
);
extern
bool_t
xdr_remote_nonnull_storage_vol
(
XDR
*
,
remote_nonnull_storage_vol
*
);
extern
bool_t
xdr_remote_nonnull_node_device
(
XDR
*
,
remote_nonnull_node_device
*
);
extern
bool_t
xdr_remote_domain
(
XDR
*
,
remote_domain
*
);
extern
bool_t
xdr_remote_network
(
XDR
*
,
remote_network
*
);
extern
bool_t
xdr_remote_storage_pool
(
XDR
*
,
remote_storage_pool
*
);
extern
bool_t
xdr_remote_storage_vol
(
XDR
*
,
remote_storage_vol
*
);
extern
bool_t
xdr_remote_node_device
(
XDR
*
,
remote_node_device
*
);
extern
bool_t
xdr_remote_error
(
XDR
*
,
remote_error
*
);
extern
bool_t
xdr_remote_auth_type
(
XDR
*
,
remote_auth_type
*
);
extern
bool_t
xdr_remote_vcpu_info
(
XDR
*
,
remote_vcpu_info
*
);
...
...
@@ -1462,6 +1561,20 @@ extern bool_t xdr_remote_storage_vol_get_info_args (XDR *, remote_storage_vol_g
extern
bool_t
xdr_remote_storage_vol_get_info_ret
(
XDR
*
,
remote_storage_vol_get_info_ret
*
);
extern
bool_t
xdr_remote_storage_vol_get_path_args
(
XDR
*
,
remote_storage_vol_get_path_args
*
);
extern
bool_t
xdr_remote_storage_vol_get_path_ret
(
XDR
*
,
remote_storage_vol_get_path_ret
*
);
extern
bool_t
xdr_remote_node_num_of_devices_args
(
XDR
*
,
remote_node_num_of_devices_args
*
);
extern
bool_t
xdr_remote_node_num_of_devices_ret
(
XDR
*
,
remote_node_num_of_devices_ret
*
);
extern
bool_t
xdr_remote_node_list_devices_args
(
XDR
*
,
remote_node_list_devices_args
*
);
extern
bool_t
xdr_remote_node_list_devices_ret
(
XDR
*
,
remote_node_list_devices_ret
*
);
extern
bool_t
xdr_remote_node_device_lookup_by_name_args
(
XDR
*
,
remote_node_device_lookup_by_name_args
*
);
extern
bool_t
xdr_remote_node_device_lookup_by_name_ret
(
XDR
*
,
remote_node_device_lookup_by_name_ret
*
);
extern
bool_t
xdr_remote_node_device_dump_xml_args
(
XDR
*
,
remote_node_device_dump_xml_args
*
);
extern
bool_t
xdr_remote_node_device_dump_xml_ret
(
XDR
*
,
remote_node_device_dump_xml_ret
*
);
extern
bool_t
xdr_remote_node_device_get_parent_args
(
XDR
*
,
remote_node_device_get_parent_args
*
);
extern
bool_t
xdr_remote_node_device_get_parent_ret
(
XDR
*
,
remote_node_device_get_parent_ret
*
);
extern
bool_t
xdr_remote_node_device_num_of_caps_args
(
XDR
*
,
remote_node_device_num_of_caps_args
*
);
extern
bool_t
xdr_remote_node_device_num_of_caps_ret
(
XDR
*
,
remote_node_device_num_of_caps_ret
*
);
extern
bool_t
xdr_remote_node_device_list_caps_args
(
XDR
*
,
remote_node_device_list_caps_args
*
);
extern
bool_t
xdr_remote_node_device_list_caps_ret
(
XDR
*
,
remote_node_device_list_caps_ret
*
);
extern
bool_t
xdr_remote_domain_events_register_ret
(
XDR
*
,
remote_domain_events_register_ret
*
);
extern
bool_t
xdr_remote_domain_events_deregister_ret
(
XDR
*
,
remote_domain_events_deregister_ret
*
);
extern
bool_t
xdr_remote_domain_event_ret
(
XDR
*
,
remote_domain_event_ret
*
);
...
...
@@ -1478,10 +1591,12 @@ extern bool_t xdr_remote_nonnull_domain ();
extern
bool_t
xdr_remote_nonnull_network
();
extern
bool_t
xdr_remote_nonnull_storage_pool
();
extern
bool_t
xdr_remote_nonnull_storage_vol
();
extern
bool_t
xdr_remote_nonnull_node_device
();
extern
bool_t
xdr_remote_domain
();
extern
bool_t
xdr_remote_network
();
extern
bool_t
xdr_remote_storage_pool
();
extern
bool_t
xdr_remote_storage_vol
();
extern
bool_t
xdr_remote_node_device
();
extern
bool_t
xdr_remote_error
();
extern
bool_t
xdr_remote_auth_type
();
extern
bool_t
xdr_remote_vcpu_info
();
...
...
@@ -1651,6 +1766,20 @@ extern bool_t xdr_remote_storage_vol_get_info_args ();
extern
bool_t
xdr_remote_storage_vol_get_info_ret
();
extern
bool_t
xdr_remote_storage_vol_get_path_args
();
extern
bool_t
xdr_remote_storage_vol_get_path_ret
();
extern
bool_t
xdr_remote_node_num_of_devices_args
();
extern
bool_t
xdr_remote_node_num_of_devices_ret
();
extern
bool_t
xdr_remote_node_list_devices_args
();
extern
bool_t
xdr_remote_node_list_devices_ret
();
extern
bool_t
xdr_remote_node_device_lookup_by_name_args
();
extern
bool_t
xdr_remote_node_device_lookup_by_name_ret
();
extern
bool_t
xdr_remote_node_device_dump_xml_args
();
extern
bool_t
xdr_remote_node_device_dump_xml_ret
();
extern
bool_t
xdr_remote_node_device_get_parent_args
();
extern
bool_t
xdr_remote_node_device_get_parent_ret
();
extern
bool_t
xdr_remote_node_device_num_of_caps_args
();
extern
bool_t
xdr_remote_node_device_num_of_caps_ret
();
extern
bool_t
xdr_remote_node_device_list_caps_args
();
extern
bool_t
xdr_remote_node_device_list_caps_ret
();
extern
bool_t
xdr_remote_domain_events_register_ret
();
extern
bool_t
xdr_remote_domain_events_deregister_ret
();
extern
bool_t
xdr_remote_domain_event_ret
();
...
...
This diff is collapsed.
Click to expand it.
qemud/remote_protocol.x
浏览文件 @
8325fcf1
...
...
@@ -86,6 +86,12 @@ const REMOTE_STORAGE_POOL_NAME_LIST_MAX = 256;
/* Upper limit on lists of storage vol names. */
const
REMOTE_STORAGE_VOL_NAME_LIST_MAX
=
1024
;
/* Upper limit on lists of node device names. */
const
REMOTE_NODE_DEVICE_NAME_LIST_MAX
=
16384
;
/* Upper limit on lists of node device capabilities. */
const
REMOTE_NODE_DEVICE_CAPS_LIST_MAX
=
16384
;
/* Upper limit on list of scheduler parameters. */
const
REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX
=
16
;
...
...
@@ -139,11 +145,17 @@ struct remote_nonnull_storage_vol {
remote_nonnull_string
key
;
};
/* A node device which may not be NULL. */
struct
remote_nonnull_node_device
{
remote_nonnull_string
name
;
};
/* A domain or network which may be NULL. */
typedef
remote_nonnull_domain
*
remote_domain
;
typedef
remote_nonnull_network
*
remote_network
;
typedef
remote_nonnull_storage_pool
*
remote_storage_pool
;
typedef
remote_nonnull_storage_vol
*
remote_storage_vol
;
typedef
remote_nonnull_node_device
*
remote_node_device
;
/* Error message. See <virterror.h> for explanation of fields. */
...
...
@@ -994,6 +1006,70 @@ struct remote_storage_vol_get_path_ret {
remote_nonnull_string
name
;
};
/* Node driver calls: */
struct
remote_node_num_of_devices_args
{
remote_string
cap
;
unsigned
flags
;
};
struct
remote_node_num_of_devices_ret
{
int
num
;
};
struct
remote_node_list_devices_args
{
remote_string
cap
;
int
maxnames
;
unsigned
flags
;
};
struct
remote_node_list_devices_ret
{
remote_nonnull_string
names
<
REMOTE_NODE_DEVICE_NAME_LIST_MAX
>
;
};
struct
remote_node_device_lookup_by_name_args
{
remote_nonnull_string
name
;
};
struct
remote_node_device_lookup_by_name_ret
{
remote_nonnull_node_device
dev
;
};
struct
remote_node_device_dump_xml_args
{
remote_nonnull_string
name
;
unsigned
flags
;
};
struct
remote_node_device_dump_xml_ret
{
remote_nonnull_string
xml
;
};
struct
remote_node_device_get_parent_args
{
remote_nonnull_string
name
;
};
struct
remote_node_device_get_parent_ret
{
remote_string
parent
;
};
struct
remote_node_device_num_of_caps_args
{
remote_nonnull_string
name
;
};
struct
remote_node_device_num_of_caps_ret
{
int
num
;
};
struct
remote_node_device_list_caps_args
{
remote_nonnull_string
name
;
int
maxnames
;
};
struct
remote_node_device_list_caps_ret
{
remote_nonnull_string
names
<
REMOTE_NODE_DEVICE_CAPS_LIST_MAX
>
;
};
/**
* Events Register/Deregister:
* It would seem rpcgen does not like both args, and ret
...
...
@@ -1140,7 +1216,15 @@ enum remote_procedure {
REMOTE_PROC_DOMAIN_EVENT
=
107
,
REMOTE_PROC_DOMAIN_MIGRATE_PREPARE2
=
108
,
REMOTE_PROC_DOMAIN_MIGRATE_FINISH2
=
109
,
REMOTE_PROC_GET_URI
=
110
REMOTE_PROC_GET_URI
=
110
,
REMOTE_PROC_NODE_NUM_OF_DEVICES
=
111
,
REMOTE_PROC_NODE_LIST_DEVICES
=
112
,
REMOTE_PROC_NODE_DEVICE_LOOKUP_BY_NAME
=
113
,
REMOTE_PROC_NODE_DEVICE_DUMP_XML
=
114
,
REMOTE_PROC_NODE_DEVICE_GET_PARENT
=
115
,
REMOTE_PROC_NODE_DEVICE_NUM_OF_CAPS
=
116
,
REMOTE_PROC_NODE_DEVICE_LIST_CAPS
=
117
};
/* Custom RPC structure. */
...
...
This diff is collapsed.
Click to expand it.
src/remote_internal.c
浏览文件 @
8325fcf1
...
...
@@ -143,6 +143,14 @@ struct private_data {
return (retcode); \
}
#define GET_DEVMON_PRIVATE(conn,retcode) \
struct private_data *priv = (struct private_data *) (conn)->devMonPrivateData; \
if (!priv || priv->magic != MAGIC) { \
error (conn, VIR_ERR_INVALID_ARG, \
_("tried to use a closed or uninitialised handle")); \
return (retcode); \
}
enum
{
REMOTE_CALL_IN_OPEN
=
1
,
...
...
@@ -172,6 +180,7 @@ static virDomainPtr get_nonnull_domain (virConnectPtr conn, remote_nonnull_domai
static
virNetworkPtr
get_nonnull_network
(
virConnectPtr
conn
,
remote_nonnull_network
network
);
static
virStoragePoolPtr
get_nonnull_storage_pool
(
virConnectPtr
conn
,
remote_nonnull_storage_pool
pool
);
static
virStorageVolPtr
get_nonnull_storage_vol
(
virConnectPtr
conn
,
remote_nonnull_storage_vol
vol
);
static
virNodeDevicePtr
get_nonnull_node_device
(
virConnectPtr
conn
,
remote_nonnull_node_device
dev
);
static
void
make_nonnull_domain
(
remote_nonnull_domain
*
dom_dst
,
virDomainPtr
dom_src
);
static
void
make_nonnull_network
(
remote_nonnull_network
*
net_dst
,
virNetworkPtr
net_src
);
static
void
make_nonnull_storage_pool
(
remote_nonnull_storage_pool
*
pool_dst
,
virStoragePoolPtr
vol_src
);
...
...
@@ -3767,6 +3776,229 @@ remoteStorageVolGetPath (virStorageVolPtr vol)
}
/*----------------------------------------------------------------------*/
static
virDrvOpenStatus
remoteDevMonOpen
(
virConnectPtr
conn
,
virConnectAuthPtr
auth
ATTRIBUTE_UNUSED
,
int
flags
ATTRIBUTE_UNUSED
)
{
if
(
conn
&&
conn
->
driver
&&
STREQ
(
conn
->
driver
->
name
,
"remote"
))
{
/* If we're here, the remote driver is already
* in use due to a) a QEMU uri, or b) a remote
* URI. So we can re-use existing connection
*/
conn
->
devMonPrivateData
=
conn
->
privateData
;
return
VIR_DRV_OPEN_SUCCESS
;
}
/* Decline open. Will fallback to appropriate local node driver. */
return
VIR_DRV_OPEN_DECLINED
;
}
static
int
remoteDevMonClose
(
virConnectPtr
conn
)
{
int
ret
=
0
;
GET_DEVMON_PRIVATE
(
conn
,
-
1
);
if
(
priv
->
localUses
)
{
priv
->
localUses
--
;
if
(
!
priv
->
localUses
)
{
ret
=
doRemoteClose
(
conn
,
priv
);
VIR_FREE
(
priv
);
conn
->
devMonPrivateData
=
NULL
;
}
}
return
ret
;
}
static
int
remoteNodeNumOfDevices
(
virConnectPtr
conn
,
const
char
*
cap
,
unsigned
int
flags
)
{
remote_node_num_of_devices_args
args
;
remote_node_num_of_devices_ret
ret
;
GET_STORAGE_PRIVATE
(
conn
,
-
1
);
args
.
cap
=
cap
?
(
char
**
)
&
cap
:
NULL
;
args
.
flags
=
flags
;
memset
(
&
ret
,
0
,
sizeof
ret
);
if
(
call
(
conn
,
priv
,
0
,
REMOTE_PROC_NODE_NUM_OF_DEVICES
,
(
xdrproc_t
)
xdr_remote_node_num_of_devices_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_node_num_of_devices_ret
,
(
char
*
)
&
ret
)
==
-
1
)
return
-
1
;
return
ret
.
num
;
}
static
int
remoteNodeListDevices
(
virConnectPtr
conn
,
const
char
*
cap
,
char
**
const
names
,
int
maxnames
,
unsigned
int
flags
)
{
int
i
;
remote_node_list_devices_args
args
;
remote_node_list_devices_ret
ret
;
GET_STORAGE_PRIVATE
(
conn
,
-
1
);
if
(
maxnames
>
REMOTE_NODE_DEVICE_NAME_LIST_MAX
)
{
error
(
conn
,
VIR_ERR_RPC
,
_
(
"too many device names requested"
));
return
-
1
;
}
args
.
cap
=
cap
?
(
char
**
)
&
cap
:
NULL
;
args
.
maxnames
=
maxnames
;
args
.
flags
=
flags
;
memset
(
&
ret
,
0
,
sizeof
ret
);
if
(
call
(
conn
,
priv
,
0
,
REMOTE_PROC_NODE_LIST_DEVICES
,
(
xdrproc_t
)
xdr_remote_node_list_devices_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_node_list_devices_ret
,
(
char
*
)
&
ret
)
==
-
1
)
return
-
1
;
if
(
ret
.
names
.
names_len
>
maxnames
)
{
error
(
conn
,
VIR_ERR_RPC
,
_
(
"too many device names received"
));
xdr_free
((
xdrproc_t
)
xdr_remote_node_list_devices_ret
,
(
char
*
)
&
ret
);
return
-
1
;
}
/* This call is caller-frees (although that isn't clear from
* the documentation). However xdr_free will free up both the
* names and the list of pointers, so we have to strdup the
* names here.
*/
for
(
i
=
0
;
i
<
ret
.
names
.
names_len
;
++
i
)
names
[
i
]
=
strdup
(
ret
.
names
.
names_val
[
i
]);
xdr_free
((
xdrproc_t
)
xdr_remote_node_list_devices_ret
,
(
char
*
)
&
ret
);
return
ret
.
names
.
names_len
;
}
static
virNodeDevicePtr
remoteNodeDeviceLookupByName
(
virConnectPtr
conn
,
const
char
*
name
)
{
remote_node_device_lookup_by_name_args
args
;
remote_node_device_lookup_by_name_ret
ret
;
virNodeDevicePtr
dev
;
GET_STORAGE_PRIVATE
(
conn
,
NULL
);
args
.
name
=
(
char
*
)
name
;
memset
(
&
ret
,
0
,
sizeof
ret
);
if
(
call
(
conn
,
priv
,
0
,
REMOTE_PROC_NODE_DEVICE_LOOKUP_BY_NAME
,
(
xdrproc_t
)
xdr_remote_node_device_lookup_by_name_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_node_device_lookup_by_name_ret
,
(
char
*
)
&
ret
)
==
-
1
)
return
NULL
;
dev
=
get_nonnull_node_device
(
conn
,
ret
.
dev
);
xdr_free
((
xdrproc_t
)
xdr_remote_node_device_lookup_by_name_ret
,
(
char
*
)
&
ret
);
return
dev
;
}
static
char
*
remoteNodeDeviceDumpXML
(
virNodeDevicePtr
dev
,
unsigned
int
flags
)
{
remote_node_device_dump_xml_args
args
;
remote_node_device_dump_xml_ret
ret
;
GET_STORAGE_PRIVATE
(
dev
->
conn
,
NULL
);
args
.
name
=
dev
->
name
;
args
.
flags
=
flags
;
memset
(
&
ret
,
0
,
sizeof
ret
);
if
(
call
(
dev
->
conn
,
priv
,
0
,
REMOTE_PROC_NODE_DEVICE_DUMP_XML
,
(
xdrproc_t
)
xdr_remote_node_device_dump_xml_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_node_device_dump_xml_ret
,
(
char
*
)
&
ret
)
==
-
1
)
return
NULL
;
/* Caller frees. */
return
ret
.
xml
;
}
static
char
*
remoteNodeDeviceGetParent
(
virNodeDevicePtr
dev
)
{
remote_node_device_get_parent_args
args
;
remote_node_device_get_parent_ret
ret
;
GET_STORAGE_PRIVATE
(
dev
->
conn
,
NULL
);
args
.
name
=
dev
->
name
;
memset
(
&
ret
,
0
,
sizeof
ret
);
if
(
call
(
dev
->
conn
,
priv
,
0
,
REMOTE_PROC_NODE_DEVICE_GET_PARENT
,
(
xdrproc_t
)
xdr_remote_node_device_get_parent_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_node_device_get_parent_ret
,
(
char
*
)
&
ret
)
==
-
1
)
return
NULL
;
/* Caller frees. */
return
ret
.
parent
?
*
ret
.
parent
:
NULL
;
}
static
int
remoteNodeDeviceNumOfCaps
(
virNodeDevicePtr
dev
)
{
remote_node_device_num_of_caps_args
args
;
remote_node_device_num_of_caps_ret
ret
;
GET_STORAGE_PRIVATE
(
dev
->
conn
,
-
1
);
args
.
name
=
dev
->
name
;
memset
(
&
ret
,
0
,
sizeof
ret
);
if
(
call
(
dev
->
conn
,
priv
,
0
,
REMOTE_PROC_NODE_DEVICE_NUM_OF_CAPS
,
(
xdrproc_t
)
xdr_remote_node_device_num_of_caps_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_node_device_num_of_caps_ret
,
(
char
*
)
&
ret
)
==
-
1
)
return
-
1
;
return
ret
.
num
;
}
static
int
remoteNodeDeviceListCaps
(
virNodeDevicePtr
dev
,
char
**
const
names
,
int
maxnames
)
{
int
i
;
remote_node_device_list_caps_args
args
;
remote_node_device_list_caps_ret
ret
;
GET_STORAGE_PRIVATE
(
dev
->
conn
,
-
1
);
if
(
maxnames
>
REMOTE_NODE_DEVICE_CAPS_LIST_MAX
)
{
error
(
dev
->
conn
,
VIR_ERR_RPC
,
_
(
"too many capability names requested"
));
return
-
1
;
}
args
.
maxnames
=
maxnames
;
args
.
name
=
dev
->
name
;
memset
(
&
ret
,
0
,
sizeof
ret
);
if
(
call
(
dev
->
conn
,
priv
,
0
,
REMOTE_PROC_NODE_DEVICE_LIST_CAPS
,
(
xdrproc_t
)
xdr_remote_node_device_list_caps_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_node_device_list_caps_ret
,
(
char
*
)
&
ret
)
==
-
1
)
return
-
1
;
if
(
ret
.
names
.
names_len
>
maxnames
)
{
error
(
dev
->
conn
,
VIR_ERR_RPC
,
_
(
"too many capability names received"
));
xdr_free
((
xdrproc_t
)
xdr_remote_node_device_list_caps_ret
,
(
char
*
)
&
ret
);
return
-
1
;
}
/* This call is caller-frees (although that isn't clear from
* the documentation). However xdr_free will free up both the
* names and the list of pointers, so we have to strdup the
* names here.
*/
for
(
i
=
0
;
i
<
ret
.
names
.
names_len
;
++
i
)
names
[
i
]
=
strdup
(
ret
.
names
.
names_val
[
i
]);
xdr_free
((
xdrproc_t
)
xdr_remote_node_device_list_caps_ret
,
(
char
*
)
&
ret
);
return
ret
.
names
.
names_len
;
}
/*----------------------------------------------------------------------*/
static
int
...
...
@@ -5029,6 +5261,12 @@ get_nonnull_storage_vol (virConnectPtr conn, remote_nonnull_storage_vol vol)
return
virGetStorageVol
(
conn
,
vol
.
pool
,
vol
.
name
,
vol
.
key
);
}
static
virNodeDevicePtr
get_nonnull_node_device
(
virConnectPtr
conn
,
remote_nonnull_node_device
dev
)
{
return
virGetNodeDevice
(
conn
,
dev
.
name
);
}
/* Make remote_nonnull_domain and remote_nonnull_network. */
static
void
make_nonnull_domain
(
remote_nonnull_domain
*
dom_dst
,
virDomainPtr
dom_src
)
...
...
@@ -5184,6 +5422,20 @@ static virStorageDriver storage_driver = {
.
volGetPath
=
remoteStorageVolGetPath
,
};
static
virDeviceMonitor
dev_monitor
=
{
.
name
=
"remote"
,
.
open
=
remoteDevMonOpen
,
.
close
=
remoteDevMonClose
,
.
numOfDevices
=
remoteNodeNumOfDevices
,
.
listDevices
=
remoteNodeListDevices
,
.
deviceLookupByName
=
remoteNodeDeviceLookupByName
,
.
deviceDumpXML
=
remoteNodeDeviceDumpXML
,
.
deviceGetParent
=
remoteNodeDeviceGetParent
,
.
deviceNumOfCaps
=
remoteNodeDeviceNumOfCaps
,
.
deviceListCaps
=
remoteNodeDeviceListCaps
,
};
#ifdef WITH_LIBVIRTD
static
virStateDriver
state_driver
=
{
.
initialize
=
remoteStartup
,
...
...
@@ -5203,6 +5455,7 @@ remoteRegister (void)
if
(
virRegisterDriver
(
&
driver
)
==
-
1
)
return
-
1
;
if
(
virRegisterNetworkDriver
(
&
network_driver
)
==
-
1
)
return
-
1
;
if
(
virRegisterStorageDriver
(
&
storage_driver
)
==
-
1
)
return
-
1
;
if
(
virRegisterDeviceMonitor
(
&
dev_monitor
)
==
-
1
)
return
-
1
;
#ifdef WITH_LIBVIRTD
if
(
virRegisterStateDriver
(
&
state_driver
)
==
-
1
)
return
-
1
;
#endif
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
新手
引导
客服
返回
顶部