Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
1f11e3bb
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,发现更多精彩内容 >>
提交
1f11e3bb
编写于
3月 02, 2009
作者:
C
Cole Robinson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Generate network bridge names if none passed at define/create time.
上级
adecc8fc
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
112 addition
and
31 deletion
+112
-31
ChangeLog
ChangeLog
+6
-0
src/bridge.c
src/bridge.c
+5
-24
src/bridge.h
src/bridge.h
+1
-1
src/libvirt_private.syms
src/libvirt_private.syms
+1
-0
src/network_conf.c
src/network_conf.c
+78
-0
src/network_conf.h
src/network_conf.h
+14
-0
src/network_driver.c
src/network_driver.c
+7
-6
未找到文件。
ChangeLog
浏览文件 @
1f11e3bb
Mon Mar 2 12:34:25 EST 2009 Cole Robinson <crobinso@redhat.com>
* src/bridge.c src/bridge.h src/libvirt_private.syms src/network_conf.c
src/network_conf.h src/network_driver.c:
Generate network bridge names if none passed at define/create time.
Mon Mar 2 12:30:08 EST 2009 Cole Robinson <crobinso@redhat.com>
Mon Mar 2 12:30:08 EST 2009 Cole Robinson <crobinso@redhat.com>
* src/domain_conf.c src/domain_conf.h src/qemu_driver.c:
* src/domain_conf.c src/domain_conf.h src/qemu_driver.c:
...
...
src/bridge.c
浏览文件 @
1f11e3bb
...
@@ -49,7 +49,7 @@
...
@@ -49,7 +49,7 @@
#include "util.h"
#include "util.h"
#include "logging.h"
#include "logging.h"
#define MAX_
BRIDGE
_ID 256
#define MAX_
TAP
_ID 256
#define JIFFIES_TO_MS(j) (((j)*1000)/HZ)
#define JIFFIES_TO_MS(j) (((j)*1000)/HZ)
#define MS_TO_JIFFIES(ms) (((ms)*HZ)/1000)
#define MS_TO_JIFFIES(ms) (((ms)*HZ)/1000)
...
@@ -127,32 +127,13 @@ brShutdown(brControl *ctl)
...
@@ -127,32 +127,13 @@ brShutdown(brControl *ctl)
#ifdef SIOCBRADDBR
#ifdef SIOCBRADDBR
int
int
brAddBridge
(
brControl
*
ctl
,
brAddBridge
(
brControl
*
ctl
,
c
har
*
*
name
)
c
onst
char
*
name
)
{
{
if
(
!
ctl
||
!
ctl
->
fd
||
!
name
)
if
(
!
ctl
||
!
ctl
->
fd
||
!
name
)
return
EINVAL
;
return
EINVAL
;
if
(
*
name
)
{
if
(
ioctl
(
ctl
->
fd
,
SIOCBRADDBR
,
name
)
==
0
)
if
(
ioctl
(
ctl
->
fd
,
SIOCBRADDBR
,
*
name
)
==
0
)
return
0
;
return
0
;
}
else
{
int
id
=
0
;
do
{
char
try
[
50
];
snprintf
(
try
,
sizeof
(
try
),
"virbr%d"
,
id
);
if
(
ioctl
(
ctl
->
fd
,
SIOCBRADDBR
,
try
)
==
0
)
{
if
(
!
(
*
name
=
strdup
(
try
)))
{
ioctl
(
ctl
->
fd
,
SIOCBRDELBR
,
name
);
return
ENOMEM
;
}
return
0
;
}
id
++
;
}
while
(
id
<
MAX_BRIDGE_ID
);
}
return
errno
;
return
errno
;
}
}
...
@@ -547,7 +528,7 @@ brAddTap(brControl *ctl,
...
@@ -547,7 +528,7 @@ brAddTap(brControl *ctl,
}
}
id
++
;
id
++
;
}
while
(
subst
&&
id
<=
MAX_
BRIDGE
_ID
);
}
while
(
subst
&&
id
<=
MAX_
TAP
_ID
);
error:
error:
close
(
fd
);
close
(
fd
);
...
...
src/bridge.h
浏览文件 @
1f11e3bb
...
@@ -47,7 +47,7 @@ int brInit (brControl **ctl);
...
@@ -47,7 +47,7 @@ int brInit (brControl **ctl);
void
brShutdown
(
brControl
*
ctl
);
void
brShutdown
(
brControl
*
ctl
);
int
brAddBridge
(
brControl
*
ctl
,
int
brAddBridge
(
brControl
*
ctl
,
c
har
*
*
name
);
c
onst
char
*
name
);
int
brDeleteBridge
(
brControl
*
ctl
,
int
brDeleteBridge
(
brControl
*
ctl
,
const
char
*
name
);
const
char
*
name
);
int
brHasBridge
(
brControl
*
ctl
,
int
brHasBridge
(
brControl
*
ctl
,
...
...
src/libvirt_private.syms
浏览文件 @
1f11e3bb
...
@@ -206,6 +206,7 @@ virNetworkObjListFree;
...
@@ -206,6 +206,7 @@ virNetworkObjListFree;
virNetworkDefParseNode;
virNetworkDefParseNode;
virNetworkRemoveInactive;
virNetworkRemoveInactive;
virNetworkSaveConfig;
virNetworkSaveConfig;
virNetworkSetBridgeName;
virNetworkObjLock;
virNetworkObjLock;
virNetworkObjUnlock;
virNetworkObjUnlock;
...
...
src/network_conf.c
浏览文件 @
1f11e3bb
...
@@ -43,6 +43,7 @@
...
@@ -43,6 +43,7 @@
#include "buf.h"
#include "buf.h"
#include "c-ctype.h"
#include "c-ctype.h"
#define MAX_BRIDGE_ID 256
#define VIR_FROM_THIS VIR_FROM_NETWORK
#define VIR_FROM_THIS VIR_FROM_NETWORK
VIR_ENUM_DECL
(
virNetworkForward
)
VIR_ENUM_DECL
(
virNetworkForward
)
...
@@ -743,6 +744,12 @@ virNetworkObjPtr virNetworkLoadConfig(virConnectPtr conn,
...
@@ -743,6 +744,12 @@ virNetworkObjPtr virNetworkLoadConfig(virConnectPtr conn,
goto
error
;
goto
error
;
}
}
/* Generate a bridge if none is found, but don't check for collisions
* if a bridge is hardcoded, so the network is at least defined
*/
if
(
!
def
->
bridge
&&
!
(
def
->
bridge
=
virNetworkAllocateBridge
(
conn
,
nets
)))
goto
error
;
if
(
!
(
net
=
virNetworkAssignDef
(
conn
,
nets
,
def
)))
if
(
!
(
net
=
virNetworkAssignDef
(
conn
,
nets
,
def
)))
goto
error
;
goto
error
;
...
@@ -848,6 +855,77 @@ char *virNetworkConfigFile(virConnectPtr conn,
...
@@ -848,6 +855,77 @@ char *virNetworkConfigFile(virConnectPtr conn,
return
ret
;
return
ret
;
}
}
int
virNetworkBridgeInUse
(
const
virNetworkObjListPtr
nets
,
const
char
*
bridge
,
const
char
*
skipname
)
{
unsigned
int
i
;
unsigned
int
ret
=
0
;
for
(
i
=
0
;
i
<
nets
->
count
;
i
++
)
{
virNetworkObjLock
(
nets
->
objs
[
i
]);
if
(
nets
->
objs
[
i
]
->
def
->
bridge
&&
STREQ
(
nets
->
objs
[
i
]
->
def
->
bridge
,
bridge
)
&&
!
(
skipname
&&
STREQ
(
nets
->
objs
[
i
]
->
def
->
name
,
skipname
)))
ret
=
1
;
virNetworkObjUnlock
(
nets
->
objs
[
i
]);
}
return
ret
;
}
char
*
virNetworkAllocateBridge
(
virConnectPtr
conn
,
const
virNetworkObjListPtr
nets
)
{
int
id
=
0
;
char
*
newname
;
do
{
char
try
[
50
];
snprintf
(
try
,
sizeof
(
try
),
"virbr%d"
,
id
);
if
(
!
virNetworkBridgeInUse
(
nets
,
try
,
NULL
))
{
if
(
!
(
newname
=
strdup
(
try
)))
{
virReportOOMError
(
conn
);
return
NULL
;
}
return
newname
;
}
id
++
;
}
while
(
id
<
MAX_BRIDGE_ID
);
virNetworkReportError
(
conn
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"Bridge generation exceeded max id %d"
),
MAX_BRIDGE_ID
);
return
NULL
;
}
int
virNetworkSetBridgeName
(
virConnectPtr
conn
,
const
virNetworkObjListPtr
nets
,
virNetworkDefPtr
def
)
{
int
ret
=
-
1
;
if
(
def
->
bridge
)
{
if
(
virNetworkBridgeInUse
(
nets
,
def
->
bridge
,
def
->
name
))
{
networkReportError
(
conn
,
NULL
,
NULL
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"bridge name '%s' already in use."
),
def
->
bridge
);
goto
error
;
}
}
else
{
/* Allocate a bridge name */
if
(
!
(
def
->
bridge
=
virNetworkAllocateBridge
(
conn
,
nets
)))
goto
error
;
}
ret
=
0
;
error:
return
ret
;
}
void
virNetworkObjLock
(
virNetworkObjPtr
obj
)
void
virNetworkObjLock
(
virNetworkObjPtr
obj
)
{
{
...
...
src/network_conf.h
浏览文件 @
1f11e3bb
...
@@ -107,6 +107,10 @@ virNetworkIsActive(const virNetworkObjPtr net)
...
@@ -107,6 +107,10 @@ virNetworkIsActive(const virNetworkObjPtr net)
return
net
->
active
;
return
net
->
active
;
}
}
#define networkReportError(conn, dom, net, code, fmt...) \
virReportErrorHelper(conn, VIR_FROM_QEMU, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
virNetworkObjPtr
virNetworkFindByUUID
(
const
virNetworkObjListPtr
nets
,
virNetworkObjPtr
virNetworkFindByUUID
(
const
virNetworkObjListPtr
nets
,
const
unsigned
char
*
uuid
);
const
unsigned
char
*
uuid
);
...
@@ -165,6 +169,16 @@ char *virNetworkConfigFile(virConnectPtr conn,
...
@@ -165,6 +169,16 @@ char *virNetworkConfigFile(virConnectPtr conn,
const
char
*
dir
,
const
char
*
dir
,
const
char
*
name
);
const
char
*
name
);
int
virNetworkBridgeInUse
(
const
virNetworkObjListPtr
nets
,
const
char
*
bridge
,
const
char
*
skipname
);
char
*
virNetworkAllocateBridge
(
virConnectPtr
conn
,
const
virNetworkObjListPtr
nets
);
int
virNetworkSetBridgeName
(
virConnectPtr
conn
,
const
virNetworkObjListPtr
nets
,
virNetworkDefPtr
def
);
void
virNetworkObjLock
(
virNetworkObjPtr
obj
);
void
virNetworkObjLock
(
virNetworkObjPtr
obj
);
void
virNetworkObjUnlock
(
virNetworkObjPtr
obj
);
void
virNetworkObjUnlock
(
virNetworkObjPtr
obj
);
...
...
src/network_driver.c
浏览文件 @
1f11e3bb
...
@@ -91,11 +91,6 @@ static int networkShutdown(void);
...
@@ -91,11 +91,6 @@ static int networkShutdown(void);
#define networkLog(level, msg...) fprintf(stderr, msg)
#define networkLog(level, msg...) fprintf(stderr, msg)
#define networkReportError(conn, dom, net, code, fmt...) \
virReportErrorHelper(conn, VIR_FROM_QEMU, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
static
int
networkStartNetworkDaemon
(
virConnectPtr
conn
,
static
int
networkStartNetworkDaemon
(
virConnectPtr
conn
,
struct
network_driver
*
driver
,
struct
network_driver
*
driver
,
virNetworkObjPtr
network
);
virNetworkObjPtr
network
);
...
@@ -812,7 +807,7 @@ static int networkStartNetworkDaemon(virConnectPtr conn,
...
@@ -812,7 +807,7 @@ static int networkStartNetworkDaemon(virConnectPtr conn,
return
-
1
;
return
-
1
;
}
}
if
((
err
=
brAddBridge
(
driver
->
brctl
,
&
network
->
def
->
bridge
)))
{
if
((
err
=
brAddBridge
(
driver
->
brctl
,
network
->
def
->
bridge
)))
{
virReportSystemError
(
conn
,
err
,
virReportSystemError
(
conn
,
err
,
_
(
"cannot create bridge '%s'"
),
_
(
"cannot create bridge '%s'"
),
network
->
def
->
bridge
);
network
->
def
->
bridge
);
...
@@ -1113,6 +1108,9 @@ static virNetworkPtr networkCreate(virConnectPtr conn, const char *xml) {
...
@@ -1113,6 +1108,9 @@ static virNetworkPtr networkCreate(virConnectPtr conn, const char *xml) {
if
(
!
(
def
=
virNetworkDefParseString
(
conn
,
xml
)))
if
(
!
(
def
=
virNetworkDefParseString
(
conn
,
xml
)))
goto
cleanup
;
goto
cleanup
;
if
(
virNetworkSetBridgeName
(
conn
,
&
driver
->
networks
,
def
))
goto
cleanup
;
if
(
!
(
network
=
virNetworkAssignDef
(
conn
,
if
(
!
(
network
=
virNetworkAssignDef
(
conn
,
&
driver
->
networks
,
&
driver
->
networks
,
def
)))
def
)))
...
@@ -1147,6 +1145,9 @@ static virNetworkPtr networkDefine(virConnectPtr conn, const char *xml) {
...
@@ -1147,6 +1145,9 @@ static virNetworkPtr networkDefine(virConnectPtr conn, const char *xml) {
if
(
!
(
def
=
virNetworkDefParseString
(
conn
,
xml
)))
if
(
!
(
def
=
virNetworkDefParseString
(
conn
,
xml
)))
goto
cleanup
;
goto
cleanup
;
if
(
virNetworkSetBridgeName
(
conn
,
&
driver
->
networks
,
def
))
goto
cleanup
;
if
(
!
(
network
=
virNetworkAssignDef
(
conn
,
if
(
!
(
network
=
virNetworkAssignDef
(
conn
,
&
driver
->
networks
,
&
driver
->
networks
,
def
)))
def
)))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录