Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
b3d06987
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,发现更多精彩内容 >>
提交
b3d06987
编写于
4月 04, 2016
作者:
V
Vasiliy Tolstov
提交者:
Daniel P. Berrange
4月 07, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
virnetdev allow to set peer address
Signed-off-by:
N
Vasiliy Tolstov
<
v.tolstov@selfip.ru
>
上级
216650f1
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
41 addition
and
18 deletion
+41
-18
src/lxc/lxc_container.c
src/lxc/lxc_container.c
+1
-1
src/network/bridge_driver.c
src/network/bridge_driver.c
+1
-1
src/util/virnetdev.c
src/util/virnetdev.c
+38
-16
src/util/virnetdev.h
src/util/virnetdev.h
+1
-0
未找到文件。
src/lxc/lxc_container.c
浏览文件 @
b3d06987
...
@@ -520,7 +520,7 @@ static int lxcContainerRenameAndEnableInterfaces(virDomainDefPtr vmDef,
...
@@ -520,7 +520,7 @@ static int lxcContainerRenameAndEnableInterfaces(virDomainDefPtr vmDef,
VIR_DEBUG
(
"Adding IP address '%s/%u' to '%s'"
,
VIR_DEBUG
(
"Adding IP address '%s/%u' to '%s'"
,
ipStr
,
ip
->
prefix
,
newname
);
ipStr
,
ip
->
prefix
,
newname
);
if
(
virNetDevSetIPAddress
(
newname
,
&
ip
->
address
,
prefix
)
<
0
)
{
if
(
virNetDevSetIPAddress
(
newname
,
&
ip
->
address
,
NULL
,
prefix
)
<
0
)
{
virReportError
(
VIR_ERR_SYSTEM_ERROR
,
virReportError
(
VIR_ERR_SYSTEM_ERROR
,
_
(
"Failed to set IP address '%s' on %s"
),
_
(
"Failed to set IP address '%s' on %s"
),
ipStr
,
newname
);
ipStr
,
newname
);
...
...
src/network/bridge_driver.c
浏览文件 @
b3d06987
...
@@ -1971,7 +1971,7 @@ networkAddAddrToBridge(virNetworkObjPtr network,
...
@@ -1971,7 +1971,7 @@ networkAddAddrToBridge(virNetworkObjPtr network,
}
}
if
(
virNetDevSetIPAddress
(
network
->
def
->
bridge
,
if
(
virNetDevSetIPAddress
(
network
->
def
->
bridge
,
&
ipdef
->
address
,
prefix
)
<
0
)
&
ipdef
->
address
,
NULL
,
prefix
)
<
0
)
return
-
1
;
return
-
1
;
return
0
;
return
0
;
...
...
src/util/virnetdev.c
浏览文件 @
b3d06987
...
@@ -1039,21 +1039,28 @@ virNetDevCreateNetlinkAddressMessage(int messageType,
...
@@ -1039,21 +1039,28 @@ virNetDevCreateNetlinkAddressMessage(int messageType,
const
char
*
ifname
,
const
char
*
ifname
,
virSocketAddr
*
addr
,
virSocketAddr
*
addr
,
unsigned
int
prefix
,
unsigned
int
prefix
,
virSocketAddr
*
broadcast
)
virSocketAddr
*
broadcast
,
virSocketAddr
*
peer
)
{
{
struct
nl_msg
*
nlmsg
=
NULL
;
struct
nl_msg
*
nlmsg
=
NULL
;
struct
ifaddrmsg
ifa
;
struct
ifaddrmsg
ifa
;
unsigned
int
ifindex
;
unsigned
int
ifindex
;
void
*
addrData
=
NULL
;
void
*
addrData
=
NULL
;
void
*
peerData
=
NULL
;
void
*
broadcastData
=
NULL
;
void
*
broadcastData
=
NULL
;
size_t
addrDataLen
;
size_t
addrDataLen
;
if
(
virNetDevGetIPAddressBinary
(
addr
,
&
addrData
,
&
addrDataLen
)
<
0
)
if
(
virNetDevGetIPAddressBinary
(
addr
,
&
addrData
,
&
addrDataLen
)
<
0
)
return
NULL
;
return
NULL
;
if
(
broadcast
&&
virNetDevGetIPAddressBinary
(
broadcast
,
&
broadcastData
,
if
(
peer
&&
VIR_SOCKET_ADDR_VALID
(
peer
))
{
&
addrDataLen
)
<
0
)
if
(
virNetDevGetIPAddressBinary
(
peer
,
&
peerData
,
&
addrDataLen
)
<
0
)
return
NULL
;
return
NULL
;
}
else
if
(
broadcast
)
{
if
(
virNetDevGetIPAddressBinary
(
broadcast
,
&
broadcastData
,
&
addrDataLen
)
<
0
)
return
NULL
;
}
/* Get the interface index */
/* Get the interface index */
if
((
ifindex
=
if_nametoindex
(
ifname
))
==
0
)
if
((
ifindex
=
if_nametoindex
(
ifname
))
==
0
)
...
@@ -1078,12 +1085,15 @@ virNetDevCreateNetlinkAddressMessage(int messageType,
...
@@ -1078,12 +1085,15 @@ virNetDevCreateNetlinkAddressMessage(int messageType,
if
(
nla_put
(
nlmsg
,
IFA_LOCAL
,
addrDataLen
,
addrData
)
<
0
)
if
(
nla_put
(
nlmsg
,
IFA_LOCAL
,
addrDataLen
,
addrData
)
<
0
)
goto
buffer_too_small
;
goto
buffer_too_small
;
if
(
nla_put
(
nlmsg
,
IFA_ADDRESS
,
addrDataLen
,
addrData
)
<
0
)
if
(
peerData
)
{
goto
buffer_too_small
;
if
(
nla_put
(
nlmsg
,
IFA_ADDRESS
,
addrDataLen
,
peerData
)
<
0
)
goto
buffer_too_small
;
}
if
(
broadcastData
&&
if
(
broadcastData
)
{
nla_put
(
nlmsg
,
IFA_BROADCAST
,
addrDataLen
,
broadcastData
)
<
0
)
if
(
nla_put
(
nlmsg
,
IFA_BROADCAST
,
addrDataLen
,
broadcastData
)
<
0
)
goto
buffer_too_small
;
goto
buffer_too_small
;
}
return
nlmsg
;
return
nlmsg
;
...
@@ -1098,6 +1108,7 @@ virNetDevCreateNetlinkAddressMessage(int messageType,
...
@@ -1098,6 +1108,7 @@ virNetDevCreateNetlinkAddressMessage(int messageType,
* virNetDevSetIPAddress:
* virNetDevSetIPAddress:
* @ifname: the interface name
* @ifname: the interface name
* @addr: the IP address (IPv4 or IPv6)
* @addr: the IP address (IPv4 or IPv6)
* @peer: The IP address of peer (IPv4 or IPv6)
* @prefix: number of 1 bits in the netmask
* @prefix: number of 1 bits in the netmask
*
*
* Add an IP address to an interface. This function *does not* remove
* Add an IP address to an interface. This function *does not* remove
...
@@ -1108,6 +1119,7 @@ virNetDevCreateNetlinkAddressMessage(int messageType,
...
@@ -1108,6 +1119,7 @@ virNetDevCreateNetlinkAddressMessage(int messageType,
*/
*/
int
virNetDevSetIPAddress
(
const
char
*
ifname
,
int
virNetDevSetIPAddress
(
const
char
*
ifname
,
virSocketAddr
*
addr
,
virSocketAddr
*
addr
,
virSocketAddr
*
peer
,
unsigned
int
prefix
)
unsigned
int
prefix
)
{
{
virSocketAddr
*
broadcast
=
NULL
;
virSocketAddr
*
broadcast
=
NULL
;
...
@@ -1116,9 +1128,8 @@ int virNetDevSetIPAddress(const char *ifname,
...
@@ -1116,9 +1128,8 @@ int virNetDevSetIPAddress(const char *ifname,
struct
nlmsghdr
*
resp
=
NULL
;
struct
nlmsghdr
*
resp
=
NULL
;
unsigned
int
recvbuflen
;
unsigned
int
recvbuflen
;
/* The caller needs to provide a correct address */
/* The caller needs to provide a correct address */
if
(
VIR_SOCKET_ADDR_FAMILY
(
addr
)
==
AF_INET
)
{
if
(
VIR_SOCKET_ADDR_FAMILY
(
addr
)
==
AF_INET
&&
!
VIR_SOCKET_ADDR_VALID
(
peer
)
)
{
/* compute a broadcast address if this is IPv4 */
/* compute a broadcast address if this is IPv4 */
if
(
VIR_ALLOC
(
broadcast
)
<
0
)
if
(
VIR_ALLOC
(
broadcast
)
<
0
)
return
-
1
;
return
-
1
;
...
@@ -1129,7 +1140,7 @@ int virNetDevSetIPAddress(const char *ifname,
...
@@ -1129,7 +1140,7 @@ int virNetDevSetIPAddress(const char *ifname,
if
(
!
(
nlmsg
=
virNetDevCreateNetlinkAddressMessage
(
RTM_NEWADDR
,
ifname
,
if
(
!
(
nlmsg
=
virNetDevCreateNetlinkAddressMessage
(
RTM_NEWADDR
,
ifname
,
addr
,
prefix
,
addr
,
prefix
,
broadcast
)))
broadcast
,
peer
)))
goto
cleanup
;
goto
cleanup
;
if
(
virNetlinkCommand
(
nlmsg
,
&
resp
,
&
recvbuflen
,
0
,
0
,
if
(
virNetlinkCommand
(
nlmsg
,
&
resp
,
&
recvbuflen
,
0
,
0
,
...
@@ -1288,7 +1299,7 @@ int virNetDevClearIPAddress(const char *ifname,
...
@@ -1288,7 +1299,7 @@ int virNetDevClearIPAddress(const char *ifname,
if
(
!
(
nlmsg
=
virNetDevCreateNetlinkAddressMessage
(
RTM_DELADDR
,
ifname
,
if
(
!
(
nlmsg
=
virNetDevCreateNetlinkAddressMessage
(
RTM_DELADDR
,
ifname
,
addr
,
prefix
,
addr
,
prefix
,
NULL
)))
NULL
,
NULL
)))
goto
cleanup
;
goto
cleanup
;
if
(
virNetlinkCommand
(
nlmsg
,
&
resp
,
&
recvbuflen
,
0
,
0
,
if
(
virNetlinkCommand
(
nlmsg
,
&
resp
,
&
recvbuflen
,
0
,
0
,
...
@@ -1423,21 +1434,27 @@ virNetDevWaitDadFinish(virSocketAddrPtr *addrs, size_t count)
...
@@ -1423,21 +1434,27 @@ virNetDevWaitDadFinish(virSocketAddrPtr *addrs, size_t count)
int
virNetDevSetIPAddress
(
const
char
*
ifname
,
int
virNetDevSetIPAddress
(
const
char
*
ifname
,
virSocketAddr
*
addr
,
virSocketAddr
*
addr
,
virSocketAddr
*
peer
,
unsigned
int
prefix
)
unsigned
int
prefix
)
{
{
virCommandPtr
cmd
=
NULL
;
virCommandPtr
cmd
=
NULL
;
char
*
addrstr
=
NULL
,
*
bcaststr
=
NULL
;
char
*
addrstr
=
NULL
,
*
bcaststr
=
NULL
,
*
peerstr
=
NULL
;
virSocketAddr
broadcast
;
virSocketAddr
broadcast
;
int
ret
=
-
1
;
int
ret
=
-
1
;
if
(
!
(
addrstr
=
virSocketAddrFormat
(
addr
)))
if
(
!
(
addrstr
=
virSocketAddrFormat
(
addr
)))
goto
cleanup
;
goto
cleanup
;
if
(
VIR_SOCKET_ADDR_VALID
(
peer
)
&&
!
(
peerstr
=
virSocketAddrFormat
(
&
peer
)))
goto
cleanup
;
/* format up a broadcast address if this is IPv4 */
/* format up a broadcast address if this is IPv4 */
if
((
VIR_SOCKET_ADDR_IS_FAMILY
(
addr
,
AF_INET
))
&&
if
(
!
peerstr
&&
(
(
VIR_SOCKET_ADDR_IS_FAMILY
(
addr
,
AF_INET
))
&&
((
virSocketAddrBroadcastByPrefix
(
addr
,
prefix
,
&
broadcast
)
<
0
)
||
((
virSocketAddrBroadcastByPrefix
(
addr
,
prefix
,
&
broadcast
)
<
0
)
||
!
(
bcaststr
=
virSocketAddrFormat
(
&
broadcast
))))
{
!
(
bcaststr
=
virSocketAddrFormat
(
&
broadcast
))))
)
{
goto
cleanup
;
goto
cleanup
;
}
}
# ifdef IFCONFIG_PATH
# ifdef IFCONFIG_PATH
cmd
=
virCommandNew
(
IFCONFIG_PATH
);
cmd
=
virCommandNew
(
IFCONFIG_PATH
);
virCommandAddArg
(
cmd
,
ifname
);
virCommandAddArg
(
cmd
,
ifname
);
...
@@ -1446,6 +1463,8 @@ int virNetDevSetIPAddress(const char *ifname,
...
@@ -1446,6 +1463,8 @@ int virNetDevSetIPAddress(const char *ifname,
else
else
virCommandAddArg
(
cmd
,
"inet"
);
virCommandAddArg
(
cmd
,
"inet"
);
virCommandAddArgFormat
(
cmd
,
"%s/%u"
,
addrstr
,
prefix
);
virCommandAddArgFormat
(
cmd
,
"%s/%u"
,
addrstr
,
prefix
);
if
(
peerstr
)
virCommandAddArgList
(
cmd
,
"pointopoint"
,
peerstr
,
NULL
);
if
(
bcaststr
)
if
(
bcaststr
)
virCommandAddArgList
(
cmd
,
"broadcast"
,
bcaststr
,
NULL
);
virCommandAddArgList
(
cmd
,
"broadcast"
,
bcaststr
,
NULL
);
virCommandAddArg
(
cmd
,
"alias"
);
virCommandAddArg
(
cmd
,
"alias"
);
...
@@ -1453,6 +1472,8 @@ int virNetDevSetIPAddress(const char *ifname,
...
@@ -1453,6 +1472,8 @@ int virNetDevSetIPAddress(const char *ifname,
cmd
=
virCommandNew
(
IP_PATH
);
cmd
=
virCommandNew
(
IP_PATH
);
virCommandAddArgList
(
cmd
,
"addr"
,
"add"
,
NULL
);
virCommandAddArgList
(
cmd
,
"addr"
,
"add"
,
NULL
);
virCommandAddArgFormat
(
cmd
,
"%s/%u"
,
addrstr
,
prefix
);
virCommandAddArgFormat
(
cmd
,
"%s/%u"
,
addrstr
,
prefix
);
if
(
peerstr
)
virCommandAddArgList
(
cmd
,
"peer"
,
peerstr
,
NULL
);
if
(
bcaststr
)
if
(
bcaststr
)
virCommandAddArgList
(
cmd
,
"broadcast"
,
bcaststr
,
NULL
);
virCommandAddArgList
(
cmd
,
"broadcast"
,
bcaststr
,
NULL
);
virCommandAddArgList
(
cmd
,
"dev"
,
ifname
,
NULL
);
virCommandAddArgList
(
cmd
,
"dev"
,
ifname
,
NULL
);
...
@@ -1465,6 +1486,7 @@ int virNetDevSetIPAddress(const char *ifname,
...
@@ -1465,6 +1486,7 @@ int virNetDevSetIPAddress(const char *ifname,
cleanup:
cleanup:
VIR_FREE
(
addrstr
);
VIR_FREE
(
addrstr
);
VIR_FREE
(
bcaststr
);
VIR_FREE
(
bcaststr
);
VIR_FREE
(
peerstr
);
virCommandFree
(
cmd
);
virCommandFree
(
cmd
);
return
ret
;
return
ret
;
}
}
...
...
src/util/virnetdev.h
浏览文件 @
b3d06987
...
@@ -90,6 +90,7 @@ int virNetDevGetOnline(const char *ifname,
...
@@ -90,6 +90,7 @@ int virNetDevGetOnline(const char *ifname,
int
virNetDevSetIPAddress
(
const
char
*
ifname
,
int
virNetDevSetIPAddress
(
const
char
*
ifname
,
virSocketAddr
*
addr
,
virSocketAddr
*
addr
,
virSocketAddr
*
peer
,
unsigned
int
prefix
)
unsigned
int
prefix
)
ATTRIBUTE_NONNULL
(
1
)
ATTRIBUTE_NONNULL
(
2
)
ATTRIBUTE_RETURN_CHECK
;
ATTRIBUTE_NONNULL
(
1
)
ATTRIBUTE_NONNULL
(
2
)
ATTRIBUTE_RETURN_CHECK
;
int
virNetDevAddRoute
(
const
char
*
ifname
,
int
virNetDevAddRoute
(
const
char
*
ifname
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录