Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
cca4d10d
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看板
提交
cca4d10d
编写于
5月 29, 2013
作者:
J
Jiri Denemark
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implement extensible migration APIs in remote driver
上级
c0762b65
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
398 addition
and
0 deletion
+398
-0
src/remote/remote_driver.c
src/remote/remote_driver.c
+398
-0
未找到文件。
src/remote/remote_driver.c
浏览文件 @
cca4d10d
...
@@ -6042,6 +6042,398 @@ done:
...
@@ -6042,6 +6042,398 @@ done:
}
}
static
char
*
remoteDomainMigrateBegin3Params
(
virDomainPtr
domain
,
virTypedParameterPtr
params
,
int
nparams
,
char
**
cookieout
,
int
*
cookieoutlen
,
unsigned
int
flags
)
{
char
*
rv
=
NULL
;
remote_domain_migrate_begin3_params_args
args
;
remote_domain_migrate_begin3_params_ret
ret
;
struct
private_data
*
priv
=
domain
->
conn
->
privateData
;
remoteDriverLock
(
priv
);
memset
(
&
args
,
0
,
sizeof
(
args
));
memset
(
&
ret
,
0
,
sizeof
(
ret
));
make_nonnull_domain
(
&
args
.
dom
,
domain
);
args
.
flags
=
flags
;
if
(
remoteSerializeTypedParameters
(
params
,
nparams
,
&
args
.
params
.
params_val
,
&
args
.
params
.
params_len
)
<
0
)
{
xdr_free
((
xdrproc_t
)
xdr_remote_domain_migrate_begin3_params_args
,
(
char
*
)
&
args
);
goto
cleanup
;
}
if
(
call
(
domain
->
conn
,
priv
,
0
,
REMOTE_PROC_DOMAIN_MIGRATE_BEGIN3_PARAMS
,
(
xdrproc_t
)
xdr_remote_domain_migrate_begin3_params_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_domain_migrate_begin3_params_ret
,
(
char
*
)
&
ret
)
==
-
1
)
goto
cleanup
;
if
(
ret
.
cookie_out
.
cookie_out_len
>
0
)
{
if
(
!
cookieout
||
!
cookieoutlen
)
{
virReportError
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"caller ignores cookieout or cookieoutlen"
));
goto
error
;
}
*
cookieout
=
ret
.
cookie_out
.
cookie_out_val
;
/* Caller frees. */
*
cookieoutlen
=
ret
.
cookie_out
.
cookie_out_len
;
}
rv
=
ret
.
xml
;
/* caller frees */
cleanup:
remoteFreeTypedParameters
(
args
.
params
.
params_val
,
args
.
params
.
params_len
);
remoteDriverUnlock
(
priv
);
return
rv
;
error:
VIR_FREE
(
ret
.
cookie_out
.
cookie_out_val
);
goto
cleanup
;
}
static
int
remoteDomainMigratePrepare3Params
(
virConnectPtr
dconn
,
virTypedParameterPtr
params
,
int
nparams
,
const
char
*
cookiein
,
int
cookieinlen
,
char
**
cookieout
,
int
*
cookieoutlen
,
char
**
uri_out
,
unsigned
int
flags
)
{
int
rv
=
-
1
;
remote_domain_migrate_prepare3_params_args
args
;
remote_domain_migrate_prepare3_params_ret
ret
;
struct
private_data
*
priv
=
dconn
->
privateData
;
remoteDriverLock
(
priv
);
memset
(
&
args
,
0
,
sizeof
(
args
));
memset
(
&
ret
,
0
,
sizeof
(
ret
));
if
(
remoteSerializeTypedParameters
(
params
,
nparams
,
&
args
.
params
.
params_val
,
&
args
.
params
.
params_len
)
<
0
)
{
xdr_free
((
xdrproc_t
)
xdr_remote_domain_migrate_prepare3_params_args
,
(
char
*
)
&
args
);
goto
cleanup
;
}
args
.
cookie_in
.
cookie_in_val
=
(
char
*
)
cookiein
;
args
.
cookie_in
.
cookie_in_len
=
cookieinlen
;
args
.
flags
=
flags
;
if
(
call
(
dconn
,
priv
,
0
,
REMOTE_PROC_DOMAIN_MIGRATE_PREPARE3_PARAMS
,
(
xdrproc_t
)
xdr_remote_domain_migrate_prepare3_params_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_domain_migrate_prepare3_params_ret
,
(
char
*
)
&
ret
)
==
-
1
)
goto
cleanup
;
if
(
ret
.
cookie_out
.
cookie_out_len
>
0
)
{
if
(
!
cookieout
||
!
cookieoutlen
)
{
virReportError
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"caller ignores cookieout or cookieoutlen"
));
goto
error
;
}
*
cookieout
=
ret
.
cookie_out
.
cookie_out_val
;
/* Caller frees. */
*
cookieoutlen
=
ret
.
cookie_out
.
cookie_out_len
;
}
if
(
ret
.
uri_out
)
{
if
(
!
uri_out
)
{
virReportError
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"caller ignores uri_out"
));
goto
error
;
}
*
uri_out
=
*
ret
.
uri_out
;
/* Caller frees. */
}
rv
=
0
;
cleanup:
remoteFreeTypedParameters
(
args
.
params
.
params_val
,
args
.
params
.
params_len
);
VIR_FREE
(
ret
.
uri_out
);
remoteDriverUnlock
(
priv
);
return
rv
;
error:
VIR_FREE
(
ret
.
cookie_out
.
cookie_out_val
);
if
(
ret
.
uri_out
)
VIR_FREE
(
*
ret
.
uri_out
);
goto
cleanup
;
}
static
int
remoteDomainMigratePrepareTunnel3Params
(
virConnectPtr
dconn
,
virStreamPtr
st
,
virTypedParameterPtr
params
,
int
nparams
,
const
char
*
cookiein
,
int
cookieinlen
,
char
**
cookieout
,
int
*
cookieoutlen
,
unsigned
int
flags
)
{
struct
private_data
*
priv
=
dconn
->
privateData
;
int
rv
=
-
1
;
remote_domain_migrate_prepare_tunnel3_params_args
args
;
remote_domain_migrate_prepare_tunnel3_params_ret
ret
;
virNetClientStreamPtr
netst
;
remoteDriverLock
(
priv
);
memset
(
&
args
,
0
,
sizeof
(
args
));
memset
(
&
ret
,
0
,
sizeof
(
ret
));
args
.
cookie_in
.
cookie_in_val
=
(
char
*
)
cookiein
;
args
.
cookie_in
.
cookie_in_len
=
cookieinlen
;
args
.
flags
=
flags
;
if
(
remoteSerializeTypedParameters
(
params
,
nparams
,
&
args
.
params
.
params_val
,
&
args
.
params
.
params_len
)
<
0
)
{
xdr_free
((
xdrproc_t
)
xdr_remote_domain_migrate_prepare_tunnel3_params_args
,
(
char
*
)
&
args
);
goto
cleanup
;
}
if
(
!
(
netst
=
virNetClientStreamNew
(
priv
->
remoteProgram
,
REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3_PARAMS
,
priv
->
counter
)))
goto
cleanup
;
if
(
virNetClientAddStream
(
priv
->
client
,
netst
)
<
0
)
{
virObjectUnref
(
netst
);
goto
cleanup
;
}
st
->
driver
=
&
remoteStreamDrv
;
st
->
privateData
=
netst
;
if
(
call
(
dconn
,
priv
,
0
,
REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3_PARAMS
,
(
xdrproc_t
)
xdr_remote_domain_migrate_prepare_tunnel3_params_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_domain_migrate_prepare_tunnel3_params_ret
,
(
char
*
)
&
ret
)
==
-
1
)
{
virNetClientRemoveStream
(
priv
->
client
,
netst
);
virObjectUnref
(
netst
);
goto
cleanup
;
}
if
(
ret
.
cookie_out
.
cookie_out_len
>
0
)
{
if
(
!
cookieout
||
!
cookieoutlen
)
{
virReportError
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"caller ignores cookieout or cookieoutlen"
));
goto
error
;
}
*
cookieout
=
ret
.
cookie_out
.
cookie_out_val
;
/* Caller frees. */
*
cookieoutlen
=
ret
.
cookie_out
.
cookie_out_len
;
}
rv
=
0
;
cleanup:
remoteFreeTypedParameters
(
args
.
params
.
params_val
,
args
.
params
.
params_len
);
remoteDriverUnlock
(
priv
);
return
rv
;
error:
VIR_FREE
(
ret
.
cookie_out
.
cookie_out_val
);
goto
cleanup
;
}
static
int
remoteDomainMigratePerform3Params
(
virDomainPtr
dom
,
const
char
*
dconnuri
,
virTypedParameterPtr
params
,
int
nparams
,
const
char
*
cookiein
,
int
cookieinlen
,
char
**
cookieout
,
int
*
cookieoutlen
,
unsigned
int
flags
)
{
int
rv
=
-
1
;
remote_domain_migrate_perform3_params_args
args
;
remote_domain_migrate_perform3_params_ret
ret
;
struct
private_data
*
priv
=
dom
->
conn
->
privateData
;
remoteDriverLock
(
priv
);
memset
(
&
args
,
0
,
sizeof
(
args
));
memset
(
&
ret
,
0
,
sizeof
(
ret
));
make_nonnull_domain
(
&
args
.
dom
,
dom
);
args
.
dconnuri
=
dconnuri
==
NULL
?
NULL
:
(
char
**
)
&
dconnuri
;
args
.
cookie_in
.
cookie_in_val
=
(
char
*
)
cookiein
;
args
.
cookie_in
.
cookie_in_len
=
cookieinlen
;
args
.
flags
=
flags
;
if
(
remoteSerializeTypedParameters
(
params
,
nparams
,
&
args
.
params
.
params_val
,
&
args
.
params
.
params_len
)
<
0
)
{
xdr_free
((
xdrproc_t
)
xdr_remote_domain_migrate_perform3_params_args
,
(
char
*
)
&
args
);
goto
cleanup
;
}
if
(
call
(
dom
->
conn
,
priv
,
0
,
REMOTE_PROC_DOMAIN_MIGRATE_PERFORM3_PARAMS
,
(
xdrproc_t
)
xdr_remote_domain_migrate_perform3_params_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_domain_migrate_perform3_params_ret
,
(
char
*
)
&
ret
)
==
-
1
)
goto
cleanup
;
if
(
ret
.
cookie_out
.
cookie_out_len
>
0
)
{
if
(
!
cookieout
||
!
cookieoutlen
)
{
virReportError
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"caller ignores cookieout or cookieoutlen"
));
goto
error
;
}
*
cookieout
=
ret
.
cookie_out
.
cookie_out_val
;
/* Caller frees. */
*
cookieoutlen
=
ret
.
cookie_out
.
cookie_out_len
;
}
rv
=
0
;
cleanup:
remoteFreeTypedParameters
(
args
.
params
.
params_val
,
args
.
params
.
params_len
);
remoteDriverUnlock
(
priv
);
return
rv
;
error:
VIR_FREE
(
ret
.
cookie_out
.
cookie_out_val
);
goto
cleanup
;
}
static
virDomainPtr
remoteDomainMigrateFinish3Params
(
virConnectPtr
dconn
,
virTypedParameterPtr
params
,
int
nparams
,
const
char
*
cookiein
,
int
cookieinlen
,
char
**
cookieout
,
int
*
cookieoutlen
,
unsigned
int
flags
,
int
cancelled
)
{
remote_domain_migrate_finish3_params_args
args
;
remote_domain_migrate_finish3_params_ret
ret
;
struct
private_data
*
priv
=
dconn
->
privateData
;
virDomainPtr
rv
=
NULL
;
remoteDriverLock
(
priv
);
memset
(
&
args
,
0
,
sizeof
(
args
));
memset
(
&
ret
,
0
,
sizeof
(
ret
));
args
.
cookie_in
.
cookie_in_val
=
(
char
*
)
cookiein
;
args
.
cookie_in
.
cookie_in_len
=
cookieinlen
;
args
.
flags
=
flags
;
args
.
cancelled
=
cancelled
;
if
(
remoteSerializeTypedParameters
(
params
,
nparams
,
&
args
.
params
.
params_val
,
&
args
.
params
.
params_len
)
<
0
)
{
xdr_free
((
xdrproc_t
)
xdr_remote_domain_migrate_finish3_params_args
,
(
char
*
)
&
args
);
goto
cleanup
;
}
if
(
call
(
dconn
,
priv
,
0
,
REMOTE_PROC_DOMAIN_MIGRATE_FINISH3_PARAMS
,
(
xdrproc_t
)
xdr_remote_domain_migrate_finish3_params_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_remote_domain_migrate_finish3_params_ret
,
(
char
*
)
&
ret
)
==
-
1
)
goto
cleanup
;
rv
=
get_nonnull_domain
(
dconn
,
ret
.
dom
);
if
(
ret
.
cookie_out
.
cookie_out_len
>
0
)
{
if
(
!
cookieout
||
!
cookieoutlen
)
{
virReportError
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"caller ignores cookieout or cookieoutlen"
));
goto
error
;
}
*
cookieout
=
ret
.
cookie_out
.
cookie_out_val
;
/* Caller frees. */
*
cookieoutlen
=
ret
.
cookie_out
.
cookie_out_len
;
ret
.
cookie_out
.
cookie_out_val
=
NULL
;
ret
.
cookie_out
.
cookie_out_len
=
0
;
}
xdr_free
((
xdrproc_t
)
&
xdr_remote_domain_migrate_finish3_params_ret
,
(
char
*
)
&
ret
);
cleanup:
remoteFreeTypedParameters
(
args
.
params
.
params_val
,
args
.
params
.
params_len
);
remoteDriverUnlock
(
priv
);
return
rv
;
error:
VIR_FREE
(
ret
.
cookie_out
.
cookie_out_val
);
goto
cleanup
;
}
static
int
remoteDomainMigrateConfirm3Params
(
virDomainPtr
domain
,
virTypedParameterPtr
params
,
int
nparams
,
const
char
*
cookiein
,
int
cookieinlen
,
unsigned
int
flags
,
int
cancelled
)
{
int
rv
=
-
1
;
remote_domain_migrate_confirm3_params_args
args
;
struct
private_data
*
priv
=
domain
->
conn
->
privateData
;
remoteDriverLock
(
priv
);
memset
(
&
args
,
0
,
sizeof
(
args
));
make_nonnull_domain
(
&
args
.
dom
,
domain
);
args
.
cookie_in
.
cookie_in_len
=
cookieinlen
;
args
.
cookie_in
.
cookie_in_val
=
(
char
*
)
cookiein
;
args
.
flags
=
flags
;
args
.
cancelled
=
cancelled
;
if
(
remoteSerializeTypedParameters
(
params
,
nparams
,
&
args
.
params
.
params_val
,
&
args
.
params
.
params_len
)
<
0
)
{
xdr_free
((
xdrproc_t
)
xdr_remote_domain_migrate_confirm3_params_args
,
(
char
*
)
&
args
);
goto
cleanup
;
}
if
(
call
(
domain
->
conn
,
priv
,
0
,
REMOTE_PROC_DOMAIN_MIGRATE_CONFIRM3_PARAMS
,
(
xdrproc_t
)
xdr_remote_domain_migrate_confirm3_params_args
,
(
char
*
)
&
args
,
(
xdrproc_t
)
xdr_void
,
(
char
*
)
NULL
)
==
-
1
)
goto
cleanup
;
rv
=
0
;
cleanup:
remoteFreeTypedParameters
(
args
.
params
.
params_val
,
args
.
params
.
params_len
);
remoteDriverUnlock
(
priv
);
return
rv
;
}
static
void
static
void
remoteDomainEventQueue
(
struct
private_data
*
priv
,
virDomainEventPtr
event
)
remoteDomainEventQueue
(
struct
private_data
*
priv
,
virDomainEventPtr
event
)
{
{
...
@@ -6367,6 +6759,12 @@ static virDriver remote_driver = {
...
@@ -6367,6 +6759,12 @@ static virDriver remote_driver = {
.
nodeGetCPUMap
=
remoteNodeGetCPUMap
,
/* 1.0.0 */
.
nodeGetCPUMap
=
remoteNodeGetCPUMap
,
/* 1.0.0 */
.
domainFSTrim
=
remoteDomainFSTrim
,
/* 1.0.1 */
.
domainFSTrim
=
remoteDomainFSTrim
,
/* 1.0.1 */
.
domainLxcOpenNamespace
=
remoteDomainLxcOpenNamespace
,
/* 1.0.2 */
.
domainLxcOpenNamespace
=
remoteDomainLxcOpenNamespace
,
/* 1.0.2 */
.
domainMigrateBegin3Params
=
remoteDomainMigrateBegin3Params
,
/* 1.1.0 */
.
domainMigratePrepare3Params
=
remoteDomainMigratePrepare3Params
,
/* 1.1.0 */
.
domainMigratePrepareTunnel3Params
=
remoteDomainMigratePrepareTunnel3Params
,
/* 1.1.0 */
.
domainMigratePerform3Params
=
remoteDomainMigratePerform3Params
,
/* 1.1.0 */
.
domainMigrateFinish3Params
=
remoteDomainMigrateFinish3Params
,
/* 1.1.0 */
.
domainMigrateConfirm3Params
=
remoteDomainMigrateConfirm3Params
,
/* 1.1.0 */
};
};
static
virNetworkDriver
network_driver
=
{
static
virNetworkDriver
network_driver
=
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录