summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2014-06-13 21:21:03 +0900
committerLorenzo Colitti <lorenzo@google.com>2014-06-17 11:18:54 +0900
commitc18cbfdf8d40e7a526a088225cb32341e1ea0920 (patch)
tree58b91b1df9cdde126ed0bb9361b77294b7269273 /core
parent10accbb46e82b3178ff26124041f3ab7d6c1802d (diff)
downloadframeworks_base-c18cbfdf8d40e7a526a088225cb32341e1ea0920.zip
frameworks_base-c18cbfdf8d40e7a526a088225cb32341e1ea0920.tar.gz
frameworks_base-c18cbfdf8d40e7a526a088225cb32341e1ea0920.tar.bz2
Notify network observers of route changes.
Bug: 9180552 Change-Id: If8432bc74335676320b815784b21f404d3479c35
Diffstat (limited to 'core')
-rw-r--r--core/java/android/net/INetworkManagementEventObserver.aidl11
-rw-r--r--core/java/com/android/server/net/BaseNetworkObserver.java11
-rw-r--r--core/java/com/android/server/net/NetlinkTracker.java35
3 files changed, 57 insertions, 0 deletions
diff --git a/core/java/android/net/INetworkManagementEventObserver.aidl b/core/java/android/net/INetworkManagementEventObserver.aidl
index dd9c39f..b7af374 100644
--- a/core/java/android/net/INetworkManagementEventObserver.aidl
+++ b/core/java/android/net/INetworkManagementEventObserver.aidl
@@ -17,6 +17,7 @@
package android.net;
import android.net.LinkAddress;
+import android.net.RouteInfo;
/**
* Callback class for receiving events from an INetworkManagementService
@@ -98,4 +99,14 @@ interface INetworkManagementEventObserver {
* @param servers The IP addresses of the DNS servers.
*/
void interfaceDnsServerInfo(String iface, long lifetime, in String[] servers);
+
+ /**
+ * A route has been added or updated.
+ */
+ void routeUpdated(in RouteInfo route);
+
+ /**
+ * A route has been removed.
+ */
+ void routeRemoved(in RouteInfo route);
}
diff --git a/core/java/com/android/server/net/BaseNetworkObserver.java b/core/java/com/android/server/net/BaseNetworkObserver.java
index 430dd63..3d9fb5c 100644
--- a/core/java/com/android/server/net/BaseNetworkObserver.java
+++ b/core/java/com/android/server/net/BaseNetworkObserver.java
@@ -18,6 +18,7 @@ package com.android.server.net;
import android.net.INetworkManagementEventObserver;
import android.net.LinkAddress;
+import android.net.RouteInfo;
/**
* Base {@link INetworkManagementEventObserver} that provides no-op
@@ -70,4 +71,14 @@ public class BaseNetworkObserver extends INetworkManagementEventObserver.Stub {
public void interfaceDnsServerInfo(String iface, long lifetime, String[] servers) {
// default no-op
}
+
+ @Override
+ public void routeUpdated(RouteInfo route) {
+ // default no-op
+ }
+
+ @Override
+ public void routeRemoved(RouteInfo route) {
+ // default no-op
+ }
}
diff --git a/core/java/com/android/server/net/NetlinkTracker.java b/core/java/com/android/server/net/NetlinkTracker.java
index 82df2e5..7dd8dd8 100644
--- a/core/java/com/android/server/net/NetlinkTracker.java
+++ b/core/java/com/android/server/net/NetlinkTracker.java
@@ -18,6 +18,7 @@ package com.android.server.net;
import android.net.LinkAddress;
import android.net.LinkProperties;
+import android.net.RouteInfo;
import android.util.Log;
/**
@@ -84,6 +85,12 @@ public class NetlinkTracker extends BaseNetworkObserver {
}
}
+ private void maybeLog(String operation, Object o) {
+ if (DBG) {
+ Log.d(TAG, operation + ": " + o.toString());
+ }
+ }
+
@Override
public void addressUpdated(String iface, LinkAddress address) {
if (mInterfaceName.equals(iface)) {
@@ -112,6 +119,34 @@ public class NetlinkTracker extends BaseNetworkObserver {
}
}
+ @Override
+ public void routeUpdated(RouteInfo route) {
+ if (mInterfaceName.equals(route.getInterface())) {
+ maybeLog("routeUpdated", route);
+ boolean changed;
+ synchronized (this) {
+ changed = mLinkProperties.addRoute(route);
+ }
+ if (changed) {
+ mCallback.update();
+ }
+ }
+ }
+
+ @Override
+ public void routeRemoved(RouteInfo route) {
+ if (mInterfaceName.equals(route.getInterface())) {
+ maybeLog("routeRemoved", route);
+ boolean changed;
+ synchronized (this) {
+ changed = mLinkProperties.removeRoute(route);
+ }
+ if (changed) {
+ mCallback.update();
+ }
+ }
+ }
+
/**
* Returns a copy of this object's LinkProperties.
*/