Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
96f28f7f
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看板
提交
96f28f7f
编写于
6月 07, 2011
作者:
M
Matthias Bolte
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
vbox: Support shared folders
Shared folders are handled as filesystems and can also be hotplugged.
上级
484460ec
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
145 addition
and
0 deletion
+145
-0
docs/drvvbox.html.in
docs/drvvbox.html.in
+5
-0
src/vbox/vbox_tmpl.c
src/vbox/vbox_tmpl.c
+140
-0
未找到文件。
docs/drvvbox.html.in
浏览文件 @
96f28f7f
...
@@ -70,6 +70,11 @@ vbox+ssh://user@example.com/session (remote access, SSH tunnelled)
...
@@ -70,6 +70,11 @@ vbox+ssh://user@example.com/session (remote access, SSH tunnelled)
<
target dev='fda'/
>
<
target dev='fda'/
>
<
/disk
>
<
/disk
>
<
filesystem type='mount'
>
<
source dir='/home/user/stuff'/
>
<
target dir='my-shared-folder'/
>
<
/filesystem
>
<
!--BRIDGE--
>
<
!--BRIDGE--
>
<
interface type='bridge'
>
<
interface type='bridge'
>
<
source bridge='eth0'/
>
<
source bridge='eth0'/
>
...
...
src/vbox/vbox_tmpl.c
浏览文件 @
96f28f7f
...
@@ -2267,6 +2267,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
...
@@ -2267,6 +2267,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
/* Not supported by libvirt yet */
/* Not supported by libvirt yet */
}
else
if
(
device
==
DeviceType_SharedFolder
)
{
}
else
if
(
device
==
DeviceType_SharedFolder
)
{
/* Not supported by libvirt yet */
/* Not supported by libvirt yet */
/* Can VirtualBox really boot from a shared folder? */
}
}
}
}
...
@@ -2771,6 +2772,67 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
...
@@ -2771,6 +2772,67 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
#endif
/* VBOX_API_VERSION >= 3001 */
#endif
/* VBOX_API_VERSION >= 3001 */
/* shared folders */
vboxArray
sharedFolders
=
VBOX_ARRAY_INITIALIZER
;
def
->
nfss
=
0
;
vboxArrayGet
(
&
sharedFolders
,
machine
,
machine
->
vtbl
->
GetSharedFolders
);
if
(
sharedFolders
.
count
>
0
)
{
if
(
VIR_ALLOC_N
(
def
->
fss
,
sharedFolders
.
count
)
<
0
)
{
virReportOOMError
();
goto
sharedFoldersCleanup
;
}
for
(
i
=
0
;
i
<
sharedFolders
.
count
;
i
++
)
{
ISharedFolder
*
sharedFolder
=
sharedFolders
.
items
[
i
];
PRUnichar
*
nameUtf16
=
NULL
;
char
*
name
=
NULL
;
PRUnichar
*
hostPathUtf16
=
NULL
;
char
*
hostPath
=
NULL
;
PRBool
writable
=
PR_FALSE
;
if
(
VIR_ALLOC
(
def
->
fss
[
i
])
<
0
)
{
virReportOOMError
();
goto
sharedFoldersCleanup
;
}
def
->
fss
[
i
]
->
type
=
VIR_DOMAIN_FS_TYPE_MOUNT
;
sharedFolder
->
vtbl
->
GetHostPath
(
sharedFolder
,
&
hostPathUtf16
);
VBOX_UTF16_TO_UTF8
(
hostPathUtf16
,
&
hostPath
);
def
->
fss
[
i
]
->
src
=
strdup
(
hostPath
);
VBOX_UTF8_FREE
(
hostPath
);
VBOX_UTF16_FREE
(
hostPathUtf16
);
if
(
def
->
fss
[
i
]
->
src
==
NULL
)
{
virReportOOMError
();
goto
sharedFoldersCleanup
;
}
sharedFolder
->
vtbl
->
GetName
(
sharedFolder
,
&
nameUtf16
);
VBOX_UTF16_TO_UTF8
(
nameUtf16
,
&
name
);
def
->
fss
[
i
]
->
dst
=
strdup
(
name
);
VBOX_UTF8_FREE
(
name
);
VBOX_UTF16_FREE
(
nameUtf16
);
if
(
def
->
fss
[
i
]
->
dst
==
NULL
)
{
virReportOOMError
();
goto
sharedFoldersCleanup
;
}
sharedFolder
->
vtbl
->
GetWritable
(
sharedFolder
,
&
writable
);
def
->
fss
[
i
]
->
readonly
=
!
writable
;
++
def
->
nfss
;
}
}
sharedFoldersCleanup:
vboxArrayRelease
(
&
sharedFolders
);
/* dump network cards if present */
/* dump network cards if present */
def
->
nnets
=
0
;
def
->
nnets
=
0
;
/* Get which network cards are enabled */
/* Get which network cards are enabled */
...
@@ -4811,6 +4873,38 @@ vboxAttachUSB(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
...
@@ -4811,6 +4873,38 @@ vboxAttachUSB(virDomainDefPtr def, vboxGlobalData *data, IMachine *machine)
}
}
}
}
static
void
vboxAttachSharedFolder
(
virDomainDefPtr
def
,
vboxGlobalData
*
data
,
IMachine
*
machine
)
{
int
i
;
PRUnichar
*
nameUtf16
;
PRUnichar
*
hostPathUtf16
;
PRBool
writable
;
if
(
def
->
nfss
==
0
)
return
;
for
(
i
=
0
;
i
<
def
->
nfss
;
i
++
)
{
if
(
def
->
fss
[
i
]
->
type
!=
VIR_DOMAIN_FS_TYPE_MOUNT
)
continue
;
VBOX_UTF8_TO_UTF16
(
def
->
fss
[
i
]
->
dst
,
&
nameUtf16
);
VBOX_UTF8_TO_UTF16
(
def
->
fss
[
i
]
->
src
,
&
hostPathUtf16
);
writable
=
!
def
->
fss
[
i
]
->
readonly
;
#if VBOX_API_VERSION < 4000
machine
->
vtbl
->
CreateSharedFolder
(
machine
,
nameUtf16
,
hostPathUtf16
,
writable
);
#else
/* VBOX_API_VERSION >= 4000 */
machine
->
vtbl
->
CreateSharedFolder
(
machine
,
nameUtf16
,
hostPathUtf16
,
writable
,
PR_FALSE
);
#endif
/* VBOX_API_VERSION >= 4000 */
VBOX_UTF16_FREE
(
nameUtf16
);
VBOX_UTF16_FREE
(
hostPathUtf16
);
}
}
static
virDomainPtr
vboxDomainDefineXML
(
virConnectPtr
conn
,
const
char
*
xml
)
{
static
virDomainPtr
vboxDomainDefineXML
(
virConnectPtr
conn
,
const
char
*
xml
)
{
VBOX_OBJECT_CHECK
(
conn
,
virDomainPtr
,
NULL
);
VBOX_OBJECT_CHECK
(
conn
,
virDomainPtr
,
NULL
);
IMachine
*
machine
=
NULL
;
IMachine
*
machine
=
NULL
;
...
@@ -4949,6 +5043,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
...
@@ -4949,6 +5043,7 @@ static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
vboxAttachVideo
(
def
,
machine
);
vboxAttachVideo
(
def
,
machine
);
vboxAttachDisplay
(
def
,
data
,
machine
);
vboxAttachDisplay
(
def
,
data
,
machine
);
vboxAttachUSB
(
def
,
data
,
machine
);
vboxAttachUSB
(
def
,
data
,
machine
);
vboxAttachSharedFolder
(
def
,
data
,
machine
);
/* Save the machine settings made till now and close the
/* Save the machine settings made till now and close the
* session. also free up the mchiid variable used.
* session. also free up the mchiid variable used.
...
@@ -5303,6 +5398,34 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
...
@@ -5303,6 +5398,34 @@ static int vboxDomainAttachDeviceImpl(virDomainPtr dom,
if
(
dev
->
data
.
hostdev
->
source
.
subsys
.
type
==
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB
)
{
if
(
dev
->
data
.
hostdev
->
source
.
subsys
.
type
==
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB
)
{
}
}
}
}
}
else
if
(
dev
->
type
==
VIR_DOMAIN_DEVICE_FS
&&
dev
->
data
.
fs
->
type
==
VIR_DOMAIN_FS_TYPE_MOUNT
)
{
PRUnichar
*
nameUtf16
;
PRUnichar
*
hostPathUtf16
;
PRBool
writable
;
VBOX_UTF8_TO_UTF16
(
dev
->
data
.
fs
->
dst
,
&
nameUtf16
);
VBOX_UTF8_TO_UTF16
(
dev
->
data
.
fs
->
src
,
&
hostPathUtf16
);
writable
=
!
dev
->
data
.
fs
->
readonly
;
#if VBOX_API_VERSION < 4000
rc
=
machine
->
vtbl
->
CreateSharedFolder
(
machine
,
nameUtf16
,
hostPathUtf16
,
writable
);
#else
/* VBOX_API_VERSION >= 4000 */
rc
=
machine
->
vtbl
->
CreateSharedFolder
(
machine
,
nameUtf16
,
hostPathUtf16
,
writable
,
PR_FALSE
);
#endif
/* VBOX_API_VERSION >= 4000 */
if
(
NS_FAILED
(
rc
))
{
vboxError
(
VIR_ERR_INTERNAL_ERROR
,
_
(
"could not attach shared folder '%s', rc=%08x"
),
dev
->
data
.
fs
->
dst
,
(
unsigned
)
rc
);
}
else
{
ret
=
0
;
}
VBOX_UTF16_FREE
(
nameUtf16
);
VBOX_UTF16_FREE
(
hostPathUtf16
);
}
}
machine
->
vtbl
->
SaveSettings
(
machine
);
machine
->
vtbl
->
SaveSettings
(
machine
);
VBOX_RELEASE
(
machine
);
VBOX_RELEASE
(
machine
);
...
@@ -5461,6 +5584,23 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml) {
...
@@ -5461,6 +5584,23 @@ static int vboxDomainDetachDevice(virDomainPtr dom, const char *xml) {
if
(
dev
->
data
.
hostdev
->
source
.
subsys
.
type
==
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB
)
{
if
(
dev
->
data
.
hostdev
->
source
.
subsys
.
type
==
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB
)
{
}
}
}
}
}
else
if
(
dev
->
type
==
VIR_DOMAIN_DEVICE_FS
&&
dev
->
data
.
fs
->
type
==
VIR_DOMAIN_FS_TYPE_MOUNT
)
{
PRUnichar
*
nameUtf16
;
VBOX_UTF8_TO_UTF16
(
dev
->
data
.
fs
->
dst
,
&
nameUtf16
);
rc
=
machine
->
vtbl
->
RemoveSharedFolder
(
machine
,
nameUtf16
);
if
(
NS_FAILED
(
rc
))
{
vboxError
(
VIR_ERR_INTERNAL_ERROR
,
_
(
"could not detach shared folder '%s', rc=%08x"
),
dev
->
data
.
fs
->
dst
,
(
unsigned
)
rc
);
}
else
{
ret
=
0
;
}
VBOX_UTF16_FREE
(
nameUtf16
);
}
}
machine
->
vtbl
->
SaveSettings
(
machine
);
machine
->
vtbl
->
SaveSettings
(
machine
);
VBOX_RELEASE
(
machine
);
VBOX_RELEASE
(
machine
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录