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;
214d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehatimport android.net.INetworkManagementEventObserver;
22b57edc5ae999abd9c7310833f4f10bbacbc469d7Lorenzo Colittiimport android.net.Network;
239a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkeyimport android.net.NetworkStats;
2459b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwaltimport android.net.RouteInfo;
256bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensenimport android.net.UidRange;
269ab518ad793385f8405edf19363fe825fb64f5f8Irfan Sheriffimport android.net.wifi.WifiConfiguration;
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    /**
394d02d001ef6e06583e858e63e48d1aebf54ba28dSan Mehat     * 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    /**
49873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Returns a list of currently known network interfaces
50873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
51873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    String[] listInterfaces();
52873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
53873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
54ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat     * Retrieves the specified interface config
55ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat     *
56ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat     */
57ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat    InterfaceConfiguration getInterfaceConfig(String iface);
58ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat
59ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat    /**
60ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat     * Sets the configuration of the specified interface
61ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat     */
62ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat    void setInterfaceConfig(String iface, in InterfaceConfiguration cfg);
63ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat
64ed4fc8acc52d89f1d4dec853a29288c6d06717c3San Mehat    /**
65f5600618df153d9c51388562ebf3524e3bdc8b7dIrfan Sheriff     * Clear all IP addresses on the specified interface
66f5600618df153d9c51388562ebf3524e3bdc8b7dIrfan Sheriff     */
67f5600618df153d9c51388562ebf3524e3bdc8b7dIrfan Sheriff    void clearInterfaceAddresses(String iface);
68f5600618df153d9c51388562ebf3524e3bdc8b7dIrfan Sheriff
69f5600618df153d9c51388562ebf3524e3bdc8b7dIrfan Sheriff    /**
707244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff     * Set interface down
717244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff     */
727244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff    void setInterfaceDown(String iface);
737244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff
747244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff    /**
757244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff     * Set interface up
767244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff     */
777244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff    void setInterfaceUp(String iface);
787244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff
797244c977ecbc1f73e4cfd9d824fc2b68aa886139Irfan Sheriff    /**
807329361cdce711775542b112663bf71a6e0d5cefIrfan Sheriff     * Set interface IPv6 privacy extensions
817329361cdce711775542b112663bf71a6e0d5cefIrfan Sheriff     */
827329361cdce711775542b112663bf71a6e0d5cefIrfan Sheriff    void setInterfaceIpv6PrivacyExtensions(String iface, boolean enable);
837329361cdce711775542b112663bf71a6e0d5cefIrfan Sheriff
847329361cdce711775542b112663bf71a6e0d5cefIrfan Sheriff    /**
857960d9f888e31602e17b8856c77a3826bf8c841erepo sync     * Disable IPv6 on an interface
867960d9f888e31602e17b8856c77a3826bf8c841erepo sync     */
877960d9f888e31602e17b8856c77a3826bf8c841erepo sync    void disableIpv6(String iface);
887960d9f888e31602e17b8856c77a3826bf8c841erepo sync
897960d9f888e31602e17b8856c77a3826bf8c841erepo sync    /**
907960d9f888e31602e17b8856c77a3826bf8c841erepo sync     * Enable IPv6 on an interface
917960d9f888e31602e17b8856c77a3826bf8c841erepo sync     */
927960d9f888e31602e17b8856c77a3826bf8c841erepo sync    void enableIpv6(String iface);
937960d9f888e31602e17b8856c77a3826bf8c841erepo sync
947960d9f888e31602e17b8856c77a3826bf8c841erepo sync    /**
95e21a26b3ba78b0238f4ed4a09b43319a2320fbaaLorenzo Colitti     * Enables or enables IPv6 ND offload.
96e21a26b3ba78b0238f4ed4a09b43319a2320fbaaLorenzo Colitti     */
97e21a26b3ba78b0238f4ed4a09b43319a2320fbaaLorenzo Colitti    void setInterfaceIpv6NdOffload(String iface, boolean enable);
98e21a26b3ba78b0238f4ed4a09b43319a2320fbaaLorenzo Colitti
99e21a26b3ba78b0238f4ed4a09b43319a2320fbaaLorenzo Colitti    /**
10059b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt     * Add the specified route to the interface.
10159b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt     */
102b2829fa165124264c7ec06a6e23b08a1d97b99e5Sreeram Ramachandran    void addRoute(int netId, in RouteInfo route);
10359b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt
10459b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt    /**
10559b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt     * Remove the specified route from the interface.
10659b1a4ede7032c1b4d897e13dd4ede09b5e14743Robert Greenwalt     */
107b2829fa165124264c7ec06a6e23b08a1d97b99e5Sreeram Ramachandran    void removeRoute(int netId, in RouteInfo route);
1083b28e9a3daede9eac44faeb736ab4c8386ddd089Robert Greenwalt
1093b28e9a3daede9eac44faeb736ab4c8386ddd089Robert Greenwalt    /**
1109d9b74a900696191048aa97cc3c854072640428bsy.yun     * Set the specified MTU size
1119d9b74a900696191048aa97cc3c854072640428bsy.yun     */
1129d9b74a900696191048aa97cc3c854072640428bsy.yun    void setMtu(String iface, int mtu);
1139d9b74a900696191048aa97cc3c854072640428bsy.yun
1149d9b74a900696191048aa97cc3c854072640428bsy.yun    /**
115873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Shuts down the service
116873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
117873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void shutdown();
118873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
119873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
120873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     ** TETHERING RELATED
121873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     **/
122873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
123873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
124873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Returns true if IP forwarding is enabled
125873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
126873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    boolean getIpForwardingEnabled();
127873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
128873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
129873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Enables/Disables IP Forwarding
130873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
131873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void setIpForwardingEnabled(boolean enabled);
132873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
133873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
134873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Start tethering services with the specified dhcp server range
135bfb7bfa53847832db2a3eb05e5eff7cb974c3c7aRobert Greenwalt     * arg is a set of start end pairs defining the ranges.
136873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
137bfb7bfa53847832db2a3eb05e5eff7cb974c3c7aRobert Greenwalt    void startTethering(in String[] dhcpRanges);
138873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
139873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
140873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Stop currently running tethering services
141873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
142873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void stopTethering();
143873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
144873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
145873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Returns true if tethering services are started
146873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
147873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    boolean isTetheringStarted();
148873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
149873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
150873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Tethers the specified interface
151873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
152873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void tetherInterface(String iface);
153873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
154873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
155873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Untethers the specified interface
156873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
157873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void untetherInterface(String iface);
158873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
159873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
160873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Returns a list of currently tethered interfaces
161873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
162873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    String[] listTetheredInterfaces();
163873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
164873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
165873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     * Sets the list of DNS forwarders (in order of priority)
166873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
167b57edc5ae999abd9c7310833f4f10bbacbc469d7Lorenzo Colitti    void setDnsForwarders(in Network network, in String[] dns);
168873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
169873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
170b57edc5ae999abd9c7310833f4f10bbacbc469d7Lorenzo Colitti     * Returns the list of DNS forwarders (in order of priority)
171873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
172873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    String[] getDnsForwarders();
173873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
174873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
17535e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     * Enables unidirectional packet forwarding from {@code fromIface} to
17635e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     * {@code toIface}.
17735e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     */
17835e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti    void startInterfaceForwarding(String fromIface, String toIface);
17935e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti
18035e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti    /**
18135e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     * Disables unidirectional packet forwarding from {@code fromIface} to
18235e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     * {@code toIface}.
18335e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti     */
18435e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti    void stopInterfaceForwarding(String fromIface, String toIface);
18535e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti
18635e36db1d726f5741e7d8d83d2556e1417642be9Lorenzo Colitti    /**
187873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     *  Enables Network Address Translation between two interfaces.
188873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     *  The address and netmask of the external interface is used for
189873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     *  the NAT'ed network.
190873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
191873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void enableNat(String internalInterface, String externalInterface);
192873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat
193873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    /**
194873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     *  Disables Network Address Translation between two interfaces.
195873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat     */
196873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat    void disableNat(String internalInterface, String externalInterface);
19772759df749bb8557269db86c2e3b2a8a0343cc26San Mehat
19872759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    /**
19972759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     ** PPPD
20072759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     **/
20172759df749bb8557269db86c2e3b2a8a0343cc26San Mehat
20272759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    /**
20372759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     * Returns the list of currently known TTY devices on the system
20472759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     */
20572759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    String[] listTtys();
20672759df749bb8557269db86c2e3b2a8a0343cc26San Mehat
20772759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    /**
20872759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     * Attaches a PPP server daemon to the specified TTY with the specified
20972759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     * local/remote addresses.
21072759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     */
211d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt    void attachPppd(String tty, String localAddr, String remoteAddr, String dns1Addr,
212d0e18ffb82b59d38aeaf0e552f48e734202719abRobert Greenwalt            String dns2Addr);
21372759df749bb8557269db86c2e3b2a8a0343cc26San Mehat
21472759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    /**
21572759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     * Detaches a PPP server daemon from the specified TTY.
21672759df749bb8557269db86c2e3b2a8a0343cc26San Mehat     */
21772759df749bb8557269db86c2e3b2a8a0343cc26San Mehat    void detachPppd(String tty);
21872759df749bb8557269db86c2e3b2a8a0343cc26San Mehat
219ce1200d42c46ae5d3ec637587b07dfdc02ad21c0Robert Greenwalt    /**
220cb30b22ff507a5a9a5d9c584f8b082f5e96c4d02Irfan Sheriff     * Load firmware for operation in the given mode. Currently the three
221cb30b22ff507a5a9a5d9c584f8b082f5e96c4d02Irfan Sheriff     * modes supported are "AP", "STA" and "P2P".
222cb30b22ff507a5a9a5d9c584f8b082f5e96c4d02Irfan Sheriff     */
223cb30b22ff507a5a9a5d9c584f8b082f5e96c4d02Irfan Sheriff    void wifiFirmwareReload(String wlanIface, String mode);
224cb30b22ff507a5a9a5d9c584f8b082f5e96c4d02Irfan Sheriff
225cb30b22ff507a5a9a5d9c584f8b082f5e96c4d02Irfan Sheriff    /**
2265321aef4a22daef6ed01ed48d936cdd82f2e38b7Irfan Sheriff     * Start Wifi Access Point
2275321aef4a22daef6ed01ed48d936cdd82f2e38b7Irfan Sheriff     */
22890542758d4fef2e5ff8badaf3b40c2a227fbfc47Irfan Sheriff    void startAccessPoint(in WifiConfiguration wifiConfig, String iface);
2295321aef4a22daef6ed01ed48d936cdd82f2e38b7Irfan Sheriff
2305321aef4a22daef6ed01ed48d936cdd82f2e38b7Irfan Sheriff    /**
2315321aef4a22daef6ed01ed48d936cdd82f2e38b7Irfan Sheriff     * Stop Wifi Access Point
2325321aef4a22daef6ed01ed48d936cdd82f2e38b7Irfan Sheriff     */
23390542758d4fef2e5ff8badaf3b40c2a227fbfc47Irfan Sheriff    void stopAccessPoint(String iface);
2345321aef4a22daef6ed01ed48d936cdd82f2e38b7Irfan Sheriff
235c2f54c267b896cd1799d82be81e904a2b56c2f26Irfan Sheriff    /**
236c2f54c267b896cd1799d82be81e904a2b56c2f26Irfan Sheriff     * Set Access Point config
237c2f54c267b896cd1799d82be81e904a2b56c2f26Irfan Sheriff     */
23890542758d4fef2e5ff8badaf3b40c2a227fbfc47Irfan Sheriff    void setAccessPoint(in WifiConfiguration wifiConfig, String iface);
23991cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat
24091cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat    /**
2419a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     ** DATA USAGE RELATED
2429a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     **/
2439a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey
2449a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey    /**
2459a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     * Return global network statistics summarized at an interface level,
2469a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     * without any UID-level granularity.
24791cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat     */
248e8914c36276710de50b347c1e6aecfa45d6a56cdJeff Sharkey    NetworkStats getNetworkStatsSummaryDev();
249e8914c36276710de50b347c1e6aecfa45d6a56cdJeff Sharkey    NetworkStats getNetworkStatsSummaryXt();
25091cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat
25191cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat    /**
2529a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     * Return detailed network statistics with UID-level granularity,
2539a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey     * including interface and tag details.
25491cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat     */
2559a13f36cddaad01350bdb5f000167811a1d753c9Jeff Sharkey    NetworkStats getNetworkStatsDetail();
25691cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat
25791cac64cd010e6b4006fdd14b39dbc75778f20cbSan Mehat    /**
258eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey     * Return detailed network statistics for the requested UID,
259eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey     * including interface and tag details.
260eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey     */
261eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    NetworkStats getNetworkStatsUidDetail(int uid);
262eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
263eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    /**
264e4984bea95a07dea0ef0259fefa1e52f0bbb1533Jeff Sharkey     * Return summary of network statistics all tethering interfaces.
265cdd02c5d76d3dd4e21b5bb922d7fcfb86efec85fJeff Sharkey     */
266e4984bea95a07dea0ef0259fefa1e52f0bbb1533Jeff Sharkey    NetworkStats getNetworkStatsTethering();
267cdd02c5d76d3dd4e21b5bb922d7fcfb86efec85fJeff Sharkey
268cdd02c5d76d3dd4e21b5bb922d7fcfb86efec85fJeff Sharkey    /**
269b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey     * Set quota for an interface.
27050fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma     */
27141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    void setInterfaceQuota(String iface, long quotaBytes);
272b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey
273b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey    /**
274b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey     * Remove quota for an interface.
275b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey     */
276b3f19ca36c8c1301893c621d8f2150e06210722cJeff Sharkey    void removeInterfaceQuota(String iface);
27750fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma
27850fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma    /**
27941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     * Set alert for an interface; requires that iface already has quota.
28041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     */
28141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    void setInterfaceAlert(String iface, long alertBytes);
28241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey
28341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    /**
28441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     * Remove alert for an interface.
28541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     */
28641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    void removeInterfaceAlert(String iface);
28741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey
28841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    /**
28941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     * Set alert across all interfaces.
29041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey     */
29141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    void setGlobalAlert(long alertBytes);
29241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey
29341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey    /**
29450fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma     * Control network activity of a UID over interfaces with a quota limit.
29550fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma     */
29665be3025fd07d53137f5434794d1d1b3a0933aabFelipe Leme    void setUidMeteredNetworkBlacklist(int uid, boolean enable);
29765be3025fd07d53137f5434794d1d1b3a0933aabFelipe Leme    void setUidMeteredNetworkWhitelist(int uid, boolean enable);
29865be3025fd07d53137f5434794d1d1b3a0933aabFelipe Leme    boolean setDataSaverModeEnabled(boolean enable);
29950fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma
300605eb79c9519307147fc1795d0eb155638a7f542Jeff Sharkey    void setUidCleartextNetworkPolicy(int uid, int policy);
301605eb79c9519307147fc1795d0eb155638a7f542Jeff Sharkey
30250fd36d7c38c40b087c8f3e3172478abe0c051d9Ashish Sharma    /**
30363d27a9233fed934340231f438493746084a681dJeff Sharkey     * Return status of bandwidth control module.
30463d27a9233fed934340231f438493746084a681dJeff Sharkey     */
30563d27a9233fed934340231f438493746084a681dJeff Sharkey    boolean isBandwidthControlEnabled();
30663d27a9233fed934340231f438493746084a681dJeff Sharkey
30763d27a9233fed934340231f438493746084a681dJeff Sharkey    /**
3080412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * Sets idletimer for an interface.
3090412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     *
3100412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * This either initializes a new idletimer or increases its
3110412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * reference-counting if an idletimer already exists for given
3120412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * {@code iface}.
3130412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     *
31477b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     * {@code type} is the type of the interface, such as TYPE_MOBILE.
3150412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     *
3160412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * Every {@code addIdleTimer} should be paired with a
3170412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * {@link removeIdleTimer} to cleanup when the network disconnects.
3180412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     */
31977b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    void addIdleTimer(String iface, int timeout, int type);
3200412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai
3210412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai    /**
3220412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     * Removes idletimer for an interface.
3230412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai     */
3240412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai    void removeIdleTimer(String iface);
3250412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai
3260412423f06ec633203b96f68b51f0720c33a2473Haoyu Bai    /**
3278e48e67827dd2da40e0b28977a9afca0f43de73dPierre Imai     * Configure name servers, search paths, and resolver parameters for the given network.
3288e48e67827dd2da40e0b28977a9afca0f43de73dPierre Imai     */
3298e48e67827dd2da40e0b28977a9afca0f43de73dPierre Imai    void setDnsConfigurationForNetwork(int netId, in String[] servers, String domains);
3308e48e67827dd2da40e0b28977a9afca0f43de73dPierre Imai
3318e48e67827dd2da40e0b28977a9afca0f43de73dPierre Imai    /**
33213e817df516a803fbedeacca2c802a9fc1c1370fPaul Jensen     * Bind name servers to a network in the DNS resolver.
3337475c0cea622f126af966c3b5b9741f547e83450Mattias Falk     */
33413e817df516a803fbedeacca2c802a9fc1c1370fPaul Jensen    void setDnsServersForNetwork(int netId, in String[] servers, String domains);
3357475c0cea622f126af966c3b5b9741f547e83450Mattias Falk
336c268f0b19efd0b6c6c89c21be0893787f3cc9cf7Jeff Sharkey    void setFirewallEnabled(boolean enabled);
337c268f0b19efd0b6c6c89c21be0893787f3cc9cf7Jeff Sharkey    boolean isFirewallEnabled();
3382c0929850ae495d54efb91a68e4bbd29a2e0ec95Jeff Sharkey    void setFirewallInterfaceRule(String iface, boolean allow);
3392c0929850ae495d54efb91a68e4bbd29a2e0ec95Jeff Sharkey    void setFirewallEgressSourceRule(String addr, boolean allow);
3402c0929850ae495d54efb91a68e4bbd29a2e0ec95Jeff Sharkey    void setFirewallEgressDestRule(String addr, int port, boolean allow);
341b41c9f7f39939cee8d226eb5e506c3f0573f44f5Xiaohui Chen    void setFirewallUidRule(int chain, int uid, int rule);
342b41c9f7f39939cee8d226eb5e506c3f0573f44f5Xiaohui Chen    void setFirewallUidRules(int chain, in int[] uids, in int[] rules);
343b41c9f7f39939cee8d226eb5e506c3f0573f44f5Xiaohui Chen    void setFirewallChainEnabled(int chain, boolean enable);
3448b47b3601f82f299bb8c135af0639b72b67230e6Mattias Falk
3458b47b3601f82f299bb8c135af0639b72b67230e6Mattias Falk    /**
3466bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Set all packets from users in ranges to go through VPN specified by netId.
3473277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker     */
3486bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    void addVpnUidRanges(int netId, in UidRange[] ranges);
3493277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker
3503277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker    /**
3516bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Clears the special VPN rules for users in ranges and VPN specified by netId.
3523277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker     */
3536bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    void removeVpnUidRanges(int netId, in UidRange[] ranges);
3543277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker
3553277620a69b6b9f27126f0b2651ea4293731cd09Chad Brubaker    /**
356954394653dad05838235f48244a4320893e0f0cfLorenzo Colitti     * Start the clatd (464xlat) service on the given interface.
35779751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti     */
35879751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti    void startClatd(String interfaceName);
35979751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti
36079751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti    /**
361954394653dad05838235f48244a4320893e0f0cfLorenzo Colitti     * Stop the clatd (464xlat) service on the given interface.
36279751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti     */
363954394653dad05838235f48244a4320893e0f0cfLorenzo Colitti    void stopClatd(String interfaceName);
36479751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti
36579751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti    /**
366954394653dad05838235f48244a4320893e0f0cfLorenzo Colitti     * Determine whether the clatd (464xlat) service has been started on the given interface.
36779751848d1c3a5139eb5ccd6ddecaf84c2a09783Lorenzo Colitti     */
368954394653dad05838235f48244a4320893e0f0cfLorenzo Colitti    boolean isClatdStarted(String interfaceName);
36977b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn
37077b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    /**
37177b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     * Start listening for mobile activity state changes.
37277b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     */
37377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    void registerNetworkActivityListener(INetworkActivityListener listener);
37477b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn
37577b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    /**
37677b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     * Stop listening for mobile activity state changes.
37777b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     */
37877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    void unregisterNetworkActivityListener(INetworkActivityListener listener);
37977b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn
38077b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    /**
38177b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     * Check whether the mobile radio is currently active.
38277b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn     */
38377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn    boolean isNetworkActive();
3849ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt
3859ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt    /**
3866bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Setup a new physical network.
387487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     * @param permission null if no permissions required to access this network.  PERMISSION_NETWORK
388487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     *                   or PERMISSION_SYSTEM to set respective permission.
3896bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     */
390487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen    void createPhysicalNetwork(int netId, String permission);
3916bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen
3926bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    /**
3936bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Setup a new VPN.
3949ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt     */
3958cd33ed84e94036a5e1201485af7603dc6fb0d9bSreeram Ramachandran    void createVirtualNetwork(int netId, boolean hasDNS, boolean secure);
3969ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt
3979ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt    /**
398992f25257938ecc0378514f21c6e6e6375272976Paul Jensen     * Remove a network.
3999ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt     */
4009ba9c58e4a249456794fbfb9989f27bd846d067eRobert Greenwalt    void removeNetwork(int netId);
401568891d9282383747c418a59ee714281726f390aRobert Greenwalt
402992f25257938ecc0378514f21c6e6e6375272976Paul Jensen    /**
403992f25257938ecc0378514f21c6e6e6375272976Paul Jensen     * Add an interface to a network.
404992f25257938ecc0378514f21c6e6e6375272976Paul Jensen     */
405992f25257938ecc0378514f21c6e6e6375272976Paul Jensen    void addInterfaceToNetwork(String iface, int netId);
406992f25257938ecc0378514f21c6e6e6375272976Paul Jensen
407992f25257938ecc0378514f21c6e6e6375272976Paul Jensen    /**
408992f25257938ecc0378514f21c6e6e6375272976Paul Jensen     * Remove an Interface from a network.
409992f25257938ecc0378514f21c6e6e6375272976Paul Jensen     */
410992f25257938ecc0378514f21c6e6e6375272976Paul Jensen    void removeInterfaceFromNetwork(String iface, int netId);
411992f25257938ecc0378514f21c6e6e6375272976Paul Jensen
412913c895216c0cb248ed0ce910e69dd84b285c064Robert Greenwalt    void addLegacyRouteForNetId(int netId, in RouteInfo routeInfo, int uid);
413568891d9282383747c418a59ee714281726f390aRobert Greenwalt
414f047f2a8f49cd06d9cb94238861f4acce937d87bSreeram Ramachandran    void setDefaultNetId(int netId);
415568891d9282383747c418a59ee714281726f390aRobert Greenwalt    void clearDefaultNetId();
416568891d9282383747c418a59ee714281726f390aRobert Greenwalt
417487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen    /**
418487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     * Set permission for a network.
419487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     * @param permission null to clear permissions. PERMISSION_NETWORK or PERMISSION_SYSTEM to set
420487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     *                   permission.
421487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen     */
422487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen    void setNetworkPermission(int netId, String permission);
423487ffe7d3d84bf65212158f7098e8a84b5b55e09Paul Jensen
424e4a05afe85f15472325db9c535ef81f409fb6070Sreeram Ramachandran    void setPermission(String permission, in int[] uids);
425568891d9282383747c418a59ee714281726f390aRobert Greenwalt    void clearPermission(in int[] uids);
4266bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen
4276bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    /**
4286bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Allow UID to call protect().
4296bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     */
4306bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    void allowProtect(int uid);
4316bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen
4326bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    /**
4336bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     * Deny UID from calling protect().
4346bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen     */
4356bc2c2c34f2b23eae79ad733c97a691734055c4fPaul Jensen    void denyProtect(int uid);
436a77760d74ad544bbd4f6310fd28b395f24c5467dSreeram Ramachandran
437a77760d74ad544bbd4f6310fd28b395f24c5467dSreeram Ramachandran    void addInterfaceToLocalNetwork(String iface, in List<RouteInfo> routes);
438a77760d74ad544bbd4f6310fd28b395f24c5467dSreeram Ramachandran    void removeInterfaceFromLocalNetwork(String iface);
43917e6183b85ba3038acb935aaa01415058b2e6dddRobin Lee
44017e6183b85ba3038acb935aaa01415058b2e6dddRobin Lee    void setAllowOnlyVpnForUids(boolean enable, in UidRange[] uidRanges);
441873f2145941cc28f6931dc18b5e9987bd22e2e19San Mehat}
442