Rename IDhcpLeaseCallbacks to IDhcpEventCallbacks for more generic.
This change renames IDhcpLeaseCallbacks, easier to expand in the
future and adds a new method onNewPrefixRequest which will be called
on DHCP server receives DHCPDECLINE message and request a new IPv4
prefix from IpServer.
Bug: 130741856
Test: atest NetworkStackTests NetworkStackNextTests
Change-Id: Ia7b08bb1e7feda08ffe9fbb8885dbc8b7bdd66c9
diff --git a/common/networkstackclient/Android.bp b/common/networkstackclient/Android.bp
index ac8fda7..7b72e72 100644
--- a/common/networkstackclient/Android.bp
+++ b/common/networkstackclient/Android.bp
@@ -68,7 +68,7 @@
"src/android/net/TcpKeepalivePacketDataParcelable.aidl",
"src/android/net/dhcp/DhcpLeaseParcelable.aidl",
"src/android/net/dhcp/DhcpServingParamsParcel.aidl",
- "src/android/net/dhcp/IDhcpLeaseCallbacks.aidl",
+ "src/android/net/dhcp/IDhcpEventCallbacks.aidl",
"src/android/net/dhcp/IDhcpServer.aidl",
"src/android/net/dhcp/IDhcpServerCallbacks.aidl",
"src/android/net/ip/IIpClient.aidl",
diff --git a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpLeaseCallbacks.aidl b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpEventCallbacks.aidl
similarity index 91%
rename from common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpLeaseCallbacks.aidl
rename to common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpEventCallbacks.aidl
index 673afe4..dfcaf98 100644
--- a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpLeaseCallbacks.aidl
+++ b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpEventCallbacks.aidl
@@ -16,6 +16,7 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package android.net.dhcp;
-interface IDhcpLeaseCallbacks {
+interface IDhcpEventCallbacks {
oneway void onLeasesChanged(in List<android.net.dhcp.DhcpLeaseParcelable> newLeases);
+ oneway void onNewPrefixRequest(in android.net.IpPrefix currentPrefix);
}
diff --git a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpServer.aidl b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpServer.aidl
index 3372062..ef936cc 100644
--- a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpServer.aidl
+++ b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/IDhcpServer.aidl
@@ -19,7 +19,7 @@
/* @hide */
interface IDhcpServer {
oneway void start(in android.net.INetworkStackStatusCallback cb) = 0;
- oneway void startWithCallbacks(in android.net.INetworkStackStatusCallback statusCb, in android.net.dhcp.IDhcpLeaseCallbacks leaseCb) = 3;
+ oneway void startWithCallbacks(in android.net.INetworkStackStatusCallback statusCb, in android.net.dhcp.IDhcpEventCallbacks eventCb) = 3;
oneway void updateParams(in android.net.dhcp.DhcpServingParamsParcel params, in android.net.INetworkStackStatusCallback cb) = 1;
oneway void stop(in android.net.INetworkStackStatusCallback cb) = 2;
const int STATUS_UNKNOWN = 0;
diff --git a/common/networkstackclient/src/android/net/dhcp/IDhcpLeaseCallbacks.aidl b/common/networkstackclient/src/android/net/dhcp/IDhcpEventCallbacks.aidl
similarity index 64%
rename from common/networkstackclient/src/android/net/dhcp/IDhcpLeaseCallbacks.aidl
rename to common/networkstackclient/src/android/net/dhcp/IDhcpEventCallbacks.aidl
index cf2dfa8..155c528 100644
--- a/common/networkstackclient/src/android/net/dhcp/IDhcpLeaseCallbacks.aidl
+++ b/common/networkstackclient/src/android/net/dhcp/IDhcpEventCallbacks.aidl
@@ -16,9 +16,10 @@
package android.net.dhcp;
+import android.net.IpPrefix;
import android.net.dhcp.DhcpLeaseParcelable;
-oneway interface IDhcpLeaseCallbacks {
+oneway interface IDhcpEventCallbacks {
/**
* Called when a lease is committed or released on the DHCP server.
*
@@ -27,4 +28,15 @@
* @param newLeases The new list of leases tracked by the server.
*/
void onLeasesChanged(in List<DhcpLeaseParcelable> newLeases);
-}
\ No newline at end of file
+
+ /**
+ * Called when DHCP server receives DHCPDECLINE message and only if a new IPv4 address prefix
+ * (e.g. a different subnet prefix) is requested.
+ *
+ * <p>When this callback is called, IpServer must call IDhcpServer#updateParams with a new
+ * prefix, as processing of DHCP packets should be paused until the new prefix and route
+ * configuration on IpServer is completed.
+ * @param currentPrefix The current prefix parameter serving on DHCP server.
+ */
+ void onNewPrefixRequest(in IpPrefix currentPrefix);
+}
diff --git a/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl b/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl
index dd93174..973ffb0 100644
--- a/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl
+++ b/common/networkstackclient/src/android/net/dhcp/IDhcpServer.aidl
@@ -18,7 +18,7 @@
import android.net.INetworkStackStatusCallback;
import android.net.dhcp.DhcpServingParamsParcel;
-import android.net.dhcp.IDhcpLeaseCallbacks;
+import android.net.dhcp.IDhcpEventCallbacks;
/** @hide */
oneway interface IDhcpServer {
@@ -29,7 +29,7 @@
void start(in INetworkStackStatusCallback cb) = 0;
void startWithCallbacks(in INetworkStackStatusCallback statusCb,
- in IDhcpLeaseCallbacks leaseCb) = 3;
+ in IDhcpEventCallbacks eventCb) = 3;
void updateParams(in DhcpServingParamsParcel params, in INetworkStackStatusCallback cb) = 1;
void stop(in INetworkStackStatusCallback cb) = 2;
diff --git a/src/android/net/dhcp/DhcpLeaseRepository.java b/src/android/net/dhcp/DhcpLeaseRepository.java
index a1f6612..3639a2d 100644
--- a/src/android/net/dhcp/DhcpLeaseRepository.java
+++ b/src/android/net/dhcp/DhcpLeaseRepository.java
@@ -91,7 +91,7 @@
private long mNextExpirationCheck = EXPIRATION_NEVER;
@NonNull
- private RemoteCallbackList<IDhcpLeaseCallbacks> mLeaseCallbacks = new RemoteCallbackList<>();
+ private RemoteCallbackList<IDhcpEventCallbacks> mEventCallbacks = new RemoteCallbackList<>();
static class DhcpLeaseException extends Exception {
DhcpLeaseException(String message) {
@@ -386,15 +386,15 @@
leaseParcelables.add(committedLease.toParcelable());
}
- final int cbCount = mLeaseCallbacks.beginBroadcast();
+ final int cbCount = mEventCallbacks.beginBroadcast();
for (int i = 0; i < cbCount; i++) {
try {
- mLeaseCallbacks.getBroadcastItem(i).onLeasesChanged(leaseParcelables);
+ mEventCallbacks.getBroadcastItem(i).onLeasesChanged(leaseParcelables);
} catch (RemoteException e) {
mLog.e("Could not send lease callback", e);
}
}
- mLeaseCallbacks.finishBroadcast();
+ mEventCallbacks.finishBroadcast();
}
public void markLeaseDeclined(@NonNull Inet4Address addr) {
@@ -430,9 +430,9 @@
/**
* Add callbacks that will be called on leases update.
*/
- public void addLeaseCallbacks(@NonNull IDhcpLeaseCallbacks cb) {
+ public void addLeaseCallbacks(@NonNull IDhcpEventCallbacks cb) {
Objects.requireNonNull(cb, "Callbacks must be non-null");
- mLeaseCallbacks.register(cb);
+ mEventCallbacks.register(cb);
}
/**
diff --git a/src/android/net/dhcp/DhcpServer.java b/src/android/net/dhcp/DhcpServer.java
index bf22fcb..429b10c 100644
--- a/src/android/net/dhcp/DhcpServer.java
+++ b/src/android/net/dhcp/DhcpServer.java
@@ -285,11 +285,11 @@
*/
@Override
public void startWithCallbacks(@Nullable INetworkStackStatusCallback statusCb,
- @Nullable IDhcpLeaseCallbacks leaseCb) {
+ @Nullable IDhcpEventCallbacks eventCb) {
mDeps.checkCaller();
mHandlerThread.start();
mHandler = new ServerHandler(mHandlerThread.getLooper());
- sendMessage(CMD_START_DHCP_SERVER, new Pair<>(statusCb, leaseCb));
+ sendMessage(CMD_START_DHCP_SERVER, new Pair<>(statusCb, eventCb));
}
/**
@@ -357,8 +357,8 @@
cb = pair.second;
break;
case CMD_START_DHCP_SERVER:
- final Pair<INetworkStackStatusCallback, IDhcpLeaseCallbacks> obj =
- (Pair<INetworkStackStatusCallback, IDhcpLeaseCallbacks>) msg.obj;
+ final Pair<INetworkStackStatusCallback, IDhcpEventCallbacks> obj =
+ (Pair<INetworkStackStatusCallback, IDhcpEventCallbacks>) msg.obj;
cb = obj.first;
if (obj.second != null) {
mLeaseRepo.addLeaseCallbacks(obj.second);
diff --git a/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java b/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
index 818a48a..3a6a890 100644
--- a/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
+++ b/tests/unit/src/android/net/dhcp/DhcpLeaseRepositoryTest.java
@@ -100,7 +100,7 @@
private DhcpLeaseRepository mRepo;
@NonNull
@Mock
- private IDhcpLeaseCallbacks mCallbacks;
+ private IDhcpEventCallbacks mCallbacks;
private final Binder mCallbacksBinder = new Binder();
private static Inet4Address parseAddr4(String inet4Addr) {
diff --git a/tests/unit/src/android/net/dhcp/DhcpServerTest.java b/tests/unit/src/android/net/dhcp/DhcpServerTest.java
index a278a88..86f8a25 100644
--- a/tests/unit/src/android/net/dhcp/DhcpServerTest.java
+++ b/tests/unit/src/android/net/dhcp/DhcpServerTest.java
@@ -119,7 +119,7 @@
@NonNull @Mock
private DhcpPacketListener mPacketListener;
@NonNull @Mock
- private IDhcpLeaseCallbacks mLeaseCallbacks;
+ private IDhcpEventCallbacks mEventCallbacks;
@NonNull @Captor
private ArgumentCaptor<ByteBuffer> mSentPacketCaptor;
@@ -207,9 +207,9 @@
@Test
public void testStartWithCallbacks() throws Exception {
- mServer.startWithCallbacks(mAssertSuccessCallback, mLeaseCallbacks);
+ mServer.startWithCallbacks(mAssertSuccessCallback, mEventCallbacks);
mLooper.processAllMessages();
- verify(mRepository).addLeaseCallbacks(eq(mLeaseCallbacks));
+ verify(mRepository).addLeaseCallbacks(eq(mEventCallbacks));
}
@Test