From aa1727fe0cbb902c5f53a3fae601b4e15da0a2f4 Mon Sep 17 00:00:00 2001 From: Chia-chi Yeh Date: Thu, 14 Jul 2011 18:55:33 -0700 Subject: [PATCH] VPN: tear down VPN when the dependent interface is down. Change-Id: I1eaf8e39ee7aed1f4ecbd4c36c2a81a68ad2f9d1 --- .../java/com/android/server/connectivity/Vpn.java | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/services/java/com/android/server/connectivity/Vpn.java b/services/java/com/android/server/connectivity/Vpn.java index 9fb93494d768..05e95a7d3d89 100644 --- a/services/java/com/android/server/connectivity/Vpn.java +++ b/services/java/com/android/server/connectivity/Vpn.java @@ -222,15 +222,21 @@ public class Vpn extends INetworkManagementEventObserver.Stub { } // INetworkManagementEventObserver.Stub - public void interfaceStatusChanged(String interfaze, boolean up) { + public void interfaceAdded(String interfaze) { } // INetworkManagementEventObserver.Stub - public void interfaceLinkStateChanged(String interfaze, boolean up) { + public synchronized void interfaceStatusChanged(String interfaze, boolean up) { + if (!up && mLegacyVpnRunner != null) { + mLegacyVpnRunner.check(interfaze); + } } // INetworkManagementEventObserver.Stub - public void interfaceAdded(String interfaze) { + public synchronized void interfaceLinkStateChanged(String interfaze, boolean up) { + if (!up && mLegacyVpnRunner != null) { + mLegacyVpnRunner.check(interfaze); + } } // INetworkManagementEventObserver.Stub @@ -329,6 +335,7 @@ public class Vpn extends INetworkManagementEventObserver.Stub { private final VpnConfig mConfig; private final String[] mDaemons; private final String[][] mArguments; + private final String mOuterInterface; private final LegacyVpnInfo mInfo; private long mTimer = -1; @@ -340,11 +347,21 @@ public class Vpn extends INetworkManagementEventObserver.Stub { mArguments = new String[][] {racoon, mtpd}; mInfo = new LegacyVpnInfo(); + // This is the interface which VPN is running on. + mOuterInterface = mConfig.interfaze; + // Legacy VPN is not a real package, so we use it to carry the key. mInfo.key = mConfig.packagz; mConfig.packagz = VpnConfig.LEGACY_VPN; } + public void check(String interfaze) { + if (interfaze.equals(mOuterInterface)) { + Log.i(TAG, "Legacy VPN is going down with " + interfaze); + exit(); + } + } + public void exit() { // We assume that everything is reset after the daemons die. interrupt(); -- 2.11.0