Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
b73d4957
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看板
提交
b73d4957
编写于
8月 20, 2008
作者:
D
Daniel Veillard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
* src/network_conf.c src/network_conf.h src/qemu_driver.c: allow to
add static host definition for dnsmasq Daniel
上级
1b4bb7d4
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
128 addition
and
25 deletion
+128
-25
ChangeLog
ChangeLog
+5
-0
src/network_conf.c
src/network_conf.c
+92
-25
src/network_conf.h
src/network_conf.h
+11
-0
src/qemu_driver.c
src/qemu_driver.c
+20
-0
未找到文件。
ChangeLog
浏览文件 @
b73d4957
Wed Aug 20 14:49:29 CEST 2008 Daniel Veillard <veillard@redhat.com>
* src/network_conf.c src/network_conf.h src/qemu_driver.c: allow to
add static host definition for dnsmasq
Wed Aug 20 10:16:54 BST 2008 Daniel P. Berrange <berrange@redhat.com>
* src/util.c, src/util.h: Allow flags to be passed to specify
...
...
src/network_conf.c
浏览文件 @
b73d4957
...
...
@@ -40,6 +40,7 @@
#include "uuid.h"
#include "util.h"
#include "buf.h"
#include "c-ctype.h"
VIR_ENUM_DECL
(
virNetworkForward
)
...
...
@@ -115,6 +116,13 @@ void virNetworkDefFree(virNetworkDefPtr def)
}
VIR_FREE
(
def
->
ranges
);
for
(
i
=
0
;
i
<
def
->
nhosts
&&
def
->
hosts
;
i
++
)
{
VIR_FREE
(
def
->
hosts
[
i
].
mac
);
VIR_FREE
(
def
->
hosts
[
i
].
ip
);
VIR_FREE
(
def
->
hosts
[
i
].
name
);
}
VIR_FREE
(
def
->
hosts
);
VIR_FREE
(
def
);
}
...
...
@@ -197,33 +205,82 @@ virNetworkDHCPRangeDefParseXML(virConnectPtr conn,
cur
=
node
->
children
;
while
(
cur
!=
NULL
)
{
xmlChar
*
start
,
*
end
;
if
(
cur
->
type
!=
XML_ELEMENT_NODE
||
!
xmlStrEqual
(
cur
->
name
,
BAD_CAST
"range"
))
{
cur
=
cur
->
next
;
continue
;
}
if
(
cur
->
type
==
XML_ELEMENT_NODE
&&
xmlStrEqual
(
cur
->
name
,
BAD_CAST
"range"
))
{
xmlChar
*
start
,
*
end
;
if
(
!
(
start
=
xmlGetProp
(
cur
,
BAD_CAST
"start"
)))
{
cur
=
cur
->
next
;
continue
;
}
if
(
!
(
end
=
xmlGetProp
(
cur
,
BAD_CAST
"end"
)))
{
cur
=
cur
->
next
;
xmlFree
(
start
);
continue
;
}
if
(
!
(
start
=
xmlGetProp
(
cur
,
BAD_CAST
"start"
)))
{
cur
=
cur
->
next
;
continue
;
}
if
(
!
(
end
=
xmlGetProp
(
cur
,
BAD_CAST
"end"
)))
{
cur
=
cur
->
next
;
xmlFree
(
start
);
continue
;
}
if
(
VIR_REALLOC_N
(
def
->
ranges
,
def
->
nranges
+
1
)
<
0
)
{
xmlFree
(
start
);
xmlFree
(
end
);
virNetworkReportError
(
conn
,
VIR_ERR_NO_MEMORY
,
NULL
);
return
-
1
;
if
(
VIR_REALLOC_N
(
def
->
ranges
,
def
->
nranges
+
1
)
<
0
)
{
xmlFree
(
start
);
xmlFree
(
end
);
virNetworkReportError
(
conn
,
VIR_ERR_NO_MEMORY
,
NULL
);
return
-
1
;
}
def
->
ranges
[
def
->
nranges
].
start
=
(
char
*
)
start
;
def
->
ranges
[
def
->
nranges
].
end
=
(
char
*
)
end
;
def
->
nranges
++
;
}
else
if
(
cur
->
type
==
XML_ELEMENT_NODE
&&
xmlStrEqual
(
cur
->
name
,
BAD_CAST
"host"
))
{
xmlChar
*
mac
,
*
name
,
*
ip
;
unsigned
char
addr
[
6
];
struct
in_addr
inaddress
;
mac
=
xmlGetProp
(
cur
,
BAD_CAST
"mac"
);
if
((
mac
!=
NULL
)
&&
(
virParseMacAddr
((
const
char
*
)
mac
,
&
addr
[
0
])
!=
0
))
{
virNetworkReportError
(
conn
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"cannot parse MAC address '%s'"
),
mac
);
VIR_FREE
(
mac
);
}
name
=
xmlGetProp
(
cur
,
BAD_CAST
"name"
);
if
((
name
!=
NULL
)
&&
(
!
c_isalpha
(
name
[
0
])))
{
virNetworkReportError
(
conn
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"cannot use name address '%s'"
),
name
);
VIR_FREE
(
name
);
}
/*
* You need at least one MAC address or one host name
*/
if
((
mac
==
NULL
)
&&
(
name
==
NULL
))
{
VIR_FREE
(
mac
);
VIR_FREE
(
name
);
cur
=
cur
->
next
;
continue
;
}
ip
=
xmlGetProp
(
cur
,
BAD_CAST
"ip"
);
if
(
inet_pton
(
AF_INET
,
(
const
char
*
)
ip
,
&
inaddress
)
<=
0
)
{
virNetworkReportError
(
conn
,
VIR_ERR_INTERNAL_ERROR
,
_
(
"cannot parse IP address '%s'"
),
ip
);
VIR_FREE
(
ip
);
VIR_FREE
(
mac
);
VIR_FREE
(
name
);
cur
=
cur
->
next
;
continue
;
}
if
(
VIR_REALLOC_N
(
def
->
hosts
,
def
->
nhosts
+
1
)
<
0
)
{
VIR_FREE
(
ip
);
VIR_FREE
(
mac
);
VIR_FREE
(
name
);
virNetworkReportError
(
conn
,
VIR_ERR_NO_MEMORY
,
NULL
);
return
-
1
;
}
def
->
hosts
[
def
->
nhosts
].
mac
=
(
char
*
)
mac
;
def
->
hosts
[
def
->
nhosts
].
name
=
(
char
*
)
name
;
def
->
hosts
[
def
->
nhosts
].
ip
=
(
char
*
)
ip
;
def
->
nhosts
++
;
}
def
->
ranges
[
def
->
nranges
].
start
=
(
char
*
)
start
;
def
->
ranges
[
def
->
nranges
].
end
=
(
char
*
)
end
;
def
->
nranges
++
;
cur
=
cur
->
next
;
}
...
...
@@ -524,12 +581,22 @@ char *virNetworkDefFormat(virConnectPtr conn,
virBufferAddLit
(
&
buf
,
">
\n
"
);
if
(
def
->
nranges
)
{
if
(
(
def
->
nranges
||
def
->
nhosts
)
)
{
int
i
;
virBufferAddLit
(
&
buf
,
" <dhcp>
\n
"
);
for
(
i
=
0
;
i
<
def
->
nranges
;
i
++
)
virBufferVSprintf
(
&
buf
,
" <range start='%s' end='%s' />
\n
"
,
def
->
ranges
[
i
].
start
,
def
->
ranges
[
i
].
end
);
for
(
i
=
0
;
i
<
def
->
nhosts
;
i
++
)
{
virBufferAddLit
(
&
buf
,
" <host "
);
if
(
def
->
hosts
[
i
].
mac
)
virBufferVSprintf
(
&
buf
,
"mac='%s' "
,
def
->
hosts
[
i
].
mac
);
if
(
def
->
hosts
[
i
].
name
)
virBufferVSprintf
(
&
buf
,
"name='%s' "
,
def
->
hosts
[
i
].
name
);
if
(
def
->
hosts
[
i
].
ip
)
virBufferVSprintf
(
&
buf
,
"ip='%s' "
,
def
->
hosts
[
i
].
ip
);
virBufferAddLit
(
&
buf
,
"/>
\n
"
);
}
virBufferAddLit
(
&
buf
,
" </dhcp>
\n
"
);
}
...
...
src/network_conf.h
浏览文件 @
b73d4957
...
...
@@ -42,6 +42,14 @@ struct _virNetworkDHCPRangeDef {
char
*
end
;
};
typedef
struct
_virNetworkDHCPHostDef
virNetworkDHCPHostDef
;
typedef
virNetworkDHCPHostDef
*
virNetworkDHCPHostDefPtr
;
struct
_virNetworkDHCPHostDef
{
char
*
mac
;
char
*
name
;
char
*
ip
;
};
typedef
struct
_virNetworkDef
virNetworkDef
;
typedef
virNetworkDef
*
virNetworkDefPtr
;
struct
_virNetworkDef
{
...
...
@@ -61,6 +69,9 @@ struct _virNetworkDef {
unsigned
int
nranges
;
/* Zero or more dhcp ranges */
virNetworkDHCPRangeDefPtr
ranges
;
unsigned
int
nhosts
;
/* Zero or more dhcp hosts */
virNetworkDHCPHostDefPtr
hosts
;
};
typedef
struct
_virNetworkObj
virNetworkObj
;
...
...
src/qemu_driver.c
浏览文件 @
b73d4957
...
...
@@ -1107,6 +1107,8 @@ qemudBuildDnsmasqArgv(virConnectPtr conn,
2
+
/* --listen-address 10.0.0.1 */
1
+
/* --dhcp-leasefile=path */
(
2
*
network
->
def
->
nranges
)
+
/* --dhcp-range 10.0.0.2,10.0.0.254 */
/* --dhcp-host 01:23:45:67:89:0a,hostname,10.0.0.3 */
(
2
*
network
->
def
->
nhosts
)
+
1
;
/* NULL */
if
(
VIR_ALLOC_N
(
*
argv
,
len
)
<
0
)
...
...
@@ -1168,6 +1170,24 @@ qemudBuildDnsmasqArgv(virConnectPtr conn,
APPEND_ARG
(
*
argv
,
i
++
,
buf
);
}
for
(
r
=
0
;
r
<
network
->
def
->
nhosts
;
r
++
)
{
virNetworkDHCPHostDefPtr
host
=
&
(
network
->
def
->
hosts
[
r
]);
if
((
host
->
mac
)
&&
(
host
->
name
))
{
snprintf
(
buf
,
sizeof
(
buf
),
"%s,%s,%s"
,
host
->
mac
,
host
->
name
,
host
->
ip
);
}
else
if
(
host
->
mac
)
{
snprintf
(
buf
,
sizeof
(
buf
),
"%s,%s"
,
host
->
mac
,
host
->
ip
);
}
else
if
(
host
->
name
)
{
snprintf
(
buf
,
sizeof
(
buf
),
"%s,%s"
,
host
->
name
,
host
->
ip
);
}
else
continue
;
APPEND_ARG
(
*
argv
,
i
++
,
"--dhcp-host"
);
APPEND_ARG
(
*
argv
,
i
++
,
buf
);
}
#undef APPEND_ARG
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录