Skip to content

Commit 06081a6

Browse files
committed
enhancement: Cleanup on shutdown respects if bridge already existed
1 parent 6c59744 commit 06081a6

File tree

1 file changed

+39
-17
lines changed

1 file changed

+39
-17
lines changed

bin/ovpn_run

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,17 @@ if [ $OVPN_DEVICE == "tap" ]; then
7373
# check if bridge already exists; create if not
7474
if [ $(ip link show | grep -c $OVPN_BR_BR:) -eq 0 ]; then
7575
brctl addbr $OVPN_BR_BR
76+
else
77+
# Remember the bridge alread existed at startup
78+
touch /tmp/bridge_existed
7679
fi
7780

7881
# check if $OVPN_BR_ETH_IF is already added to bridge; add if not
7982
if [ $(brctl show $OVPN_BR_BR | grep -c $OVPN_BR_ETH_IF) -eq 0 ]; then
8083
brctl addif $OVPN_BR_BR $OVPN_BR_ETH_IF
84+
else
85+
# Remember the interface was already part of the bridge at startup
86+
touch /tmp/if_belonged_to_bridge
8187
fi
8288

8389
# check if openvpn device is already added to bridge; add if not
@@ -169,31 +175,47 @@ cleanup()
169175
echo 'Removing iptables rules'
170176
$IPTABLES_CMD -D INPUT -i $OVPN_BR_BR -j ACCEPT
171177
$IPTABLES_CMD -D FORWARD -i $OVPN_BR_BR -j ACCEPT
172-
173-
echo 'Shuttdown down bridge'
174-
ifconfig $OVPN_BR_BR down
175-
176-
echo 'Deleting bridge'
177-
# check if bridge already exists; create if not
178-
if [ $(ip link show | grep -c $OVPN_BR_BR:) -eq 1 ]; then
179-
brctl delbr $OVPN_BR_BR
180-
fi
181178

179+
# This means that the bridge already existed and our interface to bridge
180+
if test -f "/tmp/if_belonged_to_bridge"; then
181+
rm /tmp/if_belonged_to_bridge
182+
# Nothing to do in terms of bridge management
183+
else
184+
# Remove eth device from bridge
185+
brctl delif $OVPN_BR_BR $OVPN_BR_ETH_IF
186+
187+
# Remove OpenVPN device from bridge
188+
brctl delif $OVPN_BR_BR $OVPN_DEVICE$OVPN_DEVICEN
189+
190+
if test -f "/tmp/bridge_existed"; then
191+
rm /tmp/bridge_existed
192+
193+
echo 'Shuttdown down bridge'
194+
ifconfig $OVPN_BR_BR down
195+
196+
echo 'Deleting bridge'
197+
# check if bridge already exists; create if not
198+
if [ $(ip link show | grep -c $OVPN_BR_BR:) -eq 1 ]; then
199+
brctl delbr $OVPN_BR_BR
200+
fi
201+
fi
202+
203+
echo 'setting IP, subnet and broadcast address for physical device'
204+
ifconfig $OVPN_BR_ETH_IF $OVPN_BR_ETH_IP netmask $OVPN_BR_ETH_SUBNET broadcast $OVPN_BR_ETH_BROADCAST
205+
206+
echo 'checking if default gateway needs to be added for pyhsical device'
207+
if [ $(route | grep -c -Eo "^default\s+$OVPN_BR_ETH_GATEWAY.+$OVPN_BR_ETH_IF$") -eq 0 ]; then
208+
route add default gw $OVPN_BR_ETH_GATEWAY $OVPN_BR_ETH_IF
209+
fi
210+
fi
211+
182212
echo 'Removing tap device'
183213
if [ $(ip link show | grep -c $OVPN_DEVICE$OVPN_DEVICEN:) -eq 1 ]; then
184214
ifconfig $OVPN_DEVICE$OVPN_DEVICEN down
185215
openvpn --rmtun --dev $OVPN_DEVICE$OVPN_DEVICEN
186216
fi
187217

188218
$IPTABLES_CMD -D INPUT -i $OVPN_DEVICE$OVPN_DEVICEN -j ACCEPT
189-
190-
echo 'setting IP, subnet and broadcast address for physical device'
191-
ifconfig $OVPN_BR_ETH_IF $OVPN_BR_ETH_IP netmask $OVPN_BR_ETH_SUBNET broadcast $OVPN_BR_ETH_BROADCAST
192-
193-
echo 'checking if default gateway needs to be added for pyhsical device'
194-
if [ $(route | grep -c -Eo "^default\s+$OVPN_BR_ETH_GATEWAY.+$OVPN_BR_ETH_IF$") -eq 0 ]; then
195-
route add default gw $OVPN_BR_ETH_GATEWAY $OVPN_BR_ETH_IF
196-
fi
197219
fi
198220
}
199221

0 commit comments

Comments
 (0)