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

Commit a9a21d4b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Guess the right encap/timeout for the VCN" into udc-dev

parents 8c9fd0d8 0eec13f3
Loading
Loading
Loading
Loading
+36 −9
Original line number Original line Diff line number Diff line
@@ -85,6 +85,7 @@ import android.net.NetworkScore;
import android.net.NetworkSpecifier;
import android.net.NetworkSpecifier;
import android.net.RouteInfo;
import android.net.RouteInfo;
import android.net.TelephonyNetworkSpecifier;
import android.net.TelephonyNetworkSpecifier;
import android.net.TransportInfo;
import android.net.UidRangeParcel;
import android.net.UidRangeParcel;
import android.net.UnderlyingNetworkInfo;
import android.net.UnderlyingNetworkInfo;
import android.net.Uri;
import android.net.Uri;
@@ -107,6 +108,8 @@ import android.net.ipsec.ike.exceptions.IkeNetworkLostException;
import android.net.ipsec.ike.exceptions.IkeNonProtocolException;
import android.net.ipsec.ike.exceptions.IkeNonProtocolException;
import android.net.ipsec.ike.exceptions.IkeProtocolException;
import android.net.ipsec.ike.exceptions.IkeProtocolException;
import android.net.ipsec.ike.exceptions.IkeTimeoutException;
import android.net.ipsec.ike.exceptions.IkeTimeoutException;
import android.net.vcn.VcnGatewayConnectionConfig;
import android.net.vcn.VcnTransportInfo;
import android.os.Binder;
import android.os.Binder;
import android.os.Build.VERSION_CODES;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
import android.os.Bundle;
@@ -3556,39 +3559,63 @@ public class Vpn {
        }
        }


        private int guessEspIpVersionForNetwork() {
        private int guessEspIpVersionForNetwork() {
            final CarrierConfigInfo carrierconfig = getCarrierConfig();
            if (mUnderlyingNetworkCapabilities.getTransportInfo() instanceof VcnTransportInfo) {
                Log.d(TAG, "Running over VCN, esp IP version is auto");
                return ESP_IP_VERSION_AUTO;
            }
            final CarrierConfigInfo carrierconfig = getCarrierConfigForUnderlyingNetwork();
            final int ipVersion = (carrierconfig != null)
            final int ipVersion = (carrierconfig != null)
                    ? carrierconfig.ipVersion : ESP_IP_VERSION_AUTO;
                    ? carrierconfig.ipVersion : ESP_IP_VERSION_AUTO;
            if (carrierconfig != null) {
            if (carrierconfig != null) {
                Log.d(TAG, "Get customized IP version(" + ipVersion + ") on SIM("
                Log.d(TAG, "Get customized IP version (" + ipVersion + ") on SIM (mccmnc="
                        + carrierconfig.mccMnc + ")");
                        + carrierconfig.mccMnc + ")");
            }
            }
            return ipVersion;
            return ipVersion;
        }
        }


        private int guessEspEncapTypeForNetwork() {
        private int guessEspEncapTypeForNetwork() {
            final CarrierConfigInfo carrierconfig = getCarrierConfig();
            if (mUnderlyingNetworkCapabilities.getTransportInfo() instanceof VcnTransportInfo) {
                Log.d(TAG, "Running over VCN, encap type is auto");
                return ESP_ENCAP_TYPE_AUTO;
            }
            final CarrierConfigInfo carrierconfig = getCarrierConfigForUnderlyingNetwork();
            final int encapType = (carrierconfig != null)
            final int encapType = (carrierconfig != null)
                    ? carrierconfig.encapType : ESP_ENCAP_TYPE_AUTO;
                    ? carrierconfig.encapType : ESP_ENCAP_TYPE_AUTO;
            if (carrierconfig != null) {
            if (carrierconfig != null) {
                Log.d(TAG, "Get customized encap type(" + encapType + ") on SIM("
                Log.d(TAG, "Get customized encap type (" + encapType + ") on SIM (mccmnc="
                        + carrierconfig.mccMnc + ")");
                        + carrierconfig.mccMnc + ")");
            }
            }
            return encapType;
            return encapType;
        }
        }



        private int guessNattKeepaliveTimerForNetwork() {
        private int guessNattKeepaliveTimerForNetwork() {
            final CarrierConfigInfo carrierconfig = getCarrierConfig();
            final TransportInfo transportInfo = mUnderlyingNetworkCapabilities.getTransportInfo();
            final int natKeepalive = (carrierconfig != null)
            if (transportInfo instanceof VcnTransportInfo) {
                final int nattKeepaliveSec =
                        ((VcnTransportInfo) transportInfo).getMinUdpPort4500NatTimeoutSeconds();
                Log.d(TAG, "Running over VCN, keepalive timer : " + nattKeepaliveSec + "s");
                if (VcnGatewayConnectionConfig.MIN_UDP_PORT_4500_NAT_TIMEOUT_UNSET
                        != nattKeepaliveSec) {
                    return nattKeepaliveSec;
                }
                // else fall back to carrier config, if any
            }
            final CarrierConfigInfo carrierconfig = getCarrierConfigForUnderlyingNetwork();
            final int nattKeepaliveSec = (carrierconfig != null)
                    ? carrierconfig.keepaliveDelayMs : AUTOMATIC_KEEPALIVE_DELAY_SECONDS;
                    ? carrierconfig.keepaliveDelayMs : AUTOMATIC_KEEPALIVE_DELAY_SECONDS;
            if (carrierconfig != null) {
            if (carrierconfig != null) {
                Log.d(TAG, "Get customized keepalive(" + natKeepalive + ") on SIM("
                Log.d(TAG, "Get customized keepalive (" + nattKeepaliveSec + "s) on SIM (mccmnc="
                        + carrierconfig.mccMnc + ")");
                        + carrierconfig.mccMnc + ")");
            }
            }
            return natKeepalive;
            return nattKeepaliveSec;
        }
        }


        private CarrierConfigInfo getCarrierConfig() {
        /**
         * Returns the carrier config for the underlying network, or null if not a cell network.
         */
        @Nullable
        private CarrierConfigInfo getCarrierConfigForUnderlyingNetwork() {
            final int subId = getCellSubIdForNetworkCapabilities(mUnderlyingNetworkCapabilities);
            final int subId = getCellSubIdForNetworkCapabilities(mUnderlyingNetworkCapabilities);
            if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
                Log.d(TAG, "Underlying network is not a cellular network");
                Log.d(TAG, "Underlying network is not a cellular network");