diff options
Diffstat (limited to 'services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java')
-rw-r--r-- | services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java b/services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java index 36192537493a..474253223628 100644 --- a/services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java +++ b/services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java @@ -115,6 +115,10 @@ public class IpSecPacketLossDetector extends NetworkMetricMonitor { // validation failure. private static final int IPSEC_PACKET_LOSS_PERCENT_THRESHOLD_DEFAULT = 12; + /** Carriers can disable the detector by setting the threshold to -1 */ + @VisibleForTesting(visibility = Visibility.PRIVATE) + static final int IPSEC_PACKET_LOSS_PERCENT_THRESHOLD_DISABLE_DETECTOR = -1; + private static final int POLL_IPSEC_STATE_INTERVAL_SECONDS_DEFAULT = 20; // By default, there's no maximum limit enforced @@ -271,7 +275,10 @@ public class IpSecPacketLossDetector extends NetworkMetricMonitor { // When multiple parallel inbound transforms are created, NetworkMetricMonitor will be // enabled on the last one as a sample mInboundTransform = inboundTransform; - start(); + + if (!Flags.allowDisableIpsecLossDetector() || canStart()) { + start(); + } } @Override @@ -284,6 +291,14 @@ public class IpSecPacketLossDetector extends NetworkMetricMonitor { mPacketLossRatePercentThreshold = getPacketLossRatePercentThreshold(carrierConfig); mMaxSeqNumIncreasePerSecond = getMaxSeqNumIncreasePerSecond(carrierConfig); } + + if (Flags.allowDisableIpsecLossDetector() && canStart() != isStarted()) { + if (canStart()) { + start(); + } else { + stop(); + } + } } @Override @@ -298,6 +313,12 @@ public class IpSecPacketLossDetector extends NetworkMetricMonitor { mHandler.postDelayed(new PollIpSecStateRunnable(), mCancellationToken, 0L); } + private boolean canStart() { + return mInboundTransform != null + && mPacketLossRatePercentThreshold + != IPSEC_PACKET_LOSS_PERCENT_THRESHOLD_DISABLE_DETECTOR; + } + @Override protected void start() { super.start(); |