diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2014-06-13 21:21:03 +0900 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2014-06-17 11:18:54 +0900 |
commit | c18cbfdf8d40e7a526a088225cb32341e1ea0920 (patch) | |
tree | 58b91b1df9cdde126ed0bb9361b77294b7269273 /core | |
parent | 10accbb46e82b3178ff26124041f3ab7d6c1802d (diff) | |
download | frameworks_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')
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. */ |