blob: 51c367a43ede26d8484b224b8c568913e3523ad9 [file] [log] [blame]
San Mehat873f2142010-01-14 10:25:07 -08001/* //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
San Mehated4fc8a2010-01-22 12:28:36 -080020import android.net.InterfaceConfiguration;
San Mehat4d02d002010-01-22 16:07:46 -080021import android.net.INetworkManagementEventObserver;
Jeff Sharkey9a13f362011-04-26 16:25:36 -070022import android.net.NetworkStats;
Robert Greenwalt59b1a4e2011-05-10 15:05:02 -070023import android.net.RouteInfo;
Irfan Sheriff9ab518ad2010-03-12 15:48:17 -080024import android.net.wifi.WifiConfiguration;
San Mehated4fc8a2010-01-22 12:28:36 -080025
San Mehat873f2142010-01-14 10:25:07 -080026/**
27 * @hide
28 */
29interface INetworkManagementService
30{
31 /**
32 ** GENERAL
33 **/
34
35 /**
San Mehat4d02d002010-01-22 16:07:46 -080036 * 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 /**
San Mehat873f2142010-01-14 10:25:07 -080046 * Returns a list of currently known network interfaces
47 */
48 String[] listInterfaces();
49
50 /**
San Mehated4fc8a2010-01-22 12:28:36 -080051 * 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 /**
Irfan Sherifff5600612011-06-16 10:26:28 -070062 * Clear all IP addresses on the specified interface
63 */
64 void clearInterfaceAddresses(String iface);
65
66 /**
Irfan Sheriff7244c972011-08-05 20:40:45 -070067 * Set interface down
68 */
69 void setInterfaceDown(String iface);
70
71 /**
72 * Set interface up
73 */
74 void setInterfaceUp(String iface);
75
76 /**
Irfan Sheriff73293612011-09-14 12:31:56 -070077 * Set interface IPv6 privacy extensions
78 */
79 void setInterfaceIpv6PrivacyExtensions(String iface, boolean enable);
80
81 /**
repo sync7960d9f2011-09-29 12:40:02 -070082 * 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 /**
Robert Greenwalt59b1a4e2011-05-10 15:05:02 -070092 * 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 /**
Robert Greenwalt3b28e9a2011-11-02 14:37:19 -0700108 * 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 /**
San Mehat873f2142010-01-14 10:25:07 -0800120 * Shuts down the service
121 */
122 void shutdown();
123
124 /**
125 ** TETHERING RELATED
126 **/
127
San Mehat873f2142010-01-14 10:25:07 -0800128 /**
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
Robert Greenwaltbfb7bfa2010-03-24 16:03:21 -0700140 * arg is a set of start end pairs defining the ranges.
San Mehat873f2142010-01-14 10:25:07 -0800141 */
Robert Greenwaltbfb7bfa2010-03-24 16:03:21 -0700142 void startTethering(in String[] dhcpRanges);
San Mehat873f2142010-01-14 10:25:07 -0800143
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 * Tethers the specified interface
156 */
157 void tetherInterface(String iface);
158
159 /**
160 * Untethers the specified interface
161 */
162 void untetherInterface(String iface);
163
164 /**
165 * Returns a list of currently tethered interfaces
166 */
167 String[] listTetheredInterfaces();
168
169 /**
170 * Sets the list of DNS forwarders (in order of priority)
171 */
172 void setDnsForwarders(in String[] dns);
173
174 /**
175 * Returns the list of DNS fowarders (in order of priority)
176 */
177 String[] getDnsForwarders();
178
179 /**
180 * Enables Network Address Translation between two interfaces.
181 * The address and netmask of the external interface is used for
182 * the NAT'ed network.
183 */
184 void enableNat(String internalInterface, String externalInterface);
185
186 /**
187 * Disables Network Address Translation between two interfaces.
188 */
189 void disableNat(String internalInterface, String externalInterface);
San Mehat72759df2010-01-19 13:50:37 -0800190
191 /**
192 ** PPPD
193 **/
194
195 /**
196 * Returns the list of currently known TTY devices on the system
197 */
198 String[] listTtys();
199
200 /**
201 * Attaches a PPP server daemon to the specified TTY with the specified
202 * local/remote addresses.
203 */
Robert Greenwaltd0e18ff2010-01-26 11:40:34 -0800204 void attachPppd(String tty, String localAddr, String remoteAddr, String dns1Addr,
205 String dns2Addr);
San Mehat72759df2010-01-19 13:50:37 -0800206
207 /**
208 * Detaches a PPP server daemon from the specified TTY.
209 */
210 void detachPppd(String tty);
211
Robert Greenwaltce1200d2010-02-18 11:25:54 -0800212 /**
Irfan Sheriffcb30b222011-07-29 20:54:52 -0700213 * Load firmware for operation in the given mode. Currently the three
214 * modes supported are "AP", "STA" and "P2P".
215 */
216 void wifiFirmwareReload(String wlanIface, String mode);
217
218 /**
Irfan Sheriff5321aef2010-02-12 12:35:59 -0800219 * Start Wifi Access Point
220 */
Irfan Sheriff90542752012-06-19 15:44:35 -0700221 void startAccessPoint(in WifiConfiguration wifiConfig, String iface);
Irfan Sheriff5321aef2010-02-12 12:35:59 -0800222
223 /**
224 * Stop Wifi Access Point
225 */
Irfan Sheriff90542752012-06-19 15:44:35 -0700226 void stopAccessPoint(String iface);
Irfan Sheriff5321aef2010-02-12 12:35:59 -0800227
Irfan Sheriffc2f54c22010-03-18 14:02:22 -0700228 /**
229 * Set Access Point config
230 */
Irfan Sheriff90542752012-06-19 15:44:35 -0700231 void setAccessPoint(in WifiConfiguration wifiConfig, String iface);
San Mehat91cac642010-03-31 14:31:36 -0700232
233 /**
Jeff Sharkey9a13f362011-04-26 16:25:36 -0700234 ** DATA USAGE RELATED
235 **/
San Mehat91cac642010-03-31 14:31:36 -0700236
237 /**
Jeff Sharkey9a13f362011-04-26 16:25:36 -0700238 * Return global network statistics summarized at an interface level,
239 * without any UID-level granularity.
San Mehat91cac642010-03-31 14:31:36 -0700240 */
Jeff Sharkeye8914c32012-05-01 16:26:09 -0700241 NetworkStats getNetworkStatsSummaryDev();
242 NetworkStats getNetworkStatsSummaryXt();
San Mehat91cac642010-03-31 14:31:36 -0700243
244 /**
Jeff Sharkey9a13f362011-04-26 16:25:36 -0700245 * Return detailed network statistics with UID-level granularity,
246 * including interface and tag details.
247 */
248 NetworkStats getNetworkStatsDetail();
249
250 /**
Jeff Sharkeyeedcb952011-05-17 14:55:15 -0700251 * Return detailed network statistics for the requested UID,
252 * including interface and tag details.
253 */
254 NetworkStats getNetworkStatsUidDetail(int uid);
255
256 /**
Jeff Sharkeycdd02c5d2011-09-16 01:52:49 -0700257 * Return summary of network statistics for the requested pairs of
258 * tethering interfaces. Even indexes are remote interface, and odd
259 * indexes are corresponding local interfaces.
260 */
261 NetworkStats getNetworkStatsTethering(in String[] ifacePairs);
262
263 /**
Jeff Sharkeyb3f19ca2011-06-29 23:54:13 -0700264 * Set quota for an interface.
Ashish Sharma50fd36d2011-06-15 19:34:53 -0700265 */
Jeff Sharkey41ff7ec2011-07-25 15:21:22 -0700266 void setInterfaceQuota(String iface, long quotaBytes);
Jeff Sharkeyb3f19ca2011-06-29 23:54:13 -0700267
268 /**
269 * Remove quota for an interface.
270 */
271 void removeInterfaceQuota(String iface);
Ashish Sharma50fd36d2011-06-15 19:34:53 -0700272
273 /**
Jeff Sharkey41ff7ec2011-07-25 15:21:22 -0700274 * Set alert for an interface; requires that iface already has quota.
275 */
276 void setInterfaceAlert(String iface, long alertBytes);
277
278 /**
279 * Remove alert for an interface.
280 */
281 void removeInterfaceAlert(String iface);
282
283 /**
284 * Set alert across all interfaces.
285 */
286 void setGlobalAlert(long alertBytes);
287
288 /**
Ashish Sharma50fd36d2011-06-15 19:34:53 -0700289 * Control network activity of a UID over interfaces with a quota limit.
290 */
291 void setUidNetworkRules(int uid, boolean rejectOnQuotaInterfaces);
292
293 /**
Jeff Sharkey63d27a92011-08-03 17:04:22 -0700294 * Return status of bandwidth control module.
295 */
296 boolean isBandwidthControlEnabled();
297
298 /**
Haoyu Bai04124232012-06-28 15:26:19 -0700299 * Sets idletimer for an interface.
300 *
301 * This either initializes a new idletimer or increases its
302 * reference-counting if an idletimer already exists for given
303 * {@code iface}.
304 *
305 * {@code label} usually represents the network type of {@code iface}.
306 * Caller should ensure that {@code label} for an {@code iface} remains the
307 * same for all calls to addIdleTimer.
308 *
309 * Every {@code addIdleTimer} should be paired with a
310 * {@link removeIdleTimer} to cleanup when the network disconnects.
311 */
312 void addIdleTimer(String iface, int timeout, String label);
313
314 /**
315 * Removes idletimer for an interface.
316 */
317 void removeIdleTimer(String iface);
318
319 /**
Mattias Falk7475c0c2011-04-04 16:10:36 +0200320 * Sets the name of the default interface in the DNS resolver.
321 */
322 void setDefaultInterfaceForDns(String iface);
323
324 /**
325 * Bind name servers to an interface in the DNS resolver.
326 */
Robert Greenwalt8058f622012-11-09 10:52:27 -0800327 void setDnsServersForInterface(String iface, in String[] servers, String domains);
Mattias Falk7475c0c2011-04-04 16:10:36 +0200328
329 /**
Robert Greenwalt572b7042011-07-25 17:00:13 -0700330 * Flush the DNS cache associated with the default interface.
Mattias Falk7475c0c2011-04-04 16:10:36 +0200331 */
332 void flushDefaultDnsCache();
333
334 /**
Robert Greenwalt572b7042011-07-25 17:00:13 -0700335 * Flush the DNS cache associated with the specified interface.
Mattias Falk7475c0c2011-04-04 16:10:36 +0200336 */
337 void flushInterfaceDnsCache(String iface);
Jeff Sharkeyc268f0b2012-08-24 10:25:31 -0700338
339 void setFirewallEnabled(boolean enabled);
340 boolean isFirewallEnabled();
Jeff Sharkey2c092982012-08-24 11:44:40 -0700341 void setFirewallInterfaceRule(String iface, boolean allow);
342 void setFirewallEgressSourceRule(String addr, boolean allow);
343 void setFirewallEgressDestRule(String addr, int port, boolean allow);
344 void setFirewallUidRule(int uid, boolean allow);
Mattias Falk8b47b362011-08-23 14:15:13 +0200345
346 /**
Chad Brubaker3277620a2013-06-12 13:37:30 -0700347 * Set all packets from users [uid_start,uid_end] to go through interface iface
348 * iface must already be set for marked forwarding by {@link setMarkedForwarding}
349 */
350 void setUidRangeRoute(String iface, int uid_start, int uid_end);
351
352 /**
353 * Clears the special routing rules for users [uid_start,uid_end]
354 */
355 void clearUidRangeRoute(String iface, int uid_start, int uid_end);
356
357 /**
358 * Setup an interface for routing packets marked by {@link setUidRangeRoute}
359 *
360 * This sets up a dedicated routing table for packets marked for {@code iface} and adds
361 * source-NAT rules so that the marked packets have the correct source address.
362 */
363 void setMarkedForwarding(String iface);
364
365 /**
366 * Removes marked forwarding for an interface
367 */
368 void clearMarkedForwarding(String iface);
369
370 /**
Chad Brubakercca54c42013-06-27 17:41:38 -0700371 * Get the SO_MARK associated with routing packets for user {@code uid}
372 */
373 int getMarkForUid(int uid);
374
375 /**
376 * Get the SO_MARK associated with protecting packets from VPN routing rules
377 */
378 int getMarkForProtect();
379
380 /**
381 * Route all traffic in {@code route} to {@code iface} setup for marked forwarding
382 */
383 void setMarkedForwardingRoute(String iface, in RouteInfo route);
384
385 /**
386 * Clear routes set by {@link setMarkedForwardingRoute}
387 */
388 void clearMarkedForwardingRoute(String iface, in RouteInfo route);
389
390 /**
Mattias Falk8b47b362011-08-23 14:15:13 +0200391 * Set a process (pid) to use the name servers associated with the specified interface.
392 */
393 void setDnsInterfaceForPid(String iface, int pid);
394
395 /**
396 * Clear a process (pid) from being associated with an interface.
397 */
398 void clearDnsInterfaceForPid(int pid);
Lorenzo Colitti79751842013-02-28 16:16:03 +0900399
400 /**
Chad Brubaker3277620a2013-06-12 13:37:30 -0700401 * Set a range of user ids to use the name servers associated with the specified interface.
402 */
403 void setDnsInterfaceForUidRange(String iface, int uid_start, int uid_end);
404
405 /**
406 * Clear a user range from being associated with an interface.
407 */
408 void clearDnsInterfaceForUidRange(int uid_start, int uid_end);
409
410 /**
411 * Clear the mappings from pid to Dns interface and from uid range to Dns interface.
412 */
413 void clearDnsInterfaceMaps();
414
415 /**
Lorenzo Colitti79751842013-02-28 16:16:03 +0900416 * Start the clatd (464xlat) service
417 */
418 void startClatd(String interfaceName);
419
420 /**
421 * Stop the clatd (464xlat) service
422 */
423 void stopClatd();
424
425 /**
426 * Determine whether the clatd (464xlat) service has been started
427 */
428 boolean isClatdStarted();
San Mehat873f2142010-01-14 10:25:07 -0800429}