1873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat/* //device/java/android/android/os/INetworkManagementService.aidl
2873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat**
3873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat** Copyright 2007, The Android Open Source Project
4873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat**
5873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat** Licensed under the Apache License, Version 2.0 (the "License");
6873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat** you may not use this file except in compliance with the License.
7873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat** You may obtain a copy of the License at
8873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat**
9873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat**     http://www.apache.org/licenses/LICENSE-2.0
10873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat**
11873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat** Unless required by applicable law or agreed to in writing, software
12873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat** distributed under the License is distributed on an "AS IS" BASIS,
13873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat** See the License for the specific language governing permissions and
15873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat** limitations under the License.
16873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat*/
17873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
18873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehatpackage android.os;
19873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
20ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehatimport android.net.InterfaceConfiguration;
214e37b7044018153bf294a0e9e834681c46c050d7Erik Klineimport android.net.INetd;
224d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehatimport android.net.INetworkManagementEventObserver;
23b57edc5ae999abd9c7310833f4f10bbacbc469d7Lorenzo Colittiimport android.net.Network;
249a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkeyimport android.net.NetworkStats;
2559b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwaltimport android.net.RouteInfo;
266bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensenimport android.net.UidRange;
2777b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackbornimport android.os.INetworkActivityListener;
28ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat
29873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat/**
30873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat * @hide
31873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat */
32873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehatinterface INetworkManagementService
33873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat{
34873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
35873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     ** GENERAL
36873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     **/
37873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
38873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
394e37b7044018153bf294a0e9e834681c46c050d7Erik Kline     * Register an observer to receive events.
404d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehat     */
414d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehat    void registerObserver(INetworkManagementEventObserver obs);
424d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehat
434d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehat    /**
444d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehat     * Unregister an observer from receiving events.
454d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehat     */
464d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehat    void unregisterObserver(INetworkManagementEventObserver obs);
474d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehat
484d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehat    /**
494e37b7044018153bf294a0e9e834681c46c050d7Erik Kline     * Retrieve an INetd to talk to netd.
504e37b7044018153bf294a0e9e834681c46c050d7Erik Kline     */
514e37b7044018153bf294a0e9e834681c46c050d7Erik Kline    INetd getNetdService();
524e37b7044018153bf294a0e9e834681c46c050d7Erik Kline
534e37b7044018153bf294a0e9e834681c46c050d7Erik Kline    /**
54873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Returns a list of currently known network interfaces
55873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
56873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    String[] listInterfaces();
57873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
58873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
59ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat     * Retrieves the specified interface config
60ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat     *
61ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat     */
62ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat    InterfaceConfiguration getInterfaceConfig(String iface);
63ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat
64ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat    /**
65ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat     * Sets the configuration of the specified interface
66ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat     */
67ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat    void setInterfaceConfig(String iface, in InterfaceConfiguration cfg);
68ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat
69ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat    /**
70f5600618df153d9c51388562ebf3524e3bdc8b7dIrfan Sheriff     * Clear all IP addresses on the specified interface
71f5600618df153d9c51388562ebf3524e3bdc8b7dIrfan Sheriff     */
72f5600618df153d9c51388562ebf3524e3bdc8b7dIrfan Sheriff    void clearInterfaceAddresses(String iface);
73f5600618df153d9c51388562ebf3524e3bdc8b7dIrfan Sheriff
74f5600618df153d9c51388562ebf3524e3bdc8b7dIrfan Sheriff    /**
757244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff     * Set interface down
767244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff     */
777244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff    void setInterfaceDown(String iface);
787244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff
797244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff    /**
807244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff     * Set interface up
817244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff     */
827244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff    void setInterfaceUp(String iface);
837244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff
847244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff    /**
857329361cdce711775542b112663bf71a6e0d5cefIrfan Sheriff     * Set interface IPv6 privacy extensions
867329361cdce711775542b112663bf71a6e0d5cefIrfan Sheriff     */
877329361cdce711775542b112663bf71a6e0d5cefIrfan Sheriff    void setInterfaceIpv6PrivacyExtensions(String iface, boolean enable);
887329361cdce711775542b112663bf71a6e0d5cefIrfan Sheriff
897329361cdce711775542b112663bf71a6e0d5cefIrfan Sheriff    /**
907960d9f888e31602e17b8856c77a3826bf8c841erepo sync     * Disable IPv6 on an interface
917960d9f888e31602e17b8856c77a3826bf8c841erepo sync     */
927960d9f888e31602e17b8856c77a3826bf8c841erepo sync    void disableIpv6(String iface);
937960d9f888e31602e17b8856c77a3826bf8c841erepo sync
947960d9f888e31602e17b8856c77a3826bf8c841erepo sync    /**
957960d9f888e31602e17b8856c77a3826bf8c841erepo sync     * Enable IPv6 on an interface
967960d9f888e31602e17b8856c77a3826bf8c841erepo sync     */
977960d9f888e31602e17b8856c77a3826bf8c841erepo sync    void enableIpv6(String iface);
987960d9f888e31602e17b8856c77a3826bf8c841erepo sync
997960d9f888e31602e17b8856c77a3826bf8c841erepo sync    /**
100e21a26b3ba78b0238f4ed4a09b43319a2320fbaaLorenzo Colitti     * Enables or enables IPv6 ND offload.
101e21a26b3ba78b0238f4ed4a09b43319a2320fbaaLorenzo Colitti     */
102e21a26b3ba78b0238f4ed4a09b43319a2320fbaaLorenzo Colitti    void setInterfaceIpv6NdOffload(String iface, boolean enable);
103e21a26b3ba78b0238f4ed4a09b43319a2320fbaaLorenzo Colitti
104e21a26b3ba78b0238f4ed4a09b43319a2320fbaaLorenzo Colitti    /**
10559b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt     * Add the specified route to the interface.
10659b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt     */
107b2829fa165124264c7ec06a6e23b08a1d97b99e5Sreeram Ramachandran    void addRoute(int netId, in RouteInfo route);
10859b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt
10959b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt    /**
11059b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt     * Remove the specified route from the interface.
11159b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt     */
112b2829fa165124264c7ec06a6e23b08a1d97b99e5Sreeram Ramachandran    void removeRoute(int netId, in RouteInfo route);
1133b28e9a3daede9eac44faeb736ab4c8386ddd089Robert Greenwalt
1143b28e9a3daede9eac44faeb736ab4c8386ddd089Robert Greenwalt    /**
1159d9b74a900696191048aa97cc3c854072640428bsy.yun     * Set the specified MTU size
1169d9b74a900696191048aa97cc3c854072640428bsy.yun     */
1179d9b74a900696191048aa97cc3c854072640428bsy.yun    void setMtu(String iface, int mtu);
1189d9b74a900696191048aa97cc3c854072640428bsy.yun
1199d9b74a900696191048aa97cc3c854072640428bsy.yun    /**
120873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Shuts down the service
121873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
122873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void shutdown();
123873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
124873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
125873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     ** TETHERING RELATED
126873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     **/
127873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
128873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
129873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Returns true if IP forwarding is enabled
130873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
131873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    boolean getIpForwardingEnabled();
132873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
133873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
134873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Enables/Disables IP Forwarding
135873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
136873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void setIpForwardingEnabled(boolean enabled);
137873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
138873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
139873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Start tethering services with the specified dhcp server range
140bfb7bfa53847832db2a3eb05e5eff7cb974c3c7aRobert Greenwalt     * arg is a set of start end pairs defining the ranges.
141873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
142bfb7bfa53847832db2a3eb05e5eff7cb974c3c7aRobert Greenwalt    void startTethering(in String[] dhcpRanges);
143873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
144873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
145873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Stop currently running tethering services
146873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
147873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void stopTethering();
148873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
149873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
150873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Returns true if tethering services are started
151873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
152873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    boolean isTetheringStarted();
153873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
154873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
155873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Tethers the specified interface
156873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
157873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void tetherInterface(String iface);
158873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
159873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
160873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Untethers the specified interface
161873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
162873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void untetherInterface(String iface);
163873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
164873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
165873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Returns a list of currently tethered interfaces
166873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
167873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    String[] listTetheredInterfaces();
168873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
169873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
170873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Sets the list of DNS forwarders (in order of priority)
171873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
172b57edc5ae999abd9c7310833f4f10bbacbc469d7Lorenzo Colitti    void setDnsForwarders(in Network network, in String[] dns);
173873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
174873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
175b57edc5ae999abd9c7310833f4f10bbacbc469d7Lorenzo Colitti     * Returns the list of DNS forwarders (in order of priority)
176873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
177873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    String[] getDnsForwarders();
178873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
179873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
18035e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     * Enables unidirectional packet forwarding from {@code fromIface} to
18135e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     * {@code toIface}.
18235e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     */
18335e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti    void startInterfaceForwarding(String fromIface, String toIface);
18435e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti
18535e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti    /**
18635e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     * Disables unidirectional packet forwarding from {@code fromIface} to
18735e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     * {@code toIface}.
18835e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     */
18935e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti    void stopInterfaceForwarding(String fromIface, String toIface);
19035e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti
19135e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti    /**
192873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     *  Enables Network Address Translation between two interfaces.
193873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     *  The address and netmask of the external interface is used for
194873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     *  the NAT'ed network.
195873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
196873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void enableNat(String internalInterface, String externalInterface);
197873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
198873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
199873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     *  Disables Network Address Translation between two interfaces.
200873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
201873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void disableNat(String internalInterface, String externalInterface);
20272759df749bb8557269db86c2e3b2a8a0343cc26San Mehat
20372759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    /**
20472759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     ** PPPD
20572759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     **/
20672759df749bb8557269db86c2e3b2a8a0343cc26San Mehat
20772759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    /**
20872759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     * Returns the list of currently known TTY devices on the system
20972759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     */
21072759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    String[] listTtys();
21172759df749bb8557269db86c2e3b2a8a0343cc26San Mehat
21272759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    /**
21372759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     * Attaches a PPP server daemon to the specified TTY with the specified
21472759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     * local/remote addresses.
21572759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     */
216d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    void attachPppd(String tty, String localAddr, String remoteAddr, String dns1Addr,
217d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt            String dns2Addr);
21872759df749bb8557269db86c2e3b2a8a0343cc26San Mehat
21972759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    /**
22072759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     * Detaches a PPP server daemon from the specified TTY.
22172759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     */
22272759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    void detachPppd(String tty);
22372759df749bb8557269db86c2e3b2a8a0343cc26San Mehat
224ce1200d42c46ae5d3ec637587b07dfdc02ad21c0Robert Greenwalt    /**
2259a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     ** DATA USAGE RELATED
2269a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     **/
2279a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey
2289a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey    /**
2299a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     * Return global network statistics summarized at an interface level,
2309a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     * without any UID-level granularity.
23191cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat     */
232e8914c36276710de50b347c1e6aecfa45d6a56cdJeff Sharkey    NetworkStats getNetworkStatsSummaryDev();
233e8914c36276710de50b347c1e6aecfa45d6a56cdJeff Sharkey    NetworkStats getNetworkStatsSummaryXt();
23491cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat
23591cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat    /**
2369a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     * Return detailed network statistics with UID-level granularity,
2379a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     * including interface and tag details.
23891cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat     */
2399a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey    NetworkStats getNetworkStatsDetail();
24091cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat
24191cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat    /**
242eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey     * Return detailed network statistics for the requested UID,
243eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey     * including interface and tag details.
244eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey     */
245eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    NetworkStats getNetworkStatsUidDetail(int uid);
246eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
247eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    /**
248e4984bea95a07dea0ef0259fefa1e52f0bbb1533Jeff Sharkey     * Return summary of network statistics all tethering interfaces.
249cdd02c5d76d3dd4e21b5bb922d7fcfb86efec85fJeff Sharkey     */
250e4984bea95a07dea0ef0259fefa1e52f0bbb1533Jeff Sharkey    NetworkStats getNetworkStatsTethering();
251cdd02c5d76d3dd4e21b5bb922d7fcfb86efec85fJeff Sharkey
252cdd02c5d76d3dd4e21b5bb922d7fcfb86efec85fJeff Sharkey    /**
253b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey     * Set quota for an interface.
25450fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma     */
25541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    void setInterfaceQuota(String iface, long quotaBytes);
256b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey
257b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey    /**
258b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey     * Remove quota for an interface.
259b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey     */
260b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey    void removeInterfaceQuota(String iface);
26150fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma
26250fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma    /**
26341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     * Set alert for an interface; requires that iface already has quota.
26441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     */
26541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    void setInterfaceAlert(String iface, long alertBytes);
26641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey
26741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    /**
26841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     * Remove alert for an interface.
26941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     */
27041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    void removeInterfaceAlert(String iface);
27141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey
27241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    /**
27341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     * Set alert across all interfaces.
27441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     */
27541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    void setGlobalAlert(long alertBytes);
27641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey
27741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    /**
27850fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma     * Control network activity of a UID over interfaces with a quota limit.
27950fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma     */
28065be3025fd07d53137f5434794d1d1b3a0933aabFelipe Leme    void setUidMeteredNetworkBlacklist(int uid, boolean enable);
28165be3025fd07d53137f5434794d1d1b3a0933aabFelipe Leme    void setUidMeteredNetworkWhitelist(int uid, boolean enable);
28265be3025fd07d53137f5434794d1d1b3a0933aabFelipe Leme    boolean setDataSaverModeEnabled(boolean enable);
28350fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma
284605eb79c9519307147fc1795d0eb155638a7f542Jeff Sharkey    void setUidCleartextNetworkPolicy(int uid, int policy);
285605eb79c9519307147fc1795d0eb155638a7f542Jeff Sharkey
28650fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma    /**
28763d27a9233fed934340231f438493746084a681dJeff Sharkey     * Return status of bandwidth control module.
28863d27a9233fed934340231f438493746084a681dJeff Sharkey     */
28963d27a9233fed934340231f438493746084a681dJeff Sharkey    boolean isBandwidthControlEnabled();
29063d27a9233fed934340231f438493746084a681dJeff Sharkey
29163d27a9233fed934340231f438493746084a681dJeff Sharkey    /**
2920412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * Sets idletimer for an interface.
2930412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     *
2940412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * This either initializes a new idletimer or increases its
2950412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * reference-counting if an idletimer already exists for given
2960412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * {@code iface}.
2970412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     *
29877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     * {@code type} is the type of the interface, such as TYPE_MOBILE.
2990412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     *
3000412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * Every {@code addIdleTimer} should be paired with a
3010412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * {@link removeIdleTimer} to cleanup when the network disconnects.
3020412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     */
30377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    void addIdleTimer(String iface, int timeout, int type);
3040412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai
3050412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai    /**
3060412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * Removes idletimer for an interface.
3070412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     */
3080412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai    void removeIdleTimer(String iface);
3090412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai
3100412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai    /**
3118e48e67827dd2da40e0b28977a9afca0f43de73dPierre Imai     * Configure name servers, search paths, and resolver parameters for the given network.
3128e48e67827dd2da40e0b28977a9afca0f43de73dPierre Imai     */
3138e48e67827dd2da40e0b28977a9afca0f43de73dPierre Imai    void setDnsConfigurationForNetwork(int netId, in String[] servers, String domains);
3148e48e67827dd2da40e0b28977a9afca0f43de73dPierre Imai
315c268f0b19efd0b6c6c89c21be0893787f3cc9cf7Jeff Sharkey    void setFirewallEnabled(boolean enabled);
316c268f0b19efd0b6c6c89c21be0893787f3cc9cf7Jeff Sharkey    boolean isFirewallEnabled();
3172c0929850ae495d54efb91a68e4bbd29a2e0ec95Jeff Sharkey    void setFirewallInterfaceRule(String iface, boolean allow);
3182c0929850ae495d54efb91a68e4bbd29a2e0ec95Jeff Sharkey    void setFirewallEgressSourceRule(String addr, boolean allow);
3192c0929850ae495d54efb91a68e4bbd29a2e0ec95Jeff Sharkey    void setFirewallEgressDestRule(String addr, int port, boolean allow);
320b41c9f7f39939cee8d226eb5e506c3f0573f44f5Xiaohui Chen    void setFirewallUidRule(int chain, int uid, int rule);
321b41c9f7f39939cee8d226eb5e506c3f0573f44f5Xiaohui Chen    void setFirewallUidRules(int chain, in int[] uids, in int[] rules);
322b41c9f7f39939cee8d226eb5e506c3f0573f44f5Xiaohui Chen    void setFirewallChainEnabled(int chain, boolean enable);
3238b47b3601f82f299bb8c135af0639b72b67230e6Mattias Falk
3248b47b3601f82f299bb8c135af0639b72b67230e6Mattias Falk    /**
3256bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Set all packets from users in ranges to go through VPN specified by netId.
3263277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker     */
3276bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    void addVpnUidRanges(int netId, in UidRange[] ranges);
3283277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker
3293277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker    /**
3306bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Clears the special VPN rules for users in ranges and VPN specified by netId.
3313277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker     */
3326bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    void removeVpnUidRanges(int netId, in UidRange[] ranges);
3333277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker
3343277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker    /**
335954394653dad05838235f48244a4320893e0f0cfLorenzo Colitti     * Start the clatd (464xlat) service on the given interface.
33679751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti     */
33779751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti    void startClatd(String interfaceName);
33879751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti
33979751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti    /**
340954394653dad05838235f48244a4320893e0f0cfLorenzo Colitti     * Stop the clatd (464xlat) service on the given interface.
34179751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti     */
342954394653dad05838235f48244a4320893e0f0cfLorenzo Colitti    void stopClatd(String interfaceName);
34379751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti
34479751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti    /**
345954394653dad05838235f48244a4320893e0f0cfLorenzo Colitti     * Determine whether the clatd (464xlat) service has been started on the given interface.
34679751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti     */
347954394653dad05838235f48244a4320893e0f0cfLorenzo Colitti    boolean isClatdStarted(String interfaceName);
34877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn
34977b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    /**
35077b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     * Start listening for mobile activity state changes.
35177b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     */
35277b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    void registerNetworkActivityListener(INetworkActivityListener listener);
35377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn
35477b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    /**
35577b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     * Stop listening for mobile activity state changes.
35677b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     */
35777b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    void unregisterNetworkActivityListener(INetworkActivityListener listener);
35877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn
35977b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    /**
36077b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     * Check whether the mobile radio is currently active.
36177b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     */
36277b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    boolean isNetworkActive();
3639ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt
3649ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt    /**
3656bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Setup a new physical network.
366487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     * @param permission null if no permissions required to access this network.  PERMISSION_NETWORK
367487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     *                   or PERMISSION_SYSTEM to set respective permission.
3686bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     */
369487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen    void createPhysicalNetwork(int netId, String permission);
3706bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen
3716bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    /**
3726bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Setup a new VPN.
3739ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt     */
3748cd33ed84e94036a5e1201485af7603dc6fb0d9bSreeram Ramachandran    void createVirtualNetwork(int netId, boolean hasDNS, boolean secure);
3759ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt
3769ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt    /**
377992f25257938ecc0378514f21c6e6e6375272976Paul Jensen     * Remove a network.
3789ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt     */
3799ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt    void removeNetwork(int netId);
380568891d9282383747c418a59ee714281726f390aRobert Greenwalt
381992f25257938ecc0378514f21c6e6e6375272976Paul Jensen    /**
382992f25257938ecc0378514f21c6e6e6375272976Paul Jensen     * Add an interface to a network.
383992f25257938ecc0378514f21c6e6e6375272976Paul Jensen     */
384992f25257938ecc0378514f21c6e6e6375272976Paul Jensen    void addInterfaceToNetwork(String iface, int netId);
385992f25257938ecc0378514f21c6e6e6375272976Paul Jensen
386992f25257938ecc0378514f21c6e6e6375272976Paul Jensen    /**
387992f25257938ecc0378514f21c6e6e6375272976Paul Jensen     * Remove an Interface from a network.
388992f25257938ecc0378514f21c6e6e6375272976Paul Jensen     */
389992f25257938ecc0378514f21c6e6e6375272976Paul Jensen    void removeInterfaceFromNetwork(String iface, int netId);
390992f25257938ecc0378514f21c6e6e6375272976Paul Jensen
391913c895216c0cb248ed0ce910e69dd84b285c064Robert Greenwalt    void addLegacyRouteForNetId(int netId, in RouteInfo routeInfo, int uid);
392568891d9282383747c418a59ee714281726f390aRobert Greenwalt
393f047f2a8f49cd06d9cb94238861f4acce937d87bSreeram Ramachandran    void setDefaultNetId(int netId);
394568891d9282383747c418a59ee714281726f390aRobert Greenwalt    void clearDefaultNetId();
395568891d9282383747c418a59ee714281726f390aRobert Greenwalt
396487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen    /**
397487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     * Set permission for a network.
398487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     * @param permission null to clear permissions. PERMISSION_NETWORK or PERMISSION_SYSTEM to set
399487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     *                   permission.
400487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     */
401487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen    void setNetworkPermission(int netId, String permission);
402487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen
403e4a05afe85f15472325db9c535ef81f409fb6070Sreeram Ramachandran    void setPermission(String permission, in int[] uids);
404568891d9282383747c418a59ee714281726f390aRobert Greenwalt    void clearPermission(in int[] uids);
4056bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen
4066bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    /**
4076bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Allow UID to call protect().
4086bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     */
4096bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    void allowProtect(int uid);
4106bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen
4116bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    /**
4126bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Deny UID from calling protect().
4136bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     */
4146bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    void denyProtect(int uid);
415a77760d74ad544bbd4f6310fd28b395f24c5467dSreeram Ramachandran
416a77760d74ad544bbd4f6310fd28b395f24c5467dSreeram Ramachandran    void addInterfaceToLocalNetwork(String iface, in List<RouteInfo> routes);
417a77760d74ad544bbd4f6310fd28b395f24c5467dSreeram Ramachandran    void removeInterfaceFromLocalNetwork(String iface);
4186599ee8b968bd84039837104a04e01c77fe42f8eErik Kline    int removeRoutesFromLocalNetwork(in List<RouteInfo> routes);
41917e6183b85ba3038acb935aaa01415058b2e6dddRobin Lee
42017e6183b85ba3038acb935aaa01415058b2e6dddRobin Lee    void setAllowOnlyVpnForUids(boolean enable, in UidRange[] uidRanges);
421873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat}
422