Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
9e2fe245
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9e2fe245
编写于
10月 14, 2009
作者:
C
Cole Robinson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
node device: Break out get_wwns and get_parent_node helpers
These will be used by the test driver, so move them to a shareable space.
上级
d686056f
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
115 addition
and
99 deletion
+115
-99
src/conf/node_device_conf.c
src/conf/node_device_conf.c
+89
-0
src/conf/node_device_conf.h
src/conf/node_device_conf.h
+11
-0
src/libvirt_private.syms
src/libvirt_private.syms
+2
-0
src/node_device/node_device_driver.c
src/node_device/node_device_driver.c
+13
-99
未找到文件。
src/conf/node_device_conf.c
浏览文件 @
9e2fe245
...
@@ -1215,6 +1215,95 @@ virNodeDeviceDefParseFile(virConnectPtr conn,
...
@@ -1215,6 +1215,95 @@ virNodeDeviceDefParseFile(virConnectPtr conn,
return
virNodeDeviceDefParse
(
conn
,
NULL
,
filename
,
create
);
return
virNodeDeviceDefParse
(
conn
,
NULL
,
filename
,
create
);
}
}
/*
* Return fc_host dev's WWNN and WWPN
*/
int
virNodeDeviceGetWWNs
(
virConnectPtr
conn
,
virNodeDeviceDefPtr
def
,
char
**
wwnn
,
char
**
wwpn
)
{
virNodeDevCapsDefPtr
cap
=
NULL
;
int
ret
=
0
;
cap
=
def
->
caps
;
while
(
cap
!=
NULL
)
{
if
(
cap
->
type
==
VIR_NODE_DEV_CAP_SCSI_HOST
&&
cap
->
data
.
scsi_host
.
flags
&
VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST
)
{
*
wwnn
=
strdup
(
cap
->
data
.
scsi_host
.
wwnn
);
*
wwpn
=
strdup
(
cap
->
data
.
scsi_host
.
wwpn
);
break
;
}
cap
=
cap
->
next
;
}
if
(
cap
==
NULL
)
{
virNodeDeviceReportError
(
conn
,
VIR_ERR_NO_SUPPORT
,
"%s"
,
_
(
"Device is not a fibre channel HBA"
));
ret
=
-
1
;
}
if
(
*
wwnn
==
NULL
||
*
wwpn
==
NULL
)
{
/* Free the other one, if allocated... */
VIR_FREE
(
wwnn
);
VIR_FREE
(
wwpn
);
ret
=
-
1
;
virReportOOMError
(
conn
);
}
return
ret
;
}
/*
* Return the NPIV dev's parent device name
*/
int
virNodeDeviceGetParentHost
(
virConnectPtr
conn
,
const
virNodeDeviceObjListPtr
devs
,
const
char
*
dev_name
,
const
char
*
parent_name
,
int
*
parent_host
)
{
virNodeDeviceObjPtr
parent
=
NULL
;
virNodeDevCapsDefPtr
cap
=
NULL
;
int
ret
=
0
;
parent
=
virNodeDeviceFindByName
(
devs
,
parent_name
);
if
(
parent
==
NULL
)
{
virNodeDeviceReportError
(
conn
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"Could not find parent HBA for '%s'"
),
dev_name
);
ret
=
-
1
;
goto
out
;
}
cap
=
parent
->
def
->
caps
;
while
(
cap
!=
NULL
)
{
if
(
cap
->
type
==
VIR_NODE_DEV_CAP_SCSI_HOST
&&
(
cap
->
data
.
scsi_host
.
flags
&
VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS
))
{
*
parent_host
=
cap
->
data
.
scsi_host
.
host
;
break
;
}
cap
=
cap
->
next
;
}
if
(
cap
==
NULL
)
{
virNodeDeviceReportError
(
conn
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"Parent HBA %s is not capable "
"of vport operations"
),
parent
->
def
->
name
);
ret
=
-
1
;
}
virNodeDeviceObjUnlock
(
parent
);
out:
return
ret
;
}
void
virNodeDevCapsDefFree
(
virNodeDevCapsDefPtr
caps
)
void
virNodeDevCapsDefFree
(
virNodeDevCapsDefPtr
caps
)
{
{
...
...
src/conf/node_device_conf.h
浏览文件 @
9e2fe245
...
@@ -221,6 +221,17 @@ virNodeDeviceDefPtr virNodeDeviceDefParseNode(virConnectPtr conn,
...
@@ -221,6 +221,17 @@ virNodeDeviceDefPtr virNodeDeviceDefParseNode(virConnectPtr conn,
xmlNodePtr
root
,
xmlNodePtr
root
,
int
create
);
int
create
);
int
virNodeDeviceGetWWNs
(
virConnectPtr
conn
,
virNodeDeviceDefPtr
def
,
char
**
wwnn
,
char
**
wwpn
);
int
virNodeDeviceGetParentHost
(
virConnectPtr
conn
,
const
virNodeDeviceObjListPtr
devs
,
const
char
*
dev_name
,
const
char
*
parent_name
,
int
*
parent_host
);
void
virNodeDeviceDefFree
(
virNodeDeviceDefPtr
def
);
void
virNodeDeviceDefFree
(
virNodeDeviceDefPtr
def
);
void
virNodeDeviceObjFree
(
virNodeDeviceObjPtr
dev
);
void
virNodeDeviceObjFree
(
virNodeDeviceObjPtr
dev
);
...
...
src/libvirt_private.syms
浏览文件 @
9e2fe245
...
@@ -318,6 +318,8 @@ virNodeDeviceDefParseString;
...
@@ -318,6 +318,8 @@ virNodeDeviceDefParseString;
virNodeDeviceObjLock;
virNodeDeviceObjLock;
virNodeDeviceObjUnlock;
virNodeDeviceObjUnlock;
virNodeDeviceAssignDef;
virNodeDeviceAssignDef;
virNodeDeviceGetWWNs;
virNodeDeviceGetParentHost;
# pci.h
# pci.h
...
...
src/node_device/node_device_driver.c
浏览文件 @
9e2fe245
...
@@ -458,92 +458,6 @@ cleanup:
...
@@ -458,92 +458,6 @@ cleanup:
}
}
static
int
get_wwns
(
virConnectPtr
conn
,
virNodeDeviceDefPtr
def
,
char
**
wwnn
,
char
**
wwpn
)
{
virNodeDevCapsDefPtr
cap
=
NULL
;
int
ret
=
0
;
cap
=
def
->
caps
;
while
(
cap
!=
NULL
)
{
if
(
cap
->
type
==
VIR_NODE_DEV_CAP_SCSI_HOST
&&
cap
->
data
.
scsi_host
.
flags
&
VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST
)
{
*
wwnn
=
strdup
(
cap
->
data
.
scsi_host
.
wwnn
);
*
wwpn
=
strdup
(
cap
->
data
.
scsi_host
.
wwpn
);
break
;
}
cap
=
cap
->
next
;
}
if
(
cap
==
NULL
)
{
virNodeDeviceReportError
(
conn
,
VIR_ERR_NO_SUPPORT
,
"%s"
,
_
(
"Device is not a fibre channel HBA"
));
ret
=
-
1
;
}
if
(
*
wwnn
==
NULL
||
*
wwpn
==
NULL
)
{
/* Free the other one, if allocated... */
VIR_FREE
(
wwnn
);
VIR_FREE
(
wwpn
);
ret
=
-
1
;
virReportOOMError
(
conn
);
}
return
ret
;
}
static
int
get_parent_host
(
virConnectPtr
conn
,
virDeviceMonitorStatePtr
driver
,
const
char
*
dev_name
,
const
char
*
parent_name
,
int
*
parent_host
)
{
virNodeDeviceObjPtr
parent
=
NULL
;
virNodeDevCapsDefPtr
cap
=
NULL
;
int
ret
=
0
;
parent
=
virNodeDeviceFindByName
(
&
driver
->
devs
,
parent_name
);
if
(
parent
==
NULL
)
{
virNodeDeviceReportError
(
conn
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"Could not find parent HBA for '%s'"
),
dev_name
);
ret
=
-
1
;
goto
out
;
}
cap
=
parent
->
def
->
caps
;
while
(
cap
!=
NULL
)
{
if
(
cap
->
type
==
VIR_NODE_DEV_CAP_SCSI_HOST
&&
(
cap
->
data
.
scsi_host
.
flags
&
VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS
))
{
*
parent_host
=
cap
->
data
.
scsi_host
.
host
;
break
;
}
cap
=
cap
->
next
;
}
if
(
cap
==
NULL
)
{
virNodeDeviceReportError
(
conn
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"Parent HBA %s is not capable "
"of vport operations"
),
parent
->
def
->
name
);
ret
=
-
1
;
}
virNodeDeviceObjUnlock
(
parent
);
out:
return
ret
;
}
static
int
static
int
get_time
(
virConnectPtr
conn
,
time_t
*
t
)
get_time
(
virConnectPtr
conn
,
time_t
*
t
)
{
{
...
@@ -630,15 +544,15 @@ nodeDeviceCreateXML(virConnectPtr conn,
...
@@ -630,15 +544,15 @@ nodeDeviceCreateXML(virConnectPtr conn,
goto
cleanup
;
goto
cleanup
;
}
}
if
(
get_wwn
s
(
conn
,
def
,
&
wwnn
,
&
wwpn
)
==
-
1
)
{
if
(
virNodeDeviceGetWWN
s
(
conn
,
def
,
&
wwnn
,
&
wwpn
)
==
-
1
)
{
goto
cleanup
;
goto
cleanup
;
}
}
if
(
get_parent_h
ost
(
conn
,
if
(
virNodeDeviceGetParentH
ost
(
conn
,
driver
,
&
driver
->
devs
,
def
->
name
,
def
->
name
,
def
->
parent
,
def
->
parent
,
&
parent_host
)
==
-
1
)
{
&
parent_host
)
==
-
1
)
{
goto
cleanup
;
goto
cleanup
;
}
}
...
@@ -685,13 +599,13 @@ nodeDeviceDestroy(virNodeDevicePtr dev)
...
@@ -685,13 +599,13 @@ nodeDeviceDestroy(virNodeDevicePtr dev)
goto
out
;
goto
out
;
}
}
if
(
get_wwn
s
(
dev
->
conn
,
obj
->
def
,
&
wwnn
,
&
wwpn
)
==
-
1
)
{
if
(
virNodeDeviceGetWWN
s
(
dev
->
conn
,
obj
->
def
,
&
wwnn
,
&
wwpn
)
==
-
1
)
{
goto
out
;
goto
out
;
}
}
parent_name
=
strdup
(
obj
->
def
->
parent
);
parent_name
=
strdup
(
obj
->
def
->
parent
);
/*
get_parent_h
ost will cause the device object's lock to be
/*
virNodeDeviceGetParentH
ost will cause the device object's lock to be
* taken, so we have to dup the parent's name and drop the lock
* 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
* before calling it. We don't need the reference to the object
* any more once we have the parent's name. */
* any more once we have the parent's name. */
...
@@ -703,11 +617,11 @@ nodeDeviceDestroy(virNodeDevicePtr dev)
...
@@ -703,11 +617,11 @@ nodeDeviceDestroy(virNodeDevicePtr dev)
goto
out
;
goto
out
;
}
}
if
(
get_parent_h
ost
(
dev
->
conn
,
if
(
virNodeDeviceGetParentH
ost
(
dev
->
conn
,
driver
,
&
driver
->
devs
,
dev
->
name
,
dev
->
name
,
parent_name
,
parent_name
,
&
parent_host
)
==
-
1
)
{
&
parent_host
)
==
-
1
)
{
goto
out
;
goto
out
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录