Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ab315c59 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

Keep Vehicle internal network always up

Bug: 171801262
Test: Boot with and without overlay set and check ifconfig
Change-Id: I1fd332caf3e09924abcfec9c2c137363be7873e4
parent 2458e4ad
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 {
+22 −10
Original line number Diff line number Diff line
@@ -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);
        }
    }
+4 −0
Original line number Diff line number Diff line
@@ -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">
        <!--
+1 −0
Original line number Diff line number Diff line
@@ -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" />
+29 −1
Original line number Diff line number Diff line
@@ -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.
@@ -1232,6 +1255,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
                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;
    }