Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
0c52de4d
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,发现更多精彩内容 >>
提交
0c52de4d
编写于
4月 10, 2007
作者:
R
Richard W.M. Jones
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Tue Apr 10 12:18:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
* src/xen_unified.h, src/xen_unified.c: Fix indentation.
上级
73dd7f0f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
433 addition
and
401 deletion
+433
-401
ChangeLog
ChangeLog
+4
-0
src/xen_unified.c
src/xen_unified.c
+415
-401
src/xen_unified.h
src/xen_unified.h
+14
-0
未找到文件。
ChangeLog
浏览文件 @
0c52de4d
Tue Apr 10 12:18:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
* src/xen_unified.h, src/xen_unified.c: Fix indentation.
Fri Apr 6 17:33:13 CEST 2007 Daniel Veillard <veillard@redhat.com>
* src/test.c: converted to new XPath APIs
...
...
src/xen_unified.c
浏览文件 @
0c52de4d
...
...
@@ -42,11 +42,11 @@
/* The five Xen drivers below us. */
static
virDriverPtr
drivers
[]
=
{
&
xenHypervisorDriver
,
&
xenProxyDriver
,
&
xenDaemonDriver
,
&
xenStoreDriver
,
&
xenXMDriver
&
xenHypervisorDriver
,
&
xenProxyDriver
,
&
xenDaemonDriver
,
&
xenStoreDriver
,
&
xenXMDriver
};
static
const
int
nb_drivers
=
sizeof
drivers
/
sizeof
drivers
[
0
];
static
const
int
hypervisor_offset
=
0
;
...
...
@@ -67,7 +67,7 @@ xenUnifiedError (virConnectPtr conn, virErrorNumber error, const char *info)
errmsg
=
__virErrorMsg
(
error
,
info
);
__virRaiseError
(
conn
,
NULL
,
NULL
,
VIR_FROM_XEN
,
error
,
VIR_ERR_ERROR
,
errmsg
,
info
,
NULL
,
0
,
0
,
errmsg
,
info
);
errmsg
,
info
,
NULL
,
0
,
0
,
errmsg
,
info
);
}
/*----- Dispatch functions. -----*/
...
...
@@ -84,695 +84,709 @@ xenUnifiedError (virConnectPtr conn, virErrorNumber error, const char *info)
static
int
xenUnifiedOpen
(
virConnectPtr
conn
,
const
char
*
name
,
int
flags
)
{
int
i
,
j
;
xenUnifiedPrivatePtr
priv
;
/* If name == NULL, name == "", or begins with "xen", then it's for us. */
if
(
!
name
||
name
[
0
]
==
'\0'
)
name
=
"xen"
;
if
(
strncasecmp
(
name
,
"xen"
,
3
)
!=
0
)
return
VIR_DRV_OPEN_DECLINED
;
/* Allocate per-connection private data. */
priv
=
malloc
(
sizeof
*
priv
);
if
(
!
priv
)
{
xenUnifiedError
(
conn
,
VIR_ERR_NO_MEMORY
,
"allocating private data"
);
return
VIR_DRV_OPEN_ERROR
;
}
conn
->
privateData
=
priv
;
priv
->
handle
=
-
1
;
priv
->
xendConfigVersion
=
-
1
;
priv
->
type
=
-
1
;
priv
->
len
=
-
1
;
priv
->
addr
=
NULL
;
priv
->
xshandle
=
NULL
;
priv
->
proxy
=
-
1
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
{
int
failed_to_open
=
1
;
/* Ignore proxy for root */
if
(
i
==
proxy_offset
&&
getuid
()
==
0
)
continue
;
if
(
drivers
[
i
]
->
open
&&
drivers
[
i
]
->
open
(
conn
,
name
,
flags
)
==
VIR_DRV_OPEN_SUCCESS
)
failed_to_open
=
0
;
/* If as root, then all drivers must succeed.
If non-root, then only proxy must succeed */
if
(
failed_to_open
&&
(
getuid
()
==
0
||
i
==
proxy_offset
))
{
for
(
j
=
0
;
j
<
i
;
++
j
)
drivers
[
j
]
->
close
(
conn
);
return
VIR_DRV_OPEN_ERROR
;
int
i
,
j
;
xenUnifiedPrivatePtr
priv
;
/* If name == NULL, name == "", or begins with "xen", then it's for us. */
if
(
!
name
||
name
[
0
]
==
'\0'
)
name
=
"xen"
;
if
(
strncasecmp
(
name
,
"xen"
,
3
)
!=
0
)
return
VIR_DRV_OPEN_DECLINED
;
/* Allocate per-connection private data. */
priv
=
malloc
(
sizeof
*
priv
);
if
(
!
priv
)
{
xenUnifiedError
(
conn
,
VIR_ERR_NO_MEMORY
,
"allocating private data"
);
return
VIR_DRV_OPEN_ERROR
;
}
conn
->
privateData
=
priv
;
priv
->
handle
=
-
1
;
priv
->
xendConfigVersion
=
-
1
;
priv
->
type
=
-
1
;
priv
->
len
=
-
1
;
priv
->
addr
=
NULL
;
priv
->
xshandle
=
NULL
;
priv
->
proxy
=
-
1
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
{
int
failed_to_open
=
1
;
/* Ignore proxy for root */
if
(
i
==
proxy_offset
&&
getuid
()
==
0
)
continue
;
if
(
drivers
[
i
]
->
open
&&
drivers
[
i
]
->
open
(
conn
,
name
,
flags
)
==
VIR_DRV_OPEN_SUCCESS
)
failed_to_open
=
0
;
/* If as root, then all drivers must succeed.
If non-root, then only proxy must succeed */
if
(
failed_to_open
&&
(
getuid
()
==
0
||
i
==
proxy_offset
))
{
for
(
j
=
0
;
j
<
i
;
++
j
)
drivers
[
j
]
->
close
(
conn
);
return
VIR_DRV_OPEN_ERROR
;
}
}
}
return
VIR_DRV_OPEN_SUCCESS
;
return
VIR_DRV_OPEN_SUCCESS
;
}
static
int
xenUnifiedClose
(
virConnectPtr
conn
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
close
)
(
void
)
drivers
[
i
]
->
close
(
conn
);
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
close
)
(
void
)
drivers
[
i
]
->
close
(
conn
);
free
(
conn
->
privateData
);
conn
->
privateData
=
NULL
;
free
(
conn
->
privateData
);
conn
->
privateData
=
NULL
;
return
0
;
return
0
;
}
static
const
char
*
xenUnifiedType
(
virConnectPtr
conn
)
{
int
i
;
const
char
*
ret
;
int
i
;
const
char
*
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
type
)
{
ret
=
drivers
[
i
]
->
type
(
conn
);
if
(
ret
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
type
)
{
ret
=
drivers
[
i
]
->
type
(
conn
);
if
(
ret
)
return
ret
;
}
return
NULL
;
return
NULL
;
}
static
int
xenUnifiedVersion
(
virConnectPtr
conn
,
unsigned
long
*
hvVer
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
version
&&
drivers
[
i
]
->
version
(
conn
,
hvVer
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
version
&&
drivers
[
i
]
->
version
(
conn
,
hvVer
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedGetMaxVcpus
(
virConnectPtr
conn
,
const
char
*
type
)
{
int
i
;
int
i
;
if
(
!
type
)
type
=
"Xen"
;
if
(
!
type
)
type
=
"Xen"
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
strcmp
(
drivers
[
i
]
->
name
,
type
)
==
0
)
return
drivers
[
i
]
->
getMaxVcpus
(
conn
,
type
);
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
strcmp
(
drivers
[
i
]
->
name
,
type
)
==
0
)
return
drivers
[
i
]
->
getMaxVcpus
(
conn
,
type
);
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedNodeGetInfo
(
virConnectPtr
conn
,
virNodeInfoPtr
info
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
nodeGetInfo
&&
drivers
[
i
]
->
nodeGetInfo
(
conn
,
info
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
nodeGetInfo
&&
drivers
[
i
]
->
nodeGetInfo
(
conn
,
info
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
char
*
xenUnifiedGetCapabilities
(
virConnectPtr
conn
)
{
int
i
;
char
*
ret
;
int
i
;
char
*
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
getCapabilities
)
{
ret
=
drivers
[
i
]
->
getCapabilities
(
conn
);
if
(
ret
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
getCapabilities
)
{
ret
=
drivers
[
i
]
->
getCapabilities
(
conn
);
if
(
ret
)
return
ret
;
}
return
NULL
;
return
NULL
;
}
static
int
xenUnifiedListDomains
(
virConnectPtr
conn
,
int
*
ids
,
int
maxids
)
{
int
i
,
ret
;
int
i
,
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
listDomains
)
{
ret
=
drivers
[
i
]
->
listDomains
(
conn
,
ids
,
maxids
);
if
(
ret
>=
0
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
listDomains
)
{
ret
=
drivers
[
i
]
->
listDomains
(
conn
,
ids
,
maxids
);
if
(
ret
>=
0
)
return
ret
;
}
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedNumOfDomains
(
virConnectPtr
conn
)
{
int
i
,
ret
;
int
i
,
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
numOfDomains
)
{
ret
=
drivers
[
i
]
->
numOfDomains
(
conn
);
if
(
ret
>=
0
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
numOfDomains
)
{
ret
=
drivers
[
i
]
->
numOfDomains
(
conn
);
if
(
ret
>=
0
)
return
ret
;
}
return
-
1
;
return
-
1
;
}
static
virDomainPtr
xenUnifiedDomainCreateLinux
(
virConnectPtr
conn
,
const
char
*
xmlDesc
,
unsigned
int
flags
)
const
char
*
xmlDesc
,
unsigned
int
flags
)
{
int
i
;
virDomainPtr
ret
;
int
i
;
virDomainPtr
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainCreateLinux
)
{
ret
=
drivers
[
i
]
->
domainCreateLinux
(
conn
,
xmlDesc
,
flags
);
if
(
ret
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainCreateLinux
)
{
ret
=
drivers
[
i
]
->
domainCreateLinux
(
conn
,
xmlDesc
,
flags
);
if
(
ret
)
return
ret
;
}
return
NULL
;
return
NULL
;
}
static
virDomainPtr
xenUnifiedDomainLookupByID
(
virConnectPtr
conn
,
int
id
)
{
int
i
;
virDomainPtr
ret
;
int
i
;
virDomainPtr
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainLookupByID
)
{
ret
=
drivers
[
i
]
->
domainLookupByID
(
conn
,
id
);
if
(
ret
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainLookupByID
)
{
ret
=
drivers
[
i
]
->
domainLookupByID
(
conn
,
id
);
if
(
ret
)
return
ret
;
}
return
NULL
;
return
NULL
;
}
static
virDomainPtr
xenUnifiedDomainLookupByUUID
(
virConnectPtr
conn
,
const
unsigned
char
*
uuid
)
const
unsigned
char
*
uuid
)
{
int
i
;
virDomainPtr
ret
;
int
i
;
virDomainPtr
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainLookupByUUID
)
{
ret
=
drivers
[
i
]
->
domainLookupByUUID
(
conn
,
uuid
);
if
(
ret
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainLookupByUUID
)
{
ret
=
drivers
[
i
]
->
domainLookupByUUID
(
conn
,
uuid
);
if
(
ret
)
return
ret
;
}
return
NULL
;
return
NULL
;
}
static
virDomainPtr
xenUnifiedDomainLookupByName
(
virConnectPtr
conn
,
const
char
*
name
)
const
char
*
name
)
{
int
i
;
virDomainPtr
ret
;
int
i
;
virDomainPtr
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainLookupByName
)
{
ret
=
drivers
[
i
]
->
domainLookupByName
(
conn
,
name
);
if
(
ret
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainLookupByName
)
{
ret
=
drivers
[
i
]
->
domainLookupByName
(
conn
,
name
);
if
(
ret
)
return
ret
;
}
return
NULL
;
return
NULL
;
}
static
int
xenUnifiedDomainSuspend
(
virDomainPtr
dom
)
{
int
i
;
int
i
;
/* Try non-hypervisor methods first, then hypervisor direct method
* as a last resort.
*/
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
i
!=
hypervisor_offset
&&
drivers
[
i
]
->
domainSuspend
&&
drivers
[
i
]
->
domainSuspend
(
dom
)
==
0
)
return
0
;
/* Try non-hypervisor methods first, then hypervisor direct method
* as a last resort.
*/
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
i
!=
hypervisor_offset
&&
drivers
[
i
]
->
domainSuspend
&&
drivers
[
i
]
->
domainSuspend
(
dom
)
==
0
)
return
0
;
if
(
drivers
[
hypervisor_offset
]
->
domainSuspend
&&
drivers
[
hypervisor_offset
]
->
domainSuspend
(
dom
)
==
0
)
return
0
;
if
(
drivers
[
hypervisor_offset
]
->
domainSuspend
&&
drivers
[
hypervisor_offset
]
->
domainSuspend
(
dom
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainResume
(
virDomainPtr
dom
)
{
int
i
;
int
i
;
/* Try non-hypervisor methods first, then hypervisor direct method
* as a last resort.
*/
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
i
!=
hypervisor_offset
&&
drivers
[
i
]
->
domainResume
&&
drivers
[
i
]
->
domainResume
(
dom
)
==
0
)
return
0
;
/* Try non-hypervisor methods first, then hypervisor direct method
* as a last resort.
*/
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
i
!=
hypervisor_offset
&&
drivers
[
i
]
->
domainResume
&&
drivers
[
i
]
->
domainResume
(
dom
)
==
0
)
return
0
;
if
(
drivers
[
hypervisor_offset
]
->
domainResume
&&
drivers
[
hypervisor_offset
]
->
domainResume
(
dom
)
==
0
)
return
0
;
if
(
drivers
[
hypervisor_offset
]
->
domainResume
&&
drivers
[
hypervisor_offset
]
->
domainResume
(
dom
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainShutdown
(
virDomainPtr
dom
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainShutdown
&&
drivers
[
i
]
->
domainShutdown
(
dom
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainShutdown
&&
drivers
[
i
]
->
domainShutdown
(
dom
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainReboot
(
virDomainPtr
dom
,
unsigned
int
flags
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainReboot
&&
drivers
[
i
]
->
domainReboot
(
dom
,
flags
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainReboot
&&
drivers
[
i
]
->
domainReboot
(
dom
,
flags
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainDestroy
(
virDomainPtr
dom
)
{
int
i
;
int
i
;
/* Try non-hypervisor methods first, then hypervisor direct method
* as a last resort.
*/
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
i
!=
hypervisor_offset
&&
drivers
[
i
]
->
domainDestroy
&&
drivers
[
i
]
->
domainDestroy
(
dom
)
==
0
)
return
0
;
/* Try non-hypervisor methods first, then hypervisor direct method
* as a last resort.
*/
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
i
!=
hypervisor_offset
&&
drivers
[
i
]
->
domainDestroy
&&
drivers
[
i
]
->
domainDestroy
(
dom
)
==
0
)
return
0
;
if
(
drivers
[
hypervisor_offset
]
->
domainDestroy
&&
drivers
[
hypervisor_offset
]
->
domainDestroy
(
dom
)
==
0
)
return
0
;
if
(
drivers
[
hypervisor_offset
]
->
domainDestroy
&&
drivers
[
hypervisor_offset
]
->
domainDestroy
(
dom
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
char
*
xenUnifiedDomainGetOSType
(
virDomainPtr
dom
)
{
int
i
;
char
*
ret
;
int
i
;
char
*
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetOSType
)
{
ret
=
drivers
[
i
]
->
domainGetOSType
(
dom
);
if
(
ret
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetOSType
)
{
ret
=
drivers
[
i
]
->
domainGetOSType
(
dom
);
if
(
ret
)
return
ret
;
}
return
NULL
;
return
NULL
;
}
static
unsigned
long
xenUnifiedDomainGetMaxMemory
(
virDomainPtr
dom
)
{
int
i
;
unsigned
long
ret
;
int
i
;
unsigned
long
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetMaxMemory
)
{
ret
=
drivers
[
i
]
->
domainGetMaxMemory
(
dom
);
if
(
ret
!=
0
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetMaxMemory
)
{
ret
=
drivers
[
i
]
->
domainGetMaxMemory
(
dom
);
if
(
ret
!=
0
)
return
ret
;
}
return
0
;
return
0
;
}
static
int
xenUnifiedDomainSetMaxMemory
(
virDomainPtr
dom
,
unsigned
long
memory
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainSetMaxMemory
&&
drivers
[
i
]
->
domainSetMaxMemory
(
dom
,
memory
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainSetMaxMemory
&&
drivers
[
i
]
->
domainSetMaxMemory
(
dom
,
memory
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainSetMemory
(
virDomainPtr
dom
,
unsigned
long
memory
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainSetMemory
&&
drivers
[
i
]
->
domainSetMemory
(
dom
,
memory
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainSetMemory
&&
drivers
[
i
]
->
domainSetMemory
(
dom
,
memory
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainGetInfo
(
virDomainPtr
dom
,
virDomainInfoPtr
info
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetInfo
&&
drivers
[
i
]
->
domainGetInfo
(
dom
,
info
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetInfo
&&
drivers
[
i
]
->
domainGetInfo
(
dom
,
info
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainSave
(
virDomainPtr
dom
,
const
char
*
to
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainSave
&&
drivers
[
i
]
->
domainSave
(
dom
,
to
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainSave
&&
drivers
[
i
]
->
domainSave
(
dom
,
to
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainRestore
(
virConnectPtr
conn
,
const
char
*
from
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainRestore
&&
drivers
[
i
]
->
domainRestore
(
conn
,
from
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainRestore
&&
drivers
[
i
]
->
domainRestore
(
conn
,
from
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainCoreDump
(
virDomainPtr
dom
,
const
char
*
to
,
int
flags
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainCoreDump
&&
drivers
[
i
]
->
domainCoreDump
(
dom
,
to
,
flags
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainCoreDump
&&
drivers
[
i
]
->
domainCoreDump
(
dom
,
to
,
flags
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainSetVcpus
(
virDomainPtr
dom
,
unsigned
int
nvcpus
)
{
int
i
;
int
i
;
/* Try non-hypervisor methods first, then hypervisor direct method
* as a last resort.
*/
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
i
!=
hypervisor_offset
&&
drivers
[
i
]
->
domainSetVcpus
&&
drivers
[
i
]
->
domainSetVcpus
(
dom
,
nvcpus
)
==
0
)
return
0
;
/* Try non-hypervisor methods first, then hypervisor direct method
* as a last resort.
*/
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
i
!=
hypervisor_offset
&&
drivers
[
i
]
->
domainSetVcpus
&&
drivers
[
i
]
->
domainSetVcpus
(
dom
,
nvcpus
)
==
0
)
return
0
;
if
(
drivers
[
hypervisor_offset
]
->
domainSetVcpus
&&
drivers
[
hypervisor_offset
]
->
domainSetVcpus
(
dom
,
nvcpus
)
==
0
)
return
0
;
if
(
drivers
[
hypervisor_offset
]
->
domainSetVcpus
&&
drivers
[
hypervisor_offset
]
->
domainSetVcpus
(
dom
,
nvcpus
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainPinVcpu
(
virDomainPtr
dom
,
unsigned
int
vcpu
,
unsigned
char
*
cpumap
,
int
maplen
)
unsigned
char
*
cpumap
,
int
maplen
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainPinVcpu
&&
drivers
[
i
]
->
domainPinVcpu
(
dom
,
vcpu
,
cpumap
,
maplen
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainPinVcpu
&&
drivers
[
i
]
->
domainPinVcpu
(
dom
,
vcpu
,
cpumap
,
maplen
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainGetVcpus
(
virDomainPtr
dom
,
virVcpuInfoPtr
info
,
int
maxinfo
,
unsigned
char
*
cpumaps
,
int
maplen
)
virVcpuInfoPtr
info
,
int
maxinfo
,
unsigned
char
*
cpumaps
,
int
maplen
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetVcpus
&&
drivers
[
i
]
->
domainGetVcpus
(
dom
,
info
,
maxinfo
,
cpumaps
,
maplen
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetVcpus
&&
drivers
[
i
]
->
domainGetVcpus
(
dom
,
info
,
maxinfo
,
cpumaps
,
maplen
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainGetMaxVcpus
(
virDomainPtr
dom
)
{
int
i
,
ret
;
int
i
,
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetMaxVcpus
)
{
ret
=
drivers
[
i
]
->
domainGetMaxVcpus
(
dom
);
if
(
ret
!=
0
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetMaxVcpus
)
{
ret
=
drivers
[
i
]
->
domainGetMaxVcpus
(
dom
);
if
(
ret
!=
0
)
return
ret
;
}
return
-
1
;
return
-
1
;
}
static
char
*
xenUnifiedDomainDumpXML
(
virDomainPtr
dom
,
int
flags
)
{
int
i
;
char
*
ret
;
int
i
;
char
*
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainDumpXML
)
{
ret
=
drivers
[
i
]
->
domainDumpXML
(
dom
,
flags
);
if
(
ret
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainDumpXML
)
{
ret
=
drivers
[
i
]
->
domainDumpXML
(
dom
,
flags
);
if
(
ret
)
return
ret
;
}
return
NULL
;
return
NULL
;
}
static
int
xenUnifiedListDefinedDomains
(
virConnectPtr
conn
,
char
**
const
names
,
int
maxnames
)
int
maxnames
)
{
int
i
;
int
ret
;
int
i
;
int
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
listDefinedDomains
)
{
ret
=
drivers
[
i
]
->
listDefinedDomains
(
conn
,
names
,
maxnames
);
if
(
ret
>=
0
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
listDefinedDomains
)
{
ret
=
drivers
[
i
]
->
listDefinedDomains
(
conn
,
names
,
maxnames
);
if
(
ret
>=
0
)
return
ret
;
}
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedNumOfDefinedDomains
(
virConnectPtr
conn
)
{
int
i
;
int
ret
;
int
i
;
int
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
numOfDefinedDomains
)
{
ret
=
drivers
[
i
]
->
numOfDefinedDomains
(
conn
);
if
(
ret
>=
0
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
numOfDefinedDomains
)
{
ret
=
drivers
[
i
]
->
numOfDefinedDomains
(
conn
);
if
(
ret
>=
0
)
return
ret
;
}
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainCreate
(
virDomainPtr
dom
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainCreate
&&
drivers
[
i
]
->
domainCreate
(
dom
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainCreate
&&
drivers
[
i
]
->
domainCreate
(
dom
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
virDomainPtr
xenUnifiedDomainDefineXML
(
virConnectPtr
conn
,
const
char
*
xml
)
{
int
i
;
virDomainPtr
ret
;
int
i
;
virDomainPtr
ret
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainDefineXML
)
{
ret
=
drivers
[
i
]
->
domainDefineXML
(
conn
,
xml
);
if
(
ret
)
return
ret
;
}
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainDefineXML
)
{
ret
=
drivers
[
i
]
->
domainDefineXML
(
conn
,
xml
);
if
(
ret
)
return
ret
;
}
return
NULL
;
return
NULL
;
}
static
int
xenUnifiedDomainUndefine
(
virDomainPtr
dom
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainUndefine
&&
drivers
[
i
]
->
domainUndefine
(
dom
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainUndefine
&&
drivers
[
i
]
->
domainUndefine
(
dom
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainAttachDevice
(
virDomainPtr
dom
,
char
*
xml
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainAttachDevice
&&
drivers
[
i
]
->
domainAttachDevice
(
dom
,
xml
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainAttachDevice
&&
drivers
[
i
]
->
domainAttachDevice
(
dom
,
xml
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainDetachDevice
(
virDomainPtr
dom
,
char
*
xml
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainDetachDevice
&&
drivers
[
i
]
->
domainDetachDevice
(
dom
,
xml
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainDetachDevice
&&
drivers
[
i
]
->
domainDetachDevice
(
dom
,
xml
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainGetAutostart
(
virDomainPtr
dom
,
int
*
autostart
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetAutostart
&&
drivers
[
i
]
->
domainGetAutostart
(
dom
,
autostart
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainGetAutostart
&&
drivers
[
i
]
->
domainGetAutostart
(
dom
,
autostart
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
static
int
xenUnifiedDomainSetAutostart
(
virDomainPtr
dom
,
int
autostart
)
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainSetAutostart
&&
drivers
[
i
]
->
domainSetAutostart
(
dom
,
autostart
)
==
0
)
return
0
;
for
(
i
=
0
;
i
<
nb_drivers
;
++
i
)
if
(
drivers
[
i
]
->
domainSetAutostart
&&
drivers
[
i
]
->
domainSetAutostart
(
dom
,
autostart
)
==
0
)
return
0
;
return
-
1
;
return
-
1
;
}
/*----- Register with libvirt.c, and initialise Xen drivers. -----*/
#define VERSION ((DOM0_INTERFACE_VERSION >> 24) * 1000000 +
\
((DOM0_INTERFACE_VERSION >> 16) & 0xFF) * 1000 + \
(DOM0_INTERFACE_VERSION & 0xFFFF))
#define VERSION ((DOM0_INTERFACE_VERSION >> 24) * 1000000 +
\
((DOM0_INTERFACE_VERSION >> 16) & 0xFF) * 1000 + \
(DOM0_INTERFACE_VERSION & 0xFFFF))
/* The interface which we export upwards to libvirt.c. */
static
virDriver
xenUnifiedDriver
=
{
.
no
=
VIR_DRV_XEN_UNIFIED
,
.
name
=
"xen"
,
.
ver
=
VERSION
,
.
open
=
xenUnifiedOpen
,
.
close
=
xenUnifiedClose
,
.
type
=
xenUnifiedType
,
.
version
=
xenUnifiedVersion
,
.
getMaxVcpus
=
xenUnifiedGetMaxVcpus
,
.
nodeGetInfo
=
xenUnifiedNodeGetInfo
,
.
getCapabilities
=
xenUnifiedGetCapabilities
,
.
listDomains
=
xenUnifiedListDomains
,
.
numOfDomains
=
xenUnifiedNumOfDomains
,
.
domainCreateLinux
=
xenUnifiedDomainCreateLinux
,
.
domainLookupByID
=
xenUnifiedDomainLookupByID
,
.
domainLookupByUUID
=
xenUnifiedDomainLookupByUUID
,
.
domainLookupByName
=
xenUnifiedDomainLookupByName
,
.
domainSuspend
=
xenUnifiedDomainSuspend
,
.
domainResume
=
xenUnifiedDomainResume
,
.
domainShutdown
=
xenUnifiedDomainShutdown
,
.
domainReboot
=
xenUnifiedDomainReboot
,
.
domainDestroy
=
xenUnifiedDomainDestroy
,
.
domainGetOSType
=
xenUnifiedDomainGetOSType
,
.
domainGetMaxMemory
=
xenUnifiedDomainGetMaxMemory
,
.
domainSetMaxMemory
=
xenUnifiedDomainSetMaxMemory
,
.
domainSetMemory
=
xenUnifiedDomainSetMemory
,
.
domainGetInfo
=
xenUnifiedDomainGetInfo
,
.
domainSave
=
xenUnifiedDomainSave
,
.
domainRestore
=
xenUnifiedDomainRestore
,
.
domainCoreDump
=
xenUnifiedDomainCoreDump
,
.
domainSetVcpus
=
xenUnifiedDomainSetVcpus
,
.
domainPinVcpu
=
xenUnifiedDomainPinVcpu
,
.
domainGetVcpus
=
xenUnifiedDomainGetVcpus
,
.
domainGetMaxVcpus
=
xenUnifiedDomainGetMaxVcpus
,
.
domainDumpXML
=
xenUnifiedDomainDumpXML
,
.
listDefinedDomains
=
xenUnifiedListDefinedDomains
,
.
numOfDefinedDomains
=
xenUnifiedNumOfDefinedDomains
,
.
domainCreate
=
xenUnifiedDomainCreate
,
.
domainDefineXML
=
xenUnifiedDomainDefineXML
,
.
domainUndefine
=
xenUnifiedDomainUndefine
,
.
domainAttachDevice
=
xenUnifiedDomainAttachDevice
,
.
domainDetachDevice
=
xenUnifiedDomainDetachDevice
,
.
domainGetAutostart
=
xenUnifiedDomainGetAutostart
,
.
domainSetAutostart
=
xenUnifiedDomainSetAutostart
,
.
no
=
VIR_DRV_XEN_UNIFIED
,
.
name
=
"xen"
,
.
ver
=
VERSION
,
.
open
=
xenUnifiedOpen
,
.
close
=
xenUnifiedClose
,
.
type
=
xenUnifiedType
,
.
version
=
xenUnifiedVersion
,
.
getMaxVcpus
=
xenUnifiedGetMaxVcpus
,
.
nodeGetInfo
=
xenUnifiedNodeGetInfo
,
.
getCapabilities
=
xenUnifiedGetCapabilities
,
.
listDomains
=
xenUnifiedListDomains
,
.
numOfDomains
=
xenUnifiedNumOfDomains
,
.
domainCreateLinux
=
xenUnifiedDomainCreateLinux
,
.
domainLookupByID
=
xenUnifiedDomainLookupByID
,
.
domainLookupByUUID
=
xenUnifiedDomainLookupByUUID
,
.
domainLookupByName
=
xenUnifiedDomainLookupByName
,
.
domainSuspend
=
xenUnifiedDomainSuspend
,
.
domainResume
=
xenUnifiedDomainResume
,
.
domainShutdown
=
xenUnifiedDomainShutdown
,
.
domainReboot
=
xenUnifiedDomainReboot
,
.
domainDestroy
=
xenUnifiedDomainDestroy
,
.
domainGetOSType
=
xenUnifiedDomainGetOSType
,
.
domainGetMaxMemory
=
xenUnifiedDomainGetMaxMemory
,
.
domainSetMaxMemory
=
xenUnifiedDomainSetMaxMemory
,
.
domainSetMemory
=
xenUnifiedDomainSetMemory
,
.
domainGetInfo
=
xenUnifiedDomainGetInfo
,
.
domainSave
=
xenUnifiedDomainSave
,
.
domainRestore
=
xenUnifiedDomainRestore
,
.
domainCoreDump
=
xenUnifiedDomainCoreDump
,
.
domainSetVcpus
=
xenUnifiedDomainSetVcpus
,
.
domainPinVcpu
=
xenUnifiedDomainPinVcpu
,
.
domainGetVcpus
=
xenUnifiedDomainGetVcpus
,
.
domainGetMaxVcpus
=
xenUnifiedDomainGetMaxVcpus
,
.
domainDumpXML
=
xenUnifiedDomainDumpXML
,
.
listDefinedDomains
=
xenUnifiedListDefinedDomains
,
.
numOfDefinedDomains
=
xenUnifiedNumOfDefinedDomains
,
.
domainCreate
=
xenUnifiedDomainCreate
,
.
domainDefineXML
=
xenUnifiedDomainDefineXML
,
.
domainUndefine
=
xenUnifiedDomainUndefine
,
.
domainAttachDevice
=
xenUnifiedDomainAttachDevice
,
.
domainDetachDevice
=
xenUnifiedDomainDetachDevice
,
.
domainGetAutostart
=
xenUnifiedDomainGetAutostart
,
.
domainSetAutostart
=
xenUnifiedDomainSetAutostart
,
};
int
xenUnifiedRegister
(
void
)
{
/* Ignore failures here. */
(
void
)
xenHypervisorInit
();
(
void
)
xenProxyInit
();
(
void
)
xenDaemonInit
();
(
void
)
xenStoreInit
();
(
void
)
xenXMInit
();
/* Ignore failures here. */
(
void
)
xenHypervisorInit
();
(
void
)
xenProxyInit
();
(
void
)
xenDaemonInit
();
(
void
)
xenStoreInit
();
(
void
)
xenXMInit
();
return
virRegisterDriver
(
&
xenUnifiedDriver
);
return
virRegisterDriver
(
&
xenUnifiedDriver
);
}
#endif
/* WITH_XEN */
/*
* vim: set tabstop=4:
* vim: set shiftwidth=4:
* vim: set expandtab:
*/
/*
* Local variables:
* indent-tabs-mode: nil
* c-indent-level: 4
* c-basic-offset: 4
* tab-width: 4
* End:
*/
src/xen_unified.h
浏览文件 @
0c52de4d
...
...
@@ -51,3 +51,17 @@ typedef struct _xenUnifiedPrivate *xenUnifiedPrivatePtr;
#endif
#endif
/* __VIR_XEN_UNIFIED_H__ */
/*
* vim: set tabstop=4:
* vim: set shiftwidth=4:
* vim: set expandtab:
*/
/*
* Local variables:
* indent-tabs-mode: nil
* c-indent-level: 4
* c-basic-offset: 4
* tab-width: 4
* End:
*/
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录