Add a setTeardownDelayMs API to NetworkAgent.

This allows transports to request that when the network is
disconnected, the system should delay destroying the native
network until the specified time has passed after the network
disconnected.

Bug: 181941583
Test: next CL in the stack
Change-Id: I9765f1c9d1e55c23c6d583d6709dbe06505975b1
This commit is contained in:
Lorenzo Colitti
2021-03-11 01:32:09 +09:00
parent a37eaff1ea
commit 6d88078151
6 changed files with 85 additions and 14 deletions

View File

@@ -47,5 +47,5 @@ oneway interface INetworkAgent {
void onQosFilterCallbackRegistered(int qosCallbackId, in QosFilterParcelable filterParcel);
void onQosCallbackUnregistered(int qosCallbackId);
void onNetworkCreated();
void onNetworkDisconnected();
void onNetworkDestroyed();
}

View File

@@ -41,4 +41,5 @@ oneway interface INetworkAgentRegistry {
void sendNrQosSessionAvailable(int callbackId, in QosSession session, in NrQosSessionAttributes attributes);
void sendQosSessionLost(int qosCallbackId, in QosSession session);
void sendQosCallbackError(int qosCallbackId, int exceptionType);
void sendTeardownDelayMs(int teardownDelayMs);
}

View File

@@ -184,6 +184,20 @@ public abstract class NetworkAgent {
*/
public static final int EVENT_UNDERLYING_NETWORKS_CHANGED = BASE + 5;
/**
* Sent by the NetworkAgent to ConnectivityService to pass the current value of the teardown
* delay.
* arg1 = teardown delay in milliseconds
* @hide
*/
public static final int EVENT_TEARDOWN_DELAY_CHANGED = BASE + 6;
/**
* The maximum value for the teardown delay, in milliseconds.
* @hide
*/
public static final int MAX_TEARDOWN_DELAY_MS = 5000;
/**
* Sent by ConnectivityService to the NetworkAgent to inform the agent of the
* networks status - whether we could use the network or could not, due to
@@ -197,7 +211,6 @@ public abstract class NetworkAgent {
*/
public static final int CMD_REPORT_NETWORK_STATUS = BASE + 7;
/**
* Network validation suceeded.
* Corresponds to {@link NetworkCapabilities.NET_CAPABILITY_VALIDATED}.
@@ -376,7 +389,7 @@ public abstract class NetworkAgent {
*
* @hide
*/
public static final int CMD_NETWORK_DISCONNECTED = BASE + 23;
public static final int CMD_NETWORK_DESTROYED = BASE + 23;
private static NetworkInfo getLegacyNetworkInfo(final NetworkAgentConfig config) {
final NetworkInfo ni = new NetworkInfo(config.legacyType, config.legacySubType,
@@ -581,8 +594,8 @@ public abstract class NetworkAgent {
onNetworkCreated();
break;
}
case CMD_NETWORK_DISCONNECTED: {
onNetworkDisconnected();
case CMD_NETWORK_DESTROYED: {
onNetworkDestroyed();
break;
}
}
@@ -732,8 +745,8 @@ public abstract class NetworkAgent {
}
@Override
public void onNetworkDisconnected() {
mHandler.sendMessage(mHandler.obtainMessage(CMD_NETWORK_DISCONNECTED));
public void onNetworkDestroyed() {
mHandler.sendMessage(mHandler.obtainMessage(CMD_NETWORK_DESTROYED));
}
}
@@ -850,6 +863,29 @@ public abstract class NetworkAgent {
queueOrSendNetworkInfo(mNetworkInfo);
}
/**
* Sets the value of the teardown delay.
*
* The teardown delay is the time between when the network disconnects and when the native
* network corresponding to this {@code NetworkAgent} is destroyed. By default, the native
* network is destroyed immediately. If {@code teardownDelayMs} is non-zero, then when this
* network disconnects, the system will instead immediately mark the network as restricted
* and unavailable to unprivileged apps, but will defer destroying the native network until the
* teardown delay timer expires.
*
* The interfaces in use by this network will remain in use until the native network is
* destroyed and cannot be reused until {@link #onNetworkDestroyed()} is called.
*
* This method may be called at any time while the network is connected. It has no effect if
* the network is already disconnected and the teardown delay timer is running.
*
* @param teardownDelayMs the teardown delay to set, or 0 to disable teardown delay.
*/
public void setTeardownDelayMs(
@IntRange(from = 0, to = MAX_TEARDOWN_DELAY_MS) int teardownDelayMs) {
queueOrSendMessage(reg -> reg.sendTeardownDelayMs(teardownDelayMs));
}
/**
* Change the legacy subtype of this network agent.
*
@@ -1053,7 +1089,7 @@ public abstract class NetworkAgent {
/**
* Called when ConnectivityService has successfully destroy this NetworkAgent's native network.
*/
public void onNetworkDisconnected() {}
public void onNetworkDestroyed() {}
/**
* Requests that the network hardware send the specified packet at the specified interval.