@@ -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+
1121autoconfigure_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+
3057autoconfigure_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
3966autoconfigure_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
67117autoconfigure () {
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."
0 commit comments