Snap for 11216811 from ac645d8749b502971451df1495e95a045856f84f to 24Q1-release

Change-Id: I13cdeee2d47dbf7db3c43ce0aa7c90b377d00bfd
diff --git a/framework-t/api/current.txt b/framework-t/api/current.txt
index 86745d4..fb46ee7 100644
--- a/framework-t/api/current.txt
+++ b/framework-t/api/current.txt
@@ -127,6 +127,7 @@
 
   public final class IpSecTransform implements java.lang.AutoCloseable {
     method public void close();
+    method @FlaggedApi("com.android.net.flags.ipsec_transform_state") public void getIpSecTransformState(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.net.IpSecTransformState,java.lang.RuntimeException>);
   }
 
   public static class IpSecTransform.Builder {
@@ -138,6 +139,29 @@
     method @NonNull public android.net.IpSecTransform.Builder setIpv4Encapsulation(@NonNull android.net.IpSecManager.UdpEncapsulationSocket, int);
   }
 
+  @FlaggedApi("com.android.net.flags.ipsec_transform_state") public final class IpSecTransformState implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getByteCount();
+    method public long getPacketCount();
+    method @NonNull public byte[] getReplayBitmap();
+    method public long getRxHighestSequenceNumber();
+    method public long getTimestamp();
+    method public long getTxHighestSequenceNumber();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.IpSecTransformState> CREATOR;
+  }
+
+  @FlaggedApi("com.android.net.flags.ipsec_transform_state") public static final class IpSecTransformState.Builder {
+    ctor public IpSecTransformState.Builder();
+    method @NonNull public android.net.IpSecTransformState build();
+    method @NonNull public android.net.IpSecTransformState.Builder setByteCount(long);
+    method @NonNull public android.net.IpSecTransformState.Builder setPacketCount(long);
+    method @NonNull public android.net.IpSecTransformState.Builder setReplayBitmap(@NonNull byte[]);
+    method @NonNull public android.net.IpSecTransformState.Builder setRxHighestSequenceNumber(long);
+    method @NonNull public android.net.IpSecTransformState.Builder setTimestamp(long);
+    method @NonNull public android.net.IpSecTransformState.Builder setTxHighestSequenceNumber(long);
+  }
+
   public class TrafficStats {
     ctor public TrafficStats();
     method public static void clearThreadStatsTag();
diff --git a/framework-t/src/android/net/IpSecTransform.java b/framework-t/src/android/net/IpSecTransform.java
index 0412a76..246a2dd 100644
--- a/framework-t/src/android/net/IpSecTransform.java
+++ b/framework-t/src/android/net/IpSecTransform.java
@@ -213,7 +213,6 @@
      * @param callback Callback that's called after the transform state is ready or when an error
      *     occurs.
      * @see IpSecTransformState
-     * @hide
      */
     @FlaggedApi(IPSEC_TRANSFORM_STATE)
     public void getIpSecTransformState(
diff --git a/framework-t/src/android/net/IpSecTransformState.java b/framework-t/src/android/net/IpSecTransformState.java
index daebbc4..b575dd5 100644
--- a/framework-t/src/android/net/IpSecTransformState.java
+++ b/framework-t/src/android/net/IpSecTransformState.java
@@ -37,8 +37,6 @@
  * well as observing out-of-order delivery by checking the bitmap. Additionally, callers can query
  * IpSecTransformStates at two timestamps. By comparing the changes in packet counts and sequence
  * numbers, callers can estimate IPsec data loss in the inbound direction.
- *
- * @hide
  */
 @FlaggedApi(IPSEC_TRANSFORM_STATE)
 public final class IpSecTransformState implements Parcelable {
@@ -125,7 +123,6 @@
      * Retrieve the epoch timestamp (milliseconds) for when this state was created
      *
      * @see Builder#setTimestamp(long)
-     * @hide
      */
     public long getTimestamp() {
         return mTimeStamp;
@@ -135,7 +132,6 @@
      * Retrieve the highest sequence number sent so far
      *
      * @see Builder#setTxHighestSequenceNumber(long)
-     * @hide
      */
     public long getTxHighestSequenceNumber() {
         return mTxHighestSequenceNumber;
@@ -145,7 +141,6 @@
      * Retrieve the highest sequence number received so far
      *
      * @see Builder#setRxHighestSequenceNumber(long)
-     * @hide
      */
     public long getRxHighestSequenceNumber() {
         return mRxHighestSequenceNumber;
@@ -155,7 +150,6 @@
      * Retrieve the number of packets received AND sent so far
      *
      * @see Builder#setPacketCount(long)
-     * @hide
      */
     public long getPacketCount() {
         return mPacketCount;
@@ -165,7 +159,6 @@
      * Retrieve the number of bytes received AND sent so far
      *
      * @see Builder#setByteCount(long)
-     * @hide
      */
     public long getByteCount() {
         return mByteCount;
@@ -184,18 +177,13 @@
      * IpSecTransforms, all bits will be unchecked.
      *
      * @see Builder#setReplayBitmap(byte[])
-     * @hide
      */
     @NonNull
     public byte[] getReplayBitmap() {
         return mReplayBitmap.clone();
     }
 
-    /**
-     * Builder class for testing purposes
-     *
-     * @hide
-     */
+    /** Builder class for testing purposes */
     @FlaggedApi(IPSEC_TRANSFORM_STATE)
     public static final class Builder {
         private long mTimeStamp;
@@ -205,7 +193,6 @@
         private long mByteCount;
         private byte[] mReplayBitmap;
 
-        /** @hide */
         public Builder() {
             mTimeStamp = System.currentTimeMillis();
         }
@@ -214,7 +201,6 @@
          * Set the epoch timestamp (milliseconds) for when this state was created
          *
          * @see IpSecTransformState#getTimestamp()
-         * @hide
          */
         @NonNull
         public Builder setTimestamp(long timeStamp) {
@@ -226,7 +212,6 @@
          * Set the highest sequence number sent so far
          *
          * @see IpSecTransformState#getTxHighestSequenceNumber()
-         * @hide
          */
         @NonNull
         public Builder setTxHighestSequenceNumber(long seqNum) {
@@ -238,7 +223,6 @@
          * Set the highest sequence number received so far
          *
          * @see IpSecTransformState#getRxHighestSequenceNumber()
-         * @hide
          */
         @NonNull
         public Builder setRxHighestSequenceNumber(long seqNum) {
@@ -250,7 +234,6 @@
          * Set the number of packets received AND sent so far
          *
          * @see IpSecTransformState#getPacketCount()
-         * @hide
          */
         @NonNull
         public Builder setPacketCount(long packetCount) {
@@ -262,7 +245,6 @@
          * Set the number of bytes received AND sent so far
          *
          * @see IpSecTransformState#getByteCount()
-         * @hide
          */
         @NonNull
         public Builder setByteCount(long byteCount) {
@@ -274,7 +256,6 @@
          * Set the replay bitmap
          *
          * @see IpSecTransformState#getReplayBitmap()
-         * @hide
          */
         @NonNull
         public Builder setReplayBitmap(@NonNull byte[] bitMap) {
@@ -286,7 +267,6 @@
          * Build and validate the IpSecTransformState
          *
          * @return an immutable IpSecTransformState instance
-         * @hide
          */
         @NonNull
         public IpSecTransformState build() {
diff --git a/framework/src/android/net/NetworkRequest.java b/framework/src/android/net/NetworkRequest.java
index 9824faa..653e41d 100644
--- a/framework/src/android/net/NetworkRequest.java
+++ b/framework/src/android/net/NetworkRequest.java
@@ -290,7 +290,10 @@
          * Therefore these capabilities are only in NetworkRequest.
          */
         private static final int[] DEFAULT_FORBIDDEN_CAPABILITIES = new int[] {
-            NET_CAPABILITY_LOCAL_NETWORK
+            // TODO(b/313030307): this should contain NET_CAPABILITY_LOCAL_NETWORK.
+            // We cannot currently add it because doing so would crash if the module rolls back,
+            // because JobScheduler persists NetworkRequests to disk, and existing production code
+            // does not consider LOCAL_NETWORK to be a valid capability.
         };
 
         private final NetworkCapabilities mNetworkCapabilities;
diff --git a/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentTests.kt b/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentTests.kt
index ad21bf5..dd0706b 100644
--- a/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentTests.kt
+++ b/tests/unit/java/com/android/server/connectivityservice/CSLocalAgentTests.kt
@@ -154,6 +154,7 @@
         val newLnc = LocalNetworkConfig.Builder()
                 .setUpstreamSelector(NetworkRequest.Builder()
                         .addTransportType(TRANSPORT_WIFI)
+                        .addForbiddenCapability(NET_CAPABILITY_LOCAL_NETWORK)
                         .build())
                 .build()
         localAgent.sendLocalNetworkConfig(newLnc)
@@ -196,6 +197,7 @@
                 lp = lp("local0"),
                 lnc = FromS(LocalNetworkConfig.Builder()
                 .setUpstreamSelector(NetworkRequest.Builder()
+                        .addForbiddenCapability(NET_CAPABILITY_LOCAL_NETWORK)
                         .addTransportType(TRANSPORT_WIFI)
                         .build())
                 .build()),
@@ -250,6 +252,7 @@
                 lnc = FromS(LocalNetworkConfig.Builder()
                         .setUpstreamSelector(NetworkRequest.Builder()
                                 .addTransportType(TRANSPORT_WIFI)
+                                .addForbiddenCapability(NET_CAPABILITY_LOCAL_NETWORK)
                                 .build())
                         .build()),
                 score = FromS(NetworkScore.Builder()
@@ -296,6 +299,7 @@
         val lnc = FromS(LocalNetworkConfig.Builder()
                 .setUpstreamSelector(NetworkRequest.Builder()
                         .addTransportType(TRANSPORT_WIFI)
+                        .addForbiddenCapability(NET_CAPABILITY_LOCAL_NETWORK)
                         .build())
                 .build())
         val localScore = FromS(NetworkScore.Builder().build())
@@ -348,6 +352,7 @@
                 lp = lp("local0"),
                 lnc = FromS(LocalNetworkConfig.Builder()
                         .setUpstreamSelector(NetworkRequest.Builder()
+                                .addForbiddenCapability(NET_CAPABILITY_LOCAL_NETWORK)
                                 .addTransportType(TRANSPORT_WIFI)
                                 .build())
                         .build()),
@@ -377,6 +382,7 @@
         val lnc = FromS(LocalNetworkConfig.Builder()
                 .setUpstreamSelector(NetworkRequest.Builder()
                         .addCapability(NET_CAPABILITY_DUN)
+                        .addForbiddenCapability(NET_CAPABILITY_LOCAL_NETWORK)
                         .build())
                 .build())
         val localAgent = Agent(nc = nc(TRANSPORT_WIFI, NET_CAPABILITY_LOCAL_NETWORK),
@@ -504,6 +510,7 @@
         val lnc = FromS(LocalNetworkConfig.Builder().apply {
             if (haveUpstream) {
                 setUpstreamSelector(NetworkRequest.Builder()
+                        .addForbiddenCapability(NET_CAPABILITY_LOCAL_NETWORK)
                         .addTransportType(TRANSPORT_WIFI)
                         .build())
             }