Block address families with routes, not NetworkAgent side channel
Now that we support unreachable routes, use those to block
address families on VPNs. This is a much more elegant solution.
Also update LinkProperties when IP addresses are added and
removed, fixing a TODO.
Bug: 17462989
Change-Id: Ib749d84710dca70d672350b9f129bb91419ec77e
diff --git a/core/java/android/net/NetworkAgent.java b/core/java/android/net/NetworkAgent.java
index b83198d..74d4ac2 100644
--- a/core/java/android/net/NetworkAgent.java
+++ b/core/java/android/net/NetworkAgent.java
@@ -107,27 +107,13 @@
public static final int EVENT_UID_RANGES_REMOVED = BASE + 6;
/**
- * Sent by the NetworkAgent to ConnectivityService to block all routes for a certain address
- * family (AF_INET or AF_INET6) on this Network. For VPNs only.
- * obj = Integer representing the family (AF_INET or AF_INET6)
- */
- public static final int EVENT_BLOCK_ADDRESS_FAMILY = BASE + 7;
-
- /**
- * Sent by the NetworkAgent to ConnectivityService to unblock routes for a certain address
- * family (AF_INET or AF_INET6) on this Network. For VPNs only.
- * obj = Integer representing the family (AF_INET or AF_INET6)
- */
- public static final int EVENT_UNBLOCK_ADDRESS_FAMILY = BASE + 8;
-
- /**
* Sent by ConnectivitySerice to the NetworkAgent to inform the agent of the
* networks status - whether we could use the network or could not, due to
* either a bad network configuration (no internet link) or captive portal.
*
* arg1 = either {@code VALID_NETWORK} or {@code INVALID_NETWORK}
*/
- public static final int CMD_REPORT_NETWORK_STATUS = BASE + 9;
+ public static final int CMD_REPORT_NETWORK_STATUS = BASE + 7;
public static final int VALID_NETWORK = 1;
public static final int INVALID_NETWORK = 2;
@@ -137,7 +123,7 @@
* explicitly selected. This should be sent before the NetworkInfo is marked
* CONNECTED so it can be given special treatment at that time.
*/
- public static final int EVENT_SET_EXPLICITLY_SELECTED = BASE + 10;
+ public static final int EVENT_SET_EXPLICITLY_SELECTED = BASE + 8;
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
NetworkCapabilities nc, LinkProperties lp, int score) {
@@ -273,21 +259,6 @@
}
/**
- * Called by the VPN code when it wants to block an address family from being routed, typically
- * because the VPN network doesn't support that family.
- */
- public void blockAddressFamily(int family) {
- queueOrSendMessage(EVENT_BLOCK_ADDRESS_FAMILY, family);
- }
-
- /**
- * Called by the VPN code when it wants to unblock an address family from being routed.
- */
- public void unblockAddressFamily(int family) {
- queueOrSendMessage(EVENT_UNBLOCK_ADDRESS_FAMILY, family);
- }
-
- /**
* Called by the bearer to indicate this network was manually selected by the user.
* This should be called before the NetworkInfo is marked CONNECTED so that this
* Network can be given special treatment at that time.
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 967681b..f579d6f 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -1888,36 +1888,6 @@
}
break;
}
- case NetworkAgent.EVENT_BLOCK_ADDRESS_FAMILY: {
- NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo);
- if (nai == null) {
- loge("EVENT_BLOCK_ADDRESS_FAMILY from unknown NetworkAgent");
- break;
- }
- try {
- mNetd.blockAddressFamily((Integer) msg.obj, nai.network.netId,
- nai.linkProperties.getInterfaceName());
- } catch (Exception e) {
- // Never crash!
- loge("Exception in blockAddressFamily: " + e);
- }
- break;
- }
- case NetworkAgent.EVENT_UNBLOCK_ADDRESS_FAMILY: {
- NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo);
- if (nai == null) {
- loge("EVENT_UNBLOCK_ADDRESS_FAMILY from unknown NetworkAgent");
- break;
- }
- try {
- mNetd.unblockAddressFamily((Integer) msg.obj, nai.network.netId,
- nai.linkProperties.getInterfaceName());
- } catch (Exception e) {
- // Never crash!
- loge("Exception in blockAddressFamily: " + e);
- }
- break;
- }
case NetworkAgent.EVENT_SET_EXPLICITLY_SELECTED: {
NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo);
if (nai == null) {