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) {