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_PARTIAL_CONNECTIVITY,
|
||||||
NET_CAPABILITY_TEMPORARILY_NOT_METERED,
|
NET_CAPABILITY_TEMPORARILY_NOT_METERED,
|
||||||
NET_CAPABILITY_OEM_PRIVATE,
|
NET_CAPABILITY_OEM_PRIVATE,
|
||||||
|
NET_CAPABILITY_VEHICLE_INTERNAL,
|
||||||
})
|
})
|
||||||
public @interface NetCapability { }
|
public @interface NetCapability { }
|
||||||
|
|
||||||
@@ -357,8 +358,17 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
@SystemApi
|
@SystemApi
|
||||||
public static final int NET_CAPABILITY_OEM_PRIVATE = 26;
|
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 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
|
* 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
|
@VisibleForTesting
|
||||||
/* package */ static final long RESTRICTED_CAPABILITIES =
|
/* package */ static final long RESTRICTED_CAPABILITIES =
|
||||||
(1 << NET_CAPABILITY_CBS) |
|
(1 << NET_CAPABILITY_CBS)
|
||||||
(1 << NET_CAPABILITY_DUN) |
|
| (1 << NET_CAPABILITY_DUN)
|
||||||
(1 << NET_CAPABILITY_EIMS) |
|
| (1 << NET_CAPABILITY_EIMS)
|
||||||
(1 << NET_CAPABILITY_FOTA) |
|
| (1 << NET_CAPABILITY_FOTA)
|
||||||
(1 << NET_CAPABILITY_IA) |
|
| (1 << NET_CAPABILITY_IA)
|
||||||
(1 << NET_CAPABILITY_IMS) |
|
| (1 << NET_CAPABILITY_IMS)
|
||||||
(1 << NET_CAPABILITY_RCS) |
|
| (1 << NET_CAPABILITY_MCX)
|
||||||
(1 << NET_CAPABILITY_XCAP) |
|
| (1 << NET_CAPABILITY_RCS)
|
||||||
(1 << NET_CAPABILITY_MCX);
|
| (1 << NET_CAPABILITY_VEHICLE_INTERNAL)
|
||||||
|
| (1 << NET_CAPABILITY_XCAP);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Capabilities that force network to be restricted.
|
* 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_PARTIAL_CONNECTIVITY: return "PARTIAL_CONNECTIVITY";
|
||||||
case NET_CAPABILITY_TEMPORARILY_NOT_METERED: return "TEMPORARILY_NOT_METERED";
|
case NET_CAPABILITY_TEMPORARILY_NOT_METERED: return "TEMPORARILY_NOT_METERED";
|
||||||
case NET_CAPABILITY_OEM_PRIVATE: return "OEM_PRIVATE";
|
case NET_CAPABILITY_OEM_PRIVATE: return "OEM_PRIVATE";
|
||||||
|
case NET_CAPABILITY_VEHICLE_INTERNAL: return "NET_CAPABILITY_VEHICLE_INTERNAL";
|
||||||
default: return Integer.toString(capability);
|
default: return Integer.toString(capability);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ import static android.system.OsConstants.IPPROTO_UDP;
|
|||||||
import static java.util.Map.Entry;
|
import static java.util.Map.Entry;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
|
import android.annotation.BoolRes;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
@@ -986,6 +987,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
mDefaultWifiRequest = createDefaultInternetRequestForTransport(
|
mDefaultWifiRequest = createDefaultInternetRequestForTransport(
|
||||||
NetworkCapabilities.TRANSPORT_WIFI, NetworkRequest.Type.BACKGROUND_REQUEST);
|
NetworkCapabilities.TRANSPORT_WIFI, NetworkRequest.Type.BACKGROUND_REQUEST);
|
||||||
|
|
||||||
|
mDefaultVehicleRequest = createAlwaysOnRequestForCapability(
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_VEHICLE_INTERNAL,
|
||||||
|
NetworkRequest.Type.BACKGROUND_REQUEST);
|
||||||
|
|
||||||
mHandlerThread = mDeps.makeHandlerThread();
|
mHandlerThread = mDeps.makeHandlerThread();
|
||||||
mHandlerThread.start();
|
mHandlerThread.start();
|
||||||
mHandler = new InternalHandler(mHandlerThread.getLooper());
|
mHandler = new InternalHandler(mHandlerThread.getLooper());
|
||||||
@@ -1192,6 +1197,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
return new NetworkRequest(netCap, TYPE_NONE, nextNetworkRequestId(), type);
|
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.
|
// Used only for testing.
|
||||||
// TODO: Delete this and either:
|
// TODO: Delete this and either:
|
||||||
// 1. Give FakeSettingsProvider the ability to send settings change notifications (requires
|
// 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);
|
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(
|
private void handleAlwaysOnNetworkRequest(
|
||||||
NetworkRequest networkRequest, String settingName, boolean defaultValue) {
|
NetworkRequest networkRequest, String settingName, boolean defaultValue) {
|
||||||
final boolean enable = toBool(Settings.Global.getInt(
|
final boolean enable = toBool(Settings.Global.getInt(
|
||||||
mContext.getContentResolver(), settingName, encodeBool(defaultValue)));
|
mContext.getContentResolver(), settingName, encodeBool(defaultValue)));
|
||||||
|
handleAlwaysOnNetworkRequest(networkRequest, enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleAlwaysOnNetworkRequest(NetworkRequest networkRequest, boolean enable) {
|
||||||
final boolean isEnabled = (mNetworkRequests.get(networkRequest) != null);
|
final boolean isEnabled = (mNetworkRequests.get(networkRequest) != null);
|
||||||
if (enable == isEnabled) {
|
if (enable == isEnabled) {
|
||||||
return; // Nothing to do.
|
return; // Nothing to do.
|
||||||
@@ -1229,9 +1252,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
|
|
||||||
private void handleConfigureAlwaysOnNetworks() {
|
private void handleConfigureAlwaysOnNetworks() {
|
||||||
handleAlwaysOnNetworkRequest(
|
handleAlwaysOnNetworkRequest(
|
||||||
mDefaultMobileDataRequest,Settings.Global.MOBILE_DATA_ALWAYS_ON, true);
|
mDefaultMobileDataRequest, Settings.Global.MOBILE_DATA_ALWAYS_ON, true);
|
||||||
handleAlwaysOnNetworkRequest(mDefaultWifiRequest, Settings.Global.WIFI_ALWAYS_REQUESTED,
|
handleAlwaysOnNetworkRequest(mDefaultWifiRequest, Settings.Global.WIFI_ALWAYS_REQUESTED,
|
||||||
false);
|
false);
|
||||||
|
handleAlwaysOnNetworkRequest(mDefaultVehicleRequest,
|
||||||
|
com.android.internal.R.bool.config_vehicleInternalNetworkAlwaysRequested);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerSettingsCallbacks() {
|
private void registerSettingsCallbacks() {
|
||||||
@@ -6011,6 +6036,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
// priority networks like ethernet are active.
|
// priority networks like ethernet are active.
|
||||||
private final NetworkRequest mDefaultWifiRequest;
|
private final NetworkRequest mDefaultWifiRequest;
|
||||||
|
|
||||||
|
// Request used to optionally keep vehicle internal network always active
|
||||||
|
private final NetworkRequest mDefaultVehicleRequest;
|
||||||
|
|
||||||
private NetworkAgentInfo getDefaultNetwork() {
|
private NetworkAgentInfo getDefaultNetwork() {
|
||||||
return mDefaultNetworkNai;
|
return mDefaultNetworkNai;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user