1/* //device/java/android/android/os/INetworkManagementService.aidl
2**
3** Copyright 2007, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9**     http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18package android.os;
19
20import android.net.InterfaceConfiguration;
21import android.net.INetworkManagementEventObserver;
22import android.net.NetworkStats;
23import android.net.RouteInfo;
24import android.net.wifi.WifiConfiguration;
25
26/**
27 * @hide
28 */
29interface INetworkManagementService
30{
31    /**
32     ** GENERAL
33     **/
34
35    /**
36     * Register an observer to receive events
37     */
38    void registerObserver(INetworkManagementEventObserver obs);
39
40    /**
41     * Unregister an observer from receiving events.
42     */
43    void unregisterObserver(INetworkManagementEventObserver obs);
44
45    /**
46     * Returns a list of currently known network interfaces
47     */
48    String[] listInterfaces();
49
50    /**
51     * Retrieves the specified interface config
52     *
53     */
54    InterfaceConfiguration getInterfaceConfig(String iface);
55
56    /**
57     * Sets the configuration of the specified interface
58     */
59    void setInterfaceConfig(String iface, in InterfaceConfiguration cfg);
60
61    /**
62     * Clear all IP addresses on the specified interface
63     */
64    void clearInterfaceAddresses(String iface);
65
66    /**
67     * Set interface down
68     */
69    void setInterfaceDown(String iface);
70
71    /**
72     * Set interface up
73     */
74    void setInterfaceUp(String iface);
75
76    /**
77     * Set interface IPv6 privacy extensions
78     */
79    void setInterfaceIpv6PrivacyExtensions(String iface, boolean enable);
80
81    /**
82     * Disable IPv6 on an interface
83     */
84    void disableIpv6(String iface);
85
86    /**
87     * Enable IPv6 on an interface
88     */
89    void enableIpv6(String iface);
90
91    /**
92     * Retrieves the network routes currently configured on the specified
93     * interface
94     */
95    RouteInfo[] getRoutes(String iface);
96
97    /**
98     * Add the specified route to the interface.
99     */
100    void addRoute(String iface, in RouteInfo route);
101
102    /**
103     * Remove the specified route from the interface.
104     */
105    void removeRoute(String iface, in RouteInfo route);
106
107    /**
108     * Add the specified route to a secondary interface
109     * This will go into a special route table to be accessed
110     * via ip rules
111     */
112    void addSecondaryRoute(String iface, in RouteInfo route);
113
114    /**
115     * Remove the specified secondary route.
116     */
117    void removeSecondaryRoute(String iface, in RouteInfo route);
118
119    /**
120     * Shuts down the service
121     */
122    void shutdown();
123
124    /**
125     ** TETHERING RELATED
126     **/
127
128    /**
129     * Returns true if IP forwarding is enabled
130     */
131    boolean getIpForwardingEnabled();
132
133    /**
134     * Enables/Disables IP Forwarding
135     */
136    void setIpForwardingEnabled(boolean enabled);
137
138    /**
139     * Start tethering services with the specified dhcp server range
140     * arg is a set of start end pairs defining the ranges.
141     */
142    void startTethering(in String[] dhcpRanges);
143
144    /**
145     * Stop currently running tethering services
146     */
147    void stopTethering();
148
149    /**
150     * Returns true if tethering services are started
151     */
152    boolean isTetheringStarted();
153
154    /**
155     * Start bluetooth reverse tethering services
156     */
157    void startReverseTethering(in String iface);
158
159    /**
160     * Stop currently running bluetooth reserse tethering services
161     */
162    void stopReverseTethering();
163
164    /**
165     * Tethers the specified interface
166     */
167    void tetherInterface(String iface);
168
169    /**
170     * Untethers the specified interface
171     */
172    void untetherInterface(String iface);
173
174    /**
175     * Returns a list of currently tethered interfaces
176     */
177    String[] listTetheredInterfaces();
178
179    /**
180     * Sets the list of DNS forwarders (in order of priority)
181     */
182    void setDnsForwarders(in String[] dns);
183
184    /**
185     * Returns the list of DNS fowarders (in order of priority)
186     */
187    String[] getDnsForwarders();
188
189    /**
190     *  Enables Network Address Translation between two interfaces.
191     *  The address and netmask of the external interface is used for
192     *  the NAT'ed network.
193     */
194    void enableNat(String internalInterface, String externalInterface);
195
196    /**
197     *  Disables Network Address Translation between two interfaces.
198     */
199    void disableNat(String internalInterface, String externalInterface);
200
201    /**
202     ** PPPD
203     **/
204
205    /**
206     * Returns the list of currently known TTY devices on the system
207     */
208    String[] listTtys();
209
210    /**
211     * Attaches a PPP server daemon to the specified TTY with the specified
212     * local/remote addresses.
213     */
214    void attachPppd(String tty, String localAddr, String remoteAddr, String dns1Addr,
215            String dns2Addr);
216
217    /**
218     * Detaches a PPP server daemon from the specified TTY.
219     */
220    void detachPppd(String tty);
221
222    /**
223     * Load firmware for operation in the given mode. Currently the three
224     * modes supported are "AP", "STA" and "P2P".
225     */
226    void wifiFirmwareReload(String wlanIface, String mode);
227
228    /**
229     * Start Wifi Access Point
230     */
231    void startAccessPoint(in WifiConfiguration wifiConfig, String iface);
232
233    /**
234     * Stop Wifi Access Point
235     */
236    void stopAccessPoint(String iface);
237
238    /**
239     * Set Access Point config
240     */
241    void setAccessPoint(in WifiConfiguration wifiConfig, String iface);
242
243    /**
244     ** DATA USAGE RELATED
245     **/
246
247    /**
248     * Return global network statistics summarized at an interface level,
249     * without any UID-level granularity.
250     */
251    NetworkStats getNetworkStatsSummaryDev();
252    NetworkStats getNetworkStatsSummaryXt();
253
254    /**
255     * Return detailed network statistics with UID-level granularity,
256     * including interface and tag details.
257     */
258    NetworkStats getNetworkStatsDetail();
259
260    /**
261     * Return detailed network statistics for the requested UID,
262     * including interface and tag details.
263     */
264    NetworkStats getNetworkStatsUidDetail(int uid);
265
266    /**
267     * Return summary of network statistics for the requested pairs of
268     * tethering interfaces.  Even indexes are remote interface, and odd
269     * indexes are corresponding local interfaces.
270     */
271    NetworkStats getNetworkStatsTethering(in String[] ifacePairs);
272
273    /**
274     * Set quota for an interface.
275     */
276    void setInterfaceQuota(String iface, long quotaBytes);
277
278    /**
279     * Remove quota for an interface.
280     */
281    void removeInterfaceQuota(String iface);
282
283    /**
284     * Set alert for an interface; requires that iface already has quota.
285     */
286    void setInterfaceAlert(String iface, long alertBytes);
287
288    /**
289     * Remove alert for an interface.
290     */
291    void removeInterfaceAlert(String iface);
292
293    /**
294     * Set alert across all interfaces.
295     */
296    void setGlobalAlert(long alertBytes);
297
298    /**
299     * Control network activity of a UID over interfaces with a quota limit.
300     */
301    void setUidNetworkRules(int uid, boolean rejectOnQuotaInterfaces);
302
303    /**
304     * Return status of bandwidth control module.
305     */
306    boolean isBandwidthControlEnabled();
307
308    /**
309     * Configures bandwidth throttling on an interface.
310     */
311    void setInterfaceThrottle(String iface, int rxKbps, int txKbps);
312
313    /**
314     * Returns the currently configured RX throttle values
315     * for the specified interface
316     */
317    int getInterfaceRxThrottle(String iface);
318
319    /**
320     * Returns the currently configured TX throttle values
321     * for the specified interface
322     */
323    int getInterfaceTxThrottle(String iface);
324
325    /**
326     * Sets idletimer for an interface.
327     *
328     * This either initializes a new idletimer or increases its
329     * reference-counting if an idletimer already exists for given
330     * {@code iface}.
331     *
332     * {@code label} usually represents the network type of {@code iface}.
333     * Caller should ensure that {@code label} for an {@code iface} remains the
334     * same for all calls to addIdleTimer.
335     *
336     * Every {@code addIdleTimer} should be paired with a
337     * {@link removeIdleTimer} to cleanup when the network disconnects.
338     */
339    void addIdleTimer(String iface, int timeout, String label);
340
341    /**
342     * Removes idletimer for an interface.
343     */
344    void removeIdleTimer(String iface);
345
346    /**
347     * Sets the name of the default interface in the DNS resolver.
348     */
349    void setDefaultInterfaceForDns(String iface);
350
351    /**
352     * Bind name servers to an interface in the DNS resolver.
353     */
354    void setDnsServersForInterface(String iface, in String[] servers);
355
356    /**
357     * Flush the DNS cache associated with the default interface.
358     */
359    void flushDefaultDnsCache();
360
361    /**
362     * Flush the DNS cache associated with the specified interface.
363     */
364    void flushInterfaceDnsCache(String iface);
365
366    void setFirewallEnabled(boolean enabled);
367    boolean isFirewallEnabled();
368    void setFirewallInterfaceRule(String iface, boolean allow);
369    void setFirewallEgressSourceRule(String addr, boolean allow);
370    void setFirewallEgressDestRule(String addr, int port, boolean allow);
371    void setFirewallUidRule(int uid, boolean allow);
372}
373