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

Commit 825fe5d5 authored by Daniel Bright's avatar Daniel Bright Committed by Gerrit Code Review
Browse files

Merge "Add indication APIs to expose QOS from LTE and NR bearers"

parents bdbf808c 95588002
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -104,6 +104,8 @@ import android.telephony.data.DataCallResponse;
import android.telephony.data.DataCallResponse.HandoverFailureMode;
import android.telephony.data.DataProfile;
import android.telephony.data.DataService;
import android.telephony.data.Qos;
import android.telephony.data.QosSession;
import android.telephony.emergency.EmergencyNumber;
import android.text.TextUtils;
import android.util.Log;
@@ -2944,7 +2946,13 @@ public class RIL extends BaseCommands implements CommandsInterface {
            if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));

            try {
                if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_6)) {
                    android.hardware.radio.V1_6.IRadio radioProxy16 =
                            (android.hardware.radio.V1_6.IRadio) radioProxy;
                    radioProxy16.getDataCallList_1_6(rr.mSerial);
                } else {
                    radioProxy.getDataCallList(rr.mSerial);
                }
            } catch (RemoteException | RuntimeException e) {
                handleRadioProxyExceptionForRR(rr, "getDataCallList", e);
            }
@@ -7197,7 +7205,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
    }

    /**
     * Convert SetupDataCallResult defined in 1.0, 1.4, or 1.5 types.hal into DataCallResponse
     * Convert SetupDataCallResult defined in 1.0, 1.4, 1.5 or 1.6 types.hal into DataCallResponse
     * @param dcResult setup data call result
     * @return converted DataCallResponse object
     */
@@ -7213,6 +7221,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
        String[] dnses = null;
        String[] gateways = null;
        String[] pcscfs = null;
        Qos defaultQos = null;

        @HandoverFailureMode
        int handoverFailureMode = DataCallResponse.HANDOVER_FAILURE_MODE_LEGACY;
@@ -7220,6 +7229,7 @@ public class RIL extends BaseCommands implements CommandsInterface {
        int pduSessionId = DataCallResponse.PDU_SESSION_ID_NOT_SET;

        List<LinkAddress> laList = new ArrayList<>();
        List<QosSession> qosSessions = new ArrayList<>();

        if (dcResult instanceof android.hardware.radio.V1_0.SetupDataCallResult) {
            final android.hardware.radio.V1_0.SetupDataCallResult result =
@@ -7307,6 +7317,9 @@ public class RIL extends BaseCommands implements CommandsInterface {
            mtuV6 = result.mtuV6;
            handoverFailureMode = result.handoverFailureMode;
            pduSessionId = result.pduSessionId;
            defaultQos = Qos.create(result.defaultQos);
            qosSessions = result.qosSessions.stream().map(session ->
                    QosSession.create(session)).collect(Collectors.toList());
        } else {
            Rlog.e(RILJ_LOG_TAG, "Unsupported SetupDataCallResult " + dcResult);
            return null;
@@ -7373,6 +7386,8 @@ public class RIL extends BaseCommands implements CommandsInterface {
                .setMtuV6(mtuV6)
                .setHandoverFailureMode(handoverFailureMode)
                .setPduSessionId(pduSessionId)
                .setDefaultQos(defaultQos)
                .setQosSessions(qosSessions)
                .build();
    }

+12 −1
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ import android.telephony.data.DataCallResponse.HandoverFailureMode;
import android.telephony.data.DataProfile;
import android.telephony.data.DataService;
import android.telephony.data.DataServiceCallback;
import android.telephony.data.Qos;
import android.telephony.data.QosSession;
import android.text.TextUtils;
import android.util.LocalLog;
import android.util.Pair;
@@ -291,6 +293,8 @@ public class DataConnection extends StateMachine {
    private boolean mIsSuspended;
    private int mDownlinkBandwidth = 14;
    private int mUplinkBandwidth = 14;
    private Qos mDefaultQos = null;
    private List<QosSession> mQosSessions = new ArrayList<>();

    /** The corresponding network agent for this data connection. */
    private DcNetworkAgent mNetworkAgent;
@@ -588,6 +592,11 @@ public class DataConnection extends StateMachine {
        return mPduSessionId;
    }

    public void updateQosParameters(DataCallResponse response) {
        mDefaultQos = response.getDefaultQos();
        mQosSessions = response.getQosSessions();
    }

    @VisibleForTesting
    public UpdateLinkPropertyResult updateLinkProperty(DataCallResponse newState) {
        UpdateLinkPropertyResult result = new UpdateLinkPropertyResult(mLinkProperties);
@@ -1197,7 +1206,7 @@ public class DataConnection extends StateMachine {
            if (DBG) log("onSetupConnectionCompleted received successful DataCallResponse");
            mCid = response.getId();
            updatePcscfAddr(response);

            updateQosParameters(response);
            result = updateLinkProperty(response).setupResult;

            setPduSessionId(response.getPduSessionId());
@@ -3457,6 +3466,8 @@ public class DataConnection extends StateMachine {
        pw.println("mUnmeteredOverride=" + mUnmeteredOverride);
        pw.println("mDownlinkBandwidth" + mDownlinkBandwidth);
        pw.println("mUplinkBandwidth=" + mUplinkBandwidth);
        pw.println("mDefaultQos=" + mDefaultQos);
        pw.println("mQosSessions=" + mQosSessions);
        pw.println("disallowedApnTypes="
                + ApnSetting.getApnTypesStringFromBitmask(getDisallowedApnTypes()));
        pw.println("mInstanceNumber=" + mInstanceNumber);
+1 −0
Original line number Diff line number Diff line
@@ -303,6 +303,7 @@ public class DcController extends Handler {

                    // Its active so update the DataConnections link properties
                    UpdateLinkPropertyResult result = dc.updateLinkProperty(newState);
                    dc.updateQosParameters(newState);
                    if (result.oldLp.equals(result.newLp)) {
                        if (DBG) log("onDataStateChanged: no change");
                    } else {
+111 −0
Original line number Diff line number Diff line
@@ -156,6 +156,11 @@ import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataCallResponse;
import android.telephony.data.DataProfile;
import android.telephony.data.EpsQos;
import android.telephony.data.NrQos;
import android.telephony.data.Qos;
import android.telephony.data.QosFilter;
import android.telephony.data.QosSession;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;

@@ -2175,6 +2180,7 @@ public class RILTest extends TelephonyTest {
                .setMtu(1500)
                .setMtuV4(1500)
                .setMtuV6(1500)
                .setQosSessions(new ArrayList<>())
                .build();

        assertEquals(response, RIL.convertDataCallResult(result10));
@@ -2248,9 +2254,114 @@ public class RILTest extends TelephonyTest {
                .setMtu(3000)
                .setMtuV4(1500)
                .setMtuV6(3000)
                .setQosSessions(new ArrayList<>())
                .build();

        assertEquals(response, RIL.convertDataCallResult(result15));

        // Test V1.6 SetupDataCallResult
        android.hardware.radio.V1_6.SetupDataCallResult result16 =
                new android.hardware.radio.V1_6.SetupDataCallResult();
        result16.cause = android.hardware.radio.V1_4.DataCallFailCause.NONE;
        result16.suggestedRetryTime = -1;
        result16.cid = 0;
        result16.active = android.hardware.radio.V1_4.DataConnActiveStatus.ACTIVE;
        result16.type = android.hardware.radio.V1_4.PdpProtocolType.IPV4V6;
        result16.ifname = "ifname";

        result16.addresses = new ArrayList<>(Arrays.asList(la1, la2));
        result16.dnses = new ArrayList<>(Arrays.asList("10.0.2.3", "fd00:976a::9"));
        result16.gateways = new ArrayList<>(Arrays.asList("10.0.2.15", "fe80::2"));
        result16.pcscf = new ArrayList<>(Arrays.asList(
                "fd00:976a:c206:20::6", "fd00:976a:c206:20::9", "fd00:976a:c202:1d::9"));
        result16.mtuV4 = 1500;
        result16.mtuV6 = 3000;
        result16.handoverFailureMode = android.hardware.radio.V1_6.HandoverFailureMode.LEGACY;

        // Build android.hardware.radio.V1_6.EpsQos
        android.hardware.radio.V1_6.EpsQos halEpsQos = new android.hardware.radio.V1_6.EpsQos();
        halEpsQos.qci = 4;
        halEpsQos.downlink.maxBitrateKbps = 4;
        halEpsQos.downlink.guaranteedBitrateKbps = 7;
        halEpsQos.uplink.maxBitrateKbps = 5;
        halEpsQos.uplink.guaranteedBitrateKbps = 8;

        result16.defaultQos.eps(halEpsQos);

        // android.hardware.radio.V1_6.PortRange
        android.hardware.radio.V1_6.PortRange localPort =
                new android.hardware.radio.V1_6.PortRange();
        android.hardware.radio.V1_6.PortRange remotePort =
                new android.hardware.radio.V1_6.PortRange();
        localPort.start = 123;
        localPort.end = 123;
        remotePort.start = 223;
        remotePort.end = 223;

        // android.hardware.radio.V1_6.QosFilter
        android.hardware.radio.V1_6.QosFilter halQosFilter =
                new android.hardware.radio.V1_6.QosFilter();
        halQosFilter.localAddresses = new ArrayList<>(Arrays.asList("122.22.22.22"));
        halQosFilter.remoteAddresses = new ArrayList<>(Arrays.asList("144.44.44.44"));
        halQosFilter.localPort.range(localPort);
        halQosFilter.remotePort.range(remotePort);
        halQosFilter.protocol = android.hardware.radio.V1_6.QosProtocol.UDP;
        halQosFilter.tos.value((byte)7);
        halQosFilter.flowLabel.value(987);
        halQosFilter.spi.value(678);
        halQosFilter.direction = android.hardware.radio.V1_6.QosFilterDirection.BIDIRECTIONAL;
        halQosFilter.precedence = 45;

        // android.hardware.radio.V1_6.QosSession
        android.hardware.radio.V1_6.QosSession halQosSession =
                new android.hardware.radio.V1_6.QosSession();
        halQosSession.qosSessionId = 1234;
        halQosSession.qos.eps(halEpsQos);
        halQosSession.qosFilters = new ArrayList<>(Arrays.asList(halQosFilter));

        result16.qosSessions = new ArrayList<>(Arrays.asList(halQosSession));

        EpsQos epsQos = new EpsQos(halEpsQos);
        QosFilter qosFilter = new QosFilter(
                Arrays.asList(
                        new LinkAddress(InetAddresses.parseNumericAddress("122.22.22.22"), 32)),
                Arrays.asList(
                        new LinkAddress(InetAddresses.parseNumericAddress("144.44.44.44"), 32)),
                new QosFilter.PortRange(123, 123), new QosFilter.PortRange(223, 223),
                QosFilter.QOS_PROTOCOL_UDP, 7, 987, 678,
                QosFilter.QOS_FILTER_DIRECTION_BIDIRECTIONAL, 45);
        ArrayList<QosFilter> qosFilters = new ArrayList<>();
        ArrayList<QosSession> qosSessions = new ArrayList<>();
        qosFilters.add(qosFilter);
        QosSession qosSession = new QosSession(1234, epsQos, qosFilters);
        qosSessions.add(qosSession);

        response = new DataCallResponse.Builder()
                .setCause(0)
                .setId(0)
                .setLinkStatus(2)
                .setProtocolType(ApnSetting.PROTOCOL_IPV4V6)
                .setInterfaceName("ifname")
                .setAddresses(Arrays.asList(
                        new LinkAddress(InetAddresses.parseNumericAddress("10.0.2.15"), 32),
                        new LinkAddress("2607:fb90:a620:651d:eabe:f8da:c107:44be/64")))
                .setDnsAddresses(Arrays.asList(InetAddresses.parseNumericAddress("10.0.2.3"),
                        InetAddresses.parseNumericAddress("fd00:976a::9")))
                .setGatewayAddresses(Arrays.asList(InetAddresses.parseNumericAddress("10.0.2.15"),
                        InetAddresses.parseNumericAddress("fe80::2")))
                .setPcscfAddresses(Arrays.asList(
                        InetAddresses.parseNumericAddress("fd00:976a:c206:20::6"),
                        InetAddresses.parseNumericAddress("fd00:976a:c206:20::9"),
                        InetAddresses.parseNumericAddress("fd00:976a:c202:1d::9")))
                .setMtu(3000)
                .setMtuV4(1500)
                .setMtuV6(3000)
                .setHandoverFailureMode(DataCallResponse.HANDOVER_FAILURE_MODE_LEGACY)
                .setDefaultQos(epsQos)
                .setQosSessions(qosSessions)
                .build();

        assertEquals(response, RIL.convertDataCallResult(result16));
    }

    @Test
+4 −0
Original line number Diff line number Diff line
@@ -27,9 +27,11 @@ import android.net.LinkAddress;
import android.os.Parcel;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataCallResponse;
import android.telephony.data.EpsQos;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;

import java.util.ArrayList;
import java.util.Arrays;

public class DataCallResponseTest extends AndroidTestCase {
@@ -51,6 +53,8 @@ public class DataCallResponseTest extends AndroidTestCase {
                        Arrays.asList(InetAddresses.parseNumericAddress(FAKE_PCSCF_ADDRESS)))
                .setMtuV4(1440)
                .setMtuV6(1440)
                .setDefaultQos(new EpsQos())
                .setQosSessions(new ArrayList<>())
                .build();

        Parcel p = Parcel.obtain();