Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
eed1b177
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看板
提交
eed1b177
编写于
10月 27, 2007
作者:
D
Daniel P. Berrange
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refactor device parsing code
上级
79995893
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
116 addition
and
44 deletion
+116
-44
ChangeLog
ChangeLog
+4
-0
src/qemu_conf.c
src/qemu_conf.c
+91
-44
src/qemu_conf.h
src/qemu_conf.h
+21
-0
未找到文件。
ChangeLog
浏览文件 @
eed1b177
Fri Oct 26 21:14:44 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* src/qemu_conf.h, src/qemu_conf.c: Refactor device parsing code
Fri Oct 26 21:10:44 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* src/qemu_driver.c: make qemudMonitorCommand responsible for
...
...
src/qemu_conf.c
浏览文件 @
eed1b177
...
...
@@ -499,11 +499,14 @@ int qemudExtractVersion(virConnectPtr conn,
}
/* Parse the XML definition for a disk */
static
struct
qemud_vm_disk_def
*
qemudParseDiskXML
(
virConnectPtr
conn
,
struct
qemud_driver
*
driver
ATTRIBUTE_UNUSED
,
xmlNodePtr
node
)
{
struct
qemud_vm_disk_def
*
disk
=
calloc
(
1
,
sizeof
(
struct
qemud_vm_disk_def
));
/* Parse the XML definition for a disk
* @param disk pre-allocated & zero'd disk record
* @param node XML nodeset to parse for disk definition
* @return 0 on success, -1 on failure
*/
static
int
qemudParseDiskXML
(
virConnectPtr
conn
,
struct
qemud_vm_disk_def
*
disk
,
xmlNodePtr
node
)
{
xmlNodePtr
cur
;
xmlChar
*
device
=
NULL
;
xmlChar
*
source
=
NULL
;
...
...
@@ -511,11 +514,6 @@ static struct qemud_vm_disk_def *qemudParseDiskXML(virConnectPtr conn,
xmlChar
*
type
=
NULL
;
int
typ
=
0
;
if
(
!
disk
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"disk"
);
return
NULL
;
}
type
=
xmlGetProp
(
node
,
BAD_CAST
"type"
);
if
(
type
!=
NULL
)
{
if
(
xmlStrEqual
(
type
,
BAD_CAST
"file"
))
...
...
@@ -612,7 +610,7 @@ static struct qemud_vm_disk_def *qemudParseDiskXML(virConnectPtr conn,
xmlFree
(
target
);
xmlFree
(
source
);
return
disk
;
return
0
;
error:
if
(
type
)
...
...
@@ -623,8 +621,7 @@ static struct qemud_vm_disk_def *qemudParseDiskXML(virConnectPtr conn,
xmlFree
(
source
);
if
(
device
)
xmlFree
(
device
);
free
(
disk
);
return
NULL
;
return
-
1
;
}
static
void
qemudRandomMAC
(
struct
qemud_vm_net_def
*
net
)
{
...
...
@@ -637,11 +634,14 @@ static void qemudRandomMAC(struct qemud_vm_net_def *net) {
}
/* Parse the XML definition for a network interface */
static
struct
qemud_vm_net_def
*
qemudParseInterfaceXML
(
virConnectPtr
conn
,
struct
qemud_driver
*
driver
ATTRIBUTE_UNUSED
,
xmlNodePtr
node
)
{
struct
qemud_vm_net_def
*
net
=
calloc
(
1
,
sizeof
(
struct
qemud_vm_net_def
));
/* Parse the XML definition for a network interface
* @param net pre-allocated & zero'd net record
* @param node XML nodeset to parse for net definition
* @return 0 on success, -1 on failure
*/
static
int
qemudParseInterfaceXML
(
virConnectPtr
conn
,
struct
qemud_vm_net_def
*
net
,
xmlNodePtr
node
)
{
xmlNodePtr
cur
;
xmlChar
*
macaddr
=
NULL
;
xmlChar
*
type
=
NULL
;
...
...
@@ -652,11 +652,6 @@ static struct qemud_vm_net_def *qemudParseInterfaceXML(virConnectPtr conn,
xmlChar
*
address
=
NULL
;
xmlChar
*
port
=
NULL
;
if
(
!
net
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"net"
);
return
NULL
;
}
net
->
type
=
QEMUD_NET_USER
;
type
=
xmlGetProp
(
node
,
BAD_CAST
"type"
);
...
...
@@ -869,7 +864,7 @@ static struct qemud_vm_net_def *qemudParseInterfaceXML(virConnectPtr conn,
xmlFree
(
address
);
}
return
net
;
return
0
;
error:
if
(
network
)
...
...
@@ -884,24 +879,17 @@ static struct qemud_vm_net_def *qemudParseInterfaceXML(virConnectPtr conn,
xmlFree
(
script
);
if
(
bridge
)
xmlFree
(
bridge
);
free
(
net
);
return
NULL
;
return
-
1
;
}
/* Parse the XML definition for a network interface */
static
struct
qemud_vm_input_def
*
qemudParseInputXML
(
virConnectPtr
conn
,
struct
qemud_driver
*
driver
ATTRIBUTE_UNUSED
,
xmlNodePtr
node
)
{
struct
qemud_vm_input_def
*
input
=
calloc
(
1
,
sizeof
(
struct
qemud_vm_input_def
));
static
int
qemudParseInputXML
(
virConnectPtr
conn
,
struct
qemud_vm_input_def
*
input
,
xmlNodePtr
node
)
{
xmlChar
*
type
=
NULL
;
xmlChar
*
bus
=
NULL
;
if
(
!
input
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"input"
);
return
NULL
;
}
type
=
xmlGetProp
(
node
,
BAD_CAST
"type"
);
bus
=
xmlGetProp
(
node
,
BAD_CAST
"bus"
);
...
...
@@ -944,7 +932,7 @@ static struct qemud_vm_input_def *qemudParseInputXML(virConnectPtr conn,
if
(
bus
)
xmlFree
(
bus
);
return
input
;
return
0
;
error:
if
(
type
)
...
...
@@ -952,8 +940,7 @@ static struct qemud_vm_input_def *qemudParseInputXML(virConnectPtr conn,
if
(
bus
)
xmlFree
(
bus
);
free
(
input
);
return
NULL
;
return
-
1
;
}
...
...
@@ -1318,8 +1305,13 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
>=
0
))
{
struct
qemud_vm_disk_def
*
prev
=
NULL
;
for
(
i
=
0
;
i
<
obj
->
nodesetval
->
nodeNr
;
i
++
)
{
struct
qemud_vm_disk_def
*
disk
;
if
(
!
(
disk
=
qemudParseDiskXML
(
conn
,
driver
,
obj
->
nodesetval
->
nodeTab
[
i
])))
{
struct
qemud_vm_disk_def
*
disk
=
calloc
(
1
,
sizeof
(
struct
qemud_vm_disk_def
));
if
(
!
disk
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"disk"
);
goto
error
;
}
if
(
qemudParseDiskXML
(
conn
,
disk
,
obj
->
nodesetval
->
nodeTab
[
i
])
<
0
)
{
free
(
disk
);
goto
error
;
}
def
->
ndisks
++
;
...
...
@@ -1341,8 +1333,13 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
>=
0
))
{
struct
qemud_vm_net_def
*
prev
=
NULL
;
for
(
i
=
0
;
i
<
obj
->
nodesetval
->
nodeNr
;
i
++
)
{
struct
qemud_vm_net_def
*
net
;
if
(
!
(
net
=
qemudParseInterfaceXML
(
conn
,
driver
,
obj
->
nodesetval
->
nodeTab
[
i
])))
{
struct
qemud_vm_net_def
*
net
=
calloc
(
1
,
sizeof
(
struct
qemud_vm_net_def
));
if
(
!
net
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"net"
);
goto
error
;
}
if
(
qemudParseInterfaceXML
(
conn
,
net
,
obj
->
nodesetval
->
nodeTab
[
i
])
<
0
)
{
free
(
net
);
goto
error
;
}
def
->
nnets
++
;
...
...
@@ -1363,8 +1360,13 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
(
obj
->
nodesetval
!=
NULL
)
&&
(
obj
->
nodesetval
->
nodeNr
>=
0
))
{
struct
qemud_vm_input_def
*
prev
=
NULL
;
for
(
i
=
0
;
i
<
obj
->
nodesetval
->
nodeNr
;
i
++
)
{
struct
qemud_vm_input_def
*
input
;
if
(
!
(
input
=
qemudParseInputXML
(
conn
,
driver
,
obj
->
nodesetval
->
nodeTab
[
i
])))
{
struct
qemud_vm_input_def
*
input
=
calloc
(
1
,
sizeof
(
struct
qemud_vm_input_def
));
if
(
!
input
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_NO_MEMORY
,
"input"
);
goto
error
;
}
if
(
qemudParseInputXML
(
conn
,
input
,
obj
->
nodesetval
->
nodeTab
[
i
])
<
0
)
{
free
(
input
);
goto
error
;
}
/* Mouse + PS/2 is implicit with graphics, so don't store it */
...
...
@@ -1929,6 +1931,51 @@ static int qemudSaveConfig(virConnectPtr conn,
return
ret
;
}
struct
qemud_vm_device_def
*
qemudParseVMDeviceDef
(
virConnectPtr
conn
,
struct
qemud_driver
*
driver
ATTRIBUTE_UNUSED
,
const
char
*
xmlStr
)
{
xmlDocPtr
xml
;
xmlNodePtr
node
;
struct
qemud_vm_device_def
*
dev
=
calloc
(
1
,
sizeof
(
struct
qemud_vm_device_def
));
if
(
!
(
xml
=
xmlReadDoc
(
BAD_CAST
xmlStr
,
"device.xml"
,
NULL
,
XML_PARSE_NOENT
|
XML_PARSE_NONET
|
XML_PARSE_NOERROR
|
XML_PARSE_NOWARNING
)))
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_XML_ERROR
,
NULL
);
return
NULL
;
}
node
=
xmlDocGetRootElement
(
xml
);
if
(
node
==
NULL
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_XML_ERROR
,
"missing root element"
);
goto
error
;
}
if
(
xmlStrEqual
(
node
->
name
,
BAD_CAST
"disk"
))
{
dev
->
type
=
QEMUD_DEVICE_DISK
;
qemudParseDiskXML
(
conn
,
&
(
dev
->
data
.
disk
),
node
);
}
else
if
(
xmlStrEqual
(
node
->
name
,
BAD_CAST
"net"
))
{
dev
->
type
=
QEMUD_DEVICE_NET
;
qemudParseInterfaceXML
(
conn
,
&
(
dev
->
data
.
net
),
node
);
}
else
if
(
xmlStrEqual
(
node
->
name
,
BAD_CAST
"input"
))
{
dev
->
type
=
QEMUD_DEVICE_DISK
;
qemudParseInputXML
(
conn
,
&
(
dev
->
data
.
input
),
node
);
}
else
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_XML_ERROR
,
"unknown device type"
);
goto
error
;
}
xmlFreeDoc
(
xml
);
return
dev
;
error:
if
(
xml
)
xmlFreeDoc
(
xml
);
if
(
dev
)
free
(
dev
);
return
NULL
;
}
struct
qemud_vm_def
*
qemudParseVMDef
(
virConnectPtr
conn
,
struct
qemud_driver
*
driver
,
...
...
src/qemu_conf.h
浏览文件 @
eed1b177
...
...
@@ -125,6 +125,22 @@ struct qemud_vm_input_def {
struct
qemud_vm_input_def
*
next
;
};
/* Flags for the 'type' field in next struct */
enum
qemud_vm_device_type
{
QEMUD_DEVICE_DISK
,
QEMUD_DEVICE_NET
,
QEMUD_DEVICE_INPUT
,
};
struct
qemud_vm_device_def
{
int
type
;
union
{
struct
qemud_vm_disk_def
disk
;
struct
qemud_vm_net_def
net
;
struct
qemud_vm_input_def
input
;
}
data
;
};
#define QEMUD_MAX_BOOT_DEVS 4
/* 3 possible boot devices */
...
...
@@ -354,6 +370,11 @@ struct qemud_vm *
void
qemudRemoveInactiveVM
(
struct
qemud_driver
*
driver
,
struct
qemud_vm
*
vm
);
struct
qemud_vm_device_def
*
qemudParseVMDeviceDef
(
virConnectPtr
conn
,
struct
qemud_driver
*
driver
,
const
char
*
xmlStr
);
struct
qemud_vm_def
*
qemudParseVMDef
(
virConnectPtr
conn
,
struct
qemud_driver
*
driver
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录