upload android base code part8

This commit is contained in:
August 2018-08-08 20:10:12 +08:00
parent 841ae54672
commit 5425409085
57075 changed files with 9846578 additions and 0 deletions

View file

@ -0,0 +1,39 @@
<html devsite>
<head>
<title>Excluding Network Types from Usage Data</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>A mobile operator may wish to exclude specific network types from the
total data usage calculated by a device.  For example, network traffic
over an MMS APN may be “zero-rated” by a mobile operator.  To support
this, the set of network types used to calculate total data usage can
be configured through the <code>config_data_usage_network_types</code> resource
at build time.</p>
<p>Some mobile radio implementations may have unique Linux network
interfaces for each active APN, while other radios may force multiple
APNs to coexist on a single interface.  Android can collect network
statistics from both designs, but <code>config_data_usage_network_types</code> is
not be effective at excluding APNs forced to coexist on a single
interface.</p>
</body>
</html>

View file

@ -0,0 +1,56 @@
<html devsite>
<head>
<title>Network Interface Statistics Overview</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>In Android 4.0, statistics reported by Linux network interfaces are
recorded over time, and are used to enforce network quota limits,
render user-visible charts, and more.</p>
<p>Each network device driver (Wi-Fi included) must follow the standard
kernel device lifecycle, and return correct statistics through
<code>dev_get_stats()</code>. In particular, statistics returned must remain
strictly monotonic while the interface is active. Drivers may reset
statistics only after successfully completing an <code>unregister_netdev()</code>
or the equivalent that generates a <code>NETDEV_UNREGISTER</code> event for
callbacks registered with <code>register_netdevice_notifier()</code> /
<code>register_inetaddr_notifier()</code> / <code>register_inet6addr_notifier()</code>.</p>
<p>Mobile operators typically measure data usage at the Internet layer
(IP). To match this approach in Android 4.0, we rely on the fact that
for the kernel devices we care about the <code>rx_bytes</code> and <code>tx_bytes</code>
values returned by <code>dev_get_stats()</code> return exactly the Internet layer
(<code>IP</code>) bytes transferred.  But we understand that for other devices it
might not be the case. For now, the feature relies on this
peculiarity. New drivers should have that property also, and the
<code>dev_get_stats()</code> values must not include any encapsulation overhead
of lower network layers (such as Ethernet headers), and should
preferably not include other traffic (such as ARP) unless it is
negligible.</p>
<p>The Android framework only collects statistics from network interfaces
associated with a <code>NetworkStateTracker</code> in <code>ConnectivityService</code>. This
enables the framework to concretely identify each network interface,
including its type (such as <code>TYPE_MOBILE</code> or <code>TYPE_WIFI</code>) and
subscriber identity (such as IMSI).  All network interfaces used to
route data should be represented by a <code>NetworkStateTracker</code> so that
statistics can be accounted correctly.</p>
</body>
</html>

View file

@ -0,0 +1,42 @@
<html devsite>
<head>
<title>Data Usage Technical Information</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>Android 4.0 introduces new features that help
users understand and control how their device uses network data.  It
monitors overall data usage, and supports warning or limit thresholds
which will trigger notifications or disable mobile data when usage
exceeds a specific quota.</p>
<p>Data usage is also tracked on a per-application basis, enabling users
to visually explore historical usage in the Settings app. Users can
also restrict how specific applications are allowed to use data when
running in the background.</p>
<p>The documentation in this section is intended for systems integrators
and mobile operators, to help explain technical details they should be
aware of when porting Android to specific devices.  These details are
summarized below, and the
<a href="mailto:android-porting+subscribe@googlegroups.com">android-porting</a>
mailing list is a good place for further discussion.</p>
</body>
</html>

View file

@ -0,0 +1,41 @@
<html devsite>
<head>
<title>Kernel Changes</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>This is a summary of the main changes in the kernel that diverge from mainline.</p>
<ul>
<li>added net/netfilter/xt_qtaguid*</li>
<li>imported then modified net/netfilter/xt_quota2.c from xtables-addons project</li>
<li>fixes in net/netfilter/ip6_tables.c</li>
<li>modified ip*t_REJECT.c</li>
<li>modified net/netfilter/xt_socket.c</li>
</ul>
<p>A few comments on the kernel configuration:</p>
<ul>
<li>xt_qtaguid masquerades as xt_owner and relies on xt_socket and itself relies on the connection tracker.</li>
<li>The connection tracker can't handle large SIP packets, it must be disabled.</li>
<li>The modified xt_quota2 uses the NFLOG support to notify userspace.</li>
</ul>
</body>
</html>

View file

@ -0,0 +1,60 @@
<html devsite>
<head>
<title>Overview</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>The per-application/delegated data usage monitoring and tracking
functionality relies on the xt_qtaguid module in the android-3.0 Linux
kernel (<code>kernel/net/netfilter/xt_qtaguid</code>). The socket tagging
functionality in the framework (<code>system/core/libcutils/qtaguid.c</code>)
relies mainly on the existence of <code>/proc/net/xt_qtaguid/ctrl</code>
interface exported by the <code>xt_qtaguid</code> kernel module.</p>
<p>The <code>quota2</code> netfilter module (originally part of <code>xtables-addons</code>)
allows the functionality to set named quota limits and was extended to
support notifying userspace when certain limits are reached. Once the
quota limit is reached, the <code>quota2</code> module discards all subsequent
network traffic. The framework can also specify additional rules to
restrict background data traffic for an application (refer to
<code>com.android.server.NetworkManagementSocketTagger.setKernelCounterSet</code>
and
<code>android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND</code>).</p>
<h1 id="how-does-it-work">How does it work?</h1>
<p>The <code>qtaguid</code> netfilter module tracks the network traffic on a
per-socket basis for every application using the unique UID of the
owning application.  There are two tag components associated with any
socket in the system. The first is the UID which uniquely identifies
the application which is responsible for the data transfer (Linux
allows the ability to ascribe the ownership of each network socket to
the UID of the calling application). The second tag component is used
to support additional characterization of the traffic into application
developer specified categories. Using these application level tags, an
application can profile the traffic into several sub-categories.</p>
<p>In the case of applications that provide network data transfer as a
service, such as the download manager, media streaming service, etc,
it is possible to attribute the ownership of the network data transfer
to the UID of the requesting application using the
<code>TrafficStats.setThreadStatsUid()</code> function call. The caller must hold
the “<code>android.permission.MODIFY_NETWORK_ACCOUNTING</code>” permission to
re-assign the ownership of the network traffic.</p>
</body>
</html>

View file

@ -0,0 +1,55 @@
<html devsite>
<head>
<title>Data Usage Tags Explained</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>Tags represent one of the metrics the data usage counters will be
tracked against. By default, and implicitly, a tag is just based on
the UID. The UID is used as the base for policing, and cannot be
ignored. So a tag will always at least represent a UID (uid_tag). A
tag can be explicitly augmented with an "accounting tag" which is
associated with a UID. User space can use
<code>TrafficStats.setThreadStatsTag()</code> to set the acct_tag portion of the
tag which is then used  with sockets: all data belonging to that
socket will be counted against the tag. The policing is then based on
the tag's uid_tag portion, and stats are collected for the acct_tag
portion separately.</p>
<p>Without explicit tagging, the qtaguid module will assume the
<code>default_tag:  {acct_tag=0, uid_tag=10003}</code></p>
<pre class="devsite-click-to-copy">
a:  {acct_tag=1, uid_tag=10003}
b:  {acct_tag=2, uid_tag=10003}
c:  {acct_tag=3, uid_tag=10003}
</pre>
<p><code>a, b, c…</code> represent explicit tags associated with specific sockets.</p>
<p><code>default_tag (acct_tag=0)</code> is the default accounting tag that contains
the total traffic for that uid, including all untagged
traffic, and is typically used to enforce policing/quota rules.</p>
<p>These tags can be used to profile the network traffic of an
application into separate logical categories (at a network socket
level). Such tags can be removed, reapplied, or modified during
runtime.</p>
<p>The qtaguid module has been implemented on <a href="https://android-review.googlesource.com/#/q/project:kernel/common+branch:android-3.0,n,z">kernel/common branch of
android-3.0</a></p>
</body>
</html>

View file

@ -0,0 +1,31 @@
<html devsite>
<head>
<title>Tethering data</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>Tethering involves forwarding of traffic from one network interface to
another using <code>iptables</code> forwarding rules.  The framework periodically
records tethering statistics between any interface pairs returned by
<code>ConnectivityService.getTetheredIfacePairs()</code>.</p>
</body>
</html>

View file

@ -0,0 +1,33 @@
<html devsite>
<head>
<title>Usage Cycle Reset Dates</title>
<meta name="project_path" value="/_project.yaml" />
<meta name="book_path" value="/_book.yaml" />
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>Users can specify a day of month upon which their data usage
resets. Internally, cycle boundaries are defined to end at midnight
<code>(00:00) UTC</code> on the requested day. When a month is shorter than the
requested day, the cycle resets on the first day of the subsequent
month. For example, a cycle reset day of the 30th would cause a reset
on January 30 at <code>00:00 UTC</code> and March 1 at <code>00:00 UTC</code>.</p>
</body>
</html>