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.Network;
23import android.net.NetworkStats;
24import android.net.RouteInfo;
25import android.net.UidRange;
26import android.net.wifi.WifiConfiguration;
27import android.os.INetworkActivityListener;
28
29/**
30 * @hide
31 */
32interface INetworkManagementService
33{
34    /**
35     ** GENERAL
36     **/
37
38    /**
39     * Register an observer to receive events
40     */
41    void registerObserver(INetworkManagementEventObserver obs);
42
43    /**
44     * Unregister an observer from receiving events.
45     */
46    void unregisterObserver(INetworkManagementEventObserver obs);
47
48    /**
49     * Returns a list of currently known network interfaces
50     */
51    String[] listInterfaces();
52
53    /**
54     * Retrieves the specified interface config
55     *
56     */
57    InterfaceConfiguration getInterfaceConfig(String iface);
58
59    /**
60     * Sets the configuration of the specified interface
61     */
62    void setInterfaceConfig(String iface, in InterfaceConfiguration cfg);
63
64    /**
65     * Clear all IP addresses on the specified interface
66     */
67    void clearInterfaceAddresses(String iface);
68
69    /**
70     * Set interface down
71     */
72    void setInterfaceDown(String iface);
73
74    /**
75     * Set interface up
76     */
77    void setInterfaceUp(String iface);
78
79    /**
80     * Set interface IPv6 privacy extensions
81     */
82    void setInterfaceIpv6PrivacyExtensions(String iface, boolean enable);
83
84    /**
85     * Disable IPv6 on an interface
86     */
87    void disableIpv6(String iface);
88
89    /**
90     * Enable IPv6 on an interface
91     */
92    void enableIpv6(String iface);
93
94    /**
95     * Enables or enables IPv6 ND offload.
96     */
97    void setInterfaceIpv6NdOffload(String iface, boolean enable);
98
99    /**
100     * Retrieves the network routes currently configured on the specified
101     * interface
102     */
103    RouteInfo[] getRoutes(String iface);
104
105    /**
106     * Add the specified route to the interface.
107     */
108    void addRoute(int netId, in RouteInfo route);
109
110    /**
111     * Remove the specified route from the interface.
112     */
113    void removeRoute(int netId, in RouteInfo route);
114
115    /**
116     * Set the specified MTU size
117     */
118    void setMtu(String iface, int mtu);
119
120    /**
121     * Shuts down the service
122     */
123    void shutdown();
124
125    /**
126     ** TETHERING RELATED
127     **/
128
129    /**
130     * Returns true if IP forwarding is enabled
131     */
132    boolean getIpForwardingEnabled();
133
134    /**
135     * Enables/Disables IP Forwarding
136     */
137    void setIpForwardingEnabled(boolean enabled);
138
139    /**
140     * Start tethering services with the specified dhcp server range
141     * arg is a set of start end pairs defining the ranges.
142     */
143    void startTethering(in String[] dhcpRanges);
144
145    /**
146     * Stop currently running tethering services
147     */
148    void stopTethering();
149
150    /**
151     * Returns true if tethering services are started
152     */
153    boolean isTetheringStarted();
154
155    /**
156     * Tethers the specified interface
157     */
158    void tetherInterface(String iface);
159
160    /**
161     * Untethers the specified interface
162     */
163    void untetherInterface(String iface);
164
165    /**
166     * Returns a list of currently tethered interfaces
167     */
168    String[] listTetheredInterfaces();
169
170    /**
171     * Sets the list of DNS forwarders (in order of priority)
172     */
173    void setDnsForwarders(in Network network, in String[] dns);
174
175    /**
176     * Returns the list of DNS forwarders (in order of priority)
177     */
178    String[] getDnsForwarders();
179
180    /**
181     *  Enables Network Address Translation between two interfaces.
182     *  The address and netmask of the external interface is used for
183     *  the NAT'ed network.
184     */
185    void enableNat(String internalInterface, String externalInterface);
186
187    /**
188     *  Disables Network Address Translation between two interfaces.
189     */
190    void disableNat(String internalInterface, String externalInterface);
191
192    /**
193     ** PPPD
194     **/
195
196    /**
197     * Returns the list of currently known TTY devices on the system
198     */
199    String[] listTtys();
200
201    /**
202     * Attaches a PPP server daemon to the specified TTY with the specified
203     * local/remote addresses.
204     */
205    void attachPppd(String tty, String localAddr, String remoteAddr, String dns1Addr,
206            String dns2Addr);
207
208    /**
209     * Detaches a PPP server daemon from the specified TTY.
210     */
211    void detachPppd(String tty);
212
213    /**
214     * Load firmware for operation in the given mode. Currently the three
215     * modes supported are "AP", "STA" and "P2P".
216     */
217    void wifiFirmwareReload(String wlanIface, String mode);
218
219    /**
220     * Start Wifi Access Point
221     */
222    void startAccessPoint(in WifiConfiguration wifiConfig, String iface);
223
224    /**
225     * Stop Wifi Access Point
226     */
227    void stopAccessPoint(String iface);
228
229    /**
230     * Set Access Point config
231     */
232    void setAccessPoint(in WifiConfiguration wifiConfig, String iface);
233
234    /**
235     ** DATA USAGE RELATED
236     **/
237
238    /**
239     * Return global network statistics summarized at an interface level,
240     * without any UID-level granularity.
241     */
242    NetworkStats getNetworkStatsSummaryDev();
243    NetworkStats getNetworkStatsSummaryXt();
244
245    /**
246     * Return detailed network statistics with UID-level granularity,
247     * including interface and tag details.
248     */
249    NetworkStats getNetworkStatsDetail();
250
251    /**
252     * Return detailed network statistics for the requested UID,
253     * including interface and tag details.
254     */
255    NetworkStats getNetworkStatsUidDetail(int uid);
256
257    /**
258     * Return summary of network statistics all tethering interfaces.
259     */
260    NetworkStats getNetworkStatsTethering();
261
262    /**
263     * Set quota for an interface.
264     */
265    void setInterfaceQuota(String iface, long quotaBytes);
266
267    /**
268     * Remove quota for an interface.
269     */
270    void removeInterfaceQuota(String iface);
271
272    /**
273     * Set alert for an interface; requires that iface already has quota.
274     */
275    void setInterfaceAlert(String iface, long alertBytes);
276
277    /**
278     * Remove alert for an interface.
279     */
280    void removeInterfaceAlert(String iface);
281
282    /**
283     * Set alert across all interfaces.
284     */
285    void setGlobalAlert(long alertBytes);
286
287    /**
288     * Control network activity of a UID over interfaces with a quota limit.
289     */
290    void setUidNetworkRules(int uid, boolean rejectOnQuotaInterfaces);
291
292    /**
293     * Return status of bandwidth control module.
294     */
295    boolean isBandwidthControlEnabled();
296
297    /**
298     * Sets idletimer for an interface.
299     *
300     * This either initializes a new idletimer or increases its
301     * reference-counting if an idletimer already exists for given
302     * {@code iface}.
303     *
304     * {@code type} is the type of the interface, such as TYPE_MOBILE.
305     *
306     * Every {@code addIdleTimer} should be paired with a
307     * {@link removeIdleTimer} to cleanup when the network disconnects.
308     */
309    void addIdleTimer(String iface, int timeout, int type);
310
311    /**
312     * Removes idletimer for an interface.
313     */
314    void removeIdleTimer(String iface);
315
316    /**
317     * Bind name servers to a network in the DNS resolver.
318     */
319    void setDnsServersForNetwork(int netId, in String[] servers, String domains);
320
321    /**
322     * Flush the DNS cache associated with the specified network.
323     */
324    void flushNetworkDnsCache(int netId);
325
326    void setFirewallEnabled(boolean enabled);
327    boolean isFirewallEnabled();
328    void setFirewallInterfaceRule(String iface, boolean allow);
329    void setFirewallEgressSourceRule(String addr, boolean allow);
330    void setFirewallEgressDestRule(String addr, int port, boolean allow);
331    void setFirewallUidRule(int uid, boolean allow);
332
333    /**
334     * Set all packets from users in ranges to go through VPN specified by netId.
335     */
336    void addVpnUidRanges(int netId, in UidRange[] ranges);
337
338    /**
339     * Clears the special VPN rules for users in ranges and VPN specified by netId.
340     */
341    void removeVpnUidRanges(int netId, in UidRange[] ranges);
342
343    /**
344     * Start the clatd (464xlat) service on the given interface.
345     */
346    void startClatd(String interfaceName);
347
348    /**
349     * Stop the clatd (464xlat) service on the given interface.
350     */
351    void stopClatd(String interfaceName);
352
353    /**
354     * Determine whether the clatd (464xlat) service has been started on the given interface.
355     */
356    boolean isClatdStarted(String interfaceName);
357
358    /**
359     * Start listening for mobile activity state changes.
360     */
361    void registerNetworkActivityListener(INetworkActivityListener listener);
362
363    /**
364     * Stop listening for mobile activity state changes.
365     */
366    void unregisterNetworkActivityListener(INetworkActivityListener listener);
367
368    /**
369     * Check whether the mobile radio is currently active.
370     */
371    boolean isNetworkActive();
372
373    /**
374     * Setup a new physical network.
375     */
376    void createPhysicalNetwork(int netId);
377
378    /**
379     * Setup a new VPN.
380     */
381    void createVirtualNetwork(int netId, boolean hasDNS, boolean secure);
382
383    /**
384     * Remove a network.
385     */
386    void removeNetwork(int netId);
387
388    /**
389     * Add an interface to a network.
390     */
391    void addInterfaceToNetwork(String iface, int netId);
392
393    /**
394     * Remove an Interface from a network.
395     */
396    void removeInterfaceFromNetwork(String iface, int netId);
397
398    void addLegacyRouteForNetId(int netId, in RouteInfo routeInfo, int uid);
399
400    void setDefaultNetId(int netId);
401    void clearDefaultNetId();
402
403    void setPermission(String permission, in int[] uids);
404    void clearPermission(in int[] uids);
405
406    /**
407     * Allow UID to call protect().
408     */
409    void allowProtect(int uid);
410
411    /**
412     * Deny UID from calling protect().
413     */
414    void denyProtect(int uid);
415
416    void addInterfaceToLocalNetwork(String iface, in List<RouteInfo> routes);
417    void removeInterfaceFromLocalNetwork(String iface);
418}
419