Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
15b40d29
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,体验更适合开发者的 AI 搜索 >>
提交
15b40d29
编写于
6月 16, 2006
作者:
D
Daniel Veillard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
* src/libvirt.c src/xen_internal.c src/xend_internal.c: more driver
related cleanups, nearly finished Daniel
上级
442b733e
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
196 addition
and
81 deletion
+196
-81
ChangeLog
ChangeLog
+5
-0
src/libvirt.c
src/libvirt.c
+58
-78
src/xen_internal.c
src/xen_internal.c
+52
-1
src/xend_internal.c
src/xend_internal.c
+81
-2
未找到文件。
ChangeLog
浏览文件 @
15b40d29
Fri Jun 16 12:44:02 EDT 2006 Daniel Veillard <veillard@redhat.com>
* src/libvirt.c src/xen_internal.c src/xend_internal.c: more driver
related cleanups, nearly finished
Thu Jun 15 14:57:39 EDT 2006 Daniel Veillard <veillard@redhat.com>
* src/libvirt.c src/xend_internal.c src/xend_internal.h
...
...
src/libvirt.c
浏览文件 @
15b40d29
...
...
@@ -516,14 +516,11 @@ virConnectNumOfDomains(virConnectPtr conn)
* Returns a new domain object or NULL in case of failure
*/
virDomainPtr
virDomainCreateLinux
(
virConnectPtr
conn
,
const
char
*
xmlDesc
,
unsigned
int
flags
ATTRIBUTE_UNUSED
)
virDomainCreateLinux
(
virConnectPtr
conn
,
const
char
*
xmlDesc
,
unsigned
int
flags
)
{
int
ret
;
char
*
sexpr
;
char
*
name
=
NULL
;
virDomainPtr
dom
;
virDomainPtr
ret
;
int
i
;
if
(
!
VIR_IS_CONNECT
(
conn
))
{
virLibConnError
(
conn
,
VIR_ERR_INVALID_CONN
,
__FUNCTION__
);
...
...
@@ -534,49 +531,15 @@ virDomainCreateLinux(virConnectPtr conn,
return
(
NULL
);
}
sexpr
=
virDomainParseXMLDesc
(
xmlDesc
,
&
name
);
if
((
sexpr
==
NULL
)
||
(
name
==
NULL
))
{
if
(
sexpr
!=
NULL
)
free
(
sexpr
);
if
(
name
!=
NULL
)
free
(
name
);
return
(
NULL
);
}
ret
=
xenDaemonDomainCreateLinux
(
conn
,
sexpr
);
free
(
sexpr
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"Failed to create domain %s
\n
"
,
name
);
goto
error
;
}
ret
=
xend_wait_for_devices
(
conn
,
name
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"Failed to get devices for domain %s
\n
"
,
name
);
goto
error
;
}
dom
=
virDomainLookupByName
(
conn
,
name
);
if
(
dom
==
NULL
)
{
goto
error
;
}
ret
=
xenDaemonDomainResume
(
dom
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"Failed to resume new domain %s
\n
"
,
name
);
xenDaemonDomainDestroy
(
dom
);
goto
error
;
for
(
i
=
0
;
i
<
conn
->
nb_drivers
;
i
++
)
{
if
((
conn
->
drivers
[
i
]
!=
NULL
)
&&
(
conn
->
drivers
[
i
]
->
domainCreateLinux
!=
NULL
))
{
ret
=
conn
->
drivers
[
i
]
->
domainCreateLinux
(
conn
,
xmlDesc
,
flags
);
if
(
ret
!=
NULL
)
return
(
ret
);
}
}
dom
=
virDomainLookupByName
(
conn
,
name
);
free
(
name
);
return
(
dom
);
error:
if
(
name
!=
NULL
)
free
(
name
);
return
(
NULL
);
return
(
NULL
);
}
...
...
@@ -865,7 +828,7 @@ virDomainSuspend(virDomainPtr domain)
int
virDomainResume
(
virDomainPtr
domain
)
{
int
ret
=
-
1
,
i
;
int
i
;
virConnectPtr
conn
;
if
(
!
VIR_IS_CONNECTED_DOMAIN
(
domain
))
{
...
...
@@ -884,16 +847,12 @@ virDomainResume(virDomainPtr domain)
if
((
conn
->
drivers
[
i
]
!=
NULL
)
&&
(
conn
->
drivers
[
i
]
->
domainResume
!=
NULL
))
{
if
(
conn
->
drivers
[
i
]
->
domainResume
(
domain
)
==
0
)
ret
=
0
;
ret
urn
(
0
)
;
}
}
if
(
ret
!=
0
)
{
virLibConnError
(
conn
,
VIR_ERR_CALL_FAILED
,
__FUNCTION__
);
return
(
ret
);
}
return
(
ret
);
virLibConnError
(
conn
,
VIR_ERR_CALL_FAILED
,
__FUNCTION__
);
return
(
-
1
);
}
/**
...
...
@@ -911,13 +870,15 @@ virDomainResume(virDomainPtr domain)
int
virDomainSave
(
virDomainPtr
domain
,
const
char
*
to
)
{
int
ret
;
int
ret
,
i
;
char
filepath
[
4096
];
virConnectPtr
conn
;
if
(
!
VIR_IS_CONNECTED_DOMAIN
(
domain
))
{
virLibDomainError
(
domain
,
VIR_ERR_INVALID_DOMAIN
,
__FUNCTION__
);
return
(
-
1
);
}
conn
=
domain
->
conn
;
if
(
to
==
NULL
)
{
virLibDomainError
(
domain
,
VIR_ERR_INVALID_ARG
,
__FUNCTION__
);
return
(
-
1
);
...
...
@@ -943,8 +904,17 @@ virDomainSave(virDomainPtr domain, const char *to)
}
ret
=
xenDaemonDomainSave
(
domain
,
to
);
return
(
ret
);
/* Go though the driver registered entry points */
for
(
i
=
0
;
i
<
conn
->
nb_drivers
;
i
++
)
{
if
((
conn
->
drivers
[
i
]
!=
NULL
)
&&
(
conn
->
drivers
[
i
]
->
domainSave
!=
NULL
))
{
ret
=
conn
->
drivers
[
i
]
->
domainSave
(
domain
,
to
);
if
(
ret
==
0
)
return
(
0
);
}
}
virLibConnError
(
conn
,
VIR_ERR_CALL_FAILED
,
__FUNCTION__
);
return
(
-
1
);
}
/**
...
...
@@ -959,7 +929,7 @@ virDomainSave(virDomainPtr domain, const char *to)
int
virDomainRestore
(
virConnectPtr
conn
,
const
char
*
from
)
{
int
ret
;
int
ret
,
i
;
char
filepath
[
4096
];
if
(
!
VIR_IS_CONNECT
(
conn
))
{
...
...
@@ -990,8 +960,17 @@ virDomainRestore(virConnectPtr conn, const char *from)
from
=
&
filepath
[
0
];
}
ret
=
xenDaemonDomainRestore
(
conn
,
from
);
return
(
ret
);
/* Go though the driver registered entry points */
for
(
i
=
0
;
i
<
conn
->
nb_drivers
;
i
++
)
{
if
((
conn
->
drivers
[
i
]
!=
NULL
)
&&
(
conn
->
drivers
[
i
]
->
domainSave
!=
NULL
))
{
ret
=
conn
->
drivers
[
i
]
->
domainRestore
(
conn
,
from
);
if
(
ret
==
0
)
return
(
0
);
}
}
virLibConnError
(
conn
,
VIR_ERR_CALL_FAILED
,
__FUNCTION__
);
return
(
-
1
);
}
/**
...
...
@@ -1242,28 +1221,30 @@ unsigned long
virDomainGetMaxMemory
(
virDomainPtr
domain
)
{
unsigned
long
ret
=
0
;
virConnectPtr
conn
;
int
i
;
if
(
!
VIR_IS_CONNECTED_DOMAIN
(
domain
))
{
virLibDomainError
(
domain
,
VIR_ERR_INVALID_DOMAIN
,
__FUNCTION__
);
return
(
0
);
}
conn
=
domain
->
conn
;
/*
* try first with the hypervisor if available
* in that case instead of trying only though one method try all availble.
* If needed that can be changed back if it's a performcance problem.
*/
if
(
!
(
domain
->
conn
->
flags
&
VIR_CONNECT_RO
))
{
virDomainInfo
dominfo
;
int
tmp
;
tmp
=
xenHypervisorGetDomainInfo
(
domain
,
&
dominfo
);
if
(
tmp
>=
0
)
return
(
dominfo
.
maxMem
);
}
ret
=
xenStoreDomainGetMaxMemory
(
domain
);
if
(
ret
>
0
)
return
(
ret
);
ret
=
xenDaemonDomainGetMaxMemory
(
domain
);
return
(
ret
);
for
(
i
=
0
;
i
<
conn
->
nb_drivers
;
i
++
)
{
if
((
conn
->
drivers
[
i
]
!=
NULL
)
&&
(
conn
->
drivers
[
i
]
->
domainGetMaxMemory
!=
NULL
))
{
ret
=
conn
->
drivers
[
i
]
->
domainGetMaxMemory
(
domain
);
if
(
ret
!=
0
)
return
(
ret
);
}
}
virLibConnError
(
conn
,
VIR_ERR_CALL_FAILED
,
__FUNCTION__
);
return
(
-
1
);
}
/**
...
...
@@ -1384,7 +1365,6 @@ virDomainSetMemory(virDomainPtr domain, unsigned long memory)
int
virDomainGetInfo
(
virDomainPtr
domain
,
virDomainInfoPtr
info
)
{
int
ret
;
int
i
;
if
(
!
VIR_IS_CONNECTED_DOMAIN
(
domain
))
{
...
...
src/xen_internal.c
浏览文件 @
15b40d29
...
...
@@ -41,6 +41,7 @@ typedef struct hypercall_struct {
#define XEN_HYPERVISOR_SOCKET "/proc/xen/privcmd"
static
const
char
*
xenHypervisorGetType
(
virConnectPtr
conn
);
static
unsigned
long
xenHypervisorGetMaxMemory
(
virDomainPtr
domain
);
static
virDriver
xenHypervisorDriver
=
{
"Xen"
,
...
...
@@ -69,7 +70,7 @@ static virDriver xenHypervisorDriver = {
NULL
,
/* domainGetID */
NULL
,
/* domainGetUUID */
NULL
,
/* domainGetOSType */
NULL
,
/* domainGetMaxMemory */
xenHypervisorGetMaxMemory
,
/* domainGetMaxMemory */
xenHypervisorSetMaxMemory
,
/* domainSetMaxMemory */
NULL
,
/* domainSetMemory */
xenHypervisorGetDomainInfo
,
/* domainGetInfo */
...
...
@@ -396,6 +397,56 @@ xenHypervisorListDomains(virConnectPtr conn, int *ids, int maxids)
return
(
nbids
);
}
/**
* xenHypervisorGetMaxMemory:
* @domain: a domain object or NULL
*
* Retrieve the maximum amount of physical memory allocated to a
* domain. If domain is NULL, then this get the amount of memory reserved
* to Domain0 i.e. the domain where the application runs.
*
* Returns the memory size in kilobytes or 0 in case of error.
*/
static
unsigned
long
xenHypervisorGetMaxMemory
(
virDomainPtr
domain
)
{
dom0_op_t
op
;
dom0_getdomaininfo_t
dominfo
;
int
ret
;
if
((
domain
==
NULL
)
||
(
domain
->
conn
==
NULL
)
||
(
domain
->
conn
->
handle
<
0
))
return
(
0
);
memset
(
&
dominfo
,
0
,
sizeof
(
dom0_getdomaininfo_t
));
if
(
mlock
(
&
dominfo
,
sizeof
(
dom0_getdomaininfo_t
))
<
0
)
{
virXenError
(
VIR_ERR_XEN_CALL
,
" locking"
,
sizeof
(
dom0_getdomaininfo_t
));
return
(
0
);
}
op
.
cmd
=
DOM0_GETDOMAININFOLIST
;
op
.
u
.
getdomaininfolist
.
first_domain
=
(
domid_t
)
domain
->
handle
;
op
.
u
.
getdomaininfolist
.
max_domains
=
1
;
op
.
u
.
getdomaininfolist
.
buffer
=
&
dominfo
;
op
.
u
.
getdomaininfolist
.
num_domains
=
1
;
dominfo
.
domain
=
domain
->
handle
;
ret
=
xenHypervisorDoOp
(
domain
->
conn
->
handle
,
&
op
);
if
(
munlock
(
&
dominfo
,
sizeof
(
dom0_getdomaininfo_t
))
<
0
)
{
virXenError
(
VIR_ERR_XEN_CALL
,
" release"
,
sizeof
(
dom0_getdomaininfo_t
));
ret
=
-
1
;
}
if
(
ret
<
0
)
return
(
0
);
return
((
unsigned
long
)
dominfo
.
max_pages
*
4
);
}
/**
* xenHypervisorGetDomainInfo:
* @domain: pointer to the domain block
...
...
src/xend_internal.c
浏览文件 @
15b40d29
...
...
@@ -44,6 +44,9 @@ static int xenDaemonNumOfDomains(virConnectPtr conn);
static
virDomainPtr
xenDaemonLookupByID
(
virConnectPtr
conn
,
int
id
);
static
virDomainPtr
xenDaemonLookupByUUID
(
virConnectPtr
conn
,
const
unsigned
char
*
uuid
);
static
virDomainPtr
xenDaemonCreateLinux
(
virConnectPtr
conn
,
const
char
*
xmlDesc
,
unsigned
int
flags
);
static
virDriver
xenDaemonDriver
=
{
"XenDaemon"
,
...
...
@@ -58,7 +61,7 @@ static virDriver xenDaemonDriver = {
xenDaemonNodeGetInfo
,
/* nodeGetInfo */
xenDaemonListDomains
,
/* listDomains */
xenDaemonNumOfDomains
,
/* numOfDomains */
NULL
,
/* domainCreateLinux */
xenDaemonCreateLinux
,
/* domainCreateLinux */
xenDaemonLookupByID
,
/* domainLookupByID */
xenDaemonLookupByUUID
,
/* domainLookupByUUID */
xenDaemonDomainLookupByName
,
/* domainLookupByName */
...
...
@@ -72,7 +75,7 @@ static virDriver xenDaemonDriver = {
NULL
,
/* domainGetID */
NULL
,
/* domainGetUUID */
NULL
,
/* domainGetOSType */
NULL
,
/* domainGetMaxMemory */
xenDaemonDomainGetMaxMemory
,
/* domainGetMaxMemory */
xenDaemonDomainSetMaxMemory
,
/* domainSetMaxMemory */
xenDaemonDomainSetMemory
,
/* domainMaxMemory */
xenDaemonDomainGetInfo
,
/* domainGetInfo */
...
...
@@ -2340,3 +2343,79 @@ error:
free
(
name
);
return
(
NULL
);
}
/**
* xenDaemonCreateLinux:
* @conn: pointer to the hypervisor connection
* @xmlDesc: an XML description of the domain
* @flags: an optional set of virDomainFlags
*
* Launch a new Linux guest domain, based on an XML description similar
* to the one returned by virDomainGetXMLDesc()
* This function may requires priviledged access to the hypervisor.
*
* Returns a new domain object or NULL in case of failure
*/
static
virDomainPtr
xenDaemonCreateLinux
(
virConnectPtr
conn
,
const
char
*
xmlDesc
,
unsigned
int
flags
ATTRIBUTE_UNUSED
)
{
int
ret
;
char
*
sexpr
;
char
*
name
=
NULL
;
virDomainPtr
dom
;
if
(
!
VIR_IS_CONNECT
(
conn
))
{
virXendError
(
conn
,
VIR_ERR_INVALID_CONN
,
__FUNCTION__
);
return
(
NULL
);
}
if
(
xmlDesc
==
NULL
)
{
virXendError
(
conn
,
VIR_ERR_INVALID_ARG
,
__FUNCTION__
);
return
(
NULL
);
}
sexpr
=
virDomainParseXMLDesc
(
xmlDesc
,
&
name
);
if
((
sexpr
==
NULL
)
||
(
name
==
NULL
))
{
if
(
sexpr
!=
NULL
)
free
(
sexpr
);
if
(
name
!=
NULL
)
free
(
name
);
return
(
NULL
);
}
ret
=
xenDaemonDomainCreateLinux
(
conn
,
sexpr
);
free
(
sexpr
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"Failed to create domain %s
\n
"
,
name
);
goto
error
;
}
ret
=
xend_wait_for_devices
(
conn
,
name
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"Failed to get devices for domain %s
\n
"
,
name
);
goto
error
;
}
dom
=
virDomainLookupByName
(
conn
,
name
);
if
(
dom
==
NULL
)
{
goto
error
;
}
ret
=
xenDaemonDomainResume
(
dom
);
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"Failed to resume new domain %s
\n
"
,
name
);
xenDaemonDomainDestroy
(
dom
);
goto
error
;
}
dom
=
virDomainLookupByName
(
conn
,
name
);
free
(
name
);
return
(
dom
);
error:
if
(
name
!=
NULL
)
free
(
name
);
return
(
NULL
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录