Clean up TetheringRequest#toString() by printing the TetheringType and
ConnectivityScope in a human-readable form and only printing the values
of fields that have been set.
Bug: 216524590
Test: atest TetheringManagerTest
Change-Id: Ie2c35190a09605e3018b9d2d1f1d00cdc7bbb977
Quang Anh Luongcommited 2024-11-19 21:24:47 +09:00
IpServer currently starts/stops tethering by specifying the tethering
type, but this will be a problem when we start to allow multiple
requests per type. To fix this, specify the TetheringRequest instead.
Note this CL has no functional changes.
Bug: 216524590
Test: atest TetheringTest TetheringManagerTest
Change-Id: I6bd9ceebcaa637a540435d5e91a35382f167a809
Quang Anh Luongcommited 2024-11-19 19:32:22 +09:00
Include SoftApConfiguration in TetheringEventCallback via
TetheringInterface, to allow apps to know which interfaces are created
with their SoftApConfigurations.
API-Coverage-Bug: 371133403
Bug: 216524590
Test: atest TetheringTest CtsTetheringTest
Change-Id: I1b4868ba8327bee3b03c0f21e5b4f0845f2f24a8
Quang Anh Luongcommited 2024-11-18 13:37:39 +09:00
Old flag gantry flow was disabled due to being out of sync
(b/362407371). This change adds a new version of the same flag to
kickstart a new gantry flow.
Flag: com.android.net.flags.tethering_with_soft_ap_config
Bug: 216524590
Test: build
Change-Id: I50701582852c2077e7807ab2685e390f112fd029
Lorenzo Colitticommited 2024-11-13 17:19:11 +00:00
Refactor tether state change callback/broadcast to allow for redactions
based on the callback cookie of the recipient. This CL is a no-op and
will be used in a future CL to redact the SoftApConfiguration in
TetheringInterface.
Bug: 216524590
Test: atest TetheringTest CtsTetheringTests
Change-Id: I3684929e6ba832f4da353d48137967739ca558d6
Quang Anh Luongauthored and Quang Luongcommited 2024-11-08 05:08:43 +00:00
Change the permission check for tethering to checkPackage. This avoids
having to create context as another user which is not supported when
running the networkstack from secondary user.
Bug: 375535923
Bug: 216524590
Test: atest TetheringManagerTest TetheringServiceTest
Change-Id: Ibc3abe9ec2eab5ec976c6a9cbc08e1552203ee5d
Oscar Shuauthored and Quang Luongcommited 2024-11-08 02:31:46 +00:00
The current implementation uses MANAGE_USERS, CREATE_USERS, or
QUERY_USERS to check if the user is an admin. However,
QUERY_USERS is not a privileged permission until Android U.
This can cause issues on devices running older Android versions
(e.g., T) where the tethering module requires this check but
doesn't have the necessary permission, leading to crashes.
This change updates the code to use MANAGE_USERS, a privileged
permission since 2015, to reliably determine if the user is
an admin across different Android versions.
Test: Manual on T device:
1. Mock entitlement and enable hotspot
2. Check granted permissions of android.uid.networkstack
Fix: 366816004
Change-Id: Iee060f0225d23c62d836f0211c63b649e539f77b
Add a uid and package name to TetheringRequest to keep track of which
app the request belongs to, and also convey this information to Wifi
for later use with resource conflicts.
Bug: 216524590
Test: atest TetheringManagerTest TetheringServiceTest
Change-Id: If963694cb1bbd831ba379a76043825c94ef9d67a
Quang Anh Luongcommited 2024-10-23 15:52:03 +09:00
This is a no-op refactoring which only introduce
dependencies object injection to replace the wrapper class.
Test: atest TetheringTests:EntitlementManagerTest
Fix: 363972541
Change-Id: I24b0bf5f8951c453af1e9ae9278285d1a7b86849
This change addresses the launch of entitlement UI activities
in Headless System User Mode (HSUM) on multi-user devices.
HSUM is a configuration where the system user (user 0) does
not represent a human user and primarily runs system services.
In this mode, the first user set up on the device is not user 0.
Modified the EntitlementManager logic to handle the
launch of the entitlement UI in multi-user environments,
specifically addressing scenarios where HSUM is enabled, which
includes:
1. Always launch the UI to the foreground current user.
2. Check whether the current user is allowed to show the UI.
This ensures the UI is presented to the appropriate user.
Test: Manual
1. Mock requires entitlement
2. adb shell cmd user set-system-user-mode-emulation headless
3. enable hotspot
Test: atest TetheringTests:EntitlementManagerTest
Fix: 363972541
Change-Id: I950d678741a3f1714f347206fa161bcd7538b402
This CL splits requestDownstreamAddress into two methods: requestStickyDownstreamAddress and requestDownstreamAddress.
- The requestStickyDownstreamAddress is equivalent to the former requestDownstreamAddress when useLastAddress=true.
- The new requestDownstreamAddress method allows allocating an address without providing the interface type and scope, which is Thread NAT64's use case.
Bug: 369282577
Change-Id: Ib839d121c7b46c492f2c4c1c61b52b5d017fa055
Use HandlerUtils#ensureRunningOnHandlerThread to perform handler
thread checks instead of individual methods within the class.
Test: TH
Change-Id: I6d893dc9eedc588660797768a03e7ad7ab636479
* changes:
Update unit tests to reflect the changes to RoutingCoordinator and PrivateAddressCoordinator
Move PrivateAddressCoordinator from Tethering to staticlibs
Refator IpServer to allocate IPv4 address via RoutingCoordinatorManager API
Introduce PrivateAddressCoordinator methods at RoutingCoordinatorManager
Treehugger Robotauthored and Gerrit Code Reviewcommited 2024-10-17 01:28:02 +00:00
This CL moves PrivateAddressCoordinator from Tethering to staticlibs
so that RoutingCooridnatorService can create an instance of
PrivateAddressCoordinator.
Bug: 350699020
Change-Id: I13ccd515972243719465c1c9ab844f802bc8884b
API
This CL refactors IpServer to allocate IPv4 address via RoutingCoordinatorManager
instead of directly talking to PrivateAddressCoordinator class.
Bug: 350699020
Change-Id: I5c68620626a3668c079234da232f0ef2beb46628
This CL exposes PrivateAddressCoordinator methods at
RoutingCoordinatorManager and implements the methods in
RoutingCoordinatorService.
The objective is to allow a system service like Thread to request an
IPv4 address allocation.
Bug: 350699020
Change-Id: I65dc309f0b503d544e0fddc1168131fa6174796c
* Renamed TapPacketReader to PollPacketReader to better reflect its
functionality beyond TAP interface interaction.
* The class includes general logic for polling and sending packets to
file descriptors, making it suitable for wider use cases.
Test: TH
Change-Id: Icdf9a9d7ef6f49b589ed9cdbd05159ab95e7e5d9
* changes:
Remove unused method TetheringConfiguration#isRandomPrefixBaseEnabled()
PrivateAddressCoordinator: introduce Dependencies class
PrivateAddressCoordinator: move the special handling of WiFi P2P dedicated IP to IpServer
Treehugger Robotauthored and Gerrit Code Reviewcommited 2024-10-08 17:07:29 +00:00
This CL removes TetheringConfiguration#isRandomPrefixBaseEnabled(). This
method was used for configuring PrivateAddressCoordinator. Now
PrivateAddressCoordinator doesn't depend on TetheringConfiguration so
we'll remove this unused method.
Bug: 369282577
Change-Id: I2e556cf5dd6c28cd6aba29ee9093a9873a4f4d3f
This CL introduces the Dependencies class for PrivateAddressCoordinator
to allow changing the TetheringConfiguration in tests. Although in
production code TetheringConfiguration won't change after passed to
PrivateAddressCoordinator, there are unit test cases relying on changing
the configuration at runtime.
Bug: 369282577
Change-Id: I5e42005f85e784c0ce3ac9192248c9e4ed4e6147
dedicated IP to IpServer
The source of
TetheringConfiguration#shouldEnableWifiP2pDedicatedIp is in the
Tethering's resources. As refactoring the code, we noticed that it will
be simpler to handle this at IpServer (constructed using
TetheringConfiguration) instead of at PrivateAddressCoordinator
(will require reflection to read the Tethering's resources).
Bug: 369282577
Change-Id: I7b766ef6a769043c2a4ca11741db5c16c5c57071
Technically, UnavailableState should not handle any messages at all (and
shouldn't exist). As the IpServer has already been removed from
mTetherStates. However, sendInterfaceState() cleans up IPv6 tethering
which eventually triggers a CMD_IPV6_TETHER_UPDATE. Instead of
preventing the CMD_IPV6_TETHER_UPDATE, ignore it for now and remove this
state entirely once we have rolled out SyncStateMachine.
Bug: 368713124
Test: TH
Change-Id: I32ae9583aa01411fa1fc299a0fc91138557b7ae2
The `upstreamEvents` byte array may not be used if debugging is
disabled. Remove the array allocation and retrieve the array
directly when required.
Test: atest TetheringTests
Change-Id: I7e1ddd3ce2e3079f07deebe3dd49aef832b24558
TetheringMetrics creates a thread to process all metrics work on
a handler. This thread should remain active alongside the
Tethering service but should be closed in test class. Therefore,
add MonitorThreadLeak to ensure the thread is closed correctly.
Test: atest TetheringMetricsTest
Change-Id: Ic57beb3324945ddbb45fec9697056889044e680c
The previous implementation for tracking tethering active sessions
was overly complex. This commit simplifies the logic by:
- Moving the counting to the BpfCoordinatorShimImpl (31 impl)
where rule addition and deletion are centralized.
- Eliminating the unnecessary Android version check (S+) as
the 31 shim only runs on S+.
- Relocating the tracking counters from
ConntrackEventConsumer to the shim class, improving code
locality and encapsulation.
This change addresses the feedback from the networking mainline
release council and resolves a release blocker.
Test: atest TetheringTests:com.android.networkstack.tethering.BpfCoordinatorTest
Fix: 370652384
Change-Id: I70ca58fc45694c738745d7a872272641a62551fd
The break is missing when processing CMD_SERVICE_FAILED_TO_START
in BaseServingState.
Test: atest TetheringTests
Change-Id: I1699da251f90ec447466266b704df24d081c40b3
Need to refresh the usage data. If the network switches back to
Wi-Fi after using cellular data (Wi-Fi -> Cellular -> Wi-Fi), the
old baseline might be inaccurate, leading to incorrect delta
calculations.
Also address some leftover comments.
Fix: 369306449
Fix: 370652336
Test: atest TetheringTests
Change-Id: I1c14aac533cee1d989b7ab354111f071da018058
Set updatable: true for apps that are embedded in updatable apexes.
This replaces the top down propagation that was automatically setting
the flag in order to unblock support for incremental Soong analysis.
Bug: 367784740
Test: builds
Flag: EXEMPT refactor
Change-Id: Icba5fd39077b309750224b3cd4c8c3a65c94de10
* changes:
Drastically simplify prefix and address selection process
Simplify getSanitizedSubAddr to 1-liner
Rename getStartedPrefixIndex to getRandomPrefixIndex
Remove unused imports
Treehugger Robotauthored and Gerrit Code Reviewcommited 2024-09-29 04:25:22 +00:00
This removes all the complex downstream prefix / address selection
logic and reduces it to generating a random address within the selected
prefix and checking whether it satisfies a set of conditions. If the
conditions are not met, the process is retried (for a total of 10 times)
before eventually moving on to the next prefix.
The conditions that must be satisfied are:
- Address within prefix does not end in .0, .1, .255
- Address is not contained within a range of commonly used prefixes.
- Prefix does not overlap with another prefix on the system.
Test: TH
Change-Id: I4c53bcaa29c11cde4df99d5bcb834fde94961da4
This assumes that PREFIX_LENGTH is 24. The change also adds a warning to
make sure PREFIX_LENGTH is not updated without updating
chooseDownstreamAddress.
Test: TH
Change-Id: I96a7f8bf273d69ed27320f9c6f5af4fd41f7097d
Rather than bundling a copy of the framework annotations, reference them
via framework-annotations-lib as a libs reference. This ensures the
target inherits any necessary keep rule configurations, and is the same
pattern used by other mainline modules.
Bug: 275175207
Test: m
Flag: EXEMPT refactor
Change-Id: I014aa79f4fec69aef062a2fb855a50f658380ac5