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

Commit 22b100f6 authored by Jack Yu's avatar Jack Yu Committed by Gerrit Code Review
Browse files

Merge changes I2eaa020b,I98e6fe46,Ia98c0c0b

* changes:
  Fixed network agent config not set properly
  Increased the PDN deactivation time to 60 seconds
  Fixed setup data call failure triggers anomaly report
parents e8a82323 c295fb5b
Loading
Loading
Loading
Loading
+44 −2
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.os.SystemClock;
import android.provider.Telephony;
import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.AccessNetworkConstants.TransportType;
@@ -80,6 +81,7 @@ import android.util.Pair;
import android.util.SparseArray;
import android.util.SparseIntArray;

import com.android.internal.telephony.CarrierSignalAgent;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
@@ -232,7 +234,7 @@ public class DataNetwork extends StateMachine {

    /** The maximum time the data network can stay in {@link DisconnectingState}. */
    private static final long MAXIMUM_DISCONNECTING_DURATION_MILLIS =
            TimeUnit.SECONDS.toMillis(15);
            TimeUnit.SECONDS.toMillis(60);

    /** The maximum time the data network can stay in {@link HandoverState}. */
    private static final long MAXIMUM_HANDOVER_DURATION_MILLIS =
@@ -854,6 +856,28 @@ public class DataNetwork extends StateMachine {
        // Do not add more stuffs here.
    }

    /**
     * @return {@code true} if 464xlat should be skipped.
     */
    private boolean shouldSkip464Xlat() {
        if (mDataProfile.getApnSetting() != null) {
            switch (mDataProfile.getApnSetting().getSkip464Xlat()) {
                case Telephony.Carriers.SKIP_464XLAT_ENABLE:
                    return true;
                case Telephony.Carriers.SKIP_464XLAT_DISABLE:
                    return false;
                case Telephony.Carriers.SKIP_464XLAT_DEFAULT:
                default:
                    break;
            }
        }

        // As default, return true if ims and no internet
        final NetworkCapabilities nc = getNetworkCapabilities();
        return nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_IMS)
                && !nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
    }

    /**
     * Create the telephony network agent.
     *
@@ -870,6 +894,24 @@ public class DataNetwork extends StateMachine {
            configBuilder.setLegacyExtraInfo(mDataProfile.getApnSetting().getApnName());
        }

        final CarrierSignalAgent carrierSignalAgent = mPhone.getCarrierSignalAgent();
        if (carrierSignalAgent.hasRegisteredReceivers(TelephonyManager
                .ACTION_CARRIER_SIGNAL_REDIRECTED)) {
            // carrierSignal Receivers will place the carrier-specific provisioning notification
            configBuilder.setProvisioningNotificationEnabled(false);
        }

        // Fill the IMSI
        final String subscriberId = mPhone.getSubscriberId();
        if (!TextUtils.isEmpty(subscriberId)) {
            configBuilder.setSubscriberId(subscriberId);
        }

        // set skip464xlat if it is not default otherwise
        if (shouldSkip464Xlat()) {
            configBuilder.setNat64DetectionEnabled(false);
        }

        final NetworkFactory factory = PhoneFactory.getNetworkFactory(
                mPhone.getPhoneId());
        final NetworkProvider provider = (null == factory) ? null : factory.getProvider();
@@ -1344,7 +1386,7 @@ public class DataNetwork extends StateMachine {
                                    MAXIMUM_DISCONNECTING_DURATION_MILLIS) + " seconds.";
                    logl(message);
                    AnomalyReporter.reportAnomaly(
                            UUID.fromString("d0e4fa1c-c57b-4ba5-b4b6-8955487012cb"), message);
                            UUID.fromString("d0e4fa1c-c57b-4ba5-b4b6-8955487012cc"), message);
                    mFailCause = DataFailCause.LOST_CONNECTION;
                    transitionTo(mDisconnectedState);
                    break;
+8 −3
Original line number Diff line number Diff line
@@ -66,6 +66,9 @@ public class TelephonyNetworkAgent extends NetworkAgent implements NotifyQosSess
    /** The parent data network. */
    private final @NonNull DataNetwork mDataNetwork;

    /** Network agent config. For unit test use only. */
    private final @NonNull NetworkAgentConfig mNetworkAgentConfig;

    /** This is the id from {@link NetworkAgent#register()}. */
    private final int mId;

@@ -166,6 +169,7 @@ public class TelephonyNetworkAgent extends NetworkAgent implements NotifyQosSess
                config, provider);
        register();
        mDataNetwork = dataNetwork;
        mNetworkAgentConfig = config;
        mTelephonyNetworkAgentCallbacks.add(callback);
        mPhone = phone;
        mId = getNetwork().getNetId();
@@ -186,8 +190,9 @@ public class TelephonyNetworkAgent extends NetworkAgent implements NotifyQosSess
        }

        NetworkCapabilities capabilities = mDataNetwork.getNetworkCapabilities();
        if (capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_IMS)
                || capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
        if ((mDataNetwork.isConnected() || mDataNetwork.isHandoverInProgress())
                && (capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_IMS)
                || capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET))) {
            trackNetworkUnwanted();
        }

@@ -208,7 +213,7 @@ public class TelephonyNetworkAgent extends NetworkAgent implements NotifyQosSess
    private void trackNetworkUnwanted() {
        if (sNetworkUnwantedCounter.addOccurrence()) {
            AnomalyReporter.reportAnomaly(
                    UUID.fromString("9f3bc55b-bfa6-4e26-afaa-5031426a66d1"),
                    UUID.fromString("9f3bc55b-bfa6-4e26-afaa-5031426a66d2"),
                    "Network Unwanted called 12 times in 5 minutes.");
        }
    }
+96 −0
Original line number Diff line number Diff line
@@ -31,9 +31,12 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import android.annotation.NonNull;
import android.net.ConnectivityManager;
import android.net.InetAddresses;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.NetworkAgentConfig;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.net.vcn.VcnManager.VcnNetworkPolicyChangeListener;
@@ -74,6 +77,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -88,6 +92,8 @@ public class DataNetworkTest extends TelephonyTest {
    private static final int ADMIN_UID1 = 1234;
    private static final int ADMIN_UID2 = 5678;

    private static final String FAKE_IMSI = "123456789";

    private DataNetwork mDataNetworkUT;

    private final SparseArray<DataServiceManager> mDataServiceManagers = new SparseArray<>();
@@ -227,6 +233,16 @@ public class DataNetworkTest extends TelephonyTest {
                new AsyncResult(null, new Pair<>(dataRegState, rat), null)).sendToTarget();
    }

    private @NonNull NetworkAgentConfig getNetworkAgentConfig() throws Exception {
        Field field = DataNetwork.class.getDeclaredField("mNetworkAgent");
        field.setAccessible(true);
        TelephonyNetworkAgent networkAgent = (TelephonyNetworkAgent) field.get(mDataNetworkUT);

        field = TelephonyNetworkAgent.class.getDeclaredField("mNetworkAgentConfig");
        field.setAccessible(true);
        return (NetworkAgentConfig) field.get(networkAgent);
    }

    @Before
    public void setUp() throws Exception {
        super.setUp(getClass().getSimpleName());
@@ -245,6 +261,7 @@ public class DataNetworkTest extends TelephonyTest {
                .getPreferredTransportByNetworkCapability(anyInt());
        doReturn(DataNetwork.BANDWIDTH_SOURCE_BANDWIDTH_ESTIMATOR)
                .when(mDataConfigManager).getBandwidthEstimateSource();
        doReturn(FAKE_IMSI).when(mPhone).getSubscriberId();
    }

    @After
@@ -357,6 +374,71 @@ public class DataNetworkTest extends TelephonyTest {
        verify(mDataNetworkCallback).onConnected(eq(mDataNetworkUT));
    }

    @Test
    public void testCreateImsDataNetwork() throws Exception {
        DataNetworkController.NetworkRequestList
                networkRequestList = new DataNetworkController.NetworkRequestList();
        networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder()
                .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS)
                .build(), mPhone));

        setSuccessfulSetupDataResponse(mMockedWwanDataServiceManager, 123);

        mDataNetworkUT = new DataNetwork(mPhone, Looper.myLooper(), mDataServiceManagers,
                mImsDataProfile, networkRequestList,
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
                DataAllowedReason.NORMAL, mDataNetworkCallback);
        replaceInstance(DataNetwork.class, "mDataCallSessionStats",
                mDataNetworkUT, mDataCallSessionStats);
        sendServiceStateChangedEvent(ServiceState.STATE_IN_SERVICE,
                ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN);

        processAllMessages();
        verify(mSimulatedCommandsVerifier, never()).allocatePduSessionId(any(Message.class));
        verify(mMockedWwanDataServiceManager).setupDataCall(eq(AccessNetworkType.EUTRAN),
                eq(mImsDataProfile), eq(false), eq(false),
                eq(DataService.REQUEST_REASON_NORMAL), nullable(LinkProperties.class),
                eq(DataCallResponse.PDU_SESSION_ID_NOT_SET), nullable(NetworkSliceInfo.class),
                any(TrafficDescriptor.class), eq(true), any(Message.class));
        assertThat(mDataNetworkUT.getId()).isEqualTo(123);
        assertThat(networkRequestList.get(0).getState())
                .isEqualTo(TelephonyNetworkRequest.REQUEST_STATE_SATISFIED);
        LinkProperties lp = mDataNetworkUT.getLinkProperties();
        assertThat(lp.getAddresses()).containsExactly(
                InetAddresses.parseNumericAddress(IPV4_ADDRESS),
                InetAddresses.parseNumericAddress(IPV6_ADDRESS));

        ArgumentCaptor<PreciseDataConnectionState> pdcsCaptor =
                ArgumentCaptor.forClass(PreciseDataConnectionState.class);
        verify(mPhone, times(2)).notifyDataConnection(pdcsCaptor.capture());
        List<PreciseDataConnectionState> pdcsList = pdcsCaptor.getAllValues();

        assertThat(pdcsList.get(0).getApnSetting()).isEqualTo(mImsApnSetting);
        assertThat(pdcsList.get(0).getState()).isEqualTo(TelephonyManager.DATA_CONNECTING);
        assertThat(pdcsList.get(0).getId()).isEqualTo(-1);
        assertThat(pdcsList.get(0).getNetworkType()).isEqualTo(TelephonyManager.NETWORK_TYPE_LTE);
        assertThat(pdcsList.get(0).getTransportType())
                .isEqualTo(AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
        assertThat(pdcsList.get(0).getLinkProperties()).isEqualTo(new LinkProperties());

        assertThat(pdcsList.get(1).getApnSetting()).isEqualTo(mImsApnSetting);
        assertThat(pdcsList.get(1).getState()).isEqualTo(TelephonyManager.DATA_CONNECTED);
        assertThat(pdcsList.get(1).getId()).isEqualTo(123);
        assertThat(pdcsList.get(1).getNetworkType()).isEqualTo(TelephonyManager.NETWORK_TYPE_LTE);
        assertThat(pdcsList.get(1).getTransportType())
                .isEqualTo(AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
        assertThat(pdcsList.get(1).getLinkProperties().getAddresses().get(0))
                .isEqualTo(InetAddresses.parseNumericAddress(IPV4_ADDRESS));
        assertThat(pdcsList.get(1).getLinkProperties().getAddresses().get(1))
                .isEqualTo(InetAddresses.parseNumericAddress(IPV6_ADDRESS));
        assertThat(mDataNetworkUT.getNetworkCapabilities().hasCapability(
                NetworkCapabilities.NET_CAPABILITY_IMS)).isTrue();
        assertThat(mDataNetworkUT.getNetworkCapabilities().hasCapability(
                NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)).isFalse();

        verify(mDataNetworkCallback).onConnected(eq(mDataNetworkUT));
    }

    @Test
    public void testCreateDataNetworkOnEnterpriseSlice() throws Exception {
        DataNetworkController.NetworkRequestList
@@ -796,4 +878,18 @@ public class DataNetworkTest extends TelephonyTest {
                DataFailCause.RADIO_NOT_AVAILABLE));
        assertThat(mDataNetworkUT.isConnected()).isFalse();
    }

    @Test
    public void testNetworkAgentConfig() throws Exception {
        testCreateImsDataNetwork();
        NetworkAgentConfig networkAgentConfig = getNetworkAgentConfig();

        assertThat(networkAgentConfig.getSubscriberId()).isEqualTo(FAKE_IMSI);
        assertThat(networkAgentConfig.getLegacyExtraInfo()).isEqualTo(
                mImsApnSetting.getApnName());
        assertThat(networkAgentConfig.getLegacyType()).isEqualTo(ConnectivityManager.TYPE_MOBILE);
        assertThat(networkAgentConfig.getLegacyTypeName()).isEqualTo("MOBILE");
        assertThat(networkAgentConfig.legacySubType).isEqualTo(TelephonyManager.NETWORK_TYPE_LTE);
        assertThat(networkAgentConfig.skip464xlat).isTrue();
    }
}