Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
lxc
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
lxc
Commits
77dcf03a
Commit
77dcf03a
authored
Oct 29, 2013
by
Guilhem Lettron
Committed by
Stéphane Graber
Nov 26, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add gateway as direct route for interface
Signed-off-by:
Guilhem Lettron
<
guilhem.lettron@gmail.com
>
Acked-by:
Stéphane Graber
<
stgraber@ubuntu.com
>
parent
7ee37fac
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
78 additions
and
0 deletions
+78
-0
conf.c
src/lxc/conf.c
+12
-0
network.c
src/lxc/network.c
+60
-0
network.h
src/lxc/network.h
+6
-0
No files found.
src/lxc/conf.c
View file @
77dcf03a
...
@@ -2504,6 +2504,12 @@ static int setup_netdev(struct lxc_netdev *netdev)
...
@@ -2504,6 +2504,12 @@ static int setup_netdev(struct lxc_netdev *netdev)
return
-
1
;
return
-
1
;
}
}
err
=
lxc_ipv4_dest_add
(
netdev
->
ifindex
,
netdev
->
ipv4_gateway
);
if
(
err
)
{
ERROR
(
"failed to add ipv4 dest for '%s': %s"
,
ifname
,
strerror
(
-
err
));
}
err
=
lxc_ipv4_gateway_add
(
netdev
->
ifindex
,
netdev
->
ipv4_gateway
);
err
=
lxc_ipv4_gateway_add
(
netdev
->
ifindex
,
netdev
->
ipv4_gateway
);
if
(
err
)
{
if
(
err
)
{
ERROR
(
"failed to setup ipv4 gateway for '%s': %s"
,
ERROR
(
"failed to setup ipv4 gateway for '%s': %s"
,
...
@@ -2529,6 +2535,12 @@ static int setup_netdev(struct lxc_netdev *netdev)
...
@@ -2529,6 +2535,12 @@ static int setup_netdev(struct lxc_netdev *netdev)
return
-
1
;
return
-
1
;
}
}
err
=
lxc_ipv6_dest_add
(
netdev
->
ifindex
,
netdev
->
ipv6_gateway
);
if
(
err
)
{
ERROR
(
"failed to add ipv6 dest for '%s': %s"
,
ifname
,
strerror
(
-
err
));
}
err
=
lxc_ipv6_gateway_add
(
netdev
->
ifindex
,
netdev
->
ipv6_gateway
);
err
=
lxc_ipv6_gateway_add
(
netdev
->
ifindex
,
netdev
->
ipv6_gateway
);
if
(
err
)
{
if
(
err
)
{
ERROR
(
"failed to setup ipv6 gateway for '%s': %s"
,
ERROR
(
"failed to setup ipv6 gateway for '%s': %s"
,
...
...
src/lxc/network.c
View file @
77dcf03a
...
@@ -998,6 +998,66 @@ int lxc_ipv6_gateway_add(int ifindex, struct in6_addr *gw)
...
@@ -998,6 +998,66 @@ int lxc_ipv6_gateway_add(int ifindex, struct in6_addr *gw)
return
ip_gateway_add
(
AF_INET6
,
ifindex
,
gw
);
return
ip_gateway_add
(
AF_INET6
,
ifindex
,
gw
);
}
}
static
int
ip_route_dest_add
(
int
family
,
int
ifindex
,
void
*
dest
)
{
struct
nl_handler
nlh
;
struct
nlmsg
*
nlmsg
=
NULL
,
*
answer
=
NULL
;
struct
rt_req
*
rt_req
;
int
addrlen
;
int
err
;
addrlen
=
family
==
AF_INET
?
sizeof
(
struct
in_addr
)
:
sizeof
(
struct
in6_addr
);
err
=
netlink_open
(
&
nlh
,
NETLINK_ROUTE
);
if
(
err
)
return
err
;
err
=
-
ENOMEM
;
nlmsg
=
nlmsg_alloc
(
NLMSG_GOOD_SIZE
);
if
(
!
nlmsg
)
goto
out
;
answer
=
nlmsg_alloc
(
NLMSG_GOOD_SIZE
);
if
(
!
answer
)
goto
out
;
rt_req
=
(
struct
rt_req
*
)
nlmsg
;
rt_req
->
nlmsg
.
nlmsghdr
.
nlmsg_len
=
NLMSG_LENGTH
(
sizeof
(
struct
rtmsg
));
rt_req
->
nlmsg
.
nlmsghdr
.
nlmsg_flags
=
NLM_F_ACK
|
NLM_F_REQUEST
|
NLM_F_CREATE
|
NLM_F_EXCL
;
rt_req
->
nlmsg
.
nlmsghdr
.
nlmsg_type
=
RTM_NEWROUTE
;
rt_req
->
rt
.
rtm_family
=
family
;
rt_req
->
rt
.
rtm_table
=
RT_TABLE_MAIN
;
rt_req
->
rt
.
rtm_scope
=
RT_SCOPE_LINK
;
rt_req
->
rt
.
rtm_protocol
=
RTPROT_BOOT
;
rt_req
->
rt
.
rtm_type
=
RTN_UNICAST
;
rt_req
->
rt
.
rtm_dst_len
=
addrlen
*
8
;
err
=
-
EINVAL
;
if
(
nla_put_buffer
(
nlmsg
,
RTA_DST
,
dest
,
addrlen
))
goto
out
;
if
(
nla_put_u32
(
nlmsg
,
RTA_OIF
,
ifindex
))
goto
out
;
err
=
netlink_transaction
(
&
nlh
,
nlmsg
,
answer
);
out:
netlink_close
(
&
nlh
);
nlmsg_free
(
answer
);
nlmsg_free
(
nlmsg
);
return
err
;
}
int
lxc_ipv4_dest_add
(
int
ifindex
,
struct
in_addr
*
dest
)
{
return
ip_route_dest_add
(
AF_INET
,
ifindex
,
dest
);
}
int
lxc_ipv6_dest_add
(
int
ifindex
,
struct
in6_addr
*
dest
)
{
return
ip_route_dest_add
(
AF_INET6
,
ifindex
,
dest
);
}
/*
/*
* There is a lxc_bridge_attach, but no need of a bridge detach
* There is a lxc_bridge_attach, but no need of a bridge detach
* as automatically done by kernel when a netdev is deleted.
* as automatically done by kernel when a netdev is deleted.
...
...
src/lxc/network.h
View file @
77dcf03a
...
@@ -93,6 +93,12 @@ extern int lxc_ipv4_addr_get(int ifindex, struct in_addr **res);
...
@@ -93,6 +93,12 @@ extern int lxc_ipv4_addr_get(int ifindex, struct in_addr **res);
extern
int
lxc_ipv6_addr_get
(
int
ifindex
,
struct
in6_addr
**
res
);
extern
int
lxc_ipv6_addr_get
(
int
ifindex
,
struct
in6_addr
**
res
);
/*
/*
* Set a destination route to an interface
*/
extern
int
lxc_ipv4_dest_add
(
int
ifindex
,
struct
in_addr
*
dest
);
extern
int
lxc_ipv6_dest_add
(
int
ifindex
,
struct
in6_addr
*
dest
);
/*
* Set default route.
* Set default route.
*/
*/
extern
int
lxc_ipv4_gateway_add
(
int
ifindex
,
struct
in_addr
*
gw
);
extern
int
lxc_ipv4_gateway_add
(
int
ifindex
,
struct
in_addr
*
gw
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment