Skip to content

Commit 7219ed3

Browse files
committed
remove dependents; use a unified script to set up to actually implement #21
1 parent caf7552 commit 7219ed3

File tree

5 files changed

+64
-65
lines changed

5 files changed

+64
-65
lines changed

scripts/netnsinit

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,29 @@ display_usage() {
88
echo "Note: you may need root privileges for this."
99
}
1010

11+
autoconfigure_bridge_up_outside() {
12+
autoconfigure_tunnel_up_outside
13+
14+
ip link set ${DEVNAME_OUTSIDE} master ${BRIDGE}
15+
}
16+
17+
autoconfigure_bridge_down_outside() {
18+
autoconfigure_tunnel_down_outside
19+
}
20+
1121
autoconfigure_tunnel_up_outside() {
22+
! ip link delete ${DEVNAME_OUTSIDE}
23+
! ip link delete ${DEVNAME_INSIDE}
24+
ip link add ${DEVNAME_OUTSIDE} type veth peer name ${DEVNAME_INSIDE}
25+
! tc qdisc del dev ${DEVNAME_INSIDE} root
26+
ip link set ${DEVNAME_OUTSIDE} up
27+
ip link set ${DEVNAME_INSIDE} netns %I
28+
# let this fail silently if IPADDR_OUTSIDE is undefined
29+
! ip address add ${IPADDR_OUTSIDE} dev ${DEVNAME_OUTSIDE}
30+
ip -n %I link set ${DEVNAME_INSIDE} up
31+
1232
if [ ! -z "$MACADDR" ]; then
13-
/bin/ip link set ${DEVNAME_INSIDE} address ${MACADDR}
33+
ip link set ${DEVNAME_INSIDE} address ${MACADDR}
1434
fi
1535
if [ "${DHCPV4}" == "1" ]; then
1636
! mkdir -p /var/run/netns
@@ -27,16 +47,25 @@ autoconfigure_tunnel_up_outside() {
2747
return 0 # additional precation against "set -e" in case of future mods of this function
2848
}
2949

50+
autoconfigure_tunnel_down_outside() {
51+
# do not run in ExecStartPost to prevent forked dhclient from being killed
52+
! kill -15 `cat /var/run/netns/dhclient-%i.pid`
53+
! rm /var/run/netns/dhclient-%i.pid
54+
ip link delete ${DEVNAME_OUTSIDE}
55+
}
56+
3057
autoconfigure_nat_up_inside() {
3158
# add default route if gateway undefined
3259
if [ -z "${GATEWAY}" -a -n "${IPADDR_OUTSIDE}" ]; then
33-
/bin/ip route add default via ${IPADDR_OUTSIDE%%/*}
60+
ip route add default via ${IPADDR_OUTSIDE%%/*}
3461
fi
3562

3663
return 0 # additional precation against "set -e" in case of future mods of this function
3764
}
3865

3966
autoconfigure_nat_up_outside() {
67+
autoconfigure_tunnel_up_outside
68+
4069
# allow forwarding to make all these things work
4170
sysctl net.ipv4.ip_forward=1
4271
sysctl net.ipv6.conf.all.forwarding=1
@@ -62,31 +91,47 @@ autoconfigure_nat_down_outside() {
6291
iptables -D FORWARD -i ${DEVNAME_OUTSIDE} -j ACCEPT
6392
iptables -D FORWARD -o ${DEVNAME_OUTSIDE} -j ACCEPT
6493
iptables -D INPUT -i ${DEVNAME_OUTSIDE} -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
94+
95+
autoconfigure_tunnel_down_outside
96+
}
97+
98+
autoconfigure_mvbr_up_outside() {
99+
DEVNAME_INSIDE=mv0
100+
DEVNAME_INSIDE_TMP_SUFFIX="-${NSNAME}-tmp"
101+
102+
! ip -n ${NSNAME} link delete ${DEVNAME_INSIDE}
103+
ip link add ${DEVNAME_INSIDE}${DEVNAME_INSIDE_TMP_SUFFIX} netns ${NSNAME} link ${MACVLAN_BRIDGE} type macvlan mode bridge
104+
ip -n ${NSNAME} link set dev ${DEVNAME_INSIDE}${DEVNAME_INSIDE_TMP_SUFFIX} name ${DEVNAME_INSIDE}
105+
! tc -n ${NSNAME} qdisc del dev ${DEVNAME_INSIDE} root
106+
ip -n ${NSNAME} link set ${DEVNAME_INSIDE} up
107+
108+
autoconfigure_tunnel_up_outside
109+
}
110+
111+
autoconfigure_mvbr_down_outside() {
112+
autoconfigure_tunnel_down_outside
113+
114+
ip -n %I link delete ${DEVNAME_INSIDE}
65115
}
66116

67117
autoconfigure() {
68-
local NSTYPE=$1
69-
local NSNAME=$2
70-
local UPDOWN=$3
71-
local INOUT=$4
118+
NSTYPE=$1
119+
NSNAME=$2
120+
UPDOWN=$3
121+
INOUT=$4
72122

73123
echo "Starting autoconfigure for ${NSTYPE} ${NSNAME}"
74124

75-
if [ "$NSTYPE" == "mvbr" ]; then
76-
DEVNAME_INSIDE=mv0
77-
else
78-
DEVNAME_INSIDE=vn-${NSNAME}1
79-
DEVNAME_OUTSIDE=vn-${NSNAME}0
80-
fi
125+
DEVNAME_INSIDE=vn-${NSNAME}1
126+
DEVNAME_OUTSIDE=vn-${NSNAME}0
81127

82128
source /etc/default/netns
83129
! source "/etc/default/netns-${NSTYPE}"
84130
! source "/etc/default/netns-${NSNAME}" # for compatibility, see https://github.com/Jamesits/systemd-named-netns/pull/21
85131
! source "/etc/default/netns-${NSTYPE}-${NSNAME}"
86132

87-
[[ $NSTYPE = "mvbr" ]] && SETUPTYPE="tunnel" || SETUPTYPE=$NSTYPE
88-
if type -t autoconfigure_${SETUPTYPE}_${INOUT}_${UPDOWN} >/dev/null ; then
89-
autoconfigure_${SETUPTYPE}_${INOUT}_${UPDOWN} "$@"
133+
if type -t autoconfigure_${NSTYPE}_${INOUT}_${UPDOWN} >/dev/null ; then
134+
autoconfigure_${NSTYPE}_${INOUT}_${UPDOWN} "$@"
90135
echo "Autoconfiguration finished."
91136
else
92137
echo "No configuration required."

services/[email protected]

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
Description=Bridging service for netns %I
33
Documentation=https://github.com/Jamesits/systemd-named-netns
44

5-
BindsTo=netns-tunnel@%i.service
6-
After=netns-tunnel@%i.service
5+
BindsTo=netns@%i.service
6+
After=netns@%i.service
77
Before=network.target network-online.target
88
Conflicts=netns-nat@%i.service netns-mvbr@%i.service
99

@@ -14,12 +14,6 @@ WantedBy=multi-user.target
1414
[Service]
1515
Type=oneshot
1616
RemainAfterExit=yes
17-
Environment=DEVNAME_OUTSIDE=vn-%I0
18-
Environment=DEVNAME_INSIDE=vn-%I1
19-
EnvironmentFile=/etc/default/netns
20-
EnvironmentFile=-/etc/default/netns-%I
21-
22-
ExecStart=/usr/bin/env ip link set ${DEVNAME_OUTSIDE} master ${BRIDGE}
2317

2418
ExecStart=/usr/bin/env netnsinit bridge %I up outside
2519
ExecStart=/usr/bin/env ip netns exec %I /usr/bin/env netnsinit bridge %I up inside

services/[email protected]

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,9 @@ WantedBy=multi-user.target
1414
[Service]
1515
Type=oneshot
1616
RemainAfterExit=yes
17-
Environment=DEVNAME_INSIDE=mv0
18-
Environment=DEVNAME_INSIDE_TMP_SUFFIX="-%I-tmp"
19-
EnvironmentFile=/etc/default/netns
20-
EnvironmentFile=-/etc/default/netns-%I
2117

22-
ExecStartPre=-/usr/bin/env ip -n %I link delete ${DEVNAME_INSIDE}
23-
24-
ExecStart=/usr/bin/env ip link add ${DEVNAME_INSIDE}${DEVNAME_INSIDE_TMP_SUFFIX} netns %I link ${MACVLAN_BRIDGE} type macvlan mode bridge
25-
ExecStart=/usr/bin/env ip -n %I link set dev ${DEVNAME_INSIDE}${DEVNAME_INSIDE_TMP_SUFFIX} name ${DEVNAME_INSIDE}
26-
ExecStart=-/usr/bin/env tc -n %I qdisc del dev ${DEVNAME_INSIDE} root
27-
ExecStart=/usr/bin/env ip -n %I link set ${DEVNAME_INSIDE} up
28-
29-
# do not run in ExecStartPost to prevent forked dhclient from being killed
3018
ExecStart=/usr/bin/env netnsinit mvbr %I up outside
3119
ExecStart=/usr/bin/env ip netns exec %I /usr/bin/env netnsinit mvbr %I up inside
3220

3321
ExecStop=/usr/bin/env ip netns exec %I /usr/bin/env netnsinit mvbr %I down inside
3422
ExecStop=/usr/bin/env netnsinit mvbr %I down outside
35-
36-
ExecStop=-/usr/bin/env kill -15 `cat /var/run/netns/dhclient-%i.pid`
37-
ExecStop=-/usr/bin/env rm /var/run/netns/dhclient-%i.pid
38-
ExecStop=-/usr/bin/env ip -n %I link delete ${DEVNAME_INSIDE}

services/[email protected]

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
Description=NAT service for netns %I
33
Documentation=https://github.com/Jamesits/systemd-named-netns
44

5-
BindsTo=netns-tunnel@%i.service
6-
After=netns-tunnel@%i.service
5+
BindsTo=netns@%i.service
6+
After=netns@%i.service
77
Before=network.target network-online.target
88
Conflicts=netns-bridge@%i.service
99

@@ -14,10 +14,6 @@ WantedBy=multi-user.target
1414
[Service]
1515
Type=oneshot
1616
RemainAfterExit=yes
17-
Environment=DEVNAME_OUTSIDE=vn-%I0
18-
Environment=DEVNAME_INSIDE=vn-%I1
19-
EnvironmentFile=/etc/default/netns
20-
EnvironmentFile=-/etc/default/netns-%I
2117

2218
ExecStart=/usr/bin/env netnsinit nat %I up outside
2319
ExecStart=/usr/bin/env ip netns exec %I /usr/bin/env netnsinit nat %I up inside

services/[email protected]

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,9 @@ WantedBy=multi-user.target
1414
[Service]
1515
Type=oneshot
1616
RemainAfterExit=yes
17-
Environment=DEVNAME_OUTSIDE=vn-%I0
18-
Environment=DEVNAME_INSIDE=vn-%I1
19-
EnvironmentFile=/etc/default/netns
20-
EnvironmentFile=-/etc/default/netns-%I
2117

22-
ExecStartPre=-/usr/bin/env ip link delete ${DEVNAME_OUTSIDE}
23-
ExecStartPre=-/usr/bin/env ip link delete ${DEVNAME_INSIDE}
24-
25-
ExecStart=/usr/bin/env ip link add ${DEVNAME_OUTSIDE} type veth peer name ${DEVNAME_INSIDE}
26-
ExecStart=-/usr/bin/env tc qdisc del dev ${DEVNAME_INSIDE} root
27-
ExecStart=/usr/bin/env ip link set ${DEVNAME_OUTSIDE} up
28-
ExecStart=/usr/bin/env ip link set ${DEVNAME_INSIDE} netns %I
29-
# let this fail silently if IPADDR_OUTSIDE is undefined
30-
ExecStart=-/usr/bin/env ip address add ${IPADDR_OUTSIDE} dev ${DEVNAME_OUTSIDE}
31-
ExecStart=/usr/bin/env ip -n %I link set ${DEVNAME_INSIDE} up
32-
33-
# do not run in ExecStartPost to prevent forked dhclient from being killed
3418
ExecStart=/usr/bin/env netnsinit tunnel %I up outside
3519
ExecStart=/usr/bin/env ip netns exec %I /usr/bin/env netnsinit tunnel %I up inside
3620

3721
ExecStop=/usr/bin/env ip netns exec %I /usr/bin/env netnsinit tunnel %I down inside
3822
ExecStop=/usr/bin/env netnsinit tunnel %I down outside
39-
40-
ExecStop=-/usr/bin/env kill -15 `cat /var/run/netns/dhclient-%i.pid`
41-
ExecStop=-/usr/bin/env rm /var/run/netns/dhclient-%i.pid
42-
ExecStop=/usr/bin/env ip link delete ${DEVNAME_OUTSIDE}

0 commit comments

Comments
 (0)