Merge "Update TCP buffer size for 5G data connections"
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 2933bd9..8817a76 100755
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -117,9 +117,11 @@
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
@@ -216,6 +218,7 @@
private RegistrantList mPsRestrictEnabledRegistrants = new RegistrantList();
private RegistrantList mPsRestrictDisabledRegistrants = new RegistrantList();
private RegistrantList mImsCapabilityChangedRegistrants = new RegistrantList();
+ private RegistrantList mNrStateChangedRegistrants = new RegistrantList();
/* Radio power off pending flag and tag counter */
private boolean mPendingRadioPowerOffAfterDataOff = false;
@@ -1553,8 +1556,10 @@
mLastPhysicalChannelConfigList = list;
boolean hasChanged =
updateNrFrequencyRangeFromPhysicalChannelConfigs(list, mSS);
- hasChanged |= updateNrStateFromPhysicalChannelConfigs(
- list, mSS);
+ if (updateNrStateFromPhysicalChannelConfigs(list, mSS)) {
+ mNrStateChangedRegistrants.notifyRegistrants();
+ hasChanged = true;
+ }
// Notify NR frequency, NR connection status or bandwidths changed.
if (hasChanged
@@ -5504,4 +5509,43 @@
}
return ServiceState.networkTypeToRilRadioTechnology(networkType);
}
+
+ /**
+ * Registers for 5G NR state changed.
+ * @param h handler to notify
+ * @param what what code of message when delivered
+ * @param obj placed in Message.obj
+ */
+ public void registerForNrStateChanged(Handler h, int what, Object obj) {
+ Registrant r = new Registrant(h, what, obj);
+ mNrStateChangedRegistrants.add(r);
+ }
+
+ /**
+ * Unregisters for 5G NR state changed.
+ * @param h handler to notify
+ */
+ public void unregisterForNrStateChanged(Handler h) {
+ mNrStateChangedRegistrants.remove(h);
+ }
+
+ /**
+ * Get the NR data connection context ids.
+ *
+ * @return data connection context ids.
+ */
+ @NonNull
+ public Set<Integer> getNrContextIds() {
+ Set<Integer> idSet = new HashSet<>();
+
+ for (PhysicalChannelConfig config : mLastPhysicalChannelConfigList) {
+ if (isNrPhysicalChannelConfig(config)) {
+ for (int id : config.getContextIds()) {
+ idSet.add(id);
+ }
+ }
+ }
+
+ return idSet;
+ }
}
diff --git a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
index 1b59c94..41d4bef 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
@@ -265,7 +265,7 @@
private static final String NULL_IP = "0.0.0.0";
private Object mUserData;
private int mSubscriptionOverride;
- private int mRilRat = Integer.MAX_VALUE;
+ private int mRilRat = ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN;
private int mDataRegState = Integer.MAX_VALUE;
private NetworkInfo mNetworkInfo;
@@ -281,6 +281,8 @@
private int mDisabledApnTypeBitMask = 0;
int mTag;
+
+ /** Data connection id assigned by the modem. This is unique across transports */
public int mCid;
@HandoverState
@@ -316,9 +318,10 @@
static final int EVENT_RESET = BASE + 24;
static final int EVENT_REEVALUATE_RESTRICTED_STATE = BASE + 25;
static final int EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES = BASE + 26;
+ static final int EVENT_NR_STATE_CHANGED = BASE + 27;
private static final int CMD_TO_STRING_COUNT =
- EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES - BASE + 1;
+ EVENT_NR_STATE_CHANGED - BASE + 1;
private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT];
static {
@@ -354,6 +357,8 @@
"EVENT_REEVALUATE_RESTRICTED_STATE";
sCmdToString[EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES - BASE] =
"EVENT_REEVALUATE_DATA_CONNECTION_PROPERTIES";
+ sCmdToString[EVENT_NR_STATE_CHANGED - BASE] =
+ "EVENT_NR_STATE_CHANGED";
}
// Convert cmd to string or null if unknown
static String cmdToString(int cmd) {
@@ -584,7 +589,6 @@
mId = id;
mCid = -1;
ServiceState ss = mPhone.getServiceState();
- mRilRat = ss.getRilDataRadioTechnology();
mDataRegState = mPhone.getServiceState().getDataRegState();
int networkType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
@@ -592,6 +596,7 @@
NetworkRegistrationInfo.DOMAIN_PS, mTransportType);
if (nri != null) {
networkType = nri.getAccessNetworkTechnology();
+ mRilRat = ServiceState.networkTypeToRilRadioTechnology(networkType);
}
mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_MOBILE,
@@ -1006,10 +1011,14 @@
// NR 5G Non-Standalone use LTE cell as the primary cell, the ril technology is LTE in this
// case. We use NR 5G TCP buffer size when connected to NR 5G Non-Standalone network.
- if (rilRat == ServiceState.RIL_RADIO_TECHNOLOGY_LTE && isNRConnected()) {
+ if (mTransportType == AccessNetworkConstants.TRANSPORT_TYPE_WWAN
+ && rilRat == ServiceState.RIL_RADIO_TECHNOLOGY_LTE && isNRConnected()
+ && mPhone.getServiceStateTracker().getNrContextIds().contains(mCid)) {
ratName = RAT_NAME_5G;
}
+ log("updateTcpBufferSizes: " + ratName);
+
// in the form: "ratname:rmem_min,rmem_def,rmem_max,wmem_min,wmem_def,wmem_max"
String[] configOverride = mPhone.getContext().getResources().getStringArray(
com.android.internal.R.array.config_mobile_tcp_buffers);
@@ -1056,7 +1065,7 @@
case ServiceState.RIL_RADIO_TECHNOLOGY_LTE:
case ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA:
// Use NR 5G TCP buffer size when connected to NR 5G Non-Standalone network.
- if (isNRConnected()) {
+ if (RAT_NAME_5G.equals(ratName)) {
sizes = TCP_BUFFER_SIZES_NR;
} else {
sizes = TCP_BUFFER_SIZES_LTE;
@@ -1065,6 +1074,9 @@
case ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP:
sizes = TCP_BUFFER_SIZES_HSPAP;
break;
+ case ServiceState.RIL_RADIO_TECHNOLOGY_NR:
+ sizes = TCP_BUFFER_SIZES_NR;
+ break;
default:
// Leave empty - this will let ConnectivityService use the system default.
break;
@@ -1501,6 +1513,8 @@
DataConnection.EVENT_DATA_CONNECTION_ROAM_ON, null);
mPhone.getServiceStateTracker().registerForDataRoamingOff(getHandler(),
DataConnection.EVENT_DATA_CONNECTION_ROAM_OFF, null, true);
+ mPhone.getServiceStateTracker().registerForNrStateChanged(getHandler(),
+ DataConnection.EVENT_NR_STATE_CHANGED, null);
// Add ourselves to the list of data connections
mDcController.addDc(DataConnection.this);
@@ -1617,8 +1631,7 @@
break;
default:
if (DBG) {
- log("DcDefaultState: shouldn't happen but ignore msg.what="
- + getWhatToString(msg.what));
+ log("DcDefaultState: ignore msg.what=" + getWhatToString(msg.what));
}
break;
}
@@ -2381,6 +2394,14 @@
retVal = HANDLED;
break;
}
+ case EVENT_NR_STATE_CHANGED: {
+ updateTcpBufferSizes(mRilRat);
+ if (mNetworkAgent != null) {
+ mNetworkAgent.sendLinkProperties(mLinkProperties, DataConnection.this);
+ }
+ retVal = HANDLED;
+ break;
+ }
default:
if (VDBG) {
log("DcActiveState not handled msg.what=" + getWhatToString(msg.what));