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

Commit 4cdf970e authored by Jayachandran Chinnakkannu's avatar Jayachandran Chinnakkannu Committed by Automerger Merge Worker
Browse files

Merge "Add 5G/NR QOS support" am: 4e934db6 am: adc1b16a am: 94672738

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/1643742

Change-Id: I05fe8bf6a115e25bf993fabdfcbb80571550d257
parents 71d776ac 94672738
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.net.NetworkAgentConfig;
import android.net.NetworkCapabilities;
import android.net.NetworkProvider;
import android.net.QosFilter;
import android.net.QosSessionAttributes;
import android.net.SocketKeepalive;
import android.net.Uri;
import android.os.Message;
@@ -36,7 +37,7 @@ import android.telephony.AnomalyReporter;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.telephony.data.EpsBearerQosSessionAttributes;
import android.telephony.data.NrQosSessionAttributes;
import android.telephony.data.QosBearerSession;
import android.util.ArrayMap;
import android.util.LocalLog;
@@ -375,12 +376,13 @@ public class DcNetworkAgent extends NetworkAgent {
    }

    public void notifyQosSessionAvailable(final int qosCallbackId, final int sessionId,
            @NonNull final EpsBearerQosSessionAttributes attributes) {
            @NonNull final QosSessionAttributes attributes) {
        super.sendQosSessionAvailable(qosCallbackId, sessionId, attributes);
    }

    public void notifyQosSessionLost(final int qosCallbackId, final int sessionId) {
        super.sendQosSessionLost(qosCallbackId, sessionId);
    public void notifyQosSessionLost(final int qosCallbackId,
            final int sessionId, final int qosSessionType) {
        super.sendQosSessionLost(qosCallbackId, sessionId, qosSessionType);
    }

    @Override
+30 −11
Original line number Diff line number Diff line
@@ -19,8 +19,11 @@ package com.android.internal.telephony.dataconnection;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.net.LinkAddress;
import android.net.QosSession;
import android.telephony.data.EpsQos;
import android.telephony.data.NrQos;
import android.telephony.data.EpsBearerQosSessionAttributes;
import android.telephony.data.NrQosSessionAttributes;
import android.telephony.data.QosBearerFilter;
import android.telephony.data.QosBearerSession;

@@ -179,12 +182,14 @@ public class QosCallbackTracker {
            @NonNull final QosBearerSession session, @NonNull IFilter filter) {
        QosBearerFilter qosBearerFilter = getMatchingQosBearerFilter(session, filter);
        List<InetSocketAddress> remoteAddresses = new ArrayList<>();
        EpsQos qos = (EpsQos) session.getQos();
        if(qosBearerFilter.getRemoteAddresses().size() > 0) {
            remoteAddresses.add(
                  new InetSocketAddress(qosBearerFilter.getRemoteAddresses().get(0).getAddress(),
                  qosBearerFilter.getRemotePortRange().getStart()));
        }

        if (session.getQos() instanceof EpsQos) {
            EpsQos qos = (EpsQos) session.getQos();
            EpsBearerQosSessionAttributes epsBearerAttr =
                    new EpsBearerQosSessionAttributes(qos.getQci(),
                            qos.getUplinkBandwidth().getMaxBitrateKbps(),
@@ -194,10 +199,24 @@ public class QosCallbackTracker {
                            remoteAddresses);
            mDcNetworkAgent.notifyQosSessionAvailable(
                    callbackId, session.getQosBearerSessionId(), epsBearerAttr);
        } else {
            NrQos qos = (NrQos) session.getQos();
            NrQosSessionAttributes nrQosAttr =
                    new NrQosSessionAttributes(qos.get5Qi(), qos.getQfi(),
                            qos.getUplinkBandwidth().getMaxBitrateKbps(),
                            qos.getDownlinkBandwidth().getMaxBitrateKbps(),
                            qos.getDownlinkBandwidth().getGuaranteedBitrateKbps(),
                            qos.getUplinkBandwidth().getGuaranteedBitrateKbps(),
                            qos.getAveragingWindow(), remoteAddresses);
            mDcNetworkAgent.notifyQosSessionAvailable(
                    callbackId, session.getQosBearerSessionId(), nrQosAttr);
        }
    }

    private void sendSessionLost(final int callbackId, @NonNull final QosBearerSession session) {
        mDcNetworkAgent.notifyQosSessionLost(callbackId, session.getQosBearerSessionId());
        mDcNetworkAgent.notifyQosSessionLost(callbackId, session.getQosBearerSessionId(),
                session.getQos() instanceof EpsQos ?
                QosSession.TYPE_EPS_BEARER : QosSession.TYPE_NR_BEARER);
    }

    public interface IFilter {
+5 −5
Original line number Diff line number Diff line
@@ -258,7 +258,7 @@ public class QosCallbackTrackerTest extends TelephonyTest {
        qosSessions.remove(1);
        mQosCallbackTracker.updateSessions(qosSessions);

        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(1), eq(1235));
        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(1), eq(1235), eq(1));
    }

    @Test
@@ -380,8 +380,8 @@ public class QosCallbackTrackerTest extends TelephonyTest {
        // Update empty QOS sessions list
        mQosCallbackTracker.updateSessions(new ArrayList<>());

        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(1), eq(1234));
        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(2), eq(1235));
        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(1), eq(1234), eq(1));
        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(2), eq(1235), eq(1));
    }

    @Test
@@ -423,8 +423,8 @@ public class QosCallbackTrackerTest extends TelephonyTest {
        // Update empty QOS sessions list
        mQosCallbackTracker.updateSessions(new ArrayList<>());

        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(1), eq(1234));
        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(2), eq(1235));
        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(1), eq(1234), eq(1));
        verify(mDcNetworkAgent, times(1)).notifyQosSessionLost(eq(2), eq(1235), eq(1));
    }
}