Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
136ebc6e
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,发现更多精彩内容 >>
提交
136ebc6e
编写于
9月 21, 2007
作者:
D
Daniel P. Berrange
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Detect QEMU flags per VM instead of once for driver as a whole
上级
b32f4298
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
49 addition
and
33 deletion
+49
-33
ChangeLog
ChangeLog
+10
-2
src/qemu_conf.c
src/qemu_conf.c
+28
-22
src/qemu_conf.h
src/qemu_conf.h
+3
-1
tests/qemuxml2argvtest.c
tests/qemuxml2argvtest.c
+4
-4
tests/qemuxml2xmltest.c
tests/qemuxml2xmltest.c
+4
-4
未找到文件。
ChangeLog
浏览文件 @
136ebc6e
Fri Sep 21 17:14:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* src/qemu_conf.c, src/qemu_conf.h: Detect QEMU flags per-VM,
not per driver, since different QEMU binaries have their own
requirements.
* tests/qemuxml2xmltest.c, tests/qemuxml2argvtets.c: Update
to changed internal QEMU api/structs.
Fri Sep 21 16:22:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* src/remote_internal.c: Add a no_tty flag to stop SSH prompting
...
...
@@ -6,11 +14,11 @@ Fri Sep 21 16:22:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
Fri Sep 21 15:06:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* acinclude.m4: Check all compiler flags link successfully
* acinclude.m4: Check all compiler flags link successfully
instead of just compiling, to deal with broken debian linker
with stack protector
* configure.in: Remove redundant -fno-stack-protector workaround
Fri Sep 21 15:06:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* src/qemu_driver.c: Use libxml for parsing & checking URIs
...
...
src/qemu_conf.c
浏览文件 @
136ebc6e
...
...
@@ -287,7 +287,6 @@ static const char *qemudDefaultBinaryForArch(const char *arch) {
/* Find the fully qualified path to the binary for an architecture */
static
char
*
qemudLocateBinaryForArch
(
virConnectPtr
conn
,
struct
qemud_driver
*
driver
ATTRIBUTE_UNUSED
,
int
virtType
,
const
char
*
arch
)
{
const
char
*
name
;
char
*
path
;
...
...
@@ -408,14 +407,15 @@ static int qemudExtractVersionInfo(const char *qemu, int *version, int *flags) {
}
int
qemudExtractVersion
(
virConnectPtr
conn
,
struct
qemud_driver
*
driver
)
{
struct
qemud_driver
*
driver
ATTRIBUTE_UNUSED
)
{
char
*
binary
=
NULL
;
struct
stat
sb
;
int
ignored
;
if
(
driver
->
qemuVersion
>
0
)
return
0
;
if
(
!
(
binary
=
qemudLocateBinaryForArch
(
conn
,
driver
,
QEMUD_VIRT_QEMU
,
"i686"
)))
if
(
!
(
binary
=
qemudLocateBinaryForArch
(
conn
,
QEMUD_VIRT_QEMU
,
"i686"
)))
return
-
1
;
if
(
stat
(
binary
,
&
sb
)
<
0
)
{
...
...
@@ -426,7 +426,7 @@ int qemudExtractVersion(virConnectPtr conn,
return
-
1
;
}
if
(
qemudExtractVersionInfo
(
binary
,
&
driver
->
qemuVersion
,
&
driver
->
qemuCmdFlags
)
<
0
)
{
if
(
qemudExtractVersionInfo
(
binary
,
&
driver
->
qemuVersion
,
&
ignored
)
<
0
)
{
free
(
binary
);
return
-
1
;
}
...
...
@@ -1199,7 +1199,7 @@ static struct qemud_vm_def *qemudParseXML(virConnectPtr conn,
obj
=
xmlXPathEval
(
BAD_CAST
"string(/domain/devices/emulator[1])"
,
ctxt
);
if
((
obj
==
NULL
)
||
(
obj
->
type
!=
XPATH_STRING
)
||
(
obj
->
stringval
==
NULL
)
||
(
obj
->
stringval
[
0
]
==
0
))
{
char
*
tmp
=
qemudLocateBinaryForArch
(
conn
,
d
river
,
d
ef
->
virtType
,
def
->
os
.
arch
);
char
*
tmp
=
qemudLocateBinaryForArch
(
conn
,
def
->
virtType
,
def
->
os
.
arch
);
if
(
!
tmp
)
{
goto
error
;
}
...
...
@@ -1466,8 +1466,23 @@ int qemudBuildCommandLine(virConnectPtr conn,
struct
utsname
ut
;
int
disableKQEMU
=
0
;
if
(
qemudExtractVersion
(
conn
,
driver
)
<
0
)
/* Make sure the binary we are about to try exec'ing exists.
* Technically we could catch the exec() failure, but that's
* in a sub-process so its hard to feed back a useful error
*/
if
(
stat
(
vm
->
def
->
os
.
binary
,
&
sb
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_INTERNAL_ERROR
,
"Cannot find QEMU binary %s: %s"
,
vm
->
def
->
os
.
binary
,
strerror
(
errno
));
return
-
1
;
}
if
(
vm
->
qemuVersion
==
0
)
{
if
(
qemudExtractVersionInfo
(
vm
->
def
->
os
.
binary
,
&
(
vm
->
qemuVersion
),
&
(
vm
->
qemuCmdFlags
))
<
0
)
return
-
1
;
}
uname
(
&
ut
);
...
...
@@ -1483,22 +1498,11 @@ int qemudBuildCommandLine(virConnectPtr conn,
* 2. Guest is 'qemu'
* 3. The qemu binary has the -no-kqemu flag
*/
if
((
driver
->
qemuCmdFlags
&
QEMUD_CMD_FLAG_KQEMU
)
&&
if
((
vm
->
qemuCmdFlags
&
QEMUD_CMD_FLAG_KQEMU
)
&&
!
strcmp
(
ut
.
machine
,
vm
->
def
->
os
.
arch
)
&&
vm
->
def
->
virtType
==
QEMUD_VIRT_QEMU
)
disableKQEMU
=
1
;
/* Make sure the binary we are about to try exec'ing exists.
* Technically we could catch the exec() failure, but that's
* in a sub-process so its hard to feed back a useful error
*/
if
(
stat
(
vm
->
def
->
os
.
binary
,
&
sb
)
<
0
)
{
qemudReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_INTERNAL_ERROR
,
"Cannot find QEMU binary %s: %s"
,
vm
->
def
->
os
.
binary
,
strerror
(
errno
));
return
-
1
;
}
len
=
1
+
/* qemu */
2
+
/* machine type */
disableKQEMU
+
/* Disable kqemu */
...
...
@@ -1511,7 +1515,7 @@ int qemudBuildCommandLine(virConnectPtr conn,
2
+
/* boot device */
2
+
/* monitor */
(
vm
->
def
->
localtime
?
1
:
0
)
+
/* localtime */
(
driver
->
qemuCmdFlags
&
QEMUD_CMD_FLAG_NO_REBOOT
&&
(
vm
->
qemuCmdFlags
&
QEMUD_CMD_FLAG_NO_REBOOT
&&
vm
->
def
->
noReboot
?
1
:
0
)
+
/* no-reboot */
(
vm
->
def
->
features
&
QEMUD_FEATURE_ACPI
?
0
:
1
)
+
/* acpi */
(
vm
->
def
->
os
.
kernel
[
0
]
?
2
:
0
)
+
/* kernel */
...
...
@@ -1567,7 +1571,7 @@ int qemudBuildCommandLine(virConnectPtr conn,
goto
no_memory
;
}
if
(
driver
->
qemuCmdFlags
&
QEMUD_CMD_FLAG_NO_REBOOT
&&
if
(
vm
->
qemuCmdFlags
&
QEMUD_CMD_FLAG_NO_REBOOT
&&
vm
->
def
->
noReboot
)
{
if
(
!
((
*
argv
)[
++
n
]
=
strdup
(
"-no-reboot"
)))
goto
no_memory
;
...
...
@@ -1748,7 +1752,7 @@ int qemudBuildCommandLine(virConnectPtr conn,
if
(
vm
->
def
->
graphicsType
==
QEMUD_GRAPHICS_VNC
)
{
char
vncdisplay
[
BR_INET_ADDR_MAXLEN
+
20
];
int
ret
;
if
(
driver
->
qemuCmdFlags
&
QEMUD_CMD_FLAG_VNC_COLON
)
if
(
vm
->
qemuCmdFlags
&
QEMUD_CMD_FLAG_VNC_COLON
)
ret
=
snprintf
(
vncdisplay
,
sizeof
(
vncdisplay
),
"%s:%d"
,
vm
->
def
->
vncListen
,
vm
->
def
->
vncActivePort
-
5900
);
...
...
@@ -1885,7 +1889,9 @@ qemudAssignVMDef(virConnectPtr conn,
qemudFreeVMDef
(
vm
->
newDef
);
vm
->
newDef
=
def
;
}
/* Reset version, because the emulator path might have changed */
vm
->
qemuVersion
=
0
;
vm
->
qemuCmdFlags
=
0
;
return
vm
;
}
...
...
src/qemu_conf.h
浏览文件 @
136ebc6e
...
...
@@ -211,6 +211,9 @@ struct qemud_vm {
int
*
tapfds
;
int
ntapfds
;
int
qemuVersion
;
int
qemuCmdFlags
;
/* values from enum qemud_cmd_flags */
char
configFile
[
PATH_MAX
];
char
autostartLink
[
PATH_MAX
];
char
migrateFrom
[
PATH_MAX
];
...
...
@@ -272,7 +275,6 @@ struct qemud_network {
/* Main driver state */
struct
qemud_driver
{
int
qemuVersion
;
int
qemuCmdFlags
;
/* values from enum qemud_cmd_flags */
int
nactivevms
;
int
ninactivevms
;
struct
qemud_vm
*
vms
;
...
...
tests/qemuxml2argvtest.c
浏览文件 @
136ebc6e
...
...
@@ -37,6 +37,10 @@ static int testCompareXMLToArgvFiles(const char *xml, const char *cmd) {
vm
.
def
=
vmdef
;
vm
.
pid
=
-
1
;
vm
.
id
=
-
1
;
vm
.
qemuVersion
=
0
*
1000
*
100
+
(
8
*
1000
)
+
1
;
vm
.
qemuCmdFlags
=
QEMUD_CMD_FLAG_VNC_COLON
|
QEMUD_CMD_FLAG_NO_REBOOT
;
vmdef
->
vncActivePort
=
vmdef
->
vncPort
;
if
(
qemudBuildCommandLine
(
NULL
,
&
driver
,
&
vm
,
&
argv
)
<
0
)
...
...
@@ -107,10 +111,6 @@ main(int argc, char **argv)
exit
(
EXIT_FAILURE
);
}
driver
.
qemuVersion
=
0
*
1000
*
100
+
(
8
*
1000
)
+
1
;
driver
.
qemuCmdFlags
=
QEMUD_CMD_FLAG_VNC_COLON
|
QEMUD_CMD_FLAG_NO_REBOOT
;
if
(
virtTestRun
(
"QEMU XML-2-ARGV minimal"
,
1
,
testCompareXMLToArgvHelper
,
"minimal"
)
<
0
)
ret
=
-
1
;
...
...
tests/qemuxml2xmltest.c
浏览文件 @
136ebc6e
...
...
@@ -31,6 +31,10 @@ static int testCompareXMLToXMLFiles(const char *xml) {
vm
.
def
=
vmdef
;
vm
.
pid
=
-
1
;
vm
.
id
=
-
1
;
vm
.
qemuVersion
=
0
*
1000
*
100
+
(
8
*
1000
)
+
1
;
vm
.
qemuCmdFlags
=
QEMUD_CMD_FLAG_VNC_COLON
|
QEMUD_CMD_FLAG_NO_REBOOT
;
vmdef
->
vncActivePort
=
vmdef
->
vncPort
;
if
(
!
(
actual
=
qemudGenerateXML
(
NULL
,
&
driver
,
&
vm
,
vmdef
,
0
)))
...
...
@@ -72,10 +76,6 @@ main(int argc, char **argv)
exit
(
EXIT_FAILURE
);
}
driver
.
qemuVersion
=
0
*
1000
*
100
+
(
8
*
1000
)
+
1
;
driver
.
qemuCmdFlags
=
QEMUD_CMD_FLAG_VNC_COLON
|
QEMUD_CMD_FLAG_NO_REBOOT
;
if
(
virtTestRun
(
"QEMU XML-2-ARGV minimal"
,
1
,
testCompareXMLToXMLHelper
,
"minimal"
)
<
0
)
ret
=
-
1
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录