Generalize support for underlying networks.
Currently, ConnectivityService assumes that only VPNs can have underlying networks. Make the code decide this based only on the return value of NetworkAgentInfo#supportsUnderlyingNetworks. This allows non-VPN network types to support underlying networks in the future. This requires storing the original agent's capabilities in NetworkAgentInfo so that applyUnderlyingCapabilities can mix in the underlying network capabilities without overwriting the capabilities of the network itself. Currently, the only information that applyUnderlyingCapabilities takes from the original agent's capabilities are the metered bit (stored in NetworkAgentInfo#declaredMetered) and the transports (assumed to be exactly {TRANSPORT_VPN}. Store the full capabilities instead. This is more state than needed but it ensures that we do not need to make any changes if in the future we want to propagate new types of information from the underlying networks. This should have no impact on current use cases (i.e., VPNs). There is a change in ordering: in disconnectAndDestroyNetwork, the new code propagates underlying network capabilities before removing the network from LegacyTypeTracker, instead of after. This is done to simplify the new code. When the new code propagates underlying network capabilities in response to a change for a particular network (e.g., connect, disconnect, capabilities change), it only considers networks that have the changed network as underlying. Because determining the underlying networks requires knowing the default network, the new code runs before the default network is changed and LegacyTypeTracker is updated. This shouldn't have app implications because the connectivity broadcasts sent by LegacyTypeTracker and the callbacks cannot be ordered, since they run on separate threads with unpredictable delays. The capability change callbacks resulting from propagation of underlying network capabilities were already sent before the rematch, so the callbacks themselves are not reordered in any way. Bug: 173331190 Test: atest FrameworksNetTests \ CtsNetTestCases:NetworkAgentTest \ CtsNetTestCases:Ikev2VpnTest \ CtsNetTestCases:VpnServiceTest \ CtsNetTestCases:android.net.cts.ConnectivityDiagnosticsManagerTest \ HostsideVpnTests com.android.server.connectivity.VpnTest Change-Id: Ic5353a928a3a3541dcf953c35f47277c5e295db8
Loading
Please register or sign in to comment