diff options
| author | 2023-04-17 19:23:59 +0900 | |
|---|---|---|
| committer | 2023-05-01 09:55:03 +0000 | |
| commit | 0eec13f3e60a06dcdf777da5cb8664930621c0c0 (patch) | |
| tree | 25517f51dc52ef4c0accc9b2bf84ac89d1e61434 | |
| parent | 2ba8900761cd270a9871fe0f752d6d2c7a6e4836 (diff) | |
Guess the right encap/timeout for the VCN
Bug: 269715746
Test: in aosp/2554530
(cherry picked from https://android-review.googlesource.com/q/commit:995dda76486c2dda5b67ef14289406952f03a4cf)
Merged-In: Ia52db359691f6076ed04dc9108c26410c7aeb372
Change-Id: Ia52db359691f6076ed04dc9108c26410c7aeb372
| -rw-r--r-- | services/core/java/com/android/server/connectivity/Vpn.java | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java index 1dc2725feb1b..d23414485cd6 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -85,6 +85,7 @@ import android.net.NetworkScore; import android.net.NetworkSpecifier; import android.net.RouteInfo; import android.net.TelephonyNetworkSpecifier; +import android.net.TransportInfo; import android.net.UidRangeParcel; import android.net.UnderlyingNetworkInfo; 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.IkeProtocolException; import android.net.ipsec.ike.exceptions.IkeTimeoutException; +import android.net.vcn.VcnGatewayConnectionConfig; +import android.net.vcn.VcnTransportInfo; import android.os.Binder; import android.os.Build.VERSION_CODES; import android.os.Bundle; @@ -3556,39 +3559,63 @@ public class Vpn { } 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) ? carrierconfig.ipVersion : ESP_IP_VERSION_AUTO; 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 + ")"); } return ipVersion; } 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) ? carrierconfig.encapType : ESP_ENCAP_TYPE_AUTO; 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 + ")"); } return encapType; } + private int guessNattKeepaliveTimerForNetwork() { - final CarrierConfigInfo carrierconfig = getCarrierConfig(); - final int natKeepalive = (carrierconfig != null) + final TransportInfo transportInfo = mUnderlyingNetworkCapabilities.getTransportInfo(); + 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; 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 + ")"); } - 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); if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { Log.d(TAG, "Underlying network is not a cellular network"); |