Commit Graph

1861 Commits

Author SHA1 Message Date
Jean Chalard
3160bc0825 Revert "Always disconnect agents immediately."
This reverts commit 4bc9fa6b8c.

Reason for revert: b/288450518

Some iterations over mNetworkAgentInfos result in networks being
disconnected, which removes them from mNetworkAgentInfos during
iteration. This crashes with NPE or OOB exceptions.

Bug: 286649301
Bug: 288149251
Bug: 288450518
Change-Id: I6e0b5b614d9e88267db77cb807ae4bf09f88c0f6
2023-06-27 19:19:11 +09:00
Paul Hu
03aabc0d78 Merge "Send packets on the specific socket" 2023-06-27 05:40:38 +00:00
Jean Chalard
56d484c6e5 Merge "Evaluation delay = 8 secs for explicitly selected networks" 2023-06-27 05:15:16 +00:00
Jean Chalard
1acb331613 Merge "Allow firing the LOST_INTERNET intent immediately in config" 2023-06-27 05:14:44 +00:00
Paul Hu
070007164c Address leftover comments
Address leftover comments on aosp/2596565 & aosp/2593907 includes
- Rename onAllSocketsDestroyed to onSocketDestroyed
- Move SocketKey into SocketInfo
- Remove getInterfaceIndex dependency.

Bug: 278018903
Test: atest FrameworksNetTests android.net.cts.NsdManagerTest
Change-Id: Ia37804f18d8e9abbd12d4b929b71dce5fa19d4f0
2023-06-26 14:19:05 +00:00
Paul Hu
721f9b28bf Send packets on the specific socket
In the previous design, the network could be null for some
MdnsServiceTypeClient (tethering interfaces). However, the
MdnsMultinetworkSocketClient is designed to send packets on
specific networks. This means that if there are multiple
tethering interfaces, packets will be sent to unnecessary
sockets. Now, the MdnsServiceTypeClient is created by the socket,
which can identify which socket is the target for sending
packets. Therefore, the design should be updated to send packets
only on the specific socket.

Bug: 278018903
Test: atest FrameworksNetTests android.net.cts.NsdManagerTest
Change-Id: Id87e6d202599c57620281a6761d3c56acd2c929c
2023-06-26 13:27:47 +00:00
Chalard Jean
e13b833b21 Allow firing the LOST_INTERNET intent immediately in config
When config_notifyNoInternetAsDialogWhenHighPriority is on, the
LOST_INTERNET notification intent should be fired immediately
rather than as a pending intent.

Bug: 281970908
Test: Improve test for this in NetworkNotificationManagerTest
Change-Id: I88565839a12a1ab4b096f763250944ebaf6c5349
2023-06-22 15:03:10 +09:00
chiachangwang
b3eccf7b8a Reset the generated v6 clat address when stop
The v6 address is generated from the prefix when clat is started.
The address should be reset when clat is stop.

Test: atest FrameworksNetTests
Change-Id: I943d4efba85dda556dd1ec852322caaf9470e87b
2023-06-21 06:43:28 +00:00
Chalard Jean
0f1413395d Evaluation delay = 8 secs for explicitly selected networks
When a network was explicitly selected, the user just tapped it and
is likely waiting for it to connect. A shorter timeout is therefore
more appropriate for these.

Bug: 281970908
Test: New test in ConnectivityServiceTest
Change-Id: I99a263960cbc9292868fc4bb46a4f3b2f3c71541
2023-06-20 18:48:39 +09:00
Motomu Utsumi
e0365d45ca Merge "Fixes isDefaultNetworkActive and onNetworkActive unreasonable behavior" 2023-06-20 01:00:24 +00:00
Motomu Utsumi
6225d57b18 Fixes isDefaultNetworkActive and onNetworkActive unreasonable behavior
This CL changes the behavior as follows.

Before this CL, isDefaultNetworkActive returns true if there is no
default network.
After this CL, isDefaultNetworkActive returns false if there is no
default network on all releases.

Before this CL, LegacyNetworkActivityTracker does not call
onNetworkActive callback for networks that tracker does not add the idle
timer to (e.g.  ethernet, cell network configured with activity tracking
disabled).
After this CL,
On T-, onNetworkActive keeps the current behavior.
On U+, onNetworkActive is called regardless of the idle timer existence. This behavior is consistent with ConnectivityManager#isDefaultNetworkActive, which always returns true for a network that has no activity tracking.

Bug: 267870186
Bug: 279380356
Test: atest FrameworksNetTests
Change-Id: I7b1d493fea0ab028b53a3d640a58a00ebbdcc143
2023-06-20 00:59:46 +00:00
Motomu Utsumi
0d56157186 Merge "Add test for default network activity APIs" 2023-06-20 00:44:01 +00:00
Cassie Wang
04f3dc871d Merge "Add checks around CONTROL_VPN permission during prepare()" 2023-06-19 11:38:23 +00:00
Hansen Kurli
95386feff1 Merge "Have paused keepalives keep their hardware slot" 2023-06-19 08:30:35 +00:00
Cassie Wang
eecfb86aa9 Add checks around CONTROL_VPN permission during prepare()
Bug: 284803285
Test: atest
FrameworksNetTests: android.net.connectivity.com.android.server.connectivity.VpnTest
Change-Id: I0a277f6b4e7cd25aff7edad9dd0e89a44dfbf3fe
2023-06-19 17:26:15 +09:00
Chiachang Wang
fbcd08a28d Merge changes I9bbff5be,I270b751d,Ibf1bd267
* changes:
  Remove unused import and reorder the import
  Add debug logs for error cases
  Add KeepaliveTracker.Dependencies class for testing purpose
2023-06-19 01:17:59 +00:00
Treehugger Robot
454c06e956 Merge "Adds option to control whethert to send IPv6 packet on IPv6 only network" 2023-06-17 09:34:57 +00:00
Yuyang Huang
9637e84eed Adds option to control whethert to send IPv6 packet on IPv6 only network
Add options to control whether only send IPv6 packet on IPv6 only
network. In some use case, IPv6 query should not be sent on a dual
network.

Added a small improvement to send an ANY query if both SRV & PTR
records are needed.

Bug: 284480254
Test: atest CtsNetTest FrameworksNetTests
Change-Id: I8f55db6f5e8ae606ac167fb363bc9b2fb9b5fc14
2023-06-17 16:27:43 +09:00
chiachangwang
4f52de0bdc Add KeepaliveTracker.Dependencies class for testing purpose
This is a part of preliminary work for adding tests in the
follow up commit.

Bug: 196453719
Test: atest FrameworksNetTests
Change-Id: Ibf1bd267c4c144f533380eeafc6a6144f64da483
2023-06-17 03:24:09 +00:00
Chalard Jean
ebb0747af3 Have paused keepalives keep their hardware slot
When a keepalive is paused, it should sit on its hardware
slot for this network to make sure that it is possible to
resume later, even if it means other keepalives can't be
started at the same time.

Test: update AutomaticOnOffKeepaliveTrackerTest for this
Fixes: 268149573
Fixes: 283886067
Change-Id: Ida325bdea198d751483a83ee5d9ec26e39812137
2023-06-16 09:19:42 +00:00
Maciej Żenczykowski
12540e13f0 Merge "Remove toString test." 2023-06-16 04:34:33 +00:00
Lorenzo Colitti
d925df8aa6 Merge "Always disconnect agents immediately." 2023-06-15 03:49:05 +00:00
Paul Hu
7c60aaa851 Merge "Create an MdnsServiceTypeClient using a SocketKey" 2023-06-15 01:01:46 +00:00
Paul Hu
a8d1cabcd7 Merge "Notify socket changes using a SoketKey" 2023-06-15 01:01:24 +00:00
Lorenzo Colitti
4bc9fa6b8c Always disconnect agents immediately.
Currently, various codepaths in ConnectivityService disconnect
networks using NetworkAgentInfo#disconnect. This posts a message
to the NetworkAgent to disconnect and also posts a message to
ConnectivityService to call disconnectAndDestroyNetwork, which
performs all cleanup in ConnectivityService. These two messages
race and the order is non-deterministic.

Instead, always disconnect using disconnectAndDestroyNetwork,
and have disconnectAndDestroyNetwork post the message to the
agent to disconnect.

This fixes a bug where if wifi uses unregisterAfterReplacement
twice in quick succession, when the third agent connects it
doesn't work because the interface is still being used by the
second network.

Also remove the import of IllegalArgumentException to keep the
linter happy (java.lang.* never needs to be imported).

Bug: 286649301
Test: covered by existing tests
Change-Id: Ie01f5589d6839ac6db25f0ba98fc929fbb5b0a96
2023-06-14 18:03:02 +09:00
Maciej Żenczykowski
977fa60f5d Merge "Add helper method to generate a v6 NAT-T keepalive packet" 2023-06-14 02:55:29 +00:00
Paul Hu
62b6439f96 Create an MdnsServiceTypeClient using a SocketKey
Now, MdnsServiceTypeClient is created using a network. However,
all tether interfaces use the same network (null), which
means they use the same client for the same service type. This is
not the intended behavior, as each interface should have its own
client. Therefore, MdnsServiceTypeClient creation should be
changed to use SocketKey, which includes both the network and
interface index. This will allow each interface to have its own
client.

Bug: 278018903
Test: atest FrameworksNetTests android.net.cts.NsdManagerTest
Change-Id: I34b7d983f00b67198befb5bf71fc511cf0dabae6
2023-06-14 10:36:50 +08:00
Yan Yan
4f68ecf4ed Merge "Update VPN tests to mock out createAttributionContext" 2023-06-13 17:34:57 +00:00
chiachangwang
c18f0bbbb3 Add helper method to generate a v6 NAT-T keepalive packet
This is a part of preliminary work for sending a v6 NAT-T
keepalive packet in a v6 only network. This commit
release the constraint on constructing a v6 NAT-T keepalive
packet.

Bug: 196453719
Test: Manually connect to v6 only network and check if the
      keepalive packets are sent with subsequent commit
Test: atest FrameworksNetTests with the updated test
Change-Id: I9dc96e840265c5dee6b9e3ef2b3901a0aeb4ff9e
2023-06-13 11:50:13 +00:00
Paul Hu
2f236e9ca4 Notify socket changes using a SoketKey
Currently, all socket changes are identified using a Network
object. However, the Network object is null for all tethering
interface sockets, which means that the socket cannot be
identified in some places. Therefore, the Network object should
be replaced with a SocketKey object, which includes both the
network and interface index.

Bug: 278018903
Test: atest FrameworksNetTests android.net.cts.NsdManagerTest
Change-Id: Ib49981a4071ecab18c7cf3a8827d1459529492a9
2023-06-13 18:41:28 +08:00
Hansen Kurli
7b36f2322b Register BroadcastReceiver for default subId.
Register a receiver of ACTION_DEFAULT_SUBSCRIPTION_CHANGED to update
the cached default subId.

Bug: 273451360
Test: atest FrameworksNetTests
Change-Id: I3a38af7615fde2811449585d4e659ffaf29c5670
2023-06-13 05:46:51 +00:00
Hansen Kurli
19ea150271 Write keepalive metrics periodically using alarms.
Use AlarmManger ELAPSED_REALTIME_WAKEUP to trigger writing the metrics
to statsd on an interval of 24 hours.

Bug: 273451360
Test: statsd_testdrive
Test: atest FrameworksNetTests
Change-Id: I5e21de058336819189532beffe2b3239a3c69599
2023-06-13 05:45:52 +00:00
Yan Yan
8e9f045d8d Update VPN tests to mock out createAttributionContext
This allows VpnManagerServiceTest continues to work after
adding an attribution tag to VpnManagerService

Bug: 278943609
Test: atest FrameworksNetTests:android.net.connectivity.com.android.server.VpnManagerServiceTest
Change-Id: I4228a7fb308b8d01aee53f0734f4c5753908473a
Merged-In: I4228a7fb308b8d01aee53f0734f4c5753908473a
2023-06-12 18:06:47 +00:00
Hansen Kurli
d5ca3f1f69 Replace upTimeMillis with elapsedRealTime
upTimeMillis does not include time spent in deep sleep. Use
elapsedRealtime instead.

The time spent in deep sleep is important to include since the
keepalives may still be ongoing during deep sleep and so that time
should be included in duration calculations.

Bug: 273451360
Fixes: 281639289
Test: atest FrameworksNetTests
Change-Id: I54350d49bdfec58cc00dea6d82cba01f5d387bb0
2023-06-12 05:43:21 +00:00
Hansen Kurli
91adc204d8 Fill the other values for DailyKeepaliveInfoReported
Store the number of requests and app uids on start keepalives. The
values are also stored in KeepaliveStats and can be recalculated from
KeepaliveStats when reset. Fill the DailyKeepaliveInfoReported proto
with these values.

Bug: 273451360
Test: atest FrameworksNetTests
Change-Id: Ifb9a0048896d31c8ea897cf14768e94dcfd3b010
2023-06-12 05:43:05 +00:00
Hansen Kurli
c48d856976 Register OnSubscriptionsChangedListener and cache results.
Register a listener to get notified of SubscriptionInfo changes and
store all carrierIds of active subscriptions in a cache. The executor
for the listener callback runs on a different thread to the connectivity
thread but posts the SubscriptionInfo list to the connectivity thread
for caching.

Bug: 273451360
Test: atest FrameworksNetTests
Change-Id: I889d4da725ccda713367309c257622a0bf9939f3
2023-06-12 05:42:46 +00:00
Hansen Kurli
ad03b887e6 Track and build KeepaliveLifetimePerCarrier.
Create a nested class KeepaliveStats to store and track the carrier info
and lifetime metrics for each keepalive where a keepalive is identified
by its network and slot number. Then aggregate the metrics using
(carrierId, transportTypes, intervalMs) as the key before writing the
metrics into the KeepaliveLifetimePerCarrier proto. Also aggregates the
metrics whenever a keepalive is stopped to free up the (network, slot).

Bug: 273451360
Test: atest FrameworksNetTests
Change-Id: I113ec68053710a7f41f64a9d6fa4dd83bd924225
2023-06-12 05:41:19 +00:00
Motomu Utsumi
2738f4fd4d Add test for default network activity APIs
Following CLs update LegacyNetworkActivityTracker to support multiple
network activities including non default network.
To avoid breaking default network activity APIs, this CL adds tests.
Following CL fix known issues of LegacyNetworkActivityTracker so this
CL also adds test for known issue behavior.

Bug: 279380356
Test: FrameworksNetTests
Change-Id: Ic180efe690807e940d0b412a38ebc5e6d22691c4
2023-06-09 17:28:44 +09:00
Hansen Kurli
7e343d58ce Merge "Ensure public methods are running on handler thread" 2023-06-09 04:54:58 +00:00
Chiachang Wang
646715e787 Merge "Stop TCP keepalive from CS for fd initiated stop events" 2023-06-09 01:05:46 +00:00
chiachangwang
739f0960f3 Stop TCP keepalive from CS for fd initiated stop events
When a TCP keepalive start request is sent from ConnectivityService
to KeepaliveTracker, the keepalive is tracked on both
AutomaticOnOffKeepaliveTracker and KeepaliveTracker. The existing
design stops the keepalive inside KeepaliveTracker without
notifying AutomaticOnOffKeepaliveTracker for fd initiated stops.
This causes AutomaticOnOffKeepaliveTracker to lose track of these
fd initiated stops and cause a leak on the object.

The updated design sends the event to ConnectivityService handler
to handle the event down from ConnectivityService. This ensures
that each stakeholder class will get the stop event.

Bug: 283885097
Test: atest FrameworksNetTests
Test: atest CtsNetTestCases
Change-Id: I3c40d80694cd2c046f3a19ddb8f437878c98ab43
2023-06-08 15:31:42 +00:00
Yuyang Huang
01b988255f Merge "Enable useSessionIdToScheduleMdnsTask" 2023-06-08 10:41:58 +00:00
Yuyang Huang
e0f07a9dc1 Merge "Fix cache flush always causing response change" 2023-06-08 09:17:59 +00:00
Yuyang Huang
c505844d8a Enable useSessionIdToScheduleMdnsTask
In case that the task is not canceled successfully, use session ID to
check if this task should continue to schedule more.

Bug: 285260665
Test: atest CtsNetTest FrameworksNetTests
Change-Id: Ic953ae781449a7ebf943999c8c8d3040a97641d9
2023-06-08 17:38:52 +09:00
Remi NGUYEN VAN
98a44bcb29 Fix cache flush always causing response change
When the cache flush bit is set on host address records in a response,
known records are cleared and replaced with the contents of the packet.
However even if the response contains the same records as before, this
caused it to be marked as modified, and response modified callbacks are
sent for every incoming packet.

Instead, ensure that the response is only marked as modified if a
previously unknown address record is added, or if a previously known
address record is removed.

The issue wasn't found by the existing testDecodeWithNoChange test,
because it used a service record for testhost2 instead of testhost1, so
the address records were ignored.

Bug: 285997766
Bug: 285084489
Test: atest CtsNetTest FrameworksNetTests

Change-Id: Ic0f19adf5d9bde7cdab766e49cf677b319a2219b
2023-06-08 16:30:31 +09:00
Paul Hu
bad235f4f9 Merge "Adjust the notifyNetworkUnrequested on handleRegisterListener" 2023-06-08 06:34:25 +00:00
Paul Hu
c54aa729c9 Adjust the notifyNetworkUnrequested on handleRegisterListener
If the MdnsServiceTypeClient was removed when the
SocketCreationCallback#onAllSocketsDestroyed() was called, the
MdnsSocketClientBase#notifyNetworkUnrequested() will not be
called when a listener is unregistered from the
MdnsDiscoveryManager. This is because the serviceTypeClients will
be cleared after the socket is destroyed. However, these dead
listeners will be re-added to the MdnsServiceTypeClient when a
new socket is created. They will then continue to send callbacks
to the NsdService. Therefore, the notifyNetworkUnrequested()
should be moved to the beginning of the handleRegisterListener()
to ensure that the socket unregistration is properly notified.

Bug: 285997766
Test: atest FrameworksNetTests android.net.cts.NsdManagerTest
Change-Id: I31c766305018889f50a7c12c836174c340d01d7f
2023-06-08 10:29:07 +08:00
Jean Chalard
f2b38772ac Merge "Fix a bug where the PAC proxy port is not set correctly." 2023-06-06 12:22:21 +00:00
Treehugger Robot
1667bfea04 Merge "Update record receipt time on records updated" 2023-06-06 08:34:39 +00:00
Yuyang Huang
86f674187f Update record receipt time on records updated
The receipt time in the MdnsResponse need to be updated every time new
packet is received. And then the record refreshing logic could calculate
remaining TTL correctly.

Bug: 285260665
Test: atest CtsNetTest FrameworksNetTests
Change-Id: Ib7a290ea0ea8e552c71c657696397e8114fcee52
2023-06-06 12:55:27 +09:00