Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
16c1c083
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看板
提交
16c1c083
编写于
10月 14, 2009
作者:
C
Cole Robinson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
test: Support virNodeDeviceCreate and virNodeDeviceDestroy
上级
0b74bc62
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
127 addition
and
2 deletion
+127
-2
src/test/test_driver.c
src/test/test_driver.c
+127
-2
未找到文件。
src/test/test_driver.c
浏览文件 @
16c1c083
...
...
@@ -4376,6 +4376,131 @@ cleanup:
return
ret
;
}
static
virNodeDevicePtr
testNodeDeviceCreateXML
(
virConnectPtr
conn
,
const
char
*
xmlDesc
,
unsigned
int
flags
ATTRIBUTE_UNUSED
)
{
testConnPtr
driver
=
conn
->
privateData
;
virNodeDeviceDefPtr
def
=
NULL
;
virNodeDeviceObjPtr
obj
=
NULL
;
char
*
wwnn
=
NULL
,
*
wwpn
=
NULL
;
int
parent_host
=
-
1
;
virNodeDevicePtr
dev
=
NULL
;
virNodeDevCapsDefPtr
caps
;
testDriverLock
(
driver
);
def
=
virNodeDeviceDefParseString
(
conn
,
xmlDesc
,
CREATE_DEVICE
);
if
(
def
==
NULL
)
{
goto
cleanup
;
}
/* We run these next two simply for validation */
if
(
virNodeDeviceGetWWNs
(
conn
,
def
,
&
wwnn
,
&
wwpn
)
==
-
1
)
{
goto
cleanup
;
}
if
(
virNodeDeviceGetParentHost
(
conn
,
&
driver
->
devs
,
def
->
name
,
def
->
parent
,
&
parent_host
)
==
-
1
)
{
goto
cleanup
;
}
/* 'name' is supposed to be filled in by the node device backend, which
* we don't have. Use WWPN instead. */
VIR_FREE
(
def
->
name
);
if
(
!
(
def
->
name
=
strdup
(
wwpn
)))
{
virReportOOMError
(
conn
);
goto
cleanup
;
}
/* Fill in a random 'host' value, since this would also come from
* the backend */
caps
=
def
->
caps
;
while
(
caps
)
{
if
(
caps
->
type
!=
VIR_NODE_DEV_CAP_SCSI_HOST
)
continue
;
caps
->
data
.
scsi_host
.
host
=
virRandom
(
1024
);
caps
=
caps
->
next
;
}
if
(
!
(
obj
=
virNodeDeviceAssignDef
(
conn
,
&
driver
->
devs
,
def
)))
{
goto
cleanup
;
}
virNodeDeviceObjUnlock
(
obj
);
dev
=
virGetNodeDevice
(
conn
,
def
->
name
);
def
=
NULL
;
cleanup:
testDriverUnlock
(
driver
);
if
(
def
)
virNodeDeviceDefFree
(
def
);
VIR_FREE
(
wwnn
);
VIR_FREE
(
wwpn
);
return
dev
;
}
static
int
testNodeDeviceDestroy
(
virNodeDevicePtr
dev
)
{
int
ret
=
0
;
testConnPtr
driver
=
dev
->
conn
->
privateData
;
virNodeDeviceObjPtr
obj
=
NULL
;
char
*
parent_name
=
NULL
,
*
wwnn
=
NULL
,
*
wwpn
=
NULL
;
int
parent_host
=
-
1
;
testDriverLock
(
driver
);
obj
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
dev
->
name
);
testDriverUnlock
(
driver
);
if
(
!
obj
)
{
virNodeDeviceReportError
(
dev
->
conn
,
VIR_ERR_NO_NODE_DEVICE
,
NULL
);
goto
out
;
}
if
(
virNodeDeviceGetWWNs
(
dev
->
conn
,
obj
->
def
,
&
wwnn
,
&
wwpn
)
==
-
1
)
{
goto
out
;
}
parent_name
=
strdup
(
obj
->
def
->
parent
);
if
(
parent_name
==
NULL
)
{
virReportOOMError
(
dev
->
conn
);
goto
out
;
}
/* virNodeDeviceGetParentHost will cause the device object's lock to be
* taken, so we have to dup the parent's name and drop the lock
* before calling it. We don't need the reference to the object
* any more once we have the parent's name. */
virNodeDeviceObjUnlock
(
obj
);
/* We do this just for basic validation */
if
(
virNodeDeviceGetParentHost
(
dev
->
conn
,
&
driver
->
devs
,
dev
->
name
,
parent_name
,
&
parent_host
)
==
-
1
)
{
obj
=
NULL
;
goto
out
;
}
virNodeDeviceObjLock
(
obj
);
virNodeDeviceObjRemove
(
&
driver
->
devs
,
obj
);
out:
if
(
obj
)
virNodeDeviceObjUnlock
(
obj
);
VIR_FREE
(
parent_name
);
VIR_FREE
(
wwnn
);
VIR_FREE
(
wwpn
);
return
ret
;
}
/* Domain event implementations */
static
int
...
...
@@ -4650,8 +4775,8 @@ static virDeviceMonitor testDevMonitor = {
.
deviceGetParent
=
testNodeDeviceGetParent
,
.
deviceNumOfCaps
=
testNodeDeviceNumOfCaps
,
.
deviceListCaps
=
testNodeDeviceListCaps
,
//.deviceCreateXML = nodeDeviceCreateXML;
//.deviceDestroy = nodeDeviceDestroy;
.
deviceCreateXML
=
testNodeDeviceCreateXML
,
.
deviceDestroy
=
testNodeDeviceDestroy
,
};
static
virSecretDriver
testSecretDriver
=
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录