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:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user