Commit graph android_packages_modules_Co.../services/core/java
Message SHA1
Ignore system apps on enforceMeteredApnPolicy().
BUG: 29514913
Fixes: 29448383
Change-Id: I19eb004c937e1c872bbf82caa7a919e43d48a259

Felipe Leme   commited 2016-06-20 17:15:46 -07:00
ff76014fe8
Merge "Move 'is already always-on' check into Vpn.java" into nyc-dev
Robin Lee   authored and   Android (Google) Code Review   commited 2016-06-16 10:06:11 +00:00
6a58c98cef
Move 'is already always-on' check into Vpn.java
It's with the rest of the logic now and allows checking whether the
lockdown state matches, too, which led to a lot of misunderstandings.

Fix: 29199431
Change-Id: I94a2c38c4837f9c33b5b9c2becb52eeb7e2a2534

Robin Lee   commited 2016-06-14 13:24:17 +00:00
a4325d282c
Merge "Show sign-in to network notification to all users, not just owner." into nyc-dev
Paul Jensen   authored and   Android (Google) Code Review   commited 2016-06-14 11:05:32 +00:00
634bd0eb4e
Show sign-in to network notification to all users, not just owner.
All users should be made aware a captive portal is in place and be
given the opportunity to sign into the network.  Without this fix
other users are not notified and given a chance to sign-in.

Change-Id: I1bf823d5f6a36f391dca4be5f6a584e8562a72a7
Fixes: 23079964

Paul Jensen   commited 2016-06-13 09:39:28 -04:00
efffb79661
Package changed/removed listeners for always-on VPN
Fix 2 problems of always-on vpn after always-on package is removed
1. Prevent network being locked down (blocking all network traffic)
   Otherwise, user has no way to download the vpn app from Play Store,
   and never be able to gain control of the network again.
2. Allow user to connect other vpn app.

Implementation
1. Switch off always-on mode if the package gets removed.
2. Restart always-on mode if the package gets replaced/upgraded.

Bug: 29050764
Change-Id: Id3e389ae0b11c6002a5167919292d9634c2014cb

Robin Lee   commited 2016-06-06 15:42:50 +00:00
2073a5c734
Merge "Include network name in validation logs for dumpsys" into nyc-dev
Paul Jensen   authored and   Android (Google) Code Review   commited 2016-06-06 11:08:45 +00:00
daef5224d1
Include network name in validation logs for dumpsys
Previously this was included in the log messages from NetworkMonitor
but that has been removed (ag/944107), making it frequently impossible
to know what network the logs apply to as there may be no way to
correlate NetIDs to WiFi SSIDs or Cellular networks if the log has wrapped.

Bug: 26075613
Change-Id: I2e3cd41fffb616ab9f855cb16790360bd3414793

Paul Jensen   commited 2016-06-03 13:51:21 -04:00
72b24b1b5b
Fix that fail to setup any vpn after Network Settings reset and always-on vpn is on
Cause: It revoked the user consent of the vpn app without reseting always-on vpn.
In addition, prepareVpn sets legacy vpn as the current package, the state in
Vpn.class is broken, as it thought the current always-on package is legacy vpn,
(mAlwaysOn is only for app vpn, not for legacy vpn). As a result, prepareVpn rejects
all VpnService.prepare.

Bug: 29031820
Change-Id: Id6bf1d6f38cf134a872811806301b8a602fb5725

Victor Chang   commited 2016-06-03 17:14:32 +01:00
4754f8d47f
Merge "Return legacy VPN info regardless of lockdown mode" into nyc-dev
Robin Lee   authored and   Android (Google) Code Review   commited 2016-05-25 21:05:55 +00:00
ca9615bb20
Merge "Fix default network transition event recording" into nyc-dev
Hugo Benichi   authored and   Android (Google) Code Review   commited 2016-05-25 03:22:32 +00:00
3cd6a8b85d
Fix default network transition event recording
When disconnecting from a default network X and falling back on another
connected network Y as the new default, ConnectivityService was
attempting to record this event as a X -> Y "atomic" transition.

In practice the default network connectivity is actually lost and
recovering default network takes some non-zero time.

This patch changes the event recording to always record disconnection as
X -> 0 events. At the same time, if there is a fallback network that is
elected as the new default ConnectivityService will also record a 0 -> Y
event.

This patch also improves pretty-printing of DefaultNetworkEvent.

Extract from $ adb shell dumpsys connectivity_metrics_logger --events
17:51:00.086: DefaultNetworkEvent(0 -> 100:CELLULAR)
17:51:25.232: DefaultNetworkEvent(100:IPv4 -> 101:WIFI) # wifi goes on
17:51:44.064: DefaultNetworkEvent(101:DUAL -> 0)        # wifi goes off
17:51:44.187: DefaultNetworkEvent(0 -> 100:CELLULAR)

Bug: 28204408
Change-Id: I63252633235bf6ba833b9ac431a80dda75a93e67

Hugo Benichi   commited 2016-05-25 10:03:38 +09:00
3f34b66e47
Fixed enforceMeteredApnPolicy when Data Saver is on.
When enforceMeteredApnPolicy() is called when Data Saver mode is on and
the caller's UID is not whitelisted, it should add a
NET_CAPABILITY_NOT_METERED to the capabilities.

Change-Id: Ieed4f4a7634ee023ec58c91859263655e0ba62d4
Fixes: 28608499 (and https://code.google.com/p/android/issues/detail?id=208478)

Felipe Leme   commited 2016-05-23 09:43:53 -07:00
35631e00c9
Merge "Lock down networking when waiting for always-on" into nyc-dev
Robin Lee   authored and   Android (Google) Code Review   commited 2016-05-18 23:37:24 +00:00
1540a79a8b
Lock down networking when waiting for always-on
Fix: 26694104
Fix: 27042309
Fix: 28335277
Change-Id: I47a4c9d2b98235195b1356af3dabf7235870e4fa

Robin Lee   commited 2016-05-19 00:26:53 +01:00
48bf4ec223
Return legacy VPN info regardless of lockdown mode
This stops Settings from telling the user detailed information, and
doesn't really protect anything secret -- privileged apps can already
tell that there's an active VPN by looking at network info.

Change-Id: I9c2a3cab6dff1b62e94a9e0735dccde226fd26a3
Fix: 28624328

Robin Lee   commited 2016-05-17 14:31:52 +01:00
08b036aebd
Added a onRestrictBackgroundBlacklistChanged() callback.
When an UID is added / removed to the Data Saver blacklist, it's
necessary to notify internal components such as the Settings UI (which
was erroneously listening to UID rules changes instead).

BUG: 28743623
BUG: 28791717

Change-Id: I11c85e141dfe074ad390fd324309d2412bfbbd45

Felipe Leme   commited 2016-05-16 13:30:57 -07:00
81fb728ce4
Fixed connectivity state in some power saving scenarios.
NetworkPolicyManagerService (NPMS) manages 4 type of network restriction
when apps are running on background:

- Data Saver Mode (data usage restriction on metered-networks)
- Battery Saver Mode (power restriction on all networks)
- Doze Mode (power restriction on all networks)
- App Idle (power restriction on all networks)

These restrictions affects 2 parts of the system:

- Internal framework state on NPMS which is propagated to other internal
  classes.
- External firewall rules (managed by netd).

Although each of the power-related restrictions have their own external firewall
rules, internally apps are whitelisted to them through the same
whitelist, and the current code is only updating the internal state (and
notifying the internal listeners) when Battery Saver Mode is on.

As a consequence of this problem, there are scenarios where an app
correctly does not have internet access (because the firewall rules are
properly set), but the NetworkInfo state returns the wrong state (like
CONNECTED / CONNECTED).

This CL fixes this problem by splitting the power-related logic from
updateRulesForRestrictBackgroundLocked() into its own
method (updateRulesForPowerRestrictionsLocked()), and making sure such
method is called whenever the firewall rules are updated.

Externally to this change, the CTS tests were also improved to verify
the apps get the proper connection state; it can be verified by running:

cts-tradefed run commandAndExit cts -m CtsHostsideNetworkTests \
    -t com.android.cts.net.HostsideRestrictBackgroundNetworkTests

BUG: 28521946
Change-Id: Id5187eb7a59c549ef30e2b17627ae2d734afa789

Felipe Leme   commited 2016-05-12 12:33:23 -07:00
35bfb4616b
Fixed connectivity state in some restricted network scenarios.
NetworkPolicyManagerService (NMPS) keeps an internal list of uid
rules (mUidRules) for network restrictions, and when these rules
changes it needs to notify external listeners (such as
ConnectivityService / CS).

Prior to Android N, both Data Saver mode (the feature previously known
as "Restrict Baground Data") and Battery Save mode used the same set of
firewall rules to implement their restrictions: when Battery Saver mode
NPMS would mark all networks as metered and set the proper firewall
rules externally.

Recently, these 2 modes were split in 2 distinct firewall rules and
NMPS.updateRuleForRestrictBackgroundLocked() was changed to update
the mUidRules logic based on the Data Saver firewall (since the Battery
Saver firewall changes are handled externally, on
updateRuleForRestrictPowerLocked()). As such, CS was not notified when
the power-related changes were made, which would cause apps to get a
state of CONNECTED / CONNECTED when querying its active connection.

Another scenario that is not properly handled is when a UID whitelisted
for Data Saver is brought back to foreground: although the proper
firewall rules are set, CS is not notified, and the apps state would be
DISCONNECTED / BLOCKED.

This CL introduces many changes that fix this issue:

- Fixed updateRuleForRestrictBackgroundLocked() to invoke
  onUidRulesChanged() when the Battery Saver status changed.
- Fixed updateRuleForRestrictBackgroundLocked() to invoke
  onUidRulesChanged() when an app whitelisted for Data Saver is brought
  back to the foreground.
- Added a new API (onRestrictPowerChanged() and getRestrictPower())
  to notify external services about Battery Saver mode changes.
- Fixed CS logic to properly handle the Battery Saver changes.

Externally to this change, the CTS tests were also improved to verify
the apps get the proper connection state; they can be verified running:

cts-tradefed run commandAndExit cts -m CtsHostsideNetworkTests \
    -t com.android.cts.net.HostsideRestrictBackgroundNetworkTests

BUG: 28521946

Change-Id: I8eaccd39968eb4b8c6b34f462fbc541e5daf55f1

Felipe Leme   commited 2016-05-06 14:53:50 -07:00
b414e6f2a3
Refactored NetworkPolicyManagerService mUidRules.
NetworkPolicyManagerService (NMPS) keeps an internal list of uid
rules (mUidRules) for network restrictions, and when these rules
changes it needs to notify external listeners (such as
ConnectivityService / CS).

Prior to Android N, both Data Saver mode (the feature previously known
as "Restrict Baground Data") and Battery Save mode used the same set of
firewall rules to implement their restrictions: when Battery Saver mode
NPMS would mark all networks as metered and set the proper firewall
rules externally.

Recently, these 2 modes were split in 2 distinct firewall rules and
NMPS.updateRuleForRestrictBackgroundLocked() was changed to update
the mUidRules logic based on the Data Saver firewall (since the Battery
Saver firewall changes are handled externally, on
updateRuleForRestrictPowerLocked()). As such, CS was not notified when
the power-related changes were made, which would cause apps to get a
state of CONNECTED / CONNECTED when querying its active connection.

This change refactores the mUidRules to use bitmasks, in preparation for
another change that will fix the issue.

It also fixes a minor bug that was preventing removed packages to be
removed from the whitelist.

BUG: 28521946
Change-Id: I9f0e1509a6192cad403f740c1cd76a6b7dab7d26

Felipe Leme   commited 2016-05-06 17:58:40 +00:00
b30ef31381
Merge "Add lockdownEnabled parameter to always-on VPN API" into nyc-dev
Robin Lee   authored and   Android (Google) Code Review   commited 2016-05-04 18:38:30 +00:00
4c2242b254
Merge changes I31d5260d,Ied92f558 into nyc-dev
* changes:
  Start VPN as early as possible during startup
  Split network agent created state from connected state

Robin Lee   authored and   Android (Google) Code Review   commited 2016-05-04 18:35:19 +00:00
9677633814
Start VPN as early as possible during startup
- Switch from USER_STARTING to USER_STARTED which is the foreground
  version of the broadcast

- Set the new VPN network as CONNECTING initially to avoid spamming
  apps with useless notifications ahead of the network being fully
  available

Bug: 26694104
Fix: 28335277
Change-Id: I31d5260dda62ff440c31c44eb0aa5c891e2717e5

Robin Lee   commited 2016-05-04 17:46:10 +01:00
3cc9ba48ef
Split network agent created state from connected state
Network creation setup sometimes involves extra steps after actually
calling into netd to create the underlying network, rules & routes &
to begin allowing sockets bound to it.

For example, VPN networks can set a UID whitelist or blacklist. This
should happen:

  - AFTER there is a netID & network created in netd as
    network-specific rules will need to be tied to / point at it. Those
    rules are tied to the lifecycle of netd's network which is tracked
    by `NetworkAgentInfo.created` on the frameworks side.

  - BEFORE the CONNECTED broadcast and network callbacks have been sent
    out so that we don't create a race condition between clients that
    want to use the network and the server actually having the network
    ready

The race condition existed prior to this change and required any client
making use of network callbacks to sleep for a short amount of time after
receiving to actually be able to use the network.

Among other things, that race condition is now fixed.

Bug: 26694104
Change-Id: Ied92f5588a98c3e97f456bc98b676bf201ab5472

Robin Lee   commited 2016-05-04 16:24:46 +00:00
bc024e5d66
Add lockdownEnabled parameter to always-on VPN API
Allows callers to opt-out of blockading network traffic during boot and
on VPN app failure.

Bug: 26694104
Change-Id: Ibfbd43ad09a25f2e38053fcd6306df3711f8bde2

Robin Lee   commited 2016-05-03 13:24:42 +01:00
ab2788acbc
Merge changes I86257bc8,I5c2221c5 into nyc-dev
* changes:
  Use Netd's binder interface to set resolver configuration.
  Add Gservices settings for resolver configuration.

Lorenzo Colitti   authored and   Android (Google) Code Review   commited 2016-05-02 12:49:19 +00:00
8925ef3257
Use Netd's binder interface to set resolver configuration.
BUG: 25731675
Change-Id: I86257bc84371832466161e5357ae173c305a7d18

Pierre Imai   commited 2016-05-02 08:29:21 +00:00
5b5fe390dd
Flag to mark foreground jobs, fix data saver.
When a job will eventually run in the foreground, the internal
scheduling needs to ignore any background network restrictions when
satisfying constraints.  This also means the job should ignore the
current device doze state, since the requesting app could get the
same behavior by starting their own foreground service.

Always dispatch network policy changes to ConnectivityService first
to ensure that it has up-to-date information.  Fix bugs around data
saver that were causing networks to not be marked as BLOCKED for
background apps; before this fix apps would have been spinning in
internal connectivity loops, thinking that the network was actually
connected when the kernel was actually blocking their traffic.

Offer new ConnectivityService method overloads to ignore the blocked
state for a specific UID.

Print unsatisfied job constraints to aid debugging.

Bug: 26571724
Change-Id: Iaaa17933e6dc1bf6d3dff26d0bfc12222e51e241

Jeff Sharkey   commited 2016-04-29 13:44:07 -06:00
833c35b354
Stop user faster and clear stale broadcasts
Moved several USER_STOPPING registered receivers to listen
to USER_STOPPED, since they don't need to be blocking the
shutdown of the user.

Clear all stale broadcasts when stopping a user, so that we
don't unnecessarily start up processes and deliver stale
broadcasts. This was causing code to run when the user was
already stopped and resulted in crashes when other providers
and services couldn't be started anymore. Hopefully this fixes
many of those races.

Bug: 28371487
Change-Id: Ic35a7a23fa8fe009a53f8bf7545d4dad5fa34134

Amith Yamasani   commited 2016-04-28 10:02:44 -07:00
f786dbf65c
Tethering and Data Saver: There Can Be Only One!
If tethering is on when Data Saver mode is turned on, tethering should
be disabled, and vice-versa.

BUG: 28313291
Change-Id: I7f3dadbd97ea1492ab76b41043dea7487c1db02d

Felipe Leme   commited 2016-04-25 15:36:25 -07:00
e0565ece68
API changes for DownloadManager and JobScheduler.
To support moving DownloadManager, add new JobScheduler network type
constraint that matches "any network except roaming."  Also add an
API to get a specific JobInfo by ID.

Since the default network can be different on a per-app basis, and
individual apps may be blocked due to app standby, evaluate job
connectivity constraints on a per-UID basis.  To implement this
cleanly, add NetworkInfo.isMetered() to match the isRoaming() API.

Add new DownloadManager APIs to support charging and device idle
constraints, which are plumbed through to JobScheduler under the
hood when scheduled.

Add filtering to JobScheduler dumpsys to omit noisy details for
packages the caller isn't interested in.

Bug: 28098882, 26571724, 19821935
Change-Id: I09ca7184ef7ce6adba399f579d415a5fb2ea6110

Jeff Sharkey   commited 2016-04-24 14:39:34 -06:00
ea4037847d
Split network monitoring and portal probe events
This patches changes how captive portal tests and network lifecycle
events are logged as connectivity events:
  - it splits NetworkMonitorEvent into two event classes:
      - ValidationProbeEvent for logging individual probe events.
      - NetworkEvent for logging network connection, validation,
        lingering, and disconnection.
  - it removes the redundant CaptivePortalCheckResultEvent class.
    The information logged in CaptivePortalCheckResultEvent was already
    logged by NetworkMonitorEvent, but missing the evaluation durations.
    It is now logged by ValidationProbeEvent.
  - it removes the CaptivePortalStateChangeEvent class, which is now
    redundant with NetworkEvent, but missing evaluation durations.

In addition, it adds event logging when ConnectivityService puts a
network into lingering or removes a network from lingering.

Bug: 28204408
Change-Id: I8f9752e4d36175ecfcbd1545a01a41bad6e06ea4

Hugo Benichi   commited 2016-04-22 17:08:56 +09:00
a616d96929
Merge "Cap number of NetworkRequests a UID can make to 100" into nyc-dev
Paul Jensen   authored and   Android (Google) Code Review   commited 2016-04-21 13:47:13 +00:00
4088540675
Some fixes in ConnectivityService event logging
Bug: 28204408
Change-Id: I44ed9539bb213a845c2bcc2861c947af7c3c9ef4

Hugo Benichi   commited 2016-04-21 11:03:08 +09:00
41667a0ca3
Cap number of NetworkRequests a UID can make to 100
This prevents DoSing ConnectivityService with too many requests.

Fixes: 27253080
Change-Id: Id0480d220b2f01b9ef1146bef8ead2fc8287e28d

Paul Jensen   commited 2016-04-20 10:52:47 -04:00
7f11b4f8b3
Added onRestrictBackgroundWhitelistChanged callback.
When users add or remove an app to the Data Saver Mode whitelist, the
app is notified through a
ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED. But besides this
broadcast, it's also necessary to notify internal apps such Settings,
hence a new method is being added to INetworkPolicyListener.

BUG: 27481520
Change-Id: I1537a77becf6b7da1535ed5faabdc894fd9f7084

Felipe Leme   commited 2016-04-19 12:06:00 -07:00
56f0084553
Remove unnecessary allocation+unboxing of objects.
Transforming String->int can be done with 0 allocations
using Integer.parseInt.

bug: 28078871
Change-Id: I8d9f322d7154728849dde61ef282046032858d60

Narayan Kamath   commited 2016-04-18 09:55:59 +01:00
846fa3ec83
Also log IPv4 and IPv6 connectivity of any previous default network
Change-Id: I07595c0a131fea21914f524949cd64af87403b88

Erik Kline   commited 2016-04-14 17:54:46 +09:00
2e815d38ac
Log an event whenever we lose the default network.
Change-Id: Ia71865a90b2db5dc0d3ad627563a6b1f99686f04

Pierre Imai   commited 2016-04-14 15:38:29 +09:00
dd55013f97
Record the transport types for connectivity events.
BUG: 25691077
Change-Id: I40b6de5446325e717c0356603fd66cd395db9acb

Pierre Imai   commited 2016-04-14 15:38:17 +09:00
b5cffc79fb
If Internet probe is redirected, pass redirect destination to NetworkAgent.
Transport may use the redirect to make additional determination about network
state.

Bug: 25203607
Change-Id: I07d8918f13fdcbe0b6fd757536bfc1850a2a244f

Paul Jensen   commited 2016-04-12 08:54:36 -04:00
6b866480f5
Merge "Reinstate much-reduced ConnectivityService logging." into nyc-dev
Lorenzo Colitti   authored and   Android (Google) Code Review   commited 2016-04-11 16:08:52 +00:00
5275052215
Merge changes Ic2c84de7,I379aef92 into nyc-dev
* changes:
  Remove duplicated code in NetworkStateTrackerHandler.
  Improve Tethering and NativeDaemonConnector logging.

Lorenzo Colitti   authored and   Android (Google) Code Review   commited 2016-04-11 14:27:31 +00:00
399db1e148
Reinstate much-reduced ConnectivityService logging.
Change-Id: I9d1292f8c036be2a854fdb537f4ccb957d211966

Lorenzo Colitti   commited 2016-04-11 23:19:06 +09:00
d0a7a79b6c
Remove duplicated code in NetworkStateTrackerHandler.
Also use MessageUtils to decode message names.

Change-Id: Ic2c84de73fbf3eb10cc9634a083e5d3b3ffb807a

Lorenzo Colitti   commited 2016-04-11 17:40:22 +09:00
f0461853c0
Merge "Internal API for system apps to determine default network for other apps" into nyc-dev
Robin Lee   authored and   Android (Google) Code Review   commited 2016-04-07 16:43:15 +00:00
f81cbe1697
Internal API for system apps to determine default network for other apps
Callers with CONNECTIVITY_INTERNAL permission can read off the netId
that an application is assigned to by default.

Necessary for making connections as the default network for a client
app eg. when downloading stuff on its behalf.

Bug: 27074270
Change-Id: I8d35e8e99126875f55f3c545090326f3e9be43fb

Robin Lee   commited 2016-04-07 14:55:59 +00:00
da4d2e2b67
Don't flush DNS cache on route changes.
Since Lollipop, routes are isolated within Networks.  Flushing a
Network's DNS cache whenever that same Network's routes are updated
doesn't provide any benefit.  Any system components depending on this
behaviour need to uncovered and fixed.

Additionally, clean up no-longer-used flushNetworkDnsCache().  This
should be replaced, when needed, by a proper binder interface to netd.

Change-Id: I34bf79e4839da014d466058a876d754209d0c007

Erik Kline   commited 2016-04-06 11:30:51 +09:00
3d4ed1573a
Delete unused default DNS setting code
Change-Id: I601a647714171f205d179d6fef6c112949fc5a94

Erik Kline   commited 2016-04-05 11:48:01 +09:00
d6506a1d41
Move ApfFilter from ConnectivityService to IpManager
There's a few advantages to having ApfFilter in IpManager:
1. If things go wrong, crashing a particular transport is less bad then
   crashing ConnectivityService.  We also don't want to use
   ConnectivityService as a dumping ground for transport-specific logic.
2. This makes implementing WifiManager.MulticastLock a lot simpler and
   safer because enabling/disabling it doesn't have to go through the
   NetworkAgent, which could risk various races (e.g. installing a filter
   into the wrong WiFi network).
3. IpManager is the ultimate source for LinkProperties for a particular
   transport and since ApfFilter uses the LinkProperties it's better to
   have it closely paired with the IpManager. Likewise, ApfFilter needs
   to know the APF capabilities of the transport, so having it in
   the transport avoids having to parcel this information through the
   NetworkAgent.

Bug: 26238573
Change-Id: I99b85f2b64972f0e7572170ec5d1926081aa3429

Paul Jensen   commited 2016-03-25 07:46:07 -04:00
5eaf63272a