@@ -73,11 +73,17 @@ if [ $OVPN_DEVICE == "tap" ]; then
73
73
# check if bridge already exists; create if not
74
74
if [ $( ip link show | grep -c $OVPN_BR_BR :) -eq 0 ]; then
75
75
brctl addbr $OVPN_BR_BR
76
+ else
77
+ # Remember the bridge alread existed at startup
78
+ touch /tmp/bridge_existed
76
79
fi
77
80
78
81
# check if $OVPN_BR_ETH_IF is already added to bridge; add if not
79
82
if [ $( brctl show $OVPN_BR_BR | grep -c $OVPN_BR_ETH_IF ) -eq 0 ]; then
80
83
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
81
87
fi
82
88
83
89
# check if openvpn device is already added to bridge; add if not
@@ -169,31 +175,47 @@ cleanup()
169
175
echo ' Removing iptables rules'
170
176
$IPTABLES_CMD -D INPUT -i $OVPN_BR_BR -j ACCEPT
171
177
$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
181
178
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
+
182
212
echo ' Removing tap device'
183
213
if [ $( ip link show | grep -c $OVPN_DEVICE$OVPN_DEVICEN :) -eq 1 ]; then
184
214
ifconfig $OVPN_DEVICE$OVPN_DEVICEN down
185
215
openvpn --rmtun --dev $OVPN_DEVICE$OVPN_DEVICEN
186
216
fi
187
217
188
218
$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
197
219
fi
198
220
}
199
221
0 commit comments