Keep Vehicle internal network always up
Bug: 171801262 Test: Boot with and without overlay set and check ifconfig Change-Id: I1fd332caf3e09924abcfec9c2c137363be7873e4
This commit is contained in:
@@ -171,6 +171,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
NET_CAPABILITY_PARTIAL_CONNECTIVITY,
|
||||
NET_CAPABILITY_TEMPORARILY_NOT_METERED,
|
||||
NET_CAPABILITY_OEM_PRIVATE,
|
||||
NET_CAPABILITY_VEHICLE_INTERNAL,
|
||||
})
|
||||
public @interface NetCapability { }
|
||||
|
||||
@@ -357,8 +358,17 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
@SystemApi
|
||||
public static final int NET_CAPABILITY_OEM_PRIVATE = 26;
|
||||
|
||||
/**
|
||||
* Indicates this is an internal vehicle network, meant to communicate with other
|
||||
* automotive systems.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int NET_CAPABILITY_VEHICLE_INTERNAL = 27;
|
||||
|
||||
private static final int MIN_NET_CAPABILITY = NET_CAPABILITY_MMS;
|
||||
private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_OEM_PRIVATE;
|
||||
private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_VEHICLE_INTERNAL;
|
||||
|
||||
/**
|
||||
* Network capabilities that are expected to be mutable, i.e., can change while a particular
|
||||
@@ -401,15 +411,16 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
*/
|
||||
@VisibleForTesting
|
||||
/* package */ static final long RESTRICTED_CAPABILITIES =
|
||||
(1 << NET_CAPABILITY_CBS) |
|
||||
(1 << NET_CAPABILITY_DUN) |
|
||||
(1 << NET_CAPABILITY_EIMS) |
|
||||
(1 << NET_CAPABILITY_FOTA) |
|
||||
(1 << NET_CAPABILITY_IA) |
|
||||
(1 << NET_CAPABILITY_IMS) |
|
||||
(1 << NET_CAPABILITY_RCS) |
|
||||
(1 << NET_CAPABILITY_XCAP) |
|
||||
(1 << NET_CAPABILITY_MCX);
|
||||
(1 << NET_CAPABILITY_CBS)
|
||||
| (1 << NET_CAPABILITY_DUN)
|
||||
| (1 << NET_CAPABILITY_EIMS)
|
||||
| (1 << NET_CAPABILITY_FOTA)
|
||||
| (1 << NET_CAPABILITY_IA)
|
||||
| (1 << NET_CAPABILITY_IMS)
|
||||
| (1 << NET_CAPABILITY_MCX)
|
||||
| (1 << NET_CAPABILITY_RCS)
|
||||
| (1 << NET_CAPABILITY_VEHICLE_INTERNAL)
|
||||
| (1 << NET_CAPABILITY_XCAP);
|
||||
|
||||
/**
|
||||
* Capabilities that force network to be restricted.
|
||||
@@ -1939,6 +1950,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
case NET_CAPABILITY_PARTIAL_CONNECTIVITY: return "PARTIAL_CONNECTIVITY";
|
||||
case NET_CAPABILITY_TEMPORARILY_NOT_METERED: return "TEMPORARILY_NOT_METERED";
|
||||
case NET_CAPABILITY_OEM_PRIVATE: return "OEM_PRIVATE";
|
||||
case NET_CAPABILITY_VEHICLE_INTERNAL: return "NET_CAPABILITY_VEHICLE_INTERNAL";
|
||||
default: return Integer.toString(capability);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,6 +62,7 @@ import static android.system.OsConstants.IPPROTO_UDP;
|
||||
import static java.util.Map.Entry;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.BoolRes;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.app.AppOpsManager;
|
||||
@@ -986,6 +987,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
mDefaultWifiRequest = createDefaultInternetRequestForTransport(
|
||||
NetworkCapabilities.TRANSPORT_WIFI, NetworkRequest.Type.BACKGROUND_REQUEST);
|
||||
|
||||
mDefaultVehicleRequest = createAlwaysOnRequestForCapability(
|
||||
NetworkCapabilities.NET_CAPABILITY_VEHICLE_INTERNAL,
|
||||
NetworkRequest.Type.BACKGROUND_REQUEST);
|
||||
|
||||
mHandlerThread = mDeps.makeHandlerThread();
|
||||
mHandlerThread.start();
|
||||
mHandler = new InternalHandler(mHandlerThread.getLooper());
|
||||
@@ -1192,6 +1197,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
return new NetworkRequest(netCap, TYPE_NONE, nextNetworkRequestId(), type);
|
||||
}
|
||||
|
||||
private NetworkRequest createAlwaysOnRequestForCapability(int capability,
|
||||
NetworkRequest.Type type) {
|
||||
final NetworkCapabilities netCap = new NetworkCapabilities();
|
||||
netCap.clearAll();
|
||||
netCap.addCapability(capability);
|
||||
netCap.setRequestorUidAndPackageName(Process.myUid(), mContext.getPackageName());
|
||||
return new NetworkRequest(netCap, TYPE_NONE, nextNetworkRequestId(), type);
|
||||
}
|
||||
|
||||
// Used only for testing.
|
||||
// TODO: Delete this and either:
|
||||
// 1. Give FakeSettingsProvider the ability to send settings change notifications (requires
|
||||
@@ -1209,10 +1223,19 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
mHandler.sendEmptyMessage(EVENT_PRIVATE_DNS_SETTINGS_CHANGED);
|
||||
}
|
||||
|
||||
private void handleAlwaysOnNetworkRequest(NetworkRequest networkRequest, @BoolRes int id) {
|
||||
final boolean enable = mContext.getResources().getBoolean(id);
|
||||
handleAlwaysOnNetworkRequest(networkRequest, enable);
|
||||
}
|
||||
|
||||
private void handleAlwaysOnNetworkRequest(
|
||||
NetworkRequest networkRequest, String settingName, boolean defaultValue) {
|
||||
final boolean enable = toBool(Settings.Global.getInt(
|
||||
mContext.getContentResolver(), settingName, encodeBool(defaultValue)));
|
||||
handleAlwaysOnNetworkRequest(networkRequest, enable);
|
||||
}
|
||||
|
||||
private void handleAlwaysOnNetworkRequest(NetworkRequest networkRequest, boolean enable) {
|
||||
final boolean isEnabled = (mNetworkRequests.get(networkRequest) != null);
|
||||
if (enable == isEnabled) {
|
||||
return; // Nothing to do.
|
||||
@@ -1229,9 +1252,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
private void handleConfigureAlwaysOnNetworks() {
|
||||
handleAlwaysOnNetworkRequest(
|
||||
mDefaultMobileDataRequest,Settings.Global.MOBILE_DATA_ALWAYS_ON, true);
|
||||
mDefaultMobileDataRequest, Settings.Global.MOBILE_DATA_ALWAYS_ON, true);
|
||||
handleAlwaysOnNetworkRequest(mDefaultWifiRequest, Settings.Global.WIFI_ALWAYS_REQUESTED,
|
||||
false);
|
||||
handleAlwaysOnNetworkRequest(mDefaultVehicleRequest,
|
||||
com.android.internal.R.bool.config_vehicleInternalNetworkAlwaysRequested);
|
||||
}
|
||||
|
||||
private void registerSettingsCallbacks() {
|
||||
@@ -6011,6 +6036,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
// priority networks like ethernet are active.
|
||||
private final NetworkRequest mDefaultWifiRequest;
|
||||
|
||||
// Request used to optionally keep vehicle internal network always active
|
||||
private final NetworkRequest mDefaultVehicleRequest;
|
||||
|
||||
private NetworkAgentInfo getDefaultNetwork() {
|
||||
return mDefaultNetworkNai;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user