diff options
| author | 2020-12-14 13:42:51 -0800 | |
|---|---|---|
| committer | 2021-01-12 10:33:38 -0800 | |
| commit | ab315c597d4231359f02584c91e0eda11e15d03c (patch) | |
| tree | c2a93607e1d53a16f0a3d20bab08a738d310e44a | |
| parent | 2458e4ad5df42bd745522854c0d2d66188dc54f1 (diff) | |
Keep Vehicle internal network always up
Bug: 171801262
Test: Boot with and without overlay set and check ifconfig
Change-Id: I1fd332caf3e09924abcfec9c2c137363be7873e4
| -rw-r--r-- | core/api/system-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/net/NetworkCapabilities.java | 32 | ||||
| -rw-r--r-- | core/res/res/values/config.xml | 4 | ||||
| -rw-r--r-- | core/res/res/values/symbols.xml | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 30 | 
5 files changed, 57 insertions, 11 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index b4f139553271..e7c1398016dc 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -6235,6 +6235,7 @@ package android.net {      field public static final int NET_CAPABILITY_OEM_PAID = 22; // 0x16      field public static final int NET_CAPABILITY_OEM_PRIVATE = 26; // 0x1a      field public static final int NET_CAPABILITY_PARTIAL_CONNECTIVITY = 24; // 0x18 +    field public static final int NET_CAPABILITY_VEHICLE_INTERNAL = 27; // 0x1b    }    public static final class NetworkCapabilities.Builder { diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index 1a37fb9fb690..286cdf9e38ff 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -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);          }      } diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 42a658e50073..d30efa95edff 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -455,6 +455,10 @@          -->      </string-array> +    <!-- Whether the internal vehicle network should remain active even when no +         apps requested it. --> +    <bool name="config_vehicleInternalNetworkAlwaysRequested">false</bool> +      <!-- Configuration of network interfaces that support WakeOnLAN -->      <string-array translatable="false" name="config_wakeonlan_supported_interfaces">          <!-- diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index c505afe0509e..937716dbcf74 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -684,6 +684,7 @@    <java-symbol type="string" name="config_ethernet_iface_regex" />    <java-symbol type="string" name="not_checked" />    <java-symbol type="array" name="config_ethernet_interfaces" /> +  <java-symbol type="bool" name="config_vehicleInternalNetworkAlwaysRequested" />    <java-symbol type="array" name="config_wakeonlan_supported_interfaces" />    <java-symbol type="string" name="config_forceVoiceInteractionServicePackage" />    <java-symbol type="string" name="config_mms_user_agent" /> diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 01ef69b6654e..9c6c759a463c 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -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;      }  |