From 55630d0dc8ad721d8cf46fd33a6b5cfdcef19d2d Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Wed, 29 Jun 2022 07:46:52 +0000 Subject: [PATCH] Use java BpfMap in BpfNetMaps#addNiceApp Bug: 217624062 Test: atest BpfNetMapsTest HostsideRestrictBackgroundNetworkTests Change-Id: I32299ce8cde34d46999ecb966c3305c966c0509f --- .../src/com/android/server/BpfNetMaps.java | 6 ++-- .../com/android/server/BpfNetMapsTest.java | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/service/src/com/android/server/BpfNetMaps.java b/service/src/com/android/server/BpfNetMaps.java index 5618233d78..d3b83da439 100644 --- a/service/src/com/android/server/BpfNetMaps.java +++ b/service/src/com/android/server/BpfNetMaps.java @@ -294,10 +294,8 @@ public class BpfNetMaps { * cause of the failure. */ public void addNiceApp(final int uid) { - synchronized (sUidOwnerMap) { - final int err = native_addNiceApp(uid); - maybeThrow(err, "Unable to add nice app"); - } + throwIfPreT("addNiceApp is not available on pre-T devices"); + addRule(uid, HAPPY_BOX_MATCH, "addNiceApp"); } /** diff --git a/tests/unit/java/com/android/server/BpfNetMapsTest.java b/tests/unit/java/com/android/server/BpfNetMapsTest.java index b3b7dc1756..044df745d9 100644 --- a/tests/unit/java/com/android/server/BpfNetMapsTest.java +++ b/tests/unit/java/com/android/server/BpfNetMapsTest.java @@ -371,4 +371,36 @@ public final class BpfNetMapsTest { assertThrows(UnsupportedOperationException.class, () -> mBpfNetMaps.removeNiceApp(TEST_UID)); } + + private void doTestAddNiceApp(final long iif, final long match) throws Exception { + if (match != NO_MATCH) { + mUidOwnerMap.updateEntry(new U32(TEST_UID), new UidOwnerValue(iif, match)); + } + + mBpfNetMaps.addNiceApp(TEST_UID); + + checkUidOwnerValue(TEST_UID, iif, match | HAPPY_BOX_MATCH); + } + + @Test + @IgnoreUpTo(Build.VERSION_CODES.S_V2) + public void testAddNiceApp() throws Exception { + doTestAddNiceApp(NO_IIF, NO_MATCH); + + // Other matches are enabled + doTestAddNiceApp(NO_IIF, DOZABLE_MATCH | POWERSAVE_MATCH | RESTRICTED_MATCH); + + // IIF_MATCH is enabled + doTestAddNiceApp(TEST_IF_INDEX, IIF_MATCH); + + // HAPPY_BOX_MATCH is already enabled + doTestAddNiceApp(NO_IIF, HAPPY_BOX_MATCH | DOZABLE_MATCH); + } + + @Test + @IgnoreAfter(Build.VERSION_CODES.S_V2) + public void testAddNiceAppBeforeT() { + assertThrows(UnsupportedOperationException.class, + () -> mBpfNetMaps.addNiceApp(TEST_UID)); + } }