From 6e81f2a7dcbd5d98b07db944812ae084c025a49a Mon Sep 17 00:00:00 2001 From: nuccachen Date: Mon, 30 Jul 2018 17:29:45 +0800 Subject: [PATCH] Add new netd event callback for changes to NAT64 prefix Bug: 78545619 Test: system/netd/tests/runtests.sh pass Test: Register a callback in ConnectivityService temporarily and print out event parameters. Check event parameters as expected in logs while NAT64 prefix is added and removed. Change-Id: I11b2b0aeb159d5fe8dc01ccf6dc64bd9d4d960a5 --- core/java/android/net/INetdEventCallback.aidl | 14 ++++++++++++++ .../android/server/net/BaseNetdEventCallback.java | 6 ++++++ .../connectivity/NetdEventListenerService.java | 13 +++++++++++++ 3 files changed, 33 insertions(+) diff --git a/core/java/android/net/INetdEventCallback.aidl b/core/java/android/net/INetdEventCallback.aidl index 4b1a08ded9d6a..0877a1a47e2be 100644 --- a/core/java/android/net/INetdEventCallback.aidl +++ b/core/java/android/net/INetdEventCallback.aidl @@ -44,6 +44,20 @@ oneway interface INetdEventCallback { void onDnsEvent(int netId, int eventType, int returnCode, String hostname, in String[] ipAddresses, int ipAddressesCount, long timestamp, int uid); + /** + * Represents adding or removing a NAT64 prefix. + * This method must not block or perform long-running operations. + * + * @param netId the ID of the network the prefix was performed on. + * @param added true if the NAT64 prefix was added, or false if the NAT64 prefix was removed. + * There is only one prefix at a time for each netId. If a prefix is added, it replaces + * the previous-added prefix. + * @param prefixString the detected NAT64 prefix as a string literal. + * @param prefixLength the prefix length associated with this NAT64 prefix. + */ + void onNat64PrefixEvent(int netId, boolean added, @utf8InCpp String prefixString, + int prefixLength); + /** * Represents a private DNS validation success or failure. * This method must not block or perform long-running operations. diff --git a/core/java/com/android/server/net/BaseNetdEventCallback.java b/core/java/com/android/server/net/BaseNetdEventCallback.java index 97247aada49d5..a65214a1edca7 100644 --- a/core/java/com/android/server/net/BaseNetdEventCallback.java +++ b/core/java/com/android/server/net/BaseNetdEventCallback.java @@ -31,6 +31,12 @@ public class BaseNetdEventCallback extends INetdEventCallback.Stub { // default no-op } + @Override + public void onNat64PrefixEvent(int netId, boolean added, String prefixString, + int prefixLength) { + // default no-op + } + @Override public void onPrivateDnsValidationEvent(int netId, String ipAddress, String hostname, boolean validated) { diff --git a/services/core/java/com/android/server/connectivity/NetdEventListenerService.java b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java index 422f5566eee18..e40949b785d91 100644 --- a/services/core/java/com/android/server/connectivity/NetdEventListenerService.java +++ b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java @@ -214,6 +214,19 @@ public class NetdEventListenerService extends INetdEventListener.Stub { } } + @Override + // Called concurrently by multiple binder threads. + // This method must not block or perform long-running operations. + public synchronized void onNat64PrefixEvent(int netId, + boolean added, String prefixString, int prefixLength) + throws RemoteException { + for (INetdEventCallback callback : mNetdEventCallbackList) { + if (callback != null) { + callback.onNat64PrefixEvent(netId, added, prefixString, prefixLength); + } + } + } + @Override // Called concurrently by multiple binder threads. // This method must not block or perform long-running operations.