Commit Graph

675 Commits

Author SHA1 Message Date
Hugo Benichi
109817b229 Merge "Merge changes I4719b4dc,I0308cdf4,I38db1bb7 am: a3c28cc567 am: 3fce811dcb am: b025492a6b" into oc-mr1-dev-plus-aosp
am: add643c337

Change-Id: I235a6e894157f0a2b6bbcb26a35dd758da6aefc3
2017-09-15 06:54:11 +00:00
Hugo Benichi
c73ff01a14 Merge "Merge changes Ie2676b20,Ie8db6f85 am: 61901ddedd am: 4188432a7b am: 7d16886c7e" into oc-mr1-dev-plus-aosp
am: 24d8238137

Change-Id: I05671ad4513645fff420cbc9fc4f8355bdeaa1f1
2017-09-15 06:51:45 +00:00
Hugo Benichi
5e1d504ad8 Merge changes I4719b4dc,I0308cdf4,I38db1bb7 am: a3c28cc567 am: 3fce811dcb
am: b025492a6b

Change-Id: I5385a3747e039a42e86034f7632edd0f855b2eb1
2017-09-14 18:11:06 +00:00
Hugo Benichi
6bc5c97e96 Merge changes Ie2676b20,Ie8db6f85 am: 61901ddedd am: 4188432a7b
am: 7d16886c7e

Change-Id: Ifd0ace409909d258db3738e58126bbf1c48af5dc
2017-09-14 18:02:14 +00:00
Hugo Benichi
3fce811dcb Merge changes I4719b4dc,I0308cdf4,I38db1bb7
am: a3c28cc567

Change-Id: I3b222afc77b121769cc18d52e5c3d8bcec9db886
2017-09-14 12:08:26 +00:00
Hugo Benichi
4188432a7b Merge changes Ie2676b20,Ie8db6f85
am: 61901ddedd

Change-Id: Ib4fab32418da8274bd6b5cb9fef85e0db79d866a
2017-09-14 12:01:19 +00:00
Hugo Benichi
a3c28cc567 Merge changes I4719b4dc,I0308cdf4,I38db1bb7
* changes:
  IpManagerTest: fix flaky test
  Fix flaky NsdManagerTest
  Boostrap test for NetworkMonitor
2017-09-14 11:59:58 +00:00
Hugo Benichi
60c9f63b66 Connectivity metrics: add WakeupStats events
This patch defines a new WakeupStats event in ipconnectivity.proto and
populates these events from the NFLOG wakeup events stored in
NetdEventListenerService.

There is one WakeupStats object per known interface on which ingress
packets arrive and may wake the system up.

Example from $ adb shell dumpsys connmetrics list:

UPDATEME
...
WakeupStats(wlan0, total: 58, root: 0, system: 3, apps: 38, non-apps: 0, unrouted: 17, 6111s)
WakeupEvent(13:36:31.686, iface wlan0, uid -1)
WakeupEvent(13:38:50.846, iface wlan0, uid -1)
WakeupEvent(13:39:16.676, iface wlan0, uid 10065)
WakeupEvent(13:40:32.144, iface wlan0, uid 1000)
WakeupEvent(13:40:35.827, iface wlan0, uid 1000)
WakeupEvent(13:40:47.913, iface wlan0, uid 10004)
WakeupEvent(13:40:52.622, iface wlan0, uid 10014)
WakeupEvent(13:41:06.036, iface wlan0, uid 10004)
...

Bug: 34901696
Bug: 62179647
Test: runtest frameworks-net
Change-Id: Ie2676b20bfb411a1902f4942643df0c20e268d99
2017-09-14 13:29:56 +09:00
Hugo Benichi
25c7f49ff3 IpManagerTest: fix flaky test
Reset the callback mock for every onLinkPropertiesChange expected when
pushing address updates on the BaseNetworkObserver.

Bug: 32561414
Bug: 62918393
Test: runtest frameworks-net, IpManagerTest passes 200 times in a row
Change-Id: I4719b4dc86044438243887634191c2d21686b80f
2017-09-13 18:39:50 +09:00
Hugo Benichi
2a94ac555e Fix flaky NsdManagerTest
Bad synchronization between the mock handler and the test assertions
were causing testDiscoverService() to sometime fails (1/50 ~ 1/100 repro
rate).

Bug: 32561414
Bug: 62918393
Test: runtest frameworks-net, NsdManager#testDiscoverService now passes
      1000 times without errors.
Change-Id: I0308cdf48fc6bdc2fc9b4e8f7d5241a1cf2ea443
2017-09-13 18:38:53 +09:00
Hugo Benichi
c894b12388 Boostrap test for NetworkMonitor
This will finally allow to write captive portal detection unit tests.

Bug: 32561414
Bug: 62918393
Test: runtest frameworks-net
Change-Id: I38db1bb79ae80a82b4199dc9cb1b56257e0cf222
2017-09-13 16:21:50 +09:00
Hugo Benichi
f562ac34a5 Connectivity metrics: collect NFLOG wakeup events
This patch stores NFLOG packet wakeup events sent by Netd to the system
server into a ring buffer inside NetdEventListenerService. The content
of this buffer is accessible by $ dumpsys connmetrics or $ dumpsys
connmetrics list, and is added to bug reports.

The wakeup event buffer stores currently uid and timestamps.

Bug: 34901696
Bug: 62179647
Test: runtest frameworks-net, new unit tests
Change-Id: Ie8db6f8572b1a929a20398d8dc03e189bc488382
2017-09-12 10:02:13 +09:00
Erik Kline
5c8c836bc4 Merge "Support NAT keepalives"
am: 6c7c55206d

Change-Id: Id241560fa48636f1bc56fa06d2151f1bcbdb19ab
2017-09-08 04:27:34 +00:00
Erik Kline
fc105bb6d8 Support NAT keepalives
Test: as follows
    - built
    - flashed
    - booted
    - "runtest frameworks-net" passes
    - turned on debugging and walked around watching IpReachabilityMonitor
      force neighbors into NUD_PROBE state without error
    - observed NAT callbacks happening without any reported errors
    - watched:
        adb shell cat /proc/net/nf_conntrack | egrep '192[.]168[.]43[.]' | sort -n -k5
      for correct timeout updates

Bug: 29337859
Bug: 32163131

Merged-In: I82ac60e5ad79ec64a13df6ec56b5b51b223f8dde
Merged-In: I09bc685e821ec5e871576a54c4290edea4c5160b
Merged-In: I4d180369a8f64ee494b016656988252d98a09ba4
Change-Id: Icb23da64cfaa3a19f7bc75fba426a52b0994fb0f
(cherry picked from commit 7a65bc62fb)
2017-09-08 10:54:20 +09:00
Hugo Benichi
166413798d Merge changes Ic92b6d5c,I98b23b22,I0fb40d7b
am: 9c57accc45

Change-Id: Id1a9f8232ef3e08cf708d2406403fce3c59be9e5
2017-09-08 01:42:28 +00:00
Erik Kline
b228a30b39 Merge "Support NAT keepalives" into oc-mr1-dev am: 4fae111ca2
am: a0991bdc14

Change-Id: I4d180369a8f64ee494b016656988252d98a09ba4
2017-09-07 21:42:58 +00:00
Erik Kline
a0991bdc14 Merge "Support NAT keepalives" into oc-mr1-dev
am: 4fae111ca2

Change-Id: I82ac60e5ad79ec64a13df6ec56b5b51b223f8dde
2017-09-07 16:48:57 +00:00
Hugo Benichi
4eccf78000 IP connectivity metrics: fix tests after proto update
Update to ipconnectivity.proto in commit
6d2f506bfd broke the associated unit
tests (Change-Id: I4cf5b95956df721aecd63fddfb026a7266c190b9)

Bug: 34901696
Bug: 65439160
Test: runtest frameworks-net
Merged-In: I57a6bad8a9836b1c45690c4589b416786ce1dfa0

(cherry picked from commit 822c5bf778)

Change-Id: I98b23b2208bbd7d12237fcb000f3cf10c53d9e55
2017-09-07 22:17:18 +09:00
Rubin Xu
1683efe4ec Merge "Always add local subnet routes to the interface's routing table" am: 981228be38 am: 5fb26a1270 am: e3469a426e
am: 90f104931a

Change-Id: I704f9895ddd4c4fc2ab50a927939aee67a916fae
2017-09-07 13:04:28 +00:00
Rubin Xu
90f104931a Merge "Always add local subnet routes to the interface's routing table" am: 981228be38 am: 5fb26a1270
am: e3469a426e

Change-Id: I21f4231c968b37cdcf1565279eedfb990dbc583b
2017-09-07 12:55:58 +00:00
Rubin Xu
5fb26a1270 Merge "Always add local subnet routes to the interface's routing table"
am: 981228be38

Change-Id: I0b1728fae18c891d91fafdfbb1905c05e0fea47f
2017-09-07 12:25:05 +00:00
Erik Kline
7a65bc62fb Support NAT keepalives
Test: as follows
    - built
    - flashed
    - booted
    - "runtest frameworks-net" passes
    - turned on debugging and walked around watching IpReachabilityMonitor
      force neighbors into NUD_PROBE state without error
    - observed NAT callbacks happening without any reported errors
    - watched:
        adb shell cat /proc/net/nf_conntrack | egrep '192[.]168[.]43[.]' | sort -n -k5
      for correct timeout updates

Bug: 29337859
Bug: 32163131

Change-Id: Icb23da64cfaa3a19f7bc75fba426a52b0994fb0f
2017-09-07 18:53:52 +09:00
Rubin Xu
1bb5c0818f Always add local subnet routes to the interface's routing table
For some networks such as mobile data connections, its LinkProperties
does not contain routes for the local subnet so no such route is added
to the interface's routing table. This can be problematic especially
if the device is in VPN lockdown mode where there exists high-priority
PROHIBIT routing rule which in turn blocks the network's default gateway
route from being added (next hop address hitting the prohibit rule).

We fix this by patching LinkProperties to always include direct connected routes
when they are received by ConnectivityService. This has the added advantage that
when apps get LinkProperties, they see the directly connected routes as well.

Bug: 63662962
Test: runtest frameworks-core -c android.net.LinkPropertiesTest
Test: runtest frameworks-services -c com.android.server.ConnectivityServiceTest
Test: Start with device with mobile data, set up ics-OpenVPN in always-on
      lockdown mode. Turn off mobile data then turn it back on, observe
      mobile data connectivity is restored and VPN successfully reconnects.
Change-Id: I35b614eebccfd22c4a5270f40256f9be1e25abfb
2017-09-07 10:50:20 +01:00
Hugo Benichi
3cdb095ef4 Merge "Nat464Xlat: correct racefree teardown" into oc-mr1-dev 2017-09-05 22:35:45 +00:00
Hugo Benichi
7674fcecaf Merge "Nat464Xlat: correct racefree teardown" am: e6793f2795 am: a1af47b6ad am: e92029d894
am: f6c74c5362

Change-Id: Id0194eddfd99bb6287b599d22a031c60085521f7
2017-09-05 13:24:43 +00:00
Hugo Benichi
3fb5f0db3f Nat464Xlat: correct racefree teardown
This patch relays the NetworkBaseObserver notifications about nat
464xlat stacked interfaces onto the ConnectivityService handler.

This allows to process interface up and down notifications in the
same thread context and eliminates several races:

  - NPE risk due to race between fixupLinkProperties called on
    ConnectivityService thread and interfaceRemoved called on
    NetworkManagementService thread.
  - stale LinkProperties pointer reads in both NetworkBaseObserver
    callbacks not called on ConnectivityService handler.
  - removes the race between stop() and interfaceRemoved().
  - removes superfluous LinkProperties notifications when stop() is
    called before the stacked interface goes up.

The teardown procedure logic common to stop() and interfaceRemoved() is
put into enterStoppedState() and enterIdleState().

This allows to distinguish and correctly handle the following teardown
scenarios:
 - an IPv4 appears -> ConnectivityService calls Nat464Xlat#stop()
                   -> Nat464Xlat calls stopClatd
                   -> clatd stops
                   -> if the stacked interface was up, it is removed
                   -> Nat464Xlat#interfaceRemoved() is triggered and
                      a LinkProperties update is sent.

 - network disconnects -> ConnectivityService calls Nat464Xlat#stop()
                       -> Nat464Xlat calls stopClatd
                       -> clatd stops
                       -> if the stacked interface was up, it is removed
                       -> Nat464Xlat#interfaceRemoved() is triggered and
                          a LinkProperties update is sent.

 - clatd crashes or exit -> Nat464Xlat#interfaceRemoved() is triggered
                         -> Nat464Xlat unregisters itself as a network
                            observer
                         -> ConnectivityService is updated about the
                            stacked interface missing, and restarts
                            Nat464Xlat if needed.

Note that the first two scenarios have two cases: stop() can be called
before the notification for the stacked interface going up (STARTED), or
after (RUNNING). In the first case, Nat464Xlat must unregister
immediately as a network observer to avoid leaks.

This patch also:
  - removes/simplifies comments related to the threading model which
    are no obsolete.
  - extract clatd management logic from ConnectivityService into
    NetworkAgentInfo
  - add new unit tests where there was none before.

Bug: 62918393
Bug: 62997041
Bug: 64571917
Bug: 65225023
Test: runtest frameworks-net
Merged-In: I27221a8a60fd9760b567ed322cc79228df877e56
Merged-In: I8f07dfbe5ea8259ff9f5793503f534945e67ad74
Merged-In: I8612db5e5050690db8cf41dd04944b4c22da340c
Merged-In: Icb2dc8229b5ea45e319233b588f2dbe39ea40d4c
Merged-In: Ibafea69224e832a6316c17dbb9b2d62a233088ac

(cherry picked from commit ef502887ec)

Change-Id: I9d075048873b0e1c5ed45b5674ada3fb303c2bfb
2017-09-05 22:12:01 +09:00
Hugo Benichi
f6c74c5362 Merge "Nat464Xlat: correct racefree teardown" am: e6793f2795 am: a1af47b6ad
am: e92029d894

Change-Id: Ibafea69224e832a6316c17dbb9b2d62a233088ac
2017-09-05 13:06:59 +00:00
Hugo Benichi
a1af47b6ad Merge "Nat464Xlat: correct racefree teardown"
am: e6793f2795

Change-Id: I8612db5e5050690db8cf41dd04944b4c22da340c
2017-09-05 12:30:08 +00:00
Hugo Benichi
e6793f2795 Merge "Nat464Xlat: correct racefree teardown" 2017-09-05 12:12:02 +00:00
Hugo Benichi
ef502887ec Nat464Xlat: correct racefree teardown
This patch relays the NetworkBaseObserver notifications about nat
464xlat stacked interfaces onto the ConnectivityService handler.

This allows to process interface up and down notifications in the
same thread context and eliminates several races:

  - NPE risk due to race between fixupLinkProperties called on
    ConnectivityService thread and interfaceRemoved called on
    NetworkManagementService thread.
  - stale LinkProperties pointer reads in both NetworkBaseObserver
    callbacks not called on ConnectivityService handler.
  - removes the race between stop() and interfaceRemoved().
  - removes superfluous LinkProperties notifications when stop() is
    called before the stacked interface goes up.

The teardown procedure logic common to stop() and interfaceRemoved() is
put into enterStoppedState() and enterIdleState().

This allows to distinguish and correctly handle the following teardown
scenarios:
 - an IPv4 appears -> ConnectivityService calls Nat464Xlat#stop()
                   -> Nat464Xlat calls stopClatd
                   -> clatd stops
                   -> if the stacked interface was up, it is removed
                   -> Nat464Xlat#interfaceRemoved() is triggered and
                      a LinkProperties update is sent.

 - network disconnects -> ConnectivityService calls Nat464Xlat#stop()
                       -> Nat464Xlat calls stopClatd
                       -> clatd stops
                       -> if the stacked interface was up, it is removed
                       -> Nat464Xlat#interfaceRemoved() is triggered and
                          a LinkProperties update is sent.

 - clatd crashes or exit -> Nat464Xlat#interfaceRemoved() is triggered
                         -> Nat464Xlat unregisters itself as a network
                            observer
                         -> ConnectivityService is updated about the
                            stacked interface missing, and restarts
                            Nat464Xlat if needed.

Note that the first two scenarios have two cases: stop() can be called
before the notification for the stacked interface going up (STARTED), or
after (RUNNING). In the first case, Nat464Xlat must unregister
immediately as a network observer to avoid leaks.

This patch also:
  - removes/simplifies comments related to the threading model which
    are no obsolete.
  - extract clatd management logic from ConnectivityService into
    NetworkAgentInfo
  - add new unit tests where there was none before.

Bug: 62918393
Bug: 62997041
Bug: 64571917
Bug: 65225023
Test: runtest frameworks-net
Change-Id: I27221a8a60fd9760b567ed322cc79228df877e56
2017-09-05 15:33:55 +09:00
Hugo Benichi
f59de479ba Merge "Network Service Discovery test: properly release resources" am: c9d24d203d am: 80e0daa870 am: f467db29f9
am: 84b253b0c5

Change-Id: Icd9033ce7e32d5bddc9d0eba38b3b381fe424004
2017-09-04 12:59:49 +00:00
Hugo Benichi
84b253b0c5 Merge "Network Service Discovery test: properly release resources" am: c9d24d203d am: 80e0daa870
am: f467db29f9

Change-Id: Id9be284a16112f999d752751a7972fd735573cda
2017-09-04 12:42:56 +00:00
Hugo Benichi
80e0daa870 Merge "Network Service Discovery test: properly release resources"
am: c9d24d203d

Change-Id: If34b3770a5c0fef65d124201e0ca1374cc6b1eca
2017-09-04 12:14:11 +00:00
Hugo Benichi
c9d24d203d Merge "Network Service Discovery test: properly release resources" 2017-09-04 11:50:58 +00:00
Erik Kline
3204e5fc63 Merge "Record even more stats even more often"
am: 72a708d623

Change-Id: I6a662cce3cf5394d392f7ff816f5eb6a71131484
2017-09-04 02:25:48 +00:00
Erik Kline
aabdaa9710 Record even more stats even more often
Like kale, one can never have enough stats.  =)

Test: as follows
    - built
    - flashed
    - booted
    - runtest frameworks-net passes
Bug: 29337859
Bug: 32163131
Merged-In: I5d40eae488cab685be6a44849181c0286fe28fdb
Merged-In: I759e97f9a72d15a84036c3a56451b872143539c6
Change-Id: Ieb47c3beed50f21c2c858fe57438afd48cfdc662
(cherry picked from commit 1199a352fc)
2017-09-04 09:37:12 +09:00
Erik Kline
84f37b8481 Record even more stats even more often am: 1199a352fc
am: 65b541488c

Change-Id: I759e97f9a72d15a84036c3a56451b872143539c6
2017-09-03 22:58:31 +00:00
Erik Kline
65b541488c Record even more stats even more often
am: 1199a352fc

Change-Id: I5d40eae488cab685be6a44849181c0286fe28fdb
2017-09-03 22:44:54 +00:00
Erik Kline
1199a352fc Record even more stats even more often
Like kale, one can never have enough stats.  =)

Test: as follows
    - built
    - flashed
    - booted
    - runtest frameworks-net passes
Bug: 29337859
Bug: 32163131
Change-Id: Ieb47c3beed50f21c2c858fe57438afd48cfdc662
2017-09-03 18:54:48 +09:00
Hugo Benichi
e062ae07f9 Network Service Discovery test: properly release resources
Bug: 32561414
Bug: 62918393
Bug: 62044295
Test: runtest frameworks-net
Change-Id: If23993b5e391947ecbdc01677f0a643144794b2b
2017-09-02 14:54:29 +09:00
Jeff Sharkey
6d902da970 Merge "Gracefully handle integer overflows." into oc-mr1-dev am: 4d2a8d7203
am: 19f40da9fa

Change-Id: I6a4cec507d8d4eaad65a691e37171359f7fc87c3
2017-09-02 02:24:56 +00:00
Jeff Sharkey
19f40da9fa Merge "Gracefully handle integer overflows." into oc-mr1-dev
am: 4d2a8d7203

Change-Id: I6ed70a40ad3e6df55e7669fedfe5b34faf95bd9f
2017-09-02 02:07:25 +00:00
Jeff Sharkey
d405d0555c Gracefully handle integer overflows.
Try sticking with integer-based math as much as possible for speed,
but switch to double-based math if we detect that we'd end up
causing an overflow.

New tests to verify.

Test: bit FrameworksNetTests:com.android.server.net.NetworkStatsCollectionTest
Bug: 65257769
Change-Id: I1ae35599be134f81850c0a3d86928b057fba1eff
2017-09-01 17:13:01 -06:00
Ahmed ElArabawy
7b1a11c6a4 Merge "Add APF black list for ether-type" am: c6b2e356b6 am: b7cabe7b59
am: 1c1d81493e

Change-Id: I6302b93b8fcd40f6689f5cfe2faf580776a669d6
2017-09-01 07:15:05 +00:00
Ahmed ElArabawy
b7cabe7b59 Merge "Add APF black list for ether-type"
am: c6b2e356b6

Change-Id: I2aca562191119dc26eb7bc5293956061e5f44827
2017-09-01 06:28:51 +00:00
Ahmed ElArabawy
fd424169a1 Add APF black list for ether-type
Add a configurable black for protocols which packets are to be dropped
by APF. This enales an OEM to configure the APF to filter out un-needed
packets from reaching the host

Bug: 62415182
Test: runtest frameworks-net

Merged-In: I86335a0f854d5e83a2b2767978cd69b2cc25c2f8

Signed-off-by: Ahmed ElArabawy <arabawy@google.com>

(cherry picked from commit caffbe1277)

Change-Id: I15a758d18464d73d24ba8364a867904bb3cd3b34
2017-09-01 14:03:58 +09:00
Jeff Sharkey
595987e619 Merge "Augment network stats based on SubscriptionPlan." into oc-mr1-dev am: f31cf45e82
am: 8ab5f7f324

Change-Id: Ica24924ff8e5c95bd14114fb0a1d82c21a7d30d4
2017-08-30 19:27:49 +00:00
Jeff Sharkey
8ab5f7f324 Merge "Augment network stats based on SubscriptionPlan." into oc-mr1-dev
am: f31cf45e82

Change-Id: Ia6c6d5893d841f21d181363dc01f77efa6579a8f
2017-08-30 19:14:21 +00:00
Jeff Sharkey
f4de294297 Augment network stats based on SubscriptionPlan.
When a carrier provides an "anchor" of data usage at a specific
moment in time, augment the network statistics used by warning/limit
thresholds and Settings UI.  For example, if the OS measured 500MB
of usage, but the carrier says only 400MB has been used, we "squish"
down the OS measured usage to match that anchor.

Callers using the hidden API will have their data augmented by
default, and the public API offers a way to opt-into augmentation.

Thorough testing to verify behavior.

Test: bit FrameworksNetTests:android.net.,com.android.server.net.
Test: cts-tradefed run commandAndExit cts-dev -m CtsUsageStatsTestCases -t android.app.usage.cts.NetworkUsageStatsTest
Bug: 64534190
Change-Id: Id3d4d7625bbf04f57643e51dbf376e3fa0ea8eca
2017-08-30 10:01:10 -06:00
Colin Cross
46a435a378 Fix errorprone build
Fixes:
frameworks/base/tests/net/java/com/android/server/connectivity/tethering/OffloadControllerTest.java:149: error: [JUnit4TestNotRun] Test method will not be run; please add @Test annotation
    public void testNoSettingsValueDefaultDisabledDoesNotStart() throws Exception {
                ^
    (see http://errorprone.info/bugpattern/JUnit4TestNotRun)
  Did you mean '@Test'?
frameworks/base/tests/net/java/com/android/server/connectivity/tethering/OffloadControllerTest.java:170: error: [JUnit4TestNotRun] Test method will not be run; please add @Test annotation
    public void testNoSettingsValueDefaultEnabledDoesStart() throws Exception {
                ^
    (see http://errorprone.info/bugpattern/JUnit4TestNotRun)
  Did you mean '@Test'?

Bug: 64489631
Test: m -j RUN_ERROR_PRONE=true javac-check
Merged-In: Ib32489d07778465134bca52c589baddbd78ab129
Change-Id: I41dfdf87529e532df385617fa05c7006a7a14c86
2017-08-29 12:54:11 -07:00