about summary refs log tree commit diff
path: root/debian/network-manager-dispatcher.script
diff options
context:
space:
mode:
Diffstat (limited to 'debian/network-manager-dispatcher.script')
-rw-r--r--debian/network-manager-dispatcher.script88
1 files changed, 57 insertions, 31 deletions
diff --git a/debian/network-manager-dispatcher.script b/debian/network-manager-dispatcher.script
index 5869bda5..ebadfd10 100644
--- a/debian/network-manager-dispatcher.script
+++ b/debian/network-manager-dispatcher.script
@@ -9,42 +9,68 @@ if [ -z "$1" ]; then
     exit 1;
 fi
 
+if [ -n "$IP4_NUM_ADDRESSES" ] && [ "$IP4_NUM_ADDRESSES" -gt 0 ]; then
+   ADDRESS_FAMILIES="$ADDRESS_FAMILIES inet"
+fi
+if [ -n "$IP6_NUM_ADDRESSES" ] && [ "$IP6_NUM_ADDRESSES" -gt 0 ]; then
+   ADDRESS_FAMILIES="$ADDRESS_FAMILIES inet6"
+fi
+
+# If we have a VPN connection ignore the underlying IP address(es)
+if [ "$2" = "vpn-up" ] || [ "$2" = "vpn-down" ]; then
+   ADDRESS_FAMILIES=""
+fi
+
+if [ -n "$VPN_IP4_NUM_ADDRESSES" ] && [ "$VPN_IP4_NUM_ADDRESSES" -gt 0 ]; then
+   ADDRESS_FAMILIES="$ADDRESS_FAMILIES inet"
+fi
+if [ -n "$VPN_IP6_NUM_ADDRESSES" ] && [ "$VPN_IP6_NUM_ADDRESSES" -gt 0 ]; then
+   ADDRESS_FAMILIES="$ADDRESS_FAMILIES inet6"
+fi
+
+# We're probably bringing the interface down.
+[ -n "$ADDRESS_FAMILIES" ] || ADDRESS_FAMILIES="inet"
+
 # Fake ifupdown environment
 export IFACE="$1"
 export LOGICAL="$1"
-export ADDRFAM="NetworkManager"
 export METHOD="NetworkManager"
 export VERBOSITY="0"
 
-# Run the right scripts
-case "$2" in
-    up|vpn-up)
-	export MODE="start"
-	export PHASE="post-up"
-	exec run-parts /etc/network/if-up.d
-	;;
-    down|vpn-down)
-	export MODE="stop"
-	export PHASE="post-down"
-	exec run-parts /etc/network/if-post-down.d
-	;;
+for i in $ADDRESS_FAMILIES; do
+
+    export ADDRFAM="$i"
+
+    # Run the right scripts
+    case "$2" in
+        up|vpn-up)
+            export MODE="start"
+            export PHASE="post-up"
+            run-parts /etc/network/if-up.d
+            ;;
+        down|vpn-down)
+            export MODE="stop"
+            export PHASE="post-down"
+            run-parts /etc/network/if-post-down.d
+            ;;
 # pre-up/pre-down not implemented. See
 # https://bugzilla.gnome.org/show_bug.cgi?id=387832
-#    pre-up)
-#	export MODE="start"
-#	export PHASE="pre-up"
-#	exec run-parts /etc/network/if-pre-up.d
-#	;;
-#    pre-down)
-#	export MODE="stop"
-#	export PHASE="pre-down"
-#	exec run-parts /etc/network/if-down.d
-#	;;
-    hostname|dhcp4-change|dhcp6-change)
-        # Do nothing
-	;;
-    *)
-	echo "$0: called with unknown action \`$2'" 1>&2
-	exit 1
-	;;
-esac
+#        pre-up)
+#            export MODE="start"
+#            export PHASE="pre-up"
+#            run-parts /etc/network/if-pre-up.d
+#            ;;
+#        pre-down)
+#            export MODE="stop"
+#            export PHASE="pre-down"
+#            run-parts /etc/network/if-down.d
+#            ;;
+        hostname|dhcp4-change|dhcp6-change)
+            # Do nothing
+            ;;
+        *)
+            echo "$0: called with unknown action \`$2'" 1>&2
+            exit 1
+            ;;
+    esac
+done