VPN: reset legacy VPN when resetting IPv4 addresses.

Currently legacy VPN only works on IPv4, and it should always
turn down when the addresses are changed. It assumed that the
interface will be brought down and up, so the event can be
detected via interfaceStatusChanged(). However, the assumption
was incorrect and the event is actually driver-dependent. To
fix this issue, ConnectivityService now tells VPN that the
interface is down when resetting IPv4 addresses.

Change-Id: I76d15e56552d86635c5b274ca980be5da905a6fb
This commit is contained in:
Chia-chi Yeh
2011-08-15 15:19:40 -07:00
parent 2d5e58e97e
commit 4a243f5ea1

View File

@@ -1780,14 +1780,20 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mCurrentLinkProperties[netType] = newLp; mCurrentLinkProperties[netType] = newLp;
boolean resetDns = updateRoutes(newLp, curLp, mNetConfigs[netType].isDefault()); boolean resetDns = updateRoutes(newLp, curLp, mNetConfigs[netType].isDefault());
if (doReset || resetMask != 0 || resetDns) { if (resetMask != 0 || resetDns) {
LinkProperties linkProperties = mNetTrackers[netType].getLinkProperties(); LinkProperties linkProperties = mNetTrackers[netType].getLinkProperties();
if (linkProperties != null) { if (linkProperties != null) {
String iface = linkProperties.getInterfaceName(); String iface = linkProperties.getInterfaceName();
if (TextUtils.isEmpty(iface) == false) { if (TextUtils.isEmpty(iface) == false) {
if (doReset || resetMask != 0) { if (resetMask != 0) {
if (DBG) log("resetConnections(" + iface + ", " + resetMask + ")"); if (DBG) log("resetConnections(" + iface + ", " + resetMask + ")");
NetworkUtils.resetConnections(iface, resetMask); NetworkUtils.resetConnections(iface, resetMask);
// Tell VPN the interface is down. It is a temporary
// but effective fix to make VPN aware of the change.
if ((resetMask & NetworkUtils.RESET_IPV4_ADDRESSES) != 0) {
mVpn.interfaceStatusChanged(iface, false);
}
} }
if (resetDns) { if (resetDns) {
if (DBG) log("resetting DNS cache for " + iface); if (DBG) log("resetting DNS cache for " + iface);