Loading src/java/com/android/internal/telephony/data/DataNetwork.java +42 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -79,6 +80,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; Loading Loading @@ -846,6 +848,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. * Loading @@ -862,6 +886,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(); Loading src/java/com/android/internal/telephony/data/TelephonyNetworkAgent.java +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java +96 −0 Original line number Diff line number Diff line Loading @@ -29,9 +29,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.os.AsyncResult; Loading Loading @@ -70,6 +73,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; Loading @@ -84,6 +88,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<>(); Loading Loading @@ -224,6 +230,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()); Loading @@ -242,6 +258,7 @@ public class DataNetworkTest extends TelephonyTest { .getPreferredTransportByNetworkCapability(anyInt()); doReturn(DataNetwork.BANDWIDTH_SOURCE_BANDWIDTH_ESTIMATOR) .when(mDataConfigManager).getBandwidthEstimateSource(); doReturn(FAKE_IMSI).when(mPhone).getSubscriberId(); } @After Loading Loading @@ -338,6 +355,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 Loading Loading @@ -703,4 +785,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(); } } Loading
src/java/com/android/internal/telephony/data/DataNetwork.java +42 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -79,6 +80,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; Loading Loading @@ -846,6 +848,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. * Loading @@ -862,6 +886,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(); Loading
src/java/com/android/internal/telephony/data/TelephonyNetworkAgent.java +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java +96 −0 Original line number Diff line number Diff line Loading @@ -29,9 +29,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.os.AsyncResult; Loading Loading @@ -70,6 +73,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; Loading @@ -84,6 +88,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<>(); Loading Loading @@ -224,6 +230,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()); Loading @@ -242,6 +258,7 @@ public class DataNetworkTest extends TelephonyTest { .getPreferredTransportByNetworkCapability(anyInt()); doReturn(DataNetwork.BANDWIDTH_SOURCE_BANDWIDTH_ESTIMATOR) .when(mDataConfigManager).getBandwidthEstimateSource(); doReturn(FAKE_IMSI).when(mPhone).getSubscriberId(); } @After Loading Loading @@ -338,6 +355,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 Loading Loading @@ -703,4 +785,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(); } }