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
ff6da295
Unverified
Commit
ff6da295
authored
Jun 15, 2017
by
Christian Brauner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
network: implement network clearing
Signed-off-by:
Christian Brauner
<
christian.brauner@ubuntu.com
>
parent
40db5d2f
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
366 additions
and
24 deletions
+366
-24
confile.c
src/lxc/confile.c
+366
-24
No files found.
src/lxc/confile.c
View file @
ff6da295
...
@@ -183,39 +183,75 @@ static int clr_config_hooks(const char *, struct lxc_conf *, void *);
...
@@ -183,39 +183,75 @@ static int clr_config_hooks(const char *, struct lxc_conf *, void *);
static
int
set_config_network_type
(
const
char
*
,
const
char
*
,
static
int
set_config_network_type
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_type
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_flags
(
const
char
*
,
const
char
*
,
static
int
set_config_network_flags
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_flags
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_link
(
const
char
*
,
const
char
*
,
static
int
set_config_network_link
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_link
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_name
(
const
char
*
,
const
char
*
,
static
int
set_config_network_name
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_name
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_veth_pair
(
const
char
*
,
const
char
*
,
static
int
set_config_network_veth_pair
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_veth_pair
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_macvlan_mode
(
const
char
*
,
const
char
*
,
static
int
set_config_network_macvlan_mode
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_macvlan_mode
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_hwaddr
(
const
char
*
,
const
char
*
,
static
int
set_config_network_hwaddr
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_hwaddr
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_vlan_id
(
const
char
*
,
const
char
*
,
static
int
set_config_network_vlan_id
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_vlan_id
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_mtu
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
static
int
set_config_network_mtu
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
void
*
);
static
int
clr_config_network_mtu
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_ipv4
(
const
char
*
,
const
char
*
,
static
int
set_config_network_ipv4
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_ipv4
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_ipv4_gateway
(
const
char
*
,
const
char
*
,
static
int
set_config_network_ipv4_gateway
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_ipv4_gateway
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_script_up
(
const
char
*
,
const
char
*
,
static
int
set_config_network_script_up
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_script_up
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_script_down
(
const
char
*
,
const
char
*
,
static
int
set_config_network_script_down
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_script_down
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_ipv6
(
const
char
*
,
const
char
*
,
static
int
set_config_network_ipv6
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_ipv6
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_ipv6_gateway
(
const
char
*
,
const
char
*
,
static
int
set_config_network_ipv6_gateway
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_ipv6_gateway
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network_nic
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
static
int
set_config_network_nic
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
void
*
);
static
int
get_config_network_item
(
const
char
*
,
char
*
,
int
,
static
int
get_config_network_item
(
const
char
*
,
char
*
,
int
,
struct
lxc_conf
*
);
struct
lxc_conf
*
);
static
int
clr_config_network_
item
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
clr_config_network_
nic
(
const
char
*
,
struct
lxc_conf
*
,
void
*
);
static
int
set_config_network
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
static
int
set_config_network
(
const
char
*
,
const
char
*
,
struct
lxc_conf
*
,
void
*
);
void
*
);
...
@@ -363,22 +399,22 @@ static struct lxc_config_t config[] = {
...
@@ -363,22 +399,22 @@ static struct lxc_config_t config[] = {
{
"lxc.hook.clone"
,
set_config_hooks
,
get_config_hooks
,
clr_config_hooks
,
},
{
"lxc.hook.clone"
,
set_config_hooks
,
get_config_hooks
,
clr_config_hooks
,
},
{
"lxc.hook.destroy"
,
set_config_hooks
,
get_config_hooks
,
clr_config_hooks
,
},
{
"lxc.hook.destroy"
,
set_config_hooks
,
get_config_hooks
,
clr_config_hooks
,
},
{
"lxc.hook"
,
set_config_hooks
,
get_config_hooks
,
clr_config_hooks
,
},
{
"lxc.hook"
,
set_config_hooks
,
get_config_hooks
,
clr_config_hooks
,
},
{
"lxc.network.type"
,
set_config_network_type
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.type"
,
set_config_network_type
,
get_config_network_item
,
clr_config_network_
type
,
},
{
"lxc.network.flags"
,
set_config_network_flags
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.flags"
,
set_config_network_flags
,
get_config_network_item
,
clr_config_network_
flags
,
},
{
"lxc.network.link"
,
set_config_network_link
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.link"
,
set_config_network_link
,
get_config_network_item
,
clr_config_network_
link
,
},
{
"lxc.network.name"
,
set_config_network_name
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.name"
,
set_config_network_name
,
get_config_network_item
,
clr_config_network_
name
,
},
{
"lxc.network.macvlan.mode"
,
set_config_network_macvlan_mode
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.macvlan.mode"
,
set_config_network_macvlan_mode
,
get_config_network_item
,
clr_config_network_
macvlan_mode
,
},
{
"lxc.network.veth.pair"
,
set_config_network_veth_pair
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.veth.pair"
,
set_config_network_veth_pair
,
get_config_network_item
,
clr_config_network_
veth_pair
,
},
{
"lxc.network.script.up"
,
set_config_network_script_up
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.script.up"
,
set_config_network_script_up
,
get_config_network_item
,
clr_config_network_
script_up
,
},
{
"lxc.network.script.down"
,
set_config_network_script_down
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.script.down"
,
set_config_network_script_down
,
get_config_network_item
,
clr_config_network_
script_down
,
},
{
"lxc.network.hwaddr"
,
set_config_network_hwaddr
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.hwaddr"
,
set_config_network_hwaddr
,
get_config_network_item
,
clr_config_network_
hwaddr
,
},
{
"lxc.network.mtu"
,
set_config_network_mtu
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.mtu"
,
set_config_network_mtu
,
get_config_network_item
,
clr_config_network_
mtu
,
},
{
"lxc.network.vlan.id"
,
set_config_network_vlan_id
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network.vlan.id"
,
set_config_network_vlan_id
,
get_config_network_item
,
clr_config_network_
vlan_id
,
},
{
"lxc.network.ipv4.gateway"
,
set_config_network_ipv4_gateway
,
get_config_network_item
,
clr_config_network_i
tem
,
},
{
"lxc.network.ipv4.gateway"
,
set_config_network_ipv4_gateway
,
get_config_network_item
,
clr_config_network_i
pv4_gateway
,
},
{
"lxc.network.ipv4"
,
set_config_network_ipv4
,
get_config_network_item
,
clr_config_network_i
tem
,
},
{
"lxc.network.ipv4"
,
set_config_network_ipv4
,
get_config_network_item
,
clr_config_network_i
pv4
,
},
{
"lxc.network.ipv6.gateway"
,
set_config_network_ipv6_gateway
,
get_config_network_item
,
clr_config_network_i
tem
,
},
{
"lxc.network.ipv6.gateway"
,
set_config_network_ipv6_gateway
,
get_config_network_item
,
clr_config_network_i
pv6_gateway
,
},
{
"lxc.network.ipv6"
,
set_config_network_ipv6
,
get_config_network_item
,
clr_config_network_i
tem
,
},
{
"lxc.network.ipv6"
,
set_config_network_ipv6
,
get_config_network_item
,
clr_config_network_i
pv6
,
},
{
"lxc.network."
,
set_config_network_nic
,
get_config_network_item
,
clr_config_network_
item
,
},
{
"lxc.network."
,
set_config_network_nic
,
get_config_network_item
,
clr_config_network_
nic
,
},
{
"lxc.network"
,
set_config_network
,
get_config_network
,
clr_config_network
,
},
{
"lxc.network"
,
set_config_network
,
get_config_network
,
clr_config_network
,
},
{
"lxc.cap.drop"
,
set_config_cap_drop
,
get_config_cap_drop
,
clr_config_cap_drop
,
},
{
"lxc.cap.drop"
,
set_config_cap_drop
,
get_config_cap_drop
,
clr_config_cap_drop
,
},
{
"lxc.cap.keep"
,
set_config_cap_keep
,
get_config_cap_keep
,
clr_config_cap_keep
,
},
{
"lxc.cap.keep"
,
set_config_cap_keep
,
get_config_cap_keep
,
clr_config_cap_keep
,
},
...
@@ -1049,7 +1085,7 @@ static int set_config_network_ipv4(const char *key, const char *value,
...
@@ -1049,7 +1085,7 @@ static int set_config_network_ipv4(const char *key, const char *value,
char
*
addr
=
NULL
,
*
bcast
=
NULL
,
*
prefix
=
NULL
;
char
*
addr
=
NULL
,
*
bcast
=
NULL
,
*
prefix
=
NULL
;
if
(
lxc_config_value_empty
(
value
))
if
(
lxc_config_value_empty
(
value
))
return
clr_config_network_i
tem
(
key
,
lxc_conf
,
NULL
);
return
clr_config_network_i
pv4
(
key
,
lxc_conf
,
NULL
);
/* lxc.network.* without an index */
/* lxc.network.* without an index */
if
(
!
data
)
if
(
!
data
)
...
@@ -4056,12 +4092,6 @@ static inline int clr_config_hooks(const char *key, struct lxc_conf *c,
...
@@ -4056,12 +4092,6 @@ static inline int clr_config_hooks(const char *key, struct lxc_conf *c,
return
lxc_clear_hooks
(
c
,
key
);
return
lxc_clear_hooks
(
c
,
key
);
}
}
static
inline
int
clr_config_network_item
(
const
char
*
key
,
struct
lxc_conf
*
c
,
void
*
data
)
{
return
lxc_clear_nic
(
c
,
key
+
12
);
}
static
inline
int
clr_config_network
(
const
char
*
key
,
struct
lxc_conf
*
c
,
static
inline
int
clr_config_network
(
const
char
*
key
,
struct
lxc_conf
*
c
,
void
*
data
)
void
*
data
)
{
{
...
@@ -4316,3 +4346,315 @@ static int set_config_network_nic(const char *key, const char *value,
...
@@ -4316,3 +4346,315 @@ static int set_config_network_nic(const char *key, const char *value,
return
config
->
set
(
key
,
value
,
lxc_conf
,
netdev
);
return
config
->
set
(
key
,
value
,
lxc_conf
,
netdev
);
}
}
/*
* Config entry is something like "lxc.network.0.ipv4" the key 'lxc.network.'
* was found. So we make sure next comes an integer, find the right callback
* (by rewriting the key), and call it.
*/
static
int
clr_config_network_nic
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_config_t
*
config
;
struct
lxc_netdev
*
netdev
;
ssize_t
idx
=
-
1
;
config
=
get_network_config_ops
(
key
,
lxc_conf
,
&
idx
);
if
(
!
config
||
idx
<
0
)
return
-
1
;
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
(
unsigned
int
)
idx
);
if
(
!
netdev
)
return
-
1
;
return
config
->
clr
(
key
,
lxc_conf
,
netdev
);
}
static
int
clr_config_network_type
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
netdev
->
type
=
-
1
;
return
0
;
}
static
int
clr_config_network_name
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
free
(
netdev
->
name
);
netdev
->
name
=
NULL
;
return
0
;
}
static
int
clr_config_network_flags
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
netdev
->
flags
=
0
;
return
0
;
}
static
int
clr_config_network_link
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
free
(
netdev
->
link
);
netdev
->
link
=
NULL
;
return
0
;
}
static
int
clr_config_network_macvlan_mode
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
netdev
->
priv
.
macvlan_attr
.
mode
=
-
1
;
return
0
;
}
static
int
clr_config_network_veth_pair
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
free
(
netdev
->
priv
.
veth_attr
.
pair
);
netdev
->
priv
.
veth_attr
.
pair
=
NULL
;
return
0
;
}
static
int
clr_config_network_script_up
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
free
(
netdev
->
upscript
);
netdev
->
upscript
=
NULL
;
return
0
;
}
static
int
clr_config_network_script_down
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
free
(
netdev
->
downscript
);
netdev
->
downscript
=
NULL
;
return
0
;
}
static
int
clr_config_network_hwaddr
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
free
(
netdev
->
hwaddr
);
netdev
->
hwaddr
=
NULL
;
return
0
;
}
static
int
clr_config_network_mtu
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
free
(
netdev
->
mtu
);
netdev
->
mtu
=
NULL
;
return
0
;
}
static
int
clr_config_network_vlan_id
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
netdev
->
priv
.
vlan_attr
.
vid
=
0
;
return
0
;
}
static
int
clr_config_network_ipv4_gateway
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
free
(
netdev
->
ipv4_gateway
);
netdev
->
ipv4_gateway
=
NULL
;
return
0
;
}
static
int
clr_config_network_ipv4
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
struct
lxc_list
*
cur
,
*
next
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
lxc_list_for_each_safe
(
cur
,
&
netdev
->
ipv4
,
next
)
{
lxc_list_del
(
cur
);
free
(
cur
->
elem
);
free
(
cur
);
}
return
0
;
}
static
int
clr_config_network_ipv6_gateway
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
if
(
!
netdev
)
return
-
1
;
free
(
netdev
->
ipv6_gateway
);
netdev
->
ipv6_gateway
=
NULL
;
return
0
;
}
static
int
clr_config_network_ipv6
(
const
char
*
key
,
struct
lxc_conf
*
lxc_conf
,
void
*
data
)
{
struct
lxc_netdev
*
netdev
;
struct
lxc_list
*
cur
,
*
next
;
/* lxc.network.* without an index */
if
(
!
data
)
netdev
=
lxc_get_netdev_by_idx
(
lxc_conf
,
0
);
else
netdev
=
data
;
lxc_list_for_each_safe
(
cur
,
&
netdev
->
ipv6
,
next
)
{
lxc_list_del
(
cur
);
free
(
cur
->
elem
);
free
(
cur
);
}
return
0
;
}
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