Guess the right encap/timeout for the VCN

Bug: 269715746
Test: in aosp/2554530
Change-Id: Ia52db359691f6076ed04dc9108c26410c7aeb372
This commit is contained in:
Chalard Jean
2023-04-17 19:23:59 +09:00
parent a750dcaaa6
commit 995dda7648

View File

@@ -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");