upload android base code part8
This commit is contained in:
parent
841ae54672
commit
5425409085
57075 changed files with 9846578 additions and 0 deletions
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
Loading…
Add table
Add a link
Reference in a new issue